Ich bin ja noch dabei mein Programm in Lazarus umzusetzen von Delphi.
Dabei habe ich aktuell folgenbdes Phänomen:
Es wird ein Watcher gestartet, welcher einen Ordner überwacht und dann OnNotify auslöst. -> funktioniert
Dieser prüft ob es eine logfile ist und führt Aktionen aus.
Die letzte der Aktionen ist es einen TTimer zu starten (Timer3), er erhält auch wirklich den Status True (Timer.enabled ist nach dem setzen beim auslesen -1) aber der Timer läuft nicht los.
Jemand eine Idee?
Delphi-Quellcode:
procedure TTools.OnNotify(const FilePath: WideString; const Action: TDirectoryEventType);
var
start, i : integer;
FileName : WideString;
begin
FileName := '';
start := 1;
for i := length(FilePath) downto 1 do
begin
if FilePath[i] = '\' then
begin
start := i + 1;
break;
end;
end;
for i := start to length(FilePath) do
begin
FileName := FileName + FilePath[i];
end;
if (Split(String(FileName), '2', 0) = 'Log') or
(Split(String(FileName), '2', 0) = 'log') then
begin
case Action of
detAdded: begin
Instant.Enabled := True;
Run.Enabled := False;
LogL.Caption := String(Filename + ' gefunden.');
LogL.Left := 72;
LogA.Caption := 'Logdatei prüfen...';
LogA.Show;
sFileAction := 'Edited';
LogDatei := Filename;
LogName := FilePath;
LogA.Caption := DateTimeToStr(ReportFileTimes(LogName));
LogA.Left := 72;
FileChange := ReportFileTimes(LogName);
olddate := FileChange;
//showmessage(BoolToStr(Timer3.Enabled)); //Nur temporär zum Prüfen welchen Wert der Timer vorher hat -> False (0)
Timer3.Enabled := True;
//showmessage(BoolToStr(Timer3.Enabled)); //Nur temporär zum Prüfen ob True gesetzt wird -> ja (-1)
end;
detRemoved: ;
detModified: ;
end;
end;
end;
//Timer für Dateidatumsänderung
procedure TTools.Timer3Timer(Sender: TObject);
function GetProcessHandleFromID(ID: DWORD): THandle;
begin
result := OpenProcess(SYNCHRONIZE, False, ID);
CloseHandle(result);
end;
begin
//showmessage('Timer3'); //Testweise eingefügt, erscheint nicht.
if fileexists(String(LogName)) then
begin
newdate := ReportFileTimes(WideString(LogName));
if newdate <> olddate then
begin
olddate := newdate;
Timer3.Enabled := True;
end else
begin
if AppPID <> 0 then
begin
if GetProcessHandleFromID(AppPID) = 0 then
begin
Timer3.Enabled := False;
Progress.Visible := False;
if FertigC.Checked then
begin
FertigClick(Sender);
end else
begin
Fertig.Enabled := True;
end;
Run.Enabled := False;
Programs.Enabled := True;
Data.Enabled := True;
TxTLogs.Enabled := True;
Escape.Enabled := False;
LogA.Caption := 'Programm fertig.';
Timer3.Enabled := False;
AppPID := 0;
end;
end else
begin
showmessage('Es wurde kein Programm gefunden!');
Timer3.Enabled := False;
Progress.Visible := False;
if FertigC.Checked then
begin
FertigClick(Sender);
end else
begin
Fertig.Enabled := True;
end;
Run.Enabled := False;
Programs.Enabled := True;
Data.Enabled := True;
TxTLogs.Enabled := True;
Escape.Enabled := False;
LogA.Caption := 'Programm nicht gefunden!';
Timer3.Enabled := False;
end;
end;
end;
end;