2016-09-03 38 views
3

我已經在GitHub上發佈了這個作爲an issue on RRUZ's Vcl Style Utils庫。不過,我想我也可以在這裏得到一些幫助。Vcl樣式實用工具 - 擺脫默認窗體圖標

我正在使用VCL樣式創建Windows 10用戶界面,特別是使用「Windows 10 Dark」樣式。我還使用VCL Style Utils可以將按鈕添加到標題欄中的非客戶端區域。我試圖完全忽視表單圖標及其默認功能,以支持後退按鈕,就像大多數新的Windows 10應用程序一樣。

我試圖在窗體的最左上角放置一個按鈕,使用Vcl.Styles.NC中的TNCControls組件。但是,當我將一個按鈕放在窗體的圖標上時,該按鈕無法在圖標區域中單擊。儘管我可以重疊圖標,但單擊標題欄的特定區域將始終打開表單的系統菜單,而不是單擊放置在該處的按鈕。

點擊那裏,當我不爲這個菜單要彈出:

Form System Menu

如何我目前正在創建這個按鈕:

procedure TfrmTestMain.SetupTitleBar; 
var 
    B: TNCButton; 
begin 
    FNCControls:= TNCControls.Create(Self); 
    B:= FNCControls.ButtonsList.Add; 
    B.Style := TNCButton.TNCButtonStyle.nsTranparent; 
    B.BoundsRect := Rect(0, 0, 45, 32); 
    B.UseFontAwesome:= True; 
    B.Caption := ''; 
    B.ImageAlignment:= TImageAlignment.iaCenter; 
    B.ImageStyle:= TNCButton.TNCImageStyle.isNormal; 
    B.ImageIndex:= fa_chevron_left; 
end; 

我到目前爲止已經試過:

  1. 用完全空的.ico文件替換表單的圖標。

  2. 將窗體樣式更改爲bsSizeToolWin,但標題欄變得太小,而我失去了最小化/最大化按鈕。

  3. 將窗體樣式更改爲bsDialog,但獲得與上面#2相同的效果,以及無法調整窗體大小。

  4. 確認按鈕樣式是nsPushButton,雖然它覆蓋了窗體圖標,但點擊該區域仍會單擊該圖標,該圖標依次顯示默認系統菜單。

  5. 以下everything in this thread,但結論是,Windows迫使你有這個圖標。

  6. 從窗體的BorderIcons屬性中刪除biSystemMenu,但是這也刪除了窗體右上角的默認按鈕,迫使我將自己的系統按鈕放在那裏。

如何完全消除表單圖標及其默認功能,以支持我的Windows 10樣式的後退按鈕?

+2

我不知道的款式,但是通常你應該能夠關閉系統菜單中BorderIcons從而擺脫圖標,系統菜單和標題按鈕。 –

+0

我以爲在BorderIcons中關閉'biSystemMenu'可以工作,但由於某種原因,在柏林它也會刪除最小化,最大化和關閉按鈕。不知道什麼時候這被打破。 –

+0

@Ken,這是標準的api行爲,標題按鈕需要ws_sysmenu。 –

回答

5

TNCControls組件包括ShowSystemMenu屬性。如果您將該值設置爲false,則系統菜單將不會顯示。

試試這個

uses 
Vcl.Styles.Utils.Graphics; 

procedure TfrmTestMain.FormCreate(Sender: TObject); 
begin 
SetupTitleBar; 
end; 

procedure TfrmTestMain.NCClick(Sender: TObject); 
begin 
    ShowMessage('Hello'); 
end; 

procedure TfrmTestMain.SetupTitleBar; 
var 
    B: TNCButton; 
begin 
    FNCControls:= TNCControls.Create(Self); 
    FNCControls.ShowSystemMenu := False; //Disable the system menu. 

    B := FNCControls.ButtonsList.Add; 
    B.Style := TNCButton.TNCButtonStyle.nsTranparent; 
    B.BoundsRect := Rect(0, 0, 45, 32); 
    B.UseFontAwesome:= True; 
    B.Caption := ''; 
    B.ImageAlignment:= TImageAlignment.iaCenter; 
    B.ImageStyle:= TNCButton.TNCImageStyle.isNormal; 
    B.ImageIndex:= fa_chevron_left; 
    B.OnClick := NCClick; 
end;