Bonjour,

ma problématique : lors d'un traitement "long" (10 à 15 secondes), je désire afficher un gif animé "d'attente". Hors celui-ci se fige tout le temps du traitement.

A la lecture des tuto, il semble que l'utilisation des threads soit la solution. J'ai donc ajouté un tread qui gère les images du gif (dans un premier temps et pour simplifier, le thread modifie la propriété Top d'un Timage - le gif animé, se sera pour + tard).
Mais là encore, le déplacement de l'image est figé le temps du traitement.

Quelqu'un peut il m'aider ? merci par avance.


voici une partie du code :

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
 
  TMonThread=Class(TThread)
  private
    senshaut: boolean;
  Protected
    constructor create(CreateSuspended: Boolean);
    procedure Execute; override;
    procedure centralcontrol;
  end;
 
 
constructor TMonThread.Create(CreateSuspended: Boolean);
begin
 
      inherited Create(CreateSuspended);
      FreeOnTerminate:= false;
      Priority:= tpnormal;
      senshaut:= false;
 
end;
 
procedure TMonThread.Execute;
begin
     repeat
     sleep(500);
     synchronize(centralcontrol);
     until terminated;
 
end;
 
 
procedure TMonThread.Centralcontrol;
begin
 
     if senshaut then
        ForAssistConnexion.Image.top:= ForAssistConnexion.Image.Top+10
     else
        ForAssistConnexion.Image.top:= ForAssistConnexion.Image.Top-10;
 
     ForAssistConnexion.Image.Repaint;
     senshaut:= not senshaut;
 
end;
 
procedure TForAssistConnexion.Bt_ActualiserListeSqlServeurClick(Sender: TObject);
var
   i,j,k,l: integer;
 
begin
 
     AnimeImage:= TMonThread.create(true);
     AnimeImage.Resume;
 
    // boucle pour simuler le traitement long
     for i:=0 to 1000 do 
         sleep(1);
 
     AnimeImage.Terminate;
 
end;