我有一个表单,其中有一个TMemo控件,您可以在其中输入文字,还有另一个TEdit控件,当使用者选取Memo中的文字时,我希望它会自动显示在Edit中。有没有办法不使用计时器就能做到这一点?(实际上,有没有办法可以撷取选取或取消Memo控件中的文字时所发生的事件?)我知道可以使用OnMouseUp和OnKeyUp事件,但这样,Edit将仅在用户完成选择后更新,而不是在选择时更新。
TMemo
TEdit
OnMouseUp
OnKeyUp
bgtovc5b1#
这是我的尝试,在大多数情况下都很有效。也许你可以根据自己的喜好调整它。
type TForm1 = class(TForm) Memo1: TMemo; Edit1: TEdit; procedure Memo1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Memo1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } mouseselectionstarted: boolean; procedure FillText; public { Public declarations } end; var Form1: TForm1; implementation uses System.UITypes; {$R *.dfm} procedure TForm1.FillText; begin Edit1.Text := Memo1.SelText; end; procedure TForm1.FormCreate(Sender: TObject); begin mouseselectionstarted := false; end; procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssShift in Shift) and (Key in [vkLeft, vkUp, vkRight, vkDown]) then FillText; end; procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbLeft) then mouseselectionstarted := true; end; procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if mouseselectionstarted then FillText; end; procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mouseselectionstarted := false; end;
1条答案
按热度按时间bgtovc5b1#
这是我的尝试,在大多数情况下都很有效。也许你可以根据自己的喜好调整它。