我所从事的项目包括几百种表格。 它们主要来自主体。应用程序名称包含在所有表单中。
现在应用程序的另一个“版本”必须将表单标题更改为另一个应用程序名称。但这是有条件的。
我想出的是绑定
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在这里没有帮助。 这是一种相当难看的做事方式。
我真正想要的是拦截子表单的创建而不是激活。我试图找到相关的资源,但没有成功。
答案 0 :(得分:0)
您是否尝试过使用window api?
SetWindowText(Screen.ActiveForm.Handle,PChar(SwapFormCaption(Screen.ActiveForm.Caption));
编辑: 另外1个建议:添加DrawMenuBar API调用以强制重绘窗口菜单栏
DrawMenuBar(Screen.ActiveForm.Handle);