![]() |
Probleme mit Now()
Ich hab gerade ein sehr sehr merkwürdiges Problem.
In meinem Programm wird ein Datei umbenannt nach Datum+Zeit. Nachdem ich jetzt dem fehler nachgespührt habe der vorhanden ist bin ich bei Now angekommen. Das ganze hat auch schon ganz zu Anfang funktioniert...gehe ich in eine Version die ein paar Tage älter ist funktionert es dort mit dem gleichen Code und was ich geändert habe dürfte an sich keinen einflüss darauf haben was mir Now() liefert. Now liefert mir immer die selbe Zeit zurück, selbst wenn ich das Programm beende und neu Starte, es neu Compiliere,.... Nach einigen Minuten wird dann eine neue Zeit ausgelesen und diese bleibt für X Minuten immer die selbe. Hat jemand eine Idee woran das liegen konnte?
Delphi-Quellcode:
[edit=mkinzler]Zeilenumbruch in Quelltext eingefügt Mfg, mkinzler[/edit]
procedure TForm1.SpeedButton3Click(Sender: TObject);
var DName: String; Jahr,Monat,Tag, Stunde, Minute, Sekunde, MSekunde: Word; Jetzt: TDateTime; begin Jetzt:=Now(); if OpenPictureDialog1.Execute() then begin DecodeDate(Jetzt,JAhr,Monat,Tag); DecodeTime(Jetzt,Stunde,Minute,Sekunde,MSekunde); DName:='temp\'+IntToStr(Jahr)+IntToStr(Monat)+IntToStr(Tag)+IntToStr(Stunde)+ IntToStr(Minute)+IntToStr(Sekunde)+IntToStr(MSekunde)+'.jpg'; DateiNeuPfad:=ExtractFilePath(Application.ExeName)+DName; Copyfile(PCHAR(OpenPictureDialog1.FileName), PCHAR(DateiNeuPfad), false); end; end; |
Re: Probleme mit Now()
Was sagt deine Windows-Zeitangabe? Now verwendet die WinAPI-Funktion GetLocalTime. Es müsste also in Windows was "kaputt" sein.
Außer du hast irgendwo eine eigene Now-Funktion definiert die verwendet wird. |
Re: Probleme mit Now()
Außerdem kann man die Namensvergabe noch kürzen.
Delphi-Quellcode:
DName := Format('%s%s%s',['temp\',FormatDateTime('yyyymmddhhnnsszzz',Now),'.jpg']);
|
Re: Probleme mit Now()
Eine andere Now Funktion gibt es nicht wie evtl. Probleme verursachen könnte.
Das Windows ein Problem hat glaube ich auch nicht da die 2 Tage alte Version noch funktioniert und seit dem habe ich nur die Zeichenfunktionen von Paintbox.canvas auf Andorra 2D umgestellt. Es bleibt weiterhin Rätselhaft warum es nicht funktioniert. Hab jetzt noch mal einen Random Wert in den Dateinamen mit reingepackt der umschifft das Problem etwas, aber es bleibt trotzdem eine Fehlerquelle die ich gerne ausmerzen möchte. Die Format Funktion war mir noch nicht bekannt damit sieht es doch gleich ordenlticher aus. Danke. |
Re: Probleme mit Now()
Mit welcher Delphiversion arbeitest du denn?
Bin zwar kein Experte, aber ich kann dir sagen, dass zb Delphi 6 öfters zu unerklärlichem Verhalten neigt. Im Zweifelsfall hat ein Reboot bei mir bis jetzt immer geholfen... |
Re: Probleme mit Now()
Häng mal FastMM und andere Checktools rein. Ich denke das deine Umstellungsarbeit einige wild gewordene Zeiger hinterlassen hat.
|
Re: Probleme mit Now()
Zitat:
Du musst dir also erst einmal selbst beweisen, dass du mit der Aussage "Eine andere Now Funktion gibt es nicht" Recht hast. Zwei Möglichkeiten: 1.) Bei gedrückter Strg-Taste im Sourcecode auf das Wort Now klicken. Nun müsste sich die Unit SysUtils öffnen und zur Deklaration der Funktion springen. Das klappt nur ab Delphi Prof. und höher; also wenn der VCL Sourcecode vorhanden ist 2.) angeben, dass die Unit SysUtils verwendet werden soll:
Delphi-Quellcode:
Du kannst dich darauf verlassen, dass SysUtils.Now fehlerfrei funktioniert.
var Jetzt: TDateTime;
begin Jetzt:=SysUtils.Now(); Im nächsten Schritt beweisst du dir selbst, dass sich die Uhrzeit ändert:
Delphi-Quellcode:
Du wirst sehen, dass die Uhrzeit richtig ist.
var Jetzt: TDateTime;
begin Jetzt:=SysUtils.Now(); ShowMessage(DateTimeToStr(Jetzt)); Dann nimmst du die Verbesserung aus Beitrag #3 und lässt dir den Dateinamen vorher anzeigen:
Delphi-Quellcode:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var DName: String; Jetzt: TDateTime; begin if OpenPictureDialog1.Execute() then begin Jetzt:=SysUtils.Now(); DName := Format('%s%s%s',['temp\',FormatDateTime('yyyymmddhhnnsszzz', Jetzt),'.jpg']); DateiNeuPfad:=ExtractFilePath(Application.ExeName)+DName; ShowMessage(DateiNeuPfad); // <====== zum Testen anzeigen Copyfile(PCHAR(OpenPictureDialog1.FileName), PCHAR(DateiNeuPfad), false); end; end; |
Re: Probleme mit Now()
Und auf die Variable Jetzt kann man ganz verzichten.
Delphi-Quellcode:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var DName: String; begin if OpenPictureDialog1.Execute() then begin DName := Format('%s%s%s',['temp\',FormatDateTime('yyyymmddhhnnsszzz', SysUtils.Now),'.jpg']); DateiNeuPfad:=ExtractFilePath(Application.ExeName)+DName; ShowMessage(DateiNeuPfad); // <====== zum Testen anzeigen Copyfile(PCHAR(OpenPictureDialog1.FileName), PCHAR(DateiNeuPfad), false); end; end; |
Re: Probleme mit Now()
Klopft mal einer auf'n Server bei mir spinnt die Seite :mrgreen:
MfG Mikescher |
Re: Probleme mit Now()
Schau dir mal die "SimpleText" Demo von Andorra an. Dort hatte ich (glaube ich) genau das gleiche Problem. Ich glaube, dass Now nicht Funktioniert hat, sondern nur Date und Time (Now = Date + Time) und das eventuell nicht in OnIdle, sondern nur in einem Timer-Event.
|
Re: Probleme mit Now()
Das die Richtige Funktion genutzt wird hatte ich schon über die auch hier vorgeschlagenen Wege überprüft.
Zitat:
Diese Varianten Funktionieren nicht
Delphi-Quellcode:
Nehme ich aber den Code
DName := Format('%s%s%s',['temp\',FormatDateTime('yyyymmddhhnnsszzz',Date()+Time()),'.jpg']);
DName := Format('%s%s%s',['temp\',FormatDateTime('yyyymmddhhnnsszzz',Now()),'.jpg']); DName := Format('%s%s%s%s',['temp\',FormatDateTime('yyyymmdd',Date()),FormatDateTime('hhnnsszzz',Time()),'.jpg']);
Delphi-Quellcode:
Funktioniert es.
DecodeDate(Date(),JAhr,Monat,Tag);
DName := Format('%s%s%s%s',['temp\',IntToStr(Jahr)+IntToStr(Monat)+IntToStr(Tag),FormatDateTime('hhnnsszzz',Time),'.jpg']); Ich verstehe zwar nicht wie und was dazwischen Funkt aber immerhin Funktioniert es so jetzt wie gewollt. Habe im übrigen Andorra nicht über OnIdle laufen sondern das ganze steht bei mir in einer Draw Funktion die bei Bedarf aufgerufen wird. |
AW: Probleme mit Now()
Liste der Anhänge anzeigen (Anzahl: 1)
Der Thread ist zwar fast zwei Jahre alt, aber mir hat er bei der Fehlersuche geholfen, deswegen wollte ich mich schnell bei Sphinx2k bedanken und außerdem bestätigen, dass es ein Problem des Andorra2D Frameworks ist, auch in der aktuellen Releaseversion. Wer das überprüfen möchte, kann einfach mal in der Simple3D-Demo die Main.pas (angehängt) ersetzen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
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