AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Properties von Forms und Komponenten mit vorgegebenen Werten
Thema durchsuchen
Ansicht
Themen-Optionen

Properties von Forms und Komponenten mit vorgegebenen Werten

Ein Thema von bernau · begonnen am 22. Sep 2008 · letzter Beitrag vom 23. Sep 2008
Antwort Antwort
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

Re: Properties von Forms und Komponenten mit vorgegebenen We

  Alt 23. Sep 2008, 02:38
Es gibt auch noch eine sehr interessante Möglichkeit diese Properties vorzubelegen: mit einer Fabrikmethode.
Üblichweise wird ein Formular ja so erzeugt:
form3 := TForm3.Create(nil); oder alternativ auch so:
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:
  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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 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