2012-01-26 27 views
14

這是一個使用firemonkey + Delphi XE2製作的delphi應用程序的示例。使用Firemonkey的Delphi Xe2:您可以使用非默認Windows非客戶端繪製風格以外的樣式繪製非客戶端區域嗎?

正如你所看到的,你可以使用Firemonkey視覺樣式「範本:」定製的大部分事情窗框內出現。然而窗口框架的外部是使用Windows決定的任何樣式繪製的。現在,如果我使用的是VCL而不是Firemonkey,那麼我可以在整個VCL應用程序中以深色配色方案應用「VCL樣式」和「皮膚」。

我的猜測是,這與Delphi XE2 + Firemonkey不兼容。任何人都可以展示如何做到這一點?

enter image description here

在設計時,你該形式的「預覽」顯示了一個漂亮的黑色邊框。但是當我運行我的應用程序時,Windows XP「Luna」主題邊框(下圖中的藍色部分)看起來非常殘酷。諷刺的是,VCL是越漂亮(以XE2與風格),比Firemonkey ...

+0

是。我沒有在Windows框架上找到在運行時應用的任何Firemonkey樣式的視頻,圖像或教程。我想是不可能的,但(或者至少在沒有「忍者」技能) – EMBarbosa

+0

它也似乎是不可能的樣式應用到TMainMenu呢。 –

回答

4

您可以創建一個VCL窗體應用程序像往常一樣,風格,如果你喜歡,在運行時加載你的Firemonkey形式和設置您的VCL形式其父:

uses 
    FMX.Platform.Win, FMX.Forms, 
    Unit2; 

procedure TForm1.FormCreate(Sender: TObject); 
var 
    Form2: TForm2; 
begin 
    Form2 := TForm2.Create(nil); 
    Form2.BorderStyle := FMX.Forms.TFmxFormBorderStyle.bsNone; 
    Form2.SetBounds(0, 0, ClientWidth, ClientHeight); 
    Winapi.Windows.SetParent(FmxHandleToHWND(Form2.Handle), Handle); 
    Form2.Show; 
end; 

在下面的截圖中,Form1的是VCL應用的主要形式(與碳的風格),並與該按鈕的暗灰色區域是嵌入式Firemonkey形式:

Firemonkey form embedded in a VCL form

請注意,我不處理父窗口的大小調整 - 它應該調整emebedd模擬alClient對齊。 似乎有這種方法許多潛在的問題 - 我認爲有一個原因,IDE不會讓你輕鬆與VCL形式混合Firemonkey形式 - 「編譯錯誤或意外行爲」它警告對可能

+1

不錯的主意!也許在未來的Delphi版本中,他們可能會調整VCL樣式的代碼庫,以允許剝離firemonkey應用程序的非客戶區域,至少在Windows上。 –

+1

同意,好主意!只有一個缺點:它不再是Firemonkey應用程序...... – EMBarbosa

+0

這現在在XE3及更高版本中開箱即用。 http://stackoverflow.com/questions/12719749/how-do-you-style-the-non-client-area-in-a-firemonkey-fm2-application-in-delphi-x#comment17182629_12719749 –

0

如果更改表格邊框到bsNone,你可以添加任何你想要的鉻。當然,您將需要手動處理最大化,最小化,關閉,調整大小等操作。

+1

這還沒有起作用,因爲它會從應用程序窗口列表中刪除窗口。 BorderStyle = bsNone也在Windows上設置WS_POPUP。 –

2

Firemonkey是跨平臺的。總的來說,你不能在FMX框架內做任何依賴平臺的事情。但是,您可以調用底層平臺(無論是Windows,OSX還是iOS)來訪問平臺特定的功能。這應該在有條件編譯的代碼中完成。

例如。

{$IF DCC} 
    something; 
{$ENDIF} 

{$IF FPC} 
    somethingelse; 
{$ENDIF} 

從另一個角度看它,爲你做盡在TRectangle(例如)您的FMX工作有可能,然後使用ADDOBJECT(或轉讓其父母),爲VCL形式。

相關問題