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 :

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

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 :
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;
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 !

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 !