Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Ereignisprozedur ohne Klasse (Prozedurenzeiger) (https://www.delphipraxis.net/188423-ereignisprozedur-ohne-klasse-prozedurenzeiger.html)

taveuni 2. Mär 2016 09:50

Delphi-Version: XE2

Ereignisprozedur ohne Klasse (Prozedurenzeiger)
 
Hallo zusammen,
Sorry für den Titel. Für ein älteres Projekt nutze ich die unit OneInstance.pas aus dieser Community um einfach einen Mehrfachstart zu verhindern. Das funktioniert perfekt. Nun sollte ich allfällige Parameter an die Instanz auch verwenden. Der Author schreibt hier einfach:
Zitat:

Über den Prozedurenzeiger NewInstProc kann eine Ereignisprozedur festgelegt werden
Wie kann ich das tun? Wenn ich eine Procedure anlege und diese Versuche zu assignen a la:
Delphi-Quellcode:
uses
  ,OneInstance
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure NewInst(ProcessId: Cardinal; CmdLine: string; var Allow: Boolean);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  OneInstance.NewInstProc:= self.NewInst;
end;
wird logischerweise bemängelt: Inkompatible Typen: Reguläre Prozedur und Methodenzeiger. Hinweis: Die Komponente ist nicht installiert - es ist nur die Unit in uses.

Danke für eine Erleuchtung

Neutral General 2. Mär 2016 09:57

AW: Ereignisprozedur ohne Klasse (Prozedurenzeiger)
 
Es gibt einen Unterschied zwischen Klassenmethoden und normalen Prozeduren.
Hier ist eine normale Prozedur gefordert:

Delphi-Quellcode:
uses
  ,OneInstance
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure NewInst(ProcessId: Cardinal; CmdLine: string; var Allow: Boolean);
begin
  // ?
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OneInstance.NewInstProc:= NewInst;
end;

taveuni 2. Mär 2016 10:00

AW: Ereignisprozedur ohne Klasse (Prozedurenzeiger)
 
Ächz.... So einfach. Danke

himitsu 2. Mär 2016 10:44

AW: Ereignisprozedur ohne Klasse (Prozedurenzeiger)
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    class procedure NewInst(ProcessId: Cardinal; CmdLine: string; var Allow: Boolean); static;
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OneInstance.NewInstProc := self.NewInst;
end;
Class-Methode = ohne Instanz
Static = ohne versteckten "Self"-Parameter


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz