![]() |
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......... |
AW: Nue eine CheckBox wird gefunden !
Das Interessanteste hast Du weggelassen: Wie fragst Du ab?
Delphi-Quellcode:
ist auch etwas ungünstig. Nimm besser die Form oder newTab als Owner oder Nil.
newCheckBox := TCheckBox.Create(newCheckBox);
|
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. |
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:
wird
[DELPHI]
procedure foo; begin DoBar(); end; [/DELPHI]
Delphi-Quellcode:
procedure foo;
begin DoBar(); end; |
AW: Nue eine CheckBox wird gefunden !
Du hast die Checkboxen doch selber erzeugt? Warum willst Du die dann suchen?
|
AW: Nue eine CheckBox wird gefunden !
Zum eigentlichen Thema:
Die Dokumentation zu ![]()
Delphi-Quellcode:
sagt
TComponent.FindComponent
Zitat:
Häng deine Komponenten an einen
Delphi-Quellcode:
und dann frage diesen
Owner
Delphi-Quellcode:
nach den gesuchten Komponenten ab.
Owner
Alternativ kannst du aber auch rekursiv durch alle beteiligten Komponenten durchsuchen, was aber auch nur dann funktioniert, wenn die gesuchten Komponenten einen
Delphi-Quellcode:
haben.
Owner
Weitere ALternative ist das suchen über die
Delphi-Quellcode:
-Beziehung abfragen mit
Parent
![]()
Delphi-Quellcode:
TWinControl.FindChildControl
|
AW: Nue eine CheckBox wird gefunden !
Zitat:
|
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 |
AW: Nue eine CheckBox wird gefunden !
Danach diese Checkboxen
Delphi-Quellcode:
jetzt die Abfrage dazu
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;
Delphi-Quellcode:
Fertig.
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; // |
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
|
AW: Nue eine CheckBox wird gefunden !
Man könnte das ganze natürlich auch in ein Array packen:
Delphi-Quellcode:
Möglicherweise bietet sich für sowas auch eine CheckListBox an.
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) btn1: TButton; mmo1: TMemo; procedure btn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private MyCheckBoxes: array [0..9] of TCheckBox; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); var I: Integer; begin mmo1.Lines.Clear; for I := 0 to 9 do if MyCheckBoxes[i].Checked then mmo1.Lines.Add(Format('Checkbox %d ist checked', [i])) else mmo1.Lines.Add(Format('Checkbox %d ist nicht checked', [i])); end; procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin for I := 0 to 9 do begin MyCheckBoxes[i]:=TCheckBox.Create(self); with MyCheckBoxes[i] do begin Parent:=self; Name:='Checkbox'+IntToStr(i); Caption:='CheckBox '+IntToStr(i); Left:=80; Width:=120; Top:=64 + (i * 24); Visible:=True; end; end; end; end. |
AW: Nue eine CheckBox wird gefunden !
Liste der Anhänge anzeigen (Anzahl: 1)
Oder eben ohne dieses Zusammengebaue (s. Anhang Source + EXE zum Herumspielen)
|
AW: Nue eine CheckBox wird gefunden !
@Sir Rufu
Danke für die vielen Antworten, ich hoffe Du kannst mir noch öfter Helfen, und sorry , dass ich nicht wußte, wie man den Source anständig Postet, aber jetzt weiß ich es ja. @hoika Deine Antwort : newCheckBox := TCheckBox.Create(Self); Und fertig. Du hast mich in Grund und Boden versenkt, Tagelang zerbrach ich mir den Kopf, unzählige Versionen Probiert, immer wieder bekamm ich von Delphi eine Ohrfeige. Und jetzt siehe da, es können alle Checkboxen abgefragt werden, NUR DURCH EIN WORT >>> SELF <<<< warum auch immer, es geht. Wie gesagt, ich hab mir Delphi selbst beigebracht, und verstehe deshalb nicht alles, und bin froh, das es dieses Forum gibt, Danke nochmal an alle......... Und jetzt ab in die Nachtschicht von 22.00Uhr - 6.00Uhr. Gruß Mike |
AW: Nue eine CheckBox wird gefunden !
Zitat:
Create ist der Konstruktor, der ein Objekt erzeugt. Verschiedene Objekte verfügen über unterschiedliche Konstruktoren. So muß z.B. nicht bei jedem Create der Owner angegeben werden, das beschränkt sich auf visuelle Objekte. Andere Objekte wie z.B. TStringList verlangen gar keine Angabe im Create-Befehl, wieder andere wie z.B. TFileStream erwarten einen Dateinamen und den Stream-Modus als Parameter im Create-Befehl. Übrigens hab ich mir Delphi auch selbst beigebracht und kann ebenfalls kein Informatikstudium vorweisen. Soweit mir bekannt lernen auch Informatiker nicht wirklich eine Programmiersprache in ihren Vorlesungen, sondern müssen sich diese Kenntnisse ebenfalls selber beibringen. Man sollte sich da nicht "künstlich" selbst herabsetzen, nur weil man nicht studiert hat, denn das Verständnis für eine Programmiersprache verlangt zuallererst einmal eine gewisse Affinität zum Programmieren, und die wirst du wohl haben, sonst würdest du das gar nicht erst betreiben. Als Einstieg und zum Erwerben von Basis-Kenntnissen und Erlernen der Objekt-Orientierung hat sich das ![]() |
AW: Nue eine CheckBox wird gefunden !
Das mit dem
Delphi-Quellcode:
lässt sehr leicht aufklären, wenn man weiß, dass Delphi in Methoden dieses
Self
Delphi-Quellcode:
in den Scope nimmt und dieses hier
Self
Delphi-Quellcode:
intern so
If TCheckBox(FindComponent(Test)).Checked = true then
ShowMessage('Ergebnis : True') ELSE ShowMessage('Ergebnis : False') ;
Delphi-Quellcode:
abgearbeitet wird ;)
If TCheckBox( Self.FindComponent( Test ) ).Checked = true then
ShowMessage('Ergebnis : True') ELSE ShowMessage('Ergebnis : False') ; Jetzt sollte man auch die Information aus der Dokumentation geistig zusammenführen können. |
AW: Nue eine CheckBox wird gefunden !
Zitat:
Natürlich können Owner und Parent gleich sein, aber eben nicht zwingend. |
AW: Nue eine CheckBox wird gefunden !
Hallo,
dann noch viel Erfolg beim Delphi-Lernen! Solche Schüler haben wir hier gern:) LG Heiko |
AW: Nue eine CheckBox wird gefunden !
Wo du recht hast ... :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 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-2025 by Thomas Breitkreuz