Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
Внизвсе хорошо НО............. Найти похожие ветки
← →
nika_ufc (2002-11-24 17:34) [0]все хорошо но прошрамма почему то не работает. она должна сигнализзыровать при следуюших изменениях:
1.Сигнализировать о создании, удалении и переименовании файла.
2.Сигнализировать о создании, удалении, переименовании подкаталогов
3.Сигнализировать об изменении атрибутов файлов или подкаталогов
4.Сигнализировать об изменении размеров файлов. Операционная система определяет, что размер файла изменился, только если он закрыт
5.Сигнализировать о смене даты последнего изменения файла. Операционная система определяет, что дата изменения файла сменилась, только если он закрыт
6.Сигнализировать об изменениях дескриптора защиты.
программа компилируется но там следуюшие Warnings:
[Warning] uMonThread.pas(130): Symbol "Win32Check" is specific to a platform
[Warning] uMonThread.pas(131): Symbol "Win32Check" is specific to a platform
[Warning] uMonThread.pas(132): Symbol "Win32Check" is specific to a platform
[Warning] uMonThread.pas(133): Symbol "Win32Check" is specific to a platform
[Warning] uMonThread.pas(134): Symbol "Win32Check" is specific to a platform
[Warning] uMonThread.pas(135): Symbol "Win32Check" is specific to a platform
там я использую поток TMonDirThread и
TForm=TfMonDirMain
TStatusBar=sbMain
TTimer=tmDate
а вот и код программы(обе Unit-а здесь) :
Unit1=ufMain
unit ufMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, StdCtrls, Menus, uMonThread;
type
TfMonDirMain = class(TForm)
mm: TMainMenu;
lbLog: TListBox;
sbMain: TStatusBar;
tmDate: TTimer;
Monitor1: TMenuItem;
mmExit: TMenuItem;
mmStart: TMenuItem;
mmStop: TMenuItem;
procedure tmDateTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure mmExitClick(Sender: TObject);
procedure mmStartClick(Sender: TObject);
procedure mmStopClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fMonDirMain: TfMonDirMain;
implementation
{$R *.dfm}
procedure TfMonDirMain.tmDateTimer(Sender: TObject);
begin
sbMain.Panels[0].Text:=FormatDateTime("dd.mm.yyyy hh:nn:ss",Now)
end;
procedure TfMonDirMain.FormCreate(Sender: TObject);
begin
tmDateTimer(Self);
sbMain.Panels[1].Text:="Disconnected";
Application.Title:="Directory monitor"
end;
procedure TfMonDirMain.mmExitClick(Sender: TObject);
begin
Close
end;
procedure TfMonDirMain.mmStartClick(Sender: TObject);
begin
fMonDirMain.Tag:=Integer(TMonDirThread.Create("c:\"));
mmStart.Enabled:=False;
mmStop.Enabled:=True;
end;
procedure TfMonDirMain.mmStopClick(Sender: TObject);
begin
if Assigned(TMonDirThread(fMonDirMain.Tag)) then
TMonDirThread(fMonDirMain.Tag).Terminate;
fMonDirMain.Tag:=0
end;
end.
из зя таго что второй Unit здесь не поместилься я приважу его в следуюшем вопросе
← →
nika_ufc (2002-11-24 17:37) [1]Unit2=uMOnDiurThread
unit uMonThread;
interface
uses
Classes, Windows, SysUtils;
type
TMonDirThread = class(TThread)
public
constructor Create(aPath: String);
private
FPath:String;
{ Private declarations }
protected
Procedure Execute; override;
Procedure UpdateLog_Change_File_Name;
Procedure UpdateLog_Change_Dir_Name;
Procedure UpdateLog_Change_Attributes;
Procedure UpdateLog_Change_Size;
Procedure UpdateLog_Change_Last_Write;
Procedure UpdateLog_Change_Security;
Procedure ThreadStart;
Procedure ThreadStop;
end;
implementation
uses ufMain;
{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TMonDirThread.UpdateCaption;
begin
Form1.Caption := "Updated in a thread";
end; }
{ TMonDirThread }
Constructor TMonDirThread.Create(aPath: String);
begin
inherited Create(True);
FreeOnTerminate:=True;
FPath:=aPath;
Self.Priority:=tpHighest;
Resume
end;
Procedure TMonDirThread.UpdateLog_Change_File_Name;
begin
fMonDirMain.lbLog.Items.Add(TimeToStr(Time)+" Change the file name");
if fMonDirMain.lbLog.Items.Count>200 then
fMonDirMain.lbLog.Items.Delete(0);
fMonDirMain.lbLog.ItemIndex:=fMonDirMain.lbLog.Items.Count-1
end;
Procedure TMonDirThread.UpdateLog_Change_Dir_Name;
begin
fMonDirMain.lbLog.Items.Add(TimeToStr(Time)+" Change the dir name");
if fMonDirMain.lbLog.Items.Count>200 then
fMonDirMain.lbLog.Items.Delete(0);
fMonDirMain.lbLog.ItemIndex:=fMonDirMain.lbLog.Items.Count-1
end;
Procedure TMonDirThread.UpdateLog_Change_Attributes;
begin
fMonDirMain.lbLog.Items.Add(TimeToStr(Time)+" Change the file attributes");
if fMonDirMain.lbLog.Items.Count>200 then
fMonDirMain.lbLog.Items.Delete(0);
fMonDirMain.lbLog.ItemIndex:=fMonDirMain.lbLog.Items.Count-1
end;
Procedure TMonDirThread.UpdateLog_Change_Size;
begin
fMonDirMain.lbLog.Items.Add(TimeToStr(Time)+" Change the file size");
if fMonDirMain.lbLog.Items.Count>200 then
fMonDirMain.lbLog.Items.Delete(0);
fMonDirMain.lbLog.ItemIndex:=fMonDirMain.lbLog.Items.Count-1
end;
Procedure TMonDirThread.UpdateLog_Change_Last_Write;
begin
fMonDirMain.lbLog.Items.Add(TimeToStr(Time)+" Change the file modified date");
if fMonDirMain.lbLog.Items.Count>200 then
fMonDirMain.lbLog.Items.Delete(0);
fMonDirMain.lbLog.ItemIndex:=fMonDirMain.lbLog.Items.Count-1
end;
Procedure TMonDirThread.UpdateLog_Change_Security;
begin
fMonDirMain.lbLog.Items.Add(TimeToStr(Time)+" Changed the file security");
if fMonDirMain.lbLog.Items.Count>200 then
fMonDirMain.lbLog.Items.Delete(0);
fMonDirMain.lbLog.ItemIndex:=fMonDirMain.lbLog.Items.Count-1
end;
procedure TMonDirThread.ThreadStart;
begin
fMonDirMain.sbMain.Panels[1].Text:="Active";
fMonDirMain.lbLog.Items.Add(TimeToStr(Time)+" Monitor is started")
end;
procedure TMonDirThread.ThreadStop;
begin
fMonDirMain.sbMain.Panels[1].Text:="Disconnected";
fMonDirMain.lbLog.Items.Add(TimeToStr(Time)+" Monitor is stoped");
fMonDirMain.mmStart.Enabled:=True;
fMonDirMain.mmStop.Enabled:=False
end;
снова не поместилься, полавина в следуюшем
← →
nika_ufc (2002-11-24 17:39) [2]продалжение:
procedure TMonDirThread.Execute;
var
HandleChange_Change_File_Name,
HandleChange_Change_Dir_Name,
HandleChange_Change_Attributes,
HandleChange_Change_Size,
HandleChange_Change_Last_Write,
HandleChange_Change_Security:THandle;
begin
{ Place thread code here }
HandleChange_Change_File_Name:=FindFirstChangeNotification(PChar(FPath),True,FILE_NOTIFY_CHANGE_FILE_NAME);
HandleChange_Change_Dir_Name:=FindFirstChangeNotification(PChar(FPath),True,FILE_NOTIFY_CHANGE_DIR_NAME);
HandleChange_Change_Attributes:=FindFirstChangeNotification(PChar(FPath),True,FILE_NOTIFY_CHANGE_ATTRIBUTES);
HandleChange_Change_Size:=FindFirstChangeNotification(PChar(FPath),True,FILE_NOTIFY_CHANGE_SIZE);
HandleChange_Change_Last_Write:=FindFirstChangeNotification(PChar(FPath),True,FILE_NOTIFY_CHANGE_LAST_WRITE);
HandleChange_Change_Security:=FindFirstChangeNotification(PChar(FPath),True,FILE_NOTIFY_CHANGE_SECURITY);
Win32Check(HandleChange_Change_File_Name<>INVALID_HANDLE_VALUE);
Win32Check(HandleChange_Change_Dir_Name<>INVALID_HANDLE_VALUE);
Win32Check(HandleChange_Change_Attributes<>INVALID_HANDLE_VALUE);
Win32Check(HandleChange_Change_Size<>INVALID_HANDLE_VALUE);
Win32Check(HandleChange_Change_Last_Write<>INVALID_HANDLE_VALUE);
Win32Check(HandleChange_Change_Security<>INVALID_HANDLE_VALUE);
Synchronize(ThreadStart);
try
while not Terminated do
begin
case WaitForSingleObject(HandleChange_Change_File_Name,1000) of
WAIT_FAILED:Terminate;
WAIT_OBJECT_0:Synchronize(UpdateLog_Change_File_Name);
end;
case WaitForSingleObject(HandleChange_Change_Dir_Name,1000) of
WAIT_FAILED:Terminate;
WAIT_OBJECT_0:Synchronize(UpdateLog_Change_Dir_Name)
end;
case WaitForSingleObject(HandleChange_Change_Attributes,1000) of
WAIT_FAILED:Terminate;
WAIT_OBJECT_0:Synchronize(UpdateLog_Change_Attributes)
end;
case WaitForSingleObject(HandleChange_Change_Size,1000) of
WAIT_FAILED:Terminate;
WAIT_OBJECT_0:Synchronize(UpdateLog_Change_Size)
end;
case WaitForSingleObject(HandleChange_Change_Last_Write,1000) of
WAIT_FAILED:Terminate;
WAIT_OBJECT_0:Synchronize(UpdateLog_Change_Last_Write)
end;
case WaitForSingleObject(HandleChange_Change_Security,1000) of
WAIT_FAILED:Terminate;
WAIT_OBJECT_0:Synchronize(UpdateLog_Change_Security)
end;
FindNextChangeNotification(HandleChange_Change_File_Name);
FindNextChangeNotification(HandleChange_Change_Dir_Name);
FindNextChangeNotification(HandleChange_Change_Attributes);
FindNextChangeNotification(HandleChange_Change_Size);
FindNextChangeNotification(HandleChange_Change_Last_Write);
FindNextChangeNotification(HandleChange_Change_Security)
end;
finally FindCloseChangeNotification(HandleChange_Change_File_Name);
FindCloseChangeNotification(HandleChange_Change_Dir_Name);
FindCloseChangeNotification(HandleChange_Change_Attributes);
FindCloseChangeNotification(HandleChange_Change_Size);
FindCloseChangeNotification(HandleChange_Change_Last_Write);
FindCloseChangeNotification(HandleChange_Change_Security)
end;
Synchronize(ThreadStop);
end;
end.
← →
Shadow (2002-11-24 17:41) [3]А теперь еще раз, и по-русски
← →
nika_ufc (2002-11-24 17:52) [4]>Shadow ©
Я на работе, очень спешу и пожалуйста ответитье меня без насмешок, не било времени писать по-русски
← →
Anatoly Podgoretsky (2002-11-24 17:56) [5]Подумай может у тебя еще какие модули остались, которые ты привел.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c