−トップへ−

エディトコンポーネントのセルのコントロール

 エディトコンポーネントは,短い文章などを入力するときに使うコンポーネントですが,文章を入力するときにセルが表示されます。そのセルをコントロールする方法を紹介します。
 
 まず,フォームに「Edit」と「Button」を貼り付けます。
 
 次に,Button1Clickイベントハンドラを呼び出し,以下のように記述します。

 procedure TForm1.Button1Click(Sender: TObject);
 begin
  edit1.SetFocus;
 end;

 これを実行し,エディトコンポーネントに適当な文字を入力した後ボタンを押すと,エディトコンポーネントに入力した文字全体が選択された状態になります。
 
 上の「edit1.SetFocus;」の部分を下のように変えてみます。

 procedure TForm1.Button1Click(Sender: TObject);
 begin
  edit1.SetFocus;
  edit1.Selstart:=0;
 end;

 すると,セルが先頭に来ていることがわかります。
 
 この「edit1.Selstart」の値を1にすると,1文字目の後にセルが来て,2にすると2文字目の後にセルが来ます。
 もし最後尾にセルを持ってきたいときは,
  edit1.Selstart:=length(edit1.Text);
  または
  edit1.SelStart:=100;//数字はエディトコンポーネントに入力する文字数より大きければいくつでもいいです。
 
 
 また,下のように記述すると文字列の一部を選択することもできます。

 procedure TForm1.Button1Click(Sender: TObject);
 begin
  edit1.SetFocus;
  edit1.Selstart:=5;
  edit1.SelLength:=3;
 end;

 上記のコードを実行すると,エディトコンポーネントの5文字目の後(6文字目)から3文字選択された状態になります。
 
 これは,「memo」コンポーネントでも同じように使うことができます。
 
 
 次に上記のことを使って検索プログラムを考えてみたいと思います。
 まず,フォームに「memo」コンポーネントを貼り付け下のようにしてみます。
 
そしてButton1Clickイベントハンドに以下のように記述してみます。

 private
 { Private 宣言 }
  sel:integer; //検索する位置を保存するための変数を宣言
 public
 { Public 宣言 }
 end;
 
 ・
 ・
 ・
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
  i:integer; //iを整数宣言
 begin
  for i:=sel to length(memo1.Text) do begin //memo1の文章全体を検索
   if copy(memo1.Text,i,length(edit1.Text))=edit1.Text then begin //もしmemo1の中にedit1の文字列がある場合
    memo1.SetFocus; //memo1コンポーネントにフォーカスを合わせる
    memo1.selstart:=i-1; //セルの場所をi-1にして
    memo1.SelLength:=length(edit1.Text); //edit1の文字列の長さ分を選択する
    sel:=i+1; //一致した文字列の次から検索できるようにselの値を設定する
    exit; //プロシージャの終了
   end;
  end;
 end;
 
 
 end.

 これを実行して,memoコンポーネントに適当な文章を入力し,さらにeditコンポーネントに適当な言葉を入力してボタンを押すと,memoコンポ−年に入力された文章を検索して,editコンポーネントの言葉と一致するものがあれば,その部分を選択表示します。
一致した言葉が複数個ある場合は,ボタンを押すごとに次の言葉を順次選択していきます。
 
 
 これを「サンプルプログラム」にして掲載しましたので,興味のある方はご覧ください。

−トップへ−