Ich mach das meistens so: Beim Programmstart meiner Projekte (die mit Frames arbeiten), werden lediglich diejenigen Einstellungen aus der
DB gelesen, die sozusagen global gültig sind wie Datenbankdatei, Benutzer-Id, Berechtigungs-Level, Fenstergröße und -position und dergleichen. Beim Aufruf der diversen Frames werden die Einstellungen für den jeweiligen Frame im Code der Frame-
Unit ausgelesen. Wenn der Frame z.B. ein DBGrid beinhaltet, werden beim Erzeugen des Frames – bei meinen "größeren" Projekten werden Frames ressourcenschonend stets erneut instanziiert, bevor sie angezeigt werden, und nach dem Ausblenden wieder freigegeben – auch immer gleich die Einstellungen geladen und beim Zerstören wieder zurückgeschrieben. Beispiel zum Einstellen von DBGrid-Spaltenbreiten:
Delphi-Quellcode:
// ---------- Einstellungen lesen ---------- Privat
Procedure TFrame_Partner.EinstellungenLesen;
Var
i : Integer;
Aus : String;
begin
For i := 0 To DBGrid_Partner.Columns.Count -1 Do
Begin
Aus := IntToStr(i);
If i < 10 Then Aus := '0' + Aus;
Aus := 'PARTNER_' + Aus;
DBGrid_Partner.Columns[i].Width := DatMod.Qset_BTab.FieldByName(Aus).AsInteger;
End;
DBGrid_Partner.SetFocus;
end;
// ---------- Einstellungen schreiben ------ Privat
Procedure TFrame_Partner.EinstellungenSchreiben;
Var
i : Integer;
Aus : String;
begin
DatMod.Qset_BTab.Edit;
For i := 0 To DBGrid_Partner.Columns.Count -1 Do
Begin
Aus := IntToStr(i);
If i < 10 Then Aus := '0' + Aus;
Aus := 'PARTNER_' + Aus;
DatMod.Qset_BTab.FieldByName(Aus).AsInteger := DBGrid_Partner.Columns[i].Width;
End;
DatMod.Qset_BTab.Post;
end;
// ---------- Einblenden ------------------- Public
Procedure TFrame_Partner.Einblenden;
begin
Self.Align := alClient;
Self.Visible := True;
EinstellungenLesen;
end;
// ---------- Ausblenden ------------------- Public
Procedure TFrame_Partner.Ausblenden;
begin
EinstellungenSchreiben;
Self.Align := alNone;
Self.Visible := False;
end;
Nachdem von der Mainform aus das jeweilige Frame-Objekt erzeugt worden ist, wird die Einblenden-Methode aufgerufen, vor dem Zerstören des Frames die Ausblenden-Methode.