PureBasic
https://www.purebasic.fr/french/

Copier le contenu d'un canvasgadget dans le presse papier
https://www.purebasic.fr/french/viewtopic.php?f=3&t=17709
Page 1 sur 1

Auteur:  Philippe_GEORGES [ Jeu 13/Juin/2019 15:13 ]
Sujet du message:  Copier le contenu d'un canvasgadget dans le presse papier

Bonjour

Je souhaite copier le contenu (graphique) du canvasgadget vers le presse papier.

Code:
   If EventType()= #PB_EventType_LeftDoubleClick      ; copie presse papier
     SetClipboardImage(#canvas_carte) 
     MessageRequester("Information","Image copiée dans le presse papier");


Toutefois, ça ne semble pas aussi simple....

Quelqu'un a t il une idée ?

Merci d'avance

Auteur:  falsam [ Jeu 13/Juin/2019 15:27 ]
Sujet du message:  Re: Copier le contenu d'un canvasgadget dans le presse papie

GetGadgetAttribute(toncanvas, #PB_Canvas_Image) donne l'image id de ton canvas

Auteur:  falsam [ Jeu 13/Juin/2019 15:33 ]
Sujet du message:  Re: Copier le contenu d'un canvasgadget dans le presse papie

Petit code de vérification
Code:
;Plan de l'application
Declare Start()
Declare CopyClipboardImage()
Declare Exit()

Start()

Procedure Start()
  Protected font = LoadFont(#PB_Any, "", 30)
 
  OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  CanvasGadget(0, 0, 0, 800, 600)
 
  StartDrawing(CanvasOutput(0))
  Box(0, 0, 800, 600, RGB(128, 128, 128))
 
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(font))
  DrawText(100, 100, "Test copy image")
  StopDrawing()
   
 
  ;Triggers
  BindGadgetEvent(0, @CopyClipboardImage(), #PB_EventType_RightClick)
 
  BindEvent(#PB_Event_CloseWindow, @Exit())
 
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure CopyClipboardImage()
  Protected imageId = GetGadgetAttribute(0, #PB_Canvas_Image)
 
  Protected image = CreateImage(#PB_Any, GadgetWidth(0), GadgetHeight(0))
 
  StartDrawing(ImageOutput(image))
    DrawImage(imageId, 0, 0)
  StopDrawing()
 
  SetClipboardImage(image)
  Debug "copie effectuée "
EndProcedure

Procedure Exit() 
  End
EndProcedure

Auteur:  Philippe_GEORGES [ Jeu 13/Juin/2019 15:34 ]
Sujet du message:  Re: Copier le contenu d'un canvasgadget dans le presse papie

Merci Falsam,

Code:
   If EventType()= #PB_EventType_LeftDoubleClick      ; copie presse papier
     GetGadgetAttribute(#canvas_carte, #PB_Canvas_Image)
     
     SetClipboardImage( #PB_Canvas_Image) 
     MessageRequester("Information","Image copiée dans le presse papier");


J'ai procédé de cette façon, mais ça ne marche pas .... :cry:

Si tu as une idée....

Phil

Auteur:  Ollivier [ Jeu 13/Juin/2019 15:34 ]
Sujet du message:  Re: Copier le contenu d'un canvasgadget dans le presse papie

Bonjour, ceci devrait faire l'affaire :
Code:
If StartDrawing(CanvasOutput(CanvasNumero) )
   W = OutputWidth()
   H = OutputHeight()
   Image = GrabDrawingImage(#Pb_Any, 0, 0, W, H)
   StopDrawing()
   SetClipboardImage(Image)
   FreeImage(Image)
EndIf
(Et désolé Falsam : le sujet était vide quand j'ai répondu, bande de TGV !)

Auteur:  falsam [ Jeu 13/Juin/2019 15:37 ]
Sujet du message:  Re: Copier le contenu d'un canvasgadget dans le presse papie

Philippe_GEORGES a écrit:
J'ai procédé de cette façon, mais ça ne marche pas ....

Si tu as une idée....
Voir mon code de vérification
viewtopic.php?p=204196#p204196

Je récupére bien l'image dans mon logiciel de traitement d'image

Auteur:  falsam [ Jeu 13/Juin/2019 15:39 ]
Sujet du message:  Re: Copier le contenu d'un canvasgadget dans le presse papie

La solution d'olivier est bonne aussi
Code:
;Plan de l'application
Declare Start()
Declare CopyClipboardImage()
Declare Exit()

Start()

Procedure Start()
  Protected font = LoadFont(#PB_Any, "", 30)
 
  OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  CanvasGadget(0, 0, 0, 800, 600)
 
  StartDrawing(CanvasOutput(0))
  Box(0, 0, 800, 600, RGB(128, 128, 128))
 
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(font))
  DrawText(100, 100, "Test copie image")
  StopDrawing()
   
 
  ;Triggers
  BindGadgetEvent(0, @CopyClipboardImage(), #PB_EventType_RightClick)
 
  BindEvent(#PB_Event_CloseWindow, @Exit())
 
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure CopyClipboardImage()
  If StartDrawing(CanvasOutput(0) )
    W = OutputWidth()
    H = OutputHeight()
    Image = GrabDrawingImage(#PB_Any, 0, 0, W, H)
    StopDrawing()
    SetClipboardImage(Image)
    FreeImage(Image)
  EndIf
  Debug "copy effectuée "
EndProcedure

Procedure Exit() 
  End
EndProcedure

Auteur:  Philippe_GEORGES [ Jeu 13/Juin/2019 15:48 ]
Sujet du message:  Re: Copier le contenu d'un canvasgadget dans le presse papie

Falsam,

Ton message s'est croisé avec le mien !!

ça marche grâce à ton exemple.... Inutile de te dire à quel point je me trouve bête !

Code:
   If EventType()= #PB_EventType_LeftDoubleClick      ; copie presse papier
    imageId = GetGadgetAttribute(#canvas_carte, #PB_Canvas_Image)
    image = CreateImage(#PB_Any, GadgetWidth(#canvas_carte), GadgetHeight(#canvas_carte))
    StartDrawing(ImageOutput(image))
    DrawImage(imageId, 0, 0)
    StopDrawing() 
    SetClipboardImage(image)   
    MessageRequester("Information","Image copiée dans le presse papier");
  EndIf


Grand merci de ton aide,

Phil

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/