Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Sub Command1_Click() Dim toto As Integer, titi1 As Integer, titi2 As Integer Picture1.ScaleMode = 7 Picture2.ScaleMode = 7 Picture1.ScaleWidth = 6 Picture1.ScaleHeight = 3 Picture1.ScaleWidth = 8 Picture1.ScaleHeight = 2 Picture1.PaintPicture Image1, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight Picture2.PaintPicture Image1, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight End Sub
Private Sub Command1_Click() Me.ScaleMode = 7 Picture1.ScaleMode = 7 Picture2.ScaleMode = 7 Picture1.Width = 6 Picture1.Height = 6 Picture2.Width = 8 Picture2.Height = 2 Picture1.PaintPicture Image1, 0, 0, Picture1.Width, Picture1.Height Picture2.PaintPicture Image1, 0, 0, Picture2.Width, Picture2.Height End Sub
Option Explicit
Private Sub Command1_Click()
Dim dispositif As Object, L As Single, H As Single, DL As Single, DH As Single, K As Double, f_image As String
Dim margeg As Single, marged As Single, margeh As Single, margeb As Single, large As Single, haut As Single
Set dispositif = Picture1 ' çà, c'est pour tes tests. Remplace ensuite par Printer
' et maintenant : les marges que tu as ( si impri) ou définis (si sur picturebox)
' ces marges doivent être en unités logiques (centimètres si le scalemode du dispositif
' de sortie est en centimètres, par exemple
' les g, d, h, et b après marge pour désigner les marges gauche, droite, haute et basse
margeg = 0.2: marged = 0.32: margeh = 0.1: margeb = 0.1
With dispositif ' ====>> Qui sera donc celui désigné plus haut (pictur1 ici, puis printer en réel)
.ScaleMode = vbCentimeters ' puisque tu veux une échelle de sortie en centimètres
f_image = "d:\bimaanc.bmp" ' ===============>> mets là ton image à toi
Image1.Picture = LoadPicture(f_image)
'A CHOISIR (commente ce que tu ne veux pas
' si tu veux calculer depuis le fichier image d'origine
'L = ScaleX(LoadPicture(f_image).Width, vbHimetric, .ScaleMode) ' décomente si c'est ton choix
'H = ScaleY(LoadPicture(f_image).Height, vbHimetric, .ScaleMode) ' décomente si c'est ton choix
' si tu veux calculer depuis l'image déjà affichée
L = ScaleX(Image1.Picture.Width, vbHimetric, .ScaleMode) ' comente si tu préfères depuis fichier
H = ScaleY(Image1.Picture.Height, vbHimetric, .ScaleMode) ' comente si tu préfères depuis fichier
K = H / L
' déduisons les marges, puisque non imprimables sur ton imprimante
large = .ScaleWidth - margeg - marged
haut = .ScaleHeight - margeh - margeb
DL = large
DH = DL * K
If DH > haut Then
DH = haut
DL = DH / K
End If
'observe bien ces utilisations de PaintPicture. Elles sont plus complètes
'et gèrent plus la sortie que la tienne
' comente en fonction de ce que tu ne veux pas
'a) si tu veux centrer le résultat
.PaintPicture Image1, (.ScaleWidth - DL) / 2, (.ScaleHeight - DH) / 2, DL, DH, 0, 0, L, H
'b) si tu préfères que le résultaty soit au début de la surface disponible
'.PaintPicture Image1, margeg, margeh, DL, DH, 0, 0, L, H
End With
End Sub
Printer.PaperSize = vbPRPSUsersans message d'erreur !
Option Explicit
Private Sub Form_Load()
Me.Caption = App.EXEName
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
Image1.Picture = LoadPicture("D:\Mamy Photos\Lespinasse\dsc01959.jpg")
Call Imprime0
End Sub
Sub Imprime0()
Dim L As Single, H As Single, DL As Single, DH As Single, K As Double
Dim margeg As Single, marged As Single, margeh As Single, margeb As Single, large As Single, haut As Single
Printer.ScaleMode = vbCentimeters
L = ScaleX(Image1.Picture.Width, vbHimetric, Printer.ScaleMode)
H = ScaleY(Image1.Picture.Height, vbHimetric, Printer.ScaleMode)
K = H / L
'margeg = 0.2: marged = 0.32: margeh = 0.1: margeb = 0.1
margeg = 0: marged = 0
large = Printer.ScaleWidth - margeg - marged
haut = Printer.ScaleHeight - margeh - margeb
DL = large
DH = DL * K
If DH > haut Then
DH = haut
DL = DH / K
End If
Printer.PaintPicture Image1, margeg, margeh, DL, DH, 0, 0, L, H
Printer.EndDoc
End Sub
margeg = 0: marged = 0ne correspond pas à ce que ton imprimante a !