| Autor |
Beitrag |
bf109g.01
      
Beiträge: 84
|
Verfasst: Fr 22.04.11 20:17
Hallo,
ich möchte ein Programm basteln, welches u.a. einen Countdown beinhaltet.
Dieser soll aber unabhängig sein, von der Zeit, die ich am Laptop verbringe, d.h. wenn ich den PC abschalte und am nächsten Tag wieder dran gehe, dann soll die Zeit auch minus 9 Stunden oder was auch immer betragen.
Dazu habe ich mir gedacht, wäre es u.a. gut, wenn ich die aktuelle Systemzeit beim Schließen abspeichere, damit ich zB beim nächsten Start abfragen lassen kann, ob zB jemand die Systemzeit zurückgesetzt hat, denn das würde ja sonst den Countdown durcheinander bringen.
Wie/wo kann ich also dieses einfügen: Wenn schließen, dann Zeit in Datei abspeichern.
Dies muss automatisch laufen, weil ich den PC einfach herunterfahren können will und dann Windows das Programm abschaltet.
Hoffe es ist so einigermaßen klar geworden, was mir da vorschwebt.
LG
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Fr 22.04.11 20:21
Du merkst Dir die Zeit zu Countdownbeginn und die Countdowndauer in einer Datei, wenn Du der Systemuhr nicht traust kannst Du versuchen die Zeit per NTP zu ziehen.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
whitef
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Fr 22.04.11 20:24
speicher alle Daten bei Form1.Close in eine Ini-Datei und setz im Autostart-Ordner ne verknüpfung von deinem programm, welches bei Form1.Show die Werte wieder aus der Ini-Datei ausließt.
mfg
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 22.04.11 20:47
Benutze einfach GetTickCount, dann solltest du sogar zwischendrin die Systemzeit ändern können ohne falsche Ergebnisse zu bekommen. Außerdem brauchst du dann keine Startzeit des Tages zu speichern, weil du direkt die Laufzeit des Systems hast.
Es sei denn der PC war mehr als 7 Wochen ununterbrochen an. 
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Fr 22.04.11 20:50
@janicke: einer von uns beiden hat etwas falsch verstanden
| Zitat: |
d.h. wenn ich den PC abschalte und am nächsten Tag wieder dran gehe, dann soll die Zeit auch minus 9 Stunden oder was auch immer betragen.
|
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 22.04.11 20:55
Stimmt, ich hatte es so verstanden, dass nur die Zeit am PC gezählt werden soll, aber das ist ja nicht so. Dann reicht tatsächlich die Startzeit plus die Dauer, ja.
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 23.04.11 19:00
Ganz kler, wenn Du eine Zeitinformation am nächsten, übernächsten ... Tag wieder so abrufen willst, wie sie zuletzt vorlag, musst Du einfach die Zeit beim Schließen des Programms in einer Ini-Datei oder sonst welchen Datei speichern und beim Laden eben die gleiche Datei wieder aufrufen und die gespeicherte Zeit einladen. Am Besten speicherst Du die Datei im gleichen Ordner, wie das Programm [Befehl : ExtractFilepath(Paramstr(0))]
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 23.04.11 19:02
Tranx hat folgendes geschrieben : | | Am Besten speicherst Du die Datei im gleichen Ordner, wie das Programm [Befehl : ExtractFilepath(Paramstr(0))] |
Nicht am besten, sondern am "schnellsten ohne viel Nachdenken" und wenn es nicht gerade ein portables Programm ist am unsaubersten.
www.delphi-library.d...ewtopic.php?p=548600
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: So 24.04.11 08:49
Genau was Du in dem Topic schreibst, habe ich bei meinen Programmen umgesetzt. Sie befinden sich grundsätzlich nicht im lokalen Verzeichnis C:\Programme, sondern auf einem Serverlaufwerk, und dort kann ich ja vom Server aus Schreibrechte vergeben. Ich gebe Dir Recht, es ist sicherer, dies in der Registry zu tun. Aber da habe ich sehr schlechte Erfahrungen mit einem Virenscanner gemacht. Der hat mir regelmäßig nach Update der Virendefinitionen selbst Delphi32.exe und andere notwendige Programme in die Quarantäne geschickt, weil es ja Programme sind, welche in die Registry schreiben, sogenannte Schadprogramme. Das hat mich so genervt, dass ich den Virenscanner rausgeschmissen habe und durch Microsoft Essentials ersetzt habe. Ich habe bei ODBC die Erfahrung gemacht, dass ein Eintrag in die Registry bei einem Rechner erfolgt, beim anderen nicht. Mag sein, dass dies daran liegt, welche Rechte der jeweilige Nutzer auf seinem Rechner hat oder an meinen fehlenden Kenntnissen. Aber was soll's, es ist für mich einfacher, mit ini-Dateien zu arbeiten. Die sind einfacher zu verwalten (Einfach Editor aufmachen und editieren). Und portable Programme für mehrere Betriebssysteme schreibe ich eh nicht.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 24.04.11 11:33
Tranx hat folgendes geschrieben : | | Ich gebe Dir Recht, es ist sicherer, dies in der Registry zu tun. |
Es muss ja gar nicht die Registry sein. Ich benutze in der Regel das Anwendungsdatenverzeichnis. Das wird bei mir auch separat gesichert. Und ich ärgere mich jedesmal wieder, wenn irgendein Programm die Einstellungen woanders versteckt hat und ich die deshalb verloren habe...
Portable Programme für den USB-Stick (das meinte ich mit portabel  ) oder Spezialanwendungen wie deine auf einem Server bilden da natürlich eine Ausnahme. Da dabei die Einstellungen ja gerade nicht lokal auf dem einzelnen PC bleiben sollen, muss man da das eigene Verzeichnis nutzen. Das kann man mit meinen Programmen aber auch tun, weil diese einfach dem Nutzer überlassen wo die Einstellungen liegen sollen. 
|
|
*Eldorado
      
