在開發文字編輯器或日誌檢視器時,常需即時顯示游標所在行號。TMemo 無直接屬性提供此資訊,需透過 Windows 訊息 EM_LINEFROMCHAR 取得。
procedure TMyForm.BitBtn1Click(Sender: TObject);
var
iLine: Integer;
begin
// $FFFF = 當前游標位置;回傳值為 0 基底行號
iLine := Memo1.Perform(EM_LINEFROMCHAR, $FFFF, 0);
ShowMessageFmt('游標位於第 %d 行 (0 基底)', [iLine]);
end;
EM_LINEFROMCHAR:Windows 編輯控件訊息,參數 wParam = $FFFF 表示使用當前游標字元索引+1TRichEdit 等衍生控件procedure TMyForm.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
LineIdx, CharIdx: Integer;
begin
LineIdx := Memo1.Perform(EM_LINEFROMCHAR, $FFFF, 0);
CharIdx := Memo1.SelStart - Memo1.Perform(EM_LINEINDEX, LineIdx, 0);
StatusBar1.Panels[0].Text := Format('行: %d 列: %d', [LineIdx + 1, CharIdx + 1]);
end;