Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#8

Re: Objekte zur laufzeit erstellen und NEUE events zuordnen

  Alt 4. Jan 2010, 16:51
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
Frederik
  Mit Zitat antworten Zitat