• Status: Solved
• Priority: Medium
• Security: Public
• Views: 162

# Keep same colors algorithm

I have for my button a color Color1 ( ex: \$005200A4 ) . For border Color2 ( ex.\$0036006C) and Color3 ( ex: \$009428FF ).

The color2 is a dark Color1 and Color3 is the light Color1.

I wish to get instantly Color2/Color3 when change Color1 to have omolog dark/light color for the new Color1. Same darkness/lightness scale.

How to do that?
0
ginsonic
• 2
1 Solution

Commented:
The lower the number the "darker" the color (I think).

\$52  \$00  \$A4  is color 1
\$36  \$00  \$6C  is color2 (darker, lower numbers)
-\$1C -\$00 -\$38  subtract from normal color to get darker ... lowest number should be \$00

\$94  \$28  \$FF  is color3 (lighter, higher numbers)
+\$42 +\$28 +\$5B  add to normal color to get lighter ... highest number should be \$FF

You do need to deal with each piece of the color separately, as shown.

Just a thought...
0

Commented:
This seems to work for me. You might want to play with the values being added/subtracted to get a good contrast...

type
c1=record
case integer of
0:( p:array[0..3] of byte);
1:(l:longint)
end;

procedure MakeColors(aOrig:tColor; var aLighter, aDarker:TColor);
var
C,L,D:c1;
begin
{\$R-}
if result<orig then
result:=\$ff; {full bright}
{\$R+}
end;
begin
{\$R-}
if result>orig then
result:=\$00; {full dark}
{\$R+}
end;
begin
C.l:=aOrig;
// make lighter color
L.L:=C.L;
L.p[1]:=lighter(C.p[1],\$5B);
L.p[2]:=lighter(C.p[2],\$28);
L.p[3]:=lighter(C.p[3],\$42);
aLighter:=L.L;
// make darker color
D.L:=C.L;
D.p[1]:=darker(C.p[1],\$1c);
D.p[2]:=darker(C.p[2],\$1c);
D.p[3]:=darker(C.p[3],\$38);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
C,L,D:tColor;
begin
self.color:=clYellow;
makecolors(Self.Color,L,D);
panel1.color:=L;
end;
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

## Featured Post

• 2
Tackle projects and never again get stuck behind a technical roadblock.