晕倒,你这样写要实现右边的效果是不可能的。按照下面写,你可以调整参数实现你自己的效果:如果你的高度小于255 y1 := Space; y2 := Space; for i:=0 to CHeight do begin b.lbColor:=RGB(0, 255 - i, 0); ... y2 = Space + i; Rectangle(DC, Space, y1, cWidth, y2 + i); y1 = y2;end;
谢谢各位因为颜色是要让用户设置的所以类似 b.lbColor:=RGB(0, 255 - i, 0); 这样的代码应该不太可能还有,应该不会用 for 循环实现,因为效率较低,量大的时候(很多个这个控件) 程序的反应速度会很低必须一次性绘制继续坐等各位的指点再次感谢了
使用GDI+的 TGpLinearGradientBrush
var gBrush : TGpBrush; gp : TGpGraphics; r : TGpRect; begin gBrush := TGpLinearGradientBrush.Create(FRect,ARGBFromCOLORREF(FAlphas,color1), ARGBFromCOLORREF(FAlphaE,color2),lmHorizontal); gp := TGpGraphics.Create(dc); gp.FillEllipse(gBrush,r); freeandnil(gBrush); freeandnil(gp); end;
http://houke2004.blog.163.com/blog/static/20863165200952525747443/
y1 := Space;
y2 := Space;
for i:=0 to CHeight do
begin
b.lbColor:=RGB(0, 255 - i, 0);
...
y2 = Space + i;
Rectangle(DC, Space, y1, cWidth, y2 + i);
y1 = y2;end;
gp : TGpGraphics;
r : TGpRect;
begin
gBrush := TGpLinearGradientBrush.Create(FRect,ARGBFromCOLORREF(FAlphas,color1), ARGBFromCOLORREF(FAlphaE,color2),lmHorizontal);
gp := TGpGraphics.Create(dc);
gp.FillEllipse(gBrush,r);
freeandnil(gBrush);
freeandnil(gp);
end;
TGpBrush
要uses哪个文件啊,找不到啊,不能用噢
用GDI+肯定要用一些文件
我下载了GDIPOBJ,GDIPAPI,GDIPUNTIL
还有什么 GDIPLUS………………
等等
我自己还用的Graphics, 搞的晕呼呼的
不是少这个,就是少那个!全部搞全了,又是类型不对啥的
搞死人了,能不能给详细点啊
把一些必须的文件发我邮箱行么?
十分感谢……
[[email protected]][/email]
仅引用 GDIPAPI, GDIPOBJ; 这两个文件,总是会报
ARGBFromCOLORREF 未定义噢
怎么办呢?
不好意思,查了一下,可能是邮箱满了,1000封了,呵呵
再次请教您了
我现在直接在想在ScrollBox上绘制,我重载了ScrollBox的WMPaint
在里面GetDC,然后用GDI绘制是可以的
但换面GDI+绘制就不行了,不知道为什么噢
麻烦能试一下么?
再次感谢您了!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Gdiplus,GdipUtil;type
TScrollBox = class(Forms.TScrollBox)
private
procedure WMPaint(var msg : TMessage);message WM_PAINT;
public
end;type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TScrollBox }procedure TScrollBox.WMPaint(var msg: TMessage);
var dc : HDC;
gp : TGpGraphics;
gBrush : TGpBrush;
rc : TGpRect;
tagbrush : tagLOGBRUSH;
hB : HBRUSH;
begin
inherited;
dc := GetDC(Handle);
gp := TGpGraphics.Create(dc);
rc := GpRect(0,0,Width,Height);
tagbrush.lbStyle := BS_SOLID;
tagbrush.lbColor := clWhite;
hB := CreateBrushIndirect(tagbrush);
FillRect(dc,Rect(0,0,Width,Height),hB);
gBrush := TGpLinearGradientBrush.Create(rc,ARGBFromTColor(255,clBlue),ARGBFromTColor(100,clBlue));
gp.FillRectangle(gBrush,rc);
DeleteObject(hB);
FreeAndNil(gp);
FreeAndNil(gBrush);
ReleaseDC(Handle,dc);
end;end.
//正常显示,你所谓的从一种颜色向透明的渐变,最终要看的画布底色是什么,如果上面的DC上有获取控件的背景图像数据,那结果就像PAINTBOX上画半透明的图片一样,如果是白色,那结果就是由蓝向白过渡