Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: RuntimePackage laden/verwenden

  Alt 13. Mär 2009, 15:49
Zitat von oki:
Für andere Techniken bin ich immer offen. Ich fand halt keine passenden für die gewünschten Anforderungen. Für den Bereich der Vererbung von Formularen gebe ich dir vollkommen recht. Damit muss ich leben.
Du versuchst wohl allen deinen Formularen das gleiche Look & Feel zu geben.
Eine Möglichkeit wäre Frames zu verwenden.
Ich habe z.B. einen "NavigatorFrame" auf vielen meinen Formularen.
Es ist eine Zusammenfassung von DBNavigator und einem Suchen- ,OK- und Abbrechen-Button.
Dann gibt es bei mir z.B. einen LoggingFrame:
Eine Memo für Textmeldungen + Combobox für das Datumsuhrzeitformat + Combobox für einen Filter Info, Warnungen oder Fehler.

Man sollte die Frames aber nicht überfrachten.
Auch das Ableiten von Frames kann ich nicht empfehlen; das macht nur Probleme.

Eine andere Möglichkeit wäre eine Form-Factory.
Anstatt überall folgenden Code zu verwenden:
Form42 := TForm42.Create(nil); lässt man die Formulare indirekt erzeugen:
Form42 := TFormFactory.CreateForm(TForm42, nil) as TForm42; Die Methode CreateForm() kann z.B. so aussehen:
Delphi-Quellcode:
class function TFormFactory.CreateForm(AClass: TComponentClass;Owner: TComponent): TComponent;
begin
   Result := AClass.Create(Owner);
   With(TForm(Result) do
   begin
     // Formulare sollen nicht an festen Positionen erscheinen; das soll Windows machen
     if Position = poDesigned then
        Position := poDefaultPosOnly;

     // jedes Formulare wird um ein SystemMenu erweitert,
     // damit alle Formulare zusätzlich den Eintrag "Screenshot" und "Drucken" bekommen
     AddSpecialSystemMenue(Handle);
   end;
end;
Man kann mehrere Factory-Methoden verwenden.
Delphi-Quellcode:
class function TFormFactory.CreateModalDialogForm(AClass: TComponentClass;Owner: TComponent): TComponent;
begin
   Result := CreateForm(AClass, Owner);
   With(TForm(Result) do
   begin
      // alle Formulare, die für einen modalen Dialog gedacht sind
      // sollen ROT sein
      Color := clRed;

      // ausserdem sollen diese Dialoge ein besonderes Icon bekommen
      Icon := MyWarningIcon;
   end;
end;
Die Möglichkeiten sind vielfältig.
Man kann z.B. mit einer Funktion über alle TLabels des gerade erzeugten Formulars gehen
und Font.Name auf einen bestimmten Wert setzen.
Und schon haben alle Labels einen bestimmten Font auch wenn sie zur Entwicklungszeit auf "MS Sans Serif" waren.
Miniaturansicht angehängter Grafiken
loggingframe_931.gif  
Andreas
  Mit Zitat antworten Zitat