如何制作背景图案颜色渐渐变淡(100分)

  • 主题发起人 主题发起人 chinlw
  • 开始时间 开始时间
C

chinlw

Unregistered / Unconfirmed
GUEST, unregistred user!
背景随窗体大小改变而改变
 
是否相当于窗体的背景的透明度不断增大?
我有一个半透明的panel的例子
 
如果是用TImage装载的位图,可以设定TImage.Streched := TRUE;如果是直接在Canvas
上画的,则要用到CopyRect将位图栲到不同大小的矩形范围内(Bitblt也行)。
 
自己控制Form的color,用RGB(r,g,b),注意r,g,b循环变化
 
用RGB(r,g,b),还需用Ttimerontimer事件来控制
r,g,b (0~255间的整数) 的渐变
和form的 height,width的渐变
 
Image1.Streched := TRUE;
 
可以与我联系有一点心得。
mail to:loopy@netease.com
 
http://tingweb.363.net有一篇文章
另:AHM2000有直接的背景控件可用,很不错
 
我在一篇文章中摘录的,试一试

unit Bmp?-Disaper;?
interface?
uses?
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,Forms,Dialogs,Ex
tCtrls,StdCtrls;?
type?
TForm1=class(TForm)?
Image1:TImage;{显示渐隐图像}?
Timer1:TTimer;{时钟构件}?
Panel1:TPanel;{显示渐隐过程,已渐隐为背景色的颜色数}?
Button1:TButton;{开始渐隐按钮}?
procedure Timer1 Timer(Sender:TObject);{始终控制过程}?
procedure Button1 Click (Sender:TObject);{激发渐隐过程}?
procedure FormCreate (Sender:TObject);{窗体构造过程}?
private?
PalDevice:Imteger;{调色板模式标志}?
go:integer;{渐隐开始标志}?
pal:arrar[0...255] of TPaletteEntry;{逻辑调色板}?
end;??
var?
Form1:TForm1;
implementation?
{$R *.DFM}??
procedure TForm1.Timer1Timer(Sender:TObject);?
var?
i,n:integer;?
begin?
if go=1 then{开始渐隐}?
begin?
for i:=0 to 255 do{调色板颜色值递减}?
begin?
pal.peFlags:=PC?-RESERVED;{调色板动画标志,一定得这样设置}?
if pal.peRed>0 thenpal.peRed:=pal.peRed-1;?
if pal.peGreen>0 thenpal.peGreen:=pal.peGreen-1;?
if pal.peBlue>0 thenpal.peBlue:=pal.peBlue-1;
end;??
SetPaletteEntries(Image1.Picture.Bitmap.Palette,0,256,pal);{设置新的颜色到DIB调色板}?
RealizePalette(Image1.Picture.Bitmap.Canvas.Handle);{影射逻辑调色板到系统硬件调色板}?
{计算已经渐隐消失的颜色数,如全数完成则终止渐隐过程,令go=0}?
n:=0;?
for i:=0 to 255 do?
if(pal.peRed=0) and (pal.peGreen=0) and (pal.peBlue=0)
then?
n:=n+1?
if n=256 then?
begin?
Panel1.Caption:='OK';?
go:=0;?
end?
else?
Panel1.Caption:='n='+IntToStr(n);?
end;?
end;??
procedure TForm1.Button1Click(Sender:TObject);?
begin?
GetPaletteEntries(Image1.Pictrue.Bitmap.Palette,0,256,pal);{获得DIB图像的调色板}?
{判断系统是否是基于调色板的显示模式,如果是则开始渐隐过程}?
PalDevice:=GetDeviceCaps(Canvas.Handle,RASTERCAPS) and RC?-PALETTE;?
if(PalDevice>0) the go:=1;?
end;?
procedure TForm1.FormCreate(Sender:TObject);?
begin?
Image1.Pictrue.Bitmap.LoadFromFile('c:/ideo10/s.bmp');{加载DIB图像}?
end;?
end.
 
多人接受答案了。
 
后退
顶部