![]() |
Zugriff auf Scrollbox Objekte
Hallo
hab folgendes Problem: ich erstelle Objekte auf einer Scrollbox und zwar ist das immer die gleiche Kombination, welche aus 3 Objekten besteht jetzt hab ich versucht bei klick auf irgendeins dieser x-mal 3 Objekten eine Prozedur anzusprechen, die auf die caption des angelickten Objekts zugreifen soll aber ich bekomme immer nur die caption des zuletzt erstellten Objekts ich vermute mal das es mit den gleichen Namen der Objekte zusammen hängt gibt es eine Möglichkeit die Namen irgendwie dynamisch zu ändern oder vllt soagr ne bessere Lösung Gruß meg |
Re: Zugriff auf Scrollbox Objekte
So wie es klingt erstellst du die drei Objekte immer in der gleichen Instanzenvariable, also in etwa so:
Delphi-Quellcode:
Damit wird bei jedem Aufruf von NewBtn zwar wie gewollt ein neues Button-Objekt erstellt, aber dieses "überschreibt" die jeweils vorherige Instanz. Du solltest deine Buttons in einem dyn. Array oder einer ObjectList verwalten, um auf alle erstellten Instanzen zugreifen zu können.
var Btn: TButton;
... procedure NewBtn; begin ... Btn := TButton.Create(ScrollBox); ... end; ... |
Re: Zugriff auf Scrollbox Objekte
könntest du mir vllt ein konkretes Code Bsp geben, denn ich hab kein Plan wie das geh soll
Danke! |
Re: Zugriff auf Scrollbox Objekte
Hi!
z.B. so:
Delphi-Quellcode:
War jetzt mal so ausm Kopf - also kein Gewehr ;)
var
BtnArray: Array of TButton; i: integer; begin setlength(BtnArray, 3) for i:=0 to length(BtnArray)-1 do begin BtnArray[i]:=Tbutton.Create; Btnarray[i].Parent:=Form1; ... end; end; Ciao Frederic |
Re: Zugriff auf Scrollbox Objekte
kann ich dann bei setlength die zahl immer ändern, denn ich weis im voraus nicht wie viel Objekte das werden?
|
Re: Zugriff auf Scrollbox Objekte
Hi!
Ich weiß ja nicht, wie du deine Buttons erstellst. Alternativ würde auch sowas gehen:
Delphi-Quellcode:
wie immer ohne Schusswaffen... ;)
//beim erzeugen:
setlength(btnarray,0); //VOR dem erzeugen eines neuen Buttons: setlength(btnarray, length(btnarray)+1); btnarray[high]:=TButton.Create; ... Ciao Frederic |
Re: Zugriff auf Scrollbox Objekte
erstmal vielen Dank
aber ich hab scho wieder ein Problem und zwar muss ich dann auch auslesen, welchen Namen das angeklickte objekt hat die greifen nämlich alle auf dieselbe Prozedur zurück und ich muss dann die Aktion abhänig vom Namen machen, sprich welcher Button geklickt worden ist |
Re: Zugriff auf Scrollbox Objekte
Hi!
Dann kannst du das über den Sender auslesen. z.B. kannst du jedem Button einen anderen Tag setzen (es handelt sich dabei um einen Integer)
Delphi-Quellcode:
//z.B. so auslesen
if Sender is TButton then case (Sender as TButton).Tag of 1: //Button mit Tag 1 2: //Button mit Tag 2 end; Ciao Frederic |
Re: Zugriff auf Scrollbox Objekte
Zitat:
Vergib nach dem Kreieren jeder Komponente einen eindeutigen Namen: z.B. meinobjekt.name := 'Name' + IntToStr(i); und dann beim Zugreifen mit FindComponent die jeweilige Komponente suchen: z.B. for i := 1 to 10 do TButton(FindComponent('Button' + IntToStr(i))).Visible := true; Gruß Matthias |
Re: Zugriff auf Scrollbox Objekte
Hi!
Er will ja feststellen, welcher Button geklickt wurde, da alle die selbe Click-Procedure haben sollen. Da geht das mit Sender sehr gut - mit FindComponent wohl eher nicht, er weiß nicht, was er "finden" soll. Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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 by Thomas Breitkreuz