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 :
J'ai essayé d'y remédier avec des sections critiques (peut-être mal employées) mais cela n'a rien amélioré.
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;
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
Partager