Zugriff auf zur Laufzeit erstellten Komponenten

Rund um die LCL und andere Komponenten
Antworten
boeffi27
Beiträge: 11
Registriert: Fr 14. Mär 2014, 10:52

Zugriff auf zur Laufzeit erstellten Komponenten

Beitrag von boeffi27 »

Hallo ins Forum,

vielleicht ist ein Anfängerfehler....
Zur Ausgangslage: Mit dem Objektinspektor habe ich bereits eine Form und eine PageControl mit 2 TabSheets erstellt. Während der Laufzeit werden weitere TabSheets mit gleichen Componenten, darunter auch Groupboxen mit Componenten erstellt. Das funktioniert auch.
Ich habe nun das Problem, dass ich nicht auf die Labels in der GroupBox des TabSheets zugreifen kann. Was mache ich falsch?

Hier ein vereinfachter Code-Auszug:

Code: Alles auswählen

Procedure TForm1.NeuesTabMitComponentenFuellen(newtab: TTabSheet);
begin
   GroupBox1:= TGroupbox.Create(Form1);
   with GroupBox1 do
   begin
      name:= 'Groupbox1’  + intToStr(Zaehler1);
      parent := newtab;
   end;
  Label1:= TLabel.Create(GroupBox1);
  with Label1 do
  begin
      name:= 'Label1' + IntToStr(Zaehler2);
      parent := GroupBox1;
   end;
 
   ComboBox1:=  TComboBox.Create(GroupBox1);
   with ComboBox1 do
  begin
      name:= 'ComboBox1’+ IntToStr(Zaehler2);
      parent:= GroupBox1;
      OnChange:= @MachWas;
   end;      
end;
 
Procedure TForm1.NeuesTabSheet(Sender: TObject);
var  newtab: TTabSheet;
begin
     newtab := TTabSheet.Create(self);
    NeuesTabMitComponentenFuellen(newtab);
end;        
 
Procedure TForm1.TabSheetInhalteAendern;
begin
for i:=0 to Form1.ComponentCount-1 do
      if Form1.Components[i].name= 'GroupBox' +IntToStr(Zaehler)  then Form1.Components[i].name:=’test’;                   //<- findet nichts
End;
Zuletzt geändert von Lori am Fr 25. Jul 2014, 12:04, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter nutzen

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Zugriff auf zur Laufzeit erstellten Komponenten

Beitrag von mschnell »

Wenn Du visuelle Komponenten selbst im eigenen Code erstellst, hast Du die Instanz und kannst darauf zugreifen. Du brauchst sie nicht zu suchen.

-Michael

boeffi27
Beiträge: 11
Registriert: Fr 14. Mär 2014, 10:52

Re: Zugriff auf zur Laufzeit erstellten Komponenten

Beitrag von boeffi27 »

Danke für die Antwort.
Kannst Du mir dazu kurz ein Beispiel machen.

Benutzeravatar
theo
Beiträge: 10867
Registriert: Mo 11. Sep 2006, 19:01

Re: Zugriff auf zur Laufzeit erstellten Komponenten

Beitrag von theo »

Erstens verstehe ich nicht wirklich, warum du die Dinger nicht über ihre Variablen ansprichst.

Aber sonst hilft wie so oft: Hirn einschalten.
Du nennst die Groupbox:

Code: Alles auswählen

name:= 'Groupbox1'+ IntToStr(Zaehler2);
Also z.B. "Groupbox11"
du suchst aber nur nach

Code: Alles auswählen

'GroupBox' +IntToStr(Zaehler) 
Also z.B. "Groupbox1"
Zuletzt geändert von theo am Mi 23. Jul 2014, 13:31, insgesamt 1-mal geändert.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Zugriff auf zur Laufzeit erstellten Komponenten

Beitrag von Komoluna »

Code: Alles auswählen

var
  aButton: TButton;
 
Procedure TForm1.FormCreate(Sender: TObject);
begin
  aButton:=TButton.Create(self);
  aButton.Parent:=self;
  //Andere zuweisungen
  aButton.OnClick:=@AButtonClick;
end;
 
Procedure TForm1.AButtonClick(Sender: TObject);
begin
  aButton.Caption:='Geklickt';  //Einfach die verwendete Variable benutzen
end;
MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

boeffi27
Beiträge: 11
Registriert: Fr 14. Mär 2014, 10:52

Re: Zugriff auf zur Laufzeit erstellten Komponenten

Beitrag von boeffi27 »

es hat sich erledigt.
Wie immer..., wenn man etwas gepostet hat, kommt einem die Erleuchtung(!).
Es war ein Deklarationsfehler.

Antworten