试图抓住表单的创建

Pie*_*r B 5 delphi delphi-7

我工作的项目包括几百种表格.它们主要来自主体.应用程序名称位于所有表单中.

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

我提出的是绑定

Screen.OnActiveFormChange := ScreenOnActiveFormChange;
Run Code Online (Sandbox Code Playgroud)

在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;
Run Code Online (Sandbox Code Playgroud)

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

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

Jus*_*ade 0

您尝试过使用 window api 吗?

SetWindowText(Screen.ActiveForm.Handle,PChar(SwapFormCaption(Screen.ActiveForm.Caption));
Run Code Online (Sandbox Code Playgroud)

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

DrawMenuBar(Screen.ActiveForm.Handle);
Run Code Online (Sandbox Code Playgroud)