2013-08-19 43 views
3

使用VCL樣式時,有沒有像常規Windows 7窗體一樣顯示窗口陰影的方法?使用VCL樣式時顯示窗口陰影

我知道樣式中的位圖和設置會替換表單邊框,但不是陰影是某種受風格影響的區域之外的alpha混合/空氣樣物體?

將CS_DROPSHADOW添加到WindowClass.Style似乎沒有效果。

+0

的CS_DROPSHADOW工作對我來說,你能告訴你所使用的代碼? – RRUZ

回答

5

使用CS_DROPSHADOW風格正常工作使用

type 
    TMyForm = class(TForm) 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

procedure TMyForm.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    with Params do 
    WindowClass.Style := WindowClass.Style or CS_DROPSHADOW; 
end; 

enter image description here

+1

針對CS_DROPSHADOW delphi的網絡搜索揭示了許多患有此問題的人,並且它與VCL樣式無關。在我看來,這裏有一個問題,儘管很難重現。另外:是不是在Windows.pas中定義了CS_DROPSHADOW? –

+0

有區別。 CS_DROPSHADOW正常工作,確定。但是當我在圖片的表格附近放置一個沒有陰影的非空白陰影 - 即一張空白的表格時,我發現它的影子會更加分散。我不知道,但問題可能就在於此。 –

+0

如果您正在討論由DWM繪製的陰影,則無法顯示它,因爲表單樣式鉤子使用'SetWindowRgn'函數,這與dwm不能很好地協作並禁用陰影效果效果。 – RRUZ