MyRxFolderMonitor := TRxFolderMonitor.Create(self);
with MyRxFolderMonitor do
begin
Parent := self;
name := 'Dir'+IntToStr(id);
FolderName:= ListD.ReadString('ListDir','Dir'+IntToStr(id),'');
filter:=[fnFileName,fnDirName,fnAttributes,fnSize,fnLastWrite];
active:=true;
OnChange:=RxFolderMonitorChange;
//Вот тот самый обработчик событий
procedure TForm1.RxFolderMonitorChange(Sender: TObject);
begin
inc(i);
end;
Вопрос следующий - почему-то в некоторых случаях обработчик вызывается несколько раз подряд (например создается новый файл в директории, вызывается обработчик аж 3 раза)??? ПОМОГИТЕ.....
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
19-03-2007 03:10 | Сообщение от автора вопроса
Тогда другой вопрос. Вот я начал мониторин дирректории потом еще одной и т д (например 20 дирректорий ), как мне потом остановить мониторинг в ненужной более дирректории (из ранее запущенных)??? Код моей программы - № 50262
»вопрос КС №33799« - опирайся на него, используй для нескольких директорий WaitForMultipleObjects, по коду, возвращаемому функцией, разберешься какая именно директория была изменена. Лично по мне все эти компоненты - глупость несусветная, также как и компоненты для обращения с COM портом - во всех компонентах есть глюки, а проще написать на чистом API, тогда хотя бы есть возможность разобраться в причинах "странного" поведения программы и исправить его.
type
TForm1 = class(TForm)
Label1: TLabel;
procedure RxFolderMonitorChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.RxFolderMonitorChange(Sender: TObject);
begin
label1.Caption:=label1.Caption+' 1 ';
end;
procedure TForm1.FormCreate(Sender: TObject);
var
MyRxFolderMonitor:TRxFolderMonitor;
begin
MyRxFolderMonitor := TRxFolderMonitor.Create(self);
with MyRxFolderMonitor do
begin
Parent := self;
name := 'Dir';
FolderName:= 'D:\pr';
filter:=[fnFileName, fnDirName,fnAttributes,fnSize,fnLastWrite];
active:=true;
OnChange:=RxFolderMonitorChange;
end;
end;
end.
причем разбивал так >
создавал несколько компанентов
MyRxFolderMonitor := TRxFolderMonitor.Create(self);
with MyRxFolderMonitor do
begin
Parent := self;
name := 'Dir'+IntToStr(id);
FolderName:= ListD.ReadString('ListDir','Dir'+IntToStr(id),'');
filter:=[fnFileName];
active:=true;
OnChange:=RxFolderMonitorChange_1;
MyRxFolderMonitor := TRxFolderMonitor.Create(self);
with MyRxFolderMonitor do
begin
Parent := self;
name := 'Dir'+IntToStr(id);
FolderName:= ListD.ReadString('ListDir','Dir'+IntToStr(id),'');
filter:=[fnDirName];
active:=true;
OnChange:=RxFolderMonitorChange_2;
итд и каждый из компанентов (в зависимости от событий) начинают вызывать обработчики (каждый свой), а должен один компанент при срабатывании события в зависимости от фильтра
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.