[RESOLU] Imprimer une fenêtre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Imprimer une fenêtre

Message par nico »

Voici un code simple qui fonctionne, que tu adapteras bien sûr, suivant tes besoins (Notamment pour adapter l'image par rapport au papier de sortie)


Code : Tout sélectionner

Procedure ImprimeFenetreClient(id_fenetre.l)
  Protected Hdc.i, id_image.l, id_library.l, Creation_image.l
  
  If GetClientRect_(WindowID(id_fenetre),@rect.rect)
    id_image= CreateImage(#PB_Any,rect\right,rect\bottom)
    If id_image<> 0
      hdc.i=StartDrawing(ImageOutput(id_image))
      If hdc
        id_library= OpenLibrary(#PB_Any,"User32.dll")
        If id_library<>0
          If CallFunction(id_library, "PrintWindow", WindowID(id_fenetre), Hdc, #PW_CLIENTONLY)
            Creation_image=1
          EndIf 
          CloseLibrary(id_library)
        EndIf
      EndIf 
      StopDrawing()
    EndIf 
  EndIf 
  
  If Creation_image
    If PrintRequester()   
      If StartPrinting("PureBasic Test")
        If StartDrawing(PrinterOutput())
          DrawImage(ImageID(id_image), 0, 0)
          StopDrawing()
        EndIf
        StopPrinting()
      EndIf
    EndIf 
  EndIf 
EndProcedure


#Fenetre=0
#Bouton=0

If OpenWindow(#Fenetre, 0, 0, 240, 240, "ButtonGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  ButtonGadget(#Bouton, 10,  20, 220, 20, "Imprimer la Fenêtre sans les bords")
  
  Repeat
    event.l=WaitWindowEvent()
    Select event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Bouton
            ImprimeFenetreClient(#Fenetre)
        EndSelect
    EndSelect 
    
  Until event = #PB_Event_CloseWindow
EndIf
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Re: Imprimer une fenêtre

Message par brossden »

Peut être une solution à améliorer

Code : Tout sélectionner

Global x1, y1, x2,y2, Fenetre.s, Handle

Enumeration
  #Window_0 : #Listview_0 : #Image0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 452, 380, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ListViewGadget(#Listview_0, 70, 40, 300, 180)
    EndIf
  EndIf
EndProcedure

Procedure Window()
  hWnd.l = FindWindow_( 0, 0 )
  While hWnd <> 0
    If GetWindowLong_(hWnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
      txt.s = Space(256)
      GetWindowText_(hWnd, txt, 256)
      If txt <> ""
         AddGadgetItem(#Listview_0,-1,txt)
      EndIf
    EndIf
    hWnd = GetWindow_(hWnd, #GW_HWNDNEXT)
  Wend
EndProcedure

Procedure Taille(Fenetre.s)
  Handle = FindWindow_(0, Fenetre)
  GetWindowRect_(Handle, rc.Rect)
  GetClientRect_(Handle, sc.Rect)
      x1= rc\Left
      y1= rc\Top
      x2 = sc\Right+8
      y2 = (rc\Bottom + sc\Bottom )/2
EndProcedure

Procedure CopieImage()
  res =  SetForegroundWindow_(Handle)
  Delay(100)
  CreateImage(#Image0,x2,y2)
  DC0 = StartDrawing(ImageOutput(#Image0))
    BitBlt_(DC0,0,0,x2,y2,GetDC_(GetDesktopWindow_()),x1,y1,#SRCCOPY )
  StopDrawing()
  SaveImage(#Image0,"c:\aa.bmp")
EndProcedure

Procedure ImprimeImage(ImageX)
  If PrintRequester()
    If StartPrinting(Fenetre)
      If StartDrawing(PrinterOutput())
          DrawImage(ImageID(ImageX), 100, 100, x2*10, y2*10)
          StopDrawing()
      EndIf
      StopPrinting()
    EndIf
  EndIf
  End
EndProcedure

Open_Window_0()

Window()

Repeat
  
  Event = WaitWindowEvent()
  GadgetID = EventGadget()
  If Event = #PB_Event_Gadget
    If GadgetID = #Listview_0
      Fenetre.s = GetGadgetItemText(#Listview_0, GetGadgetState(#Listview_0))
      Taille(Fenetre)
      CopieImage()
      ImprimeImage(#Image0)
    EndIf
  EndIf
 Until Event = #PB_Event_CloseWindow

End

Denis

Bonne Jounée à tous
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: Imprimer une fenêtre

Message par Anonyme 2 »

Merci pour vos codes, problème résolus :)
Répondre