![]() |
Wecker
Moin!
Ich möchte in Delphi6 eine Art wecker programmieren, weiß nur nicht, was ich da nehmen soll. Wie kann man sich die Zeit "richtig" ausspucken lassen? :gruebel: Mit "getcurrenttime" krieg ich da nur so eine zahl, die überhaupt nicht mit der Uhrzeit übereinstimmt. Schon mal Danke für eure Antworten. |
Re: Wecker
So könnte man es machen:
Einfach den Code der unteren Prozedur in einen Timer mit Interval=1000 einsetzen und datetime noch bei der Form eintragen.
Delphi-Quellcode:
procedure TfrmMain.datetime(const strDateTime: string; out strDate, strTime: String);
var i: Integer; begin i := Pos('/', strDateTime); strTime := Copy(strDateTime, i+2, i); strDate := Copy(strDateTime, 1, length(strDateTime)-i+1); end; procedure TfrmMain.Timer1Timer...; // Interval = 1000 var sysDate, sysTime : String; begin datetime(lvTasks.Items.Item[i].SubItems[1], d, t); getDateTime(sysDate, sysTime); if sysDate = d then begin if sysTime = t then begin end; end; end; |
Re: Wecker
Danke, ging ja echt schnell...
werds mal ausprobieren. :mrgreen: |
Re: Wecker
@Nils: Wozu dieses String-Rumgefummele :shock: ? Der Typ TDateTime wurde nicht zum Spaß erfunden.
@J.P: Versuch es lieber in etwas so:
Delphi-Quellcode:
procedure TForm.TimerTimer(Sender: TObject);
var stopTime: TDateTime; begin stopTime := StrToDateTime(TimeEdit.Text); // Für diese Umwandlung muss der eingegebene Zeitpunkt (mit deutschen Formateinstellungen) in der Darstellung DD.MM.YYYY HH:MM:SS vorliegen, wobei auch halbe Angaben wie DD.M. oder DD.MM.YY HH:MM funktionieren // stopTime := EncodeDateTime(...) // Hiermit kannst du Jahr, Monat, ... getrennt angeben if Now >= stopTime then ShowMessage('AUFSTEHN!'); end; |
Re: Wecker
Ich habe das mal aus einem Programm ausgegraben, in dem ich das aus irgendeinem Grund stehen habe.
|
Re: Wecker
Das erste funkt irgentwie nicht richtig :wall:.
Das zweite sieht gut aus, werd das auch mal ausprobieren. Danke für eure Antworten! :wink: |
Re: Wecker
Hmmm, ich glaub meine Delphi version spinnt.
Code:
Immer, wenn ich das so mache, macht der Wecker gar nichts.
procedure TForm1.Timer1Timer(Sender: TObject);
var stopTime: TDateTime; begin stopTime := StrToDateTime(stunde+':'+minute); // Für diese Umwandlung muss der eingegebene Zeitpunkt (mit deutschen Formateinstellungen) in der Darstellung DD.MM.YYYY HH:MM:SS vorliegen, wobei auch halbe Angaben wie DD.M. oder DD.MM.YY HH:MM funktionieren // stopTime := EncodeDateTime(...) // Hiermit kannst du Jahr, Monat, ... getrennt angeben if Now <= stopTime then begin PlaySound(PChar(musik), hInstance, SND_ASYNC); Timer1.Enabled := false; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Opendialog1.Execute; musik := Opendialog1.FileName; label1.Caption := musik; end; procedure TForm1.Button2Click(Sender: TObject); begin PlaySound(PChar(musik), hInstance, SND_ASYNC); end; procedure TForm1.Button3Click(Sender: TObject); begin stunde := edit1.text; minute := edit2.text; label2.Caption :='Um ' + stunde + ' Uhr und '+minute+' minuten.'; end; procedure TForm1.Button4Click(Sender: TObject); begin if minute = '' then Begin showmessage('Bitte geben sie eine Zeit an!');stop := 'true'; end else if stunde = '' then Begin showmessage('Bitte geben sie eine Zeit an!');stop := 'true'; end else if musik = '' then Begin showmessage('Bitte geben sie den Wecksound an');stop := 'True' end else stop:='false'; if stop = 'true' then else sendmessage(form1.Handle,WM_SYSCOMMAND ,SC_minimize,0); if stop = 'true' then else timer1.Enabled := true; end; procedure TForm1.WMQueryEndSession (var Msg : TWMQueryEndSession); begin if MessageDlg('Sie haben noch den Wecker laufen, wollen sie den Rechner trotzdem beenden?', mtConfirmation, [mbYes,mbNo], 0) = mrNo then Msg.Result := 0 else Msg.Result := 1; end; procedure TForm1.FormCreate(Sender: TObject); begin timer1.Enabled := false end; end. Wenn ich aber das "<=" durch ">=" ersetze, spielt er die ganze zeit den sound... Hilfe! |
Re: Wecker
Hi,
da fällt mir auf, du hast mit
Delphi-Quellcode:
einem TDateTime-Objekt nur eine Uhrzeit übergeben.
var
stopTime: TDateTime; begin stopTime := StrToDateTime(stunde+':'+minute); Warum nicht TTime an Stelle von TDateTime und dann mit StrToTime wandeln!? Besser finde ich aber einfach ein "Datum + Uhrzeit" an TDateTime als Weckzeit übergeben. Wenn du dir mal "stopTime" und "Now" als Zahl anzeigen lässt dann siehst du ... Grüsse, MJ |
Re: Wecker
Kein Wunder:
Now ist tDateTime mit Datum und Uhrzeit Dein gewandelter Wert ist nur die Uhrzeit ohne Datum. Damit ist Now mit Sicherheit immer viel größer als die Prüfzeit. Du musst also das Datum dazuaddieren. Ich hoffe das war verständlich - will es jetzt nicht in Delphi schreiben - du musst ja auch noch was tun :-) Gruss Thomas |
Re: Wecker
UPPPS
MIST... Naja, Danke für den Tipp... mvfG J.P. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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