Canvas // LineTo

Canvas // LineTo - Delphi/Pascal - Programmation

Marsh Posté le 18-04-2005 à 12:58:26    

Salut people (antp :jap:)
 
J'ai un petit sushi là avec le Canvas de ma fenêtre :ange:
 
Je souhaite tracer une simple ligne rouge de tel point à un autre point, jusque là je sais faire :)  
 
Par contre, là où ça chiotte, c'est que j'ai un composant TImage qui contient un Gif et qui occupe toute la fenêtre...
 
Le problème est donc :  
 
¤ Comment je fais pour dessiner ma ligne rouge sachant que :
    - si je prend le Canvas de la fenêtre, y'a l'image par dessus et donc on va pas la ligne,
    - si je prend le Canvas du TImage, il me dit que l'image n'est pas au format Bitmap (c'est un gif) et qu'il est donc impossible de dessiner sur le Canvas.
 
Comment je fais-je ? [:airforceone]
 
Merki à tous :)

Reply

Marsh Posté le 18-04-2005 à 12:58:26   

Reply

Marsh Posté le 18-04-2005 à 14:10:28    

Pour un GIF je sais pas trop, mais pour les JPEG et les PNG il y a moyen de les convertir en BMP en interne pour les fournir au TImage.
Ex. de ce que je fais pour dessiner un PNG/JPEG/WMF/EMF sur un TImage (et donc converver le TImage en mode bitmap) plutôt que de charger l'image dans le TImage :

Code :
  1. Gr := InternalImage.Picture.Graphic;
  2.           if Gr is TMetafile then
  3.           begin
  4.             if not PlayEnhMetaFile(Image.Canvas.Handle, InternalImage.Picture.Metafile.Handle, Rect(x1, y1, x2, y2)) then
  5.               RaiseLastOSError;
  6.           end
  7.           else
  8.           if Gr is TBitmap then
  9.             Image.Canvas.CopyRect(Rect(x1, y1, x2, y2), InternalImage.Canvas, Rect(0, 0, InternalImage.Width, InternalImage.Height))
  10.           else
  11.           if Gr is TPNGObject then
  12.             TPNGObject(Gr).Draw(Image.Canvas, Rect(x1, y1, x2, y2))
  13.           else
  14.           if Gr is TJPEGImage then
  15.           begin
  16.             TJPEGImage(Gr).DIBNeeded;
  17.             Image.Canvas.StretchDraw(Rect(x1, y1, x2, y2), Gr)
  18.           end


(InternalImage est un autre TImage, non visible, que je crée par code pour charger l'image)


Message édité par antp le 18-04-2005 à 14:13:43

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-04-2005 à 18:36:39    

c'est pas tout à fait ce que je voulais faire mais bon c'est pas grave je vais essayé de voir du côté de TPaintBox :)
 
Par contre j'ai un bug zarbe quand je quitte le programme :
 

---------------------------
Application Error
---------------------------
Exception EOSError in module Project1.exe at 0000D082.
 
System Error.  Code: 1400.
 
Handle de fenêtre non valide.
---------------------------
OK    
---------------------------


 
D'où ça peut venir ? [:airforceone]


Message édité par Inekman le 18-04-2005 à 18:37:33
Reply

Marsh Posté le 18-04-2005 à 18:57:19    

De ton code :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-04-2005 à 19:00:20    

looooooooool
 
Voilà le déroulement de la chose :
 
- frmMain ouvre frmProcess puis se cache,
- frmProcess effectue une action,
- en fin d'exécution, frmProcess se cache et frmMain revient,
- Quand on quitte le programme (par frmMain) bam ça bug :D

Reply

Marsh Posté le 18-04-2005 à 19:03:29    

Et ça arrive sur quel ligne de code quand tu l'exécutes pas à pas :o ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-04-2005 à 19:06:12    

procedure TfrmMain.lblQuitterClick(Sender: TObject);
begin
    Application.Terminate;
end;


 
Quand j'ai vu la quantité de code j'ai eu un doute mais je crois que c'est à la ligne "Application.Terminate" :D

Reply

Marsh Posté le 18-04-2005 à 19:07:58    

Essaie de faire un Close au lieu de Application.Terminate (si TfrmMain est la form principale).
Mais l'erreur n'est pas provoquée par ça, il doit y avoir quelque chose ailleurs.  
Si t'as un pointeur fou par contre là c'est mal barré.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-04-2005 à 19:11:11    

Je crois que y'a une couille avec un Thread :D

Reply

Marsh Posté le 18-04-2005 à 19:43:13    

Ou alors t'accèdes directement à la VCL dans ton thread (on a ce genre d'erreurs quand on fait ça)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-04-2005 à 19:43:13   

Reply

Marsh Posté le 18-04-2005 à 20:42:11    

arf j'peux rien te répondre actuellement...mon pc vient de partir en fumée :cry:  
Je suis sur mon ancien pc là...

Reply

Marsh Posté le 18-04-2005 à 20:48:02    

Comme quoi, c'est dangereux de jouer avec des threads :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-04-2005 à 21:09:06    

re-là :D  
 
Décidément je les accumule les conneries moi...
 
C'est ma carte graphique qui a balancé l'affichage sur la télé de son propre chef et moi j'me suis retrouvé avec un écran tout noir :sweat: j'ai cru qu'elle avait cramée la carte :cry:  
 
Desépéré, j'ai été me faire un café en attendant de trouver les papiers de la garantie et quand je me suis installé devant la télé...en zappant j'me suis retrouvé nez à nez avec mon bureau Windoz sur la chaîne AV....LA HONTE [:al zheimer]
 
...au fait mon thread marche !! [:alb77]
 
La suite des aventures d'Inekman au prochain post [:arg]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed