![]() |
Button zur Laufzeit erzeugen
Hallo ich hab das Problem, dass ich einen Button zur Laufzeit erzeugt habe und ich wollte diesem Button nun eine Procedure beim Ereignis OnClick zuweisen.
Das Programm könnte wie folgt aussehen:
Delphi-Quellcode:
Die Procedure test wurde natürlich im Voraus deklariert.
procedure TForm1.FormCreate(Sender: TObject);
begin TButton.Create(Self).Name :='Button1'; with TButton(FindComponent('Button1')) do begin Left := 10; Top := 20; Parent := self; //Anweisung um beim Ereignis OnClick die Procedure 'test' auszuführen end; end; procedure test; begin //Anweisungen end; Danke für eure Antworten |
Re: Button zur Laufzeit erzeugen
Delphi-Quellcode:
So in etwa...
procedure TForm1.FormCreate(Sender: TObject);
var btnNeu: TButton; begin btnNeu := TButton.Create(Self) with btnNeu do begin Name := 'Button1'; Caption := 'Click mich'; Left := 10; Top := 20; Parent := self; OnClick := tesstClick; end; end; procedure tesstClick; begin //Anweisungen end; Gute Nacht :hi: [edit=Luckie] Mfg, Luckie[/edit] |
Re: Button zur Laufzeit erzeugen
Moin Mooshead,
wichtig ist erst einmal, dass OnClick eine Methode zugewiesen werden muss, und keine einfache Prozedur oder Funktion. Eine Methode ist eine Prozedur oder Funktion einer Klasse. In diesem Falle (OnClick) muss es eine Prozedur vom Typ TNotifyEvent sein. Das einfachst wäre, wenn Du dem Formular eine, wie auch immer genannte, Methode hinzufügst.
Delphi-Quellcode:
TForm1 = class(TForm)
procedure MeineOnClickMethode(Sender : TObject); //... implementation procedure TForm1.MeineOnClickMethode(Sender : TObject); begin // Was auch immer beim Anklicken passieren soll end; // Jetzt kannst Du dem Button die Methode zuweisen OnClick := MeineOnClickMethode; Der Wesentliche Unterschied zwischen einer Methode und einer Prozedur/Funktion: Eine Methode hat noch einen, impliziten, also nicht direkt sichtbaren, Parameter namens self, mit dem auf die Instanz der Klasse referenziert wird, in der sich die Methode befindet. Intern steht dieser vor dem ersten sichtbaren Parameter. |
Re: Button zur Laufzeit erzeugen
Danke für euren schnellen Antworten auch noch zur späten Stunde :coder:
ich habe da aber jetzt noch eine Frage und ich hoffe ihr könnt mir schnell weiter helfen:
Delphi-Quellcode:
:wiejetzt: :wiejetzt: :wiejetzt: :wiejetzt:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; procedure Klick(Sender : TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=1 to 10 do begin TButton.Create(Self).Name :='Button'+IntToStr(i); with TButton(FindComponent('Button'+IntToStr(i))) do begin Left := 10; Top := i * 30; caption := IntToStr(i); Parent := self; OnClick := Klick; end; end; end; procedure TForm1.Klick(Sender : TObject); begin label1.Caption:='???'; //Im Label sollte nun der Name des Buttons der end; //betätigt wurde bzw. dessen Beschriftung (Caption) stehen end. Meine Fragestelung sollte sich aus dem Quelltext ergeben. |
Re: Button zur Laufzeit erzeugen
Hi,
das weiß sogar ich:
Delphi-Quellcode:
Grüße vom marabu
procedure TForm1.Klick(Sender : TObject);
begin with Sender as TButton do Label1.Caption := Caption; end; |
Re: Button zur Laufzeit erzeugen
Dankeschööön :cheers:
|
Re: Button zur Laufzeit erzeugen
Noch eine kleine Ergänzung:
Zitat:
Delphi-Quellcode:
In den Beispielen die dir gegeben wurden wurde es schon so gemacht.
with TButton.Create(self) do
begin Name:='Button'+IntoStr(i); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 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-2025 by Thomas Breitkreuz