转一篇火人论坛那边的一份学习文档,我简单排一下版,希望对入门者有帮助。
感谢China Yang,这份文档也帮助我快速入了门。
和我一起学
Asphyre Sphinx Framework v1.0.0
China Yang
Http://www.huosoft.com/bbs/ : ID:Installxp
当我准备用业余时间开始写这段文字,当你准备在Library Path里添上Asphyre的Source文件夹。那么我们一起学习的旅程就开始了,我会把我学习的过程写在这里,希望有一天,你也把你的学习过程形成文字,和其他人一起分享。
这些文字是面向初学者的,所以文字拖沓是必然的,请各路Delphi大仙们绕行。
我们的运行环境是:Delphi 2006。请将你的Asp Sphinx FrameWord v1.0.0 目录下的 Source文件夹添加到:
菜单 -> Tools -> Options -> library-Win32 –> Library Path。
我们要在屏幕上用Asphyre 画点。
在此之前你需要了解的基础知识:基本控件的“过程,方法和事件”。这些是必备的知识,如果你不清楚这些,请找一本DELPHI 基础书参照学习。
下面我们开始正式进入ASPHYRE学习,从现在开始我和你一样,一步一步探索。
在程序的开始,我们需要一个事件过程。
请使用Design,我们可以看到设计期的窗口。
我们在空窗口上鼠标左键连续点击两次,DELPHI将智能的帮我们建立下面这个事件:
procedure TForm1.FormCreate(Sender: TObject);
FormCreate 是窗口建立时必然运行的一个过程,你在这个过程所写的代码,将随着窗口的建立而被执行。我们将在这里Create我们程序需要的类和其他一些相关的东西。
FormCreate内的第一句代码:
ReportMemoryLeaksOnShutdown:= DebugHook <> 0;
{ 以下关于第一句代码的相关知识: }
DELPHI引入了FastMM替换掉早期的内存管理器。FastMM是一个开源的项目,你可以在互联网上找到它,在很长一段时间里有经验的程序员使用它来检测程序的内存泄漏。它可以帮助DELPHI IDE更快,更稳定的运行。当然,即使你不将ReportMemoryLeaksOnShutdown开关打开,FastMM也是在工作的,只是当你的程序出现内存问题时,DELPHI 将不会提示你。所以一个好的习惯就是将它打开,它只会帮助你更好的工作。也可以像下面这样:
ReportMemoryLeaksOnShutdown := True;
当程序是在IDE里运行时 DebugHook = 1 ;当程序在IDE外独立运行时 DebugHook = 0;
如果你是一个刚刚开始学习编程的爱好者,下面的方式可能会让你迷惑,不过不要紧。
ReportMemoryLeaksOnShutdown:= DebugHook <> 0;
( DebugHook <> 0 ) 是一个表达式,当DebugHook是1的时候。( DebugHook <> 0 )将返回一个False (假值)给ReportMemoryLeaksOnShutdown。如果DebugHook 的值是0的时候,( DebugHook <> 0 )将返回一个真值。
言归正传,我们要开始在FormCreate里定义一个DisplaySize看起来像下面这样
Procedure TForm1.FormCreate (Sender: TObject);
Var
DisplaySize: TPoint2px; { 我们定义的地方 }
Begin
为了我们能正常的使用TPoint2px,我们要引入Vectors2px单元。所以我们要在Implementation 关键字下面添加第一个引入单元,看起来像下面这样
… …
Implementation
Uses
Vectors2px;
… …
当我们按住Ctrl键用鼠标去点击Vectors2px的时候,我们就会追踪到某个类和某个类型定义的起始处。
DisplaySize被定义成TPoint2px记录(Record);我们可以追踪到 Vectors2px单元第四十五行。
PPoint2px = ^TPoint2px;
TPoint2px = record
x, y: Integer;
关于 Record 请参看你手头的工具书,记录(Record);
当然DisplaySize:= Point2px(ClientWidth, ClientHeight);也可以换一个写法,例如下面这样:
DisplaySize.x := ClientWidth; { ClientWidth 窗口的宽 }
DisplaySize.y := ClientHeight; { ClientWidth 窗口的高 }
上面的句子似乎更容易理解一点,DisplaySize里将保存我们窗口的大小,我们后面会用到它。
接下来,我们还要再引入一个单元AsphyreFactory,该单元保存着接口信息.
因为我们的第一个目标并不复杂,所以DirectX7接口足够我们使用,当然我们也可以使用DirectX8, DirectX9;
… …
Implementation
Uses
Vectors2px, AsphyreFactory;
… …
添加完单元,我们的代码看起来是上面这个样子。接下来,我们要告诉Asphyre,我们要使用的DirectX版本。
Factory.UseProvider(idDirectX7);
在我们的第一个目标里,我们不会去涉及Asphyre的细节问题,那不便于我们学习,我们暂时只要知道,Factory.UseProvider可以让Asphyre在某个DirectX版本下工作。其实我暂时也不知道Factory.UseProvider的细节,完全是靠猜的,呵呵。
当我们将 Factory.UseProvider(idDirectX7);添加到DisplaySize.y := ClientHeight;的后面,我们会发现idDirectX7是错误的。所以我们要找到idDirectX7的定义。在DX7Providers单元的43行,idDirectX7被定义成常量。idDirectX7 = $10000700; $代表16进制操作符,当然你要原意的话,你也可以直接在括号内使用$10000700,不过当你再阅读的时候,不会容易