Thema: Delphi FireMonkey & Styles

Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#1

FireMonkey & Styles

  Alt 30. Jan 2013, 21:58
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) ?
Miniaturansicht angehängter Grafiken
fmpanel.jpg   fmpanel2.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (31. Jan 2013 um 00:43 Uhr)
  Mit Zitat antworten Zitat