![]() |
dynamische buttonerzeugung zur laufzeit
Hallo Zusammen,
ich würde gerne einige bis viele Buttons zur laufzeit erstellen. Leider sind meine Bisherigen versuche gescheitert, da ich garnicht weis wo ich anfangen soll :-( do ich mit diesem code
Delphi-Quellcode:
ja immer nur ein und denselben button erzeuge
button2.Create(form1);
move(button2); ich hoffe ihr könnt mir weiter helfen Gruß Manu |
Re: dynamische buttonerzeugung zur laufzeit
|
Re: dynamische buttonerzeugung zur laufzeit
das hat mir schonmal weiter geholfen... jetzt würde ich gerne alle Buttons in eine List speichern (TComponentList) und diese an eine eigene Procedur weitergeben nur leider hagelt es dort weil ich in der Procedur explizit mit Buttons arbeite aber es keine Buttonlist gibt
hier einmal die Code Fragmente zur Verdeutlichung
Delphi-Quellcode:
procedure move(btn : TButton); // Verlang TButton var I : Integer; begin btn.Top := 64; btn.Left := 0; for I := 0 to 100 do begin application.ProcessMessages; btn.Left := i; end; for I := 64 to 270 do begin btn.Top := i; application.ProcessMessages; end; //.... btn.Destroy; end; procedure TForm1.Button2Click(Sender: TObject); var I: Integer; btnNeu: TButton; begin btnlist := TComponentlist.Create( false ); //Componentlist for I := 0 to 20 do begin btnlist.Add(btnneu.Create(self)); //Erzeugte buttons in Liste schreiben with btnNeu do begin Name := 'btn'+IntToStr(i); width := 20; height := 20; Parent := self; caption := ''; end; end; for I := 0 to btnlist.Count -1 do begin move(btnlist[i]); // Beim übergeben an die Procedure meckert er, weil Component und nicht Button sleep(500); end; end; |
Re: dynamische buttonerzeugung zur laufzeit
Zitat:
Ich kann erstmal so keinen Fehler in deinem Quelltext sehen. Wo treten, wann, welche Fehler auf? |
Re: dynamische buttonerzeugung zur laufzeit
Tut mir Leid wegen der Rechtschreibung aber ich war etwas in eile also Fehler sind jetzt im Quelltext gekennzeichnet und dem Verständniss wegen werde ich ihn auch hier nochmal Erläutern.
Ich würde gerne alle Buttons in eine Componentlist schreiben was ja auch soweit funktioniert... so jetzt zum Problem in der Procedur "move" habe ich als Parameter einen TButton, da ich dort mit Top und Left arbeiten will. Jetzt meckert aber der Compiler, da ich eine Componentlist übergeben will, wo er eigentlich Buttons erwartet. Ich hoffe das ich es damit etwas verdeutlich konnte. Gruß Manuel |
Re: dynamische buttonerzeugung zur laufzeit
Huhu,
versuch mal:
Delphi-Quellcode:
oder:
....
for I := 0 to btnlist.Count -1 do begin move( ( btnlist[i] as TButton ) ); sleep(500); end;
Delphi-Quellcode:
gruß
....
for I := 0 to btnlist.Count -1 do begin move( TButton( btnlist[i] ) ); sleep(500); end; reli edit: achja und änder mal diese zeilen hier:
Delphi-Quellcode:
in diese:
btnlist.Add(btnneu.Create(self)); //Erzeugte buttons in Liste schreiben
with btnNeu do begin Name := 'btn'+IntToStr(i); width := 20; height := 20; Parent := self; caption := ''; end;
Delphi-Quellcode:
with btnList[ btnlist.Add(TButton.Create(self)) ] as TButton do //Erzeugte buttons in Liste schreiben
begin Name := 'btn'+IntToStr(i); width := 20; height := 20; Parent := self; caption := ''; end; |
Re: dynamische buttonerzeugung zur laufzeit
Bin mir noch nicht ganz sicher was du genau willst, aber hier mal ein Bsp:
Warum willst du die Buttons nicht direkt an ihren Platz setzen ?
Delphi-Quellcode:
Gruß, bluescreen
var
Form1: TForm1; ObjektButton : TObjectList; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var newButton: TButton; Index : Integer; begin ObjektButton := TObjectList.Create(true); for Index := 0 to 10 do begin newButton := TButton.Create(Form1); with newButton do begin Parent := Form1; Tag := Index; Name := 'newButton' + IntToStr(Index); Caption:= 'newButton' + IntToStr(Index); SetBounds(0, Index * 30,100,30); end; ObjektButton.Add(newButton); end; end; |
Re: dynamische buttonerzeugung zur laufzeit
Cool DANKE!!
das hat super Funktioniert ^^ nur leider fällt mir jetzt auf, dass ich die Prozedur move in einem Thread Starten muss, weil sie mehrfach hintereinander ausgeführt werden muss. Kurz: Das Programm soll nicht warten bis Move fertig ist. Leider habe ich von Threads keine Ahnung. Kennt ihr ein gutes TUT oder gibts da eine Andere Möglichkeit |
Re: dynamische buttonerzeugung zur laufzeit
Auch hier wärest du bei Delphi-Treff fündig geworden ;)
![]() |
Re: dynamische buttonerzeugung zur laufzeit
Das macht keinen Sinn. Um auf VCL Objekte des (Haupt)threads zu greifen zu können musts du den Thread synchronisieren. Und damit wird die Positionierung doch wieder im Kontext des Hauptthreads ausgeführt.
Darf man mal dumm fragen, um wieviele Schaltflächen es geht? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 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