2012-01-26 10 views
14

Firemonkey + Delphi XE2 kullanarak yaptığım bir delphi uygulaması örneği.Delphi Xe2: Varsayılan Windows nonclient boya stili dışında bir tarzda boyanmış bir istemci olmayan alanınız var mı?

Gördüğünüz gibi, pencere çerçevesi içindeki çoğu şeyin görünümünü özelleştirmek için Firemonkey'deki "stylebook" görsel stilini kullanabilirsiniz. Bununla birlikte, pencere çerçevesinin dışı, Windows karar verirken hangi stili kullanırsa çizilir. Şimdi Firemonkey yerine VCL kullanıyor olsaydım, koyu renk bir şemada tüm VCL uygulamalarını "VCL Stilleri" ve "cildi" uygulayabilirim.

Tahminimce, bu Delphi XE2 + Firemonkey ile YET DEĞİLDİR. Bunu nasıl yapacaklarını gösterebilir mi? designtime anda

enter image description here

, formunuzun "önizleme" güzel siyah kenarlık gösterir. Ancak, uygulamamı çalıştırdığımda, Windows XP "Luna" tema sınırı (aşağıdaki resimde mavi kısımlar) acımasız görünüyor. İronik olarak, VCL Firemonkey'den daha güzel (stilleri olan XE2'de) ...

+0

Evet. Windows çerçevesine çalışma zamanında uygulanan Firemonkey stilinin video, resim veya öğretici bilgilerini bulamadım. Henüz mümkün değil (ya da en azından "ninja" becerileri olmadan) – EMBarbosa

+0

Ayrıca henüz TMainMenu için stil uygulamak mümkün görünmüyor. –

cevap

4

Bir VCL oluşturabilir İsterseniz zamanında sizin FireMonkey formunu yüklemek ve ebeveyn olarak sizin VCL formunu set stilleri ile, her zamanki gibi Forms uygulaması: Aşağıdaki ekran görüntüsünde

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 olduğunu VCL uygulaması (Karbon tarzı ile) ana form ve düğme ile koyu gri alan gömülü FireMonkey biçimidir: Ben ana penceresinin yeniden boyutlandırma taşıma değilim

Firemonkey form embedded in a VCL form

Not - bu boyutlandırmak gerekir emebedd Ayrıca, alClient hizalamasını taklit eden form. Bu yaklaşımla ilgili birçok potansiyel sorun var gibi görünüyor - IDE'nin Firemonkey formlarını VCL formlarıyla kolayca karıştırmanıza izin vermemesinin bir nedeni olduğunu düşünüyorum - olası "derleme hataları veya beklenmedik davranışlar hakkında" uyarır.

+1

Güzel fikir! Belki de Delphi'nin gelecekteki bir versiyonunda, en azından pencereler üzerinde bir firemonkey uygulamasının nonclient alanını ciltlemek için VCL stillerinin kod tabanını uyarlayabilirler. –

+1

Anlaşılmış, güzel fikir! Sadece bir dezavantaj: Artık bir Firemonkey uygulaması değil ... – EMBarbosa

+0

Bu şimdi XE3 ve sonraki kutuda çalışıyor. http://stackoverflow.com/questions/12719749/how-do-you-style-the-non-client-area-in-a-firemonkey-fm2-application-in-delphi-x#comment17182629_12719749 –

0

Eğer BorderStyle formlarını bsNone olarak değiştirirseniz, istediğiniz kromu ekleyebilirsiniz. Tabii ki, en iyi duruma getirme, küçültme, kapatma, yeniden boyutlandırma vb. Işlemleri elle yapmanız gerekir.

+1

Bu hala işe yaramayacak, çünkü pencereyi uygulama pencereleri listesinden kaldıracak. BorderStyle = bsNone ayrıca Windows'ta WS_POPUP'u ayarlar. –

2

Firemonkey çapraz platformdur. Büyük ölçüde, FMX çerçevesinin kendisine bağlı bir platform olan hiçbir şey yapamazsınız. Ancak, platforma özel işlevselliğe erişmek için temel platformda (Windows, OSX veya iOS olsun) arama yapabilirsiniz. Bu koşullu derlenmiş kod içinde yapılmalıdır. Örn.,

örn. Başka bir bakış açısından bakarsak

{$IF DCC} 
    something; 
{$ENDIF} 

{$IF FPC} 
    somethingelse; 
{$ENDIF} 

(örneğin) bir TRectangle üzerinde FMX iş yapmak yapmak için, o mümkün olabilir sonra bir VCL forma, AddObject kullanmak (ya da üst öğesini atamak).

İlgili konular