Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Schleife um farbliche Darstellung im VST anzupassen

  Alt 18. Mai 2009, 17:12
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat