写教学文章我还没有什么经验,而且我的时间不是很充足,肯定有考虑不到的地方。所以目前所写的并不是最终稿,希望大家看后,多提意见和建议,我会采纳合理的提议,在日后陆续把这篇教学补充完整。
开始正式教学之前,我要提醒读者注意。我写的导学不是Delphi语言教学,也不是OpenGL教学,因为这两方面的教学你可以很容易地找到。我写的导学是让大家知道如何用Delphi编写OpenGL,而且只能帮大家入门,以后的路要靠大家自己的努力了。 我将分两篇讲解相关内容。上篇讲的是大家容易忽略的一些有关Delphi的问题。下篇讲的是如何用Delphi编写OpenGL程序。 言归正传。我以Delphi2006为例,讲解如何用Delphi编写OpenGL程序。 注:Turbo Delphi 就是Delphi2006,减少了一些功能,不过不影响OpenGL编程
Delphi的安装和使用我不用讲了吧。(什么,你不会?!……,……,……如果你不会安装和使用,可以到网上下载中文版的 Delphi 7 从入门到精通 看看) 我给个地址,大家要用迅雷下载 http://www.delphifans.com/dl.asp?no=2&id=1227&size=38093 好了,先解释一下Delphi的文件结构吧。 以前一个完整的Delphi程序是由一个 dpr 文件,一个 res文件,数个 dfm 和 pas 文件组成的。新的Delphi又多了 bdsproj 文件。当然,还有其它的文件。不过,我说的是最重要的文件。你在保存源代码时需要保存的,只有 dpr res dfm 和 pas 文件。 这四种文件里, dpr 是项目文件,也是一个Delphi程序开始的地方。如果你要写纯API程序(不太大的),只需要一个 dpr 文件就行了。 res 文件是资源文件,用于保存程序的图标,字串等资源。你不用太在意它,写OpenGL程序用不到的。 dfm 文件是窗体文件,你在IDE(集成开发环境)环境里对窗体进行的修改,就保存在此文件里。它比 res 文件重要多了,不过你也不用费力学习,dfm 的使用只是在IDE里设置一些参数而已,十分简单。 pas 文件就是你以后要经常打交道的文件。你写的源代码都保存在这种文件里。 Delphi(也就是面向对象的Pascal)语言的具体细节书里都有,我只讲需要注意的一些情况。 每一个语句都需要用 分号 ; 结尾。一定要注意这一点! 不过有例外,如果 if 语句用了else,那么else前一行语句不用 分号 结尾,如 if i = 10 then j := 100 else j := 1000; if i = 10 then j := 100 else if i = 100 then j := 10; 其实无论几行,else前面的语句都不加分号。如 if i = 10 then begin x := 123; y := 456; end else begin x := 456; y := 123; end; 赋值语句要用 冒号加等号 := 如 i := 10; 循环语句和赋值语句一样 如 for i := 1 to 10 do 注意:如果从大到小,循环语句要这样写 for i := 10 downto 1 do 判断是否相等只用 等号 = 如 if i = 10 then while i = 10 then 如果你需要最高效灵活地使用数组,应该使用指针数组。下面是使用举例。 MyArray : PByteArray; //先声名指针数组类型 ...... GetMem(MyArray, SizeOf(Byte) * 16384); //使用前分配内存,数组类型*数组大小 ...... MyArray[x] := n; //使用时和一维数组一样。注意,x 不要大于分配内存时定义的数组大小,n 不要超出数组类型的定义范围(Byte 是 0~255) ...... FreeMem(MyArray, SizeOf(Byte) * 16384); //使用后释放内存,必须和分配的大小一样 只要你的内存够大,数组的大小是没有限制的。 Delphi有两类指针数组,一个是Byte型的PByteArray,还有一个是Word型的PWordArray;不够用吗?那么看看两种指针数组的声明,你应该知道如何自己定义指针数组了。 PByteArray = ^TByteArray; TByteArray = array[0..32767] of Byte; PWordArray = ^TWordArray; TWordArray = array[0..16383] of Word; 还有一个问题,指针数组是一维的,如何实现多维数组呢? 假设你声明了一个二维数组 MyArray : array[1..X,1..Y] of Integer; (X行 Y列) 数组的 i,j 位置是 MyArray[i,j] 如果用指针数组,要找到 i,j 的位置,用下面的公式 MyPointerArray[(i - 1) * Y + j] 注意,这是从 1 开始的数组,如果是从 0 开始的数组,上面的公式得到的结果要减去 1 。 下面是三维数组的情况 假设你声明了一个三维数组 MyArray : array[1..X,1..Y,1..Z] of Integer; 数组的 i,j,k 位置是 MyArray[i,j,k] 如果用指针数组,要找到 i,j,k 的位置,用下面的公式 MyPointerArray[(i - 1) * Y * Z + (j - 1) * Z + k] 同样,这是从 1 开始的数组,如果是从 0 开始的数组,上面的公式得到的结果要减去 1 。 这回就不容易理解了,不过不用担心,不妨碍使用。 更多维的数组可以以此类推,我就不多说了。 如果想了解更多,你可以看看有关数据结构的教材,那里讲的更详细。 |