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

delphi – 尝试捕获表单的oncreate

发布时间:2020-12-15 09:45:23 所属栏目:大数据 来源:网络整理
导读:我工作的项目包括几百种表格. 它们主要来自主体.应用程序名称位于所有表单中. 现在应用程序的另一个“版本”必须将表单标题更改为另一个应用程序名称.但这是有条件的. 我提出的是绑定 Screen.OnActiveFormChange := ScreenOnActiveFormChange; 在formcreate
我工作的项目包括几百种表格.
它们主要来自主体.应用程序名称位于所有表单中.

现在应用程序的另一个“版本”必须将表单标题更改为另一个应用程序名称.但这是有条件的.

我提出的是绑定

Screen.OnActiveFormChange := ScreenOnActiveFormChange;

在formcreate中并为此制定程序.

procedure TFormMAIN.ScreenOnActiveFormChange(Sender: TObject);
begin
  if Newversion then begin
    if assigned(screen.activeform) then begin
      Screen.ActiveForm.Caption := SwapFormCaption(Screen.ActiveForm.Caption);
    end;
  end;
end;

这在95%的案例中运作良好.但是在那些5%中,表格显示得太快了.在更新标题之前绘制窗口,窗口将其保留在那里.但标题已经有了新的价值.
有效的补救措施是增加和减少1个像素的表格高度然后它会显示正确. form.repaint在这里没有帮助.
这是一种相当丑陋的做事方式.

我真正想要的是拦截子表单的创建而不是激活.我试图找到相关的资源,但没有成功.

解决方法

你尝试过使用window api吗?

SetWindowText(Screen.ActiveForm.Handle,PChar(SwapFormCaption(Screen.ActiveForm.Caption));

编辑:
另外1个建议:添加DrawMenuBar API调用以强制重绘窗口菜单栏

DrawMenuBar(Screen.ActiveForm.Handle);

(编辑:李大同)

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

    推荐文章
      热点阅读