Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Buttons dynamisch erstellen (https://www.delphipraxis.net/64108-buttons-dynamisch-erstellen.html)

turboPASCAL 27. Feb 2006 19:13

Re: Buttons dynamisch erstellen
 
Verschibe mal "procedure Click(Sender: TObject); " in die private Deklaration.

Delphi-Quellcode:
TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure Click(Sender: TObject);
//...

Ein Beispiel:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    buttons: array[0..20] of TButton;
    forms: array[0..20] of TForm;
    procedure MyBtnClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
  for i:=0 to 5 do
  begin
    forms[i]:=TForm.Create(self);
    forms[i].Visible := true;
    forms[i].left:= 40*i;
    forms[i].width:= 38;

    buttons[i]:=TButton.create(form1);
    buttons[i].Left := 20;
    buttons[i].top := 80;
    buttons[i].height := 35;
    buttons[i].width := 80;
    buttons[i].Parent := forms[i];
    buttons[i].OnClick := MyBtnClick;
    buttons[i].Tag := i;
    buttons[i].Caption := 'Button ' + IntToStr(i);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var i : byte;
begin
  for i:=0 to 5 do
  begin
    buttons[i].Free;
    forms[i].Free;
  end;
end;

procedure TForm1.MyBtnClick(Sender: TObject);
begin
  showmessage('du hast geklicked ' + TButton(Sender).Caption);
end;

Pelzi 27. Feb 2006 19:57

Re: Buttons dynamisch erstellen
 
Thx, jetzt funzt es warum auch immer, werd nen bischen rumprobieren woran es lag...
der vollständige code geht auf jedenfall.. obs nundaran lag das die Buttons und Formulare als Private deklariet wurden oder am Namen.. ist im endeffect auch egal hauptsache ich weiß wie es geht. :)

Falls das hier so üblich ist beantwortete Threads zu closen kann er jetzt geclosed werden ^^

Pelzi

gfjs 27. Feb 2006 20:49

Re: Buttons dynamisch erstellen
 
Wenn ich die Ausgangslage richtig verstanden habe, sollten viele Buttons auf ein Formular?!

Das hier

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
  for i:=0 to 5 do
  begin
    forms[i]:=TForm.Create(self);
    forms[i].Visible := true;
    forms[i].left:= 40*i;
    forms[i].width:= 38;

    buttons[i]:=TButton.create(form1);
    buttons[i].Left := 20;
    buttons[i].top := 80;
    buttons[i].height := 35;
    buttons[i].width := 80;
    buttons[i].Parent := forms[i];
    buttons[i].OnClick := MyBtnClick;
    buttons[i].Tag := i;
    buttons[i].Caption := 'Button ' + IntToStr(i);
  end;
end;
erzeugt aber m.E. viele Formulare mit je einem Button.

Damit

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    ButtonArr : array[0..19] of TButton;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
Var
  i : integer;
begin
  for i := 0 to 19 do
  begin
    ButtonArr[i] := TButton.Create(Form1);
    with ButtonArr[i] do
    begin
      parent := Form1;
      Left := 20 + (i MOD 5)*130;
      Top := 20 + (i DIV 5)*80;
      Tag := i+1;
      Caption := 'Button'+IntToStr(tag);
    end;
  end;
end;
end.
erzeuge ich 20 Buttons auf einem Formular.

mfg gfjs

Pelzi 27. Feb 2006 20:52

Re: Buttons dynamisch erstellen
 
Zitat:

Zitat von gfjs
Wenn ich die Ausgangslage richtig verstanden habe, sollten viele Buttons auf ein Formular

ja hast du aber spielt keine Rolle, da es mir ja ums Prinzip und nciht um Fertigen code ging, das soll ja eh in ein bestehendes Programm implementiert werden.
Trotzdem thx


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 2 von 2     12   

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