Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   wie auf bestimmte zeit reagieren?? (https://www.delphipraxis.net/107114-wie-auf-bestimmte-zeit-reagieren.html)

lbccaleb 22. Jan 2008 18:00


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:

sirius 22. Jan 2008 18:06

Re: wie auf bestimmte zeit reagieren??
 
Vielleicht mit nem Timer?

Aber woher diese Einschrenkungen? Und wie würdest du es denn mit VCL machen?

lbccaleb 22. Jan 2008 18:40

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??

sirius 22. Jan 2008 18:46

Re: wie auf bestimmte zeit reagieren??
 
Wie meinst du jetzt?
GetSystemTime?

lbccaleb 22. Jan 2008 19:36

Re: wie auf bestimmte zeit reagieren??
 
Zitat:

Zitat von sirius
Wie meinst du jetzt?
GetSystemTime?

ja genau, wie kann ich eine zeit eingeben (nur edit steht mir zurverfügung wegen nonvcl) und damit die aktuelle systemzeit vergleich, ob quasi der mom schon abgelaufen ist oder nicht...

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??

sirius 22. Jan 2008 22:34

Re: wie auf bestimmte zeit reagieren??
 
Na du musst dir mit copy und pos den String auseinanderbasteln.

lbccaleb 23. Jan 2008 06:04

Re: wie auf bestimmte zeit reagieren??
 
Zitat:

Zitat von sirius
Na du musst dir mit copy und pos den String auseinanderbasteln.

ok das hab ich schon wie wandel ich jetzt pchar in integer um??

sirius 23. Jan 2008 07:31

Re: wie auf bestimmte zeit reagieren??
 
string->integer : "val"

lbccaleb 23. Jan 2008 15:11

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

SirThornberry 23. Jan 2008 15:16

Re: wie auf bestimmte zeit reagieren??
 
Zitat:

Zitat von lbccaleb
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!!!

Wenn die Anwendung klein bleiben soll ist sysutils fehl am platz. Ansonsten ist es das einfachste du schaust einfach in die Quelltext deiner Enterprice-Version :-) Das ist schließlich der Vorteil von dieser das du schauen kannst wie es in der vcl umgesetzt wurde.

lbccaleb 23. Jan 2008 15:18

Re: wie auf bestimmte zeit reagieren??
 
Zitat:

Zitat von SirThornberry
Zitat:

Zitat von lbccaleb
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!!!

Wenn die Anwendung klein bleiben soll ist sysutils fehl am platz. Ansonsten ist es das einfachste du schaust einfach in die Quelltext deiner Enterprice-Version :-) Das ist schließlich der Vorteil von dieser das du schauen kannst wie es in der vcl umgesetzt wurde.

und wonach soll ich dort suchen?? und vor allem nach was??

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

SirThornberry 23. Jan 2008 15:24

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.

lbccaleb 23. Jan 2008 15:39

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) ;-)

sirius 23. Jan 2008 16:11

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.

lbccaleb 23. Jan 2008 16:24

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??

lbccaleb 24. Jan 2008 14:31

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??!!

Tyrael Y. 24. Jan 2008 14:41

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:

Remarks
It is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times. Instead, you should

1. Convert the SYSTEMTIME structure to a FILETIME structure.
2. Copy the resulting FILETIME structure to a ULARGE_INTEGER structure.
3. Use normal 64-bit arithmetic on the ULARGE_INTEGER value.

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 ;)

DeddyH 24. Jan 2008 14:46

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;

lbccaleb 24. Jan 2008 14:57

Re: wie auf bestimmte zeit reagieren??
 
hey danke, ich denke das wird mir erstmal weiter helfen...

lbccaleb 24. Jan 2008 15:41

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??

DeddyH 24. Jan 2008 15:42

Re: wie auf bestimmte zeit reagieren??
 
wDayOfWeek ist ein Feld des Records ;)

lbccaleb 24. Jan 2008 17:56

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??

DeddyH 24. Jan 2008 18:19

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:
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;
[edit] Viel zu kompliziert gedacht :mrgreen:
Delphi-Quellcode:
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;
[/edit]

lbccaleb 24. Jan 2008 19:36

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 ;-)

lbccaleb 26. Jan 2008 18:40

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:
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;
die ausgabe ist dann:

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 10:38 Uhr.

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