cs_Sator
Messages postés351Date d'inscriptionsamedi 7 février 2004StatutMembreDernière intervention 6 octobre 2010
-
13 janv. 2007 à 06:34
cs_Sator
Messages postés351Date d'inscriptionsamedi 7 février 2004StatutMembreDernière intervention 6 octobre 2010
-
14 janv. 2007 à 23:39
Bonjour à vous.
Ma question est la suivante :
En fait mon application va être la suivante :
Imaginons une série de colonne (5 pour être précis) à sortir sur l'imprimante....
dont j'aimerais que les titres soient centrés par rapport au colonne en dessous et en gras.
donc supposons qu'il y ai une fonction qui permette de connaître le nombre de pixel dans la longueur de la chaîne la plus longue (les données étant récupéré dans un fichier access) donc pas compliqué de connaître la chaîne la plus longue, donc la fonction que je cherche serai d'avoir le nombre de pixel de la chaîne....
Je vous remercie de l'attention que vous porter à ma question et vous remercie déjà pour vos réponse...
:)Sator :)
vicosta
Messages postés178Date d'inscriptionlundi 5 juin 2006StatutMembreDernière intervention30 novembre 2011 13 janv. 2007 à 08:14
La commande textwidth peut te donner cette largeur
Private Sub Command1_Click()
With
Me ' Printer ou PictureBox
.ScaleMode = 3
.FontName = "Arial"
.FontSize = "10"
MsgBox .TextWidth("bla bla bla")
MsgBox .TextHeight("bla bla bla")
End With
End Sub
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 13 janv. 2007 à 08:43
Si celà te dit, maintenant, d'utiliser la fonction Drawtext de la librairie User32 de l'Api de Windows, pour "dessiner" ton texte dans une picturebox avant, tout simplement, d'imprimer cette dernière, tu n'as qu'à dire et je t'enverrai un exemple complet de ce qui peut être fait (à droite, à gauche, au centre - horizontalement ou verticalement -, en haut, en bas de ta feuille, ou encore - avec les mêmes possibilités, dans une zone restreinte de ta feuille - ce qui te permettrait, par exemple, une mise en page du type "journal" - etc...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private 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
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function CopyRect Lib "user32" (lpDestRect As RECT, lpSourceRect As RECT) As Long
Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Dim Txt As String
Dim Rct As RECT
Dim Horz As HorzAlign
Dim Vert As VertAlign
MousePointer = 11: DoEvents
'on prend comme rectangle la surface client du picturebox
GetClientRect Picture1.hwnd, Rct
Txt = "Exemple de texte simple"
DessineTout Txt, Rct
Private Sub Form_Load()
Me.Font = 20
Me.Move 0, 0, 6000, 6000
Picture1.Move 100, 100, 5000, 4000
Command1.Move 100, 4500
End Sub
Private Sub DessineTout(Txt As String, Rct As RECT)
'Execute la commande dessine pour les neuf possibilités d'alignement
Dim Horz As HorzAlign
Dim Vert As VertAlign
Vert = VERT_TOP ' en haut
Horz = HORZ_LEFT: Dessine Txt, Rct, Horz, Vert 'a gauche
Horz = HORZ_CENTER: Dessine Txt, Rct, Horz, Vert 'au centre
Horz = HORZ_RIGHT: Dessine Txt, Rct, Horz, Vert 'a droite
Vert = VERT_CENTER 'au milieu
Horz = HORZ_LEFT: Dessine Txt, Rct, Horz, Vert 'a gauche
Horz = HORZ_CENTER: Dessine Txt, Rct, Horz, Vert 'au centre
Horz = HORZ_RIGHT: Dessine Txt, Rct, Horz, Vert 'a droite
Vert = VERT_BOTTOM 'en bas
Horz = HORZ_LEFT: Dessine Txt, Rct, Horz, Vert 'a gauche
Horz = HORZ_CENTER: Dessine Txt, Rct, Horz, Vert 'au centre
Horz = HORZ_RIGHT: Dessine Txt, Rct, Horz, Vert 'a droite
End Sub
Private Sub Dessine(Txt As String, Rct As RECT, Horz As HorzAlign, Vert As VertAlign)
Dim CalcRect As RECT
Dim HauteurTexte As Long
Dim Flag As Long
'on efface le picturebox
Picture1.Cls
'on dessine le rectangle
Rectangle Picture1.hdc, Rct.Left, Rct.Top, Rct.Right, Rct.Bottom
'On copie le rectangle dans un autre rectangle qui servira pour les calculs
CopyRect CalcRect, Rct
'Calcul de la Hauteur du Texte
DrawText Picture1.hdc, Txt, Len(Txt), CalcRect, DT_LEFT Or DT_WORDBREAK Or DT_CALCRECT
HauteurTexte = CalcRect.Bottom - CalcRect.Top
'On copie le rectangle dans un autre rectangle qui servira pour les calculs
CopyRect CalcRect, Rct
'calcul du flag
Select Case Horz
Case HORZ_LEFT
Flag = DT_LEFT Or DT_WORDBREAK
Case HORZ_CENTER
Flag = DT_CENTER Or DT_WORDBREAK
Case Else
Flag = DT_RIGHT Or DT_WORDBREAK
End Select
'
Select Case Vert
Case VERT_TOP
'
Case VERT_CENTER
CalcRect.Top = CalcRect.Top + ((Rct.Bottom - Rct.Top) - HauteurTexte) \ 2
Case Else
CalcRect.Top = CalcRect.Bottom - HauteurTexte
End Select
CalcRect.Bottom = CalcRect.Top + HauteurTexte
DrawText Picture1.hdc, Txt, Len(Txt), CalcRect, Flag
'on attend une seconde pour laisser le temps de voir
Sleep 1000
End Sub
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 13 janv. 2007 à 14:30
Salut,
si tu stockes tes phrases (chaines de caractères) dans des contrôles, tu peux utiliser la source de PCPT, qui mesure en pixel la longueur de la chaine, je l'ai moi même utilisé pour ma dernière source, et elle est très facile d'utilisation :