delphiX 使用

转载 2007年09月13日 11:36:00

 Delphi作为一种方便的可视化程序设计语言,一 直非常受大家喜爱。但它在图形处理、3D表现等方面 不很让人满意。如果说你要开发一个Windows95下的 3D游戏,你会用什么工具呢?DirectX!不少人会不加 思索地答道。  
 
 
  
然而接触过DirectX的朋友们都知道它 内部的结构复杂,一般来说结合VC开发是一个理想 的组合。而要在Delphi中利用DirectX SDK真是难上 加难。但现在一切都好啦,有了本文介绍的DelphiX 组件,你终于可以用你熟悉的Delphi来开发漂亮的图 形程序了。

  DelphiX是由日本人Hiroyuki Hori开发的使Di rectX5.0在Delphi中更容易使用的一套控件,从网上 下载时叫DelphiX.zip,837KB。解开后在bin目录下 运行install_for?(根据你的Delphi版本号,支持3.0和 4.0),DelphiX会自动将控件安装到你的Delphi中,帮 助文件也自动融合到Delphi的帮助里,真是好用极 了!

  DelphiX包括的控件有如下这些:

  TDXDraw 最重要的控件,是DirectDraw和Direct3D的基础;

  TDXDIB 一个代表DIB图像的控件;

  TDXImageList 代表一组 Tpicture;

  TDX3D Direct3D控件,要与TDXDraw共同使用;

  TDXSound DirectSound控件;

  TDXWave 一个代表波形Wave的控件;

  TDXWaveList 一组Wave;

  TDXInput 输入控制控件(操纵键盘和摇杆要靠它);

  TDXPlay 通讯控件;

  TDXSpriteEngine “精灵”引擎;

  TDXTimer 高速时间控件;

  TDXPaintbox TDXForm 专为DelphiX优化过的Form。  

  DirectDraw中重要的对象有:  

  TDirectDraw对象

  DirectDraw应用程序的核心,它是你创建的第一个对象。创建了DirectDraw对 象后,可以在它的基础上创建其它所有相关的对象。 在DelphiX中的TDXdraw.ddraw属性即是一个Tdi rectDraw对象。

  TDirectDrawSurface对象

  表征了一块内存区 域,在该区域的数据将作为图像显示在屏幕上或移动 到其它表面上。 

  TDirectDrawPalette对象

  表征了一个用于表面 的16色或256色的索引调色板,它包含了一系列描述 同表面相关的RGB颜色索引值。 

  TDirectDrawClipper对象

  帮助你禁止向表面的 某一位置或超出表面的位置块写数据。  

  Tsprite对象

  代表了“精灵”,在许多视频游戏都 使用了精灵。从最基本的意义上来讲,一个精灵就是 在屏幕上移动的图像。精灵画在一个表面上,覆盖在 已有的背景上,合成后的图像被送到屏幕上显示出 来,在DelphiX中通过TspriteEngine实现对Tsprite的 控制。 

  TDirectDrawSurfaceCanvas对象

  提供方便的 访问机制,你可以像访问一般Canvas对象一样访问 它。TDXDraw.Surface.Canvas即是这样一个对象。  

  TdirectDrawDisplay对象

  控制着DirectDraw的 显示模式,TdxDraw.display是这样一个对象。

  DelphiX基本上严格按照Microsoft DirectX SDK 开发包来将其功能在Delphi中实现出来。所以,如果 你对DirectX SDK比较熟悉的话,你会发现大多数程序从C移植到Delphi是很容易的事。DelphiX中没有 提供帮助的地方,你可以在DirectX SDK中获得答案。  

  下面通过一个简单的例子对如何利用DelphiX编 程作一介绍,只涉及Ddraw二维的一小部分。

  unit Unit1;

  interface

  uses

   Windows.Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

   DXClass, DXDraws, DIB;

  type

   TForm1=class(TDXForm)

   DXDraw1:TDXDraw;

   DXTimer1:TDXTimer;

   DXDIB1:TDXDIB;

   procedure DXDrawlFinalize(Sender:Tobject);

   procedure DXDraw1Initialize(Sender:Tobject);

   procedure DXDraw1RestoreSurfase(Sender:Tobject);

   procedure DXTimer1Timer(Sendsr:Tobject;LagCount:Integer);

   procedure FormActivate(Sender:Tobject);

  private

   {Private declarations}

  public

   {Public declarations}

  private

   Fsurface:TDirectDrawSurface;

   end;

  var

   Form1:TForm1;

   x,y:integer;

  implementation

  {$R *.DFM}

  procedure TForm1.DXDrawlInitialize(Sender:Tobject);

  begin

   Fsurface:=TDirectDrawSurface.Create(DXDraw1.Ddraw);

   {创建抽象图像表面}

  end;

  procedure TForm1.DXDraw1Finalize(Sender:Tobject);

  begin

   Fsurface.Free; Fsurface: = nil;

   {释放表面}

  end;

  procedure TForm1.DXDraw1RestoreSurfare(Sender:Tobject);

  begin

   Fsurface.LoadfromGraphic(DXDIB1.DIB);{将位图送入抽象表面}

  end;

  procedure TForm1.DXTimer1Timer(Sendsr.Tobject;LagCount integer);

  begin

   if not DXDraw1.CanDraw then Exit;{在绘制之前检验是否允许}

   DXDraw1.Surfaca.Fill(0);

   x: = x + 1;

   y: = y + 1;

   DXDraw1.Surface.Draw(X, Y, Fsurface.ClientRect,Fsur face, True);

   DXDraw1.Flip; {将内存中的表面再将映射入实际显存}

  end;

  procedure TForm1.FormActivate(Sender:Tobject);

  begin

   X: =0;

   y: =0;

  end;

  end.

   首先要在程序开头包含DXClass、DXDraws两个 Unit(TDXtimer、TDXForm在DXClass中定义,TDX Draw在DXDraws中定义)。程序用的Form不要从一 般的Tform派生,而应从TDXForm中派生。在Form 中放入TDXDraw控件和TDXTimer控件,将其inter val值设为0。对DXDraw1控件改变其属性,使其与 Form大小一致。再放人一个TDXDIB控件,在其属性 中的DIB一项调人一个位图,如Windows下的bub bles.bmp。定义一个DirectDraw表面Fsurface,这是一 个抽象内存表面,以后会将它映射到DXDraw对象的 Surface上。在DXDraw的Events一栏中编写OnIni tialize、OnFinalize、OnRestoreSurface三个过程,之后便 可以根据需要对表面进行操纵。

   另外,要完成上面程序的功能,还有其他不少办 法。例如利用TDXImageList对象,可以用它的方法 Imagelist.items[N].draw来完成同样功能。

 

 

