AGB  ·  Datenschutz  ·  Impressum  







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

Button zur Laufzeit erzeugen

Ein Thema von Mooshead · begonnen am 28. Jul 2007 · letzter Beitrag vom 28. Jul 2007
Antwort Antwort
Mooshead

Registriert seit: 27. Jul 2007
32 Beiträge
 
#1

Button zur Laufzeit erzeugen

  Alt 28. Jul 2007, 02:03
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:
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;
Die Procedure test wurde natürlich im Voraus deklariert.

Danke für eure Antworten
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#2

Re: Button zur Laufzeit erzeugen

  Alt 28. Jul 2007, 02:27
Delphi-Quellcode:
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;
So in etwa...
Gute Nacht

[edit=Luckie] Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Button zur Laufzeit erzeugen

  Alt 28. Jul 2007, 02:41
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Mooshead

Registriert seit: 27. Jul 2007
32 Beiträge
 
#4

Re: Button zur Laufzeit erzeugen

  Alt 28. Jul 2007, 13:08
Danke für euren schnellen Antworten auch noch zur späten Stunde

ich habe da aber jetzt noch eine Frage und ich hoffe ihr könnt mir schnell weiter helfen:

Delphi-Quellcode:
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Button zur Laufzeit erzeugen

  Alt 28. Jul 2007, 13:18
Hi,

das weiß sogar ich:

Delphi-Quellcode:
procedure TForm1.Klick(Sender : TObject);
begin
  with Sender as TButton do
    Label1.Caption := Caption;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Mooshead

Registriert seit: 27. Jul 2007
32 Beiträge
 
#6

Re: Button zur Laufzeit erzeugen

  Alt 28. Jul 2007, 13:19
Dankeschööön
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Button zur Laufzeit erzeugen

  Alt 28. Jul 2007, 14:34
Noch eine kleine Ergänzung:
Zitat von Mooshead:
Delphi-Quellcode:
TButton.Create(Self).Name :='Button'+IntToStr(i);
      with TButton(FindComponent('Button'+IntToStr(i))) do
Schnelle geht es, wenn du den Button danach nicht nochmal suchen musst:
Delphi-Quellcode:
with TButton.Create(self) do
begin
   Name:='Button'+IntoStr(i);
In den Beispielen die dir gegeben wurden wurde es schon so gemacht.
Benjamin
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:25 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