Thema: FreePascal TTimer will nicht wie er soll

Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#1

TTimer will nicht wie er soll

  Alt 18. Sep 2019, 09:37
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;
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (18. Sep 2019 um 10:17 Uhr)
  Mit Zitat antworten Zitat