Hallo DelTurbo,
Zitat von
DelTurbo:
Ufffffff,
ist das kompliziert. Wenn man sich mal den
ASM-Code ansieht schreibt er nur den pointer auf die routine ins objekt (Also Objectadr.+$64). Aber damit man das "sauber" durch den compiler bekommt muss man so einen aufwand treiben??? Das hätte ich nicht gedacht. Kein wunder das ich wie Ochs vorm Berg da stehe.
Ist kein Aufwand, sondern
OOP. Das Problem liegt daran, dass Du dem Event eine Prozedur zuweisen willst. Delphi erwartet aber eine Methode, also eine Funktion oder Prozedur
einer Klasse. Das kommt daher, dass Klassenmethoden als versteckenten Parameter die Referenz zur Objektklasse selbst mit übergeben: Das ist das bekannte Self.
Dein Beispiel für die Clever Internet Suite müßte nun so aussehen:
Delphi-Quellcode:
unit FTP;
interface
uses
clTcpClient, clFtp, clCertificateStore, clCertificate,
ComCtrls, Classes;
type
TMeineKlasse =
class(TObject)
private
public
procedure CheckCert;
procedure DoFTP(FName:
String);
end;
implementation
uses
SysUtils, IniFiles;
procedure TMeineKlasse.CheckCert;
begin
`statement`
end;
{CheckCert}
procedure TMeineKlasse.DoFTP(FName:
String);
var
Source: TclFtp;
begin
Source := TclFtp.Create(
nil);
Source.OnVerifyServer := CheckCert;
// jetzt passt das hier, falls die Parameter sonst stimmen
Source.Free;
end;
Das ganze dann noch mit Konstruktor und Destruktor versehen und die Klasse entsprechend instanzieren. Überlichweise würde man das Source Objekt als Feld der Klasse deklarieren, im Konstruktor das Source Objekt erzeugen und entsprechend im Destruktor freigeben.
Als Tipp für ein gutes Einsteigertutorial zu Methoden in Delphi / ObjectPascal:
http://www.delphi-treff.de/sprachen/...scal/methoden/
Viele Grüße,
Assertor