Bonjour a tous !
J'ai un probleme qui dure depuis 1 semaine, et franchement je commence a desesperer. Cette application est un Systray dans la barre des tache, je ne sais pas si cela jous quelque chose, mais au cas ou, je prefere le dire.
Voici le code de l'evenement OnTimer :
Ce code doit s'executer normalement toutes les 60 secondes, et de préférence a la seconde prés, mais le probleme que j'ai est qu'il s'execute qu'une seule fois, ensuite plus rien. Je tient a preciser que la fonction ProcSetting vient d'une DLL, si cela peut influencer quelque chose !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 procedure TTray.Timer1Timer(Sender: TObject); var SCANINI, SCANPRG: TIniFile; I, J, Sum: Integer; ScanSet: String; VerifDate: Boolean; DirPar: ShortString; Hn, Mn, Hc, Mc, Sc: Word; label EndB; begin try VerifDate:=False; DecodeTime(Time,Hn,Mn,Sc,Sc); SCANINI:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'ScfData.ini'); Sum:=SCANINI.ReadInteger('File0','Sum',0); for I:=1 to Sum do begin if SCANINI.ReadString('File'+IntToStr(I),'Enabled','Non') = 'Oui' then begin ScanSet:=SCANINI.ReadString('File'+IntToStr(I),'Setting','Aucune'); if ScanSet <> 'Aucune' then begin SCANPRG:=TIniFile.Create(ExtractFilePath(Application.ExeName)+ScanSet+'.prg'); if SCANPRG.SectionExists(IntToStr(7)) then if Date = SCANPRG.ReadDate('7','1',Now) then VerifDate:=True; if SCANPRG.SectionExists(IntToStr(8)) then for J:=1 to 7 do if SCANPRG.ReadBool('8',IntToStr(J),False) then if DayOfTheWeek(Date) = J then VerifDate:=True; if SCANPRG.SectionExists(IntToStr(9)) then if DayOf(Date) = SCANPRG.ReadInteger('9','1',1) then VerifDate:=True; if SCANPRG.SectionExists(IntToStr(10)) then if (SCANPRG.ReadInteger('10','1',1) = DayOfTheWeek(Date)) and (NthDayOfWeek(Date) = 1) then VerifDate:=True; if VerifDate then begin VerifDate:=False; DecodeTime(SCANPRG.ReadTime('11','2',Now),Hc,Mc,Sc,Sc); if (Hn = Hc) and (Mn = Mc) then begin SCANPRG.Free; DirPar:=Copy(ExtractFilePath(Application.ExeName),1,Length(ExtractFilePath(Application.ExeName))-9); if ProcSetting(ExtractFilePath(Application.ExeName)) then ShowMessage('Top OK !'); goto EndB; end; end; end; end; SCANPRG.Free; end; EndB: Timer1.Enabled:=True; Exit; finally SCANINI.Free; end; end;
J'ai meme essayer de reactiver le Timer a la fin de la boucle histoire d'etre sur que celui-ci soit actif, et la encore pire il me fait une erreur de violation d'acces. je n'y comprend plus rien !
Autre chose, quand je mets un point d'arret pour scruter l'evenement OnTimer, au premier passage il s'arrete, ensuite il faut que j'attendent 2 minute mini pour voir le code se figer a nouveau, et le pire dans tout ça c'est qu'il s'arrete ici, au premier begin :
Ce bout de code est tout simplement le clique droit de mon systray, ce qui n'a rien a voir avec le point d'arret mis dans l'evenement OnTimer !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TTray.WMAppelMessage(var msg : TMessage); Var Curs:TPoint; begin if Msg.LParam = WM_RButtonDown then begin SetForegroundWindow(Handle); GetCursorPos(Curs); PopupMenu1.Popup(Curs.X,Curs.Y); PostMessage(Handle,WM_NULL,0,0); end; end;
Alors si quelqu'un pourrait me donner des reponse a tous ce bazarre, cela m'aiderait beaucoup, Ou sinon si vous pouvez m'indiquer une facon d'avoir une horloge plus precise et plus fonctionnel que le TTimer, cela serait l'ideale, Merci !
Partager