Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2785 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [VCL] TBitmap.Canvas.CopyRect : bugs connus ?!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VCL] TBitmap.Canvas.CopyRect : bugs connus ?!

n°312259
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 18-02-2003 à 17:52:28  profilanswer
 

bonjour !
 
j'utilise cette fonction assez souvent dans mon prog et il arrive à peu près une fois sur 50 que le copy rect ne copie rien du tout....
 
pour vous situer un peu la chose, ouala à quoi ressemble mon ti code :
 

Code :
  1. with bmpScroll do begin
  2.          Height := BMP_HEIGHT;
  3.          width := BMP_WIDTH*bmpList.Count;
  4.       end;
  5.       with destRect do begin
  6.          Top := 0;
  7.          Bottom := BMP_HEIGHT;
  8.       end;
  9.       sourceRect := destRect;
  10.       with sourceRect do begin
  11.          Top := 0;
  12.          Bottom := BMP_HEIGHT;
  13.          Left := 0;
  14.          Right := BMP_WIDTH;
  15.       end;
  16.       // le scroll se limite aux nbMax dernières passes.
  17.       if bmpList.count-1 > nbMax then i := (bmpList.count-1)-nbMax
  18.       else i := 0;
  19.       for i:=i to bmpList.Count - 1 do begin
  20.          with destRect do begin
  21.             Left := i*BMP_WIDTH;
  22.             Right := Left + BMP_WIDTH;
  23.          end;
  24.          bmpScroll.Canvas.CopyRect(destRect, TBitmap(bmpList.Items[i]).Canvas, sourceRect);
  25.       end;


 
 
j'ai vérifié que bmpList.Items contenait bien des bitmap "valide" et c'est bel est bien le cas. Il n'y a aucun doute, c'est CopyRect qui foire... vs avez déjà vu ça ??!!
 
notez que ce phénomène arrive bp plus souvent sur winXP, un petit peu moins sous Win2K et quasiment jamais sous win98...

mood
Publicité
Posté le 18-02-2003 à 17:52:28  profilanswer
 

n°312291
taureau
Posté le 18-02-2003 à 17:59:26  profilanswer
 

procedure TCanvas.CopyRect(const Dest: TRect; Canvas: TCanvas;
  const Source: TRect);
begin
  Changing;
  RequiredState([csHandleValid, csFontValid, csBrushValid]);
  Canvas.RequiredState([csHandleValid, csBrushValid]);
  StretchBlt(FHandle, Dest.Left, Dest.Top, Dest.Right - Dest.Left,
    Dest.Bottom - Dest.Top, Canvas.FHandle, Source.Left, Source.Top,
    Source.Right - Source.Left, Source.Bottom - Source.Top, CopyMode);
  Changed;
end;


 
voici le code de CopyRect il emballe l'appel à l'api windows en s'assurant que les handle sur les objets graphiques sont valides, donc si ça marche pas c peut-etre qu'a ce moment ils sont pas bon, regarde en utilisant directement l'api...

n°317533
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 25-02-2003 à 16:05:41  profilanswer
 

bon, déjà, c'est pas le RequiredState, puisque ça me renverrerais une exception et ce n'est pas le cas :/.
Sinon, en lisant la doc, j'ai vu que BitBlt était plus adapté à mes besoin que StretchBlt (surface dest et source de taille identique). J'utilise donc cette fonction directement.
Mais j'ai toujours le même pb : BitBlt n'échoue jamais (renvoie toujours true) mais la surface n'est pas toujours copiée...
Dans une autre partie de l'application, j'utilise TransparentBilt (pour supprimer une couleur sur un bitmap) et j'ai exactement le même problème et ce une fois sur 20 a peu près...  
bon, je vais encore chercher mais si vous avez une idée, n'hésitez surtout pas ! :jap:

n°1616501
newik1
Posté le 28-09-2007 à 11:22:16  profilanswer
 

Je relance cette discution car j'ai actuellement le même problème.
Y a-t-il une solution?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [VCL] TBitmap.Canvas.CopyRect : bugs connus ?!

 

Sujets relatifs
[Delphi] J'aurai besoin d'un VCL permettant de compresser des fichiersApplet plein de bugs d'affichage...
Comment faire une scrollbar pour un type Canvas ?Faire une scrollbar dans un Canvas
Probleme d'affichage de Canvas dans un panel[BORLAND]Dérivation de TBitmap
canvas resizepeut on enegistrer un canvas en image jpg ou bmp ?
[mac / ie] cherche site répertoriant les bugs et freezesAffectation d'un HPALETTE à un TBitmap
Plus de sujets relatifs à : [VCL] TBitmap.Canvas.CopyRect : bugs connus ?!


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)