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.