我尝试在包含两个标签的状态栏中显示备忘录插入符号的位置。
我试过这个:
lblX.Text := Memo.Caret.Pos.X.ToString();
lblY.Text := Memo.Caret.Pos.Y.ToString();
这两个值似乎代表了备忘录左侧和顶部的实际位置。
是否可以将其作为行(行)和列(字符)?
我想澄清一下,我使用firemonkey是为了能够将我的项目编译到 windows 和 linux 上。
谢谢你的回答。
塞尔蒂奇克。
我尝试在包含两个标签的状态栏中显示备忘录插入符号的位置。
我试过这个:
lblX.Text := Memo.Caret.Pos.X.ToString();
lblY.Text := Memo.Caret.Pos.Y.ToString();
这两个值似乎代表了备忘录左侧和顶部的实际位置。
是否可以将其作为行(行)和列(字符)?
我想澄清一下,我使用firemonkey是为了能够将我的项目编译到 windows 和 linux 上。
谢谢你的回答。
塞尔蒂奇克。
我以前从未使用过 FMX,但使用 Code Insight 我立即发现Memo.CaretPosition.Line
并Memo.CaretPosition.Pos
分别表示当前行和列。
文件证实了这一点:
Line
表示包含光标的行号,从零开始索引。
Pos
表示光标的水平字符坐标,从零开始索引。[...]
因此,如果
Line = 3
和Pos = 5
,则光标位于第四行和从行首开始的第六个字符处。
如果要显示备忘录插入符号的位置,可以使用如下代码:
procedure TForm1.UpdateCaretPosDisplay;
begin
lblX.Text := (Memo1.CaretPosition.Pos + 1).ToString;
lblY.Text := (Memo1.CaretPosition.Line + 1).ToString;
end;
如果您想要一个完整的示例代码,其中该方法在正确的事件处理程序中调用,这里是:
unit FmxMemoCaretPosDemoMain;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo;
type
TForm1 = class(TForm)
Memo1: TMemo;
StatusBar1: TStatusBar;
lblX: TLabel;
lblY: TLabel;
procedure FormCreate(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure Memo1Enter(Sender: TObject);
procedure Memo1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift:
TShiftState);
procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton; Shift:
TShiftState; X, Y: Single);
private
procedure UpdateCaretPosDisplay;
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
begin
UpdateCaretPosDisplay;
ActiveControl := Memo1;
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
UpdateCaretPosDisplay;
end;
procedure TForm1.Memo1Enter(Sender: TObject);
begin
UpdateCaretPosDisplay;
end;
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
Shift: TShiftState);
begin
UpdateCaretPosDisplay;
end;
procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton; Shift:
TShiftState; X, Y: Single);
begin
UpdateCaretPosDisplay;
end;
procedure TForm1.UpdateCaretPosDisplay;
begin
lblX.Text := (Memo1.CaretPosition.Pos + 1).ToString;
lblY.Text := (Memo1.CaretPosition.Line + 1).ToString;
end;
end.