关于动态填充问题? 点击:748 | 回复:3



四夕

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 51回
  • 年度积分:0
  • 历史总积分:154
  • 注册:2004年3月28日
发表于:2005-05-27 19:43:00
楼主
为什么我对矩形用动态填充,如何可以从左到右的填充,而不只是从上到下的填充。请各位帮忙! 类似的问题:如何做出一圆弧形带填充的图形?(注:我用标准图形里的圆弧加粗之后根本就不具有填充功能。



microtomato

  • 精华:1帖
  • 求助:0帖
  • 帖子:84帖 | 1476回
  • 年度积分:0
  • 历史总积分:2078
  • 注册:2001年11月02日
发表于:2005-05-27 22:01:00
1楼
procedure TForm1.DrawFillRect(DestCanvas:TCanvas;RectX,RectY,RectW,RectH:Integer; Percent:Single;BkClr,ForeClr:TColor); begin //绘制从左到右的填充 with DestCanvas do begin Brush.Color := BkClr; Rectangle(Rect(RectX,RectY,RectW,RectH)); Brush.Color := ForeClr; FillRect(Rect(RectX+1,RectY+1,RectX+Round(RectW * Percent*0.01),RectH-1)); end; end; //调用方式: DrawFillRect(Image1.Canvas,0,0,100,100,30,clYellow,clRed); 在Image1的X=0,Y=0处绘制1个边长为100的正方形,填充率为30%,背景色为黄色,填充色为红色。 --------------------------------------------------------- procedure TForm1.DrawFillPie(DestCanvas:TCanvas;RectX,RectY,RectW,RectH:Integer; Percent:Single;BkClr,ForeClr:TColor); var MiddleX,MiddleY:Integer; Angle:Single; begin //绘制圆弧形填充 with DestCanvas do begin Brush.Color := BkClr; Ellipse(RectX,RectY,RectW,RectH); Brush.Color := ForeClr; MiddleX := RectW div 2; MiddleY := RectH div 2; Angle := (Pi * ((Percent / 50) + 0.5)); Pie(RectX, RectY, RectW, RectH, Integer(Round(MiddleX * (1 - Cos(Angle)))), Integer(Round(MiddleY * (1 - Sin(Angle)))), MiddleX, 0); end; end; //调用方式: DrawFillPie(Image1.Canvas,0,0,100,100,30,clYellow,clRed); 在Image1的X=0,Y=0处绘制1个外接矩形为100×100的圆,填充率为30%,背景色为黄色,填充色为红色。

四夕

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 51回
  • 年度积分:0
  • 历史总积分:154
  • 注册:2004年3月28日
发表于:2005-05-28 19:05:00
2楼
十分感谢楼上的兄弟,我的描述不够准确。 第二个问题应该说是圆环形填充才对。就是弯曲的管道。

四夕

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 51回
  • 年度积分:0
  • 历史总积分:154
  • 注册:2004年3月28日
发表于:2005-05-28 19:28:00
3楼
2楼的兄弟你写的程序我看不懂的 我要填充的就是这样的一段管道(我想做出的是钢水从上到下动态填充的问题):先是一段圆环形的管道(四分之一圆)接着是一段水平直管道,WICC自带的库里没有这样带填充量的图形。 我的问题是:不会做那个圆环形的管道,关键是做出形似管道的话又无法填充,另外水平直管段我打算用矩形做出来。如何把两段衔接上??? 我的初步设想是用XY坐标的变化改变填充量,到了一顶长度的时候填充量再置零。

热门招聘
相关主题

官方公众号

智造工程师