Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi array Buttons und proceduren (https://www.delphipraxis.net/154411-array-buttons-und-proceduren.html)

Chris92 .A 9. Sep 2010 20:14

array Buttons und proceduren
 
Hallo erstmal,
Also ich hab folgendes Problem, dass ich nicht weiß wie man mehreren Buttons die während der Laufzeit erstellt werden verschiedene Procedure zuweisen kann. Die Buttons werden erstellt soviel wie ich gerade will und ich bekomm immer die Procedure einem Button zugewiesen aber wie ändere ich jetzt die Procedure die jetzt z.B: bei den letzten 3 Buttons ändern soll.

Delphi-Quellcode:
unit EigenesTrainingU;

interface

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

type
  TfrmEigenesTraining = class(TForm)
    Label1: TLabel;
    cbxATage: TComboBox;
    procedure cbxATageChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
        btnTag : Array[1..7] of TButton;
        procedure btnTag1(Sender: TObject);
        {procedure btnTag2(Sender: TObject);
        procedure btnTag3(Sender: TObject);
        procedure btnTag4(Sender: TObject);
        procedure btnTag5(Sender: TObject);
        procedure btnTag6(Sender: TObject);
        procedure btnTag7(Sender: TObject);}
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmEigenesTraining: TfrmEigenesTraining;
  Left,Top,Counter : Integer;
  Change : boolean;

implementation

uses
        EinloggenU;

{$R *.DFM}

procedure TfrmEigenesTraining.cbxATageChange(Sender: TObject);
var I :integer;
begin
        if Change = True then
        for I := 1 to Counter do
        begin
                btnTag[I].Destroy;
                Counter := 0;
        end;
        for I := 1 to strtoint(cbxATage.Items[cbxATage.ItemIndex]) do
        begin
                btnTag[I] := TButton.Create(self);
                btnTag[I].Parent := self;
                btnTag[I].Caption := 'Tag';
                btnTag[I].Left := Left;
                btnTag[I].Top := Top;
                btnTag[I].Visible := True;
                Left := Left + 88;
                Change := True;
                Counter := Counter + 1;
                btnTag[I].OnClick := btnTag1 {PROBLEM PROBLEM PROBLEM PROBLEM}

        end;
end;

procedure TfrmEigenesTraining.FormCreate(Sender: TObject);
begin
        Left := 250;
        Top := 250;
        Change := False;
end;

procedure TfrmEigenesTraining.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
        frmLogin.show;
end;

procedure TfrmEigenesTraining.btnTag1(Sender: TObject);
begin
        frmLogin.show;
end;

end.
Mein Problem im Code findet ihr unter dem Kommentar "{PROBLEM PROBLEM PROBLEM PROBLEM}"


Schonmals danke im vorraus

MFG Chris92 .A

mkinzler 9. Sep 2010 20:21

AW: array Buttons und proceduren
 
Hierfür existiert der Parameter Sender
Delphi-Quellcode:
procedure TfrmEigenesTraining.FormCreate(Sender: TObject);
begin
        Sender.Left := 250;
        Sender.Top := 250;
        Sender.Change := False;
end;

Chris92 .A 9. Sep 2010 20:29

AW: array Buttons und proceduren
 
Sry versteh ich jetzt nicht. Kann auch sein dass ich meine Frage unklar gestellt habe also versuch ich es normal. Also mein Problem liegt darin dass ich nicht weis wie ich z.B: btnTag[I] := btnTag1 danach dann btnTag[I] := btnTag2 danach btnTag[I] := btnTag3 etc... hinkriege I ist der zähler der sich immer um 1 erhöht.

mkinzler 9. Sep 2010 20:31

AW: array Buttons und proceduren
 
Du solltest immer die selbe Methode zuweisen und in ihr anhand des Senders entscheiden

Matze 9. Sep 2010 20:49

AW: array Buttons und proceduren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mal ein kleines Beispiel, was Markus meint (da gibt's natürlich auch mehrere Möglichkeiten, das umzusetzen):
Delphi-Quellcode:
// ...

type
  TForm1 = class(TForm)
    CreateButtons: TButton;
    procedure MyBtnClick(Sender: TObject);
    procedure CreateButtonsClick(Sender: TObject);
  private
    { Private-Deklarationen }
    MyButtons: array[1..5] of TButton;

// ...

procedure TForm1.CreateButtonsClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 1 to 5 do
  begin
    MyButtons[i] := TButton.Create(Application.MainForm);
    MyButtons[i]. Left := 200;
    MyButtons[i].Top := 20 + i * 30;
    MyButtons[i].Parent := Form1;
    MyButtons[i].Name := 'MyBtn' + IntToStr(i);
    MyButtons[i].Caption := MyButtons[i].Name;
    MyButtons[i].Tag := i; // für die Fallunterscheidung im OnClick
    MyButtons[i].OnClick := MyBtnClick;
    MyButtons[i].Show;
  end;
end;

procedure TForm1.MyBtnClick(Sender: TObject);
begin
  case (Sender as TButton).Tag of
    1: begin
         // Code fürs Button1-Onlick
         ShowMessage('Btn 1');
       end;
    2: begin
         // Code fürs Button2-Onlick
         ShowMessage('Btn 2');
       end;
    3: begin
         // Code fürs Button3-Onlick
         ShowMessage('Btn 3');
       end;
    4: begin
         // Code fürs Button4-Onlick
         ShowMessage('Btn 4');
       end;
    5: begin
         // Code fürs Button5-Onlick
         ShowMessage('Btn 5');
       end;
  end;
end;

Chris92 .A 9. Sep 2010 20:58

AW: array Buttons und proceduren
 
WOW vielen dank das ist genau das was ich gesucht habe, Dank euch Beiden.

Gut dass man jeden Tag was neues lernen kann ;)

MFG

Chris92 .A


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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