PDA

Ver la Versión Completa : Form con fondo grandiente


Khronos
26-08-2007, 21:57:57
Es un sencillo procedure para darle un efecto grandiente a los forms sin componentes.


procedure GradientForm (frm : TForm; startcolor, endcolor : TColor);
var
startr : integer;
startg : integer;
startb : integer;
endr : integer;
endg : integer;
endb : integer;
curr : integer;
curg : integer;
curb : integer;
i : integer;
r : TRect;
nolines: byte;
curpct : integer;
bitspix: longint;
begin
startr := startcolor and $000000FF;
startg := (startcolor and $0000FF00) div 256;
startb := (startcolor and $00FF0000) div 256 div 256;
endr := endcolor and $000000FF;
endg := (endcolor and $0000FF00) div 256;
endb := (endcolor and $00FF0000) div 256 div 256;

if frm.Height < 250 then
nolines:=frm.Height
else
nolines:=250;
bitspix:=GetDeviceCaps(frm.Canvas.Handle, BITSPIXEL);
if (bitspix = 8) and (nolines > 50) then
nolines:=50
else if bitspix < 8 then
nolines:=4;

r.Left:=0;
r.Right:=frm.Width;

for i:=0 to nolines do
begin

curpct:= (i * 100) div nolines;


if startr > endr then
curr := startr - (curpct * (startr-endr) div 100)
else
curr := startr + (curpct * (endr-startr) div 100);


if startg > endg then
curg := startg - (curpct * (startg-endg) div 100)
else
curg := startg + (curpct * (endg-startg) div 100);


if startb > endb then
curb := startb - (curpct * (startb-endb) div 100)
else
curb := startb + (curpct * (endb-startb) div 100);


frm.Canvas.Brush.Color:=RGB(curr, curg, curb);


r.Top:=i + (i*(frm.Height div nolines));
r.Bottom:=r.Top + (frm.Height div nolines)+1;


frm.Canvas.FillRect(r);
end;
end;



Para llamarlo


procedure TForm1.FormPaint(Sender: TObject);
begin
GradientForm(Form1,RGB(60,140,210), RGB(1,1,2));
end;



Salu2

Delphius
30-08-2007, 06:07:44
Muy bueno.
Por cierto... ¿es de tu autoria o lo encontraste en algún sitio?
Si no es mucha molestia... ¿podrías indicar el link (si es que no de tu autoria y/o no posee derechos de autor)?
Estoy interesado en estos "aspectos estéticos".
Muchas gracias.

Khronos
30-08-2007, 17:11:15
Este code lo encontre en una pagina y me parecio interesante y lo probe. La combinacion de colores es mia xD


GradientForm(Form1,RGB(60,140,210), RGB(1,1,2));


Modificando los valores consigues todos los colores que quieras. Si me acuerdo de la pagina te paso el link

Salu2

farnao
20-09-2007, 08:57:10
Si también llamas al procedimiento en el evento OnResize el efecto es mejor. Si se llama sólo en el OnPaint el efecto se estropea cuando cambias lo suficiente el tamaño de la venta, o cuando la velocidad del cambio es grande.

jachguate
09-01-2008, 18:47:29
No es muy dificil de "recordar". De hecho, encontré la página por lo que dejo la referencia para dar el crédito correspondiente al autor original

http://www.nikse.dk/delphi.html

roockie
24-01-2008, 23:33:25
ME PARECE MUY INTERESANTE IRE A APLICARLO Y DIRE COMO ME FUE