Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suchen einer Methode (https://www.delphipraxis.net/109175-suchen-einer-methode.html)

Christian18 25. Feb 2008 18:26


Suchen einer Methode
 
Hallo,

ist es möglich eine Methode zu finden? Ich habe den Namen der Methode aus einer Datei. Und diese Methode möchte ich einen Button zuweisen.

Name aus Datei: ShowFiles

Methode: procedure TPrgFiles.ShowFiles(Sender: TObject);

MFG Christian18

Neutral General 25. Feb 2008 18:29

Re: Suchen einer Methode
 
Hi,

Das dürfte so funktionieren:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Sieben(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var x: TMethod;
begin
  x.Data := Button1; // Der zukünftige Besitzer der Methode
  x.Code := TForm1.MethodAddress('Sieben'); // Pointer zur Methode selbst
  Button1.OnClick := TNotifyEvent(x);
end;

procedure TForm1.Sieben(Sender: TObject);
begin
  ShowMessage('Sieben!');
end;

end.
EDIT: Alles neu gemacht :mrgreen:

Gruß
Neutral General

Christian18 10. Apr 2008 18:41

Re: Suchen einer Methode
 
Hallo,

kann man irgendwie auch die Methode direkt aufrufen?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x: TMethod;
begin
  x.Data := Button1; // Der zukünftige Besitzer der Methode
  x.Code := TForm1.MethodAddress('Sieben'); // Pointer zur Methode selbst

  TNotifyEvent(x); // gefundene Methode direkt hier ausführen ???? geht das?!?!? (so funktioniert es leider nicht)
end;
MFG Christian18

Christian18 10. Apr 2008 19:11

Re: Suchen einer Methode
 
Hallo,

ich habe es gerade selber herrausgefunden.

Ich habe es so gemacht:

Delphi-Quellcode:
procedure TForm1.Neu(Sender: TObject); // Diese Methode soll gefunden werden.
begin
  ShowMessage('Neu');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TProcedure(Form1.MethodAddress('Neu')); // Methode finden und ausführen
end;
MFG Christian18

Apollonius 10. Apr 2008 19:30

Re: Suchen einer Methode
 
Böse! So kannst du in der Methode weder auf Sender noch auf Self und damit auch nicht auf Felder der Instanz zugreifen.

Christian18 10. Apr 2008 20:32

Re: Suchen einer Methode
 
Hallo,

wie kann man es denn besser machen?

MFG Christian18

Neutral General 10. Apr 2008 20:41

Re: Suchen einer Methode
 
Hi,

versuchs mal so:

Delphi-Quellcode:
TDeineMethode = procedure (lala: Integer) of object;

var x: TMethod;
    y: TDeineMethode;
begin
  x.Data := Button1;
  x.Code := TForm1.MethodAddress('Sieben');
  y := TDeineMethode(x);
  y(5);
end;

Christian18 10. Apr 2008 20:43

Re: Suchen einer Methode
 
Ok, danke funktioniert.

Christian18 10. Apr 2008 20:57

Re: Suchen einer Methode
 
Ich bins nochmal.

Meinst du so?

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TMeine = procedure (Sender: TObject) of object;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Frame21: TFrame2;
    Frame31: TFrame3;
    procedure Button1Click(Sender: TObject);
    procedure Sieben(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Sieben(Sender: TObject);
begin
  Frame21.Visible:=False;
  Frame31.Visible:=False;
end;

procedure TForm1.Button1Click(Sender: TObject);
  var x: TMethod;
      y: TMeine;
begin
  x.Data:=Button1;
  x.Code:=TForm1.MethodAddress('Sieben');
  y:=TMeine(x);

  y(Sender);
end;

end.
So funktioniert es doch nicht so wirklich.

sirius 11. Apr 2008 08:02

Re: Suchen einer Methode
 
Delphi-Quellcode:
x.Data=TForm1
wel es ja procedure TForm1.Sieben heißt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 Uhr.
Seite 1 von 2  1 2      

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