Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Re: Ecrire vertical sur form ???

3 réponses
Avatar
TouTi
Bonsoir Jacques

Avec le code du dessous, est-il possible de récupérer le texte pour le
placer dans un contrôle
transparent???. J'ai des tracés sur la form qui ne peuvent pas être effacés.


Touti




Option Explicit

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Const LF_FACESIZE = 32

Private Const FW_DONTCARE = 0
Private Const FW_THIN = 100
Private Const FW_EXTRALIGHT = 200
Private Const FW_LIGHT = 300
Private Const FW_NORMAL = 400
Private Const FW_MEDIUM = 500
Private Const FW_SEMIBOLD = 600
Private Const FW_BOLD = 700
Private Const FW_EXTRABOLD = 800
Private Const FW_HEAVY = 900

Private Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName As String * 32
End Type

Private Declare Function CreateFontIndirect Lib "gdi32" _
Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Private Declare Function SelectObject Lib "gdi32" _
(ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function TextOut Lib "gdi32" _
Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, _
ByVal Y As Long, ByVal lpString As String, _
ByVal nCount As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" _
(ByVal hObject As Long) As Long

Private Sub Command1_Click()
DrawText Me, "Je m'appelle", 40, 40, 2700
DrawText Me, "Le Troll :-)", 40, 160, 900
End Sub

Private Sub DrawText(Pict As Object, Txt As String,_
X As Long, Y As Long, Angle As Long)
Dim hFont As Long, OldHdc As Long
Dim lf As LOGFONT, lResult As Long

Pict.ScaleMode = vbPixels
With lf
.lfHeight = 20
.lfWidth = 10
.lfEscapement = Angle
.lfWeight = FW_NORMAL
.lfItalic = 0
.lfUnderline = 0
.lfStrikeOut = 0
.lfOutPrecision = 2
.lfClipPrecision = 1
.lfQuality = 0
.lfPitchAndFamily = 0
.lfCharSet = 0
.lfFaceName = "Arial" & Chr$(0)
End With
hFont = CreateFontIndirect(lf)
OldHdc = SelectObject(Pict.hdc, hFont)

lResult = TextOut(Pict.hdc, X, Y, Txt, Len(Txt))
lResult = SelectObject(Pict.hdc, OldHdc)
lResult = DeleteObject(hFont)
End Sub


Tu peux faire varier l'angle de 0 à 3600, ça fonctionne sur les feuilles
et les PictureBox (il faut la propriété hDc).

Pour les anglophones :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_4rw4.asp


--

3 réponses

Avatar
Jacques93
Bonjour Touti,

Excuses moi, mais je ne comprends pas bien ce que tu désires. Récupérer
du texte écrit par les API directement sur une form ou un PictureBox. Si
c'est cela, je ne vois pas comment faire, a part utiliser un outil de
reconnaissance de caractères, mais avec un texte ayant subi un rotation,
c'est pas gagné...

TouTi a écrit :
Bonsoir Jacques

Avec le code du dessous, est-il possible de récupérer le texte pour le
placer dans un contrôle
transparent???. J'ai des tracés sur la form qui ne peuvent pas être effacés.


Touti




Option Explicit

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Const LF_FACESIZE = 32

Private Const FW_DONTCARE = 0
Private Const FW_THIN = 100
Private Const FW_EXTRALIGHT = 200
Private Const FW_LIGHT = 300
Private Const FW_NORMAL = 400
Private Const FW_MEDIUM = 500
Private Const FW_SEMIBOLD = 600
Private Const FW_BOLD = 700
Private Const FW_EXTRABOLD = 800
Private Const FW_HEAVY = 900

Private Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName As String * 32
End Type

Private Declare Function CreateFontIndirect Lib "gdi32" _
Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Private Declare Function SelectObject Lib "gdi32" _
(ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function TextOut Lib "gdi32" _
Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, _
ByVal Y As Long, ByVal lpString As String, _
ByVal nCount As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" _
(ByVal hObject As Long) As Long

Private Sub Command1_Click()
DrawText Me, "Je m'appelle", 40, 40, 2700
DrawText Me, "Le Troll :-)", 40, 160, 900
End Sub

Private Sub DrawText(Pict As Object, Txt As String,_
X As Long, Y As Long, Angle As Long)
Dim hFont As Long, OldHdc As Long
Dim lf As LOGFONT, lResult As Long

Pict.ScaleMode = vbPixels
With lf
.lfHeight = 20
.lfWidth = 10
.lfEscapement = Angle
.lfWeight = FW_NORMAL
.lfItalic = 0
.lfUnderline = 0
.lfStrikeOut = 0
.lfOutPrecision = 2
.lfClipPrecision = 1
.lfQuality = 0
.lfPitchAndFamily = 0
.lfCharSet = 0
.lfFaceName = "Arial" & Chr$(0)
End With
hFont = CreateFontIndirect(lf)
OldHdc = SelectObject(Pict.hdc, hFont)

lResult = TextOut(Pict.hdc, X, Y, Txt, Len(Txt))
lResult = SelectObject(Pict.hdc, OldHdc)
lResult = DeleteObject(hFont)
End Sub


Tu peux faire varier l'angle de 0 à 3600, ça fonctionne sur les feuilles
et les PictureBox (il faut la propriété hDc).

Pour les anglophones :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_4rw4.asp






--
Cordialement,

Jacques.
Avatar
TouTi
Bonjour Jacques

Excuses moi, mais je ne comprends pas bien ce que tu désires. Récupérer
du texte écrit par les API directement sur une form ou un PictureBox. Si
c'est cela, je ne vois pas comment faire, a part utiliser un outil de
reconnaissance de caractères, mais avec un texte ayant subi un rotation,
c'est pas gagné...



Non ce n'est pas de la reconnaissance de caractère, mais placer du texte à
l'orientation voulue sur un controle transparent (type image). Car j'ai déjà
sur la form une série de traits(line) que je ne voudrais ni effacer ni
cacher. (voir le post précédant concernant l'exemple appliqué à access)

GuY
Avatar
Jacques93
TouTi a écrit :
Bonjour Jacques



[...]


Non ce n'est pas de la reconnaissance de caractère, mais placer du texte à
l'orientation voulue sur un controle transparent (type image). Car j'ai déjà
sur la form une série de traits(line) que je ne voudrais ni effacer ni
cacher. (voir le post précédant concernant l'exemple appliqué à access)




La réponse que j'ai faite à X suppose d'utiliser un contrôle ayant un
Device Context (hDC), nécessaire à l'API TextOut, c'est à dire soit une
Form soit un PictureBox(le contrôle image n'en possède pas).

Tu devrais créer un nouveau fil en exposant bien ton problème, parce là
ça s'éparpille un peu. Et tu auras plus de chance de trouver quelqu'un
de pointu dans ce domaine.

--
Cordialement,

Jacques.