Solved

Keep same colors algorithm

Posted on 2004-10-11
2
151 Views
Last Modified: 2010-04-05
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
Comment
Question by:ginsonic
  • 2
2 Comments
 
LVL 7

Expert Comment

by:LRHGuy
ID: 12278264
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
 
LVL 7

Accepted Solution

by:
LRHGuy earned 500 total points
ID: 12278394
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;
  function Lighter(orig,add:byte):byte;
  begin
{$R-}
    result:=orig+add;
    if result<orig then
      result:=$ff; {full bright}
{$R+}
  end;
  function Darker(orig,add:byte):byte;
  begin
{$R-}
    result:=orig-add;
    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);
  aDarker:=D.l;
end;

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

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now