Petite question... [Résolu]

Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 29 août 2005 à 09:29 - Dernière réponse : violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention
- 6 sept. 2005 à 17:06
bonjour à tous,



voila, j'ai un petit problème, j'ai cherché sur le forum mais je n'ai pas trouvé les réponses que je voulais. Voici mon pb :

J'ai une PictureBox (qui s'appelle Principale) dans laquelle j'ai une
autre PictureBox (qui s'appelle Dessin) et des labels contenus dans des
frames. Dans ma picturebox Dessin, je trace des lignes et des cercles
(jusque là rien d'exceptionnel). Maintenant je voudrais pouvoir
imprimer ma PictureBox Principale avec une imprimante et je voudrais
que, avant cela, mes arrière-plans qui sont gris soient passés en blanc
pendant l'impression (pour ne pas que ça me bouzille une cartouche au
bout de trois impressions lol ). Etant donné que je suis stagiaire dans
une entreprise, il y a plusieurs imprimantes qui sont accessibles
depuis mon ordi, j'aimerais que votre solution me permette d'ouvrir la
boite de dialogue classique que l'on voit sous Windows (genre dans word
ou excel...) pour pouvoir choisir sur quelle imprimante je veux que ça
imprime.

Le problème c'est que je suis débutant en VB et je ne connais pas les
syntaxes. J'ai vu sur le forum que si on utilise Dessin.paintpicture ça
n'imprime pas les circle et les line mais que ça n'imprime que l'image
de fond de la PictureBox.

Ce serait vraiment cool si qqun pouvait m'aider, je suis en stage et il
me reste même pas 3 semaines pour finir mon prog... chui trop en galère
!!!



Merci beaucoup à tous ceux qui auront une petite idée



Cédric



PS : Si vous avez une réponse à me donner, pourriez-vous me donner un
petit exemple (je sais je demande beaucoup) pour que je vois la syntaxe
parce que je ne maitrise pas du tout... lol

@ bientôt
Afficher la suite 

24 réponses

violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 29 août 2005 à 11:09
+3
Utile
Violent Ken

Aahh ! Un problème bien posé...
Je vais répondre, en partie pour l'instant.
Voici un bout de code qui te permet d'imprimer du texte (et oui, faudra adapter à ta picture) en choisissant l'imprimante et le nombre de copies etc...
Pour ton problème sur les picturebox, je vais réfléchir, mais je ne sais pas si je trouverais.
En attendant, copie le code qui suit dans un fichier bloc-notes, enregistre en *.frm, créé un nouveau programme, appuie sur ctrl+D et ajoute cette form.
@+

VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx"
Begin VB.Form Form_print
BackColor = &H00FFC0C0&
BorderStyle = 3 'Fixed Dialog
Caption = "Paramètres d'impression"
ClientHeight = 1260
ClientLeft = 45
ClientTop = 435
ClientWidth = 4365
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Icon = "Form_print.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 1260
ScaleWidth = 4365
ShowInTaskbar = 0 'False
StartUpPosition = 2 'CenterScreen
Begin VB.CommandButton Command1
Caption = "annuler"
Height = 255
Index = 2
Left = 2760
TabIndex = 7
Top = 840
Width = 1215
End
Begin VB.CommandButton Command1
Caption = "choisir la police"
Height = 255
Index = 1
Left = 1440
TabIndex = 6
Top = 840
Width = 1215
End
Begin VB.CommandButton Command1
Caption = "imprimer..."
Height = 255
Index = 0
Left = 120
TabIndex = 5
Top = 840
Width = 1215
End
Begin MSComDlg.CommonDialog CommonDialog1
Left = 3360
Top = 360
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin VB.OptionButton Option2
BackColor = &H00FFC0C0&
Caption = "Paysage"
Height = 255
Left = 2280
TabIndex = 4
Top = 480
Width = 975
End
Begin VB.OptionButton Option1
BackColor = &H00FFC0C0&
Caption = "Portrait"
Height = 255
Left = 1320
TabIndex = 3
Top = 480
Value = -1 'True
Width = 975
End
Begin VB.Label Label3
BackColor = &H00FFC0C0&
Caption = "Orientation :"
Height = 255
Left = 120
TabIndex = 2
Top = 480
Width = 975
End
Begin VB.Label B
AutoSize = -1 'True
BackColor = &H00FFC0C0&
Caption = "Exemple"
BeginProperty Font
Name = "Tahoma"
Size = 9.75
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 240
Left = 1680
TabIndex = 1
Top = 120
Width = 720
End
Begin VB.Label Label1
BackColor = &H00FFC0C0&
Caption = "Police d'impression :"
Height = 255
Left = 120
TabIndex = 0
Top = 120
Width = 1455
End
End
Attribute VB_Name = "Form_print"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'form qui gère les paramètres d'impression & l'impression


Dim ORI 'orientation
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Const PD_RETURNDC = &H100
Private Const PD_RETURNIC = &H200
Private Const NULL_PTR = 0&


Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Long
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Type DEVNAMES
wDriverOffset As Integer
wDeviceOffset As Integer
wOutputOffset As Integer
wDefault As Integer
End Type
'renommé pour différencier avec la fonction PrintDlg
Private Type InformationImprimante ' PRINTDLG
lStructSize As Long
hwndOwner As Long
hDevMode As Long
hDevNames As Long
hdc As Long
flags As Long
nFromPage As Integer
nToPage As Integer
nMinPage As Integer
nMaxPage As Integer
nCopies As Integer
hInstance As Long
lCustData As Long
lpfnPrintHook As Long
lpfnSetupHook As Long
lpPrintTemplateName As String
lpSetupTemplateName As String
hPrintTemplate As Long
hSetupTemplate As Long
End Type


Private Declare Function PrintDlg Lib "comdlg32.dll" Alias "PrintDlgA" (pPrintdlg As InformationImprimante) As Long


Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long


Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)


Private Sub Command1_click(Index As Integer)
If Index = 1 Then
'choisir la police
'ouverture de la boîte de dialogue de la police d'impression
'changement de police
CommonDialog1.CancelError = True
CommonDialog1.FontBold = False
CommonDialog1.FontItalic = False
CommonDialog1.FontName = "Tahoma"
CommonDialog1.FontSize = 10
CommonDialog1.Color = RGB(0, 0, 0)
CommonDialog1.FontStrikethru = False
CommonDialog1.FontUnderline = False
CommonDialog1.CancelError = True
CommonDialog1.CancelError = True
CommonDialog1.flags = cdlCFEffects Or cdlCFForceFontExist Or cdlCFScreenFonts
On Error GoTo 91
CommonDialog1.ShowFont
On Error Resume Next
'changement de police du label d'essai
Form_print.B.ForeColor = CommonDialog1.Color
Form_print.B.FontSize = CommonDialog1.FontSize
Form_print.B.FontName = CommonDialog1.FontName
Form_print.B.FontBold = CommonDialog1.FontBold
Form_print.B.FontItalic = CommonDialog1.FontItalic
Form_print.B.FontStrikethru = CommonDialog1.FontStrikethru
Form_print.B.FontUnderline = CommonDialog1.FontUnderline
Form_print.B.Refresh
91
End If
If Index = 0 Then
'impression
On Error Resume Next
'choix de l'imprimante
Dim retourAPI As Long
Dim imprimanteSelectionne As InformationImprimante
Dim infoDevice As DEVMODE
Dim nomImprimante As String
Dim adresseStructureDEVMODE As Long
Dim imprimante As Printer
retourAPI = 0
' Initialisation de la structure d'échange
imprimanteSelectionne.lStructSize = Len(imprimanteSelectionne)
imprimanteSelectionne.hDevMode = NULL_PTR
imprimanteSelectionne.hDevNames = NULL_PTR
imprimanteSelectionne.flags = PD_RETURNIC
' Ouverture du CommonDialog via l'API PrintDlg
retourAPI = PrintDlg(imprimanteSelectionne)


