Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Properties von Forms und Komponenten mit vorgegebenen Werten (https://www.delphipraxis.net/121126-properties-von-forms-und-komponenten-mit-vorgegebenen-werten.html)

bernau 22. Sep 2008 21:03


Properties von Forms und Komponenten mit vorgegebenen Werten
 
Ursprünglich hatte ich ein Kommetar im Thread Deine Frage an CodeGear angegeben. mkinzler hatte mir eine Antwort gegeben. Da aber in diesem Thread eine Diskussion vermieden werden soll, mache ich zu diesem Thema einen neuen Thread auf

Noch mal zum Verlauf meiner Frage:

Zitat:

Zitat von bernau
Es gibt bestimmte Properties, die ich immer wieder auf einen bestimmten Wert setzen muss.

Eine neue Form erhält bei mir grundsätzlich für das Property "Position" den Wert "poScreenCenter". Bei einem Panel verwende ich für das Property "BevelOuter" zu 95% den Wert "bknone".

Wäre gut, wenn man Properties in der IDE mit Werten vorbelegen kann. Damit diese Werte sofort angewendet werden.

Gerd

Dann die Antwort:

Zitat:

Zitat von mkinzler
Geht, wenn du die Objekte in der Objektablage ablegst


So jetzt geht's weiter:

Die Objektablage kenne und ist mir wieder in Erinnerung gerufen. Die Objektablage kann aber nur Forms als Vorlage speichern. Ich hätte das gerne auch für Komponenten wie TPanel.

Hier wollte ich nun Abschicken. Habe mir aber gedacht, daß ich die Suche benutze und siehe da. Ich habe folgendes gefunden.

Standardeigenschften verändern

Einge richtig schöne Sache. Nun bin ich glücklich. Kosmetisch gesehen, wünsche ich mir diesen Punkt auf ein popup-Menü, wenn ich eine Komponente rechts anklicke.

Hawkeye219 22. Sep 2008 22:51

Re: Properties von Forms und Komponenten mit vorgegebenen We
 
Hallo Gerd,

du könntest auch einen Blick auf die GExperts werfen. Die erlauben mit dem Rename Components Tool nicht nur das halbautomatische Benennen von Komponenten, sondern auch die Vorgabe (fast) beliebiger Eigenschaftswerte. Eine Beschreibung findest du auf dieser Seite, wenn du dort im Menü das Tool auswählst.

Gruß Hawkeye

sx2008 23. Sep 2008 02:38

Re: Properties von Forms und Komponenten mit vorgegebenen We
 
Es gibt auch noch eine sehr interessante Möglichkeit diese Properties vorzubelegen: mit einer Fabrikmethode.
Üblichweise wird ein Formular ja so erzeugt:
Delphi-Quellcode:
form3 := TForm3.Create(nil);
oder alternativ auch so:
Delphi-Quellcode:
Application.CreateForm(TForm4, form4);
Das ändern wir jetzt, indem wird das Formular nicht selbst direkt erzeugen, sondern einer anderen Klasse den Auftrag geben, für uns das Formular zu erzeugen:
Delphi-Quellcode:
  TAppFormFactory.CreateForm(TForm5, form5);
Die Fabrikmethode erlaubt es, bestimmte Dinge wie z.B. Fontgrösse global für die gesamte Anwendung zu ändern.
Es gibt allerdings die Einschränkung, dass das nur für Formulare geht, die dynamisch zur Programmlaufzeit erzeugt werden.
Bei den Formularen, die in der Projektdatei automatisch erzeut werden, geht das leider nicht, da die Erzeugung mit Application.CreateForm stattfindet und sich die IDE da ungern hineinreden lässt.

Die Klasse TAppFormFactory sieht z.B. so aus:
Delphi-Quellcode:
type
  TAppFormFactory=class(TObject)
  protected
    class procedure ModifyComponent(comp:TComponent);
  public
    class procedure CreateForm(InstanceClass: TComponentClass; var Reference);
  end;

implementation

class procedure TAppFormFactory.ModifyComponent(comp:TComponent);
begin
  if Comp is TForm then
  begin
     TForm(Comp).Position := poScreenCenter; // default Form Position
  end
  else if Comp is TLabel then
  begin
    // Fontname und Grösse wurden beim Programmstart aus einer Ini-Datei gelesen
    // und in globalen Variablen abgelegt
    TLabel(Comp).Font.Name := globalLabelFont;
    TLabel(Comp).Font.Size := globalLabelSize;
  end;
  for i := 0 to Comp.ComponentCount-1 do
     ModifyComponent(comp.Components[i]) // rekursiver Aufruf für alle untergeordneten Komponenten
end;

class procedure TAppFormFactory.CreateForm(InstanceClass: TComponentClass; var Reference);
begin
  Application.CreateForm(InstanceClass, Reference); // Formular erzeugen
  ModifyComponent(TComponent(Reference)); // Eigenschaften anpassen
{$IFDEF DEBUG}
  with (Reference as TForm) do
    Caption := Classname+ '-' + Caption; // jedes Formular trägt seinen Klassenname in der Caption
{$ENDIF}
end;
Man kann das jetzt noch ausbauen, indem man nicht nur eine FabrikMethode (hier: CreateForm) sondern verschiedene auf ihren jeweiligen Einsatzzweck zugeschnittene Methoden (z.B. CreateModalForm) verwendet.
Ausserdem sollte man eine Basisklasse mit virtuellen Methoden haben und die Formfactory-Klasse davon ableiten.
So kann man je nach Einsatzzweck verschiedene FormFactory-Klassen verwenden.

bernau 23. Sep 2008 09:30

Re: Properties von Forms und Komponenten mit vorgegebenen We
 
Zitat:

Zitat von sx2008
Es gibt auch noch eine sehr interessante Möglichkeit diese Properties vorzubelegen: mit einer Fabrikmethode.

Sieht interessant aus. Aber globale Einstellungen mache ich bei größeren Projekten mit Formvererbung, was der Fabrikmethode (vom Ergebnis) sehr ähnlich ist. In meinem Projekt habe ich ein Formtemplate angelegt, von dem alle anderen Forms abgeleitet werden. Dort führe ich dann diese globalen Einstellungen durch.

Mir ging es aber hauptsächlich um Vorbelegung von Properties von Komponenten, wenn die diese auf's Form draufziehe. Danach sollten die Properties dann wiederum einzeln einstellbar sein.


Gerd

bernau 23. Sep 2008 10:05

Re: Properties von Forms und Komponenten mit vorgegebenen We
 
Zitat:

Zitat von Hawkeye219
Hallo Gerd,

du könntest auch einen Blick auf die GExperts werfen. Die erlauben mit dem Rename Components Tool nicht nur das halbautomatische Benennen von Komponenten, sondern auch die Vorgabe (fast) beliebiger Eigenschaftswerte. Eine Beschreibung findest du auf dieser Seite, wenn du dort im Menü das Tool auswählst.

Gruß Hawkeye


Das war genau das, was ich gesucht habe. Schon zig Jahre auf dem Computer installiert, aber nie gesehen :-(


Gerd

Kalfany 23. Sep 2008 10:46

Re: Properties von Forms und Komponenten mit vorgegebenen We
 
im CnPack gibts auch noch sowas, nennt sich da "Property Corrector"


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