procedure TForm1.DrawItem(Item:TMenuItem; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); var dc,y,i,j,xb,xe:integer; begin //设置字体和其前景色 ACanvas.Font := Screen.IconFont; SetBkMode(ACanvas.Handle,TRANSPARENT); //设背景为透明//根椐菜单宽度计算渐变背景色的填充色增量;当菜单宽度大于256时没有渐变较果 dc:=ACanvas.ClipRect.Right-ACanvas.ClipRect.Left; dc:=(256 div dc); dc:=dc*256;//计算渐变背景色的填充起点 xb:=ARect.Left + ImageList1.Width+2;//计算渐变背景色的填充终点 xe:=ARect.Right-xb;//绘制背景图 ACanvas.StretchDraw(Rect(0,0,ACanvas.ClipRect.Right,ACanvas.ClipRect.Bottom), CoolBar1.Bitmap);//非平辅方式绘制//绘制菜单项文本 for j:=0 to Item.Parent.Count -1 do begin y:=19*j+4; ACanvas.TextOut(ARect.Left+20,y,Item.Parent.Items[j].Caption);//front color is black font end;//绘制当前选择的菜单项 if Selected then begin for i:=0 to xe do begin ACanvas.Brush.Color := $002222FF+i*dc; //背景的填充色,$002222FF为起始色 ACanvas.FillRect(Rect(xb,ARect.Top,xb+1,ARect.Bottom)); inc(xb); end; ImageList1.Draw(ACanvas,ARect.Left+1,ARect.Top+1,0,true); //在左边绘制图标 ACanvas.Font.Color:=clWhite; //被选中时的字体前景色是白色 SetBkMode(ACanvas.Handle,TRANSPARENT); //必须重设背景模式为透明 ACanvas.TextOut(ARect.Left+20,ARect.Top+4,Item.Caption);//front color,which is white font end; end;
Selected: Boolean);
var
dc,y,i,j,xb,xe:integer;
begin
//设置字体和其前景色
ACanvas.Font := Screen.IconFont;
SetBkMode(ACanvas.Handle,TRANSPARENT); //设背景为透明//根椐菜单宽度计算渐变背景色的填充色增量;当菜单宽度大于256时没有渐变较果
dc:=ACanvas.ClipRect.Right-ACanvas.ClipRect.Left;
dc:=(256 div dc);
dc:=dc*256;//计算渐变背景色的填充起点
xb:=ARect.Left + ImageList1.Width+2;//计算渐变背景色的填充终点
xe:=ARect.Right-xb;//绘制背景图
ACanvas.StretchDraw(Rect(0,0,ACanvas.ClipRect.Right,ACanvas.ClipRect.Bottom),
CoolBar1.Bitmap);//非平辅方式绘制//绘制菜单项文本
for j:=0 to Item.Parent.Count -1 do
begin
y:=19*j+4;
ACanvas.TextOut(ARect.Left+20,y,Item.Parent.Items[j].Caption);//front color is black font
end;//绘制当前选择的菜单项
if Selected then begin
for i:=0 to xe do begin
ACanvas.Brush.Color := $002222FF+i*dc; //背景的填充色,$002222FF为起始色
ACanvas.FillRect(Rect(xb,ARect.Top,xb+1,ARect.Bottom));
inc(xb);
end;
ImageList1.Draw(ACanvas,ARect.Left+1,ARect.Top+1,0,true); //在左边绘制图标
ACanvas.Font.Color:=clWhite; //被选中时的字体前景色是白色
SetBkMode(ACanvas.Handle,TRANSPARENT); //必须重设背景模式为透明
ACanvas.TextOut(ARect.Left+20,ARect.Top+4,Item.Caption);//front color,which is white font
end;
end;