Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schriftart,farbe usw. Projektweit festlegen (https://www.delphipraxis.net/92593-schriftart-farbe-usw-projektweit-festlegen.html)

wfs12 22. Mai 2007 23:44


Schriftart,farbe usw. Projektweit festlegen
 
Guten abend besteht irgendwie die Möglichkeit, dass man die Font Eigenschaften nicht nur für eine Form, sondern für alle Forms des Projektes auf einmal festlegen kann?

Hansa 22. Mai 2007 23:51

Re: Schriftart,farbe usw. Projektweit festlegen
 
Na klar geht das : stelle alles auf einer Musterform ein. Schiebe die in die Objektablage und sage nicht neu -> Form, sondern fische sie bei andere -> ?? raus.

WS1976 23. Mai 2007 04:59

Re: Schriftart,farbe usw. Projektweit festlegen
 
Hallo,

das ist aber eigentlich nur die halbe Antwort.
Wie mach ich das wenn schon "100" Forms existieren?

Grüsse

CCRDude 23. Mai 2007 08:10

Re: Schriftart,farbe usw. Projektweit festlegen
 
Zur Laufzeit oder zur Designzeit?

Schau mal in die Hilfe unter ControlCount/Controls. Iteriere alle Formen der Anwendung und dort alle Controls durch, damit sollte es zur Laufzeit geht. Zur Designzeit: such Dir nen guten Texteditor, der in mehreren Dateien parallel suchen&ersetzen kann, öffne alle .dfms im Textformat und ersetze sie dort.

hsg 23. Mai 2007 08:46

Re: Schriftart,farbe usw. Projektweit festlegen
 
Zitat:

Zitat von CCRDude
Zur Laufzeit oder zur Designzeit?

Schau mal in die Hilfe unter ControlCount/Controls. Iteriere alle Formen der Anwendung und dort alle Controls durch, damit sollte es zur Laufzeit geht. Zur Designzeit: such Dir nen guten Texteditor, der in mehreren Dateien parallel suchen&ersetzen kann, öffne alle .dfms im Textformat und ersetze sie dort.

Das geht natürlich nur, wenn die Werte vorher vom Standard abweichen, da sonst die Eigenschaften nicht in der DFM gespeichert sind.

Alternativ: Eine Ableitung von TForm erstellen, die gewünschten Werte dort einstellen (evtl. gleich mittels Registry oder INI auch von aussen einstellbar machen) und in allen Projektdateien mittels Global Search & Replace TForm durch deine neue Klasse ersetzen. Neue Fenster dann über die Methode von Hansa.

shmia 23. Mai 2007 09:06

Re: Schriftart,farbe usw. Projektweit festlegen
 
Das lässt sich über eine Form-Factory regeln.
Anstatt das Formular wie üblich direkt zu erzeugen wird folgende Procedure aufgerufen:
Delphi-Quellcode:
procedure GlobalCreateForm(InstanceClass: TComponentClass; var Reference);
var
  Instance: TComponent;
begin
  Instance := TComponent(InstanceClass.NewInstance);
  TComponent(Reference) := Instance;
  try
    Instance.Create(Application);
  except
    TComponent(Reference) := nil;
    raise;
  end;
  if Instance is TForm then
     with Instance as TForm do
     begin
        // Font zentral ändern
        // man sollte die Einstellung natürlich nicht hart codieren
        // sondern beim Progstart laden (z.B. aus INI-Datei)
        Font.Size := 12;
     end;
end;
Beispiel:
Delphi-Quellcode:
var
   frm : TMyForm;
begin
   GlobalCreateForm(TMyForm, frm); // statt Application.CreateForm()
   frm.ShowModal;
   ...

CCRDude 23. Mai 2007 09:08

Re: Schriftart,farbe usw. Projektweit festlegen
 
@hsg: Hmmm... also der Fontname der Form selber ist bei mir immer drin (zumindest wo ich gerade reingeschaut habe) - der von Controls natürlich nicht, aber da kommt ja ParentFont zur Geltung, sprich da muss nicht zwingend etwas ersetzt werden?
(wobei deine Methode natürlich eleganter ist, das geb ich zu :) )

@shmia: oh je, an der .dpr rumpfuschen, das mag die IDE aber eigentlich gar nicht ;)

