Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Immer mehrere CheckBoxen = true (https://www.delphipraxis.net/146573-immer-mehrere-checkboxen-%3D-true.html)

Jens Hartmann 22. Jan 2010 20:29


Immer mehrere CheckBoxen = true
 
Hallo,

jetzt muss ich schon wieder nerven. Ich habe 3 CheckBoxen, wo von immer genau 2 Checked sein sollen. Und zwar so...
Code:
  CB1 and CB2
  CB1 and CB3
  CB2 and CB3
Beim initialisieren, werden CB1 und CB2 auf Checked gesetzt und CB3 Enabled. Klicke ich jetzt auf CB1, soll CB1 Enabled und Unchecked werden und CB3 Eneabled = true und Checked. Würde ich auf CB2, soll CB2 Enabled und Unchecked werden und CB3 Eneabled = true und Checked.

So soll das dann auch weiter möglich sein. Ich habe jetzt schon die Hilfe durchsúcht,

aber leider ohne Erfolg. Hat da jemand eine Idee.

Gruß Jens

mkinzler 22. Jan 2010 20:32

Re: Immer mehrere CheckBoxen = true
 
Eine nicht aktive Komponente empfängt aber keine Messages

Matze 22. Jan 2010 20:36

Re: Immer mehrere CheckBoxen = true
 
Hallo Jens

Zitat:

Zitat von Jens Hartmann
Beim initialisieren, werden CB1 und CB2 auf Checked gesetzt und CB3 Enabled. Klicke ich jetzt auf CB1, soll CB1 Enabled und Unchecked werden und CB3 Eneabled = true und Checked. Würde ich auf CB2, soll CB2 Enabled und Unchecked werden und CB3 Eneabled = true und Checked.

was meinst du genau mit "Enabled"? Du schreibst, CheckBoxX soll enabled werden und eine andere CheckBoxY Enabled = true.
Ist die Eigenschaft "Enabled" nun egal oder verstehe ich etwas falsch? Sollen Checkboxen auch mal "disabled" werden?

Jens Hartmann 22. Jan 2010 21:07

Re: Immer mehrere CheckBoxen = true
 
Hallo Matze,

War falsch beschrieben. Ich möchte das von drei Möglickeiten IMMER 2 Checked sind und die Dritte Disabled.

Also so..
Delphi-Quellcode:
//Aktueller Status CheckBox1.Checked und Enabled CheckBox2.Checked und Enabled CheckBox3.Unchecked und Disabled
//Klick CheckBox1
  with CheckBox1 do
    begin
      Enabled := false;
      Checked := false;
    end;
  with CheckBox2 do
    begin
      Enabled := true;
      Checked := true;
    end;
  with CheckBox3 do
    begin
      Enabled := true;
      Checked := true;
    end;
//Neuer Status CheckBox1.UnChecked und Disabled CheckBox2.Checked und Enabled CheckBox3.Checked und Enabled
//Jetzt Klick nur noch in CheckBox2 und CheckBox3 möglich.
Ich hoffe ich konnte das jetzt so einigermaßen beschreiben.

Gruß Jens

mkinzler 22. Jan 2010 21:09

Re: Immer mehrere CheckBoxen = true
 
Wie gesagt, reagiert ein disabled Control nicht mehr auf Klicks

Jens Hartmann 22. Jan 2010 21:32

Re: Immer mehrere CheckBoxen = true
 
Das mag ja sein, aber ich kann es ja nach dem Click disabled setzten. Ich bekomm das nur irgendwie mit der Ausführung nicht hin. Müsste aber doch mit dem disabled so in etwa funktionieren.

Delphi-Quellcode:
procedure TFDatenauswertung.CheckBox1Click(Sender: TObject);//CheckBox 1/2 und drei führen diese Funktion aus
begin
  if Sender = CheckBox1 then
    begin
      if CheckBox1.Checked then
        begin
          with CheckBox1 do
            begin
              Checked := false;
              Enabled := false;
            end
          else
            begin
              Enabled := true;
              Checked := true;  
            end
{...}
So irgendwie könnte das doch funktionieren. ODER?

Gruß Jens

mkinzler 22. Jan 2010 21:33

Re: Immer mehrere CheckBoxen = true
 
Wenn nur die CheckBox, welche nicht angehakt ist, enabled ist und die anderen nicht, kannst du die anderen nicht anklicken!

Jens Hartmann 22. Jan 2010 21:40

Re: Immer mehrere CheckBoxen = true
 
Nein, genau deshalb umgekehrt. Es sind immer die Enabled die auch Checked sind. Klicke ich jetzt auf eine Checked, soll diese Unchecked und Disabled werden und die die bis dahin Unchecked und Disabled war, soll dann Checked und Enabled werden.

Ist aber auch kompliziert. Das ist ja wahrscheinlich auch nur mein Problem, das alles zu sortieren.

Gruß Jens

Luckie 22. Jan 2010 21:45

Re: Immer mehrere CheckBoxen = true
 
Warum deaktivierst du das Steuerelement, wenn der Benutzer es anklicken können soll? Ein deaktiviertes Steuerelemente zeigt dem Benutzer, dass diese Funktion im Moment nicht zur Verfügung steht. Ich würde gar nicht auf die Idee kommen ein deaktiviertes Steuerelement anzuklicken.

Das, was du willst kann man bestimmt realisieren, aber es würden den Benutzer wohl ziemlich verwirren.

Hawkeye219 22. Jan 2010 21:48

Re: Immer mehrere CheckBoxen = true
 
Hallo Jens,

ich würde ja eher eine TRadioGroup mit 3 Elementen und passender Beschriftung wählen, aber dennoch:

Delphi-Quellcode:
procedure TForm1.CheckBoxClick(Sender: TObject);
begin
  CheckBox1.OnClick := nil;
  CheckBox2.OnClick := nil;
  CheckBox3.OnClick := nil;

  CheckBox1.Checked := (Sender <> CheckBox1);
  CheckBox1.Enabled := CheckBox1.Checked;

  CheckBox2.Checked := (Sender <> CheckBox2);
  CheckBox2.Enabled := CheckBox2.Checked;

  CheckBox3.Checked := (Sender <> CheckBox3);
  CheckBox3.Enabled := CheckBox3.Checked;

  CheckBox1.OnClick := CheckBoxClick;
  CheckBox2.OnClick := CheckBoxClick;
  CheckBox3.OnClick := CheckBoxClick;
end;
Diese Routine musst du nur mit dem OnClick-Ereignis aller Checkboxen verbinden.

Gruß Hawkeye

Matze 22. Jan 2010 21:50

Re: Immer mehrere CheckBoxen = true
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt nur mal zum Verständnis, denn mir erschließt sich der Sinn und daher auch dein Problem nicht. :stupid:

Meinst du sowas wie angehängt ist oder etwas komplett anderes?

Edit: Ok das, was ich angehängt habe, ist etwas ähnliches wie das von Hawkeye.

Jens Hartmann 22. Jan 2010 21:58

Re: Immer mehrere CheckBoxen = true
 
Liste der Anhänge anzeigen (Anzahl: 1)
War halt so ne Idee, wenn ich es mir richtig überlege, wäre es vieleicht besser die Controls nicht zu deaktivierst. Ich weiß es aber auch nicht so genau. Mit einer RadioGroup geht eigendlich auch nicht. Ich versuche die Situation mal ein bißchen besser zu beschreiben.

Die CheckBoxen nutze ich einmal um in einer Tabelle eine ODER-Suchfunktion durchzuführen. Das heißt, ich Hake dort die Tabellenspalten an, in denen gesucht werden soll, und das ODER-Verknüpft. Also kann das Ergebniss in Spalte 1, ODER Spalte 2 stehen, es wird gefunden.

Über eine weitere RadioGroup, kann ich von ODER auf UND Suche umstellen. Dabei möchte ich, das immer 2 Spalten durchsucht werden. Somit muss ich ja realisieren, das nie alle drei, aber mindestens 2 CheckBoxen gesetzt werden. Setze ich die RG auf Index 1, werden automatisch die CB1 und CB2 Checked. Jetzt soll der USER aber die Möglichkeit haben, auch zu sagen, ich möchte aber UND Suchen in Spalte 1 und 3, also CB1 und CB3 Checked. Dann darf aber CB2 nicht CHECKED sein. Klick jetzt der USER in CB2 um diese zu Checken, kann ich ja nicht wissen, welcher der USER von CB1 und CB2 Unchecken will.

(siehe Anhang)

Man ist das kompliziert.

Gruß Jens

Jens Hartmann 22. Jan 2010 22:02

Re: Immer mehrere CheckBoxen = true
 
Zitat:

Zitat von Matze
Jetzt nur mal zum Verständnis, denn mir erschließt sich der Sinn und daher auch dein Problem nicht.

Genau, Danke Matze. :thumb: Das war genau das was ich meinte. Und ich wüsste nicht, wie man das anders realisieren sollte bzw. könnte.

Zitat:

Zitat von Hawkeye219
ich würde ja eher eine TRadioGroup mit 3 Elementen und passender Beschriftung wählen, aber dennoch:

Ich denke das Problem, ist die einmal ODER und ein ander mal die UND Verknüpfung.
Aber trotzdem danke für die Hilfe. Ich werde das jetzt mal versuchen umzusetzen.

MFG

Jens

alzaimar 23. Jan 2010 02:22

Re: Immer mehrere CheckBoxen = true
 
Liste der Anhänge anzeigen (Anzahl: 1)
3x Combobox:
1. combobox.Items = 'Spalte-1, Spalte-2, Spalte-3'
2. Combobox.Items = 'OR, AND'
3. combobox.Items = 'Spalte-1, Spalte-2, Spalte-3'

Das ist die einfachste Lösung und auch die, die am schönsten zu bedienen ist.

Wenn du drei Checkboxen haben willst, dann (Die Checkboxen sind in einer TList 'CheckBoxes') so:
Delphi-Quellcode:
Procedure TForm1.AllCheckBoxesGetThisOnClick(Sender : TObject)
Var
  checkedCount : Integer;
  i : Integer;
  lastCheckedTag : Cardinal;
  lastChecked : Integer;

Begin
  (Sender as TCheckBox).Tag := GetTickCount;
  lastChecked := -1;
  checkedCount := 0;
  For i := 0 to CheckBoxes.Count - 1 do
    if TCheckBox(CheckBoxes[i]).Checked then begin
      inc (checkedCount);
      if (lastChecked =-1) or (lastCheckedTag > TCheckBox(CheckBoxes[i]).Tag) Then Begin
        lastCheckedTag := TCheckBox(CheckBoxes[i]).Tag;
        lastChecked := i;
      end
    end;

  If checkedCount>2 then
    TCheckBox(CheckBoxes[lastChecked]).Checked := False;
End;
Ungetestet.
Idee: Du klickst die Checkboxen nacheinander an, z.B. 3,2,1. Dann wird bei CheckBox3 der Haken wieder weggenommen. Dann sind 2,1 angeklickt. Nun klickst Du auf 3. Dann wird bei #2 der Haken weggenommen.

Ich persönlich würde aber die erste Variante (wahlweise mit #1 und #3 als Listbox und #2 als Radiogroup ('AND' 'OR') nehmen.

Jens Hartmann 24. Jan 2010 15:48

Re: Immer mehrere CheckBoxen = true
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von alzaimar
Ich persönlich würde aber die erste Variante

Danke alzaimer, die Lösunge finde ich natürlich genial. habe ich jetzt auch in diese Richtung umgebaut. Aber mal ne Frage zum Aufbau. Ich habe noch ein wenig mehr Auswahl Möglichkeiten. Siehe Bild im Anhang. Kann man den folgenden Code zu der Lösung nicht irgendwie vereinfachen.
Es funktioniert, aber war schon echt sehr Aufwendig und fertig bin ich auch noch nicht.
Delphi-Quellcode:
{************************************}
{          Suchfunktionen Edit      }
{************************************}
procedure TFDatenauswertung.SucheCallbackEdit;
begin
case Zentralentyp of
  0..3:
    begin
      case cbLinking.ItemIndex of
      -1://Keine Verknüpfung
        begin
          case cbSearchOne.ItemIndex of
          0://Ereignis Suche
          begin
            case cbLinkingAfterwards.ItemIndex of
            0://Nicht Verknüpft nur 1 Ereignistext
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit1,nil);
            end;
            1://Oder Verknüpft 2 Ereignistexte
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit2,nil);
            end;
            2://Und Verknüpft 2 Ereignistexte
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit3,nil);
            end;
            end;
          end;
          1://Teilnehmer Suche
          begin
            case cbLinkingAfterwards.ItemIndex of
            0://Nicht Verknüpft nur 1 Ereignistext
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit4,nil);
            end;
            1://Oder Verknüpft 2 Ereignistexte
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit5,nil);
            end;
            2://Und Verknüpft 2 Ereignistexte
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit6,nil);
            end;
            end;
          end;
          2://Bereich Suche
          begin
            case cbLinkingAfterwards.ItemIndex of
            0://Nicht Verknüpft nur 1 Ereignistext
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit7,nil);
            end;
            1://Oder Verknüpft 2 Ereignistexte
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit8,nil);
            end;
            2://Und Verknüpft 2 Ereignistexte
            begin
              vst.IterateSubtree(nil,SucheCallbackEdit9,nil);
            end;
            end;
          end;
          end;
        end;
      1://Spalten ODER Verknüpfung
        begin
          case cbSearchOne.ItemIndex of
          0://Spalte 1 Ereignis Suche
            case
              cbSearchTwo.ItemIndex of
              0://Oder Teilnehmer Suche
              begin
                case cbLinkingAfterwards.ItemIndex of
                0://Nicht Verknüpft nur 1 Ereignistext
                begin
                  vst.IterateSubtree(nil,SucheCallbackEdit10,nil);
                end;
                1://Oder Verknüpft 2 Ereignistexte
                begin
                  vst.IterateSubtree(nil,SucheCallbackEdit11,nil);
                end;
                2://Und Verknüpft 2 Ereignistexte
                begin
                  vst.IterateSubtree(nil,SucheCallbackEdit12,nil);
                end;
              end;
              end;
              1://Oder Bereich Suche
              begin
              begin
                case cbLinkingAfterwards.ItemIndex of
                0://Nicht Verknüpft nur 1 Ereignistext
                begin
                  vst.IterateSubtree(nil,SucheCallbackEdit13,nil);
                end;
                1://Oder Verknüpft 2 Ereignistexte
                begin
                  vst.IterateSubtree(nil,SucheCallbackEdit14,nil);
                end;
                2://Und Verknüpft 2 Ereignistexte
                begin
                  vst.IterateSubtree(nil,SucheCallbackEdit15,nil);
                end;
              end;
              end;
              end;
            end;
          1://Teilnehmer Suche
            case
              cbSearchTwo.ItemIndex of
              0://Oder Ereignis Suche
              begin

              end;
              1://Oder Teilnehmer Suche
              begin

              end;
              2://Oder Bereich Suche
              begin

              end;
            end;
