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 05-08-2016
Avatar de cl2raul
cl2raul cl2raul is offline
Miembro
 
Registrado: sep 2008
Ubicación: La Habana, Cuba
Posts: 88
Poder: 16
cl2raul Va por buen camino
problemas al agregar texto a un bitmap

Hola, estoy dibujando en un TImage para general solapines desde una base de datos el problema consiste a la hora de agregarle el texto...
buscando encontre en los ejemplos de delphi esta linea que si me agrega el texto al timage:

Image2.Bitmap.Canvas.FillText()

el funciona bien, pero cunado agrego 100dias, pone 100dias
y al poner 100 dias, este prioriza las letras y pone dias 100, alguien pudede ayudarme
Responder Con Cita
  #2  
Antiguo 05-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #3  
Antiguo 05-08-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Me parece muy raro que haga eso. Se me ocurren dos posibilidades, aunque podría ser otra cosa: Quizá se te haya colado algún comando UNICODE raro. O quizá haya una propiedad "BiDiMode" o similar. O tal vez la alineación. ¿Te dibuja sólo una línea o líneas separadas?

La verdad es que según voy escribiendo me parece más extraño.

A ver si puedes poner un poco de código y alguna captura. A veces ayuda.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #4  
Antiguo 05-08-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cl2raul Ver Mensaje
Image2.Bitmap.Canvas.FillText()
Yo creo que tendrás que aclarar: la clase TImage no contiene una propiedad Bitmap y la clase Canvas no contiene un método FillText.

LineComment Saludos
Responder Con Cita
  #5  
Antiguo 05-08-2016
Avatar de BDWONG
BDWONG BDWONG is offline
Miembro
NULL
 
Registrado: nov 2013
Posts: 113
Poder: 11
BDWONG Va por buen camino
Hola prueba con esto haber si te sirve.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  image1.Canvas.Brush.Color:=clBlue;
  Image1.Canvas.FillRect(0,0,Image1.Width,Image1.Height);

  Image1.Canvas.Brush.Color:=clRed;
  image1.Canvas.Font.Height:=18;
  Image1.Canvas.TextOut(10,10,'100, dias');
end;
Responder Con Cita
  #6  
Antiguo 06-08-2016
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Yo creo que tendrás que aclarar: la clase TImage no contiene una propiedad Bitmap y la clase Canvas no contiene un método FillText.

LineComment Saludos
Está usando el Framework Firemonkey http://docwiki.embarcadero.com/Libra...anvas.FillText

A vuelo de pájaro, yo diría que quizá el problema sea más bien en la consulta que se está haciendo y no en el método FillText.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 06-08-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jhonny Ver Mensaje
Está usando el Framework Firemonkey http://docwiki.embarcadero.com/Libra...anvas.FillText
¡Ah vaya! Pues qué bueno saberlo

Gracias Jhonny

LineComment Saludos
Responder Con Cita
  #8  
Antiguo 09-08-2016
Avatar de cl2raul
cl2raul cl2raul is offline
Miembro
 
Registrado: sep 2008
Ubicación: La Habana, Cuba
Posts: 88
Poder: 16
cl2raul Va por buen camino
gracias

gracias a todos pero debo aclarar que el TImage es de FMX por eso cambian un poco las cosas, uso FMX pq tiene muchas obciones gracias a los layout q hace mas facil el diseño de las aplicaciones...

BDWONG: gracias pero eso se usa en VCL y yo estoy usando FMX.
Ñuño Martínez: gracias y aqui les va un ejemplo y es copia casi fiel de los ejemplos de la ayuda de FMX.

Código Delphi [-]
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
  FMX.Controls.Presentation, FMX.Edit, FMX.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Bitmap.LoadFromFile(GetCurrentDir+'\01.jpg'); 
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MyRect: TRectF;
begin
  MyRect:= TRectF.Create(50, 40, 200, 270);
  Image1.Bitmap.Canvas.BeginScene;
  Image1.Bitmap.Canvas.FillText(MyRect, '100 dias', false, 100,
    [TFillTextFlag.RightToLeft], TTextAlign.Center, TTextAlign.Center);
  Image1.Bitmap.Canvas.EndScene;
end;

end.

quiero q observen bien en '100 dias', al mostrar el resultado pone 'dias 100', pero si pongo '100dias', muestra '100dias' o sea el problema esta en que no se porque rayos al separar los numeros de las letras y estos esten delante de las letras, el procedimiento prioriza las letras y luego los numeros... llevo un mes con esto y creo q la mejor solucion es crear una dll que use la libreria VCL me cree la imagen con el texto correcto y luego la coloque en el TImagen de FMX para mostrar alguien tiene mejor idea, esta pinta de mucho trabajo y poca eficiencia.
Responder Con Cita
  #9  
