sorry it's in spanish, i'll try to transalte it...
Para rotar una etiqueta es necesario que en la capa a etiquetar tengan un campo con el angulo de rotación en grados, tambien debemos tener su centroide si queremos la etiqueta al centro...
El Código esta en VB6...
Declaren en un modulo estas llamadas a la API de Windows: ---------------------
English:
To rotate a label its needed a field that contains the angle in degrees, also u need the center of the object...
Te code is in VB6...
Declare a Module with this API Calls...
----------------------
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Public Declare Function CreateFontIndirect Lib "gdi32" Alias _ "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long Private Const LF_FACESIZE = 32
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 As String * LF_FACESIZE End Type
Despues declaren esta rutina:
------
Then declare this routine:
-------------
' --- ' Función que despliega un texto en un PictureBox, con una rotación dada ' --- ' Parámetros: ' ' hndx : Picturebox sobre el cual se dibujará el texto ' px, py : Posición en x, y del texto en PIXELES ' angulo : Angulo de inclinación del texto en GRADOS ' tam : Tamaño del texto ' color : Color del Texto en Hexadecimal ' texto : TEXTO a dibujar ' --- ' NOTA: Se utiliza el tipo de letra ARIAL, en formato REGULAR ' --- ' Carlos Meda
Public Sub PonTexto(hndx As PictureBox, Px As Double, Py As Double, Angulo As Double, tam As Integer, Color As String, texto As String) Dim font As LOGFONT Dim prevFont As Long, hFont As Long, ret As Long Dim AuxX As Double Dim AuxY As Double Dim FacXAngulo As Double Dim FacYAngulo As Double font.lfEscapement = Angulo * 10 ' rotacion en grados
font.lfFaceName = "Arial" & Chr$(0) 'Caracter nulo al final ' Windows espera que el tamaño de la fuente esté en pixeles y que sea negativo ' si estas especificando la altura de los caracteres font.lfHeight = (tam * -10) '/ Screen.TwipsPerPixelY hFont = CreateFontIndirect(font) prevFont = SelectObject(hndx.hdc, hFont) If Angulo >= 0 And Angulo <= 90 Then FacYAngulo = Angulo / 90 FacXAngulo = (90 - Angulo) / 90 AuxX = (Len(texto) / 2) * FacXAngulo * 8 AuxY = (Len(texto) / 2) * FacYAngulo * 5 hndx.CurrentX = Px - AuxX hndx.CurrentY = Py + AuxY
Else FacXAngulo = Angulo / 360 FacYAngulo = (360 - Angulo) / 90 AuxX = (Len(texto) / 2) * FacXAngulo * 6 AuxY = (Len(texto) / 2) * FacYAngulo * 12 hndx.CurrentX = Px - AuxX hndx.CurrentY = Py - AuxY
End If hndx.Print texto ' restauramos la fuente original. ret = SelectObject(hndx.hdc, prevFont) ret = DeleteObject(hFont) 'hndx.CurrentY = hndx.ScaleHeight / 2 'hndx.Print "Texto Normal"
End Sub
La rutina se ejecuta para cada registro que queramos etiquetar...
----
The routine runs for each record we want to label...
Any comments????? |