DELPHI 颜色表

色样本   十六进制  名称与注释   #ffb3a7 粉红:即浅红色。别称:妃色 杨妃色 湘妃色 妃红色。   #ed5736 妃色:妃红色。古同“绯”,粉红色。杨妃色、湘妃色、粉红皆同义。...
  • wozengcong
  • wozengcong
  • 2013年08月29日 11:55
  • 2056

MyBatis -- 一步步教你使用MyBatis

1、建立开发环境 1.1  创建项目,java项目或者javaweb项目均可,如图: 1.2  添加所需要的jar包到项目lib目录下 一个MyBatis-3.2.4.jar包 一个驱动包...
  • u014034854
  • u014034854
  • 2015年08月05日 21:19
  • 3629

Nginx基本使用方法

Windows下Nginx+Tomcat整合的安装与配置
  • liuhailiuhai12
  • liuhailiuhai12
  • 2017年07月12日 13:52
  • 4122

MATLAB使用入门

作者:朱金灿来源:http://blog.csdn.net/clever101            初步学习了MATLAB的使用,发现MATLAB是一个很好的算法仿真工具。MATLAB也是一门语言,...
  • clever101
  • clever101
  • 2013年12月18日 14:00
  • 3344

GreenDao框架使用教程

github地址:https://github.com/greenrobot/greenDAO 1、首先建立一个java工程的Generator,注意是java工程不是android工程。导入free...
  • LuckChouDog
  • LuckChouDog
  • 2016年04月28日 16:27
  • 2629

matplotlib的基本使用方法

原文 使用python的科学计算库,达到快速计算的效果。标准的Python中用列表(list)保存一组值,可以当作数组使用。但由于列表的元素可以是任何对象,因此列表中保存的是对象的指针。这样一来,为...
  • u010602026
  • u010602026
  • 2017年03月30日 08:19
  • 2350

Endnote 基本使用教程

Endnote 使用教程一、 安装百度网盘:http://pan.baidu.com/s/1eSyufL4二、 使用教程1. 查找文献:从各大期刊检索网站上面选择需要的文献,使用endnote格式...
  • u012878602
  • u012878602
  • 2016年12月28日 14:41
  • 6435

freemarker的学习和使用

freemarker是一款模板引擎,它实现程序逻辑和页面设计的分离,完成静态文本的输出。它不是web开发框架,准确来说,它仅仅只是我们MVC开发下,视图层的一个组件而已。...
  • siqilou
  • siqilou
  • 2015年03月16日 20:00
  • 2699

log4j使用教程详解(怎么使用log4j2)

1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是乱七八糟的版本号): log4j-core-xx.jar log4j-api-xx.jar ...
  • moonpure
  • moonpure
  • 2016年04月01日 10:22
  • 3095

IDEA使用教程

一、软件使用IDEA简体中文版教程百度云下载 密码:xnwv2.   IDEA2.1 IntelliJ IDEA 介绍IntelliJ IDEA官网 2.2 IDEA 安装安装过程简单,但是...
  • febis
  • febis
  • 2016年09月21日 15:47
  • 836
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphiX 使用
举报原因:
原因补充:

(最多只允许输入30个字)