Page 1 sur 1

IMPRIMER UNE IMAGE

Publié : ven. 02/nov./2007 17:58
par joellevino
BONJOUR A TOUS

je conprend pourquoi la parti impression ne fontionne ps

cela vient surement de drawimage ?????? mais pourquoi???

j'envisage un petit traceur de courbe et de profil en long point par point

puis imprimer le dessin

:( :(

Code : Tout sélectionner


PureBasic  (PB4Code) 



;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;PAPIER MILLIMETRE
;la suite tracer une coube
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

;- Variables global
;*******************************************************************
;Variables imprimante et écran
;
;si aucune imprimante selectionner (annuler choisi par utilisateur dans boite dialogue choix imprimer)
;les variables ci-dessous initialise l'imprimante par défaut
;
;*******************************************************************

Global Imprimante=DefaultPrinter() ;initialise l'imprimante par defaut

Global printer_DC.l = StartDrawing(PrinterOutput()) ;sélectionne le pilote imprimante par defaut
Global LargeurPage_mm = GetDeviceCaps_(printer_DC,#HORZSIZE);API WIN
Global HaureurPage_mm = GetDeviceCaps_(printer_DC,#VERTSIZE);API WIN
Global LargeurPage_px = PrinterPageWidth()
Global HaureurPage_px = PrinterPageHeight()
Global Un_mm_px.f = LargeurPage_px/LargeurPage_mm ; 1 milimétre = en pixels
Global Marge = Un_mm_px*10 ; donc la marge des 4 cotés de la page sera de 10 mm
Global zoom=4              ;cette variable pourra etre ajusté par l'utilisateur entre 4 et 10
Global EcranX = GetSystemMetrics_ ( #SM_CXSCREEN ): ;=largeur de l'ecran API WIN
Global EcranY = GetSystemMetrics_ ( #SM_CYSCREEN ): ;=hauteur de l'ecran API WIN




;- Window Constants
;
Enumeration
  #Window_1

EndEnumeration


;- Gadget Constants 
;
Enumeration
  #Gadget_Image_1
  #Image_1
  ;#Image_2
  #Button_1
  #ScrollArea_1
EndEnumeration



Gosub ChoisirImprimante

Gosub CreateImage ; image créer en fonction de l'imprimante choisi


Procedure Open_Window_1(); ouverture en mode plein écran 
If ExamineDesktops() ;l'examen du bureau doit se faire dans la procédure
                     ;sinon l'affichage plein écran ne fonctionne pas !!! 

LargeurEcran = DesktopWidth(0)

HauteurEcran = DesktopHeight(0)

EndIf
   
  If OpenWindow(#Window_1, 0, 0, LargeurEcran-5, HauteurEcran-70, "New window ( 1 )",  #PB_Window_SystemMenu |#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget )
    
    If CreateGadgetList(WindowID(#Window_1))   ; La liste des gadgets a été créées avec succès
      ; Déclarez vos gadgets ici...
      ButtonGadget(#Button_1, 10, 15, 165, 65, "Imprimer", #PB_Button_Toggle)
      ScrollAreaGadget(#ScrollArea_1, 0, 100, LargeurEcran-10,HauteurEcran-170, (LargeurPage_px/zoom)+200, (HaureurPage_px/zoom)+200, 30)
      SetGadgetColor(#ScrollArea_1, #PB_Gadget_BackColor, RGB(235, 207, 135))
      ImageGadget(#Gadget_Image_1,  0,0,  LargeurPage_px/zoom, HaureurPage_px/zoom ,ImageID(#Image_1))
      ;les deux gadgets ci-dessus sont crées en fontion du papier choisi
      StringGadget(700, 650,  10,  306, 20, Str(LargeurPage_mm))
      StringGadget(701, 650,  50,  306, 20, Str(HaureurPage_mm))
      StringGadget(702, 650,  90,  306, 20, Str(LargeurPage_px))
      StringGadget(703, 650,  130, 306, 20, Str(HaureurPage_px))
      StringGadget(704, 650,  170, 306, 20, Str( Un_mm_px*HaureurPage_mm))
      StringGadget(705, 650,  210, 306, 20, Str( Un_mm_px*LargeurPage_mm))
      StringGadget(706, 650,  250, 306, 20, Str( Un_mm_px))
      
      StringGadget(707, 650,  290, 306, 20, Str( EcranX))
      StringGadget(708, 650,  330, 306, 20, Str( EcranY))
      
      CloseGadgetList() 
    EndIf
  
   EndIf


EndProcedure



 Open_Window_1()

 
;***************************************************************************** 
;Boucle principale du programme avec gestion des évenements 
;*****************************************************************************


Repeat

  Event = WaitWindowEvent()
  
  Select Event
  
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Button_1
      ;///// ?????? NE FONCTIONNE PAS ?????????///////////
         Gosub image_imprime      ; pour créer l'image 2 pour imprimer
         
         
           If StartPrinting("PureBasic Test")
           
                If StartDrawing(PrinterOutput())
                   DrawImage(#Image_2, 0, 0 )
                   
                   StopDrawing()
                 EndIf
                 
               StopPrinting()
           EndIf
          
      EndIf
     ;/////// jusque la ????????
    ; //////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_1
        CloseWindow(#Window_1)
        Break
      EndIf
  EndSelect
ForEver

 ;
  
 ;******************************************************************************
 ;création de l'image pour affichage écran   (l'échelle est approximative)
 ;*******************************************************************************
  
  CreateImage: ;l'image est crée en fontion du papier imprimante  choisi
  
  
  If CreateImage(#Image_1,  LargeurPage_px/zoom, HaureurPage_px/zoom) ;image écran
      
      StartDrawing(ImageOutput(#Image_1))
  
      FrontColor(RGB(255,255,255))  ;fixe couleur a blanc
     
      For k=0 To HaureurPage_px/zoom   ;les lignes et la boucle sont calculées en fonction du papier
      Line(0, k,  LargeurPage_px/zoom, 0 ) ;rempli l'image de ligne blanche donc fond blanc
      Next
      
      FrontColor(RGB(0, 0, 0))  ;fixe couleur a noir
      
      For k=0 To HaureurPage_mm  ;les lignes et la boucle sont calculées en fonction du papier
      Line(0,(Un_mm_px*k)/zoom,LargeurPage_px/zoom,0) ;traçe tous les mm une ligne noir horizontale
      Next
      
      For k=0 To LargeurPage_mm  ;les lignes et la boucle sont calculées en fonction du papier
      Line((Un_mm_px*k)/zoom,0,0,HaureurPage_px/zoom) ;traçe tous les mm une ligne noir verticale
      Next
      
  
      StopDrawing()
  
   EndIf
  
     Return    
  
  
  ;************************************************************************************
  ;Choisir une imprimante
  ;************************************************************************************
  
  
  ChoisirImprimante:
  
  If PrintRequester()     ;boite de dialogue choix imprimer
  
    printer_DC.l = StartDrawing(PrinterOutput()) ;sélectionne le pilote imprimante choisi
    LargeurPage_mm = GetDeviceCaps_(printer_DC,#HORZSIZE)
    HaureurPage_mm = GetDeviceCaps_(printer_DC,#VERTSIZE)
    LargeurPage_px = PrinterPageWidth()
    HaureurPage_px = PrinterPageHeight()
    Un_mm_px.f = LargeurPage_px/LargeurPage_mm ; 1 milimétre = en pixels
    Marge = Un_mm_px*10 ; donc la marge des 4 cotés de la page sera de 10 mm
   
  EndIf
   
    Return
  
  
  ;*******************************************************************************
  ; creation de 'image pour imprimante  ,,,,,,,????? NE FONCTIONNE PAS ???????
  ;*******************************************************************************
   
 image_imprime:
   
   If CreateImage(#Image_2,  LargeurPage_px, HaureurPage_px) ;image imprimante
      
      
      StartDrawing(ImageOutput(#Image_2))
  
      FrontColor(RGB(255,255,255))  ;fixe couleur a blanc
     
      For k=0 To HaureurPage_px   ;les lignes et la boucle sont calculées en fonction du papier
      Line(0, k,  LargeurPage_px, 0 ) ;rempli l'image de ligne blanche donc fond blanc
      Next
      
      FrontColor(RGB(0, 0, 0))  ;fixe couleur a noir
      
      For k=0 To HaureurPage_mm  ;les lignes et la boucle sont calculées en fonction du papier
      Line(0,Un_mm_px*k,LargeurPage_px,0) ;traçe tous les mm une ligne noir horizontale
      Next
      
      For k=0 To LargeurPage_mm  ;les lignes et la boucle sont calculées en fonction du papier
      Line(Un_mm_px*k,0,0,HaureurPage_px) ;traçe tous les mm une ligne noir verticale
      Next
     
  
      StopDrawing()
      
    EndIf
     
      Return

Publié : mar. 11/déc./2007 21:11
par RV
Salut joellevino,

je me suis penché sur ton souci et je t'ai réglé le problème de l'impression! :D

Code : Tout sélectionner

;PureBasic  (PB4Code) 



;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;PAPIER MILLIMETRE 
;la suite tracer une coube 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

;- Variables global 
;******************************************************************* 
;Variables imprimante et écran 
; 
;si aucune imprimante selectionner (annuler choisi par utilisateur dans boite dialogue choix imprimer) 
;les variables ci-dessous initialise l'imprimante par défaut 
; 
;******************************************************************* 

Global Imprimante=DefaultPrinter() ;initialise l'imprimante par defaut 

Global printer_DC.l ;sélectionne le pilote imprimante par defaut 
Global LargeurPage_mm = GetDeviceCaps_(printer_DC,#HORZSIZE);API WIN 
Global HaureurPage_mm = GetDeviceCaps_(printer_DC,#VERTSIZE);API WIN 
Global LargeurPage_px = PrinterPageWidth() 
Global HaureurPage_px = PrinterPageHeight() 
Global Un_mm_px.f = LargeurPage_px/LargeurPage_mm ; 1 milimétre = en pixels 
Global Marge = Un_mm_px*10 ; donc la marge des 4 cotés de la page sera de 10 mm 
Global zoom=4              ;cette variable pourra etre ajusté par l'utilisateur entre 4 et 10 
Global EcranX = GetSystemMetrics_ ( #SM_CXSCREEN ): ;=largeur de l'ecran API WIN 
Global EcranY = GetSystemMetrics_ ( #SM_CYSCREEN ): ;=hauteur de l'ecran API WIN 




;- Window Constants 
; 
Enumeration 
  #Window_1 

EndEnumeration 


;- Gadget Constants 
; 
Enumeration 
  #Gadget_Image_1 
  #Image_1 
  #Image_2 
  #Button_1 
  #ScrollArea_1 
EndEnumeration 



Gosub ChoisirImprimante 

Gosub CreateImage ; image créer en fonction de l'imprimante choisi 


Procedure Open_Window_1(); ouverture en mode plein écran 
If ExamineDesktops() ;l'examen du bureau doit se faire dans la procédure 
                     ;sinon l'affichage plein écran ne fonctionne pas !!! 

LargeurEcran = DesktopWidth(0) 

HauteurEcran = DesktopHeight(0) 

EndIf 
    
  If OpenWindow(#Window_1, 0, 0, LargeurEcran-5, HauteurEcran-70, "New window ( 1 )",  #PB_Window_SystemMenu |#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget ) 
    
    If CreateGadgetList(WindowID(#Window_1))   ; La liste des gadgets a été créées avec succès 
      ; Déclarez vos gadgets ici... 
      ButtonGadget(#Button_1, 10, 15, 165, 65, "Imprimer", #PB_Button_Toggle) 
      ScrollAreaGadget(#ScrollArea_1, 0, 100, LargeurEcran-10,HauteurEcran-170, (LargeurPage_px/zoom)+200, (HaureurPage_px/zoom)+200, 30) 
      SetGadgetColor(#ScrollArea_1, #PB_Gadget_BackColor, RGB(235, 207, 135)) 
      ImageGadget(#Gadget_Image_1,  0,0,  LargeurPage_px/zoom, HaureurPage_px/zoom ,ImageID(#Image_1)) 
      ;les deux gadgets ci-dessus sont crées en fontion du papier choisi 
      StringGadget(700, 650,  10,  306, 20, Str(LargeurPage_mm)) 
      StringGadget(701, 650,  50,  306, 20, Str(HaureurPage_mm)) 
      StringGadget(702, 650,  90,  306, 20, Str(LargeurPage_px)) 
      StringGadget(703, 650,  130, 306, 20, Str(HaureurPage_px)) 
      StringGadget(704, 650,  170, 306, 20, Str( Un_mm_px*HaureurPage_mm)) 
      StringGadget(705, 650,  210, 306, 20, Str( Un_mm_px*LargeurPage_mm)) 
      StringGadget(706, 650,  250, 306, 20, Str( Un_mm_px)) 
      
      StringGadget(707, 650,  290, 306, 20, Str( EcranX)) 
      StringGadget(708, 650,  330, 306, 20, Str( EcranY)) 
      
      CloseGadgetList() 
    EndIf 
  
   EndIf 


EndProcedure 



 Open_Window_1() 

  
;***************************************************************************** 
;Boucle principale du programme avec gestion des évenements 
;***************************************************************************** 


Repeat 

  Event = WaitWindowEvent() 
  
  Select Event 
  
    Case #PB_Event_Gadget 
      EventGadget = EventGadget() 
      EventType = EventType() 
      If EventGadget = #Button_1 
      ;///// ?????? NE FONCTIONNE PAS ?????????/////////// 
         Gosub image_imprime      ; pour créer l'image 2 pour imprimer 
          
          
           If StartPrinting("PureBasic Test") 
            
                If StartDrawing(PrinterOutput()) 
                   DrawImage(#Image_2, 0, 0 ) 
                    
                   StopDrawing() 
                 EndIf 
                  
               StopPrinting() 
           EndIf 
          
      EndIf 
     ;/////// jusque la ???????? 
    ; ////////////////////// 
    Case #PB_Event_CloseWindow 
      EventWindow = EventWindow() 
      If EventWindow = #Window_1 
        CloseWindow(#Window_1) 
        Break 
      EndIf 
  EndSelect 
Until Event=#PB_Event_CloseWindow
End 

 ; 
  
 ;****************************************************************************** 
 ;création de l'image pour affichage écran   (l'échelle est approximative) 
 ;******************************************************************************* 
  
  CreateImage: ;l'image est crée en fontion du papier imprimante  choisi 
  
  
  If CreateImage(#Image_1,  LargeurPage_px/zoom, HaureurPage_px/zoom) ;image écran 
      
      StartDrawing(ImageOutput(#Image_1)) 
  
      FrontColor(RGB(255,255,255))  ;fixe couleur a blanc 
      
      ;remplace ça
;      For k=0 To HaureurPage_px/zoom   ;les lignes et la boucle sont calculées en fonction du papier 
;      Line(0, k,  LargeurPage_px/zoom, 0 ) ;rempli l'image de ligne blanche donc fond blanc 
;      Next 
      ;par ça, ça revient au même
      Box(0,0,LargeurPage_px/zoom,HaureurPage_px/zoom)
      
      FrontColor(RGB(0, 0, 0))  ;fixe couleur a noir 
      
      For k=0 To HaureurPage_mm  ;les lignes et la boucle sont calculées en fonction du papier 
      Line(0,(Un_mm_px*k)/zoom,LargeurPage_px/zoom,0) ;traçe tous les mm une ligne noir horizontale 
      Next 
      
      For k=0 To LargeurPage_mm  ;les lignes et la boucle sont calculées en fonction du papier 
      Line((Un_mm_px*k)/zoom,0,0,HaureurPage_px/zoom) ;traçe tous les mm une ligne noir verticale 
      Next 
      
  
      StopDrawing() 
  
   EndIf 
  
     Return    
  
  
  ;************************************************************************************ 
  ;Choisir une imprimante 
  ;************************************************************************************ 
  
  
  ChoisirImprimante: 
  
  printer_DC.l=PrintRequester()     ;boite de dialogue choix imprimer 
  If printer_DC
;    printer_DC.l = StartDrawing(PrinterOutput()) ;sélectionne le pilote imprimante choisi 
    LargeurPage_mm = GetDeviceCaps_(printer_DC,#HORZSIZE) 
    HaureurPage_mm = GetDeviceCaps_(printer_DC,#VERTSIZE) 
    LargeurPage_px = PrinterPageWidth() 
    HaureurPage_px = PrinterPageHeight() 
    Un_mm_px.f = LargeurPage_px/LargeurPage_mm ; 1 milimétre = en pixels 
    Marge = Un_mm_px*10 ; donc la marge des 4 cotés de la page sera de 10 mm 
  EndIf 
    
    Return 
  
  
  ;******************************************************************************* 
  ; creation de 'image pour imprimante  ,,,,,,,????? NE FONCTIONNE PAS ??????? 
  ;******************************************************************************* 
    
 image_imprime: 
    
   If CreateImage(#Image_2,  LargeurPage_px, HaureurPage_px) ;image imprimante 
      
      
      StartDrawing(ImageOutput(#Image_2)) 
  
      FrontColor(RGB(255,255,255))  ;fixe couleur a blanc 
      
      Box (0,0,LargeurPage_px,HaureurPage_px)
      
      FrontColor(RGB(0, 0, 0))  ;fixe couleur a noir 
      
      For k=0 To HaureurPage_mm  ;les lignes et la boucle sont calculées en fonction du papier 
      Line(0,Un_mm_px*k,LargeurPage_px,0) ;traçe tous les mm une ligne noir horizontale 
      Next 
      
      For k=0 To LargeurPage_mm  ;les lignes et la boucle sont calculées en fonction du papier 
      Line(Un_mm_px*k,0,0,HaureurPage_px) ;traçe tous les mm une ligne noir verticale 
      Next 
      
  
      StopDrawing() 
      
    EndIf 
      
      Return 
Bien-sûr moi j'aurais fait autrement...mais bon... 8) :D
Je te laisse regarder là ou j'ai modifié...pas grand chose en fait, c'est surtout concernant ton printer_DC! :wink:
Tu as d'autres soucis à gérer, genre tes gadgets ainsi que ton papier millimétré que tu veux imprimer, car tu traces des lignes (Line()) qui n'ont qu'une largeur de 1, mais 1/6675 (6675 c'est ma définition imprimante) tend plus vers le 0 que le 1, donc ne trace rien! :?

Pour d'autres question...balance...si j'ai le temps je te répondrai! :D :wink:

Imprimer une image

Publié : mer. 19/déc./2007 21:16
par joellevino
BONJOUR RV

MERCI pour ta réponse

mes remerciements sont tardif mais j'étais en panne de PC

j'étudie ta réponse

A bientôt sur le forum je suis débutant je prend des exemples que j'adapte si je les comprend y compris pour les API WIN