先日、某掲示板の質問に回答するためにMemoコンポーネントとRichEditコンポーネント
のカーソル関連の処理を調べたので、簡単にまとめます。
選択している文字
SelStartプロパティは選択されている文字の位置を示します。
SelLengthプロパティは選択している文字の数を示します。
SelTextプロパティは選択している文字を示します。
//選択状態を設定する
Memo1->SelStart = 2;
Memo1->SelLength = 4;
//選択している文字の情報を取得する
ShowMessage(IntToStr(Memo1->SelStart) + "文字目から" + IntToStr(Memo1->SelLength) + "文字選択しています");
ShowMessage("選択している文字は「" + Memo1->SelText + "」です");
現在のカーソル位置の行番号を取得する
カーソルがある行の行番号を取得するにはEM_LINEFROMCHARメッセージを使用します。
行番号は0から始まります。
int currentRowNumber = Memo1->Perform(EM_LINEFROMCHAR, -1, 0);
ShowMessage(IntToStr(currentRowNumber));
可視領域の一番上の行を取得する
可視領域の一番上の行を取得するにはEM_GETFIRSTVISIBLELINEメッセージを使用します。
行番号は0から始まります。
int row = RichEdit1->Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
ShowMessage("可視領域の先頭行は「" + IntToStr(row) + "」行目です");
スクロールする
一行下にスクロールする
Memo1->Perform(EM_SCROLL, SB_LINEDOWN, 0);
一行上にスクロールする
Memo1->Perform(EM_SCROLL, SB_LINEUP, 0);
一ページ下にスクロールする
Memo1->Perform(EM_SCROLL, SB_PAGEDOWN, 0);
一ページ上にスクロールする
Memo1->Perform(EM_SCROLL, SB_PAGEUP, 0);
指定した行数だけスクロールする
int row = 移動する行数(負数なら上に、正数なら下にスクロール);
Memo1->Perform(EM_LINESCROLL, 0, row);
Pingback: Memoコンポーネントの行をスクロールする - 山本隆の開発日誌