Beiträge: 28
win7, 64 Bit;
|
Verfasst: So 24.04.11 16:05
Back to Topic:
mit einer "procedure TForm1.FormDestroy(Sender: TObject);" solltest du eine Prozedur haben, die automatisch gestartet wird, wenn das programm beendet wird (der Todesschrei sozusagen).
Wie man die uhrzeit etc. in eine Datei speichert, kann man schnell googlen, dafür gibts endlos viele tutorials.
bf109g.01 hat folgendes geschrieben : |
Dazu habe ich mir gedacht, wäre es u.a. gut, wenn ich die aktuelle Systemzeit beim Schließen abspeichere, damit ich zB beim nächsten Start abfragen lassen kann, ob zB jemand die Systemzeit zurückgesetzt hat, denn das würde ja sonst den Countdown durcheinander bringen. |
Ich verstehe nicht ganz was du mit diesem teil sagen willst, aber wenn du ein programm zur kontrolle der Systemzeit schreiben willst, muss du wirklich über NTP arbeiten, denn es gibt keine programm die ausgeführt werden, wenn der PC aus ist (außer die systemzeit im bios).
grüße
Eldorado
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 24.04.11 16:36
OnDestroy ist nur zur Freigabe der Ressourcen gedacht. Solche Sachen gehören in OnClose oder OnCloseQuery.
|
|
bf109g.01 
      
Beiträge: 84
|
Verfasst: Di 07.06.11 16:27
jaenicke hat folgendes geschrieben : | | OnDestroy ist nur zur Freigabe der Ressourcen gedacht. Solche Sachen gehören in OnClose oder OnCloseQuery. |
Werden OnClose bzw OnCloseQuery auch ausgeführt, wenn das Programm "unsauber" beendet wird? zB über Taskmgr>Prozesse abschießen?
Ohne es zu wissen, traue ich das OnDestroy eher zu als OnClose...
Wie bitte ist das da?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 07.06.11 16:45
bf109g.01 hat folgendes geschrieben : | | zB über Taskmgr>Prozesse abschießen? |
Da wird gar nichts ausgeführt. Abgeschossen ist abgeschossen.
|
|
|