' Retour de l'API si Annulé -> Retour = 0
Select Case retourAPI

Case 0 'Abandon
Exit Sub

Case 1 ' OK
adresseStructureDEVMODE = GlobalLock(imprimanteSelectionne.hDevMode)
Call CopyMemory(infoDevice, ByVal adresseStructureDEVMODE, Len(infoDevice))

nomImprimante = Left(infoDevice.dmDeviceName, InStr(1, infoDevice.dmDeviceName, Chr(NULL_PTR)) - 1)
For Each imprimante In Printers
If nomImprimante = imprimante.DeviceName Then
Set Printer = imprimante
Exit For
End If
Next
Case Else 'erreur
MsgBox "Une erreur est survenue", vbCritical, "Impression"
Exit Sub

End Select
' Ecriture du texte en utilisant l'objet Printer
Call NexSett 'attribution des settings à Printer


'maintenant on imprime (ici ce n'est que 10 fois le texte "le texte à imprimer")
For y = 1 To infoDevice.dmCopies 'nombre de copies
a = 10 'le_nombre de foix à imprimer "le texte à imprimer"
For x = a To 1 Step -1
Printer.Print "le texte à imprimer"
Next
Printer.EndDoc
Printer.NewPage
Call NexSett 'attribution des settings à Printer
Next y



End If


If Index = 2 Then Unload Me
End Sub


Public Sub NexSett()
'attribution des settings à Printer
If ORI Then
Printer.Orientation = vbPRORPortrait
Else
Printer.Orientation = vbPRORLandscape
End If
'paramètres d'impression de la police
Printer.ColorMode = vbPRCMColor 'en couleurs
Printer.ForeColor = CommonDialog1.Color
Printer.FontName = CommonDialog1.FontName
Printer.FontItalic = CommonDialog1.FontItalic
Printer.FontBold = CommonDialog1.FontBold
Printer.FontSize = CommonDialog1.FontSize
Printer.FontStrikethru = CommonDialog1.FontStrikethru
Printer.FontUnderline = CommonDialog1.FontUnderline
End Sub


Private Sub Form_Load()
ORI = 1 'paramètre d'orientation
End Sub


Private Sub Option1_Click()If Option1.Value False Then ORI 0 Else ORI = 1
End Sub


Private Sub Option2_Click()If Option2.Value True Then ORI 0 Else ORI = 1
End Sub
Cette réponse vous a-t-elle aidé ?  
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 29 août 2005 à 12:04
+3
Utile
Violent Ken

Hum. Moi aussi je suis en VB6.
Est ce que tu possède le controle Commondialog ? (c'est le controle qui affiche les boîtes de dialogue)
Si tu ne le possède pas, le problème vient de là (mais normalement tout le monde l'a)
Si tu le possède, ajoute en un sur ta form et laisse son nom par défaut (Commondialog1), et çà devrait marcher.

En tout cas, mon programme ne t'aideras pas pour ton problème sur les picturebox (je vais voir si je trouve, mais pour l'instant je ne sais pas encore), mais il te diras comment afficher et utiliser la boîte de dialogue "choix de l'imprimante" comme dans excel ou word.
En espérant que çà marche chez toi
@+
Cette réponse vous a-t-elle aidé ?  
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 29 août 2005 à 15:50
+3
Utile
Violent Ken

Avec une ImageBox, tu ne peux pas faire de dessin (line, circle...), contrairement à une picturebox.
Pour que les dessins que tu as fait restent dans l'image, qu'ils se "sauvegardent" en quelque sorte, tu as juste à mettre Picture1.AutoRedraw = True (cela n'est pas possible avec les ImageBox, puisque tu ne peux pas déssiner dedans)

Et maintenant un p'tit code pour prendre une impression écran :

Copie çà dans ta form

Private Declare Function BitBlt Lib "gdi32.dll" ( _
ByVal hDestDC As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal dwRop As Long) As Long


Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long


Private Declare Function GetDC Lib "user32.dll" ( _
ByVal hwnd As Long) As Long


Private Const SRCCOPY As Long = &HCC0020


Public Sub ScreenShot()
Picture1.AutoRedraw = True
Picture1.Width = Screen.Width
Picture1.Height = Screen.Height
BitBlt Picture1.hDC, 0&, 0&, Screen.Width, Screen.Height, GetDC(GetDesktopWindow()), 0&, 0&, SRCCOPY
Picture1.Refresh
End Sub

Ensuite pour prendre un screenshot et le mettre dans une picture (picture1 dans l'exemple), tu n'as qu'à metttre le code :

ScreenShot

Et voilà, @+
Cette réponse vous a-t-elle aidé ?  
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 6 sept. 2005 à 12:20
+3
Utile
Violent Ken

Effectivement, tu es limité par la taille des feuilles A4, et tu es donc obligé de redimensionner ta picturebox.
Alors je te conseille de la redimensionner proportionnelement à la taille de la capture. Si la capture est en 1024*768, c'est alors du 4/3 (1024/768=4/3) et la même image redimensionnée en 800*600 (800/600=4/3) sera meilleure qu'une image en 840*620 (840/620=1.3548), bien qu'elle soit plus petite
Il faut donc calculer la taille maximale que peux avoir ton image sur une feuille A4, tout en ayant les proportions 4/3.

Et pour revenir à la capture d'écran, c'est la STRICTE reproduction de ce qui est à l'écran: quand tu jouais à Warcraft III, ta résolution devais être inférieure à la résolution de ton bureau : tu étais par exemple en 800*600 au mieux de 1024*768 (réglage fait par le jeu en fonction de tes performances graphiques).
@+
Cette réponse vous a-t-elle aidé ?  
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 6 sept. 2005 à 12:43
+3
Utile
Violent Ken

Bien sur !

largeur = Screen.width \ Screen.TwipsPerPixelX
hauteur = Screen.Height \ Screen.TwipsPerPixelY

Et pour la changer, voilà un code (pas de moi mais de qqun sur ce site) qui te permet de le faire

Dans un MODULE :
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Option Explicit


Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long


Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DM_BITSPERPEL = &H40000
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1
Private Const CDS_TEST = &H4
Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DISP_CHANGE_RESTART = 1
Private Const ENUM_CURRENT_SETTINGS = &HFFFF - 1
Private Const WM_DEVMODECHANGE = &H1B
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_DESKTOP = 0


'le type DEVMODE permettant de lire et/ou de modifier tous les paramètres
Public Type DEVMODE
dmDeviceName As String * 32
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * 32
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type


Dim dmEcran As DEVMODE
Dim dmType As DEVMODE


Public Function CurrentDisplaySettings() As DEVMODE
'le DEVMODE, qui permet de savoir la résolution etc...
'exemple: Resolution en x =CurrentDisplaySettings.dmPelsWidth
Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, CurrentDisplaySettings)
End Function


Public Sub ResolutionEcran(sgWidth As Long, sgHeight As Long, FrequenceRefresh As Long, QColor)
'la fonction qui gère le changement d'affichage
dmEcran.dmSize = LenB(dmEcran)
Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, dmEcran)
dmEcran.dmPelsWidth = sgWidth
dmEcran.dmPelsHeight = sgHeight
dmEcran.dmDisplayFrequency = FrequenceRefresh 'en Hz
'4 : 16 colors
'8 : 256 colors
'16 : High Color
'24 : True Color
'32 : True Color
dmEcran.dmBitsPerPel = QColor
Call ChangeDisplaySettings(dmEcran, CDS_UPDATEREGISTRY)
Call SendMessage(HWND_BROADCAST, WM_DEVMODECHANGE, 0, 0)
Call SendMessage(GetDesktopWindow, WM_DEVMODECHANGE, 0, 0)
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Et pour l'utlisation, voici un exemple :

'mettre la résolution en 1024*768
ResolutionEcran 1024, 768, CurrentDisplaySettings.dmDisplayFrequency, CurrentDisplaySettings.dmBitsPerPel

A noter que cette fonction peux également changer la résolution de l'écran (d'où l'argument CurrentDisplaySettings.dmDisplayFrequency pour conserver la fréquence actuelle)

@+
Cette réponse vous a-t-elle aidé ?  
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 29 août 2005 à 11:34
0
Utile
Salut Violent Ken, déjà merci pour ton aide, ça fait plaisir de voir une réponse aussi complète.

Ensuite, j'ai fait ce que tu m'as dit de faire et il me met :

"Erreurs lors du chargement. Consultez 'E:\AKIRA\CEDRIC\IMPRES~1.log' pour plus de détails"



J'ai consulté le fichier .log donc et il y a marqué :

"Ligne 55: La classe MSComDlg.CommonDialog du contrôle CommonDialog1 n'est pas une classe de contrôle chargée."



Je sais pas si ça te dit qqch. En tous cas, la form s'affiche bien
quand même (même après le message d'ereur) avec 3 CommandButton, 2
OptionButton et une TextBox, le tout sur fond violet. Lorsque j'exécute
ton prog, il me met un message d'erreur dès que j'appuie sur un des 3
boutons :

"Erreur de compilation :

Méthode ou membre de donnés introuvable"



en me surlignant dans le code "CommonDialog1.CancelError = True"

Voila



dommage, ça avait l'air bien complet, si tu as une idée du problème
qu'il peut y avoir fais moi signe steup, chui trop en galère et tout ce
que je trouve c'est des gens qui disent d'utiliser printer.paintpicture
mais je n'arrive pas à trouver un seul post où la syntaxe soit bien
expliqée...



Ah oui, je suis en VB6 au fait, je sais pas si ça peut avoir une importance (je suppose que oui).



Merci pour ton aide en tous cas



Cédric
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 29 août 2005 à 12:13
0
Utile
Effectivement ça fonctionne maintenant.

J'aurais juste une autre question : ma picturebox Principale fait
quasiment tout l'écran (ma form est en plein écran et ma picturebox
prend quasiment toute la place), tu crois qu'il y a moyen de
redimensionner le tout pour que toute ma picturebox soit imprimée
exactement comme elle est à l'écran (à part avec les images de fond en
blanc) et qu'elle rentre exactement dans une feuille A4 ???

(je sais pas si je me fais bien comprendre). En fait j'ai peur que, si
je demande d'imprimer ma PictureBox principale telle qu'elle, étant
donné qu'elle est grande, il me l'imprime sur 4 feuilles A4. Tu vois ce
que je veux dire ?



Merci pour ton aide en tous cas



@ bientôt



Cédric
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 29 août 2005 à 12:34
0
Utile
Violent Ken

Il faudrait connaître les dimensions maximum qui peuvent être imprimées sur une page A4 et donner ces dimensions à une imagebox (avec la propriété stretch=true) et imprimer l'imagebox, plutôt qu'une picturebox.
L'imagebox (avec stretch=true) ne se resize pas à la dimension de la photo, mais c'est la photo qui se resize à la dimension de l'imagebox.
@+
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 29 août 2005 à 15:23
0
Utile
Re salut Violent Ken



Ce que tu m'as passé fonctionne super bien mais en fait, comme tu me
l'as dit, je ne peux imprimer que du texte brut avec et le mettre en
forme. Moi ce que je voudrais c'est faire une impression écran en gros.
c'est à dire qu'au lieu de m'imprimer le contenu de mes TextBox, il
m'imprime carrément les TextBox avec le cadre, la couleur de fond, le
text contenu etc...etc... Autre chose : le problème des PictureBox (je
sais pas si c'est pareil avec les ImageBox) c'est que, dès que tu
ouvres une fenêtre devant (par exemple tu fais 2 fois alt+tab pour
changer de fenetre et revenir), les line et circle que tu avais faits
ont disparu donc, quand j'ouvre la form que tu m'as passée, la partie
du dessin qui se trouvait derrière est effacée. Il faudrait donc que je
trouve le moyen de sauvegarder quelque part le dessin de ma PictureBox.


Tu crois que ça change qqch si je travaille avec des ImageBox ?



En fait, il faudrait que je trouve le moyen de faire une impression écran et ce serait parfait



Merci pour ton aide en tous cas.



@ très bientôt j'espère (j'ai trop besoin d'aide, lol)



Cédric
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 29 août 2005 à 15:46
0
Utile
C'est encore moi,



j'ai peut-être trouvé qqch sur ce lien.



C'est un gars qui a fait un programme qui permet de faire des
impressions écran... j'ai trouvé sur le site de VBfrance aussi. Je vais
regarder son code pour voir si j'arrive à comprendre comment il s'y
prend. Si tu as 5 minutes encore à m'accorder, tu peux y jeter un coup
d'oeil aussi steup pour m'aider à comprendre comment sélectionner LA
partie de l'écran que je veux enregistrer et imprimer... merci beaucoup



@++



Cédric
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 29 août 2005 à 16:32
0
Utile
Je comprend pas du tout comment ça fonctionne mais
ça fonctionne quasi parfaitement. ya juste un petit bug : si ma
picture1 fait 2cm sur 2cm avec un fond gris, je crois comprendre que le
prog la redimmensionne à la dimension de l'image et qu'après il "met"
l'image dedans. Le seul truc c'est que, en haut à gauche de
l'impression écran, il y a de nouveau ma picture1 de 2cm x 2cm avec un
fond gris donc ce qu'il y a dans l'image qui résulte de l'impression
écran dans les 4cm² en haut à gauche c'est un carré gris (je sais pas
si je me suis bien fait comprendre). En tous cas pour ça il suffit de
faire une picture1 qui fasse1 pixel de haut et 1 pixel de large et ça
se verra plus (c'est de la bidouille mais ça marche).



Ben la dernière étape maintenant c'est de faire en
sorte que ce soit l'image qui se redimensionne à la taille de la
picturebox et pas l'inverse, puis de l'imprimer !!! voilou.



Merci très boucou boucou,

je continue de chercher de mon côté, fais_moi signe dès que tu as du new !!!



Cédric
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 29 août 2005 à 18:01
0
Utile
Salut Violent Ken,



merci pour ton aide mais je ce serait vraiment cool si tu pouvais me filer un dernier coup de main :

je n'arrive pas à imprimer ma picture1 une fois que l'image est dedans. je ne sais pas comment faire !!!

Help me please si tu as une idée parce que là, je galère sévère !!!



@ bientôt



Cédric



PS : si tu trouves le moyen, tu me sauves la vie...
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 29 août 2005 à 18:21
0
Utile
Violent Ken

"Ben la dernière étape maintenant c'est de faire en sorte que ce soit l'image qui se redimensionne à la taille de la picturebox et pas l'inverse"
Voilà la solution :
Tu mets ton image entière dans une picturebox nommée Picture2. Ta picture sera redimensionnée à la taille de l'image. (si elle te gênes sur ta form, tu mets picture2.visible=false)
Ensuite, tu dimensionnes ta Picture1 aux dimensions que tu veux, et pour charger l'image (contenue dans la picture2) dans la picture1 aux dimensions de la picture1, tu mets
Picture1.PaintPicture Picture2, 0, 0, Picture1.Width, Picture1.Height
Voilà !
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 29 août 2005 à 18:26
0
Utile
Violent Ken

Mon dernier message est en rapport à ton avant-dernier message (tu as posté ce dernier pendant que je tapais celui d'en haut)
Pour imprimer une image, tu fait

Printer.Print
Printer.PaintPicture Picture1.picture, 0, 0
Printer.Endoc

Voilà !
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 29 août 2005 à 18:50
0
Utile
ok, je suis plus au boulot, j'essaierai demain...

si ça marche je validerai ta réponse...



Merci pour tout, tu as vraiment été génial !!!!!



;)



Cédric



PS : Si je peux faire quoi que ce soit, fais-moi signe...
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 09:19
0
Utile
Salut ViolentKen



Désolé de ne pas avoir répondu avant, je n'avais pas accès à internet
depuis mon poste. Je suis sur un poste qui a accès à internet mais pas
pour longtemps (même pas la journée je pense). En fait il n'y a plus
qu'un dernier truc qui ne fonctionne pas :

Picture1.PaintPicture Picture2, 0, 0, Picture1.Width, Picture1.Height

mettre l'image screenshot contenue dans picture2 dans picture1

ça me marque : erreur d'execution 481 : image incorrecte

Je sais pas si tu liras ce message, sinon, au pire, je ferai un autre post.



merci pour ton aide, tu as déjà fais beaucoup, c'est la dernière ligne droite (faut que je rende mon prog la semaine prochaine).



@++



Cédric



_______________________________________

Si tout seul on va plus vite, ensemble on va plus loin
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 11:52
0
Utile
c'est bon, je sais comment faire :



Picture2.PaintPicture Picture1.Image, 0, 0, Picture2.Width, Picture2.Height, 0, 0, Picture1.Width, Picture1.Height



merci à toi Violent Ken. Peux-tu juste me dire comment il faut faire
pour augmenter la résolution du screenshot dans le code que tu m'as
passé au-dessus (si c'est possible) ?



Merci pour tout



Cédric



__________________________________________

Si tout seul on va plus vite, ensemble on va plus loin
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 6 sept. 2005 à 11:58
0
Utile
Violent Ken

Salut
Je ne pense pas que ce soit possible : la fonction Screenshot capture ce qui affiché à l'écran au format *.bmp, c'est à dire que l'image est en qualité maximale.
Tu ne peux pas (à ma connaissance) modifier la résolution de la capture, puisque c'est la résolution maximale offerte par ton écran, et la capture est la STRICTE reproduction de ton écran.

Par contre, si tu redimensionnes la picture qui contient cette image, c'est là que tu perds en qualité : si tu veux imprimer, imprime la picture à la taille de la capture d'écran (donc de l'écran).

@+
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 12:10
0
Utile
si je fais ça elle dépasse de ma feuille (ça ne rentre pas sur une
feuille A4) c'est pour ça que j'ai besoin de la redimensionner dans une
PictureBox qui, elle, rentre parfaitement sur une feuille A4. Et puis
je ne suis pas sûr que la qualité soit exactement la même que celle que
tu as à l'écran, il m'est arrivé de vouloir faire des impression écran
à partir de mon clavier quand je joue (à Warcraft III par exemple) pour
me faire des fonds d'écran sympa et la résolution n'est de loin pas
celle de l'écran...

Tant pis je me contenterai de cette qualité.

En tous cas, merci pour ton aide précieuse, et si tu trouves le moyen
de changer cette résolution, tu peux me faire signe (en PV ou sur ce
post, c'est comme tu veux)



@ plus et encore merci



Cédric



__________________________________________

Si tout seul on va plus vite, ensemble on va plus loin
Yaume1 86 Messages postés mercredi 27 juillet 2005Date d'inscription 13 septembre 2005 Dernière intervention - 6 sept. 2005 à 12:28
0
Utile
Bien vu Violent Ken



je vais essayer de faire ce que tu m'as dit mais ça me parait être une
bonne idée (et effectivement, quand je faisais des impressions écran
dans le jeu, je n'avais pas la même résolution que sur mon bureau).



Merci Beaucoup



@ bientôt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Petite question... - page 2