IMPRIMER UNE IMAGE
Publié : ven. 02/nov./2007 17:58
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
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