![]() |
Procedure in anderer Form finden
Hallo zusammen,
ich stehe irgendwie auf dem Schlauch. In der MainForm erstelle ich Buttons für Form1, Form2 und Form3 Wie kann ich den Buttons denn die "OnClick" Procedure der entsprechenden Form zuweisen? Also sowas ähnliches wie
Delphi-Quellcode:
Schubs mich doch einer mal bitte vom Schlauch...
Procedure tmainform.ButtonsErstellen(sender:TObject; Fenster:TForm);
... newButton := TButton.create(fenster) newButton.name := 'NeuerButton'; ... newButton.onclick := fenster.findprocedure('buttonclick')// <-- wie kann ich die Procedure finden Danke! Gruß Torsten |
AW: Procedure in anderer Form finden
Wenn ich deine Frage richtig verstehe, dann einfach eine Prozedur definieren und dann weiter unten zuweisen.
Delphi-Quellcode:
procedure Tfmain.Status2Click(Sender: TObject); var MaIdx : Integer; MaName: String; begin if (Sender is TImage) then begin MaIdx:= (Sender as TImage).Tag; .... Pic.OnClick := Status2Click; |
AW: Procedure in anderer Form finden
So klappt es ja auch, wenn alles auf einer Form ist bzw wenn ich den Namen der anderen Form habe.
Im Prinzip möchte ich das hier in eine Zeile packen:
Delphi-Quellcode:
Da "Fenster" ja eine Variable ist, hab ich ja nicht den Procedurennamen der entsprechenden Form.
if fenster.name = 'Form1'
then newButton.onclick := form1.buttonclick else if fenster.name = 'Form2' then newButton.onclick := form2.buttonclick else if fenster.name = 'Form3' then newButton.onclick := form3.buttonclick In jeder Form ist die Procedure auch anders aufgebaut, hat aber immer den gleichen Namen. |
AW: Procedure in anderer Form finden
Nur eine Möglichkeit: erstell Dir eine Unit, die TForm um eine Methode erweitert.
Delphi-Quellcode:
Diese Unit bindest Du in allen betroffenen Formunits im interface-Abschnitt am besten als letzte, auf jeden Fall aber nach Forms in die uses-Klausel ein und überschreibst die Methode.
unit MyForms;
interface uses Classes, Forms; type TForm = class(Forms.TForm) public function FindOnClickEvent: TNotifyEvent; virtual; end; implementation { TForm } function TForm.FindOnClickEvent: TNotifyEvent; begin Result := nil; end; end.
Delphi-Quellcode:
Nun kannst Du in der aufrufenden Unit diese Methode aufrufen (auch diese muss MyForms einbinden), um den Handler zu ermitteln und zuzuweisen.
unit uTest;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MyForms; (* Einbinden der eigenen Unit *) type TfrmMain = class(TForm) btnTest: TButton; procedure btnTestClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } function FindOnClickEvent: TNotifyEvent; override; end; var frmMain: TfrmMain; implementation {$R *.dfm} { TForm29 } procedure TfrmMain.btnTestClick(Sender: TObject); begin ShowMessage(Name); end; function TfrmMain.FindOnClickEvent: TNotifyEvent; begin inherited; Result := btnTestClick; end; end.
Delphi-Quellcode:
var
frm: TForm; Event: TNotifyEvent; begin frm := frmMain; Event := frm.FindOnClickEvent(); (* Ohne Klammern mag mein Compiler das gar nicht *) SomeButton.OnClick := Event; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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