Newsgroup: it.comp.lang.visual-basic
Titolo: Come ti ruoto il FONT!!

Sto facendo un programmino che fra le altre cose stampa una copertina per un
CD partendo da una lista M3U... Solo che... Come diavolo faccio a stampare
il bordino laterale? Dovrei ruotare il font di 90° prima in un senso poi
nell'altro...
Per ora ho risolto il problema con un metodo vergognoso (Ho preso un font e
carattere per carattere l'ho ruotato, poi ho fatto una tabella... mi
vergogno a parlarne, mi sento un programmatore fallito...)...
Comunque chi mi può dare una dritta?
P.S.= Non si può cambiare l'orientamento di un foglio durante la stampa
software (se no era troppo semplice!)

 wrote in message
8drsns$2el$1...@serv1.albacom.net...


Io ti suggerirei L'Api CreateFont
Trovi un esempio su 
http://members.xoom.it/CesareRizzi
l'esempio ti mostra come scrivere il testo con qualsiasi angolazione
Ciao




Usando opportunamente la funzione TextOut (API di Win) è possibile ruotare
un font (suppongo solo truetype).
Ecco un esempio che dovrebbe funzionare: presuppone che si conosca il device
context dell'oggetto sul quale si deve stampare:
Public 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(LF_FACESIZE) As Byte
End Type
Public Const OBJ_FONT = 6
Declare Function GetCurrentObject Lib "gdi32" (ByVal HDC As Long, ByVal
uObjectType As Long) As Long
Declare Function GetObjectWin Lib "gdi32" Alias "GetObjectA" (ByVal hObject
As Long, ByVal nCount As Long, lpObject As Any) As Long
Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA"
(lpLogFont As LOGFONT) As Long
Declare Function SelectObject Lib "gdi32.dll" (ByVal HDC As Long, ByVal
hObject As Long) As Long
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
Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As
Long
Public Function TextRotate(HDC As Long, Text As String, DegreesTenths As
Long, XPixel As Long, YPixel As Long) As Boolean
   On Error Goto ErrHndl
   Dim hfnt As Long, hfntPrev As Long
   Dim plf As LOGFONT
   hfnt = GetCurrentObject(HDC, OBJ_FONT)
   If hfnt = 0 Then
      Err.Raise 20000, , "GetCurrentObject=NULL"
   End If
   If GetObjectWin(hfnt, Len(plf), plf) = 0 Then
      Err.Raise 20001, , "GetObject=NULL"
   End If
   plf.lfEscapement = DegreesTenths
   hfnt = CreateFontIndirect(plf)
   hfntPrev = SelectObject(HDC, hfnt)
   If TextOut(HDC, XPixel, YPixel, Text, Len(Text)) = 0 Then
      Err.Raise 20002, , "TextOut=NULL"
   End If
Leave:
   Text_Rotate = True
Quit:
   If hfntPrev Then
      SelectObject HDC, hfntPrev
   End If
   If hfnt Then
      DeleteObject hfnt
   End If
   Exit Function
ErrHndl:
   TextRotate = False
   Goto Quit
End Function
----------------------------------------------------------------------
Stefano Minardi
Zetesis: 
zet...@mclink.it
----------------------------------------------------------------------
