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 22-06-2006
dicatek dicatek is offline
Miembro
 
Registrado: jun 2006
Posts: 46
Poder: 0
dicatek Va por buen camino
Paleta de colores hexadecimal

Mi duda es como podria crear una aplicación para que los usuarios puedan seleccionar un color entre una gran variedad (paleta de color) y ésta, quede almacenada en un edit para poder manejar el valor mas tarde?

Gracias.
Responder Con Cita
  #2  
Antiguo 22-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Puedes usar el componete TColorDialog que se encuentra en la paleta de componentes "Dialogs".

Aqui un ejemplo creandolo sobre la marcha
Código Delphi [-]
var
  StrColor: string;
begin
  with TColorDialog.Create(self) do
  try
    if Execute then
    begin
      StrColor:= IntToHex(Color,6);
      Edit1.Text:= StrColor;
    end;
  finally
    Free;
  end;
end;

Para volverlo a utilizar
Código Delphi [-]
var
  MiColor: TColor;
begin
  MiColor:= StrToIntDef('$'+Edit1.Text,0);
end;

Podemos darle otra vuelta de tuerca, si queremos que sea compatible con los colores utilizados en html, tenemos que intercambiar la posicion del color rojo con la del azul.

Algo asi:
Código Delphi [-]
function ColorToStr(Color: TColor): string;
begin
  Result:= IntToHex(Color,6);
  Result:= Copy(Result,5,2) + Copy(Result,3,2) + Copy(Result,1,2);
end;

function StrToColor(Color: string): TColor;
begin
  Color:= Copy(Color,5,2) + Copy(Color,3,2) + Copy(Color,1,2);
  Result:= StrToIntDef('$'+Color,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  StrColor: string;
begin
  with TColorDialog.Create(self) do
  try
    if Execute then
    begin
      StrColor:= ColorToStr(Color);
      Edit1.Text:= StrColor;
    end;
  finally
    Free;
  end;
end;
Responder Con Cita
  #3  
Antiguo 22-06-2006
dicatek dicatek is offline
Miembro
 
Registrado: jun 2006
Posts: 46
Poder: 0
dicatek Va por buen camino
Muchas gracias seoane! Al final opté por la primera opción, la segunda se me escapaba de mis conocimientos...jejeje. Una pregunta seoane, todos estos codigos que me pones...los tienes almacenados al ordenador o los sacas sobre la marcha? En todo caso, no podrian ponerse en la sección de trucos para posteriores búsquedas de la gente?

Así evitarias tener que estar constantemente haciendólo y el foro serviria para nuevos temas.

Solo fue una idea, de todas formas muchas gracias una vez más.
Responder Con Cita
  #4  
Antiguo 22-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por dicatek
En todo caso, no podrian ponerse en la sección de trucos para posteriores búsquedas de la gente?
No seré yo el que diga que no se ponga en el apartado de trucos lo que Seoane considere oportuno del código que ha expuesto anteriormente, al contrario, tal vez fuera bien. Empero, lo único que quiero decir es que los Foros cuentan con su propio buscador, es decir, que este Hilo podrá localizarse posteriormente haciendo uso del mismo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 30-06-2006
dicatek dicatek is offline
Miembro
 
Registrado: jun 2006
Posts: 46
Poder: 0
dicatek Va por buen camino
Solucionado

Última edición por dicatek fecha: 13-07-2006 a las 00:57:45.
Responder Con Cita
  #6  
Antiguo 13-07-2006
dicatek dicatek is offline
Miembro
 
Registrado: jun 2006
Posts: 46
Poder: 0
dicatek Va por buen camino
Ahí va el ultimo problema que me he encontrado,

ahora he echo la siguiente opción para que al mismo tiempo que se escoge un color, este quede mostrado en una TLabel con el siguiente código:

Código Delphi [-]
procedure TfrmPrincipal.Image4Click(Sender: TObject);
var
dlg: TColorDialog;
begin
with TColorDialog.Create(self) do
  try
    if Execute then
    begin
      StrColor:= ColorToStr(Color);
      EdColormenu.Text:= StrColor;
      MiColor:= StrToIntDef('$'+edColormenu.Text,0);
      Label1.Font.Color := MiColor;
    end;
  finally
    Free;
  end;

Lo que me sucede es que el color que me muestra, no es el que hemos escogido.
He estado probando y creo que sucede porque Delphi para escoger colores usa el otro sentido y por eso no me lo escoge bien.

Como podria hacer para solucionar ese problema?

Gracias!
Responder Con Cita
  #7  
Antiguo 13-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
En tu código esta usando la función ColorToStr, supongo que es la misma que he colocado en este mismo hilo, si no es así corrígeme. Como apreciaras la función intercambia los valores de rojo y azul para ajustarse al estándar, así que para volver a obtener el color original no puedes usar directamente IntToStrDef sino que debes usar la función StrToColor que vuelve a colocar el rojo y el azul en su sitio. Aprovecho para hacer unos retoques a la función:

Código Delphi [-]
function StrToColor(Color: string): TColor;
begin
  while length(Color) < 6 do
    Color:= '0' + Color;
  Color:= Copy(Color,5,2) + Copy(Color,3,2) + Copy(Color,1,2);
  Result:= StrToIntDef('$'+Color,0);
end;


Quedando el codigo de la siguiente manera:
Código Delphi [-]
  with TColorDialog.Create(self) do
  try
    if Execute then
    begin
      StrColor:= ColorToStr(Color);
      EdColormenu.Text:= StrColor;
      MiColor:= StrToColor(edColormenu.Text);
      Label1.Font.Color := MiColor;
    end;
  finally
    Free;
  end;
Responder Con Cita
  #8  
Antiguo 13-07-2006
dicatek dicatek is offline
Miembro
 
Registrado: jun 2006
Posts: 46
Poder: 0
dicatek Va por buen camino
Ok Guay! Creo que ya está solucionado.

Una cosa , si no es pedir mucho...ya que casi me he limitado a ir siguiendo tus conocimientos...(algunas cosas sí las entendido) estos ultimos retoques que dices haber echo. En realidad que es, y para que lo has retocado?

Una vez mas...gracias!
Responder Con Cita
  #9  
Antiguo 13-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por dicatek
En realidad que es, y para que lo has retocado?
Es solo para asegurarnos de que la cadena de texto tiene al menos 6 caracteres, rellenando con ceros a la izquierda si es necesario. Piensa que si un usuario quiere introducir manualmente el valor de un color, por ejemplo el azul 0000FF, puede caer en la tentación de no escribir los ceros pensando, erróneamente, que no tienen valor al encontrarse a la izquierda. Solo es por eso, si estamos seguros de que siempre se van a escribir las 6 cifras del color entonces podemos dejarlo como antes.
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
Cambiar paleta de colores de un TImage Drake C++ Builder 1 24-11-2011 01:43:53
Pasar de Hexadecimal a decimal chinchan C++ Builder 2 06-05-2006 15:26:07
Paleta de colores jdattoli Gráficos 7 03-06-2005 23:17:05
Asignar una paleta de 256 colores aromero Gráficos 0 29-10-2004 02:28:45
de Hexadecimal a Decimal Carlos A Ortega Varios 1 04-08-2003 23:14:56


La franja horaria es GMT +2. Ahora son las 01:08:23.


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