//usw. für die diversen Möglichkeiten. Und dann ja noch zur jeder Möglichkeit einen der folgenden Suchfuntionen.

procedure TFDatenauswertung.SucheCallbackEdit11(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
:gruebel:

Daraus würden später 29 Möglichkeiten und 29 Suchfunktionen.

Gruß Jens

Jens Hartmann 24. Jan 2010 18:34

Re: Immer mehrere CheckBoxen = true
 
Hallo nochmal,

so ich habe das jetzt noch etwas verändert, in dem ich die möglichen Zustände vorher über den ItemIndex der einzelnen Komponenten berechnen. Ich denke das das so schon ganz gut ist. Entweder werft mir Kommentare entgegen, oder Verbesserungsvorschläge. Da es ein doch recht Aufwendiges Thema war, ist der folgenden Code etwas länger.

Ich hoffe die Lust verlässt Euch trotzdem nicht.
Delphi-Quellcode:
{Suchfubktion über Edit 1 und Edit in Verbindung aller Möglichkeiten}
procedure TFDatenauswertung.btnFilterClick(Sender: TObject);
var
  Callback : integer;
begin
case cbLinking.ItemIndex of
0:case cbLinkingAfterwards.ItemIndex of
  0: Callback := cbSearchOne.ItemIndex;
  1: Callback := cbSearchOne.ItemIndex+3;
  2: Callback := cbSearchOne.ItemIndex+6;
  end;
1:case cbLinkingAfterwards.ItemIndex of
  0: case cbSearchOne.ItemIndex of
     1: Callback := cbSearchTwo.ItemIndex+10;
     2: Callback := cbSearchTwo.ItemIndex+12;
     3: Callback := cbSearchTwo.ItemIndex+14;
     end;
  1: case cbSearchOne.ItemIndex of
     1: Callback := cbSearchTwo.ItemIndex+16;
     2: Callback := cbSearchTwo.ItemIndex+18;
     3: Callback := cbSearchTwo.ItemIndex+20;
     end;
  2: case cbSearchOne.ItemIndex of
     1: Callback := cbSearchTwo.ItemIndex+22;
     2: Callback := cbSearchTwo.ItemIndex+24;
     3: Callback := cbSearchTwo.ItemIndex+26;
     end;
  end;
2:case cbLinkingAfterwards.ItemIndex of
  0: case cbSearchOne.ItemIndex of
     1: Callback := cbSearchTwo.ItemIndex+28;
     2: Callback := cbSearchTwo.ItemIndex+30;
     3: Callback := cbSearchTwo.ItemIndex+32;
     end;
  1: case cbSearchOne.ItemIndex of
     1: Callback := cbSearchTwo.ItemIndex+34;
     2: Callback := cbSearchTwo.ItemIndex+36;
     3: Callback := cbSearchTwo.ItemIndex+38;
     end;
  2: case cbSearchOne.ItemIndex of
     1: Callback := cbSearchTwo.ItemIndex+40;
     2: Callback := cbSearchTwo.ItemIndex+42;
     3: Callback := cbSearchTwo.ItemIndex+44;
     end;
  end;
end;

case Callback of
1:vst.IterateSubtree(nil,SucheCallbackEdit1,nil);
2:vst.IterateSubtree(nil,SucheCallbackEdit2,nil);
3:vst.IterateSubtree(nil,SucheCallbackEdit3,nil);
4:vst.IterateSubtree(nil,SucheCallbackEdit4,nil);
5:vst.IterateSubtree(nil,SucheCallbackEdit5,nil);
6:vst.IterateSubtree(nil,SucheCallbackEdit6,nil);
7:vst.IterateSubtree(nil,SucheCallbackEdit7,nil);
8:vst.IterateSubtree(nil,SucheCallbackEdit8,nil);
9:vst.IterateSubtree(nil,SucheCallbackEdit9,nil);
10:vst.IterateSubtree(nil,SucheCallbackEdit10,nil);
11:vst.IterateSubtree(nil,SucheCallbackEdit11,nil);
12:vst.IterateSubtree(nil,SucheCallbackEdit10,nil);
13:vst.IterateSubtree(nil,SucheCallbackEdit12,nil);
14:vst.IterateSubtree(nil,SucheCallbackEdit11,nil);
15:vst.IterateSubtree(nil,SucheCallbackEdit12,nil);
16:vst.IterateSubtree(nil,SucheCallbackEdit13,nil);
17:vst.IterateSubtree(nil,SucheCallbackEdit14,nil);
18:vst.IterateSubtree(nil,SucheCallbackEdit13,nil);
19:vst.IterateSubtree(nil,SucheCallbackEdit15,nil);
20:vst.IterateSubtree(nil,SucheCallbackEdit14,nil);
21:vst.IterateSubtree(nil,SucheCallbackEdit15,nil);
22:vst.IterateSubtree(nil,SucheCallbackEdit16,nil);
23:vst.IterateSubtree(nil,SucheCallbackEdit17,nil);
24:vst.IterateSubtree(nil,SucheCallbackEdit16,nil);
25:vst.IterateSubtree(nil,SucheCallbackEdit18,nil);
26:vst.IterateSubtree(nil,SucheCallbackEdit17,nil);
27:vst.IterateSubtree(nil,SucheCallbackEdit18,nil);
28:vst.IterateSubtree(nil,SucheCallbackEdit19,nil);
29:vst.IterateSubtree(nil,SucheCallbackEdit20,nil);
30:vst.IterateSubtree(nil,SucheCallbackEdit19,nil);
31:vst.IterateSubtree(nil,SucheCallbackEdit21,nil);
32:vst.IterateSubtree(nil,SucheCallbackEdit20,nil);
33:vst.IterateSubtree(nil,SucheCallbackEdit21,nil);
34:vst.IterateSubtree(nil,SucheCallbackEdit22,nil);
35:vst.IterateSubtree(nil,SucheCallbackEdit23,nil);
36:vst.IterateSubtree(nil,SucheCallbackEdit22,nil);
37:vst.IterateSubtree(nil,SucheCallbackEdit24,nil);
38:vst.IterateSubtree(nil,SucheCallbackEdit23,nil);
39:vst.IterateSubtree(nil,SucheCallbackEdit24,nil);
40:vst.IterateSubtree(nil,SucheCallbackEdit25,nil);
41:vst.IterateSubtree(nil,SucheCallbackEdit26,nil);
42:vst.IterateSubtree(nil,SucheCallbackEdit25,nil);
43:vst.IterateSubtree(nil,SucheCallbackEdit27,nil);
44:vst.IterateSubtree(nil,SucheCallbackEdit26,nil);
45:vst.IterateSubtree(nil,SucheCallbackEdit27,nil);
end;
  btnReset.Enabled := true;
end;

procedure TFDatenauswertung.btnResetClick(Sender: TObject);
begin
  vst.IterateSubtree(nil,SucheCallbackEditReset,nil);
  btnReset.Enabled := false;
end;
//Suche Zurücksetzten und alle geladenen Daten Anzeigen
procedure TFDatenauswertung.SucheCallbackEditReset(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := true;
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit1(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Teilnehmer nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit2(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Bereich nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit3(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis nach Text Edit 1 OR Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit4(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Teilnehmer nach Text Edit 1 OR Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit5(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Bereich nach Text Edit 1 OR Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit6(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis nach Text Edit 1 AND Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit7(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Teilnehmer nach Text Edit 1 AND Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit8(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Bereich nach Text Edit 1 AND Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit9(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis OR Teilnehmer nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit10(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0)
                                                or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis OR Bereich nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit11(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0)
                                                or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Teilnehmer OR Bereich nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit12(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0)
                                                or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis OR Teilnehmer nach Text Edit 1 OR Edit 2
procedure TFDatenauswertung.SucheCallbackEdit13(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis OR Bereich nach Text Edit 1 OR Edit 2
procedure TFDatenauswertung.SucheCallbackEdit14(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Bereich OR Teilnehmer nach Text Edit 1 OR Edit 2
procedure TFDatenauswertung.SucheCallbackEdit15(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis OR Teilnehmer nach Text Edit 1 AND Edit 2
procedure TFDatenauswertung.SucheCallbackEdit16(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis OR Bereich nach Text Edit 1 AND Edit 2
procedure TFDatenauswertung.SucheCallbackEdit17(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Bereich OR Teilnehmer nach Text Edit 1 AND Edit 2
procedure TFDatenauswertung.SucheCallbackEdit18(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis AND Teilnehmer nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit19(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0)
                                                and (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis AND Bereich nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit20(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0)
                                                and (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Teilnehmer AND Bereich nach Text Edit 1
procedure TFDatenauswertung.SucheCallbackEdit21(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := (EDManFilter1.Text='') or (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0)
                                                and (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis AND Teilnehmer nach Text Edit 1 OR Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit22(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis AND Bereich nach Text Edit 1 OR Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit23(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Bereich AND Teilnehmer nach Text Edit 1 OR Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit24(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) and
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) or
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis AND Teilnehmer nach Text Edit 1 AND Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit25(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Ereignis AND Bereich nach Text Edit 1 AND Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit26(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Ereignis))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
//Suche in Spalte Bereich AND Teilnehmer nach Text Edit 1 AND Text Edit 2
procedure TFDatenauswertung.SucheCallbackEdit27(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  DatenMB : TOMBSerie;
begin
  DatenMB := TOMBSerie(VST.GetNodeData(Node)^);
  VST.IsVisible[Node] := ((EDManFilter1.Text='') and (EDManFilter2.Text='')) or
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Bereich))>0) and
                         (Pos(LowerCase(EDManFilter1.Text), LowerCase(DatenMB.Teilnehmer))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Bereich))>0) and
                         (Pos(LowerCase(EDManFilter2.Text), LowerCase(DatenMB.Teilnehmer))>0);
  PBFortschritt.Position := PBFortschritt.Position +1;
  if PBFortschritt.Position = PBFortschritt.Max then
    PBFortschritt.Position := 0;
end;
Also Danke nochmal an alle und

Gruß Jens

Matze 24. Jan 2010 18:42

Re: Immer mehrere CheckBoxen = true
 
Huch, kann man das nicht irgendwie kürzen? Der Code für Edit8 und Edit5 ist auf den ersten Blick bsp. identisch. Die ganzen Callback-Funktionen unterscheiden sich kaum voneinander. Vielleicht kann man den sich ändernden Teil als Parameter übergeben, wobei das bei Callback-Funktionen vermutlich nicht so einfach möglich ist. :gruebel:
Der Code sieht auf jedenfall heftig aus.

Jens Hartmann 24. Jan 2010 18:59

Re: Immer mehrere CheckBoxen = true
 
Zitat:

Zitat von Matze
Der Code für Edit8 und Edit5 ist auf den ersten Blick bsp. identisch

War er auch, da ist ein Fehler drin gewesen, Copy AND Paste halt.
Zitat:

Zitat von Matze
Vielleicht kann man den sich ändernden Teil als Parameter übergeben, wobei das bei Callback-Funktionen vermutlich nicht so einfach möglich ist.

Das war ja gerade noch mein Gedanke das zu verkürzen, war auch den ganzen Sonntag arbeit, das alles so auseinander zu fummeln. Der Code war vorher noch 250 Zeilen länger.

Gruß Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz