![]() |
Ereignis in ein Array an Procedure übergeben
Hallo,
wie kann ich in eine Procedure die ich geschrieben habe ein on click ereignis übergeben??? ich habe eine kleine procedure geschrieben, womit man ein menü erzeugen kann. jetzt wollte ich das noch so machen, dass man auch ein ereigniss in einem array in die procedure übergibt uns dann soll es für die einzelnen buttons ausgeführt werden. hier meine code die ich bis jetzt habe:
Delphi-Quellcode:
Mit freundlichen Grüßen
// Procedure
procedure create_menu(a : Array of String); var b : TButton; i : Integer; // Schleifenvariable begin for i:=0 to Length(a) - 1 do begin b:=TButton.Create(Form1); b.Caption:=a[i]; b.Top:=30 * i; b.Left:=10; b.Parent:=Form1; end; end; // Aufruf procedure TForm1.Button1Click(Sender: TObject); var a : Array of String; begin SetLength(a, 5); a[0]:='Menu1'; a[1]:='Menu2'; a[2]:='Menu3'; a[3]:='Menu4'; a[4]:='Menu5'; create_menu(a); end; Christian18 |
Re: Ereignis in ein Array an Procedure übergeben
Jupp sind ja schließlich zwei verschiedene Typendefinitionen :zwinker:
So:
Delphi-Quellcode:
Type TSArray = Array of String;
// Procedure procedure create_menu(a : TSArray); var b : TButton; i : Integer; // Schleifenvariable begin for i:=0 to Length(a) - 1 do begin b:=TButton.Create(Form1); b.Caption:=a[i]; b.Top:=30 * i; b.Left:=10; b.Parent:=Form1; end; end; // Aufruf procedure TForm1.Button1Click(Sender: TObject); var a : TSArray; begin SetLength(a, 5); a[0]:='Menu1'; a[1]:='Menu2'; a[2]:='Menu3'; a[3]:='Menu4'; a[4]:='Menu5'; create_menu(a); end; |
Re: Ereignis in ein Array an Procedure übergeben
Diese Logik von Delphi muss mir auch noch mal jemand schlüssig erklären. ;)
|
Re: Ereignis in ein Array an Procedure übergeben
Im Grunde ist es doch ganz praktisch.
Denn so kann ich z.B. auch zwei Typen deklarieren, die zwar für mich unterschiedlich sind, aber in Wirklichkeit identisch ^^ Versuch mal sowas zu machen, wenn der Compiler die Typen so behandeln würde, als seien sie die Selben -.-''
Delphi-Quellcode:
Type TMeinTypEins = Array of Irgendwas;
TMeinTypZwei = Array of Irgendwas; Procedure NeProcedure(i: TMeinTypEins); Overload; Procedure NeProcedure(i: TMeinTypZwei); Overload; Falls jemand 'ne noch besser Erklärung hat ... bin schon sehr gespannt :coder2: |
Re: Ereignis in ein Array an Procedure übergeben
Moin moin,
Zitat:
Delphi-Quellcode:
Mich haben allerdings die Beiträge von himitsu irritiert, evtl. habe ich auch was falsch verstanden?!
type
TMyMenu = packed record Caption: String; OnClick: Pointer; end; TMenuArray = Array of TMyMenu; procedure MyOnClick(Sender: TObject); begin if Sender is TButton then ShowMessage(TButton(Sender).Caption); end; // Procedure procedure create_menu(a : TMenuArray); var b : TButton; i : Integer; // Schleifenvariable TmpMethod: TMethod; begin for i:=0 to Length(a) - 1 do begin b:=TButton.Create(Form1); b.Caption:=a[i].Caption; TmpMethod.Code := a[i].OnClick; TmpMethod.Data := b; b.OnClick:= TNotifyEvent(TmpMethod); b.Top:=30 * i; b.Left:=10; b.Parent:=Form1; end; end; // Aufruf procedure TForm1.Button2Click(Sender: TObject); var a : TMenuArray; begin SetLength(a, 5); a[0].Caption := 'Menu1'; a[0].OnClick := @MyOnClick; a[1].Caption := 'Menu2'; a[1].OnClick := @MyOnClick; // .. create_menu(a); end; Wenn dem so sein sollte, ignoriert meinen Beitrag... |
Re: Ereignis in ein Array an Procedure übergeben
Ohhh, du könntest Recht haben ... eigentlich war mir so, als wenn ich vorhin da etwas anderes gelesen hab und von Editieren scheint da ja auch keine Spur zu sein.
Und dein Lösungsvorschlag sieht och ganz OK aus. :thumb: Ich glaub ich hör jetzt auf mit den Wochenendplanungen und geh nochmal 'ne Runde schlafen :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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