Hallo,
ich habe mich - wie angekündigt - des Themas
Verzeichnisüberwachung angenommen und das ganze ohne TObject in einen Thread gepackt. In einer Windows-Anwendung mit
VCL klappt das ganze prima. Ich brauche es aber für die Konsole und da geht "der Spaß" erst richtig los.
Wenn ich versuche, meine Prozedur mit exakt dem definierten Kopf zu übergeben, bekomme ich die Fehlermeldung
E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
. Wenn ich den Lösungsvorschlag
von hier nutze, wird das Programm zwar kompiliert, es kommt aber kein Ereignis an
Es geht um folgenden Code(ausschnitt):
Delphi-Quellcode:
Program DirMon.nonVCL;
{$APPTYPE CONSOLE}
Uses
System.SysUtils,
DirMonitor
in '
..\DirMonitor.pas';
Procedure ShowChange(Action: TAction; FileName:
String);
Var
S :
String;
Begin
S:= FormatDateTime('
yyyy.mm.dd hh:nn:ss ', Now);
Case Action
Of
faADDED : S:= '
[ADD] "' + FileName + '
"';
faREMOVED : S:= '
[DEL] "' + Filename + '
"';
faMODIFIED : S:= '
[MOD] "' + FileName + '
"';
faRENAMED_OLD_NAME: S:= '
[REN] "' + FileName + '
" (old name)';
faRENAMED_NEW_NAME: S:= '
[REN] "' + FileName + '
" (new name)';
End;
WriteLn(S);
End;
Var
T : TMethod;
Run : Boolean = True;
KeyBuffer :
String = '
';
KeyInput : Char;
Begin
Try
T.Code:= @ShowChange;
// <- https://www.entwickler-ecke.de/viewtopic.php?t=31378
With TDirMonitor.Create('
C:\', TDirEvent(T))
Do // <- Ereignisse kommen nicht an
With TDirMonitor.Create('
C:\', ShowChange)
Do // <- wird nicht kompiliert
Try
While Run
Do // ständig wiederholen
Begin
Sleep(60);
// kurz schlafen legen
// Programm einfach am "Leben" erhalten ...
End;
Finally
Free;
// das Thread-Objekt freigeben
End;
Except
On E:
Exception Do Writeln(E.ClassName, '
: ', E.
Message);
End;
End.
Wie löst man das Problem?
Ich habe allein in der
DP 3 Funde zu diesem Thema gefunden und natürlich gelesen. Diese landen allesamt auf vorderen Plätzen bei der google-Suche. Aber ich komme auf keine Lösung. Die
VCL-Variante klapp. Ich habe mal den Code als zip-Datei angehängt.