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/)
-   -   VCL Styles : ignoriert Schiftart (https://www.delphipraxis.net/201955-vcl-styles-ignoriert-schiftart.html)

creehawk 13. Sep 2019 09:32

VCL Styles : ignoriert Schiftart
 
Moin.

Ein neue VCL Anwendung.
Projekt>Optionen>Erscheinungsbild>Sky
Feuer frei. Alles okay.
Tools>Bitmap-Stil-Designer
Laden :.....Embarcadero.../Redist/vcl/Sky.vsf
per Menü: Stil > Schriftname zuweisen > SegoeUI 9 Punkte
mal unter Fonts nachsehen: alles paletti, die Beispielbuttons werden mit der neuen Schriftart angezeigt.
Im Inspektor Name ändern auf Style
Speichern unter: Style.vsf
F9 drücken. Shit.
Keine Änderung zu erkennen. Hm. Einfach Mal für Fonts>MenuItemTextNormal die Schriftfarbe ändern von Schwarz nach Grün.
Speichern.
F9 Drücken. Fast Okay, hübsches Grün, falsche Schriftart.

Was ist verkehrt? Oder zeigt das Beispiel im Bitmap-Stil-Designer die neue Schriftart nicht an?

creehawk

P.S. Diesen Style habe ich in eine andere VCL Anwendung eingebunden (Quelltext : TStyleManager.SetStyle(TStyleManager.LoadFromFile( 'Style.vsf'));), die geänderte Farbe wird richtig ausgegeben, NICHT jedoch die Schriftart.

creehawk 16. Sep 2019 09:24

AW: VCL Styles : ignoriert Schiftart
 
Moin.

Mittlerweile habe ich ohne Ende rumgegoogelt und letztlich nichts dazu gefunden. Oder nur seitenlange Programme um das irgendwie möglich zu machen. Und ergänzend dazu nur noch die Info das die Dialogboxen die eventuell benutzt werden sowieso nicht den Style benutzen. Warum und wieso wird auch erklärt, ist ja auch schön und gut. Und ein wirklich Handfestes Tutorial für die Verwendung von VCL Styles finde ich auch nicht.

Ich frage mich jetzt also wozu man die Styles ausser für bunte Schalterchen verwenden kann.

creehawk

TiGü 16. Sep 2019 14:15

AW: VCL Styles : ignoriert Schiftart
 
Hast du denn mal tiefer debuggt?
Also an welcher Stelle deine Schriftart noch definiert ist und ab wann sie vom Standard überschrieben wird?

Code:
Winapi.Windows.DrawText(1845586787,'Button1',7,(0, 0, 75, 25, (0, 0), (75, 25)),1024)
Vcl.Styles.DrawText($167DD80,'Button1',(0, 0, 75, 25, (0, 0), (75, 25)),1024)
Vcl.Styles.TSeCustomStyle.DrawStyleText($167DD80,((0, 0, 75, 25, (0, 0), (75, 25)), 'Button1', ktxaMiddleCenter, [], ktxoHorizontal))
Vcl.Styles.TSeStyle.ButtonDrawText(kbscButton,$167DD80,((0, 0, 75, 25, (0, 0), (75, 25)), kbdsHot),((0, 0, 75, 25, (0, 0), (75, 25)), 'Button1', ktxaMiddleCenter, [], ktxoHorizontal),'default')
Vcl.Styles.TCustomStyle.InternalDrawText(???,(teButton, 1, 1),'Button1',(0, 0, 75, 25, (0, 0), (75, 25)),[tfCenter,tfLeft,tfTop,tfVerticalCenter],0)
Vcl.Styles.TCustomStyle.DoDrawText(1845586787,(teButton, 1, 1),'Button1',(0, 0, 75, 25, (0, 0), (75, 25)),[tfCenter,tfLeft,tfTop,tfVerticalCenter],([stfTextColor], 0, 5265845, 1845586787, 2, (23253728, -241), 5265664))
Vcl.Themes.TCustomStyleServices.DrawText(1845586787,(teButton, 1, 1),'Button1',(0, 0, 75, 25, (0, 0), (75, 25)),[tfCenter,tfLeft,tfTop,tfVerticalCenter],0)
Vcl.Themes.TStyleHook.DrawControlText($162D2E0,(teButton, 1, 1),'Button1',(0, 0, 75, 25, (0, 0), (75, 25)),5)
Vcl.StdCtrls.TButtonStyleHook.DrawButton($162D2E0,True)
Vcl.StdCtrls.TButtonStyleHook.Paint(???)
Vcl.Themes.TStyleHook.WMPaint(???)
Vcl.Themes.TStyleHook.WndProc((15, 0, 0, 0, 0, 0, (), 0, 0, (), 0, 0, ()))
Vcl.Themes.TMouseTrackControlStyleHook.WndProc(???)
Vcl.StdCtrls.TButtonStyleHook.WndProc((15, 0, 0, 0, 0, 0, (), 0, 0, (), 0, 0, ()))
Vcl.Themes.TStyleHook.HandleMessage((15, 0, 0, 0, 0, 0, (), 0, 0, (), 0, 0, ()))
Vcl.Styles.TStyleEngine.HandleMessage($15B0A30,(15, 0, 0, 0, 0, 0, (), 0, 0, (), 0, 0, ()),(Vcl.StdCtrls.TButtonControl.WndProc,$15B0A30))
Vcl.Themes.TStyleManager.HandleMessage($15B0A30,(15, 0, 0, 0, 0, 0, (), 0, 0, (), 0, 0, ()),(Vcl.StdCtrls.TButtonControl.WndProc,$15B0A30))
Vcl.Controls.TWinControl.DoHandleStyleMessage(???)
Vcl.Controls.TWinControl.WndProc((15, 0, 0, 0, 0, 0, (), 0, 0, (), 0, 0, ()))
Vcl.StdCtrls.TButtonControl.WndProc((15, 0, 0, 0, 0, 0, (), 0, 0, (), 0, 0, ()))
Vcl.Controls.TWinControl.MainWndProc(???)
System.Classes.StdWndProc(466542,15,0,0)

creehawk 17. Sep 2019 06:59

AW: VCL Styles : ignoriert Schiftart
 
Moin Moin.

Nein, habe ich nicht.

Denn genau an der Stelle werde ich sauer. Ich habe hier 3 Rechner (Win 10 Home, Win 10 Prof., Delphi Starter Community Edition, Delphi 10 Prof.) Auf allen habe ich die oben beschriebene Aktion ausgeführt. Auf allen passiert das Gleiche - nix.

Ich hatte die Verwendung von VCL Styles/FMX Styles als planmäßige Vereinfachung zur optischen Gestaltung der Bedienoberfläche angesehen, die eine Programmierumgebung anbietet. Offensichtlich läuft das aber nicht oder eben nur mit einigen Rumgefummel, das dem Vereinfachungsgedanken eindeutig entgegensteht. Das die eine oder andere Komponente mal mangels Anpassung nicht mit einem Style zusammenarbeitet kann ich noch verknusen. Das an den Dialogboxen rumgefummelt werden muss da WIN spezifisch - okay. Aber solche lapidaren Dinge wie Buttons oder Listboxen aus dem Standardrepertoire?
Die VCL Styles Utils (Rodrigo Ruz) habe ich mit besorgt nach dem Motto: Da hast du Dödel wohl irgendwas übersehen. Aber: auch das Tool zeigt auf allen Rechnern die Schriftarten nicht an. Farbänderungen, die Formbeschriftung usw. schon, aber alles läuft auf die Standardschriftart hinaus.

Vielleicht mache ich ja auch grundlegend etwas falsch. Oder ich vergesse etwas weil ich es nicht weiß.

So jedenfalls ist die Abteilung VCL Styles für mich noch Mummpitz. Ich lasse mich gerne eines besseren belehren.

creehawk

TiGü 17. Sep 2019 08:12

AW: VCL Styles : ignoriert Schiftart
 
Vermutung: Die Schriftart, die im Objektinspektor für die visuelle Komponente eingetragen ist, überschreibt die Schriftart aus dem Style und "gewinnt".
Ich vermute, dass ist sogar "as designed".

Uwe Raabe 17. Sep 2019 08:55

AW: VCL Styles : ignoriert Schiftart
 
Ein konkretes Testbeispiel wäre hier eventuell hilfreich.

creehawk 17. Sep 2019 14:08

AW: VCL Styles : ignoriert Schiftart
 
Moin Moin.

Beispiel? Hae ich doch oben schon - grob - angegeben.

Aber es geht auch kürzer.

Bitmap-Stil-Designer starten.
Den Stil <Sky> laden.
Über den Menübefehl <Stil> <Schriftname zuweisen> eine Schrift auswählen, zur Abschreckung <Comic Sans MS>.
Speichern.
Mit <F9> Stil testen.
Die Formname wird hübsch in der gewählten Schriftart angezeigt. Sonst aber nix.
In der Liste der Objekte des Bitmap-Stil-Designers ist die Schriftart überall eingestellt und wird dort auch angezeigt.

Und wenn ich nun eine normale VCL Anwendung erstelle, Button + Listbox + Label auf die Form setze, in den Projekt Optionen>Erscheinungsbild >Sky< auswähle und als Standard festlege passiert - auch nix. Die Formüberschrift ist Comic Sans, sonst nichts.

creehawk

creehawk 19. Sep 2019 09:54

AW: VCL Styles : ignoriert Schiftart
 
Moin Moin.

Also nichts Neues? VCL Styles sind also Mummpitz?

creehawk

TiGü 19. Sep 2019 10:00

AW: VCL Styles : ignoriert Schiftart
 
Bitte wie oben vorgeschlagen einfach mal hinterher debuggen und deine Erkenntnisse teilen.

Uwe Raabe 19. Sep 2019 10:01

AW: VCL Styles : ignoriert Schiftart
 
Zitat:

Zitat von creehawk (Beitrag 1447049)
Also nichts Neues? VCL Styles sind also Mummpitz?

Würde ich so nicht sagen. Ich setze VCL Styles bei mehreren Kunden erfolgreich ein, bei denen es in der Regel um Corporate Identity geht. Ein Problem wie du es beschreibst ist dort offenbar noch nicht aufgetaucht.

Uwe Raabe 19. Sep 2019 10:28

AW: VCL Styles : ignoriert Schiftart
 
Ich habe das mal überprüft. Es gibt nur wenige Stellen, bei denen der Font-Name im Style ausgewertet wird. Tatsächlich habe ich nur die Form-Caption gefunden, aber ich kann andere nicht ausschließen. Bei den anderen Controls wird der eingestellte Font verwendet, was angesichts des ParentFont-Features ja durchaus sinnvoll sein kann. Lediglich die Font-Farbe wird aus dem Style genommen, solange das nicht im Control abgewählt ist.

Kurz gesagt: Du hast dir genau das eine Feature rausgesucht, das vom VCL-Styling nicht unterstützt wird.

creehawk 20. Sep 2019 08:19

AW: VCL Styles : ignoriert Schiftart
 
Moin.

Ist ja wohl so.

Ergo ist VCL Styles letztlich Mummpitz, denn nach meiner Meinung ist die Schriftart ja wohl ein elementarer Bestandteil einer optisch angepassten Form.

Machen wir es also wieder zu Fuß.

creehawk

Uwe Raabe 20. Sep 2019 09:07

AW: VCL Styles : ignoriert Schiftart
 
Zitat:

Zitat von creehawk (Beitrag 1447195)
Ergo ist VCL Styles letztlich Mummpitz, denn nach meiner Meinung ist die Schriftart ja wohl ein elementarer Bestandteil einer optisch angepassten Form.

Das kommt immer auf die Sichtweise an. Schon seit Delphi 1 wird die Schriftart in der Regel über ein ParentFont = True ausgewertet und entspricht dem übergeordneten Control. So kann ich z.B. festlegen, daß alle Controls auf einem bestimmten Panel in Comic Sans MS dargestellt werden, in dem ich dem Panel diese Schriftart zuweise. Gerade für dynamisch erzeugte Controls ist das ein entscheidender Vorteil. In Delphi ist also die Font-Bestimmung über die Parent-Struktur der etablierte Standard. Eine individuelle Vorgabe des Fonts über den Style würde dem Prinzip widersprechen. Insofern ist die aktuelle Implementierung nur konsequent und dürfte den Erwartungen der meisten Anwender entsprechen.

Deine Vorstellung ist zwar auch nachvollziehbar, widerspricht aber der VCL-Architektur. Aber gerade dank dieser Architektur kannst du deine Vorstellung durch eine einzige Zuweisung des Font-Namens im Form realisieren. Wäre der andere Ansatz implementiert worden, müssten jetzt alle VCL-Style-User, die das nicht wollen, bei jedem Control den Font aus dem Styling herausnehmen und auch noch für eine entsprechende Farbeinstellung sorgen. Die aktuelle Implementierung ist also alles andere als Mummpitz, sondern der deutlich bessere Weg.

TiGü 20. Sep 2019 09:09

AW: VCL Styles : ignoriert Schiftart
 
Ca. 8 von 10 Nutzern der VCL Styles würden sich in Grund und Boden ärgern, wenn ihre im Programm (und ggf. vom Nutzer) eingestellte Schriftart vom Style überschrieben würde.

Merke: Nur weil es für DEINEN Anwendungsfall nicht passt, heißt es nicht, dass es Mumpitz ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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