Antiguo 09-08-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Y... no se mucho de inglés, no más un tantito como para leer en tu muestra de código un RigthToLeft y eso significa "de derecha a izquierda"
Eso me hace sospechar un poquito de que algo tuviera que ver al momento de escribir palabras separadas.
No uso FMX por lo que no estoy seguro. Aunque convengamos que hay una fuerte sospecha de que por ahí van los tiros.
Yo que vos estudio inglés y me leo la doc que puso Jhonny XD

Saludos
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 09-08-2016 a las 18:35:51.
Responder Con Cita
  #10  
Antiguo 09-08-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Coincido con Delphius. Precisamente lo que comentaba con eso del "BiDiMode" de VCL.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #11  
Antiguo 12-08-2016
Avatar de cl2raul
cl2raul cl2raul is offline
Miembro
 
Registrado: sep 2008
Ubicación: La Habana, Cuba
Posts: 88
Poder: 16
cl2raul Va por buen camino
ok probare tu consejo [Delphius] pareces tener razon, pronto dare respuesta...
Responder Con Cita
  #12  
Antiguo 15-08-2016
Avatar de cl2raul
cl2raul cl2raul is offline
Miembro
 
Registrado: sep 2008
Ubicación: La Habana, Cuba
Posts: 88
Poder: 16
cl2raul Va por buen camino
ya lo probe y no se puede pq TFillTextFlag.RightToLeft es la unica opcion q da delphi xe7, alguien sabe algo...
Responder Con Cita
  #13  
Antiguo 15-08-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Es algo raro que existiera esa única opción en el enumerativo. Por lo que estuve viendo, en la versión Sattle sigue igual.
Quisiera pensar que todavía está en desarrollo... aunque es muy curioso.

Prueba con escribir de forma inversa las palabras. Es decir, si quieres que aparezca "100 días" pasa el texto como "días 100".

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 15-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cl2raul Ver Mensaje
ya lo probe y no se puede pq TFillTextFlag.RightToLeft es la unica opcion q da delphi xe7, alguien sabe algo...
Lo mismo no debes poner nada para que aparezca normal de left to right
Responder Con Cita
  #15  
Antiguo 15-08-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo probaría dejando en blanco el parámetro:

Código Delphi [-]
Image1.Bitmap.Canvas.FillText(MyRect, '100 dias', false, 100, [], TTextAlign.Center, TTextAlign.Center);

LineComment Saludos
Responder Con Cita
  #16  
Antiguo 15-08-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
La doc no dice nada sobre si puede dejarse en blanco.
No es muy clara al respecto.

Lo que si es bastante raro que al día de hoy ese enumerativo cuente con "Derecha a izquierda" y no el inverso. ¡Alguna razón o motivo deberían tener!

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #17  
Antiguo 15-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Porque lo normal es de izquierda a derecha.
Responder Con Cita
  #18  
Antiguo 15-08-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Porque lo normal es de izquierda a derecha.
Así es. Realmente, lo raro en esta función es que el parámetro se especificque como un conjunto de banderas en lugar de un booleano, a menos que esperen que en el futuro haya otras direcciones del texto (¿de arriba a abajo, de abajo a arriba, diagonal ), y aún así, no debería ser un conjunto de banderas.

LineComment Saludos
Responder Con Cita
  #19  
Antiguo 15-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Son esas cosas en las que se dice: "Ya lo dejamos preparado para más adelante". Luego nadie se acuerda porque no les habrá hecho falta.
Responder Con Cita
  #20  
Antiguo 16-08-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Porque lo normal es de izquierda a derecha.
¿Y? Si la idea es que fuera una especie de parámetro opcional, o por defecto, entonces no deberían haberlo declarado de esa forma sino así:

Código Delphi [-]
Direction: TFillTextFlags = LeftToRight

Cita:
Empezado por roman Ver Mensaje
Así es. Realmente, lo raro en esta función es que el parámetro se especificque como un conjunto de banderas en lugar de un booleano, a menos que esperen que en el futuro haya otras direcciones del texto (¿de arriba a abajo, de abajo a arriba, diagonal ), y aún así, no debería ser un conjunto de banderas.

LineComment Saludos
Exacto. Es una forma muy rara. Si sólo se permitiera dos direcciones, no hace falta el tipo enumerativo/conjunto. Un boolean y con un valor por defecto es suficiente.

Estamos frente a una implementación pobre. Pareciera ser experimental, y proviene desde XE2 y al menos hasta en XE7 está así.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como agregar texto a un listview kurono Varios 4 10-11-2009 04:23:23
Agregar texto con canvas a Timage pablopessoa Varios 4 22-11-2008 16:10:43
Bitmap a texto y texto a bitmap kotai Gráficos 15 16-01-2008 06:02:31
Agregar texto a un formulario al presionar un boton. D-MO HTML, Javascript y otros 4 26-12-2005 20:03:49
Agregar Texto a un TImage animal Gráficos 1 22-02-2005 13:18:28


La franja horaria es GMT +2. Ahora son las 00:40:22.


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