Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Poner un texto en una imagen (https://www.clubdelphi.com/foros/showthread.php?t=96577)

Parsec 29-01-2024 12:15:44

Poner un texto en una imagen
 
Hola a tod@s.

tengo este código que genera un texto con una pequeña inclinación:
Código Delphi [-]
var
 
  LOGFONT : TLogFont;
  Font    : HFONT;



begin
  LOGFONT.lfHeight := 30;
  LOGFONT.lfWidth  := 10;
  LOGFONT.lfWeight := FW_NORMAL;
  LOGFONT.lfEscapement := 500; { 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(Form1.Image1.Left+label3.left,Form1.Image1.Top+label3.top,'Clouding administración');
  DeleteObject(Font);

Pero el texto lo pone en el form1 y no lo veo porque encima hay una imagen y me gustaría que apareciese el texto en Image1 (como si fuese un label)

Quedo pendiente y gracias de antemano.

WHILENOTEOF 29-01-2024 13:02:53

Si lo que quieres es mostrarlo en pantalla, dibuja la imagen en el canvas del form igual que haces con el texto y después dibujas el texto. También puedes cargar la imagen, sobre el canvas de la iamgen dibujas el texto y después asignas la image al TImage

Delphi01 29-01-2024 22:06:55

Cita:

Empezado por Parsec (Mensaje 554207)
Hola a tod@s.

tengo este código que genera un texto con una pequeña inclinación:
Código Delphi [-]
var
 
  LOGFONT : TLogFont;
  Font    : HFONT;



begin
  LOGFONT.lfHeight := 30;
  LOGFONT.lfWidth  := 10;
  LOGFONT.lfWeight := FW_NORMAL;
  LOGFONT.lfEscapement := 500; { 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(Form1.Image1.Left+label3.left,Form1.Image1.Top+label3.top,'Clouding administración');
  DeleteObject(Font);

Pero el texto lo pone en el form1 y no lo veo porque encima hay una imagen y me gustaría que apareciese el texto en Image1 (como si fuese un label)

Quedo pendiente y gracias de antemano.



Puedes utilizar un componente TLabel y establecer la propiedad Parent del TLabel como Image1.

Neftali [Germán.Estévez] 30-01-2024 08:18:25

Tendrás que dar más detalles.
¿VCL/FMX? ¿Qué versión estás utilizando? ¿Qué evento estás utilizando?
Porque a mi con una sencilla prueba, el código que has puesto me está funcionando.



Otra cosa es que cuando hagas determinados "repintados" de componentes o del form, eso se pierda, pero es correcto, simplemente porque también debes repintar tu texto:




Para eso ya debes pensar dónde colocar ese código para realizar ese "repintado".

Parsec 30-01-2024 09:38:45

Gracias a todos.

La solución ha sido sencilla: Al nombrar Neftalí lo del repintado se me ha ocurrido hacer un refresh del form y ya está.

Gracias de nuevo

Neftali [Germán.Estévez] 30-01-2024 10:10:46

Otra opción sería capturar el mensaje del repintado del form (tipo WM_PAINT o similar) y en ese punto "repintar" el texto. De esa forma te aseguras que sólo se pinta cando es necesario, ni más ni menos veces.


En la parte privada del form defines:
Código Delphi [-]
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;


Y la implementación:
Código Delphi [-]
procedure TForma.WMPaint(var Message: TWMPaint);
begin
  inherited;
  // aquí llamas al procedimiento de repintar el texto
  ...
end;

De esta forma siempre que al form le llegue el mensaje de Repintarse, justo después volverá a repintar el texto.


La franja horaria es GMT +2. Ahora son las 16:04:12.

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