選択表示付きで指定の行にジャンプする



サンプルを実行すると下記の図のように30行目にジャンプします。



■必要なコンポーネント

■使用するAPI関数

■ソースは下記のようになります。追加している所は青色です。

30行目にジャンプする処理
procedure TForm1.FormCreate(Sender: TObject);
Var
i : integer;
begin

 //初期設定
 Memo1.Clear;
 Memo1.Lines.Add('0行目 製作 PAPY');

 for i := 1 to 50 do
  Memo1.Lines.Add(inttostr(i)+'行目' + ' こいつはサンプルですよ。');

end;

procedure TForm1.Button1Click(Sender: TObject);
Var
 TopID    :integer; //先頭の行番号
 Jump     :integer; //ジャンプしたい行数
 LineTopID  :integer; //指定行の先頭の文字位置
 EndPostion :integer; //指定行の終了の文字位置
begin

 //ジャンプする行数
 Jump := 30;

 {*指定行にジャンプする処理*}

 //先頭の行番号を取得
 TopID := SendMessage(Memo1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);

 //指定の行にジャンプする
 SendMessage(Memo1.Handle, EM_LINESCROLL, 0, Jump - TopID);


 {*指定行の選択表示処理*}

 //指定行の先頭の文字位置を取得
 LineTopID := SendMessage(Memo1.Handle, EM_LINEINDEX, Jump, 0);

 //指定行の終了の文字位置を取得
 EndPostion := SendMessage(Memo1.Handle, EM_LINEINDEX, (Jump + 1), 0) - 1 ;

 //指定の行を選択する(範囲の指定)
 SendMessage(Memo1.Handle, EM_SETSEL, LineTopID, EndPostion);

 //フォーカスを与える
 Memo1.SetFocus;

end;





Win32APIのページへ



ホーム PV ランキング