Thêm một handler cho TScreen.OnActiveControlChange
trong việc tạo form chính của bạn, và xử lý các gợi ý trong trường hợp:
type
TForm2=class(TForm)
...
private
procedure ScreenFocusControlChange(Sender: TObject);
end;
implementation
procedure TForm2.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := ScreenFocusControlChange;
end;
procedure TForm2.ScreenFocusControlChange(Sender: TObject);
begin
Label1.Caption := ActiveControl.Hint;
Label1.Update;
end;
Lưu ý rằng Sender
sẽ không làm bạn rất tốt; nó luôn là Screen
. Bạn có thể lọc (ví dụ, chỉ thay đổi Label.Caption
cho chỉnh sửa điều khiển) bằng cách kiểm tra ActiveControl
:
if (ActiveControl is TEdit) then
// Update caption of label with ActiveControl.Hint
Lưu ý rằng nếu bạn sẽ cần phải phân công lại sự kiện khi bạn hiển thị các hình thức con (một sự kiện trên mà dạng con), hoặc bạn sẽ luôn cập nhật nhãn của biểu mẫu gốc với các gợi ý. Cách đơn giản nhất để làm phân công lại là để cho mọi hình thức một handler OnActiveControlChange
, và gán nó trong trường hợp của hình thức OnActivate
và bỏ chỉ định nó trong OnDeactivate
sự kiện:
procedure TForm1.FormActivate(Sender: TObject);
begin
Screen.OnActiveControlChange := Self.ScreenActiveControlChange;
end;
procedure TForm1.FormDeactivate(Sender: TObject);
begin
Screen.OnActiveControlChange := nil;
end;
này sẽ cho phép bạn cập nhật các điều khiển khác hơn Label1
trên mỗi biểu mẫu và chỉ sử dụng các thay đổi gợi ý trên biểu mẫu bạn muốn làm như vậy.
Nguồn
2011-12-13 00:56:21
Bạn sử dụng gì, VCL hoặc FMX? – Kromster
Tôi sử dụng VCL và XE2. –