试图抓住表单的创建

时间:2012-03-07 11:59:24

标签: delphi delphi-7

我所从事的项目包括几百种表格。 它们主要来自主体。应用程序名称包含在所有表单中。

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

我想出的是绑定

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在这里没有帮助。 这是一种相当难看的做事方式。

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

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用window api?

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

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

DrawMenuBar(Screen.ActiveForm.Handle);