Ich habe mir jetzt mal testweise etwas gebastelt und alle WinControls einer Form zu finden. Eine Testform und eine zweite mit 2 Listboxen (1. alle Controls, 2. nur die mit Namen "SV_") zur Anzeige(da werde ich später Stringlisten draus machen).
Delphi-Quellcode:
procedure TForm1.ToolButton1Click(Sender: TObject);
var
ix: Integer;
begin
Form2.LB1.Items.Add('PageControl1'); // Initialisierung, wo welchem WinControl aus gestartet werden soll
ix:=0;
bbreak:=false;
While bbreak<>True do
begin
ListControls(Form2.LB1.Items[ix]);
inc(ix);
if ix > Form2.LB1.Items.Count-1 then
bbreak:=true;
end;
end;
Delphi-Quellcode:
procedure TForm1.ListControls(aComponent: String);
var
ic: Integer;
begin
for ic:=0 to TWinControl(FindComponent(aComponent)).ControlCount-1 do
begin
if Pos('SV_',TWinControl(FindComponent(aComponent)).Controls[ic].Name)>0 then
Form2.LB2.Items.Add(TWinControl(FindComponent(aComponent)).Controls[ic].Name)
else
Form2.LB1.Items.Add(TWinControl(FindComponent(aComponent)).Controls[ic].Name);
end;
end;
In LB2 stehen dann nur die Controls, die mit "SV_" beginnen und Systemwerte beinhalten. Zum Schreiben in die
DB wird diese Liste dann noch einmal durchlaufen, die Werte geholt und in die
DB geschrieben.
Delphi-Quellcode:
// Werte holen
for ix:=0 to Form2.LB2.Items.Count-1 do
begin
if TWinControl(FindComponent(Form2.LB2.Items[ix])) is TEdit then
ShowMessage((TWinControl(FindComponent(Form2.LB2.Items[ix])) As TEdit).Text);
if TWinControl(FindComponent(Form2.LB2.Items[ix])) is TCheckBox then
ShowMessage(booltostr((TWinControl(FindComponent(Form2.LB2.Items[ix])) As TCheckBox).Checked));
if TWinControl(FindComponent(Form2.LB2.Items[ix])) is TRadioButton then
ShowMessage(booltostr((TWinControl(FindComponent(Form2.LB2.Items[ix])) As TRadioButton).Checked));
end;
Wenn jemand eine Idee hat, wie ich das noch "schöner" machen kann, bitte immer her damit
Gruß Igotcha