Bonjour à toutes et à tous,

Dans mon programme GPS, au fur et à mesure que je me déplace (via les données du GPS ou avec la souris sur l'écran), je dois rafraichir ma carte avec de nouvelles tuiles.

Pour ce faire, lorsque que j'arrive à un certain pourcentage du bord de la dernière tuile, je déclenche le chargement et placement de nouvelles tuiles.

Probléme : de temps à autre, lors de ce changement, les tuiles que j'obtiens ne sont pas les bonnes, comme si un évènement s'était produit au cours de ce changement.

Ci-après un morceau de ce que je fais :

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
  3: begin  // Diminution de la latitude
       for j:= 1 to 4 do
         BmpCarte.CanvasBGRA.CopyRect(Rect(0, DimTuile*(j-1), DimTuile*5, DimTuile*j), BmpCarte, Rect(0, DimTuile*j, DimTuile*5, DimTuile*(j+1)));
       for i:= 0 to 4 do
         with Tuile do
         begin     {Chargement d'un panel de 4 cartes de 256 x 256 pixels²}
           NomCarte:= Fch_Tuile(OSMLat+2, OSMLon+i-2, Tuile);
           if NomCarte = '' then
             BmpCarte.CanvasBGRA.CopyRect(Rect(DimTuile*i, DimTuile*4, DimTuile*(i+1), DimTuile*5), BmpVide, Rect(0, 0, DimTuile, DimTuile))
           else
           begin
             NomTuile:= 'Cartes'+SepRep+NomCarte+IntToStr(Zoom)+SepRep+IntToStr(OSMLon+i-2)+SepRep+IntToStr(OSMLat+2)+'.jpg';
             if FileExists(NomTuile) then
             begin
               BmpTuile.LoadFromFile(NomTuile);
               BmpCarte.CanvasBGRA.CopyRect(Rect(DimTuile*i, DimTuile*4, DimTuile*(i+1), DimTuile*5), BmpTuile, Rect(0, 0, DimTuile, DimTuile));
             end;
           end;
         end;
       Decal.Y:= Decal.Y-256;
       Depl.Y:= Depl.Y-256;
     end;
J'ai essayé d'y remédier avec des sections critiques (peut-être mal employées) mais cela n'a rien amélioré.

Ce qu'il me faudrait (je pense), c'est un drapeau, une procédure, ... qui ferait en sorte que le tronçon de code que j'exécute ne soit pas perturbé, coupé par un évènement quelconque.

Si vous avez des idées ...

Cordialement.

Pierre