![]() |
Buttons dynamisch erstellen
Hi,
Ich brauche für ein programm sehr viele Buttons auf meinem Formular, deswegen hab ich mir überlegt das es das einfachste wäre die Buttons dynamishc zu erstellen. Schön und gut innen bischen in Klassen in Delphi eingelesen, und schnell herausgefunden wie man Komponenten dynamisch erstellt, dachte ich. Mit dem dynamischen erstellen von Formularen klappt es so ja auch problemlos:
Delphi-Quellcode:
[......]
var
Form1: TForm1; forms: array[0..20] of TForm;
Delphi-Quellcode:
Das funktioniert ohne Probleme.
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer; begin for i:=0 to 20 do begin forms[i]:=TForm.create(form1); forms[i].Visible:=true; forms[i].Left:=i*40; end; end; Nun stelle icha ber diesen code auf Buttons um:
Delphi-Quellcode:
[......]
var
Form1: TForm1; buttons: array[0..20] of TButton;
Delphi-Quellcode:
Wenn ich nun das nun Compeliere sagt er mir zunächst:
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer; begin for i:=0 to 20 do begin buttons[i]:=TButton.create(form1); buttons[i].Visible:=true; buttons[i].Left:=i*40; end; end; Zitat:
Nun gibt es zwar keine Fehlermeldungen mehr, aber es passiert aber auch nciht das gewünschte. Es passiert nämlich genau garnichts, außer das nach realtiv langer Compelier Zeit für ein so kleines Programm ein leeres Fenster erscheint. Woran liegt das? Und wie funktioniert es? pelzi |
Re: Buttons dynamisch erstellen
Du musst noch top, height und width enstellen, damit der Button weis, wo er ist ;)
Ach, und nen Parent braucht er auch noch ... |
Re: Buttons dynamisch erstellen
Zitat:
Und damit er wirklich gezeigt wird muss man glaub ich noch Button.Show; sagen... |
Re: Buttons dynamisch erstellen
Da der Button selbst ein Fenster ist muss ihm noch ein Parent zugewiesen werden damit er weis auf welchem Fenster er erscheinen soll.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer; begin for i:=0 to 20 do begin buttons[i]:=TButton.create(form1); buttons[i].Visible:=true; buttons[i].Left:=i*40; buttons[i].Parent := forms[i]; end; end; |
Re: Buttons dynamisch erstellen
Zitat:
Wo du es schon ansprichst, Onclick ereignisse, in diesem Fall brauchte ich die ganzen buttons zwar nur wegen ihres schönen aussehens, aber in zukunft kann es durchaus passieren, das sie etwas bewirken sollen. Kann mir da jemand einen Link geben oder erklären wie es funktioniert? Pelzi |
Re: Buttons dynamisch erstellen
Zitat:
OnClick: einfach eine procedure Click(Sender: TObject); in der Form deklarieren und dann Button.OnClick:=Click; |
Re: Buttons dynamisch erstellen
Zitat:
wenn ich es so mache bekomme ich eine Fhelermeldung:(mal die ganze unit)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; buttons: array[0..20] of TButton; forms: array[0..20] of TForm; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i:Integer; begin for i:=0 to 20 do begin buttons[i]:=TButton.create(form1); buttons[i].Left:=20; buttons[i].top:=80; buttons[i].height:=35; buttons[i].width:=80; buttons[i].Visible:=true; forms[i]:=TForm.Create(form1); buttons[i].Parent:=forms[i]; forms[i].Visible:=true; forms[i].left:=40*i; forms[i].width:=38; buttons[i].OnClick:=click; end; end; procedure click(Sender: TObject); begin showmessage('du hast geklicked'); end; end. Zitat:
Pelzi |
Re: Buttons dynamisch erstellen
nimm mal einen Button per Hand und nimm da das OnClick.
genauso muss es aussehen, nur halt per hand geschrieben ;) so:
Delphi-Quellcode:
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject); procedure Click(Sender: TObject); private //... implementation procedure TForm1.Click(Sender: TObject); begin //Mach mal irgendwas end; procedure TForm1.FormCreate(Sender: TObject); var i:Integer; begin for i:=0 to 20 do begin buttons[i]:=TButton.create(form1); buttons[i].Left:=20; buttons[i].top:=80; buttons[i].height:=35; buttons[i].width:=80; buttons[i].Visible:=true; forms[i]:=TForm.Create(form1); buttons[i].Parent:=forms[i]; forms[i].Visible:=true; forms[i].left:=40*i; forms[i].width:=38; buttons[i].OnClick:=click; end; end; |
Re: Buttons dynamisch erstellen
Hi,
die Methode Click ist in bereits als virtuelle Methode (TControl) implementiert. Du musst diese in z.B. ButtonClick umbenennen. Cu, Frank |
Re: Buttons dynamisch erstellen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 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