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

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Canvas // LineTo

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Canvas // LineTo

n°1050621
Inekman
Posté le 18-04-2005 à 12:58:26  profilanswer
 

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 :)

mood
Publicité
Posté le 18-04-2005 à 12:58:26  profilanswer
 

n°1050678
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2005 à 14:10:28  profilanswer
 

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
n°1051140
Inekman
Posté le 18-04-2005 à 18:36:39  profilanswer
 

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
n°1051177
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2005 à 18:57:19  profilanswer
 

De ton code :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1051179
Inekman
Posté le 18-04-2005 à 19:00:20  profilanswer
 

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

n°1051182
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2005 à 19:03:29  profilanswer
 

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
n°1051188
Inekman
Posté le 18-04-2005 à 19:06:12  profilanswer
 

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

n°1051191
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2005 à 19:07:58  profilanswer
 

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
n°1051196
Inekman
Posté le 18-04-2005 à 19:11:11  profilanswer
 

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

n°1051259
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2005 à 19:43:13  profilanswer
 

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
mood
Publicité
Posté le 18-04-2005 à 19:43:13  profilanswer
 

n°1051325
Inekman
Posté le 18-04-2005 à 20:42:11  profilanswer
 

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

n°1051330
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2005 à 20:48:02  profilanswer
 

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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1051365
Inekman
Posté le 18-04-2005 à 21:09:06  profilanswer
 

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]


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

  Canvas // LineTo

 

Sujets relatifs
[Debutant][Applet][Swing]canvas+superposition image[J2ME] Image dans un canvas
Superposition d'images tracé avec Canvas[Canvas] pb : ma méthode repaint() n'appelle pas mon paint() !
Ajouter des Canvas ds JScrollPaneUtiliser un Canvas pour dessiner dedant, et générer une Image
canvas[JAVA]Prob avec un Canvas, un Menu, le tout dans une JApplet
[Perl/Tk] TkZinc, le canvas nouvelle generation !un canvas dans swing....??
Plus de sujets relatifs à : Canvas // LineTo


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR