在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前面的绘图命令都是来自 TDXImageList, 准确地说是来自 TDXImageList.Items 所包含的 TPictureCollectionItem 对象. 那 TDXDraw 本身有没有绘图命令呢? TDXDraw 本身没有绘图命令, 但它的有绘图表面(TDirectDrawSurface), 譬如: Surface、Primary; TDXDraw 的绘图表面有更多的绘图命令, 另外 TDXDraw 可以多个绘图表面. TDirectDrawSurface 的绘图命令和 TPictureCollectionItem 的绘图命令最大的区别是它们的图像来源; TDirectDrawSurface 的图像来源必须是另一个已绘制好的 TDirectDrawSurface 对象. 这里列举的只是 TDirectDrawSurface 和 TPictureCollectionItem 类似的描绘图片的命令: 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls; type TForm1 = class(TForm) DXDraw1: TDXDraw; DXImageList1: TDXImageList; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var PicItem: TPictureCollectionItem; procedure TForm1.FormCreate(Sender: TObject); const ImgPath1 = 'C:\Temp\DelphiX.bmp'; begin DXImageList1.DXDraw := DXDraw1; PicItem := TPictureCollectionItem(DXImageList1.Items.Add); PicItem.Picture.LoadFromFile(ImgPath1); end; procedure TForm1.Button1Click(Sender: TObject); var MySurface: TDirectDrawSurface; begin MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw); PicItem.Restore; {Surface.Draw 的矩形范围好像能直接作用到列表中的图片, 需要恢复一下} MySurface.SetSize(PicItem.Width, PicItem.Height); MySurface.Fill(0); PicItem.Draw(MySurface, 0, 0, 0); DXDraw1.Surface.Fill(0); DXDraw1.Surface.Draw((DXDraw1.Width - MySurface.Width) div 2, (DXDraw1.Height - MySurface.Height) div 2, MySurface); DXDraw1.Flip; FreeAndNil(MySurface); end; procedure TForm1.Button2Click(Sender: TObject); var MySurface: TDirectDrawSurface; m,n: Integer; begin m := 40; n := 15; MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw); PicItem.Restore; {Surface.Draw 的矩形范围好像能直接作用到列表中的图片, 需要恢复一下} MySurface.SetSize(PicItem.Width, PicItem.Height); MySurface.Fill(0); PicItem.Draw(MySurface, 0, 0, 0); DXDraw1.Surface.Fill(0); DXDraw1.Surface.Draw((DXDraw1.Width - MySurface.Width) div 2 + m, (DXDraw1.Height - MySurface.Height) div 2 + n, Bounds(m, n, MySurface.Width - m*2, MySurface.Height - n*2), MySurface); DXDraw1.Flip; FreeAndNil(MySurface); end; end. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论