CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

寻求绘制图形的源码?不是简单的几何图形?要有由几何图形组成的图形.

楼主shenwei5630(sw1234)2003-12-02 15:57:02 在 Delphi / VCL组件开发及应用 提问

比如说其中要有一般几何图形的画法,还要有如电子元件的图像,然后一点就可以  
  将元件画出,不知道如何实现,麻烦各位帮帮忙. 问题点数:20、回复次数:8Top

1 楼shenwei5630(sw1234)回复于 2003-12-02 16:17:03 得分 0

顶一下.Top

2 楼Dlwxn(Dlwxn)回复于 2003-12-02 16:20:16 得分 0

基本图元还是自己写,想要什么样就写成什么样.Top

3 楼shenwei5630(sw1234)回复于 2003-12-02 16:34:42 得分 0

老大,就是不理解图元之类的,所以请教.能否说明详细点,或者提供类似的资料Top

4 楼shenwei5630(sw1234)回复于 2003-12-02 18:43:37 得分 0

up  
  Top

5 楼Dlwxn(Dlwxn)回复于 2003-12-02 19:18:55 得分 20

刚写了一个,D6下通过,代码很烂,慢慢看吧,是不是和你的要求一样?  
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   ExtCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          PaintBox:   TPaintBox;  
          procedure   PaintBoxMouseDown(Sender:   TObject;   Button:   TMouseButton;  
              Shift:   TShiftState;   X,   Y:   Integer);  
          procedure   PaintBoxMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
              Y:   Integer);  
          procedure   PaintBoxMouseUp(Sender:   TObject;   Button:   TMouseButton;  
              Shift:   TShiftState;   X,   Y:   Integer);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
      Drawing:Boolean;  
      BeginPoint,EndPoint:TPoint;  
   
  implementation  
   
  {$R   *.dfm}  
   
  {   TForm1   }  
   
  procedure   DrawGraphic(ACanvas:   TCanvas;   OriginX,  
                                            OriginY,   EndX,   EndY:   Integer;PenMode:TPenMode);overload;  
  var  
      Origin,MovePt:TPoint;  
      TempX,Radii,TempY:variant;  
      TempOriginX,TempOriginY:variant;  
      Angle:real;  
  begin  
      ACanvas.Brush.Style:=bsClear;  
      ACanvas.Pen.Mode:=PenMode;  
      Radii:=Sqrt((OriginY-EndY)*(OriginY-EndY)+(OriginX-EndX)*(OriginX-EndX))   /   10;  
      with   ACanvas   do  
      begin  
          if   (OriginX<=EndX)   then  
          begin  
              TempOriginX:=(EndX-OriginX)   div   3+OriginX;  
              TempOriginY:=(EndY-OriginY)   div   3+OriginY;  
              MoveTo(OriginX,OriginY);  
              LineTo(TempOriginX,TempOriginY);  
              if   EndX<>OriginX   then  
              begin  
                  Angle:=ArcTan((EndY-OriginY)   /   (EndX-OriginX));  
                  TempX:=Radii*cos(Angle);  
                  TempY:=Radii*sin(Angle);  
              end   else  
              if   EndX=OriginX   then  
              begin  
                  TempY:=Radii;  
                  TempX:=0;  
              end;  
   
              TempOriginX:=TempOriginX+TempX;  
              TempOriginY:=TempOriginY+TempY;  
              Origin.X:=TempOriginX-Radii;  
              Origin.Y:=TempOriginY-Radii;  
              MovePt.X:=TempOriginX+Radii;  
              MovePt.Y:=TempOriginY+Radii;  
              Ellipse(Origin.X,Origin.Y,MovePt.X,MovePt.Y);  
   
              TempOriginX:=TempOriginX+TempX;  
              TempOriginY:=TempOriginY+TempY;  
              Origin.X:=TempOriginX-Radii;  
              Origin.Y:=TempOriginY-Radii;  
              MovePt.X:=TempOriginX+Radii;  
              MovePt.Y:=TempOriginY+Radii;  
              Ellipse(Origin.X,Origin.Y,MovePt.X,MovePt.Y);  
   
              TempOriginX:=TempOriginX+TempX;  
              TempOriginY:=TempOriginY+TempY;  
              MoveTo(TempOriginX,TempOriginY);  
              LineTo(EndX,EndY);  
   
              TempOriginX:=(TempOriginX+EndX)   div   2;  
              TempOriginY:=(TempOriginY+EndY)   div   2;  
              Origin.X:=TempOriginX-Radii/2;  
              Origin.Y:=TempOriginY-Radii/2;  
              MovePt.X:=TempOriginX+Radii/2;  
              MovePt.Y:=TempOriginY+Radii/2;  
              Ellipse(Origin.X,Origin.Y,MovePt.X,MovePt.Y);  
   
          end   else  
          begin  
              TempOriginX:=2*(OriginX-EndX)   div   3+EndX;  
              TempOriginY:=2*(OriginY-EndY)   div   3+EndY;  
              MoveTo(OriginX,OriginY);  
              LineTo(TempOriginX,TempOriginY);  
              Angle:=ArcTan((OriginY-EndY)   /   (OriginX-EndX));  
              TempX:=Radii*cos(Angle);  
              TempY:=Radii*sin(Angle);  
   
              TempOriginX:=TempOriginX-TempX;  
              TempOriginY:=TempOriginY-TempY;  
              Origin.X:=TempOriginX-Radii;  
              Origin.Y:=TempOriginY-Radii;  
              MovePt.X:=TempOriginX+Radii;  
              MovePt.Y:=TempOriginY+Radii;  
              Ellipse(Origin.X,Origin.Y,MovePt.X,MovePt.Y);  
   
              TempOriginX:=TempOriginX-TempX;  
              TempOriginY:=TempOriginY-TempY;  
              Origin.X:=TempOriginX-Radii;  
              Origin.Y:=TempOriginY-Radii;  
              MovePt.X:=TempOriginX+Radii;  
              MovePt.Y:=TempOriginY+Radii;  
              Ellipse(Origin.X,Origin.Y,MovePt.X,MovePt.Y);  
   
              TempOriginX:=TempOriginX-TempX;  
              TempOriginY:=TempOriginY-TempY;  
              MoveTo(TempOriginX,TempOriginY);  
              LineTo(EndX,EndY);  
   
              TempOriginX:=(TempOriginX+EndX)   div   2;  
              TempOriginY:=(TempOriginY+EndY)   div   2;  
              Origin.X:=TempOriginX-Radii/2;  
              Origin.Y:=TempOriginY-Radii/2;  
              MovePt.X:=TempOriginX+Radii/2;  
              MovePt.Y:=TempOriginY+Radii/2;  
              Ellipse(Origin.X,Origin.Y,MovePt.X,MovePt.Y)  
          end;  
      end;  
  end;  
   
  procedure   DrawGraphic(ACanvas:   TCanvas;   Origin,EndP:TPoint;PenMode:TPenMode);overload;  
  begin  
      DrawGraphic(ACanvas,Origin.X,Origin.Y,   EndP.X,   EndP.Y,PenMode);  
  end;  
   
  procedure   TForm1.PaintBoxMouseDown(Sender:   TObject;   Button:   TMouseButton;  
      Shift:   TShiftState;   X,   Y:   Integer);  
  begin  
    BeginPoint   :=   Point(X,Y);   //起点  
    EndPoint   :=   Point(X,   Y);   //终点  
    Drawing:=true;  
  end;  
   
  procedure   TForm1.PaintBoxMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
      Y:   Integer);  
  begin  
      if   Drawing   then  
      begin  
          DrawGraphic(PaintBox.Canvas,   BeginPoint,   EndPoint,   pmNotXor);  
          EndPoint   :=   Point((X),(Y));  
          DrawGraphic(PaintBox.Canvas,BeginPoint,   EndPoint,   pmNotXor);  
      end;  
  end;  
   
  procedure   TForm1.PaintBoxMouseUp(Sender:   TObject;   Button:   TMouseButton;  
      Shift:   TShiftState;   X,   Y:   Integer);  
  begin  
      if   Drawing   then  
          begin  
              DrawGraphic(PaintBox.Canvas,BeginPoint,   EndPoint,   pmNotXor);  
              EndPoint   :=   Point((X),   (Y));  
              DrawGraphic(PaintBox.Canvas,BeginPoint,   EndPoint,   pmCopy);  
          end;  
      Drawing:=false;  
  end;  
   
  end.  
  Top

6 楼shenwei5630(sw1234)回复于 2003-12-02 19:36:01 得分 0

我的水平太臭了,都不知道如何用?Top

7 楼Dlwxn(Dlwxn)回复于 2003-12-02 19:45:11 得分 0

Form上放一个TPainBox,属性Name:PaintBox,Align:alClient.  
   
  然后把上面代码拷贝到代码编辑器中,完全覆盖原来代码,分别在PaintBox的  
   
  OnMouseDown,OnMouseMove,OnMouseUp事件双击,运行后在窗体上,按下并拖动鼠标就可以了。Top

8 楼shenwei5630(sw1234)回复于 2003-12-02 22:00:10 得分 0

谢谢你!如果能具体地将每个图件放在一个speedbuttonspeed.然后要画什么,就点什么,就像CAD一件,我的信箱是:shenwei5630@vip.sina.com或是shenwei5630@263.net  
  QQ:9658323.我很想学好,就是太菜了.Top

相关问题

  • 圆形是一种几何图形能反映is-a关系吗?
  • 绘制矢量图形
  • openGL绘制地球,求源码
  • 如何在窗口中绘制图形?
  • 使用JScript如何绘制图形???
  • 一个MFC绘制图形的问题
  • 关于 2进制 文件的读写 和 图形的绘制
  • STATIC控件中绘制图形的问题
  • 使用bcb绘制wmf格式图形的问题
  • 问一个VB中绘制图形的问题?

关键词

  • 代码
  • temporiginx
  • temporiginy
  • radii
  • movept
  • originx
  • endx
  • endy
  • origin
  • 几何图形

得分解答快速导航

  • 帖主:shenwei5630
  • Dlwxn

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo