Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Cambio De String A Style (https://www.clubdelphi.com/foros/showthread.php?t=68822)

andresorozco86 08-07-2010 17:40:21

Cambio De String A Style
 
BUENOS DIAS

Lo que sucede es que estoy trabajando en delphi y tengo en una variable un registro de tipo style y necesito cambiarlo a string. ¿Alguien me puede decir como lo hago?

Neftali [Germán.Estévez] 08-07-2010 18:35:12

Código Delphi [-]
TProgrammerType = (tpDelphi, tpVisualC, tpVB, tpJava) ;


uses TypInfo;
var s: string;
s := GetEnumName(TypeInfo(TProgrammerType),
                  integer(tpDelphi)) ;

//s tendrá la cadena 'tpDelphi'


Vía about.com

andresorozco86 08-07-2010 21:27:26

El codigo que tengo implementado es el siguiente.

ft := TFont.Create;
ft.Name := qRender.FieldByName('SYMBOLFONTNAME').AsString; ft.Color:=StringToColor(qRender.FieldByName('SYMBOLFONTCOLOR').AsString);
ft.size :=qRender.FieldByName('SYMBOLFONTSIZE').AsInteger;
ft.style:=qRender.FieldByName('SYMBOLFONTSTYLE').AsString;

y cuando asigno el ft.style me sale que no son compatibles los tipos string y style. Lo que necesito es cambiar el tipo string a style pero no se como hacerlo.

no se como implementar lo que me envio.


gracias

Lord Delfos 09-07-2010 06:29:28

Que yo sepa, pues no hay una manera automática. Esto se debe a que el estilo de fuente es un conjunto, y no existe una manera de convertir de string a conjunto.

Hacerlo a mano tampoco es tan complicado. Hay dos cosas que se me ocurren, en la base de datos, ¿guardás un string o un integer? Lo pregunto porque un conjunto es un número de ocho bits, así que podrías usar eso para almacenar en la base, y después levantarlo:

Código Delphi [-]
ft.style:= TFontStyles(qRender.FieldByName('SYMBOLFONTSTYLE').AsInteger);

Si lo guardaste como un string, entonces habría que ver cómo codificaste el estilo en string y hacer el proceso opuesto.

Neftali [Germán.Estévez] 09-07-2010 10:33:11

Cita:

Empezado por andresorozco86 (Mensaje 369712)
...tengo en una variable un registro de tipo style y necesito cambiarlo a string.

Hasta ahí nos había quedado claro.

Cita:

Empezado por andresorozco86 (Mensaje 369744)
y cuando asigno el ft.style me sale que no son compatibles los tipos string y style.

Normal, son de diferente tipo.

Cita:

Empezado por andresorozco86 (Mensaje 369744)
Lo que necesito es cambiar el tipo string a style pero no se como hacerlo.

Esto es lo que pasa cuando uno no le dedica el suficiente tiempo a redactar una pregunta. Que dice justo lo contrario de lo que quería decir. :(:(:(
Y es resto perdemos el tiempo, cosa que molesta mucho.

Cita:

Empezado por Lord Delfos (Mensaje 369785)
Que yo sepa, pues no hay una manera automática. Esto se debe a que el estilo de fuente es un conjunto, y no existe una manera de convertir de string a conjunto.

Sí hay una manera, utilizando RTTI, muy similar a como hemos comentado arriba (el caso justo contrario).


Código Delphi [-]
  // Supongamos que esta variable tiene el tipo
  Str := 'fsBold';
  // Convertir el String a entero segun el tipo a Estilo
  i := GetEnumValue(TypeInfo(TFontStyle), Str);
  // comprobamos que existe ese valoir (por si lo hemos escrito mal)
  if (i <> -1) then begin
    // Y sacamos el estilo asociado
    fs := TFontStyle(i);
    // Ya lo podemos asignar
    Label1.Font.Style := Label1.Font.Style + [fs];
  end;

Otro detalle, es que como Font.Style es un conjunto, no puedes asignarlo directamente a la variable:

Código Delphi [-]
   Label1.Font.Style := fs;

Sino que debes añadir o eliminar elementos:

Código Delphi [-]
   Label1.Font.Style := Label1.Font.Style + [fs];
   Label1.Font.Style := Label1.Font.Style - [fs];

Lord Delfos 09-07-2010 17:37:20

Ja, chupate esa mandarina. Hoy he aprendido otra valiosa lección.

¡Gracias Neftali!

andresorozco86 09-07-2010 21:24:30

gracias neftali funciona bien


La franja horaria es GMT +2. Ahora son las 03:35:31.

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