![]() |
wie auf bestimmte zeit reagieren??
hey there,
hey, ich würde gerne wissen wie ich nonvcl und ohne die datetime units von windows auf ein bestimmtes datum/zeit reagieren kann?? ist das möglich wenn ja wie?? :roll: |
Re: wie auf bestimmte zeit reagieren??
Vielleicht mit nem Timer?
Aber woher diese Einschrenkungen? Und wie würdest du es denn mit VCL machen? |
Re: wie auf bestimmte zeit reagieren??
nee das ist es ja wollte die anwendung so klein wie möglich halten und deswegen möglichst keine extra units ausser windows, messages und sysutils!!!
ja den timer hab ich schon, ich brauch jetzt ne abfrage wie ich über tsystemtime ne abfrage machen kann ob eine bestimmte zeit erreicht ist (datum und zeit)!! bloß wie?? |
Re: wie auf bestimmte zeit reagieren??
Wie meinst du jetzt?
GetSystemTime? |
Re: wie auf bestimmte zeit reagieren??
Zitat:
bisher hab ich alles auf die funktion systemtime abgestimmt.. edit: kann ich nicht irgendwie vllt ein text (string/pchar) in tsystemtime verwandeln, und dann die systemtime mit meiner mit zb grösser als zeichen kontrollieren?? |
Re: wie auf bestimmte zeit reagieren??
Na du musst dir mit copy und pos den String auseinanderbasteln.
|
Re: wie auf bestimmte zeit reagieren??
Zitat:
|
Re: wie auf bestimmte zeit reagieren??
string->integer : "val"
|
Re: wie auf bestimmte zeit reagieren??
weiß denn wirklich niemand wie ich die zeit vergleichen kann, und sehen kann ob ein ereignis schon passiert ist oder nicht?? das muss doch irgendwie möglich sein mit der tsystemtime und tsystemdate!!! sonnst hätte man die funktionen ja nicht mit in die win api packen brauchen :zwinker: :zwinker:
aber ich komm irgendwie nicht weiter bei so einer "man sollte glauben" sehr banalen geschichte... |
Re: wie auf bestimmte zeit reagieren??
Zitat:
|
Re: wie auf bestimmte zeit reagieren??
Zitat:
naja mit sysutils hab ich noch nicht so die probleme liege damit bei ner datei grösse von rund 50 kb, das ist noch vertretbar... |
Re: wie auf bestimmte zeit reagieren??
suchen nach nichts. Wenn du zum Beispiel bei einer VCL-Anwendung GetTime aufrufst brauchst du einfach nur die Implementation der Funktion GetTime anschauen. Die VCL ist schließlich auch nur eine Kapselung rund um die verfügbaren Funktionen von Windows.
|
Re: wie auf bestimmte zeit reagieren??
aso das meinst, jaja so schlau währe ich auch gewesen, aber was ist denn die kapselung von einem zeitvergleich??? dann würd ich mir das dort auch mal raus suchen... und naja den rest mit gettime und so das hab ich alles schon erledigt (ganz untätig war ich ja nicht) ;-)
|
Re: wie auf bestimmte zeit reagieren??
Aus GetSystemtime bekommst du doch einen record mit Stunde, minute, sekunde,....
Und in deinem Edit steht (so nehme ich an) "12:30". Also bastelst du mit pos und copy die Zeit auseinander in 12, 30 und 0 und vergleichst die Werte mit denen des Records. Oder du rechnest dir eine Zahl aus, welche die Uhrzeit repräsentiert und vergleichst die. |
Re: wie auf bestimmte zeit reagieren??
wie genau stell ich denn sonn vergleich an?? zuerst die stunden miteinander vergleichen und dann die min und dann die sek??
|
Re: wie auf bestimmte zeit reagieren??
ok ich hab es jetzt erst mal geschafft die unit sysutils zu entfernen und alles läuft super.. das hat mir wieder 25kb ersparrt^^
aber in sachen zeitstring zerlegen und kontrollieren ob die zeit schon ist bin ich immer noch nicht weiter.. es muss doch jemanden geben der mit tsystemzeit ein wenig erfahrung hat und mir vllt auch nen kleinen code geben??!! |
Re: wie auf bestimmte zeit reagieren??
Wenn du GetSystemTime benutzt hast, dann hast du ja jetzt einen Record, wo die Daten drin stehen, wenn du jetzt damit Addieren/Subtrahieren möchtest, dann musst du wie in der Hilfe vorgegeben vorgehen....
SYSTEMTIME ist der Record den GetSystemTime liefert Zitat:
Edit (Das ganze mal auf "Deutsch"): 1. GetSystemTime benutzen 2. den Record hier heraus in SystemTimeToFileTime als Parameter übergeben 3. mit memcpy den Record aus SystemTimeToFileTime auf einen int64 kopieren -> jetzt hast du einen int64 mit dem du rechnen kannst ;) |
Re: wie auf bestimmte zeit reagieren??
Delphi-Quellcode:
var jetzt, vergleich: TSystemTime;
begin with vergleich do begin wYear := 2008; wMonth := 1; wDay := 24; wHour := 14; wMinute := 43; wSecond := 15; end; GetSystemTime(jetzt); if (jetzt.wYear >= vergleich.wYear) and (jetzt.wMonth >= vergleich.wMonth) and (jetzt.wDay >= vergleich.wDay) and (jetzt.wHour >= vergleich.wHour) and (jetzt.wMinute >= vergleich.wMinute) and (jetzt.wSecond >= vergleich.wSecond) then ShowMessage('Zeitüberschreitung') else ShowMessage('Hat noch Zeit'); end; |
Re: wie auf bestimmte zeit reagieren??
hey danke, ich denke das wird mir erstmal weiter helfen...
|
Re: wie auf bestimmte zeit reagieren??
mmhhh jetzt steh ich vor noch nem problem, wie kann ich jetzt aus tsystemzeit herrausbekommen, welcher wochentag an dem und dem tag ist?? bzw währe im kalender??
|
Re: wie auf bestimmte zeit reagieren??
wDayOfWeek ist ein Feld des Records ;)
|
Re: wie auf bestimmte zeit reagieren??
ok das klappt alles bestens, jetzt aber noch nen kleines problem, wenn ich nun den wochentag von morgen, übermorgen, sonstwann haben will wie mach ich das in dem fall??
|
Re: wie auf bestimmte zeit reagieren??
Für diese Lösung brauchst Du aber wieder SysUtils (ich war zu faul zum Rechnen :mrgreen: ):
Delphi-Quellcode:
[edit] Viel zu kompliziert gedacht :mrgreen:
var SysTime: TSystemTime;
dtTime: TDateTime; Tag: string; begin GetSystemTime(SysTime); dtTime := SystemTimeToDateTime(SysTime); dtTime := dtTime + 1; DateTimeToSystemTime(dtTime,SysTime); case SysTime.wDayOfWeek of 0: Tag := 'Sonntag'; 1: Tag := 'Montag'; 2: Tag := 'Dienstag'; 3: Tag := 'Mittwoch'; 4: Tag := 'Donnerstag'; 5: Tag := 'Freitag'; 6: Tag := 'Samstag'; end; ShowMessage('Morgen ist ' + Tag); end;
Delphi-Quellcode:
[/edit]
function WhichDayOfWeek(st: TSystemTime; const DaysToAdd: Integer): string;
begin st.wDayOfWeek := (st.wDayOfWeek + DaysToAdd) mod 7; case st.wDayOfWeek of 0: Result := 'Sonntag'; 1: Result := 'Montag'; 2: Result := 'Dienstag'; 3: Result := 'Mittwoch'; 4: Result := 'Donnerstag'; 5: Result := 'Freitag'; 6: Result := 'Samstag'; end; end; procedure TForm1.FormCreate(Sender: TObject); var SysTime: TSystemTime; begin GetSystemTime(SysTime); ShowMessage(Format('Morgen ist %s',[WhichDayOfWeek(SysTime,1)])); end; |
Re: wie auf bestimmte zeit reagieren??
naja so falsch gedacht war das nicht, denn wie im anderen post geschrieben funktioniert das leider nicht mit den aufaddieren der tagen, das macht er nicht... wenn ich die funktion dann auf dem 31 benutzen würde, hätte er den 38.01.2008 in seiner list ;-( und den gibs nicht ;-)
|
Re: wie auf bestimmte zeit reagieren??
das vergleichen der systemtime hab ich jetzt gelöst, auf einem ähnlichen weg wie es schon "Tyrael Y." vorgeschlagen hat! in der api konnte ich allerdings noch ein paar funktionen für einen leichteren schnelleren weg finden...
Delphi-Quellcode:
die ausgabe ist dann:
function IsTimeRunningOut(TimeToCompare: TSystemTime): Boolean;
var Now, TempTime: TFileTime; begin; GetSystemTimeAsFileTime(Now); SystemTimeToFileTime(TimeToCompare, TempTime); case CompareFileTime(Now, TempTime) of -1: result := False; 0: result := True; 1: result := True; end; end; false wenn die zeit "TimeToCompare" noch nciht erreicht ist true wenn die zeit erreicht oder überschritten wurde vllt hilft es ja noch jemand ;-) edit noch mal überarbeitet und eine boolean variable draus gemacht.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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-2025 by Thomas Breitkreuz