Einzelnen Beitrag anzeigen

Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#5

AW: TCategoryPanel.ControlCount immer = 1

  Alt 3. Mai 2015, 07:33
So, ich habe endlich mal wieder Zeit gefunden, mich mit Deplhi zu beschäftigen.
Auch Dir erstmal dankte, himitsu.

Bei dem Tipp mit dem Klassennamen bin ich etwas verwirrt.
Der ist doch TCategoryPanel oder nicht?
Und inwiefern hilft mir das dann weiter um zu wissen, dass ich mit ControlCount nicht die Anzahl der Controls auf dem Panel ermitteln kann?

Ich habe die verschiedenen Varianten mal ausprobiert.
Ich möchte mit dem ermittelten Wert eine for Schleife ausführen, um bestimmte Komponenten (TComboBox) zu leeren.

Wenn ich die offizielle API verwende, will Delphi von mir noch zwei Parameter haben, wovon der zweite wohl nicht relevant ist und der erste, der sich Proc nennt, ist wohl eine Callback Funktion.
Ich habe mal etwas gegoogelt und dabei herausgefunden, dass es sich bei einer Callback Fuktion um eine Funktion handelt, die ich selbst definieren kann und ausgeführt wird und einen Wert zurückliefert.
Aber wofür brauche ich das? Ich möchte ja nur die Anzahl der Komponenten damit ermitteln und das Ergebnis in der for Schleife verwenden.

Mit der anderen Variante funktioniert das Ermitteln der Komponenten super.
Allerdings kann ich in der for Schleife auch nicht TCategoryPanel1.Controls[i] verwenden, da es immer zu dem Fehler "Listenindex überschreitet das Maximum(1)' kommt.
Wahrscheinlich aus dem selben Grund, weshalb man ControlCount nicht verwenden kann (was ich ja bislang, wie in der ersten Frage dieses Posts beschrieben, noch nicht verstanden habe).

Hier mal der Code:

Delphi-Quellcode:
procedure TGeneralCtrl.ResetFilter(Cpl: TCategoryPanel);
var
  i, cplComponents :integer;
begin
  //Anzahl Komponenten ermitteln - 1.
  CplComponents := (Cpl.Controls[0] as TCategoryPanelSurface).ControlCount - 1; //<--Funktioniert.
  //ComboBoxen zurücksetzen.
  for i := 0 to cplComponents do
  begin
    if Cpl.Controls[i] is TComboBox then //<--Fehler bei zweitem Durchlauf.
    begin
      (Cpl.Controls[i] as TComboBox).Text := '';
    end;
  end;
end;
Würde mich freuen, wenn ich noch ein paar Erklärungen bekomme.

Geändert von Nils S. ( 3. Mai 2015 um 08:23 Uhr) Grund: Code korrigiert
  Mit Zitat antworten Zitat