[英]How to change Form Border to Windows Basic instead of Aero Style?
我想知道是否可能,如果可以,如何將表單邊框樣式更改為Windows Basic而不是Aero主題? 顯然,首先考慮Aero是否啟用,如果不啟用,則無需嘗試更改邊框樣式。
所以代替:
我們會:(模擬圖像)
MDI應用程序已經為子表單執行此操作,但我不想要或不需要MDI應用程序。 我試着查看Vcl.Forms的來源,看看我是否能找到任何相關但我無法 - 我可能是錯的但我實際上認為繪制MDI表單的方式是由Windows而不是Delphi決定的。
DSiWin32包含一些與Aero相關的功能,例如確定Aero是否已啟用,以及能夠啟用和禁用Aero - 但這似乎是系統范圍的更改,而不是每個窗體/窗口基礎,它也導致屏幕延遲,而主題改變,這是不好的。
我不確定在這一點上去哪里。 我可能忽略了一些簡單的事情嗎? 我們是否需要創建和覆蓋我們自己的TForm以及一些特定的標志等來實現這一點,或者可能有一種方法可以在任何時候改變表單樣式,例如為表單啟用/禁用Aero?
簡單地說,我想知道是否可以不使用MDI應用程序,我們是否可以將任何窗體/窗口邊框更改為Windows Basic主題,只要首先啟用Aero?
調用DwmSetWindowAttribute
傳遞DWMWA_NCRENDERING_POLICY
屬性,其值為DWMNCRP_DISABLED
。
type
TForm1 = class(TForm)
protected
procedure CreateWnd; override;
end;
procedure TForm1.CreateWnd;
var
Policy: Integer;
begin
inherited;
Policy := DWMNCRP_DISABLED;
DwmSetWindowAttribute(WindowHandle, DWMWA_NCRENDERING_POLICY, @Policy,
SizeOf(Policy));
end;
我在這里忽略了錯誤檢查。 您可以確定響應錯誤是值得的。 我也沒有做任何測試操作系統是否支持這個函數調用,但如果你需要支持XP,你也可以選擇這樣做。
請注意, CreateWnd
是調用DwmSetWindowAttribute
的正確位置。 窗口句柄是在CreateWnd
創建的,我們希望盡快應用此策略。 將代碼放在CreateWnd
也可以使其在重新創建時更加強大。
普通航空表格:
調用DwmSetWindowAttribute
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.