Ir al contenido


Foto

[RESUELTO] Como almacenar un dato de tipo TColor


  • Por favor identifícate para responder
14 respuestas en este tema

#1 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 07 octubre 2009 - 09:14

Hola a todos
Tengo una situacion en la que se quiere hacer un sistema de avisos mediante colores, segun determinados criterios, pero estos criterios y colores los configura el usuario como estime conveniente

El problema me lo encuentro en como guardar la informacion del color que escoja, para ello uso el componente TColorComboBox, que me devuelve un tipo TColor.

Como tengo que declarar el tipo de dato en la BD (uso Access), o de que forma haria para guardar ese color

  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 07 octubre 2009 - 09:24

Generalmente los TColor son valores HEX, lo podrías guardar en un campo string como $FFFFFF por ejemplo y luego convertirlo a TColor:



delphi
  1. function HexToTColor(sColor : string) : TColor;
  2. begin
  3.   Result :=
  4.     RGB(
  5.       StrToInt('$'+Copy(sColor, 1, 2)),
  6.       StrToInt('$'+Copy(sColor, 3, 2)),
  7.       StrToInt('$'+Copy(sColor, 5, 2))
  8.     ) ;
  9. end;



Se usaría así:



delphi
  1. var Color: TColor;
  2. begin
  3. Color := Table1Color.AsString;
  4.  
  5. Edit1.color := Color;
  6. end;



Saludos.
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 07 octubre 2009 - 09:35

Se me olvidó decirte cómo lo grabarías :$, lo acabo de probar de esta forma y me funciona perfecto:



delphi
  1. function TColorToHex(Color : TColor) : string;
  2. begin
  3.   Result :=
  4.     IntToHex(GetRValue(Color), 2) +
  5.     IntToHex(GetGValue(Color), 2) +
  6.     IntToHex(GetBValue(Color), 2) ;
  7. end;
  8.  
  9. procedure TForm1.ColorBox1Click(Sender: TObject);
  10. begin
  11. ShowMessage(TColorToHex(ColorBox1.Selected));
  12. end;



Saludos.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 octubre 2009 - 09:41

Y no sería mas fácil grabar el valor como entero directamente?



delphi
  1. var
  2.   IDColor: TColor;
  3.  
  4. procedure TForm1.ColorBox1Select(Sender: TObject);
  5. begin
  6.   IDColor := ColorBox1.Selected;
  7. end;
  8.  
  9. procedure TForm1.GrabaDatos;
  10. begin
  11.   Tabla.Append;
  12.   Tabla.CampoColor.Value := IDColor;
  13.   Tabla1.Post;
  14.   Tabla1.Close;
  15. end;



Salud OS
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 07 octubre 2009 - 09:47

Y no sería mas fácil grabar el valor como entero directamente?


Porque no todos son enteros ;), los hay con caracteres, como ejemplo te pongo el color clMenuHighlight, su valor es "1D0000" :)

Saludos.
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 octubre 2009 - 09:56

Has la prueba amigo, crea un campo entero en una base de datos, agrega el valor entero de TColor y nos avisas si no funciona como entero :)

Recuerda que los enteros no solo son Positivos :D

Salud OS
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 07 octubre 2009 - 10:19

Sí amigo eso está bien, pero...¿y los colores con valores enteros y strings? ¿cómo lo metes en un campo entero? ;).
  • 0

#8 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 07 octubre 2009 - 10:23

Gracias a todos por sus respuestas,
Lo probare como entero, y tambien utilizare las funciones RGBToColor y ColorToRGB que devuelven un entero, es decir convierten TColor a Integer y viceversa


  • 0

#9 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 07 octubre 2009 - 10:28

Sí amigo eso está bien, pero...¿y los colores con valores enteros y strings? ¿cómo lo metes en un campo entero? ;).


Recuerda que los valores enteros son base 10, y los hexadecimales son base 16, asi que no te preocupes por las letras, en resumen de cuenta lo que  quiero decir es que el TColor es un numero entero, indeferentemente que sea Hexadecimal o decimal igual es un entero.
  • 0

#10 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 07 octubre 2009 - 10:38

Yo uso un cxDBColorComboBox de los componentes DevExpress y lo guardo como entero en la tabla de firebird


Saludos
  • 0

#11 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 07 octubre 2009 - 12:38

Solo recordar estas funciones de la unit "graphics"


delphi
  1. function ColorToString(Color: TColor): string;
  2. function StringToColor(const S: string): TColor;
  3. function ColorToIdent(Color: Longint; var Ident: string): Boolean;
  4. function IdentToColor(const Ident: string; var Color: Longint): Boolean;




  • 0

#12 HMartinazzi

HMartinazzi

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 15 marzo 2018 - 03:38

Perdón que me meta acá, pero no se como redactar una pregunta nueva.

 

Me gustaría saber si se puede mostrar un ColorComboBox Con los nombres de los colores en Español


  • 0

#13 HMartinazzi

HMartinazzi

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 15 marzo 2018 - 04:21

Se me olvidó decirte cómo lo grabarías :$, lo acabo de probar de esta forma y me funciona perfecto:

 


delphi
  1. function TColorToHex(Color : TColor) : string;
  2. begin
  3.   Result :=
  4.     IntToHex(GetRValue(Color), 2) +
  5.     IntToHex(GetGValue(Color), 2) +
  6.     IntToHex(GetBValue(Color), 2) ;
  7. end;
  8.  
  9. procedure TForm1.ColorBox1Click(Sender: TObject);
  10. begin
  11. ShowMessage(TColorToHex(ColorBox1.Selected));
  12. end;


Saludos.

 

Y ¿Como sería con FMX?

 


  • 0

#14 HMartinazzi

HMartinazzi

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 15 marzo 2018 - 04:23

Se me olvidó decirte cómo lo grabarías :$, lo acabo de probar de esta forma y me funciona perfecto:

 


delphi
  1. function TColorToHex(Color : TColor) : string;
  2. begin
  3.   Result :=
  4.     IntToHex(GetRValue(Color), 2) +
  5.     IntToHex(GetGValue(Color), 2) +
  6.     IntToHex(GetBValue(Color), 2) ;
  7. end;
  8.  
  9. procedure TForm1.ColorBox1Click(Sender: TObject);
  10. begin
  11. ShowMessage(TColorToHex(ColorBox1.Selected));
  12. end;


Saludos.

 


  • 0

#15 HMartinazzi

HMartinazzi

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 15 marzo 2018 - 04:23

Y ¿Cómo sería con FMX?


  • 0




IP.Board spam blocked by CleanTalk.