AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Buttons dynamisch erstellen

Ein Thema von Pelzi · begonnen am 27. Feb 2006 · letzter Beitrag vom 27. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
Pelzi

Registriert seit: 26. Okt 2005
Ort: Kiel
13 Beiträge
 
Delphi 7 Personal
 
#1

Buttons dynamisch erstellen

  Alt 27. Feb 2006, 17:15
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:
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;
Das funktioniert ohne Probleme.
Nun stelle icha ber diesen code auf Buttons um:

Delphi-Quellcode:
var
  Form1: TForm1;
  buttons: array[0..20] of TButton;
[......]
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;
  end;
end;
Wenn ich nun das nun Compeliere sagt er mir zunächst:
Zitat:
[Fehler] Unit1.pas(19): Undefinierter Bezeichner: 'TButton'
Das lässt sich aber beheben in dem ich einen button auf dem Formular erstelle un ihn wieder lösche.
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 17:17
Du musst noch top, height und width enstellen, damit der Button weis, wo er ist

Ach, und nen Parent braucht er auch noch ...
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 17:20
Zitat von jfheins:
Du musst noch top, height und width enstellen, damit der Button weis, wo er ist

Ach, und nen Parent braucht er auch noch ...
Idealerweise sagst du ihm auch noch was er beim OnClick machen soll (Wozu sonst ein Button?)

Und damit er wirklich gezeigt wird muss man glaub ich noch Button.Show; sagen...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 17:22
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Pelzi

Registriert seit: 26. Okt 2005
Ort: Kiel
13 Beiträge
 
Delphi 7 Personal
 
#5

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 17:34
Zitat von glkgereon:
Zitat von jfheins:
Du musst noch top, height und width enstellen, damit der Button weis, wo er ist

Ach, und nen Parent braucht er auch noch ...
Idealerweise sagst du ihm auch noch was er beim OnClick machen soll (Wozu sonst ein Button?)

Und damit er wirklich gezeigt wird muss man glaub ich noch Button.Show; sagen...
So der Tipp mit dem Parent war gut
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
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 17:39
Zitat von Pelzi:
Zitat von glkgereon:
Zitat von jfheins:
Du musst noch top, height und width enstellen, damit der Button weis, wo er ist

Ach, und nen Parent braucht er auch noch ...
Idealerweise sagst du ihm auch noch was er beim OnClick machen soll (Wozu sonst ein Button?)

Und damit er wirklich gezeigt wird muss man glaub ich noch Button.Show; sagen...
So der Tipp mit dem Parent war gut
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
Weil sie schön aussehen?

OnClick:

einfach eine
procedure Click(Sender: TObject);
in der Form deklarieren und dann
Button.OnClick:=Click;
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Pelzi

Registriert seit: 26. Okt 2005
Ort: Kiel
13 Beiträge
 
Delphi 7 Personal
 
#7

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 18:01
Zitat von glkgereon:
Zitat von Pelzi:
Zitat von glkgereon:
Zitat von jfheins:
Du musst noch top, height und width enstellen, damit der Button weis, wo er ist

Ach, und nen Parent braucht er auch noch ...
Idealerweise sagst du ihm auch noch was er beim OnClick machen soll (Wozu sonst ein Button?)

Und damit er wirklich gezeigt wird muss man glaub ich noch Button.Show; sagen...
So der Tipp mit dem Parent war gut
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
Weil sie schön aussehen?

OnClick:

einfach eine
procedure Click(Sender: TObject);
in der Form deklarieren und dann
Button.OnClick:=Click;
Also wo jetzt die Prozedur deklarieren?
wenn ich es so mache bekomme ich eine Fhelermeldungmal 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:
[Fehler] Unit1.pas(46): Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Pelzi
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#8

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 18:03
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;
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 18:05
Hi,

die Methode Click ist in bereits als virtuelle Methode (TControl) implementiert.
Du musst diese in z.B. ButtonClick umbenennen.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
Pelzi

Registriert seit: 26. Okt 2005
Ort: Kiel
13 Beiträge
 
Delphi 7 Personal
 
#10

Re: Buttons dynamisch erstellen

  Alt 27. Feb 2006, 18:09
Zitat von dataspider:
Hi,

die Methode Click ist in bereits als virtuelle Methode (TControl) implementiert.
Du musst diese in z.B. ButtonClick umbenennen.

Cu, Frank
Guter Tipp, aber funktionieren tuts nochimmer nicht, gibt ne neue Fehlermeldung:
Zitat:
[Fehler] Unit1.pas(46): Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Pelzi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 Uhr.
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