Hallo zusammen,
ich habe ein VirtualTreeView, in dem ich Zeilen farblich Darstelle wenn gewisse Inhalte im VST stehen. Jetzt habe ich mehrere Checkboxen und RadioButton in einer Konfigurationsform eingebunden, die dem nutzer die Möglichkeit geben soll, diese Farbfilter selber zu erstellen.
Das ganz klappt auch ganz gut, ist jedoch sehr umständlich programmiert. Momentan habe ich hunderte Zeilen Code, um das zu realisieren. Ich würde das ganze jetzt gerne der Übersicht wegen in eine Schleife packen.
Ich zeige unten mal den Code für einen Farbfilter, von diesen habe ich 15 Stück die der User frei Programmieren kann.
Delphi-Quellcode:
case AnsichtForm.RadioGroup1.Itemindex of
0:
begin
if AnsichtForm.CheckBox1.Checked = true then
begin
if Pos(AnsichtForm.Edit1.Text,DatenMB.Ereignis) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
if Pos(AnsichtForm.Edit2.Text, DatenMB.Ereignis) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
end;
if AnsichtForm.CheckBox2.Checked = true then
begin
if Pos(AnsichtForm.Edit1.Text,DatenMB.Teilnehmer) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
if Pos(AnsichtForm.Edit2.Text, DatenMB.Teilnehmer) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
end;
if AnsichtForm.CheckBox3.Checked = true then
begin
if Pos(AnsichtForm.Edit1.Text,DatenMB.Bereich) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
if Pos(AnsichtForm.Edit2.Text, DatenMB.Bereich) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
end;
end;
1:
begin
if AnsichtForm.CheckBox1.Checked = true then
begin
if Pos(AnsichtForm.Edit1.Text,DatenMB.Ereignis) > 0 then
begin
if Pos(AnsichtForm.Edit2.Text, DatenMB.Ereignis) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
end;
end;
if AnsichtForm.CheckBox2.Checked = true then
begin
if Pos(AnsichtForm.Edit1.Text,DatenMB.Teilnehmer) > 0 then
begin
if Pos(AnsichtForm.Edit2.Text, DatenMB.Teilnehmer) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
end;
end;
if AnsichtForm.CheckBox3.Checked = true then
begin
if Pos(AnsichtForm.Edit1.Text,DatenMB.Bereich) > 0 then
begin
if Pos(AnsichtForm.Edit2.Text, DatenMB.Bereich) > 0 then
TargetCanvas.Brush.Color := AnsichtForm.ColorBox1.Selected;
end;
end;
end;
end;
Jetzt habe ich mir überlegt, das ganze mit FindComponent in eine Schleife zu packen, um den eigendlichen Code nur einmal schreiben zu müssen. Besser gesagt um den Code zu kürzen.
Allerdings, stolper ich da über folgendes Problem, wie kann ich die Funktion FindComponent auf der Hauptform von meinem Programm aufrufen.
Delphi-Quellcode:
//wäre falsch, weil ja so "self" gesucht wird
case(FindComponent('RadioGroup' + IntToStr(iRadioGroup))as TRadioGroup).ItemIndex of
//funktioniert so nicht
case(FindComponent(AnsichtForm.+ 'RadioGroup' + IntToStr(iRadioGroup))as TRadioGroup).ItemIndex of
Vieleicht kann mir ja jemand einen Tip geben.
Danke schon mal.
Gruß Jens