我工作的項目包含幾百個表格。 他們大多是從mainform中調用的。應用程序名稱在所有的表單中。試圖抓住一個表格的創建者
現在應用程序的另一個「版本」必須將表單標題更改爲另一個應用程序名稱。但這是有條件的。
我想出什麼樣的主意是有約束力的
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在這裏沒有幫助。 這是一個相當醜陋的做事方式。
我真正想要的是攔截創建的子表單而不是激活。我試圖找到關於這方面的資源,但沒有成功。
要做到這一點是讓所有的形式從一個共同的基礎得出的最佳方式類。然後,您可以從一個位置控制所有表單通用的設置。 – 2012-03-07 12:02:18
經過進一步調查,我認爲它是某種視頻緩衝器錯誤。當我拖動窗口時,標題不會改變並且保持錯誤。除非我把它拖出桌面。當我將其拖回時,未在顯示屏上顯示的部分將更改爲正確的標題,而保持可見的部分仍然存在錯誤。 – 2012-03-07 13:56:15