加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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以外的控件,并仅使用您要执行此操作的表单上的提示更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读