Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-06-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 29-06-2004
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 21
vic_ia Va por buen camino
Cita:
Empezado por senpiterno
.... En VB logre hacerlo utilizando la API de win, pero ahora me gustaria hacerlo en delphi.
Hola, si lo lograste hacer con la API de Win en VB, pues no tienes mas que utilizar esas mismas funciones desde delphi, no debiera tener mayor problema, si algo te presenta problemas puedes publicar el codigo en VB y vemos si te podemos ayudar a implementarlo en delphi...

saludos....
Responder Con Cita
  #3  
Antiguo 29-06-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 29-06-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
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....
Responder Con Cita
  #5  
Antiguo 29-06-2004
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 21
vic_ia Va por buen camino
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  LOGFONT : TLogFont;
  Font    : HFONT;
begin
  LOGFONT.lfHeight := 30;
  LOGFONT.lfWidth  := 10;
  LOGFONT.lfWeight := FW_NORMAL;
  LOGFONT.lfEscapement := 900; { angulo expresado en decimas de grado }
  LOGFONT.lfStrikeOut  := 0; { distinto de cero para activarlo }
  LOGFONT.lfItalic     := 0; { distinto de cero para activarlo }
  LOGFONT.lfUnderline  := 0; { distinto de cero para activarlo }
  LOGFONT.lfFaceName := 'Tahoma';

  Font := CreateFontIndirect(LOGFONT);

  SelectObject(Form1.Canvas.Handle,Font);
  Form1.Canvas.TextOut(100,100,Edit1.Text);
  DeleteObject(Font);
end;

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....
Responder Con Cita
  #6  
Antiguo 30-06-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
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..
Responder Con Cita
  #7  
Antiguo 30-06-2004
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 21
vic_ia Va por buen camino
hola...

pues yo he probado con un Paintbox sustituyendo las lineas correspondientes y me funciona sin ningun problema

Código Delphi [-]
  SelectObject(PaintBox.Canvas.Handle,Font);
  PaintBox.Canvas.TextOut(100,100,Edit1.Text);

saludos...
Responder Con Cita
  #8  
Antiguo 30-06-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
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:

Código Delphi [-]
 
PaintBox1.Canvas.TextOut(x,y,'Hola');

"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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:50:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi