Autor Beitrag
Metschu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
BeitragVerfasst: Sa 30.10.10 11:21 
Moin zusammen!

Ich stehe gerade etwas auf dem Schlauch.
Mein Prog erstellt zur Laufzeit eine neue Form und setzt darauf eine GroupBox.
Nun soll auf diese GroupBox eine CheckBox gesetzt werden.
Nur klappt es nicht, dieser CheckBox die GroupBox als Parent zuzuweisen. FindComponent findet die GroupBox nicht :(

Folgenden Code hab ich zum testen:

ausblenden Delphi-Quelltext
1:
2:
3:
if TGroupBox(TForm(FindComponent('NeuesFenster')).FindComponent('NeueGroupBox'))<>NIL
 then showmessage('Gefunden')
 else showmessage('Nicht gefunden');


Bin für jeden Tip Dankbar!

Gruß

Torsten


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 30.10.2010 um 14:29
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 30.10.10 12:37 
Wenn Du es dynamisch erzeugst hast Du doch schon alle Zeiger?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
MyForm := Tform.Create(self);
MyGroupbox := TGroupbox.Create(Myform) 
with MyGroupbox do
  begin
// hier könntest Du auch Name setzen z.B.
// name := 'FindMich';
  Parent := MyForm;
//  Left ...
//  etc..
  
  end;
MycheckBox := TCheckbox.Create(MyForm);
with MyCheckbox do
   begin
   Parent := MyGroupbox;
//   Left .....
//   etc..
   end;


wenn den Namen gesetzt hast kannst Du falls nötig später per
ausblenden Delphi-Quelltext
1:
2:
aGroupbox := TGroupbox(MyForm.FindComponent('FindMich'));
If assigned(aGroupbox) then


zugreifen..
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 30.10.10 13:23 
user profile iconMetschu hat folgendes geschrieben Zum zitierten Posting springen:
Mein Prog erstellt zur Laufzeit eine neue Form und setzt darauf eine GroupBox.
Nun soll auf diese GroupBox eine CheckBox gesetzt werden.

Wenn das so vorgegeben ist, wieso erstellst du das Formular nicht zur Designzeit?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 30.10.10 14:12 
@delfiphan
Ich habe auch derartiges gebraucht um für Parametrisierbare Abfragen Eingabeformulare für den Benutzer zu generieren. Wenn der SQL umgebaut wird müßen mehr/weniger/andere Datentypen mit entsprechenden Eingabeelementen erstellt / ausgefüllt und ausgewertet werden.
Metschu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
BeitragVerfasst: Sa 30.10.10 21:08 
Hm, das ist alles etwas verwirrend...

Die Checkbox ist auf einer GroupBox. Die Checkbox finde ich aber nicht über TForm, sondern nur über TForm.TGroupBox.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
window:=TForm(FindComponent('Window'));
grpBox:=TGroupBox(Window.FindComponent('GrpBox'))
if tcheckbox(grpBox.FindComponent('ChkBox')).Checked
 then  showmessage('...');


So wird nix gefunden:
ausblenden Delphi-Quelltext
1:
2:
3:
window:=TForm(FindComponent('Window'));
if tcheckbox(Window.FindComponent('ChkBox')).Checked
 then  showmessage('...');


Bei einer Statisch erstellten Form, in der die CheckBox auch auf der GroupBox sitzt, kann ich diese über direkt über TForm finden.

Wie kann man denn die CheckBox finden, wenn man nicht weiß, auf welcher Groupbox sie sitzt, ohne alle durchsuchen zu müssen?
Oder mache ich bereits beim erstellen der Komponente einen Fehler?
Die CheckBox soll auf der GroupBox sitzen, deswegen setzte ich bei der CheckBox die GroupBox als Parent.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 30.10.10 21:28 
die Zeile mache keinen Sinn
ausblenden Delphi-Quelltext
1:
window:=TForm(FindComponent('Window'));					


das Vorgehen sollte irgendwie wie untern aussehen,
zumindest f im Beispiel unten solltest innerhalb Deiner Klasse aufbewahren, z.B. unter Private als MyForm:TForm

wenn Du mehrere brauchst könntest Du auch ein KlassenArray oder eine TList o.ä verwenden.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);
var
  f:TForm;
  g:TGroupbox;
  c , sc:Tcheckbox;
begin
   f := Tform.Create(self);
   g := TGroupbox.Create(f);
   g.Parent := f;
   c := TCheckbox.Create(f);
   c.Name := 'Test';
   c.Caption := 'Hallo';
   c.Parent := g;
   sc := TCheckBox(f.FindComponent('Test'));
   if Assigned(sc) then
    Showmessage('found: Caption='  + sc.Caption) else Showmessage('not found') ;

end;

Für diesen Beitrag haben gedankt: Metschu
Metschu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
BeitragVerfasst: Sa 30.10.10 21:36 
Danke für den weg der Erleuchtung... :idea:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
  f:TForm;
  g:TGroupbox;
  c , sc:Tcheckbox;
begin
   f := Tform.Create(self);
   g := TGroupbox.Create(f);
   g.Parent := f;
   c := TCheckbox.Create(f); // <- Da war mein Fehler, hatte da "g" drin stehen
....


Jetzt klappts wie es soll :dance2:

Vielen Dank!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.10.10 21:47 
user profile iconMetschu hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
   c := TCheckbox.Create(f); // <- Da war mein Fehler, hatte da "g" drin stehen					
Die Angabe bedeutet, dass diese Komponente (hier das Formular) sich um die Freigabe kümmert. Dafür wird die neue Komponente dort in die Liste der Komponenten eingefügt. ;-)
Metschu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135

Windows XP SP2 Home
Delphi 7; Delphi XE2-Starter
BeitragVerfasst: Sa 30.10.10 21:52 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Die Angabe bedeutet, dass diese Komponente (hier das Formular) sich um die Freigabe kümmert. Dafür wird die neue Komponente dort in die Liste der Komponenten eingefügt. ;-)

Kein wunder, das ich es dort auch nicht gefunden habe :-)
Danke für die Erklärung.