MemoコンポーネントとRichEditコンポーネントのカーソル関連の処理

先日、某掲示板の質問に回答するために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);

コメント

  1. Pingback: Memoコンポーネントの行をスクロールする - 山本隆の開発日誌

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です