Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Nue eine CheckBox wird gefunden ! (https://www.delphipraxis.net/187264-nue-eine-checkbox-wird-gefunden.html)

Minibike 12. Nov 2015 15:14


Nue eine CheckBox wird gefunden !
 
Hallo,
habe seit Tagen ein Problem mit den CheckBoxen, und komme nicht mehr weiter. Wahrscheinlich ein kleines Problem, aber ich hab mir Delphi selbs angeeignet, und habe somit wenig Erfahrung und Ahnung von Delphi. Zum Problem : hab 10 CheckBoxen Dynamisch erzeugt, und kann nur eine davon abfragen, wieso ?

// 10 CheckBoxen erzeugen (0-9)
h := 64; // Höhe
i:=0;
While i <=9 Do Begin
newCheckBox := TCheckBox.Create(newCheckBox);
newCheckBox.parent := newtab;
newCheckBox.name := 'NewCheckBox'+inttostr(k)+inttostr(i);
newCheckBox.caption := 'Neue CheckBox'+inttostr(k)+inttostr(i);
newCheckBox.width := 120;
newCheckBox.left := 80;
newCheckBox.top := h;
newCheckBox.visible := true;
h := h +24;
i:=i+1;
end;



// Die 10 CheckBoxen abfragen
i:=0;
While i<=9 Do
begin
Test := 'NewCheckBox7' + IntToStr(i);
If TCheckBox(FindComponent(Test)).Checked = true then
ShowMessage('Ergebnis : True')
ELSE
ShowMessage('Ergebnis : False') ;
i:=i+1;
end;


Erster Durchlauf (i=0) wird NewCheckBox70 eindeutig gefunden, aber bei der nächsten (i=1) NewCheckBox71 bricht das Prg. zusammen, wieso ?

Gruß Mike, ich hoffe Ihr könnt mir da weiter helfen.........

mkinzler 12. Nov 2015 15:20

AW: Nue eine CheckBox wird gefunden !
 
Das Interessanteste hast Du weggelassen: Wie fragst Du ab?

Delphi-Quellcode:
newCheckBox := TCheckBox.Create(newCheckBox);
ist auch etwas ungünstig. Nimm besser die Form oder newTab als Owner oder Nil.

Minibike 12. Nov 2015 16:13

AW: Nue eine CheckBox wird gefunden !
 
Hallo,
danke für die schnelle Antwort, aber alles was ich Versuche geht nicht, habs mit newTab und Nil versucht.
Ich versuche die ganze Zeit 10 CheckBoxen auf ein TabSheet zu erzeugen. Das Neue TabSheet hab ich so erzeugt:
Delphi-Quellcode:
  //
  k := PageControl1.PageCount + 1;
  newtab := TTabSheet.Create(PageControl1);
  newtab.PageControl := PageControl1;
  newtab.name := 'tab'+inttostr(k);
  newtab.Caption := 'Tab '+inttostr(k);
  //
Danach 2x Label mit Text
  //
  newlabel := TLabel.Create(newlabel);
  newlabel.name := 'tablabel1'+inttostr(k);
  newlabel.caption := 'Bitte Aktivieren Sie die Felder die im Listfenster angezeigt werden sollen.';
  newlabel.Left   := 48;
  newlabel.Top    := 384;
  newlabel.visible := true;
  newlabel.parent := newtab;
  //
Danach diese CheckBoxen
  //
  h := 64; i:=0;
  While i <=9 Do Begin
    newCheckBox := TCheckBox.Create(newCheckBox);
    newCheckBox.parent := newtab;
    newCheckBox.name   := 'NewCheckBox'+inttostr(k)+inttostr(i);
    newCheckBox.caption := 'Neue CheckBox'+inttostr(k)+inttostr(i);
    newCheckBox.width  := 120;
    newCheckBox.left   := 80;
    newCheckBox.top    := h;
    newCheckBox.visible := true;
    h := h +24; i:=i+1;
  end;
  //



jetzt die Abfrage dazu

  i:=0;
  While i<=9 Do
  begin
    Test := 'NewCheckBox7' + IntToStr(i);
    If TCheckBox(FindComponent(Test)).Checked = true then
      ShowMessage('Ergebnis : True')
    ELSE
      ShowMessage('Ergebnis : False') ;
    i:=i+1;
  end;

Müsste doch eigentlich Funktionieren.
Geht ja auch, aber nur die erste CheckBox, bei den nächsten gibts einen abbruch.

Sir Rufo 12. Nov 2015 16:25

AW: Nue eine CheckBox wird gefunden !
 
Es wäre sehr freundlich, wenn du deinen Delphi-Quellcode mit den Delphi-Tags umschließen würdest, dann sieht der Quelltext gleich lesbarer aus.

Aus
Code:
[DELPHI]
procedure foo;
begin
  DoBar();
end;
[/DELPHI]
wird
Delphi-Quellcode:
procedure foo;
begin
  DoBar();
end;

Mavarik 12. Nov 2015 16:28

AW: Nue eine CheckBox wird gefunden !
 
Du hast die Checkboxen doch selber erzeugt? Warum willst Du die dann suchen?

Sir Rufo 12. Nov 2015 16:34

AW: Nue eine CheckBox wird gefunden !
 
Zum eigentlichen Thema:

Die Dokumentation zu
Delphi-Quellcode:
TComponent.FindComponent
sagt
Zitat:

Gibt an, ob der Komponente eine bestimmte Komponente untergeordnet ist.

FindComponent gibt diejenige Komponente im Array Components zurück, deren Name mit dem String im Parameter AName übereinstimmt. Mit Hilfe von FindComponent können Sie feststellen, ob eine bestimmte Komponente einer anderen Komponente untergeordnet ist.

Bie den Komponentennamen wird die Groß-/Kleinschreibung nicht berücksichtigt.
Du fragst (ich vermute mal) die Form, ob es dort so einen Komponente gibt. Die Form ist aber gar nicht der Besitzer (Owner) der gesuchten Komponente und darum kannst du die so auch nicht finden.

Häng deine Komponenten an einen
Delphi-Quellcode:
Owner
und dann frage diesen
Delphi-Quellcode:
Owner
nach den gesuchten Komponenten ab.

Alternativ kannst du aber auch rekursiv durch alle beteiligten Komponenten durchsuchen, was aber auch nur dann funktioniert, wenn die gesuchten Komponenten einen
Delphi-Quellcode:
Owner
haben.

Weitere ALternative ist das suchen über die
Delphi-Quellcode:
Parent
-Beziehung abfragen mit
Delphi-Quellcode:
TWinControl.FindChildControl

Sir Rufo 12. Nov 2015 16:36

AW: Nue eine CheckBox wird gefunden !
 
Zitat:

Zitat von Mavarik (Beitrag 1321340)
Du hast die Checkboxen doch selber erzeugt? Warum willst Du die dann suchen?

Da diese Erzeugung zur Laufzeit insgesamt sehr statisch aussieht, würde sich sogar die Verwendung von einem Frame anbieten. Dann wird nur das Frame zur Laufzeit erzeugt und dort ist alles enthalten. :stupid:

hoika 12. Nov 2015 16:54

AW: Nue eine CheckBox wird gefunden !
 
Hallo,
probier doch ma Kommentare aus ...

Delphi-Quellcode:
newCheckBox := TCheckBox.Create(newCheckBox); ist auch etwas ungünstig. Nimm besser die Form oder newTab als Owner oder Nil.

Markus Kinzler

Delphi-Quellcode:
newCheckBox := TCheckBox.Create(Self);


Und fertig.

Heiko

Mavarik 12. Nov 2015 16:57

AW: Nue eine CheckBox wird gefunden !
 
Danach diese Checkboxen
Delphi-Quellcode:
  var ListederCheckBoxen = TList<TCheckBox>;
begin
  //
  ListederCheckBoxen = TList<TCheckBox>.Create;
  h := 64; i:=0;
  While i <=9 Do Begin
    newCheckBox := TCheckBox.Create(newCheckBox);
    ListederCheckBoxen.Add(NewCheckBox);
    newCheckBox.parent := newtab;
    newCheckBox.name   := 'NewCheckBox'+inttostr(k)+inttostr(i);
    newCheckBox.caption := 'Neue CheckBox'+inttostr(k)+inttostr(i);
    newCheckBox.width  := 120;
    newCheckBox.left   := 80;
    newCheckBox.top    := h;
    newCheckBox.visible := true;
    h := h +24; i:=i+1;
  end;
  //
end;
jetzt die Abfrage dazu

Delphi-Quellcode:
  i:=0;
  While i<=9 Do
  begin
    If ListederCheckBoxen.Items[I].Checked = true then
      ShowMessage('Ergebnis : True')
    ELSE
      ShowMessage('Ergebnis : False') ;
    i:=i+1;
  end;

ListederCheckBoxen.Free; //
Fertig.

mkinzler 12. Nov 2015 17:05

AW: Nue eine CheckBox wird gefunden !
 
Aber das auch gleich beheben:

Delphi-Quellcode:
newCheckBox := TCheckBox.Create(self);
Delphi-Quellcode:
If ListederCheckBoxen.Items[I].Checked then


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr.
Seite 1 von 2  1 2      

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