AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ComponentCount

Ein Thema von XXcD · begonnen am 16. Aug 2008 · letzter Beitrag vom 17. Aug 2008
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

ComponentCount

  Alt 16. Aug 2008, 22:13
Hallo,
ich habe gerade ein ganz winziges Problem.

So eine Frage habe ich schonmal gestellt und dann hat auch alles funktioniert, aber hier weiß ich einfach nicht weiter.

Ich habe zwei Panels in einer Scrollbox.
Wenn ich jetzt
Scrollbox1.ComponentCount ausführe bekomme ich 0 zurück.
Eigentlich müsste dort ja 2 stehen.

Meine Struktur sieht so aus:

Code:
+Form2
|-Panel2
  |-PageControl1
    |-TabSheet1
      |-Scrollbox1
Woran könnte das liegen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ComponentCount

  Alt 16. Aug 2008, 22:28
Ist die ScrollBox auch der Owner oder nur der Parent?
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: ComponentCount

  Alt 16. Aug 2008, 22:33
Zur Designzeit wird scheinbar nur der Parent gesetzt, der Owner der Panels ist nicht die Scrollbox. Dies kannst du nur hinbekommen, wenn du die Elemente in der Scrollbox zur Laufzeit erstellst und richtig zuweist.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ComponentCount

  Alt 16. Aug 2008, 22:35
Owner ist bei Erzeugung durch den Formulardesigner immer das Formular
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: ComponentCount

  Alt 16. Aug 2008, 22:40
Oder du sammelst dir die Elemente selber zusammen...
Delphi-Quellcode:
type
  TResult = array of TObject;

:
:

function TForm1.GetScrollboxElemente(Scrollbox: TScrollbox): TResult;
var i:integer;
    Component:TComponent;
begin
  setlength(Result, 0);
  for i:=1 to Self.ComponentCount do begin
    Component:=Self.Components[i-1];
    if Component is TWinControl then
      if (Component as TWinControl).Parent = Scrollbox then begin
        setlength(Result, length(Result)+1);
        Result[high(Result)]:=Component;
      end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#6

Re: ComponentCount

  Alt 16. Aug 2008, 22:54
Ahh ich hab jetzt hier was rausgefunden:
http://www.delphi-forum.de/topic_Pro...ee302ef5cc7cbf

Ich muss nicht ComponentCount sondern ControlCount nehmen.

Mich würde jetzt noch interessieren, warum das jetzt nicht mehr mit Componentcount funktioniert?

Ich bin mir zu 100% sicher, dass das mal funktioniert hat.
Und zwar so:

Delphi-Quellcode:
procedure TForm1.GetObjectByName(Sender: TObject);
  var
      i: Integer;
  begin
      for i := ScrollBox1.ComponentCount - 1 downto 0 do
      begin
            if Scrollbox1.Components[i] is TPanel then
      if TPanel(Scrollbox1.Components[i]).Name = (Sender as TPanel).Parent.Name then begin
      if TPanel(Scrollbox1.Components[i]).AutoSize = false then begin
        TPanel(Scrollbox1.Components[i]).AutoSize:=true;
      end
      else
      begin
        TPanel(Scrollbox1.Components[i]).AutoSize:=false;
       TPanel(Scrollbox1.Components[i]).Height:=17;
      end;
      end;
      end;
  end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: ComponentCount

  Alt 16. Aug 2008, 22:55
Bei WinControls gibt es nur den Owner
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: ComponentCount

  Alt 16. Aug 2008, 23:22
Es gibt Components[] und Controls[] und jeweils dazugehörend ComponentCount und ControlCount.
Beide Arrays bilden einen Baum ab bei dem das Formular an der Spitze (oder an der Wurzel, je nach Sichtweise) steht.

Das Components[]-Array spiegelt die Besitzverhältnisse wieder.
Fast alle Komponenten gehören dem Formular.
Bei einer TTable oder TQuery gehören die TField-Objekte zum Beispiel dem TTable oder TField-Objekt.

Dagegen spiegelt das Controls[]-Array die visuellen Verhältnisse.
Es wird genau der Baum abgebildet, den du in deinem 1. Beitrag gezeigt hast.
Jeder Versuch, diesem Baum irgendwie auf Components[] zurückzuführen ist sinnlos.
Richtig ist, Controls[] und ControlCount zu verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#9

Re: ComponentCount

  Alt 17. Aug 2008, 00:48
Ok, dann weiß ich jetzt wieder mehr
Dann bedanke ich mich vielmals.
Aber trotzdem komisch, dass das mit ComponentCount vor einiger Zeit mal bei mir funktioniert hat.
  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:48 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