Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Varibale bei (Sender:Object) mit übergeben (https://www.delphipraxis.net/92576-varibale-bei-sender-object-mit-uebergeben.html)

Luke_83 22. Mai 2007 15:12


Varibale bei (Sender:Object) mit übergeben
 
Hallo das ist mein erster Beitrag und ich weiß nicht genau ob ich jetzt alles richtig gemacht habe.
Aber zu meinem Problem bei Delphi


Ich hab zurzeit folgendes Problem. Die Procedure Task_neu muss Variabel sein. Das heißt ihr möchte eine Variable mit dem Onlick Event übergeben.

Delphi-Quellcode:
procedure TForm2.Task_Neu([b]var i:Integer;[/b] Sender: TObject);
var SelectedURL,url:string;
begin
 Taskausfuehren[0-9,0-19];
end;


procedure TForm2.Button22Click(Sender: TObject);
var MeinMenue: array[0 ..recordmax] of TMenuItem;
    i,i2:Integer;
begin
  //Vorhandenes Menü Löschen
  for i:=0 to recordmax do Form1.MainMenu1.Items[0].Clear;

  //Menü neu aufbauen
  for i := 0 to recordmax do begin
   MeinMenue[i] := TMenuItem.Create(self);
   MeinMenue[i].Caption := Task[1,i].FeldName;
   MeinMenue[i].OnClick:=Task_Neu;
   Form1.MainMenu1.Items[0].Add(MeinMenue[i]);
  end;

end;
[edit=SirThornberry] Mfg, SirThornberry[/edit]

Apollonius 22. Mai 2007 15:17

Re: Varibale bei (Sender:Object) mit übergeben
 
Setze mal die Delphitags, der Code wird dadurch deutlich besser zu lesen. Einfach mal auf Edit klicken.
Zu dem Problem:
Jedes Control hat eine Eigenschaft Tag. Darauf kannst du im onClick mit (Sender as TControl).Tag zugreifen. Vielleicht hilft es dir ja.

Die Muhkuh 22. Mai 2007 15:19

Re: Varibale bei (Sender:Object) mit übergeben
 
Hi Luke_83,
erst einmal: Herzlich Willkommen in der Delphi-PRAXiS :dp:

So, wie Du das haben möchtest, wird das nicht klappen. Du könntest aber die Property .Tag dafür missbrauchen. So wie ich sehe, brauchst Du nur eine Integer-Variable:

Delphi-Quellcode:
procedure TForm2.Task_Neu(Sender: TObject);
var SelectedURL,url:string;
  I: Integer;
begin
  // Und hier kommst Du mit folgendem Code wieder an Deinen Wert:
  I := (Sender as TMenuItem).Tag;
end;

procedure TForm2.Button22Click(Sender: TObject);
var MeinMenue: array[0 ..recordmax] of TMenuItem;
i,i2:Integer;
begin
//Vorhandenes Menü Löschen
for i:=0 to recordmax do Form1.MainMenu1.Items[0].Clear;

//Menü neu aufbauen
for i := 0 to recordmax do begin
MeinMenue[i] := TMenuItem.Create(self);
MeinMenue[i].Caption := Task[1,i].FeldName;
MeinMenue[i].OnClick:=Task_Neu;
MeinMenue[i].Tag := IntegerVariable; // << hier kommt Deine Variable hin, die Du noch übergeben willst.
Form1.MainMenu1.Items[0].Add(MeinMenue[i]);
end;

end;
Wenn Du die Delphi-BB-Code-Tags um Deinen Quellcode schreibst, dann stellt das Forum Deinen Quellcode wie in Delphi dar:

Code:
[delphi][/delphi]

Luke_83 22. Mai 2007 15:27

Re: Varibale bei (Sender:Object) mit übergeben
 
Kann man im Tag Feld auf zwei Variabeln übergeben oder geht das dort nur mit einer Variablen ???
Aber schon mal Danke für die Antwort...


[edit=SirThornberry]Delphi-Tags entfernt - Mfg, SirThornberry[/edit]

Luke_83 22. Mai 2007 15:44

Re: Varibale bei (Sender:Object) mit übergeben
 
Delphi-Quellcode:

procedure TForm2.Task_Neu(Sender: TObject);
var SelectedURL,url:string;
  I1,I2: Integer;
begin
  // Und hier kommst Du mit folgendem Code wieder an Deinen Wert:
  I1 := (Sender as TMenuItem).Hint;
  I2 := (Sender as TMenuItem).Tag;
  form2.Tasks_shell(i1+1,i2+1);
end;


procedure TForm2.Button22Click(Sender: TObject);
var MeinMenue: array[0 ..recordmax] of TMenuItem;
i,i2:Integer;
begin
//Vorhandenes Menü Löschen

  Form1.MainMenu1.Items[0].Clear;

//Menü neu aufbauen
//for i2:=0 to 9 do begin
  for i := 0 to recordmax do begin
  MeinMenue[i] := TMenuItem.Create(self);
  MeinMenue[i].Caption := Task[1,i].FeldName;
  MeinMenue[i].OnClick:=Task_Neu;
  MeinMenue[i].Tag := i; // << hier kommt Deine Variable hin, die Du noch übergeben willst.
  MeinMenue[i].Hint:=1;
  Form1.MainMenu1.Items[0].Add(MeinMenue[i]);
  end;
//end;

end;

Danke für die Antworten habs hinbekommen und läuft jetzt auch mit zwei Variablen

Die Muhkuh 22. Mai 2007 15:45

Re: Varibale bei (Sender:Object) mit übergeben
 
Direkt geht es nicht, jedoch kann man ein bisschen tricksen...

Das folgende Beispiel ist quick & dirty, der Speicher wird nicht freigegeben. Es dient nur zur Demonstration!

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TMoreVars = class(TObject)
  public
    Test1: String;
    Test2: Integer;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
    procedure DoSomething(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button4Click(Sender: TObject);
var
  mv: TMoreVars;
begin
  mv := TMoreVars.Create;
  mv.Test1 := 'Hello =)';
  mv.Test2 := 5;

  Button1.Tag := Integer(mv);
end;

procedure TForm1.DoSomething(Sender: TObject);
var
  mv: TMoreVars;
begin
  //
  mv := TMoreVars((Sender as TButton).Tag);
  ShowMessage(mv.Test1);
  showMessage(IntToStr(mv.Test2));
end;

end.


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