Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriff auf Scrollbox Objekte (https://www.delphipraxis.net/68894-zugriff-auf-scrollbox-objekte.html)

meg91 7. Mai 2006 19:20


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

tigerman33 7. Mai 2006 21:39

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:
var Btn: TButton;

...

procedure NewBtn;
begin
...
  Btn := TButton.Create(ScrollBox);
...
end;

...
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.

meg91 8. Mai 2006 09:34

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!

fkerber 8. Mai 2006 09:38

Re: Zugriff auf Scrollbox Objekte
 
Hi!

z.B. so:

Delphi-Quellcode:
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;
War jetzt mal so ausm Kopf - also kein Gewehr ;)


Ciao Frederic

meg91 8. Mai 2006 12:40

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?

fkerber 8. Mai 2006 12:43

Re: Zugriff auf Scrollbox Objekte
 
Hi!

Ich weiß ja nicht, wie du deine Buttons erstellst. Alternativ würde auch sowas gehen:

Delphi-Quellcode:
//beim erzeugen:
setlength(btnarray,0);

//VOR dem erzeugen eines neuen Buttons:
setlength(btnarray, length(btnarray)+1);
btnarray[high]:=TButton.Create;
...
wie immer ohne Schusswaffen... ;)


Ciao Frederic

meg91 8. Mai 2006 13:15

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

fkerber 8. Mai 2006 13:37

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

mbamler 8. Mai 2006 13:44

Re: Zugriff auf Scrollbox Objekte
 
Zitat:

Zitat von fkerber
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


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

fkerber 8. Mai 2006 13:49

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 21:01 Uhr.
Seite 1 von 3  1 23      

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