-
Deff (06.08.11 21:33) [0]Пытаюсь сделать маленькую программу для слежения за изменением файлов/папок на компьютере и дальнейшей обработке этих файлов/папок.
В Google к сожалению очень мало информации по данной теме.
Проблема в том что я никак не могу назначить свою процедуру на событие PDirChange
Вот что у меня получилось:
{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit Unit1;
interface
{$IFDEF KOL_MCK}
uses Windows, Messages, KOL {$IF Defined(KOL_MCK)}{$ELSE}, mirror, Classes, Controls, mckCtrls, mckObjs, Graphics {$IFEND (place your units here->)}, KOLadd;
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
{$ENDIF}
type
{$IF Defined(KOL_MCK)}
{$I MCKfakeClasses.inc}
{$IFDEF KOLCLASSES} {$I TForm1class.inc} {$ELSE OBJECTS} PForm1 = ^TForm1; {$ENDIF CLASSES/OBJECTS}
{$IFDEF KOLCLASSES}{$I TForm1.inc}{$ELSE} TForm1 = object(TObj) {$ENDIF}
Form: PControl;
{$ELSE not_KOL_MCK}
TForm1 = class(TForm)
{$IFEND KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
TrayIcon1: TKOLTrayIcon;
OpenDirDialog1: TKOLOpenDirDialog;
Button1: TKOLButton;
EditBox1: TKOLEditBox;
Label1: TKOLLabel;
procedure Button1Click(Sender: PObj);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 {$IFDEF KOL_MCK} : PForm1 {$ELSE} : TForm1 {$ENDIF} ;
DirChange:PDirChange;
DirOnChange : TOnDirChange;
{$IFDEF KOL_MCK}
procedure NewForm1( var Result: PForm1; AParent: PControl );
{$ENDIF}
procedure MyDirOnChange( Dummy: PObj; Sender: PObj );
implementation
{$IF Defined(KOL_MCK)}{$ELSE}{$R *.DFM}{$IFEND}
{$IFDEF KOL_MCK}
{$I Unit1_1.inc}
{$ENDIF}
procedure TForm1.Button1Click(Sender: PObj);
begin
if (OpenDirDialog1.Execute) then
EditBox1.Text:=OpenDirDialog1.Path;
DirChange:=NewDirChangeNotifier(OpenDirDialog1.Path,[fncDirName],true,DirOnChang e);
if DirChange = nil then
Label1.Caption:='!!!!!!!!!!!!!!!!!!!!!!!'
else
DirOnChange:= TOnEvent( MakeMethod( nil, @ MyDirOnChange ) ); // Вот тут ошибка....[Error] Unit1.pas(74): Incompatible types: 'PDirChange' and 'PObj'
end;
procedure MyDirOnChange( Dummy: PObj; Sender: PObj );
begin
//Тут хотелось бы знать что за объект, где лежит, и что с ним случилось
end;
end. -
procedure MyDirOnChange( Dummy: PObj; Sender: PObj );
begin
//Òóò õîòåëîñü áû çíàòü ÷òî çà îáúåêò, ãäå ëåæèò, è ÷òî ñ íèì ñëó÷èëîñü
end;
procedure TForm1.Button2Click(Sender: PObj);
begin
if (OpenDirDialog1.Execute) then
EditBox1.Text:=OpenDirDialog1.Path;
DirChange:=NewDirChangeNotifier(OpenDirDialog1.Path,[fncDirName],true,DirOnChang e);
if DirChange = nil then
Label1.Caption:='!!!!!!!!!!!!!!!!!!!!!!!'
else
DirOnChange:= tOnDirChange( MakeMethod( nil, @MyDirOnChange ) );
end; -
Deff (07.08.11 15:12) [2]Да спасибо большое! Ошибка исчезла, но процедура MyDirOnChange не вызывалась.
Немного переделал NewDirChangeNotifier сам на:
DirChange:=NewDirChangeNotifier(OpenDirDialog1.Path,[fncDirName,fncFileName,fncC reation,fncSize,fncLastWrite],true,
TOnDirChange(MakeMethod(nil,@MyDirOnChange)));
Так процедура MyDirOnChange стала вызываться :)
Возник другой вопрос как в процедуре MyDirOnChange узнать что случилось и с чем (Какой файл/папка создалась/изменилась/переименовалась......)
Пытался найти соответствующие свойства у DirChange, но кроме задаваемого пути при создании там ничего нет. А в процедуре у Dummy и у Sender ничего рядом стоящего нет.
Решил покопаться в KOLAdd.pas - но это для меня дремучий лес. Я вижу что относительно PDirChange там много всего но не пойму что за чем и как это использовать.
Как быть Как узнать...? -
QAZ (07.08.11 17:07) [3]
> Как быть Как узнать...?
никак,афтар задумал это просто как индикатор изменений
делай сам на апи