delphi – 显示提示
发布时间:2020-12-15 04:17:06 所属栏目:大数据 来源:网络整理
导读:我已经在表单上添加了组件提示.当组件获得焦点时,我想设置标签组件的标题以显示提示. 我添加了一个TApplicationEvents对象并将OnShowHint事件设置为 procedure TImportFrm.ApplicationEvents1ShowHint(var HintStr: string; var CanShow: Boolean; var HintI
我已经在表单上添加了组件提示.当组件获得焦点时,我想设置标签组件的标题以显示提示.
我添加了一个TApplicationEvents对象并将OnShowHint事件设置为 procedure TImportFrm.ApplicationEvents1ShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo); begin HelpLbl.Caption := HintStr; end; 但是,似乎ShowHint事件仅在鼠标移动时触发.有没有办法在组件获得焦点时触发提示代码,而不必为表单上的每个组件实现OnEnter事件? 解决方法
在主窗体的创建中为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; 请注意,发件人不会对你有好处;它始终是屏幕.您可以通过测试ActiveControl来过滤(例如,仅更改用于编辑控件的Label.Caption): 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以外的控件,并仅使用您要执行此操作的表单上的提示更改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |