Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Schriftart ändern für alle Label und Edits in einem Form (https://www.delphipraxis.net/211972-schriftart-aendern-fuer-alle-label-und-edits-einem-form.html)

enigma 28. Nov 2022 08:31

Schriftart ändern für alle Label und Edits in einem Form
 
Hallo,

ich habe eine kurze Frage:
Zu einem Form (TfrmMain = class(TForm)) möchte ich die Schriftart für alle enthaltenen Labels und Edits ändern.
Gibt es eine andere Möglichkeit, als dies im Quellcode für alle Labels extra einzufügen,
z.B. lblProjektName.Font.Name := 'Calibri'; (ist bisher 'Arial')
oder im Objektinspektor die einzelnen Labels anzupassen?

In TfrmMain.FormCreate Font.Name := 'Calibri'; einzufügen, bringt leider nichts.

Ich freue mich über jeden Tipp :wink:

BerndS 28. Nov 2022 08:39

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Wenn die Labels und Edits ParentFont = True gesetzt habe, sollte das Ändern im Form automatisch auf die Labels und Edits übertragen werden.
Du kannst aber auch die DFM als Text anzeigen und hier per Suchen und Ersetzen alles auf eine andere Schriftart umstellen.

enigma 28. Nov 2022 16:31

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Hallo Bernd,

danke für deine Antwort.
Allerdings klappt ParentFont nicht, da die Labels in Groupboxen liegen, die Font.Style Bold haben.

Die Anzeige als Text bringt leider auch nichts, da dort keine Wertzuweisung Font.Name := 'Arial' erfolgt, sondern
der Standard MS Sans Serif vorliegt.

Fällt euch noch etwas anderes ein?
Würde mich freuen :wink:

himitsu 28. Nov 2022 16:48

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Im FormDesigner ändern, nicht erst im OnCreate.
Danach kannst dann auch noch alles aus der DFM werfen, was falsch ist.


Zur Runtime:
Bleibt dir also nichts Anderes übrig, als rekursiv über alle Controls und UnterControls der Form zu laufen und es überall zu setzen, wo ParentFont=False.


Ja, es ist blöd, dass ParentFort immer alles nimmt und kein ENUM ist, welcher angibt, was vom Font nicht vererbt werden soll. (Name, Size und Style)

Frickler 28. Nov 2022 16:52

AW: Schriftart ändern für alle Label und Edits in einem Form
 
So mache ich das zur Laufzeit:

Code:
type
  TControlTrick = class(TControl) public property Font; end;

[...]

for i:=0 to frm.ComponentCount-1 do begin
  if frm.Components[i] is TControl then begin
    if TControlTrick(frm.Components[i]).Font.Name = OldFont then
      TControlTrick(frm.Components[i]).Font.Name := NewFont;
  end;
end;

himitsu 28. Nov 2022 16:58

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Delphi-Quellcode:
  TControlTrick = class(TControl) end;

oder
Delphi-Quellcode:
  TControlTrick = class(TControl);

reicht, da du so bereits Zugriff auf Alles bekommst. (auch protected, da Deklaration in selber/aktueller Unit)

Aber ist auch unötig, da man sich für Font auch einfach irgendwas nehmen kann, wo es bereits Public gemacht wurde, wie z.B. TLabel oder TEdit, anstatt TControlTrick.

zeras 28. Nov 2022 20:00

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Du markierst die Objekte und im Objektinspektor bleiben die Eigenschaften übrig, die die Objekte gemeinsam haben. Dann einfach die Schriftart ändern.

enigma 2. Dez 2022 12:52

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Vielen Dank für eure wertvollen Tipps!

TigerLilly 3. Dez 2022 11:08

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Da passt dieses vielleicht auch:
http://www.danieleteti.it/post/duck-typing-in-delphi/
http://arcana.squarespace.com/duckduckdelphi

Rolf Frei 3. Dez 2022 16:34

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Geht es um die Fonts zur Runtime, also vom Kunden selber angegebene Fonts oder geht es um einmal in der IDE z.B. MS SansSerif auf Segoe UI zu ändern. Wenn du deine Form in der IDE umstellen willst, ist es am einfachsten die Form zu öffnen und dann Alt-F12 zu drücken. Im Sourcecode der DFM kannst du nun einfach nach dem alten Fontnamen suchen und diesen mit dem neuen ersetzen. Danach einfach wieder Alt-F12 und alles ist erledigt.

himitsu 3. Dez 2022 20:45

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Zitat:

Zitat von Rolf Frei (Beitrag 1515819)
und alles ist erledigt.

Wenn der zu ändernde Font der Default-Font jener Komponente ist, dann wird bei ParentFont=False Dieser benutzt, ist aber dennoch nicht in der DFM gespeichert.

Michael II 3. Dez 2022 23:36

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Zitat:

Zitat von Rolf Frei (Beitrag 1515819)
Geht es um die Fonts zur Runtime, also vom Kunden selber angegebene Fonts oder geht es um einmal in der IDE z.B. MS SansSerif auf Segoe UI zu ändern. Wenn du deine Form in der IDE umstellen willst, ist es am einfachsten die Form zu öffnen und dann Alt-F12 zu drücken. Im Sourcecode der DFM kannst du nun einfach nach dem alten Fontnamen suchen und diesen mit dem neuen ersetzen. Danach einfach wieder Alt-F12 und alles ist erledigt.

Musste ich auch gerade tun... in zwei Projekten, welche ich seit Delphi2
pflege gab's noch viele Fenster mit "MS Sans Serif". Erst kürzlich bin ich von 1920x1080 endlich auf 3K und 4K Monitore umgestiegen - und erst da sah ich, wie verpixelt MS Sans Serif Schrift auf solchen Monitoren aussieht.
Da die DFMs von neueren Delphis in TXT vorliegen und ältere binäre DFMs mittels ObjectResourceToText in TXT übersetzt werden können, lässt sich der Font-Austausch mit ein paar wenigen Zeilen Code automatisieren.

himitsu 3. Dez 2022 23:52

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Zitat:

Da die DFMs von neueren Delphis in TXT vorliegen und ältere binäre DFMs mittels ObjectResourceToText in TXT übersetzt werden können
Jain.

Die einkompilierte Ressource ist immernoch Binär.
Die DFM wird aber seit ewig als Text gespeichert, aber das ging auch schon früher, wenn man die Einstellung änderte. (gut, D2 noch nicht, aber ab irgendwann bis D7)



Wie mehrmals gesagt, haben wir auch hunderte Forms, aber mit sowas garkeine Probleme.
Wir nutzen möglichst nur abgeleitete Komponenten und vererbte Forms (von Letzterem muß ich leider abrate, da der unfähige Support schwerwiegende Bugs nicht reparieren will, selbst wenn man ihm die Lösung fertig üergibt) und zur Laufzeit wird nochmal eine zentrale Methode für alle Forms aufgerufen.

Es gibt also mehrere zentrale Stellen, wo sich für alle Komponenten, zur Laufzeit oder im Designer, solche Anpassungen mit wenig Code einfügen lassen.

Michael II 4. Dez 2022 00:53

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Zitat:

Zitat von himitsu (Beitrag 1515822)
Zitat:

Da die DFMs von neueren Delphis in TXT vorliegen und ältere binäre DFMs mittels ObjectResourceToText in TXT übersetzt werden können
Jain.

Die einkompilierte Ressource ist immernoch Binär.
Die DFM wird aber seit ewig als Text gespeichert, aber das ging auch schon früher, wenn man die Einstellung änderte. (gut, D2 noch nicht, aber ab irgendwann bis D7)

Ist mir voll bewusst- ich wollte einfach nicht einen Roman schreiben über all die Möglichkeiten; aber ich war fast sicher, dass himitsu das so nicht stehen lassen kann (lieb gemeint ;-).

Du schreibst du hättest keine Probleme: Aber du musstest doch sicher auch die frühere Standardschrift MS Sans Serif ersetzen, wegen unschöner Pixelschrift auf 3K+ [KEIN Delphi Problem - liegt am Font]? (Microsoft Sans Serif [<> MS Sans Serif] ist natürlich voll OK).

BerndS 4. Dez 2022 11:34

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Ich habe alte Projekte Ultraedit über suchen und ersetzen in Dateien die Schriften in den Text DFM austauschen lassen. Das waren auch hunderte Stellen die geändert werden mussten. Das wollte ich nicht manuell machen. Das erst zur Laufzeit zu machen halte ich nicht für sinnvoll, da ich es in der IDE sehen möchte.
Gelegentlich tausche ich auf diese Weise die Komponenteklassen von Standard Klassen auf abgeleitete inder pas und dfm aus.

himitsu 4. Dez 2022 14:34

AW: Schriftart ändern für alle Label und Edits in einem Form
 
Zitat:

Zitat von Michael II (Beitrag 1515825)
Du schreibst du hättest keine Probleme: Aber du musstest doch sicher auch die frühere Standardschrift MS Sans Serif ersetzen, ...

Jupp, das haben wir einfach in unseren Ableitungen der Controls (Edit Label usw. gemacht)
Schon bei früheren Änderungen wurde dafür sogar eine globale Kontante eingefügt, welche in den Controls genutzt wird,
also war hierfür nur noch EINE Änderung nötig. :angle:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 Uhr.

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