Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FireMonkey & Styles (https://www.delphipraxis.net/172968-firemonkey-styles.html)

stahli 30. Jan 2013 20:58

FireMonkey & Styles
 
Liste der Anhänge anzeigen (Anzahl: 2)
Das Konzept der Styles unter FMX wird mir immer suspekter.

Wenn man einen BitBtn unter VCL konstruiert baut man verschiedene Komponenten zusammen oder zeichnet direkt auf den Canvas.
Die wichtigen Eigenschaften werden veröffentlicht und so kann man z.B. ein neues Bitmap zuweisen.

Unter FMX baut man "LayoutControls" zusammen, was der o.g. Verfahrensweise ähnelt, nur dass man dies im Designer realisieren kann.
Dafür kommt man an die Unterkomponenten später nur heran, indem man diese mit FindeStyleResource sucht (ähnlich FindComponent).

Ich bin nicht ganz sicher, aber es reicht wohl nicht, z.b. die Farbe der Resource einmalig zu ändern, sondern das muss man wohl im Ereignis UpplyStyleLookup tun.
Delphi-Quellcode:
procedure TForm1.Panel1ApplyStyleLookup(Sender: TObject);
var
  Back: TFmxObject;
begin
  inherited;
  Back := FindStyleResource('panelstyle'); // wird aber nicht gefunden ... Result = nil // SameText lässt sich aber nicht debugen
//  if (Back = nil) and (FResourceLink is TCalloutRectangle) then
//    Back := FResourceLink;
  if (Back <> nil) and (Back is TRectangle) then
  begin
    TRectangle(Back).Fill.Color := claRed;
  end;
end;
Man hat aber wohl ohne genaue Kenntnisse des verwendeten Styles keine wirkliche Chance an die Eigenschaften heran zu kommen.
Wenn ein neuer/fremder Style zugewiesen wird kann das wieder zu völlig neuen Eigenschaften führen.

Das ist schon alles verwirrend genug - aber:

Wenn man Controls von anderen Controls ableitet, können die Styles "verloren gehen".
Hier habe ich eine Beschreibung des Problems: http://www.delphipraxis.net/1200494-post133.html
Anbei auch 2 Screenshots meiner Gitterkomponente.
- Im ersten Bild sind als Zellen einfache Panels eingesetzt, was der erwarteten Optik entspricht.
- Im zweiten Bild benutze ich Ableitungen des Panels. Der Panel-Style geht da plötzlich verloren. Zufällig passt das zwar für meine Zwecke aber plausibel ist das nicht.


Warum ist das so kompliziert gelöst?
So eine starke Flexibilität macht für die alltäglichen Anforderungen wenig Sinn.
Die ständige Suche nach den Layout-Komponenten kostet Zeit.
Die üblicherweise benötigten Eigenschaften sind nicht sofort erreichbar.
Für spezielle Anforderungen könnte man Ableitungen eines Controls bauen.
Stattdessen sind die tatsächlich verwendeten Styles mehr oder weniger unvorhersehbar.
Man kann ja nicht mal mit Sicherheit sagen, welche Styles für ein Control überhaupt verfügbar sind.

Irgendwie durchschaue ich das Konzept noch nicht...


EDIT: Sinnvoll fände ich Styles im Sinne eines Skinnings. So dass man also unterschiedliche Linien, Farben, Füllmuster und ggf. Bitmaps hinterlegen kann, die dann Projektweit verwendet werden. Wie ist das eigentlich technisch in der VCL gelöst? Arbeitet man da jetzt auch mit FindStyleResource?

EDIT2: Oder sollte man die Styles eher wieder abschaffen? Aber während man die LiveBindings ganz gut ersetzen kann sind die Styles ja ein Basískonzept des FMX. So als Paket macht mich das gerade etwas ratlos.

Was ist Eure Meinung (speziell halt zu den Styles) ?

greenmile 31. Jan 2013 11:50

AW: FireMonkey & Styles
 
=> http://www.delphipraxis.net/162660-f...ml#post1194264

stahli 31. Jan 2013 11:58

AW: FireMonkey & Styles
 
Den Thread kenne ich. Oder meinst Du dort einen bestimmten Beitrag?

(Ich hätte gern das Style-Konzept explizit diskutiert, ohne dass es in dem Sammelthread untergeht.)

greenmile 31. Jan 2013 12:10

AW: FireMonkey & Styles
 
"
[...] die Styles sind nicht durchdacht. Ich muss z.B. für ein Listview den Style verändern, allerdings darf ich ihn anschließend nicht mehr wechseln, sonst sind auch meine Listview Einträge mit weg. Wer hat sich sowas bitte das ausgedacht?
"


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz