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