Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Wecker (https://www.delphipraxis.net/78188-wecker.html)

J.P. 30. Sep 2006 16:00


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.

Nils_13 30. Sep 2006 16:05

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;

J.P. 30. Sep 2006 16:06

Re: Wecker
 
Danke, ging ja echt schnell...
werds mal ausprobieren.
:mrgreen:

Khabarakh 30. Sep 2006 16:36

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;

Nils_13 30. Sep 2006 16:53

Re: Wecker
 
Ich habe das mal aus einem Programm ausgegraben, in dem ich das aus irgendeinem Grund stehen habe.

J.P. 1. Okt 2006 11:26

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:

J.P. 1. Okt 2006 16:21

Re: Wecker
 
Hmmm, ich glaub meine Delphi version spinnt.

Code:
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.
Immer, wenn ich das so mache, macht der Wecker gar nichts.
Wenn ich aber das "<=" durch ">=" ersetze, spielt er die ganze zeit den sound...

Hilfe!

Maja Jessica 1. Okt 2006 16:46

Re: Wecker
 
Hi,

da fällt mir auf, du hast mit
Delphi-Quellcode:
var
  stopTime: TDateTime;
begin
  stopTime := StrToDateTime(stunde+':'+minute);
einem TDateTime-Objekt nur eine Uhrzeit übergeben.

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

thkerkmann 1. Okt 2006 16:47

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

J.P. 1. Okt 2006 17:10

Re: Wecker
 
UPPPS
MIST...
Naja, Danke für den Tipp...

mvfG J.P.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 Uhr.
Seite 1 von 2  1 2      

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