Fecha actual Vie Ago 14, 2020 7:47 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 6 mensajes ] 
Autor Mensaje
NotaPublicado: Vie Sep 22, 2017 3:36 pm 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 129
Ubicación: España
Hola a los pocos que quedamos por aqui:
En primer lugar saludaros a todos esperando que hayais parasado un feliz verano.
Bueno mi pregunta es la siguiente:
Cuando intento utilizar la función DRAWTEXT() solo puedo hacerla funcionar con la opción "Printer:Drawtext(), cuando en la documentación dice que se puede utilizar en cualquier VENTANA, si alguno sabe como hacerla funcionar fuera de 'Printer' le agradeceria que me indicase como hacerlo.
Un saludo a todos
Fraguibo


Arriba
 Perfil  
Responder citando  
NotaPublicado: Lun Sep 25, 2017 1:04 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 354
Ubicación: Salamanca - España
Fraguibo escribió:
Hola a los pocos que quedamos por aqui:
En primer lugar saludaros a todos esperando que hayais parasado un feliz verano.
Bueno mi pregunta es la siguiente:
Cuando intento utilizar la función DRAWTEXT() solo puedo hacerla funcionar con la opción "Printer:Drawtext(), cuando en la documentación dice que se puede utilizar en cualquier VENTANA, si alguno sabe como hacerla funcionar fuera de 'Printer' le agradeceria que me indicase como hacerlo.
Un saludo a todos
Fraguibo


Hola, Fraguibo.

Existe una función del API que es DrawText( nDC, cTexto, .... )
Y también existe un METODO en la clase TPrinter.
No debes de confundirlas, en la ayuda del API viene como llamar a DrawText().

DrawText
Sintaxis: DrawText( <nDC>, <cTexto>, <nLongitud>, <aArea>,
<nFormato> ) -> nAltura
Argumentos: <nDC> es el dispositivo de contexto donde se va a dibujar
el texto.
<cTexto> es el texto que se va a dibujar.
<nLongitud> es la longitud del texto, un valor de -1 hace
que se calcule automáticamente.
<aArea> es el array que especificas las coordenadas de la
zona a usar.
<nFormato> es el formato que se usará al dibujar el texto.
Devuelve: La altura del texto dibujado.
DrawText() dibuja un texto en un área determinado con el formato
especificado.
Ejemplo:
DrawText( hDC, "Mi texto", -1, { 0, 0, 40, 25 }, DT_CENTER )

El uso de funciones del API de WINDOWS no es lo mismo que las funciones de C3.

Muchas veces la dificultad somos nosotros, no la herramienta.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Sep 29, 2017 9:34 pm 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 129
Ubicación: España
Jesus:
gracias por tu respuesta, lo cual viene expecificado tal como tu dices en el manual del API, pero yo creo una ventana con TForm o con TLabel y no consigo hacerla funcionar, si no es con printer:DrawText(), asi que si tu sabes como hacerla funcionar en cualquiera de estas ventanas, te agradeceria me pusieses un ejemplo practico, esperando tu respuesta recibe un cordial saludo.

Fraguibo


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Oct 06, 2017 12:53 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 354
Ubicación: Salamanca - España
Fraguibo escribió:
Jesus:
gracias por tu respuesta, lo cual viene expecificado tal como tu dices en el manual del API, pero yo creo una ventana con TForm o con TLabel y no consigo hacerla funcionar, si no es con printer:DrawText(), asi que si tu sabes como hacerla funcionar en cualquiera de estas ventanas, te agradeceria me pusieses un ejemplo practico, esperando tu respuesta recibe un cordial saludo.

Fraguibo


Hola.

No sé qué pretendes hacer con esta llamada al API que no puedas hacer con un TLabel.

Aquí tienes un ejemplo:

method Label2OnPaint( oSender, nDC ) class TForm1

DrawText( nDC, "hola", -1, { 0, 0, 40, 25 }, DT_CENTER )

return

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Oct 06, 2017 4:30 pm 
Avatar de Usuario

Registrado: Mar Dic 27, 2005 2:58 pm
Mensajes: 68
Fraguibo escribió:
Jesus:
gracias por tu respuesta, lo cual viene expecificado tal como tu dices en el manual del API, pero yo creo una ventana con TForm o con TLabel y no consigo hacerla funcionar, si no es con printer:DrawText(), asi que si tu sabes como hacerla funcionar en cualquiera de estas ventanas, te agradeceria me pusieses un ejemplo practico, esperando tu respuesta recibe un cordial saludo.
Fraguibo

Creo que te estás liando entre la función del API DrawText() y el método de la clase TPrinter DrawText(). No es lo mismo, ni la llamada ni los parámetros, para usar el API debes obtener un dispositivo de contexto, dibujar y luego liberar ese dispositivo de contexto, si no, acabarás agotando los recursor del sistema, por ejemplo:

Código:
   local nDC

   hDC := GetDC( MiLabel:Handle )
   DrawText( hDC, "Texto a dibujar", -1, { 0, 0, 150, 50 }, DT_CENTER )
   ReleaseDC( MiLabel:Handle, nDC )


-Eso obtendrá un handle para dibujar en el TLabel MiLabel.
-Dibujará el texto centrado en la posición 0,0 del label y con un tamaño de 150x50 pixels.
-Luego se libera el handle para no agotar los recursos del sistema.

Como bien te dice Jesús, es mucho más sencillo usar la propiedad Caption del TLabel ya que es C3 quien gestiona los recursos del sistema encargándose de liberarlos después de dibujar el texto:

Citar:
MyLabel:AutoSize := .F.
MyLabel:SetBounds( 0, 0, 150, 50 )
MyLabel:Alignment := taCenter // Con tu permiso Alberto, edito tu mensaje y añado este pequeño detalle :-)
MyLabel:Caption := "Texto a dibujar"


Saludos


Arriba
 Perfil  
Responder citando  
NotaPublicado: Jue Oct 12, 2017 9:37 am 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 129
Ubicación: España
Jesús y Alberto Gracias por vuestras respuestas y buestros ejemplos, pues reconocco que hay momentos en que uno se pone una cosa en la cabeza y por más bueltas que le de no encuentra la forma de encontrar la salida.
Referente a lo que me preguntas Jesús de que por quiero utilizar la función DrawText() y no TLabel(), es por que si trato de visualizar un campo MEMO de varias lineas, con esta función es mucho más facil sacarlas todas bien a lineadas en ambos lados.

sin otro particular y dandoos la gracias de nuevo recibir un cordial saludo.

Fraguibo


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 6 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron