dan93190
Messages postés33Date d'inscriptionmercredi 4 juillet 2007StatutMembreDernière intervention19 août 2008
-
9 juil. 2008 à 09:01
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
9 juil. 2008 à 10:33
bonjour à tous,
J'ai une picturebox qui contient plusieurs contrôls: labels, lignes, shapes,...
quand j'imprime ma picturebox, les contrôls n'apparaissent pas ce qui est tout à fait normal.
J'ai donc deux options pour imprimer un à un mes controls:
- utiliser printer.line, printer.print
- utiliser picture1.line, picture1.print
Seulement, dans les deux cas, les textes s'impriment sur une seule ligne alors que les textes qui sont dans mes labels sont sur plusieurs lignes (et les sauts de ligne sont donc géré automatiquement).
Y a-t-il une méthode toute faite ou est-ce que je dois bidouiller pour sauter moi-même les lignes?
Je préfèrerais la première solution car les paramètres des labels sont tous différents (longueur de la zone, largeur de la zone, taille de police du texte, nombre de caractère du texte)
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Public Const DT_BOTTOM = &H8
Public Const DT_CALCRECT = &H400
Public Const DT_CENTER = &H1
Public Const DT_EXPANDTABS = &H40
Public Const DT_EXTERNALLEADING = &H200
Public Const DT_LEFT = &H0
Public Const DT_NOCLIP = &H100
Public Const DT_NOPREFIX = &H800
Public Const DT_RIGHT = &H2
Public Const DT_SINGLELINE = &H20
Public Const DT_TABSTOP = &H80
Public Const DT_TOP = &H0
Public Const DT_VCENTER = &H4
Public Const DT_WORDBREAK = &H10
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 juil. 2008 à 10:33
utile de conserver les labels, si, plus pro, tu utilises DrawText ?
DT_TOP + DT_CENTER
ne JAMAIS utiliser +, mais bien Or:
DT_TOP Or DT_CENTER
Ret n'est pas testé ? alors n'ajoute pas cette variable.
Len(Label1(i).Caption)
pas obligatoire, tu peux mettre -1 (lire doc sur cette API)
les APIs fonctionnent en pixels, pour les coordonnées, change le ScaleMode de ta Form, ca roulera..
ajoute enfin un Picture2.Refresh...
au final, j'ai corrigé, et ca me donne le code ci-dessous:
Private Sub Command1_Click()
Dim tR As RECT
Dim oLbl As Label
Picture2.AutoRedraw = True
For Each oLbl In Label1
With tR
.Left = oLbl.Left
.Top = oLbl.Top
.Bottom = .Top + oLbl.Height
.Right = .Left + oLbl.Width
End With
DrawText Picture2.hdc, oLbl.Caption, -1, tR, DT_TOP Or DT_CENTER Or DT_WORDBREAK
Next oLbl
Picture2.Refresh
End Sub