C++ Builder XE4, 10.2 Tokyo > TMemo > 指定の行が見えるように行を移動する


動作環境
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/28)

TMemoにて指定の行に移動したい。
delphi実装は見つかった。

Expert Commentby:DMN
ID: 5989403・2001-04-05
Another one: works for TMemo, TRichEdit and any other TCustomEdit >descendant...

procedure GotoLineNo(Control:TCustomEdit;LineNo:integer);
begin
Control.SelStart := Control.Perform(EM_LINEINDEX,LineNo,0);
Control.Perform(EM_SCROLLCARET,0,0);
end;

Enjoy! :)

C++ Builder実装にした。

Unit1.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int moveTo = 10; // 移動先のインデックス (0始まり)

    Memo1->SelStart = Memo1->Perform(EM_LINEINDEX, moveTo, 0);
    Memo1->Perform(EM_SCROLLCARET,0,0);
}

以下において、スクロール付きのTMemoはMemo1というnameプロパティ。

Memo1のLinesは以下としてみた。

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

実行手順1

  1. 「15」が見えるところまでスクロールする
  2. Button1を押下

以上により「10」が見える行に移動する。

実行手順2

「0」が見える行に移動してからButton1を押した場合は以下となる。

つまりは、例では「10が見えるように移動する」だけであり、「10という行が一番上に来るように移動する」ではない