Einzelnen Beitrag anzeigen

Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Setup (mittels Klasse) über mehrere Forms: Speichern/Laden

  Alt 3. Mär 2022, 12:36
Eine kleine generelle Frage habe ich bitte noch.

Was ist aus der Sicht eines Programmierers gängiger - oder vom Programmierstil her besser?

A: Einstellungen für Controls direkt in des Control einzulesen (z.B. Checkbox1.Checked := readbool...)
B: Einstellungen erst in Variablen (oder in eine Klasse) einzulesen und im Anschluss den Controls zuzuweisen (chk_usefarbe := readbool ... ; Checkbox1.Checked := chk_usefarbe)

?


Die Frage stellt sich mir gerade, weil ich Elemente auf einer Form ja durchlaufen kann und diese über Namen in eine ini/xml... Datei speichern kann. Hier brauche ich im Prinzip noch nicht einmal darauf achten, ob neue Elemente hinzukommen.

Als kleines Beispiel:

Delphi-Quellcode:
function TForm_Setup.LoadSetupXML(aPathAndFilename: String; aSetup: TSetupClass): Boolean;
var
  DummyX, DummyY, DummyZ: Integer;
  Dummy_Setup: TXMLConfig;
  Dummy_PC: TPageControl;
begin
  { :: Setup aus einer Datei einlesen :: }
  try
    try
      // prüfen, ob Datei exisitiert
      if FileExists(aPathAndFilename) then
      begin
        { Werte einlesen }
        Dummy_Setup := TXMLConfig.Create(aPathAndFilename);
        Dummy_PC := PageControl_Setup;

        with Dummy_Setup do
        begin
          for DummyX := 0 to Dummy_PC.PageCount - 1 do
            for DummyY := 0 to Dummy_PC.Pages[DummyX].ControlCount - 1 do
            begin
              if (Dummy_PC.Pages[DummyX].Controls[DummyY] is TLabel) or (Dummy_PC.Pages[DummyX].Controls[DummyY] is TScrollBox) or (Dummy_PC.Pages[DummyX].Controls[DummyY] is TPageControl) then
                Continue;

              if Dummy_PC.Pages[DummyX].Controls[DummyY] is TCheckBox then
                (Dummy_PC.Pages[DummyX].Controls[DummyY] as TCheckBox).Checked := ReadBoolean(Dummy_PC.Pages[DummyX].Name, (Dummy_PC.Pages[DummyX].Controls[DummyY] as TCheckBox).Name,
                  (Dummy_PC.Pages[DummyX].Controls[DummyY] as TCheckBox).Checked);

              if Dummy_PC.Pages[DummyX].Controls[DummyY] is TCheckListBox then
              begin
                for DummyZ := 0 to (Dummy_PC.Pages[DummyX].Controls[DummyY] as TCheckListBox).Count - 1 do
                  (Dummy_PC.Pages[DummyX].Controls[DummyY] as TCheckListBox).Checked[DummyZ] :=
                    ReadBoolean(Dummy_PC.Pages[DummyX].Name, (Dummy_PC.Pages[DummyX].Controls[DummyY] as TCheckListBox).Name + '_' + IntToStr(DummyZ),
                    (Dummy_PC.Pages[DummyX].Controls[DummyY] as TCheckListBox).Checked[DummyZ]);
              end;

              if Dummy_PC.Pages[DummyX].Controls[DummyY] is TEdit then
                (Dummy_PC.Pages[DummyX].Controls[DummyY] as TEdit).Text := ReadString(Dummy_PC.Pages[DummyX].Name, (Dummy_PC.Pages[DummyX].Controls[DummyY] as TEdit).Name,
                  (Dummy_PC.Pages[DummyX].Controls[DummyY] as TEdit).Text);

              if Dummy_PC.Pages[DummyX].Controls[DummyY] is TRadioGroup then
                (Dummy_PC.Pages[DummyX].Controls[DummyY] as TRadioGroup).ItemIndex := ReadInteger(Dummy_PC.Pages[DummyX].Name, (Dummy_PC.Pages[DummyX].Controls[DummyY] as TRadioGroup).Name,
                  (Dummy_PC.Pages[DummyX].Controls[DummyY] as TRadioGroup).ItemIndex);
usw.


Hier lese ich ja direkt in die Controls ein. Im Anschluss kann ich dann diese Werte alle in meine Klasse übetragen:

Delphi-Quellcode:
function TForm_Setup.GetSetup(aSetup: TSetupClass): Boolean;
begin
  { :: Einstellungen aus den Komponenten einlesen :: }
  try
    try
      aSetup.Setup_Font.F_fnt_Zimmer_Generell.Assign(Memo_Setup_Grid_Font.Font);
      aSetup.Setup_Font.f_fnt_Zimmer_MouseHover.Assign(Memo_Setup_GridMouse_Font.Font);
      { TabSheet 09 }  { Aussehen Hauptprogramm }
      aSetup.Setup_AusehenHauptProgramm.F_fnt_Setup_MainColorFont.Assign(Memo_Setup_MainColorFont.Font);
      aSetup.Setup_AusehenHauptProgramm.F_clr_MainButton_Leave := ColorBox_Setup_MainButton_Leave.Selected;
      aSetup.Setup_AusehenHauptProgramm.F_clr_MainButton_Enter := ColorBox_Setup_MainButton_Enter.Selected;
    finally
      Result := true;
    end;
  except
    Result := False;
  end;
end;

Wäre das eine "gute" Idee?

LG Mathias
Mathias
Ich vergesse einfach zu viel.

Geändert von NoGAD ( 3. Mär 2022 um 12:41 Uhr)
  Mit Zitat antworten Zitat