hsg 23. Mai 2007 09:46

Re: Schriftart,farbe usw. Projektweit festlegen
 
Zitat:

Zitat von CCRDude
@hsg: Hmmm... also der Fontname der Form selber ist bei mir immer drin (zumindest wo ich gerade reingeschaut habe) - der von Controls natürlich nicht, aber da kommt ja ParentFont zur Geltung, sprich da muss nicht zwingend etwas ersetzt werden?
(wobei deine Methode natürlich eleganter ist, das geb ich zu :) )

@shmia: oh je, an der .dpr rumpfuschen, das mag die IDE aber eigentlich gar nicht ;)

Font.Size ist nicht enthalten (könnte man aber wohl über Font.Height setzen), okay, Zeichensatz mag wohl noch gehen, aber es gibt genug Properties die bei Default-Werten nicht in der DFM stehen und dann sitzt du mit deiner Lösung auf dem Schlauch :)

shmia will ja nicht unbedingt an der .dpr rumpfuschen, obwohl auch das geht. Man muss nur beachten, dass die Applikation am Schluss ein Hauptfenster hat, mit dem die VCL arbeiten kann (z.B. zum Bestimmen wie lange die MessagePump am Leben erhalten werden muss).
Alle weiteren Fenster sollte man sowieso nicht über den normalen Automatismus öffnen lassen, sondern es explizit an den geeigneten Stellen im Source-Code selber erledigen (und dort kann man dann anfangen zu streiten, ob man
Delphi-Quellcode:
Application.CreateForm(TMyForm,myFrm)
oder
Delphi-Quellcode:
 myForm := TMyForm.Create(self);
oder eben shmias Variante benutzt. Wobei diese Variante sich nur zur Laufzeit auswirkt. Braucht man das visuelle Feedback zur Designzeit (z.B. Anordnung von Controls bei Änderung der Schriftart und Größe) funktioniert die Form-Factory nicht.

Aber wie heisst es so schön: Alle Wege führen nach Rom (ich will aber nach Paris! :zwinker: )

Hansa 23. Mai 2007 11:51

Re: Schriftart,farbe usw. Projektweit festlegen
 
Zitat:

Zitat von WS1976
Wie mach ich das wenn schon "100" Forms existieren?

Wer zu spät kommt, den bestraft das Leben. :mrgreen:

Alle DFMs durchsuchen, ersetzen usw., müsste zwar schon gehen, aber ob dann nicht unliebsame Quereffekte auftreten ? :gruebel:

Die DFM sieht dann nicht so aus :

Delphi-Quellcode:
object TForm1: TForm
sondern die Objektablage produziert solche Forms :

Delphi-Quellcode:
inherited frm2: Tfrm
Manche sagen deshalb auch "benutze die Form-Inheritance". Setzt die genaue Planung zu spät ein, dann dürften die meisten Vorteile verloren gehen. Zusätzlich müsste nämlich dann noch in allen abgeleiteten Forms in diesem Falle noch das wohl vorhandene Font = entfernt werden, usw. Wäre wohl sehr mühselig. Da bleibt wohl wirklich nur Laufzeit übrig. Oder alles neu und dieses mal richtig machen. :zwinker: Meine Formulare haben fast alle immer einen Vorfahren, weil immer irgendwas dazukommt und sei es nur eine Checkbox. Da die Bedienung aber einheitlich sein soll sind Tastatur- und Mausereignisse allerdings schon sehr früh in der Form-Hierarchie eingebaut. Eigentlich schade, dass solche mächtigen Sachen von kaum einem benutzt werden. Wäre bei mir irgendein Font projektweit umzustellen, das wäre eine Sache von 1 Min. !

alzaimar 23. Mai 2007 12:43

Re: Schriftart,farbe usw. Projektweit festlegen
 
Hansa, man kann sich aber einen kleinen blöden Translator schreiben, der einfach in der DFM die 1.Zeile ändert, sowie in den korrespondierenden PAS-Dateien in die USES-Klausel den Modulnamen der 'Vater-Form' sowie in die Deklaration der Form die Abhängigkeit von der Vaterform ablegen.

Ich hab das schon oft gemacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.
Seite 1 von 2  1 2      

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