Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Events in Pascal Projekt? (https://www.delphipraxis.net/102655-events-pascal-projekt.html)

cchris 1. Nov 2007 22:32


Events in Pascal Projekt?
 
Hi,

ich würde gerne einen kleinen SMTP Daemon mit Indys schreiben, das ganze soll ohne Form laufen, daher hab ich ein Pascal Projekt erstellt, also soll ne Konsolenanwendung werden...
Das ganze sieht bis jetzt so aus:
Code:
var Socket:TIdSMTPServer;

procedure LoginEvent(ASender: TIdSMTPServerContext; const AUsername, APassword: string; var VAuthenticated: Boolean);
begin
writeln(AUsername);
writeln(APassword);
end;

procedure ConnectEvent (AContext:TIdSMTPServerContext);
begin
writeln('Connection coming in...');
end;

begin
Socket:=TIdSMTPServer.Create;
Socket.DefaultPort:=25;
Socket.ServerName:='********';
Socket.OnUserLogin:= @LoginEvent;
Socket.OnConnect:= @ConnectEvent;
Socket.Active := true;
repeat
Application.ProcessMessages;
until keypressed;
end.
2 Probleme: Erstens, das mit dem Events registrieren funktioniert noch net, ich soll net nen Prozedurzeiger übergeben sondern ne Prozedurvariable, wie mach ich das? Und 2. Problem, das was ich aus der Programmierung mit Forms kenne mit Application.ProcessMessages funzt auch net, da Application gar net da ist, muss ich dafür noch ne zusätzliche Unit einbinden oder einfach noch Application:TApplication; Application:=TApplication.Create; hin schreiben?

cYa cchris

ps: hoffe das ist das richtige forum

mkinzler 1. Nov 2007 22:37

Re: Events in Pascal Projekt?
 
Eventbehandlungsroutinen müssen Methoden sin.

cchris 1. Nov 2007 23:02

Re: Events in Pascal Projekt?
 
soll ich dann dadraus
Code:
type mysocket = class(TIdSMTPServer)
    procedure ConnectEvent (AContext:TIdSMTPServerContext);
    end;
var Socket:mysocket;
Oder wie? Weil normalerweise werden ja standartmäßig alle Events auf Methoden des Formulars gelenkt...
Wenn jemand da mal nur nen gaanz kurzen Code-Schnipsel schreiben könnte, wie er für das Event OnConnect (Prozedurparamter stimmen so wie ich sie hab) nen Event erstellt und registriert, dann wär ich ihm äußerst dankbar, weil ich das bis jetzt noch nie gemacht hab.

mkinzler 1. Nov 2007 23:03

Re: Events in Pascal Projekt?
 
Es kann aber jede beliebige Klasse sein.

cchris 1. Nov 2007 23:11

Re: Events in Pascal Projekt?
 
hab jetzt erstmal das gemacht:
[code]type
mySocket=class(TIdSMTPServer)
procedure ConnectEvent (AContext:TIdSMTPServerContext);
end;

var
Socket:mysocket;

procedure mySocket.ConnectEvent(AContext:TIdSMTPServerContex t);
begin
writeln('Connected...');
end;[code]

Aber was schreib ich jetzt bei Socket.OnConnect:= dahinter? Weil wenn ich einfach die Prozedur normal dahinter schreibe, dann wird sie ja normal ausgeführt, oder :?:

Sry, bin etwas verwirrt....

mkinzler 1. Nov 2007 23:13

Re: Events in Pascal Projekt?
 
Delphi-Quellcode:
Self.ConnectEvent;

cchris 1. Nov 2007 23:23

Re: Events in Pascal Projekt?
 
hab jetzt:
Code:
type
   mySocket=class(TIdSMTPServer)
      procedure ConnectEvent (AContext:TIdSMTPServerContext);
   end;

var
   Socket:mysocket;

procedure mySocket.ConnectEvent(AContext:TIdSMTPServerContext);
begin
writeln('Connected...');
end;

begin
Socket:=mysocket.Create;
Socket.DefaultPort:=25;
Socket.ServerName:='...';
Socket.OnConnect:= Self.ConnectEvent;
Socket.Active := true;
...
end.
Das ganze wird quittiert mit: "Error: Identifier not found "Self""
Iwas mach ich da wohl verkehrt... :wall:

Das Self. durch Socket. oder MySocket. zu ersetzen bringt auch nichts, dann meckert der Compiler, dass die Anzahl der Parameter nicht stimmt...

mkinzler 2. Nov 2007 06:35

Re: Events in Pascal Projekt?
 
Außerhalb der Klasse:
Delphi-Quellcode:
Socket.OnConnect:= Socket.ConnectEvent;

cchris 2. Nov 2007 15:46

Re: Events in Pascal Projekt?
 
Wie gesagt, das geht auch nicht, wenn ich das versuche (was ich schon hatte :wink:) dann kommt die Meldung, dass nicht genügend Parameter angegeben seien, aber ich will ja die Methode net sofort ausführen sondern blos "binden"...

mkinzler 2. Nov 2007 16:01

Re: Events in Pascal Projekt?
 
Versuch es mal mit einer Hilfs(-Event-)Klasse


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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 by Thomas Breitkreuz