在主窗體的創建在該事件中添加處理程序TScreen.OnActiveControlChange
,並辦理提示:
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;
注意Sender
不會做你多好;它總是Screen
。您可以過濾(例如,僅改變Label.Caption
爲編輯控件)通過測試ActiveControl
:
if (ActiveControl is TEdit) then
// Update caption of label with ActiveControl.Hint
請注意,如果你需要的時候告訴你的孩子的形式(對某個事件重新分配事件子表單),或者您將始終使用提示更新原始表單的標籤。做再分配的最簡單的方法是給每一個形式OnActiveControlChange
處理程序,並在窗體的OnActivate
事件爲它分配和取消其在OnDeactivate
事件:
procedure TForm1.FormActivate(Sender: TObject);
begin
Screen.OnActiveControlChange := Self.ScreenActiveControlChange;
end;
procedure TForm1.FormDeactivate(Sender: TObject);
begin
Screen.OnActiveControlChange := nil;
end;
這將允許您更新比Label1
其它控件每個表單,並且只在你想要的表單上使用提示更改。
你用什麼,VCL或FMX? – Kromster
我使用VCL和XE2。 –