FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Orientacion del texto
Hola amigos
Me gustaria saber si es posible utilizando el canvas de un objeto, escribir texto en forma vertical, pero no de esta forma: t e x t o sino, como si tomaramos un texto escrito en forma normal (horizontal) y lo levantaramos 90 grados hacia la izquierda. En VB logre hacerlo utilizando la API de win, pero ahora me gustaria hacerlo en delphi. Gracias de antemano por cualquier ayuda. |
#2
|
||||
|
||||
Cita:
saludos.... |
#3
|
|||
|
|||
vic_ia, aqui esta el codigo en VB:
Código:
'Declaracion de tipo 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 * 33 End Type 'Funciones de la api win Public Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long 'Procedure que crea el texto vertical Public Sub StringVertical(ByVal Titulo As String, picMain As PictureBox) On Error GoTo GetOut Dim f As LOGFONT Dim hPrevFont As Long Dim hFont As Long Dim FontName As String Dim FONTSIZE As Integer FONTSIZE = 10 f.lfEscapement = 10 * 90 FontName = "Tahoma" + Chr$(0) 'caracter nulo f.lfFaceName = FontName f.lfHeight = (FONTSIZE * -20) / Screen.TwipsPerPixelY hFont = CreateFontIndirect(f) hPrevFont = SelectObject(picMain.hdc, hFont) picMain.CurrentX = 3 picMain.CurrentY = picMain.Height - 10 picMain.Print Titulo ' Restauramos el estado original hFont = SelectObject(picMain.hdc, hPrevFont) DeleteObject hFont Exit Sub GetOut: Exit Sub End Sub Espero lo entindas...Saludos. |
#4
|
|||
|
|||
Se me olvidava, intente migrar el codigo de VB a Delphi, pero no dio ningun resultado, reeplace el PictureBox por un TPaintBox, pero como te digo no dio ningun resultado....
|
#5
|
||||
|
||||
si te fijas, no necesitas redefinir ni los tipos ni las funciones del API, puesto que eso ya lo ha hecho delphi... obviamente al igual que como tu, no he asignado todas las propiedades del LOGFONT... por simplicidad pongo el texto en el canvas del form pero le puedes hacer en el canvas del control que te sea mas adecuado.... espero te sea de utilidad.... saludos.... |
#6
|
|||
|
|||
Lamento decirte amigo vic_ia que el metodo que me indicaste solo funciona en el canvas de un Form, pero no en otros objetos como PaintBox, Image Shape....
Lo he provado varias veces y como te menciono solo funciona en el canvas del form. El problema es que yo necesito realizarlo sobre un objeto de los que te mencione anteriormente... Quizas tengas la respuesta de ¿porque solo funciona en el canvas del form?. saludos.. |
#8
|
|||
|
|||
Tienes razon amigo vic_ia, si funciona con el canvas de otros objetos, el problema del porque no se mostraba el texto en pantalla esta en la siguiente linea:
"x" e "y", no tenian valores apropiados respecto al tamaño del Paintbox que estaba utilizando....pero el problema ya esta solucionado... Muchas gracias amigo vic_ia, de verdad me has servido de mucha ayuda.. Gracias y saludos. |
|
|
|