Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Paleta de colores hexadecimal (https://www.clubdelphi.com/foros/showthread.php?t=32966)

dicatek 22-06-2006 15:19:50

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.

seoane 22-06-2006 15:49:15

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;

dicatek 22-06-2006 19:53:49

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.

dec 22-06-2006 21:36:31

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. :)

dicatek 29-06-2006 23:18:48

Solucionado

dicatek 13-07-2006 00:05:37

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!

seoane 13-07-2006 00:21:41

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;

dicatek 13-07-2006 21:17:37

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!

seoane 13-07-2006 21:27:32

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.


La franja horaria es GMT +2. Ahora son las 09:33:41.

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