Autor Beitrag
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 202
Erhaltene Danke: 1

Windows X
Delphi XE X
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :lol:
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.04.11 19:02 
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.04.11 11:33 
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28

win7, 64 Bit;

BeitragVerfasst: 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.

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.04.11 16:36 
OnDestroy ist nur zur Freigabe der Ressourcen gedacht. Solche Sachen gehören in OnClose oder OnCloseQuery.
bf109g.01 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 07.06.11 16:27 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 07.06.11 16:45 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
zB über Taskmgr>Prozesse abschießen?
Da wird gar nichts ausgeführt. Abgeschossen ist abgeschossen.