Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2004
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Modificar y guardar las propiedades Font

Hola amigos:

Los molesto por lo siguiente:

En mi formulario estoy utilizando un componente TFontDialog, con el cual permito que el operador modifique las propiedades de algunos componente,

Ej. Edit1

Bien: el caso es que mediante la instrucción

Edit1.Font:=FontDialog1.Font;

El tema estaría resuelto, pero necesito guardar las propiedes.

Se me ocurrió hacer una pequeña tabla con los datos Size, color, Name, etc.
Pero no sé como leer los estilos fsBold, fsItalic, fsUnderline.

Probé con Edit1.Font.Style.fsItalic, pero esto me da un error.

Entonces tengo 2 preguntas

1- Cómo leo los estilos?.

2- Saben de alguna forma en que pueda guardar directamente Edit1.Font sin tener que colocar un campo para cada propiedad del font?

Desde ya muchas gracias por su tiempo.
Responder Con Cita
  #2  
Antiguo 07-10-2004
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Algo ya está resuelto

Ya estoy un poco más encaminado

Por ejemplo para asignarle la propiedad Negrita al texto hago:
Edit1.Font.Style := Edit1.Font.Style+[fsBold]

Para sacarla hago:
Edit1.Font.Style := Edit1.Font.Style-[fsBold]

Para preguntar por un estilo hago

If Edit1.Font.Style=[fsBold] Then ...

El problema es que si el estilo tiene asignado más de una propiedad Ej:
(FsBold + FsItalic)
la pregunta anterior da como resultado falso, entonces tengo que preguntar:

If Edit1.font.Style=[fsBold] Then ...
If Edit1.font.Style=[ FsBold, fsItalic ] Then ...

y todas las combinaciones. Puedo hacerlo, no son muchas, pero es muy desprolijo.

pregunta:

¿como puedo preguntar?

Si [FsBold] está incluido en la lista de Edit1.Font.Style Entonces...

Se entiende?.

Gracias.
Responder Con Cita
  #3  
Antiguo 07-10-2004
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Cita:
Empezado por Carmelo Cash
¿como puedo preguntar?

Si [FsBold] está incluido en la lista de Edit1.Font.Style Entonces...
Código:
    if fsBold in Edit1.Font.Style then
Si quieres preguntar si Style contiene, por ejemplo, fsBold y fsItalic pones:

Código:
     if [fsBold, fsItalic] <= Edit1.Font.Style then
También, si quieres ver si, por ejemplo, si ni fsItalic ni fsUnderline están en Style pones:

Código:
    if [fsItalic, fsUnderline]*Edit1.Font.Style = [] then
Te recomiendo repases en la ayuda de Delphi el tipo de datos set para que veas los operadores que pueden usarse con variables de este tipo.

Por otra parte fíjate que puedes guardar y recuperar una propiedad como ésta en una variable de tipo Byte:

Código:
    ByteStyle := Byte(Edit1.Font.Style); 
    Edit1.Font.Style := TFontStyles(ByteStyle);
Bye

Última edición por keyboy fecha: 07-10-2004 a las 20:55:08.
Responder Con Cita
  #4  
Antiguo 08-10-2004
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Talking Prueba Esto

Hola
Cita:
Empezado por Carmelo Cash
2- Saben de alguna forma en que pueda guardar directamente Edit1.Font sin tener que colocar un campo para cada propiedad del font?
Si
Código Delphi [-]
Function FontToInteger (FFont : Tfont) : Integer;
begin
  Result := Integer(FFont);
end;

Function IntToFont (FInt : Integer) : TFont;
begin
  Result := TFont(FInt);
end;

Luego solo te falta guardar en un campo de tu tabla y restablecerlo cuando gustes

Espero te sirva

Un saludo
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #5  
Antiguo 08-10-2004
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Muchisimas gracias.
Responder Con Cita
  #6  
Antiguo 09-10-2004
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Cita:
Empezado por yusnerqui
Si
¡No!

Una variable de tipo TFont (o de cualquier tipo que sea una clase) no es más que un puntero, de manera que FontToInteger sólo devuelve la dirección en memoria del objeto FFont, que es un valor efímero que pierde sentido en cuanto el objeto se destruye o termina la aplicación.

Bye
Responder Con Cita
  #7  
Antiguo 12-10-2004
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Disculpas

Ofresco mis más sinceras disculpas por la respuesta anterior, me dejé engañar por algunas pruebas que hice y no profundicé lo suficiente en el tema.

De todos modos puedes construirte un record y guardar en el las características de tu Fuente, luego construir un cadena combencional con estas características y guardarla en la BD, a continuación te doy algunas ideas.

Código Delphi [-]
TMyFont = Record
   Nombre : String;
   Size  : Byte;
   style : Array[1..3] of char;
   Color : integer;
 end;
//Función para llenar el record con las propiedades del Font 
Function FontToMyFont(FFont:TFont):TMyFont;
begin
  Result.style := '000';
  Result.Nombre :=FFont.Name;
  Result.Size := FFont.Size;
  if fsBold in FFont.Style then
   Result.style[1]:='1';
  if fsItalic in FFont.Style then
   Result.style[2]:='1';
  if fsUnderline in FFont.Style then
   Result.style[3]:='1';
  Result.Color := FFont.Color;
end;
  //Procedimiento para darle las propiedades del record a el Font
Procedure MyFontToFont (Auxi : TFont;MyFont : TMyFont);
begin
  Auxi.Name := MyFont.Nombre;
  Auxi.Size := MyFont.Size;
  Auxi.Color := MyFont.Color;
  if MyFont.style[1]='1' then
   Auxi.Style := Auxi.Style+[fsBold]
  else
   Auxi.Style := Auxi.Style-[fsBold];
  if MyFont.style[2]='1' then
   Auxi.Style := Auxi.Style+[fsItalic]
  else
   Auxi.Style := Auxi.Style-[fsItalic];
  if MyFont.style[3]='1' then
   Auxi.Style := Auxi.Style+[fsUnderline]
  else
   Auxi.Style := Auxi.Style-[fsUnderline];
end;

//Función para combertir el record a una cadena para guardarla en la base de datos.

Function MyFonttoStr (MyFont:TMyFont): String;
 var
  Auxi : String;
begin
  with MyFont do
   Auxi := style+MyFont.Nombre+'@'+inttostr(Size)+'@'+inttostr(Color) ;
 Result:= Auxi;
end;

//Función para combertir de esta cadena a el record nuevamente.
Function StrToMyFont (Str:String):TMyFont;
var
 Auxi : TMyFont;
 i : Byte;
begin
 for i := 1 to 3 do
  Auxi.style[i] := str[i];
 Delete(Str,1,3);
 i:= pos('@',Str);
 Auxi.Nombre := Copy(Str,1,i-1);
 Delete(Str,1,i);
 i:= pos('@',Str);
 Auxi.Size := StrToInt(Copy(Str,1,i-1));
 Delete(Str,1,i);
 Auxi.Color := StrToInt(Str);
 Result := Auxi;
end;

Bueno espero que ahora si te ayude este código.

Un saludo
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #8  
Antiguo 12-10-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Una forma mas compacta:

http://www.scalabium.com/faq/dct0039.htm

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 09:11:13.


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