PDA

Ver la Versión Completa : incorporar color directamente por codigo


viverosjosem
25-11-2019, 05:05:25
Hola amigos.
Tengo una aplicacion que toma datos de un archivo de texto. En este archivo hay una columna de colores en formato integer. La aplicacion necesita tomar la columna de colores (Quinta columna), y pintar paneles, segun corresponda.

El archivo es similar a este:

1;1;5;6900;16711935;0
1;2;4;5900;65535;0
1;3;3;3900;65535;0
1;4;16;6800;65280;0
1;5;23;5200;16776960;0
1;6;2;3500;-16777201;0
1;7;1;3400;16711935;0
1;8;9;15300;0;0



Aqui va un segmento de codigo, donde explico las lineas importantes para que se entienda el problema.
** Asumiremos que estamos posicionado sobre la primera linea del archivo de texto.

var
...
...
sStrToHexa := String;
iTColor : TColor;

...
...
...
AssignFile(f, Archivo );
Reset(f);
while not SeekEof(f) do
begin
if SeekEoln(f) then
Readln;

Read( f, j );
j := Trim( j );

sCateg := GetParam(j, ';');
sPanel := GetParam(j, ';');
sCodigo := GetParam(j, ';');
sPrecio := GetParam(j, ';');
sColorBtn:= GetParam(j, ';'); //===> Esta linea toma el color de la linea del archivo (columna 5). Por ejemplo: 16711935, Color Rosado.

sStrToHexa := IntToHex(StrToInt(sColorBtn)); // ===> Aqui convertimos el color numerico(16711935) a Hexadecimal, lo que nos da: 00FF00FF

iTColor := '$' + sStrToHexa; //===> Aqui deberiamos asignar el color Hexadecimal, de la forma $00FF00FF
...
...


El problema es que al asignar el color, en la forma: '$' + sStrToHexa, esta asignacion, internamente conserva las comillas (''), con lo que no me entrega el color esperado. Solo me entrega un tono de gris, para todas las lineas de color leidas.

Entonces,
como puedo realisar esa asignacion?, eliminando internamente las comillas?, para que me quede algo como:

iTColor := $00FF00FF;


Espero haberme explicado bien.

Saludos.
Jose Miguel.

manelb
25-11-2019, 07:40:58
prueba si te funciona así ...

grid.Canvas.Brush.Color:= Stringtocolor('$00FF00FF');


Saludos a todos

viverosjosem
25-11-2019, 11:23:04
Hola manelb.
Gracias por tu respusta.
Olvide comentar que trabajo con Delphi Tokyo, para android. Y la funcion: "StringToStr", no esta soportada para Delphi/Android.

Saludos.
Jose Miguel.

viverosjosem
25-11-2019, 11:25:57
Quise decir: La funcion "StringToColor", no esta soportada para Delphi/Android.

Saludos.
Jose Miguel.

viverosjosem
26-11-2019, 01:10:58
Hola Amigos.
Solucione el problema de los colores en Delphi/Android.

lo logre de esta manera.


...
...
sColorBtn:= GetParam(j, ';');

sColorBtn := IntToHex(StrToInt(sColorBtn));
...

// Aqui, logramos incorporar el codigo Hexadecimal, sin comillas.
TRectangle(Components[a]).Fill.Color := TAlphaColor(AnsiQuotedStr('$'+sColorBtn, '"'));


Les dejo la solucion, por si le sirve a alguien.

Y gracias por su apoyo.
Saludos.
Jose Miguel.

ElKurgan
26-11-2019, 07:23:40
Gracias por compartir la solución

Saludos