为什么80%的码农都做不了架构师?>>>   

代码:


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, ComCtrls, TypInfo, Direct2D;typeTForm1 = class(TForm)ListBox1: TListBox;Panel1: TPanel;GroupBox1: TGroupBox;CheckBox1: TCheckBox;Edit1: TEdit;UpDown1: TUpDown;ColorBox1: TColorBox;GroupBox2: TGroupBox;CheckBox2: TCheckBox;ColorBox2: TColorBox;PaintBox1: TPaintBox;procedure FormCreate(Sender: TObject);procedure PaintBox1Paint(Sender: TObject);procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);procedure ListBox1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}typeTEnumDraw = (eEllipse,eLine,eRectangle,eRoundRect,eFrameRect,ePie,eArc,eChord,ePolyLine,ePolygon,ePolyBezier);TPointArr4 = array[0..3] of TPoint;
varptss: array[TEnumDraw] of TPointArr4; //点数组的数组ppts: ^TPointArr4; //某个图形需要的点数组的指针ppt: PPoint;       //某个点的指针enum: TEnumDraw;   //表示当前选择的要绘制的图形类型flag: Boolean;     //判断鼠标是否按在操控点上{初始化数据}
procedure TForm1.FormCreate(Sender: TObject);
vare: TEnumDraw;
begin{初始化点数组}ptss[eEllipse][0] := Point(100,50);ptss[eEllipse][1] := Point(200,150);ptss[eEllipse][2] := Point(MaxInt,MaxInt);ptss[eEllipse][3] := Point(MaxInt,MaxInt);ptss[eRectangle] := ptss[eEllipse];ptss[eLine] := ptss[eEllipse];ptss[eRoundRect] := ptss[eEllipse];ptss[eFrameRect] := ptss[eEllipse];ptss[ePie][0] := Point(100,50);ptss[ePie][1] := Point(200,150);ptss[ePie][2] := Point(150,50);ptss[ePie][3] := Point(100,150);ptss[eArc] := ptss[ePie];ptss[eChord] := ptss[ePie];ptss[ePolyLine][0] := Point(100,50);ptss[ePolyLine][1] := Point(200,50);ptss[ePolyLine][2] := Point(200,150);ptss[ePolyLine][3] := Point(100,150);ptss[ePolygon] := ptss[ePolyLine];ptss[ePolyBezier] := ptss[ePolyLine];{填充 ListBox1}for e := Low(TEnumDraw) to High(TEnumDraw) dobeginListBox1.Items.Add(GetEnumName(TypeInfo(TEnumDraw), ord(e)));end;ListBox1.ItemIndex := 0;{初始化控件}Panel1.Caption := '';UpDown1.Associate := Edit1;Edit1.NumbersOnly := True;Edit1.Alignment := taCenter;UpDown1.Associate := Edit1;UpDown1.Min := 1;CheckBox1.Checked := True;CheckBox2.Checked := True;ColorBox1.Selected := clBlue;ColorBox2.Selected := clLime;{事件共享}CheckBox1.OnClick := ListBox1.OnClick;CheckBox2.OnClick := ListBox1.OnClick;ColorBox1.OnChange := ListBox1.OnClick;ColorBox2.OnChange := ListBox1.OnClick;Edit1.OnChange := ListBox1.OnClick;
end;procedure TForm1.ListBox1Click(Sender: TObject);
beginenum := TEnumDraw(ListBox1.ItemIndex);ppts := @ptss[enum];PaintBox1.Invalidate;
end;procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
beginflag := PaintBox1.Cursor = crCross;
end;procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
vari: Integer;
beginif flag thenbeginppt^ := Point(X, Y);PaintBox1.Invalidate;Exit;end;{判断鼠标是否在控制点上}for i := 0 to Length(ppts^) - 1 dobeginif (ppts^[i].X <> MaxInt) and PtInRect(Rect(ppts^[i].X-4, ppts^[i].Y-4, ppts^[i].X+4, ppts^[i].Y+4), Point(X,Y)) thenbeginPaintBox1.Cursor := crCross;ppt := @ppts^[i]; //哪个控制点Exit;end elsePaintBox1.Cursor := crDefault;end;
end;procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
beginflag := False;
end;{绘制}
procedure TForm1.PaintBox1Paint(Sender: TObject);
varpts: TPointArr4;pt: TPoint;
beginwith TDirect2DCanvas.Create(PaintBox1.Canvas, PaintBox1.ClientRect) dobeginBeginDraw;Pen.Color := ColorBox1.Selected;Pen.Width := StrToIntDef(Edit1.Text, 1);Brush.Color := ColorBox2.Selected;if not CheckBox1.Checked then Pen.Width := 0;if not CheckBox2.Checked then Brush.Style := bsClear;{绘制图形}pts := ppts^;case enum ofeEllipse   : Ellipse(Rect(pts[0], pts[1]));eLine      : begin MoveTo(pts[0].X, pts[0].Y); LineTo(pts[1].X, pts[1].Y); end;eRectangle : Rectangle(Rect(pts[0], pts[1]));eRoundRect : RoundRect(Rect(pts[0], pts[1]), 25, 25);eFrameRect : FrameRect(Rect(pts[0], pts[1]));ePie       : Pie(pts[0].X, pts[0].Y, pts[1].X, pts[1].Y, pts[2].X, pts[2].Y, pts[3].X, pts[3].Y);eArc       : Arc(pts[0].X, pts[0].Y, pts[1].X, pts[1].Y, pts[2].X, pts[2].Y, pts[3].X, pts[3].Y);eChord     : Chord(pts[0].X, pts[0].Y, pts[1].X, pts[1].Y, pts[2].X, pts[2].Y, pts[3].X, pts[3].Y);ePolyLine  : Polyline(pts);ePolygon   : Polygon(pts);ePolyBezier: PolyBezier(pts);end;{绘制控制点}Brush.Style := bsSolid;Brush.Color := clRed;for pt in pts do if pt.X <> MaxInt then FillRect(Rect(pt.X-4, pt.Y-4, pt.X+4, pt.Y+4));EndDraw;Free;end;
end;end.


窗体:


object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 348ClientWidth = 476Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalseOnCreate = FormCreatePixelsPerInch = 96TextHeight = 13object ListBox1: TListBoxLeft = 0Top = 0Width = 129Height = 348Align = alLeftItemHeight = 13TabOrder = 0OnClick = ListBox1Clickendobject Panel1: TPanelLeft = 129Top = 0Width = 347Height = 348Align = alClientCaption = 'Panel1'Padding.Top = 10TabOrder = 1object PaintBox1: TPaintBoxLeft = 1Top = 129Width = 345Height = 218Align = alClientOnMouseDown = PaintBox1MouseDownOnMouseMove = PaintBox1MouseMoveOnMouseUp = PaintBox1MouseUpOnPaint = PaintBox1PaintExplicitLeft = 208ExplicitTop = 136ExplicitWidth = 105ExplicitHeight = 105endobject GroupBox1: TGroupBoxLeft = 1Top = 11Width = 345Height = 62Align = alTopCaption = 'Pen'TabOrder = 0object Edit1: TEditLeft = 256Top = 24Width = 48Height = 21TabOrder = 0Text = 'Edit1'endobject UpDown1: TUpDownLeft = 303Top = 22Width = 17Height = 23TabOrder = 1endobject ColorBox1: TColorBoxLeft = 112Top = 24Width = 114Height = 22TabOrder = 2endobject CheckBox1: TCheckBoxLeft = 16Top = 26Width = 97Height = 17Caption = 'CheckBox1'TabOrder = 3endendobject GroupBox2: TGroupBoxLeft = 1Top = 73Width = 345Height = 56Align = alTopCaption = 'Brush'TabOrder = 1object ColorBox2: TColorBoxLeft = 112Top = 22Width = 114Height = 22TabOrder = 0endobject CheckBox2: TCheckBoxLeft = 16Top = 24Width = 97Height = 17Caption = 'CheckBox2'TabOrder = 1endendend
end


效果图:


转载于:https://my.oschina.net/hermer/blog/320037

Direct2D (2) : 基本图形命令测试相关推荐

  1. OpenCASCADE绘制测试线束:图形命令之VIS 查看器命令

    OpenCASCADE绘制测试线束:图形命令之VIS 查看器命令 ivtkinit ivtkdisplay ivtkerase ivtkfit ivtksetdispmode ivtksetselmo ...

  2. OpenCASCADE绘制测试线束:图形命令之AIS 查看器——网格可视化服务

    OpenCASCADE绘制测试线束:图形命令之AIS 查看器--网格可视化服务 meshfromstl meshdispmode meshselmode meshshadcolor meshlinkc ...

  3. OpenCASCADE绘制测试线束:图形命令之AIS 查看器——对象命令

    OpenCASCADE绘制测试线束:图形命令之AIS 查看器--对象命令 vtrihedron vplanetri vsize vaxis vaxispara vaxisortho vpoint vp ...

  4. OpenCASCADE绘制测试线束:图形命令之AIS 查看器——显示命令

    OpenCASCADE绘制测试线束:图形命令之AIS 查看器--显示命令 vdisplay vdonly vdisplayall verase veraseall vsetdispmode vdisp ...

  5. OpenCASCADE绘制测试线束:图形命令之AIS 查看器——查看命令

    OpenCASCADE绘制测试线束:图形命令之AIS 查看器--查看命令 vinit vhelp vtop vaxo vsetbg vclear vrepaint vfit vzfit vreadpi ...

  6. OpenCASCADE绘制测试线束:图形命令之Axonometric观察器

    OpenCASCADE绘制测试线束:图形命令之Axonometric观察器 view, delete axo, pers, top, ... mu, md, 2dmu, 2dmd, zoom, 2dz ...

  7. 检测两计算机之间是否联通,什么命令测试网络是否联通

    Ping命令常用于测试网络的连通性,是否正常运行. 方法如下: 用其简单的ping 命令,如: ping 192.168.1.1,可以ping前端的网关IP地址 ,局域网内其它的电脑IP地址,远程的一 ...

  8. 通过ping命令测试主机与虚拟机之间是否连通

    一.查询本机.虚拟机Windows IP地址 1.本机的Windows IP地址 方法一:控制面板>网络和Internet>网络和共享中心>更改适配器设置>以太网>详细信 ...

  9. Linux系统如何测试电脑性能,如何使用DD命令测试Linux磁盘的性能?

    Linux系统下DD命令是常用的命令之一,同时DD命令的使用范围也比较广泛.除了已知的可以用DD命令来复制文件外,还可以用DD命令来测试磁盘的性能.那么如何使用DD命令测试Linux磁盘的性能? 下面 ...

最新文章

  1. WordPress更新时提示无法连接到FTP服务器的解决方案
  2. web前端零基础入门学习!前端真不难!
  3. 离心泵CAE_3_FLUENT数值模拟
  4. 用计算机知道手机号码,知道手机号怎么整贱人-原来微信的“+”号还有这些隐藏用法?居然可以一键检测真假好友...
  5. 第十五届全国大学生智能车全国总决赛获奖信息-创意组获奖信息
  6. 米尔MYD-JX8MPQ yocto 编译流程 (记录)
  7. 计算机访学面试,访学申请Skype面试经历
  8. 企业未来的发展机遇,或许在直播中
  9. wifi叹号android,Wifi出现感叹号怎么解决 Wifi故障解决方法【步骤】
  10. 读书笔记--项亮《推荐系统实践》第四章
  11. 如何设计一个高并发的存储系统
  12. 【VRP系统你了解多少呢?】
  13. 王国维《人间词话》:“古今之成大事业、大学问者,必经过三种之境界”
  14. 【Java学习路线之JavaWeb】JSP教程
  15. 模仿网易云音乐黑胶唱片的交互实现
  16. chkdsk /f P 很强大,帮我解决了硬盘写保护的问题
  17. galaxy s4刷机相关说明
  18. android通知栏使用情况,Android通知栏(Notification)介绍及使用
  19. CVX示例库之比较随机(stochastic)和最坏情况(worst-case)鲁棒逼近
  20. 用PHP实现单向链表结构

热门文章

  1. 【手机游戏开发优化篇】详解手游[体积]及[运行内存]的优化篇!
  2. 带有无参数的存储过程
  3. 针对与其他语言的数据交换Model ,添加了 构造函数
  4. Grid++Report问题集!
  5. Spark 实时电商数据分析及可视化
  6. c++如何将两个if函数合并_设计一个 add 函数
  7. MyBatis 缓存详解-什么时候开启二级缓存?
  8. MyBatis 架构分层与模块划分-核心处理层
  9. Web IOC 容器初体验
  10. 为什么需要用户自定义类加载器及具体实现