寻求绘制图形的源码?不是简单的几何图形?要有由几何图形组成的图形.
比如说其中要有一般几何图形的画法,还要有如电子元件的图像,然后一点就可以
将元件画出,不知道如何实现,麻烦各位帮帮忙.
问题点数: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




