![]() |
Probleme bei Wecker
Hey habe mal eine Frage. Meine Weckzeit steht in der ini.File, aber mein Programm merkt nicht, wann diese bestimmte Zeit ist, es sei denn, man läd das Programm exakt zur Weckzeit... Hier ist mein Quellcode:
Delphi-Quellcode:
Ich hoffe ihr könnt mir helfen.
procedure TForm1.FormCreate(Sender: TObject);
var ini:TInifile; top:String; Wecker:String; wecker:=ini.ReadString('Wecker','Time',text); if TimeToStr(now)>= wecker then begin timer1.enabled:=false; MediaPlayer1.Play; end; PS: Mein Timerintervall steht auf normal (1000) DJ-SPM [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Moin DJ-SPM,
und was steht im OnTimer Event? |
hey...
nichts ;-) Was muss da rein |
Ok,
danke... Ich habe DIE Lösung!!! Ich hätte den Code in "Form1.Timer1Timer".... eingeben müssen. Funzt jetzt einwandtfrei... Danke trotzdem... Ciao DJ-SPM |
Hey nein,
ich nehme alles zurück. Es geht jetzt immer, wenn die Zeit größer als die ist, die in der Ini steht.
Code:
Wie kann ich das verhindern? Ich möchte doch nur einen ganz normalen Wecker haben, der um eine bestimmte Zeit weckt und net dann, wenn es später als vorgesehen ist. Wie stelle ich das an??
if TimeToStr(now)>= wecker then
Bitte nochmals um eure Hilfe |
Mion DJ-SPM,
dann musst Du einen Bereich abfragen in dem der Wecker ausgelöst werden darf, also nicht nur >= Wecker sondern, im Prinzip, auch <= Wecker + 5 Minuten. Oder Du riskierst einen Vergleich mit = |
Oder du nimmst eine globale Variable, die du setzt und abprüfst, wenn der Wecker ausgelöst wurde bzw. ausgelöst werden soll.
|
Hi
@Luckie... Kannst du mir das mit der globalen Variable mal bitte erklären? |
Hi
@Luckie... Kannst du mir das mit der globalen Variable mal bitte erklären? [edit=Daniel B]Doppelpost gelöscht. MfG Daniel B.[/edit] |
Hi@all
@ChristianSeehase: Wie frage ich meinen Bereich ab? Hätte gerne, dass der Wecker auch noch bei einer ZeitSPANNE von 1 Minute nach INI-Zeit loslegt, damit der Timer genügend Zeit hat, zu initialisieren (mit dem Intervall)... Ich bekomme es ums ver***en nicht hin. Kannst du mir villeicht ein bissl weiterhelfen? Ciao DJ-SPM |
Moin DJ-SPM,
ein kleines Beispiel:
Delphi-Quellcode:
Ein Tip noch: TIniFile kennt auch die Methoden WriteTime und ReadTime.
var
tiWecker : TTime; tiDiff : TTime; tiNow : TTime; begin tiWecker := StrToTime('02:00'); tiDiff := StrToTime('00:01'); tiNow := Time; if (tiNow >= tiWecker) and (tiNow < (tiWecker+tiDiff)) then ShowMessage('Klingeling'); end; |
OK,
ja. wie soll ich's beschrieben: WEnn ich deinen Code benute, Christian, dann lädt er in diesem Zeitraum mehrere Showmessage Dialoge (jede Sekunde einen). Lucky hat was von "globale Variable" gesagt, weisst du darüber bescheid? Es kann doch nicht so schwer sein, einen Wecker zu erstellen ;-) Achso.. Christain: Danke für die viele Hilfe... CIao DJ-SPM |
Moin DJ-SPM,
das war ein Beispiel wie Du einen Bereich abfragen kannst. Ansonsten musst Du alles so deklariert haben wie bisher. |
Hey Chris,
ich weiss, ich spiele mit deinen Nerven, aber eine Frage noch. Wie kann ich die Zeit und ZeitDifferenz durch iniEinträge erstezen? Habe es so probiert und er dudelt die ganze Zeit die Musik ab. Puh, ich hasse Wecker... :-)
Delphi-Quellcode:
HILFE!!!!! plz
procedure TForm1.Timer1Timer(Sender: TObject);
var tiWecker : TTime; tiDiff : TTIme; tiNow : TTIme; ini : TInifile; time1 : TTime; time2 : TTIme; begin ini:=Tinifile.Create('C:\Programme\SPM-APSS\settings.ini'); try time1:=ini.Readtime('Wecker','time1',time); time2:=ini.Readtime('Wecker','Time2',time); tiwecker := time1; tidiff := time2; tiNow := time; if (tiNow >= tiWecker) and (tiNow < (tiWecker+tiDiff)) then Mediaplayer1.Play; finally ini.free; end; end; end. [€dit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Moin DJ-SPM,
hast Du denn mal kontrolliert, was in time1 und time2 steht? Immerhing übergibst Du als Defaultwert die aktuelle Zeit. |
Hey,
Ja, habe ich. time1 war 19:05 und time 2 19:07. Die aktuelle Zeit war 19:00 Uhr und da fings dann an... Was mache ich denn bloß falsch?? Ciao |
Moin DJ-SPM,
die Zeit tiDiff gibt die Differenz vor also z.b. 1 Minute. Du hast aber 19 Stunden 7 Minuten als Bereich zugelassen. Dass dann lange funktioniert ist klar ;-) Das Beispiel enthielt ja:
Delphi-Quellcode:
also Weckzeit 2 Uhr morgens, es darf bis 2 Uhr 1 geweckt werden.
tiWecker := StrToTime('02:00');
tiDiff := StrToTime('00:01'); Deshalb ja auch:
Delphi-Quellcode:
;-)
tiWecker+tiDiff
|
Ok, ich denke das ist jetzt so ziemlich das Ende deiner Nerven, sowie das Ende meiner Gedult...
Ich habe jetzt den Code so, nachden ich deinen Thread gelesen habe...
Delphi-Quellcode:
Naja, was macht's?? Klingeling... auch noch um 21:20... in 10 Jahren um 22:20 bestimmt auch noch. *anfallbekomm*
procedure TForm1.Timer1Timer(Sender: TObject);
var tiWecker : TTime; tiDiff : TTime; tiNow : TTime; time1 : String; time2 : String; ini : TInifile; begin ini:=TInifile.Create('C:\Programme\SPM-APPS\settings.ini'); try time1 :=ini.ReadString('Wecker','time1',text); time2 :=ini.ReadString('Wecker','time2',text); [color=#f60000] tiWecker := StrToTime(time2); //(21:16) tiDiff := StrToTime(time1); //(21:15)[/color] tiNow := Time; if (tiNow >= tiWecker) and (tiNow < (tiWecker+tiDiff)) then MediaPlayer1.Play; finally ini.free; end; end; end. Wo ist der Fehler? [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Moin DJ-SPM,
Zitat:
Also versuch' ich das mal anders zu erklären: Bei mir haben die Variablen folgende Aufgabe:
In Deinem Beispiel wären es dann also 21 Stunden, 15 Minuten. Oder in Minuten: (21*60)+15 = 1275 Minuten. Das heisst: Die Weckzeit dürfte in Deinem Beispiel um 1275 Minuten überschritten werden, bevor sie nicht mehr gültig ist. Dein Code wäre völlig in Ordnung, nur die Werte die Du verwendest sind es nicht. Ach, von wegen Zitat:
|
Ok, danke für deine Hilfe
nun, jetzt kommt das große ABER: Es will auch so nicht so, wie wir wollen. Ich denke, dass das Prog so rechnet:
Code:
WENN (jetzige Zeit größer als Weckzeit aus INI) UND (jetzige Zeit kleiner als Weckzeit+Differenz) ist, dann Spiele lied ab...
if (tiNow >= tiWecker) and (tiNow < (tiWecker+tiDiff)) then MediaPlayer1.Play
das wäre vollkommen richtig. Er will nur nicht. Kann es sein, dass es an: -ini.Readtime, -If-Anweisung, -Timerintervall (bei mir 1000), -an Inifile selbst, -Stringumrechnung liegt? Hier nochmal mein Code, so wie er (berichtigt ist):
Code:
Achso, mein Ereignis liegt im OnTimer Ereignis.
procedure TForm1.Timer1Timer(Sender: TObject);
var tiWecker : TTime; tiDiff : TTIme; tiNow : TTIme; ini : TInifile; time1 : TTime; time2 : TTime; begin ini:=Tinifile.Create('C:\Programme\SPM-APSS\settings.ini'); try time1:=ini.Readtime('Wecker','Time1',time); time2:=ini.Readtime('Wecker','Time2',time); tiwecker := Time1; tidiff := Time2; tiNow := time; if (tiNow >= tiWecker) and (tiNow < (tiWecker+tiDiff)) or (tiNow then MediaPlayer1.Play; finally ini.free; end; end; end. Hm. kannst du es mal bitte versuchen, bei dir zu coden. Auch, wenn's geht mit Ini-File-Auslesung. Da hast du deine Herausforderung *g* Achso, danke nochmal. Bekommst auch mein ganzes Projekt, wenn du willst (nein, ist nicht nur der wecker *g*) Achso, noch eins: Was sind Delphi Tags. Werde sie benutzen, wenn ich weiss, was das ist ;-) Ciao |
Hab jetzt mal ein neus Projekt erstellt und den Code von dir/mir/uns (wie auch immer) eingefügt und jetzt gehts. Mal sehen, wo der fehler in meinem Projekt ist. Melde mich dann wieder...
Ok, hier bin ich wieder: Also, im richtigen Projekt gehts definitif NICHT. Habe alle timer, Media-Komponenten entfernt und alles neu geschrieben. Will net. Was nun? Brauch jetzt gaaanz dringend deine Hilfe :freak: *halbfreuhalbärgerlichbin* Gruß Sascha |
Moin Sascha,
wenn ich es richtig sehe, hast Du ja die Code Tags verwendet. Direkt links da drunter sind die Delphi Tags. Dass Du Deine Zwischenfelder Time1 und Time2 nicht brauchst ist hoffenlich klar. Ausserdem kann ich Dir nur empfehlen, die Einträge in der Ini sprechend zu benennen (also nicht 'time1','time2'). Zudem ist es sicherer, solche Namen als Konstanten zu speichern. Wir hatten schon ein paar Mal den Fall, dass der Fehler in Schreibfehlern bei solchen Angaben lag. Kann nicht passieren, wenn man Konstanten benutzt. |
Ok, Christian...
du/ich oder wir zusammen haben es geschafft. Mein Wecker geht!!! (Auch im großen Projekt)... Der Fehler war.. hm.. keine Ahnung. Habe deinen Code von Seite 1 im Forum genommen und mit entsprechnder Ini-Angaben in das eine neue Programm eingefügt. Ging ja einwandtfrei... Nun kam mir die Idee, diesen Code das Projekt einzufügen und bitte frag mich nicht warum, aber es ging. Änderung gleich 0, aber es geht. Hier nochmal für ALLE, die an diesem Problem hängen...
Delphi-Quellcode:
Christian...
procedure TForm1.Timer1Timer(Sender: TObject);
var tiWecker : TTime; tiDiff : TTime; tiNow : TTime; time1 : String; time2 : String; ini : TInifile; begin ini:=TInifile.Create('C:\NAMEDERINI); try time1 :=ini.ReadString('Wecker','time1',text); time2 :=ini.ReadString('Wecker','time2',text); tiWecker := StrToTime(time1); tiDiff := StrToTime(time2); tiNow := Time; if (tiNow >= tiWecker) and (tiNow < (tiWecker+tiDiff)) then MediaPlayer1.Play; finally ini.free; end; end; end. wenn ich einen Member krönen könnte, würde ich bei dir Anfangen. Grund? -unendliche (nervliche) Belastbarkeit - -"- Hilfsbereitschaft -und alles Weitere, was einen neten Menschen/Programmierer auszeichnet... ( :witch: PS: Wenn du einen kleinen Lohn haben willst, und du dich als "BETA-TESTER" für mein Projekt bereiterklärst, dann melde dich doch einfach mal bei mir. Ich denke, es wird dir gefallen... :witch: ) In diesem Sinne: :bounce1: :bounce1: :bounce2: :bounce2: und DANKE, THANKS, MERCI, GRACIE ... Ciao Sascha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 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