Direct2D (43) : IDWriteGdiInterop 接口
摘要:IDWriteGdiInterop 接口的主要用途是它提供 IDWriteBitmapRenderTarget 留出了 HDC 接口,以与 GDI、GDI+ 交互;另提供了 LOGFONT 结构与 IDWriteFont、IDWriteFontFace 的相互转换的方法。IDWriteGdiInterop = interface(IUnknown) function CreateFontFromLOGFONT( { LOGFONT -> IDWriteFont } var logFont: LOGFONTW; // out font: IDWriteFont // ): HResult;
阅读全文
posted @
2011-04-16 13:00
万一
阅读(2716)
推荐(1) 编辑
Direct2D (42) : 在文本布局中嵌入图片 IDWriteTextLayout.SetInlineObject()
摘要:这段代码怎么也过不去了,反反复复找不到原因;有谁知道,万望提醒我一下。上面是刚碰到错误时的求助信息;现在终于找到错误了:是 D2D1.pas 的代码有问题,修改方法如下:{ 1、把 D2D1.pas 中 4142 行中的 var 修改为 const 或者去掉 }function SetInlineObject(var inlineObject: IDWriteInlineObject; textRange: TDwriteTextRange): HResult; stdcall;{ 2、重新编译 Direct2D.pas、D2D1.pas,最好在 Debug 和 Release 两种模式下分别
阅读全文
posted @
2011-04-14 23:34
万一
阅读(2914)
推荐(0) 编辑
Direct2D (41) : 文本命中测试 - IDWriteTextLayout.HitTestPoint()
摘要:uses Direct2D, D2D1;var iTextLayout: IDWriteTextLayout;{构建 DWRITE_TEXT_RANGE 结构的函数}function DWriteTextRange(pos,len: Cardinal): TDwriteTextRange;begin Result.startPosition := pos; Result.length := len;end;{建立 IDWriteTextLayout}procedure TForm1.FormCreate(Sender: TObject);var str: string; iTextFormat
阅读全文
posted @
2011-04-14 18:11
万一
阅读(1841)
推荐(0) 编辑
Direct2D (40) : 分别设置 IDWriteTextLayout 中文本的颜色
摘要:function SetDrawingEffect( const drawingEffect: IUnknown; //颜色接口; 该接口需自己定义和实现, 只要能存取颜色即可 textRange: TDwriteTextRange //要设置的范围): HResult; stdcall;测试代码:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Direct2D, D2D1;const SID_IColorDrawingEff
阅读全文
posted @
2011-04-14 09:31
万一
阅读(2414)
推荐(0) 编辑
Direct2D (39) : 使用 IDWriteTextLayout.Draw() 方法绘制文本
摘要:使用 IDWriteTextLayout.Draw() 方法绘制文本主要是实现 IDWriteTextRenderer 接口。IDWriteTextRenderer 接口只能是手动实现,很灵活。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Direct2D, D2D1;type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure Form
阅读全文
posted @
2011-04-13 15:59
万一
阅读(3260)
推荐(0) 编辑
Direct2D (38) : RenderTarget.DrawTextLayout() 与 IDWriteTextLayout
摘要:使用 RenderTarget.DrawTextLayout() 方法主要是设置 IDWriteTextLayout 接口;构建 IDWriteTextLayout 接口需要 IDWriteTextFormat 接口。IDWriteTextLayout 接口是经过完全分析和格式化后的文本块。{RenderTarget.DrawTextLayout() 方法}procedure DrawTextLayout( origin: D2D1_POINT_2F; //起点 const textLayout: IDWriteTextLayout; //分析和格式化后的文本块 const defaultFo
阅读全文
posted @
2011-04-13 12:39
万一
阅读(3089)
推荐(1) 编辑
Direct2D (37) : 使用不同画刷绘制文本
摘要:uses Direct2D, D2D1;{建立位图画刷的函数}function GetBitmapBrush(Canvas: TDirect2DCanvas; filePath: string): ID2D1BitmapBrush;var rBBP: TD2D1BitmapBrushProperties; bit: TBitmap;begin bit := TBitmap.Create; bit.LoadFromFile(filePath); rBBP.extendModeX := D2D1_EXTEND_MODE_WRAP; rBBP.extendModeY := D2D1_EXTEND_M
阅读全文
posted @
2011-04-13 11:32
万一
阅读(2345)
推荐(0) 编辑
Direct2D (36) : RenderTarget.DrawText() 与 IDWriteTextFormat
摘要:TDirect2DCanvas 提供了两种输出文本的方法:TextOut()、TextRect(),因太过高级,基本没有实用价值。TDirect2DCanvas.RenderTarget 有三种输出文本的方法:DrawText()、DrawTextLayout()、DrawGlyphRun()。DrawText() 对文本格式的控制能力类似 TMemo;DrawTextLayout() 对文本格式的控制能力类似 TRichEdit;DrawGlyphRun() 可以完成更复杂的字形输出。另外 DirectWrite 还有其它文本输出方法,如回调 IDWriteTextRenderer 接口。T
阅读全文
posted @
2011-04-12 21:42
万一
阅读(3958)
推荐(0) 编辑
Direct2D (35) : 通过 DirectWrite 获取字体列表
摘要:uses Direct2D, D2D1;procedure TForm1.Button1Click(Sender: TObject);var iFontCollection: IDWriteFontCollection; //字体集合 iFontFamily: IDWriteFontFamily; //字族 iLocalizedStrings: IDWriteLocalizedStrings; //按区域设置名称编制索引的字符串集合 i,j: Integer; buf: array[0..LF_FACESIZE] of Char;begin ListBox1.Clear; DWriteFact
阅读全文
posted @
2011-04-11 19:09
万一
阅读(2205)
推荐(0) 编辑
Direct2D (33) : 通过 ID2D1BitmapRenderTarget 绘制背景网格
摘要:ID2D1BitmapRenderTarget 是内存绘图的解决方案。它从 ID2D1RenderTarget 继承,只多出一个 GetBitmap() 方法。{相关方法}TDirect2DCanvas.RenderTarget.CreateCompatibleRenderTarget(); //建立 ID2D1BitmapRenderTargetID2D1BitmapRenderTarget.GetBitmap(); //从 ID2D1BitmapRenderTarget 获取 ID2D1Bitmap测试代码:uses Direct2D, D2D1;{通过 ID2D1BitmapRender
阅读全文
posted @
2011-04-08 15:52
万一
阅读(4077)
推荐(0) 编辑
Direct2D (32) : 把几何图形网格化为若干三角形 - ID2D1Geometry.Tessellate()
摘要:{相关接口}ID2D1TessellationSink //用于接收 ID2D1Geometry.Tessellate() 方法输出的三角形数组ID2D1Mesh //是使用 ID2D1TessellationSink 填充的网格,它负责 Open ID2D1TessellationSink{相关方法}TDirect2DCanvas.RenderTarget.CreateMesh() //建立 ID2D1MeshTDirect2DCanvas.RenderTarget.FillMesh() //填充 ID2D1Mesh,只能在 D2D1_ANTIALIAS_MODE_ALIASED 模式下使用
阅读全文
posted @
2011-04-08 13:25
万一
阅读(2307)
推荐(0) 编辑
Direct2D (31) : 命中测试 - ID2D1Geometry.FillContainsPoint()、StrokeContainsPoint()
摘要:uses Direct2D, D2D1;const penWidth = 25;var iGeometry: ID2D1EllipseGeometry;procedure TForm1.FormCreate(Sender: TObject);begin D2DFactory.CreateEllipseGeometry(D2D1Ellipse(D2D1PointF(120, 90), 80, 50), iGeometry);end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
阅读全文
posted @
2011-04-08 11:15
万一
阅读(2012)
推荐(0) 编辑
Direct2D (30) : 判断几何对象的关系 - ID2D1Geometry.CompareWithGeometry()
摘要:{相关常量}//D2D1_GEOMETRY_RELATION = type Integer;D2D1_GEOMETRY_RELATION_UNKNOWN = 0; //未知D2D1_GEOMETRY_RELATION_DISJOINT = 1; //不相交D2D1_GEOMETRY_RELATION_IS_CONTAINED = 2; //属于D2D1_GEOMETRY_RELATION_CONTAINS = 3; //包含D2D1_GEOMETRY_RELATION_OVERLAP = 4; //重叠测试代码:uses Direct2D, D2D1;procedure TForm1.Form
阅读全文
posted @
2011-04-07 22:32
万一
阅读(1611)
推荐(0) 编辑
Direct2D (29) : 简化曲线到直线 - ID2D1Geometry.Simplify()
摘要:uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iEllipseGeometry: ID2D1EllipseGeometry; iPathGeometry: ID2D1PathGeometry; iGeometrySink: ID2D1GeometrySink; ptCenter: TPoint;begin ptCenter := Point(ClientWidth div 2, ClientHeight div 2); D2DFactory.CreateElli
阅读全文
posted @
2011-04-07 17:32
万一
阅读(2099)
推荐(0) 编辑
Direct2D (28) : 获取几何图形的面积、线总长度和指定位置的点坐标
摘要:uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iEllipseGeometry: ID2D1EllipseGeometry; area,length: Single; rPointF1,rPointF2: TD2DPoint2f; ptCenter: TPoint;begin ptCenter := Point(ClientWidth div 2, ClientHeight div 2); D2DFactory.CreateEllipseGeometry(D2D
阅读全文
posted @
2011-04-07 17:08
万一
阅读(1753)
推荐(0) 编辑
Direct2D (27) : 获取几何图形的轮廓 - ID2D1Geometry.Outline()
摘要:uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iEllipseGeometry: ID2D1EllipseGeometry; iTransformedGeometrys: array[0..7] of ID2D1TransformedGeometry; iGeometryGroup: ID2D1GeometryGroup; iGeometrySink: ID2D1GeometrySink; iPathGeometry: ID2D1PathGeometry; pt
阅读全文
posted @
2011-04-07 15:16
万一
阅读(1989)
推荐(0) 编辑
Direct2D (26) : 获取几何图形的边界
摘要:{相关方法}ID2D1Geometry.GetBounds(); //获取边界矩形ID2D1Geometry.GetWidenedBounds(); //获取包含画笔区域的边界矩形测试代码:uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iGeometry: ID2D1EllipseGeometry; R1,R2: TD2DRectF; iBrush: ID2D1SolidColorBrush;begin {几何图形} D2DFactory.CreateEllip
阅读全文
posted @
2011-04-07 12:24
万一
阅读(1757)
推荐(0) 编辑
Direct2D (25) : 将画笔线条所占用的区域转换为路径 - ID2D1Geometry.Widen()
摘要:uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iGeometry: ID2D1Geometry; iPathGeometry: ID2D1PathGeometry; iGeometrySink: ID2D1GeometrySink;begin {建立一个几何对象 iGeometry} D2DFactory.CreateEllipseGeometry( D2D1Ellipse(D2D1PointF(ClientWidth/2, ClientHeight/2), C
阅读全文
posted @
2011-04-07 11:34
万一
阅读(1650)
推荐(0) 编辑
Direct2D (24) : 合并几何对象
摘要:合并通过 ID2D1Geometry.CombineWithGeometry() 完成,但返回的是 ID2D1SimplifiedGeometrySink(ID2D1GeometrySink 的父对象);需要把 ID2D1SimplifiedGeometrySink 添加到 ID2D1PathGeometry 才能使用。uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iEllipseGeometry1, iEllipseGeometry2: ID2D1Ellips
阅读全文
posted @
2011-04-06 20:39
万一
阅读(1843)
推荐(0) 编辑
Direct2D (23) : 复合几何对象之 ID2D1GeometryGroup
摘要:uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iGeometryGroup: ID2D1GeometryGroup; arrGeometry: array[0..3] of ID2D1EllipseGeometry; ptCenter: TD2D1Point2F; i: Integer; rh,rv: Single; iFactory: ID2D1Factory;begin ptCenter := D2D1PointF(ClientWidth/2, Client
阅读全文
posted @
2011-04-06 16:02
万一
阅读(1680)
推荐(0) 编辑