PDA

Ver la Versión Completa : Error de dirección en un tedit


dicatek
30-06-2006, 23:18:57
Hola!

Estoy usando el codigó que me enseñó seoane para usar una paleta de colores con sus codigos en hexadecimal.


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;

Y el siguiente para usarlo


var MiColor: TColor;begin MiColor:= StrToIntDef('$'+Edit1.Text,0);end;

El problema que tengo es que en el Edit1 el codigo hexadecimal de los colores, no me sale de izquierda a derecha, si no que me sale, de derecha a izquierda. Como puedo solventar este conflicto?

Gracias anticipadas!

seoane
30-06-2006, 23:40:21
Como puedo solventar este conflicto?


Puedes solventarlo leyendo la respuesta que te dí en tu primer hilo (http://www.clubdelphi.com/foros/showthread.php?t=32966), ahi te explico que delphi utiliza para representar un color 3 bytes, siendo el mas alto el Azul y el mas bajo el Rojo. Por lo que al convertirlo a hexadecimal primero nos sale el azul, luego el verde y por ultimo el rojo. Esto es así, y no hay ningún problema en volver a convertir el string resultante al mismo color original.

Puede que la confusión la tengas porque al llamarse RGB creas que el rojo tiene que ir primero, pero ya ves que no es así. O puede que en algún programa como photoshop hayas visto representado un color en hexadecimal con el rojo primero, pero eso es solo una forma de expresarlo. De todas formas en el otro hilo también te explico como tienes que hacer para voltear el string, :rolleyes: pero veo que no lo has leído.

dicatek
01-07-2006, 22:55:46
Hola Seoane y perdón por las repeticiones. Como bien dices, pensaba que RGB era Rojo,verde, amarillo, ahora ya lo sé. En cuanto a lo que me dijistes si que lo leí, pero no entendí nada:o.

Al final me pillé el libro que tengo de Delphi 7 y con tu ayuda logré no solo hacer lo que queria sino entenderlo todo a la perfección. Muchas gracias de veras.

Pon el codigo en la sección de trucos que a más de uno podrá irle bien:


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
StrColor: string;
implementation
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;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
with TColorDialog.Create(self) do
try
if Execute then
begin
StrColor:= ColorToStr(Color);
Edit1.Text:= StrColor;
end;
finally
Free;
end;
end;

end.


Muchas gracias de veras.;)

dicatek
02-07-2006, 00:42:45
Buala! Que rabia!

Me sucede que he creado una mini aplicación, desde cero, con la información que me mandastes, y ahora cuando copio el codigo que funciona al proyecto que tenia ya empezado me sale el siguiente error al compilar:

[Error] UfrmPrincipal.pas(107): Undeclared identifier: 'IntToHex'
[Error] UfrmPrincipal.pas(114): Undeclared identifier: 'StrToIntDef'
[Error] UfrmPrincipal.pas(118): Declaration expected but 'USES' found

Que he echo mal para que con un proyecto desde cero funcione y uno empezado, no?

Definitivamente,

EDITO: PRoblema resuelto, escribí las funciones antes de la uses secundarias.

Muchas gracias.