Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Timer funktionieren nicht (https://www.delphipraxis.net/198233-timer-funktionieren-nicht.html)

Ykcim 16. Okt 2018 15:24

Timer funktionieren nicht
 
Hallo Zusammen,

ich habe einen Fehler, dem ich nicht auf die Spur komme. Aus irgendeinem Grund funktioniert die TTimer-Komponenten nicht mehr. Ich habe auf einem Form die Komponente abgelegt und lasse jede Sekunde die Zeit in einem Caption anzeigen. Das funktionierte sehr gut, aber in der aktuelle Version nicht mehr...
Auch andere TTimer klappen nicht, auch wenn ich einen neuen auf das Form ziehe. Es ist so, als wären die Disabled.

Wenn ich ein neues Projekt aufmache, und dort dasselbe ausprobiere klappt es.

Hat schon jemand so ein Verhalten gehabt und vielleicht eine Idee, in welcher Ecke ich gucken muss? Ich habe im Programm nicht gefunden...

Vielen Dank
Patrick

DeddyH 16. Okt 2018 16:10

AW: Timer funktionieren nicht
 
Hast Du im OnTimer-Handler einen Haltepunkt gesetzt? Wird der angesprungen? Oder hat Dein Programm vielleicht so viel zu tun, dass die Timer-Message ggf. gar nicht durchkommt? Oder hast Du vielleicht irgendeine vergessene Routine, die alle TTimer-Instanzen disabled? Fragen über Fragen.

Ykcim 16. Okt 2018 16:24

AW: Timer funktionieren nicht
 
Hi,
ich habe den Haltepunkt gesetzt, aber er wird gar nicht angesprungen. Eine Procedure, die alle Timer disabled macht keinen Sinn und habe ich auch leider nicht gefunden... Ob das Programm zuviel zu tun hat weiß ich nicht, würde mich aber wundern...

Ich habe gerade bemerkt, dass ein Timer doch funktioniert. Gucke mal, ob mich das weiterbringt und melde mich wieder.

Patrick

Ykcim 16. Okt 2018 16:39

AW: Timer funktionieren nicht
 
Das Programm besteht aus "zwei" Fenstern. Darstellen tue ich die mit einem PageControl mit zwei TabSheets. Interessanter Weise entsteht das Problem nur auf einer der beiden Seiten. Wenn ich auf der anderen bin, wird die Zeit in der Statusleiste angezeigt, aktiviere ich das andere, bleibt die Zeit in der gleichen Statuszeile stehen. Die Zeit wäre nicht so ein Problem, aber es gibt noch einen anderen Timer, der dann auch leider stehen bleibt...

DieDolly 16. Okt 2018 16:46

AW: Timer funktionieren nicht
 
Ich glaube ohne Code kann man da nicht helfen. Ich glaube auch, dass das zu 100% irgendein ein selbst verursachter Fehler ist den du jetzt nur leider nicht auf die Schnelle siehst.

KodeZwerg 16. Okt 2018 16:51

AW: Timer funktionieren nicht
 
Hello, du könntest spassenshalber mal versuchen auf einer seite die nicht funktioniert einen externen timer einzupflegen um zu sehen ob der eigentliche timer durch irgendwas geblockt wird.
Ein Manual wie man einen externen timer einbaut findest du hier: hier

Falls Link down geht, hier nochmal:
Delphi-Quellcode:
{
  The timeSetEvent function starts a specified timer event.
  The multimedia timer runs in its own thread. After the event is activated,
  it calls the specified callback function or sets or pulses the spe
  cified event object.

  MMRESULT timeSetEvent(
  UINT          uDelay,
  UINT          uResolution,
  LPTIMECALLBACK lpTimeProc,
  DWORD_PTR     dwUser,
  UINT          fuEvent
  );

  uDelay:
   Event delay, in milliseconds

  uResolution:
   Resolution of the timer event, in milliseconds.
   A resolution of 0 indicates periodic events should occur with the
   greatest possible accuracy.
   You should use the use the maximum value appropriate to reduce system overhead.

  fuEvent:
   TIME_ONESHOT Event occurs once, after uDelay milliseconds.
   TIME_PERIODIC Event occurs every uDelay milliseconds.
}


uses
  MMSystem;

var
  mmResult: Integer;


// callback function
procedure TimeCallBack(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD); pascal;
begin
  // Do something here. This procedure will be executed each 10 ms
  Form1.Label1.Caption := Form1.Label1.Caption + '%';
end;

// Set a new timer with a delay of 10 ms
procedure TForm1.Button1Click(Sender: TObject);
begin
  mmResult := TimeSetEvent(10, 0, @TimeCallBack, 0, TIME_PERIODIC);
end;


// Cancel the timer event.
procedure TForm1.FormDestroy(Sender: TObject);
begin
  TimeKillEvent(mmResult);
end;
Mehr über andere timer kannst du hier erfahren.

Wenn Du uns an deinem code teilhaben lässt könnte man bestimmt besser helfen.

Ykcim 16. Okt 2018 17:08

AW: Timer funktionieren nicht
 
Ich hätte Euch ja gerne an dem Code teilhaben lassen, nur was sollte ich Euch schicken? Mein ganzes Programm? Ich habe gerade einfach auf gut Glück die Create-Anweisung deaktiviert und siehe da, der Fehler taucht nicht mehr auf... Ich dachte schon, ich könnte eine Erfolgsmeldung ausgeben und habe überprüft, an welcher Stelle das Problem entsteht. Es ist in einer Unterprocedure einer Unterprocedure...

Aber leider für mich nit nachvollziehbar...

Delphi-Quellcode:
procedure TForm_Pinnwand.Load_All;
var  MyPath: string;
begin
   MyPath:=DatenPfad+GetComputerName+'\'+'O1.pdf';
   Load_PDF(PdfView_O1, MyPath); //Hier entsteht der Fehler, aber nur bei der ersten Datei? Nehme ich die Zeile raus, läuft es...
   MyPath:=DatenPfad+GetComputerName+'\'+'O2.pdf';
   Load_PDF(PdfView_O2, MyPath);
   MyPath:=DatenPfad+GetComputerName+'\'+'O3.pdf';
   Load_PDF(PdfView_O3, MyPath);
   MyPath:=DatenPfad+GetComputerName+'\'+'O4.pdf';
   Load_PDF(PdfView_O4, MyPath);
   MyPath:=DatenPfad+GetComputerName+'\'+'U1.pdf';
   Load_PDF(PdfView_U1, MyPath);
   MyPath:=DatenPfad+GetComputerName+'\'+'U2.pdf';
   Load_PDF(PdfView_U2, MyPath);
   MyPath:=DatenPfad+GetComputerName+'\'+'U3.pdf';
   Load_PDF(PdfView_U3, MyPath);
   MyPath:=DatenPfad+GetComputerName+'\'+'U4.pdf';
   Load_PDF(PdfView_U4, MyPath);
   Form_Orga;
end;
Hier werden bis zu 8 pdf-Dokumente geladen... Geladen werden alle, auch das erste, aber wenn das erste geladen wird, dann gehen alle Timer aus...
Das ist die Lade-Procedure:
Delphi-Quellcode:
procedure TForm_Pinnwand.Load_PDF(PDF_Viewer: TPDFView; Datei: string);
begin
   if FileExists(Datei) then begin
      PDF_Viewer.Pdf.Active:=false;
      PDF_Viewer.Pdf.FileName:=Datei;
      PDF_Viewer.PDF.Active:=true;
      PDF_Viewer.Active:=true;
   end
   else begin
      PDF_Viewer.Pdf.Active:=false;
      PDF_Viewer.Pdf.FileName:='';
      PDF_Viewer.Pdf.Active:=false;
      PDF_Viewer.Pdf.FileName:='';
      PDF_Viewer.Active:= false;
      PDF_Viewer.Repaint;
   end;
end;
Finde ich nicht logisch...

DieDolly 16. Okt 2018 17:19

AW: Timer funktionieren nicht
 
Bist du sicher, dass der Timer aus geht (Enabled False) und nicht einfach nur hängen bleibt? Das sind zwei sehr große Unterschiede.

Ykcim 16. Okt 2018 17:20

AW: Timer funktionieren nicht
 
Stimmt, der Timer bleibt enabled, aber funktioniert nicht...

Übrigens, wenn die Datei nicht gefunden wird, weil sie nicht da, dann tritt der Fehler auch nicht auf. Also spielt er sich irgendwie hier ab
Delphi-Quellcode:
procedure TForm_Pinnwand.Load_PDF(PDF_Viewer: TPDFView; Datei: string);
begin
   if FileExists(Datei) then begin
      PDF_Viewer.Pdf.Active:=false;
      PDF_Viewer.Pdf.FileName:=Datei;
      PDF_Viewer.PDF.Active:=true;
      PDF_Viewer.Active:=true;
   end

KodeZwerg 16. Okt 2018 17:26

AW: Timer funktionieren nicht
 
ich vermute stark das dein PDFdingens ein eigener thread ist, der timer hingegen im hauptthread liegt.

teste doch mal den externen multi media timer, was passiert? (der läuft im eigenen thread und sollte IMMER funzen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz