zoukankan      html  css  js  c++  java
  • Direct2D (1) : 第一个例子


    应该是 Delphi 2009 就支持 Direct2D 了,但那时我还用着 WinXP 系统(不支持);现在的测试环境是 Win7+DelphiXE。

    Direct2D 属 DirectX 家族,是 GDI、GDI+ 的继任者,支持硬件加速,并能与 GDI、GDI+、D3D 交互。
    其它初步的印象是其文本处理和图像处理分别使用了 DirectWrite 和 WIC 技术,还有支持图层。

    相关单元是 Direct2D.pas 和 D2D1.pas。
    Direct2D.pas 中是 Delphi 对 Direct2D 的简单实现,需要其更多功能时还应从 D2D1.pas 中挖掘。

    Direct2D.pas 单元中主要包含 TDirect2DGraphicsObject、TDirect2DBrush、TDirect2DPen、TDirect2DFont、TDirect2DCanvas 五个类,
    其中 TDirect2DGraphicsObject 是 TDirect2DBrush、TDirect2DPen、TDirect2DFont 的父类,一般不会单独使用,
    TDirect2DCanvas 在实例化时会自动建立并拥有 TDirect2DBrush、TDirect2DPen、TDirect2DFont 三个类的对象,所以:
    学习主要面对的就是 TDirect2DCanvas 类。

    粗粗一看源码,感觉 TDirect2DCanvas 的成员与 TCanvas 极为相似,因为它们同是从 TCustomCanvas 继承,所以拥有很多共同特性。

    第一个例子:

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
        procedure FormPaint(Sender: TObject);
        procedure FormResize(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses Direct2D;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      d2dCanvas: TDirect2DCanvas;
    begin
      d2dCanvas := TDirect2DCanvas.Create(Canvas, ClientRect);
      d2dCanvas.BeginDraw;
      d2dCanvas.Pen.Color := clRed;
      d2dCanvas.Pen.Width := 4;
      d2dCanvas.Ellipse(50, 50, ClientWidth-50, ClientHeight-50);
      d2dCanvas.EndDraw;
      d2dCanvas.Free;
    end;
    
    procedure TForm1.FormResize(Sender: TObject);
    begin
      Invalidate;
    end;
    
    end.
    

  • 相关阅读:
    MySql给表中某字段插入随机数
    MySql 基本语法_数据操作
    thinkphp中模板继承
    thinkphp中模块和操作映射
    如何让ThinkPHP的模板引擎达到最佳效率
    ThinkPHP访问不存在的模块跳到404页面
    thinkphp中I方法
    thinkphp中field方法
    thinkphp中F方法
    thinkphp中where方法
  • 原文地址:https://www.cnblogs.com/del/p/1999675.html
Copyright © 2011-2022 走看看