Page 1 sur 1

#résolu] Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 10:06
par Micoute
Bonjour à tous,

mon programme de dépistage du diabète est bientôt terminé, je peux créer une saisie, la modifier et la sauvegarder, je peux aussi créer des diagrammes divers sur l'écran, mais j'aimerais les imprimer et si je viens encore solliciter votre aide bienveillante, vous avez deviné que je ne sais pas le faire, il serait que la page soit la page soit en paysage, car j'ai posé 3 diagrammes sur 2 lignes.

Je vous fournis l'ensemble des programmes et la base de données à l'adresse suivante
https://www.dropbox.com/sh/oqmqtd89j7fc ... RuYSa?dl=0

Je vous remercie par anticipation pour votre aide précieuse à mes yeux.

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 10:58
par Ar-S
Tu as regardé du coté de printrequestr()
http://www.purebasic.com/french/documen ... er.pb.html

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 11:06
par Micoute
Si je comprends bien, ça veut dire qu'il faut que je transforme le contenu de l'écran en image ?

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 14:31
par falsam
Micoute a écrit :Si je comprends bien, ça veut dire qu'il faut que je transforme le contenu de l'écran en image ?
Pourquoi pas :wink:

Code : Tout sélectionner

;Plan de l'application
Declare Start()
Declare Capture()
Declare Exit()

Start()

Procedure Start()
  Protected Image = LoadImage(-1, #PB_Compiler_Home + "Examples\Sources\Data\PureBasic.bmp")
  
  SetGadgetFont(#PB_Default, FontID(LoadFont(-1, "", 12)))
  OpenWindow(0, 0, 0, 800, 600, "Essai de capture", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TextGadget(#PB_Any, 10, 20, 200, 24, "Un peu de texte")
  ImageGadget(#PB_Any,  10, 50, 300, 100, ImageID(Image))
  
  AddKeyboardShortcut(0, #PB_Shortcut_F4, 0) 
  
  ;Triggers
  BindEvent(#PB_Event_Menu, @Capture())
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

;Je ne sais plus de qui est cette procédure
Procedure.i CaptureScreenToImage(x.i, y.i, width.i, height.i)
  Protected TmpImage.i, srcDC.i, trgDC.i
  Protected BMPHandle.i, dm.Devmode
  
  srcDC = CreateDC_("DISPLAY", "", "", dm)
  trgDC = CreateCompatibleDC_(srcDC)
  BMPHandle = CreateCompatibleBitmap_(srcDC, width, height)
  
  RedrawWindow_(#Null,#Null,#Null,#RDW_INVALIDATE)
  
  SelectObject_( trgDC, BMPHandle)
  BitBlt_( trgDC, 0, 0, width, height, srcDC, x, y, #SRCCOPY)
  
  DeleteDC_( trgDC)
  ReleaseDC_( BMPHandle, srcDC)
  
  TmpImage.i = CreateImage(#PB_Any, width, height)
  StartDrawing(ImageOutput(TmpImage))
  DrawImage(BMPHandle, 0, 0)
  StopDrawing()
  
  DeleteDC_(trgDC)
  ReleaseDC_(BMPHandle, srcDC)
  
  ProcedureReturn TmpImage  
EndProcedure

Procedure Capture()
  Protected iMyImage.i = CaptureScreenToImage(WindowX(0), WindowY(0), WindowWidth(0) + 5, WindowHeight(0) + 30)

  SaveImage(iMyImage, "Capture.bmp")
EndProcedure

Procedure Exit()  
  End
EndProcedure
A toi d'ajuster les coordonnées de capture si tu ne veux pas avoir les bordures de la fenêtre.

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 14:37
par microdevweb
@Micoute,

Si tu a dessiner ton diagramme avec vector, alors le code est exactement le même (attention cependant au dimensions et marges de la feuille).

Tu doit juste changer (exemple si je veux placer mes élément aux millumètre.

Ne pas oublier d'appeler

Code : Tout sélectionner

PrintRequester
pour le choix d'imprimante

Code : Tout sélectionner

StartPrinting
pour démarrer l'envoi au buffer.

Code : Tout sélectionner

NewPrinterPage
pour imprimer sur une nouvelle page

Code : Tout sélectionner

StopPrinting
pour lancer l'imression

Code : Tout sélectionner

StartVectorDrawing(PrinterVectorOutput(#PB_Unit_Millimeter))

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 14:54
par falsam
Il manquait l'image de la datasection, les icones ainsi que l'include ChartGadget.pbi. Ayant ce dernier fichier, J'ai testé ton application. Beau résultat.

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 14:57
par Kwai chang caine
Falsam a écrit :;Je ne sais plus de qui est cette procédure
Apparemment de Wayne :wink:

http://forums.purebasic.com/english/vie ... 8e9#p12501
http://www.purearea.net/pb/CodeArchiv/W ... eenPart.pb

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 15:02
par falsam
Apparemment ce n'est pas la meme procédure. :wink:

@Micro : Avant de faire ton commentaire tu aurais pu prendre la peine de tester l'application de Micoute pour voir ce qui était faisable.

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 15:11
par Micoute
Merci beaucoup pour vos réponses collégiales, normalement ma page devrait être au format paysage, je vais donc travailler la dessus, vous êtes vraiment les meilleurs car je n'attendais pas de résultat avant demain, voire après le pont du 8 mai.

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 15:23
par falsam
Dans ton code Diagramme AFD50.pb supprime

Procedure Start() : supprime CanvasGadget(#Cvs_Diag, 0, 0, 1070, 870)
Il ne sert à rien.

Si tu utilises le code que j'ai proposé, tu auras peut être besoin de connaitre la marge intérieur pour ne pas imprimer la bordure de la fenêtre.

Calcul hauteur du titre, épaisseur bordure en X et Y

Code : Tout sélectionner

Caption = GetSystemMetrics_(#SM_CYCAPTION)
XBorder = GetSystemMetrics_(#SM_CXBORDER)   
YBorder = GetSystemMetrics_(#SM_CYBORDER)

Re: Comment imprimer mes diagrammes

Publié : dim. 06/mai/2018 19:12
par Micoute
Merci encore falsam pour ces bons conseils que j'ai mis en pratique.