高手清进!!! 如何画带箭头的直线??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试试这个,也许符合你的要求 PROCEDURE DrawArrow(CONST Canvas: TCanvas; CONST x1,y1, x2,y2: INTEGER; CONST HeadLength: INTEGER; CONST HeadFill: BOOLEAN; CONST color: TColor); VAR Triangle : ARRAY[0..2] OF TPoint; xbase : INTEGER; xLineDelta : INTEGER; xLineUnitDelta : Double; xMiddle : INTEGER; xNormalDelta : INTEGER; xNormalUnitDelta: Double; ybase : INTEGER; yLineDelta : INTEGER; yLineUnitDelta : Double; yMiddle : INTEGER; yNormalDelta : INTEGER; yNormalUnitDelta: Double; BEGIN Canvas.Pen.Color := color; Canvas.Brush.Style := bsSolid; Canvas.MoveTo(x1,y1); Canvas.LineTo(x2,y2); xLineDelta := x2 - x1; yLineDelta := y2 - y1; xLineUnitDelta := xLineDelta / SQRT( SQR(xLineDelta) + SQR(yLineDelta) ); yLineUnitDelta := yLineDelta / SQRt( SQR(xLineDelta) + SQR(yLineDelta) ); // (xBase,yBase) is where arrow line is perpendicular to base of triangle. xBase := x2 - ROUND(HeadLength * xLineUnitDelta); yBase := y2 - ROUND(HeadLength * yLineUnitDelta); xNormalDelta := yLineDelta; yNormalDelta := -xLineDelta; xNormalUnitDelta := xNormalDelta / SQRT( SQR(xNormalDelta) + SQR(yNormalDelta) ); yNormalUnitDelta := yNormalDelta / SQRt( SQR(xNormalDelta) + SQR(yNormalDelta) ); Triangle[0] := Point(x2,y2); Triangle[1] := Point(xBase + ROUND(HeadLength*xNormalUnitDelta), yBase + ROUND(HeadLength*yNormalUnitDelta)); Triangle[2] := Point(xBase - ROUND(HeadLength*xNormalUnitDelta), yBase - ROUND(HeadLength*yNormalUnitDelta)); // Draw the arrow tip Canvas.Polygon(Triangle); // Floodfill from "middle" of triangle head IF HeadFill THEN BEGIN xMiddle := (Triangle[0].x + Triangle[1].x + Triangle[2].x) DIV 3; yMiddle := (Triangle[0].y + Triangle[1].y + Triangle[2].y) DIV 3; Canvas.Brush.Color := color; // Canvas.Pixels[xMiddle, yMiddle]; Canvas.FloodFill(xMiddle,yMiddle, color, fsBorder); END END;procedure TForm1.Button1Click(Sender: TObject);begin DrawArrow(Form1.canvas,50,50,100,100,10,True,clblack);end; 双重循环退出问题 delphi ADOQuery控件使用Clone的问题 FASTREPORT 相当郁闷的一天 关于表的关联? 通过那些属性来让子窗体显示时,显示在屏幕的某一固定位置,并且能固定它的宽度和高度 TQuery和TDBGrid控件连接后游标的问题! 厉害的哥哥快来帮忙! 谁有 PsFRExportFilters 控件的最新注册版?万分感谢!!! 找不到system.pas 怎样多行删除dxdbgrid中的数据?知道请进立即结帐 数据库的备份
PROCEDURE DrawArrow(CONST Canvas: TCanvas;
CONST x1,y1, x2,y2: INTEGER;
CONST HeadLength: INTEGER;
CONST HeadFill: BOOLEAN;
CONST color: TColor);
VAR
Triangle : ARRAY[0..2] OF TPoint;
xbase : INTEGER;
xLineDelta : INTEGER;
xLineUnitDelta : Double;
xMiddle : INTEGER;
xNormalDelta : INTEGER;
xNormalUnitDelta: Double;
ybase : INTEGER;
yLineDelta : INTEGER;
yLineUnitDelta : Double;
yMiddle : INTEGER;
yNormalDelta : INTEGER;
yNormalUnitDelta: Double;
BEGIN
Canvas.Pen.Color := color;
Canvas.Brush.Style := bsSolid; Canvas.MoveTo(x1,y1);
Canvas.LineTo(x2,y2); xLineDelta := x2 - x1;
yLineDelta := y2 - y1; xLineUnitDelta := xLineDelta / SQRT( SQR(xLineDelta) + SQR(yLineDelta) );
yLineUnitDelta := yLineDelta / SQRt( SQR(xLineDelta) + SQR(yLineDelta) ); // (xBase,yBase) is where arrow line is perpendicular to base of triangle.
xBase := x2 - ROUND(HeadLength * xLineUnitDelta);
yBase := y2 - ROUND(HeadLength * yLineUnitDelta); xNormalDelta := yLineDelta;
yNormalDelta := -xLineDelta;
xNormalUnitDelta := xNormalDelta / SQRT( SQR(xNormalDelta) + SQR(yNormalDelta) );
yNormalUnitDelta := yNormalDelta / SQRt( SQR(xNormalDelta) + SQR(yNormalDelta) );
Triangle[0] := Point(x2,y2);
Triangle[1] := Point(xBase + ROUND(HeadLength*xNormalUnitDelta),
yBase + ROUND(HeadLength*yNormalUnitDelta));
Triangle[2] := Point(xBase - ROUND(HeadLength*xNormalUnitDelta),
yBase - ROUND(HeadLength*yNormalUnitDelta)); // Draw the arrow tip
Canvas.Polygon(Triangle); // Floodfill from "middle" of triangle head
IF HeadFill
THEN BEGIN
xMiddle := (Triangle[0].x + Triangle[1].x + Triangle[2].x) DIV 3;
yMiddle := (Triangle[0].y + Triangle[1].y + Triangle[2].y) DIV 3;
Canvas.Brush.Color := color; // Canvas.Pixels[xMiddle, yMiddle];
Canvas.FloodFill(xMiddle,yMiddle,
color,
fsBorder);
END END;
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawArrow(Form1.canvas,50,50,100,100,10,True,clblack);
end;