AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TCategoryPanel.ControlCount immer = 1
Thema durchsuchen
Ansicht
Themen-Optionen

TCategoryPanel.ControlCount immer = 1

Ein Thema von Nils S. · begonnen am 20. Mär 2015 · letzter Beitrag vom 3. Mai 2015
Antwort Antwort
Nils S.

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

TCategoryPanel.ControlCount immer = 1

  Alt 20. Mär 2015, 20:47
Guten Abend zusammen,

ich bin etwas verwirrt...
Wenn ich in einem TCategoryPanel (nicht TCategoryPanelGroup) ein ControlCount durchführe, bekomme ich immer 1 zurück.
Packe ich aber die gleichen Komponenten (Labels, Comboboxen, Buttons und RadioButtons) beispielsweise in ein TPanel, bekomme ich die richtige Anzahl zurück.

Kann mir jemand sagen, warum das so ist?
Muss man beim TCategoryPanel noch irgendwas beachten?

Würde mich über Rückmeldungen freuen.

Danke.

MfG

Nils
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TCategoryPanel.ControlCount immer = 1

  Alt 21. Mär 2015, 07:20
Hi Nils S

Ich habe dieses Controlcount bisher nie gebraucht, da auf meinen Categorypanels jeweils eine Frameinstanz liegt - ausser auf einem, das zusätzlich ein Panel enthält. Eine probeweise Abfrage ergab jedoch auch bei mir 1. Scheint ein Fehler zu sein.
Ich arbeite mit DelphiXE4.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Nils S.

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

AW: TCategoryPanel.ControlCount immer = 1

  Alt 21. Mär 2015, 08:58
Hi Delbor,

danke erst Mal, für die Antwort.
Habe mir schon fast gedacht, dass es sich um 'nen Bug handelt.
Also tatsächlich immer noch ein TPanel da rein setzen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#4

AW: TCategoryPanel.ControlCount immer = 1

  Alt 21. Mär 2015, 09:55
Erstmal wäre es eine gute Idee gewesen, wenn du einfach mal nachsiehst, was das für ein Control ist (ClassName),
dann wäre dir sofort aufgefallen, daß es ganz richtig so ist.

Also entweder (CategoryPanel1.Controls[0] as TCategoryPanelSurface).ControlCount oder du benutzt die offizielle API, also CategoryPanel1.GetChildren .
Delphi-Referenz durchsuchenTWinControl.GetChildren
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (21. Mär 2015 um 09:58 Uhr)
  Mit Zitat antworten Zitat
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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.609 Beiträge
 
Delphi 12 Athens
 
#6

AW: TCategoryPanel.ControlCount immer = 1

  Alt 3. Mai 2015, 08:19
Das TCategoryPanel hat nur ein einziges Child-Control vom Typ TCategoryPanelSurface. In diesem stecken dann die einzelnen Conrols, die du sehen kannst. Du musst also nicht über die Controls von TCategoryPanel iterieren, sonden über die des TCategoryPanelSurface, was du über Cpl.Controls[0] erreichts. Die Typumwandlung mittels as ist wohl nicht mal nötig.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz