Imprimer label sur plusieurs lignes

Résolu
dan93190 Messages postés 33 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 19 août 2008 - 9 juil. 2008 à 09:01
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 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)

Merci d'avance pour votre aide

6 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 juil. 2008 à 09:40
voir API DrawText plutot que la methode Print
3
dan93190 Messages postés 33 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 19 août 2008
9 juil. 2008 à 10:07
Slt,

merci pour ton aide.
J'ai essayé de l'utiliser mais ça ne marche pas, rien n'apparait dans ma picturebox. Peux-tu me dire ou je me suis planté?
(Je suis allé voir dans www.vbfrance.com/codes/API-DRAWTEXT-EXPLICATIONS-EXEMPLE_2781.aspx)

'Dans un module

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

'Dans ma form
      Dim R As RECT
      Dim Ret As Long

      picture2.autoRedraw = true
      R.Bottom = Label1(i).Top + Label1(i).Height
      R.Left = Label1(i).Left
      R.Top = Label1(i).Top
      R.Right = Label1(i).Left + Label1(i).Width
      Ret = DrawText(Me.Picture2.hdc, Label1(i).Caption, Len(Label1(i).Caption), R, DT_TOP + DT_CENTER)
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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
3
dan93190 Messages postés 33 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 19 août 2008
9 juil. 2008 à 10:25
C'est bon j'ai trouvé, il faut mettre en pixel et non twip

Maintenant le texte s'affiche bien, mais pas sur plusieurs lignes. Pourquoi ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dan93190 Messages postés 33 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 19 août 2008
9 juil. 2008 à 10:27
Autant pour moi, cela marche parfaitement, j'avais pas mis DT_WORDBREAK.

Je te remercie beaucoup de m'avoir indiqué cette API.
A+
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 juil. 2008 à 10:33
bien que tu ais trouvé seul...

je te préparais une réponse, que je vais te filer tout de même
0
Rejoignez-nous