01 2008 档案
初学 Delphi 嵌入汇编[30] - 寄存器表
摘要:类型 名称 二进制码 寄存器说明 多功能寄存器 AL 0 累加寄存器低八位 AH 100 累加寄存器低八位 AX 0 16 位累加寄存器 EAX 0 32 位累加寄存器 BL 11 基址寄存器低八位 BH 111 基址寄存器低八位 BX 11 16 位基址寄存器 ... 阅读全文
posted @ 2008-01-31 13:53 万一 阅读(8450) 评论(15) 推荐(0) 编辑
初学 Delphi 嵌入汇编[29] - 寄存器所能接受的数值范围
摘要:譬如 EAX AX AH AL 四个储存器, 真实存在的其实只有一个 EAX, AX AH AL 不过是不同的访问方式. 11111111 11111111 11111111 11111111 : EAX 11111111 11111111 11111111 11111111 : AX 11111111 11111111 11111111 11111111 : AH 11111111 111111... 阅读全文
posted @ 2008-01-30 21:01 万一 阅读(3952) 评论(5) 推荐(0) 编辑
初学 Delphi 嵌入汇编[28] - 把 EAX 的值置为 0 的三种方法与效率
摘要://以下三个函数功能一样, 但效率不同 {Fun1 需要读取常数 0, 最慢} function Fun1: Integer; asm mov eax, 0 end; {Fun2 与 Fun3 只是操作 CPU 的寄存器, 比 Fun1 快} function Fun2: Integer; asm sub eax, eax end; {Fun3 最快} function Fun3:... 阅读全文
posted @ 2008-01-30 11:18 万一 阅读(4232) 评论(17) 推荐(0) 编辑
初学 Delphi 嵌入汇编[27] - XCHG 指令: 交换寄存器的内容
摘要://XCHG 指令: 交换寄存器的内容 var x,y: Integer; begin x := 1; y := 9; asm mov eax, x mov ecx, y xchg eax, ecx {xchg 的参数必须至少一个是寄存器, 不能有 xchg x,y 类似的操作} mov x, eax mov y, ecx end; ... 阅读全文
posted @ 2008-01-30 10:14 万一 阅读(3708) 评论(0) 推荐(0) 编辑
初学 Delphi 嵌入汇编[26] - 大小写字母转换
摘要://小写字母转大写字母 function Fun1(C: Char): Char; asm sub C, 32 //sub C, 'a'-'A' {竟也可以这样写} end; //大写字母转小写字母 function Fun2(C: Char): Char; asm add C, 32 end; //测试 procedure TForm1.Button1Click(Sende... 阅读全文
posted @ 2008-01-30 00:08 万一 阅读(5213) 评论(4) 推荐(0) 编辑
初学 Delphi 嵌入汇编[25] - 在汇编中调用函数
摘要://准备一个在汇编中要调用的函数 function DelphiFun(x,y: Integer): Integer; begin Result := x + y; end; //汇编函数 function AsmFun: Integer; asm mov eax, 1 {eax 对应函数的第一个参数, 这里给第一个参数赋值为 1} mov edx, 2 {e... 阅读全文
posted @ 2008-01-29 21:24 万一 阅读(4260) 评论(5) 推荐(0) 编辑
初学 Delphi 嵌入汇编[24] - 汇编语言的简单数据类型
摘要:类型 助记符 助记符简写 所占字节数 数值范围 字节 BYTE DB 1 0..255 字 WORD DW 2 0..65535 双字 DWORD DD 4 0..4294967295 远字 FWORD DF 6 四字 QWORD DQ 8 十字节 TBYTE DT 10 有符号字节 SBYTE 1 -128..127 有符号字 S... 阅读全文
posted @ 2008-01-29 17:26 万一 阅读(3437) 评论(0) 推荐(0) 编辑
初学 Delphi 嵌入汇编[23] - LOOP 循环
摘要://计算 x 的 n 次方的函数 function Fun(x,n: Integer): Integer; asm //mov eax, x {因为 eax 会先获取第一个参数, 这句可以省略} mov ecx, n {ecx 是个计数寄存器, 会记录循环的次数, 每循环一次 ecx 的值就会减1} sub ecx, 1 @Lable1... 阅读全文
posted @ 2008-01-29 17:05 万一 阅读(5508) 评论(13) 推荐(0) 编辑
初学 Delphi 嵌入汇编[22] - 在汇编代码中使用记录
摘要://自定义记录用于测试 Type TMyRec = record i: Integer; c: Char; end; //在汇编中使用记录的过程 procedure GetRec(Rec: TMyRec); asm mov eax.TMyRec.i, 100 {eax 会接受第一个参数} mov eax.TMyRec.c, 'M' end; //测试 pr... 阅读全文
posted @ 2008-01-29 16:05 万一 阅读(3444) 评论(18) 推荐(0) 编辑
初学 Delphi 嵌入汇编[21] - Delphi 的其他整数类型
摘要:除了 Byte、Word、Cardinal、Integer 外, Delphi 的整数类型还有: Longint、Longword、Shortint、Smallint、Int64 其中 Longint 相当于 Integer; Longword 相当于 Cardinal. 这样还有三种类型: Shortint、Smallint、Int64 //Shortint 是1字节(8位)有符号整数 va... 阅读全文
posted @ 2008-01-29 12:49 万一 阅读(3464) 评论(3) 推荐(0) 编辑
初学 Delphi 嵌入汇编[20] - Delphi 的 Integer 类型
摘要:var I: Integer; begin //Integer 类型是4字节(32位)有符号整数, 最高位是符号位, 如果是正数, 符号位是 0、负数的符号位是1 //所以 Integer 的最大值是: 01111111 11111111 11111111 111111112 asm mov I, 01111111111111111111111111111111B; ... 阅读全文
posted @ 2008-01-29 11:59 万一 阅读(6781) 评论(3) 推荐(0) 编辑
初学 Delphi 嵌入汇编[19] - Delphi 的无符号整数类型
摘要:var B: Byte; W: Word; C: Cardinal; begin {Byte 是1字节(8位)无符号整型, 其最大值是 111111112} asm mov B, 11111111B; end; ShowMessage(IntToStr(B)); {255} {Word 是2字节(16位)无符号整型, 其最大值是 11111111 11... 阅读全文
posted @ 2008-01-29 11:24 万一 阅读(6196) 评论(6) 推荐(0) 编辑
初学 Delphi 嵌入汇编[18] - SHL 与 SHR
摘要:汇编中的SHL(左移)、SHR(右移)命令也是和 Delphi 一样的. var ByteNum: Byte; begin //右移 shr asm mov al, 10000000B {128} shr al, 1 {shr 10000000 一次会得到 01000000} mov ByteNum, al end; ShowMessa... 阅读全文
posted @ 2008-01-28 10:51 万一 阅读(6902) 评论(14) 推荐(0) 编辑
初学 Delphi 嵌入汇编[17] - 逻辑运算
摘要:AND: 逻辑与指令 OR : 逻辑或指令 XOR: 逻辑异或指令 NOT: 逻辑非指令 这和 Delphi 的逻辑命令完全一致. //逻辑非 Not: { not 1 = 0; not 0 = 1; } var ByteNum: Byte; begin //赋值 11111111B (255) 取反: asm mov al, 11111111B {eax ... 阅读全文
posted @ 2008-01-28 10:04 万一 阅读(5313) 评论(3) 推荐(0) 编辑
初学 Delphi 嵌入汇编[16] - 进制的表示方法
摘要:关于进制: 生活中有 7进制(星期)、60进制(小时)、10进制(算术)等等. 计算机要用到 10进制、16进制、2进制和 8进制. 8进制用得少了, 但也有, 譬如 Unix 服务器上的文件属性. 2进制是计算机容易识别的; 10进制是人容易识别的, 据说 10进制源自于人有十个手指. 计算机为什么会使用 8进制和 16进制呢? 因为: 23=8; 24=16; 这样比较容易和 2进制换算... 阅读全文
posted @ 2008-01-25 21:44 万一 阅读(6190) 评论(2) 推荐(0) 编辑
初学 Delphi 嵌入汇编[15] - 需要保护的寄存器
摘要:前面提到 32 位的寄存器有: EAX EBX ECX EDX ESP EBP ESI EDI; 其中, EAX ECX EDX 是自由使用的. 那么剩下的 EBX ESP EBP ESI EDI 五个寄存器就是应该保护的! 所谓保护, 并不是不可以使用, 而是在使用前先把其中的值寄存在另外一个地方, 用完后再恢复其值. 如果不这样做, 有可能会发生意想不到的错误. 举例: //使用应该保护... 阅读全文
posted @ 2008-01-25 17:19 万一 阅读(3618) 评论(7) 推荐(0) 编辑
初学 Delphi 嵌入汇编[14] - 常量与变量在汇编中的一个区别
摘要://常量可以在汇编语句中运算 function Fun: Integer; const a = 11; b = 5; asm mov eax, a-b end; //测试 procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := Fun; ShowMessage(IntToSt... 阅读全文
posted @ 2008-01-25 17:16 万一 阅读(3686) 评论(2) 推荐(0) 编辑
初学 Delphi 嵌入汇编[13] - 地址参数用 [] 取值
摘要://关于地址参数(var/out) function Fun(var x,y: Integer): Integer; asm mov eax, x {现在 eax 中只是 x 的地址} mov eax, [eax] { [eax] 是取值, 是不是类似于 P^ ? } mov edx, y add eax, [edx] //mov @Result, e... 阅读全文
posted @ 2008-01-25 09:25 万一 阅读(4205) 评论(5) 推荐(0) 编辑
初学 Delphi 嵌入汇编[12] - 在汇编代码中可以直接使用 Result
摘要://在汇编代码中使用 Result function Fun(x: Integer): Integer; asm mov ecx, &x dec ecx {汇编中的 dec 是减 1 指令, 和 Delphi 是一样的} mov @Result, ecx {在本例中去掉 @ 也可以, 暂时不知怎么回事} end; //测试 procedure TForm1.... 阅读全文
posted @ 2008-01-25 00:06 万一 阅读(4195) 评论(11) 推荐(1) 编辑
初学 Delphi 嵌入汇编[11] - 用汇编重写一个 Delphi 函数
摘要://Delphi 函数 function DelphiFun(x: Integer): Integer; begin Result := x * 2; end; //汇编函数, 和上面的函数是同样的功能 function AsmFun(x: Integer): Integer; asm add eax, eax {eax 可以获取第一个参数, 同时又是函数的返回值, 所以可以如此简... 阅读全文
posted @ 2008-01-24 23:34 万一 阅读(4335) 评论(1) 推荐(0) 编辑
初学 Delphi 嵌入汇编[10] - 函数返回值与寄存器
摘要:返回类型 寄存位置 Char、Byte AL 寄存器 SmallInt、Word AX 寄存器 Integer、LongWord、AnsiString、Pointer、Class EAX 寄存器 Real48 EAX 寄存器中是栈内返回值的指针 Int64 EDX、EAX 寄存器对 Single、Double、Extended、Comp 栈首寄存器 ST(0) ... 阅读全文
posted @ 2008-01-24 20:36 万一 阅读(4564) 评论(1) 推荐(0) 编辑
初学 Delphi 嵌入汇编[9] - asm 可以代替 begin
摘要://可以用 asm 代替 begin function Fun(x: Integer): Integer; asm mov eax, x inc eax end; { 汇编中的 inc 指令和 Delphi 中的 inc 是一样的; 本例也同时证明 eax 寄存器确实保存着函数的返回值. } procedure TForm1.Button1Click(Sender: TObje... 阅读全文
posted @ 2008-01-24 20:04 万一 阅读(6087) 评论(5) 推荐(0) 编辑
初学 Delphi 嵌入汇编[8] - 8 位寄存器、16 位寄存器与 32 位寄存器
摘要:王爽老师书上说, CPU 内部主要就是寄存器. 现在我们在 32 位的系统下工作, 当然主要使用的是 32 位寄存器; 那它和 8 位、16 位的寄存器又有什么关系呢? 从网上找到一个简洁明了的图片: EAX 是 32 位的, 也就是 4 个字节大小; 它的低两位就是 AX; AX 是 16 位的, 又分 2 个字节; 它的高字节是 AH、低字节是 AL; AH 与 AL 是 8 位的. ... 阅读全文
posted @ 2008-01-24 17:37 万一 阅读(4850) 评论(3) 推荐(0) 编辑
初学 Delphi 嵌入汇编[7] - 使用常量
摘要://在汇编中使用常量 var a: Integer; const n = $10; begin asm mov ecx, 10 {使用十进制常数} mov a, ecx end; ShowMessage(IntToStr(a)); {10} asm mov ecx, $10 {使用十六进制常数} ... 阅读全文
posted @ 2008-01-24 16:13 万一 阅读(4128) 评论(5) 推荐(0) 编辑
初学 Delphi 嵌入汇编[6] - & 操作符
摘要://在汇编中访问 Delphi 的变量可以使用 & 操作符 procedure Proc(str1,str2: string); var s1,s2: string; begin asm mov ecx, &str1 {} mov edx, &str2 mov &s1, ecx {} mov &s2, edx end; ShowMessa... 阅读全文
posted @ 2008-01-24 16:04 万一 阅读(5012) 评论(21) 推荐(0) 编辑
初学 Delphi 嵌入汇编[5] - 寄存器在过程与函数中的使用 - 续
摘要://测试寄存器: 如果只有两个参数, 看看 ECX EDX 谁来接受第二个参数 procedure Proc(x,y: Integer); var a,b: Integer; begin asm MOV a,ECX MOV b,EDX end; ShowMessage(IntToStr(a) + #44 + IntToStr(b)); end; //测试 p... 阅读全文
posted @ 2008-01-24 15:38 万一 阅读(4855) 评论(14) 推荐(0) 编辑
初学 Delphi 嵌入汇编[4] - 寄存器在过程与函数中的使用
摘要:CPU 提供了诸多寄存器, 但在 Delphi 的过程和函数中, 只有 EAX ECX EDX 三个寄存器可以自由使用; 如果改变了其他寄存器, 在过程和函数结束前要给恢复. 记得前面学习过 Delphi 的过程和函数默认的调用约定是 Register , 前三个参数通过寄存器传递, 其他参数存与栈. 它所指的三个寄存器就应该是 EAX ECX EDX 了. 看资料介绍应该是: EAX 先接受第... 阅读全文
posted @ 2008-01-24 11:50 万一 阅读(6337) 评论(25) 推荐(0) 编辑
初学 Delphi 嵌入汇编[3] - 第一个 Delphi 与汇编的例子
摘要:前面知道了一个汇编的赋值指令(MOV), 再了解一个加法指令(ADD), 就可以做个例子了. 譬如: ADD AX,BX; 这相当于 Delphi 中的 AX := AX + BX; 另外提前来个列表 - Delphi 可以用汇编管理以下寄存器: 32 位寄存器: EAX EBX ECX EDX ESP EBP ESI EDI 16 位寄存器: AX BX CX DX SP BP SI DI ... 阅读全文
posted @ 2008-01-23 18:30 万一 阅读(8712) 评论(17) 推荐(0) 编辑
初学 Delphi 嵌入汇编[2] - 汇编语言关键字
摘要:汇编语言不区分大小写. 关键字 用途 AH AL AND AX BH BL BP BX BYTE CH CL CS CX DH DI DL DS DWORD DX EAX EBP EBX ECX EDI EDX EIP ES ES... 阅读全文
posted @ 2008-01-23 14:41 万一 阅读(6997) 评论(8) 推荐(0) 编辑
初学 Delphi 嵌入汇编[1] - 汇编语言与机器语言
摘要:非科班出身, 现在才接触汇编, 惭愧呀, 好好学! 主选课本是清华大学王爽老师的《汇编语言》. 推荐 王爽老师的汇编网 汇编语言之前是机器语言. 机器语言是机器指令的集合, 机器指令是一系列二进制数字, 计算机将之转换为一系列高低电平, 而实现运算. 在 PC 机上运行机器指令的是 CPU; 不同的 CPU 有不同的指令, 所以某种汇编语言也只是针对某系列的 CPU. 王爽老师举了一个用机... 阅读全文
posted @ 2008-01-23 14:22 万一 阅读(11386) 评论(15) 推荐(1) 编辑
for 循环的例子
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-23 01:22 万一 阅读(7991) 评论(7) 推荐(0) 编辑
with 语句的妙用
摘要://一般写法 var MyForm1: TForm1; begin MyForm1 := TForm1.Create(nil); MyForm1.ShowModal; MyForm1.Free; end; //用 with 语句重写 with TForm1.Create(nil) do begin ShowModal; Free; end; 阅读全文
posted @ 2008-01-23 01:07 万一 阅读(5819) 评论(2) 推荐(0) 编辑
Api 函数: GetCursorPos 与转换
摘要://获取鼠标在窗体中的当前位置 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var str: string; begin str := Format('%d,%d',[X,Y]); ShowMessage(str)... 阅读全文
posted @ 2008-01-22 17:49 万一 阅读(7159) 评论(3) 推荐(0) 编辑
TScreen 类 - 获取当前输入法与输入法列表
摘要://获取输入法列表 begin Memo1.Lines := Screen.Imes; end; //获取当前输入法 var kl: HKL; i: Integer; begin kl := GetKeyboardLayout(0); for i := 0 to Screen.Imes.Count - 1 do if HKL(Screen.Imes.Objects... 阅读全文
posted @ 2008-01-22 16:58 万一 阅读(6797) 评论(16) 推荐(0) 编辑
TScreen 类 - 判断当前焦点在哪个窗体上
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Timer1: TTimer; Button1:... 阅读全文
posted @ 2008-01-22 16:50 万一 阅读(3955) 评论(0) 推荐(0) 编辑
TScreen 类 - 判断当前焦点在哪个控件上
摘要:procedure TForm1.Timer1Timer(Sender: TObject); begin Text := Screen.ActiveControl.ClassName; end; {多放几个控件, 按 Tab 测试; 但并不是所有控件都有焦点} 阅读全文
posted @ 2008-01-22 16:39 万一 阅读(5336) 评论(0) 推荐(0) 编辑
TScreen 类 - 使用 Screen.Cursors
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; {需要个定时器} ... 阅读全文
posted @ 2008-01-22 16:02 万一 阅读(3645) 评论(3) 推荐(0) 编辑
TScreen 类 - 通过 Screen 更换光标
摘要://更换窗体或某个控件的光标可以不通过 Screen 对象, 譬如: begin Self.Cursor := crAppStart; Panel1.Cursor := crHandPoint; {光标可选值: crDefault = TCursor(0); crNone = TCursor(-1); crArrow = TCursor(-... 阅读全文
posted @ 2008-01-22 15:12 万一 阅读(4395) 评论(7) 推荐(0) 编辑
TScreen 类 - 程序中窗体的个数
摘要://一个包含两个窗体的例子, 这是工程中的内容: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar ... 阅读全文
posted @ 2008-01-22 14:10 万一 阅读(3297) 评论(0) 推荐(0) 编辑
TScreen 类 - 关于 Screen 对象
摘要:Screen 对象是 TScreen 类的一个变量, 它声明在 Forms 单元的第 1323 行(Delphi 2007); 并且 TScreen 类也来自 Forms 单元. 也就是说, 只要 uses 了 Forms 单元, Screen 对象就可以使用了. 我们自己建立一个 TScreen 类的对象可以吗? 当然可以! var MyScreen: TScreen; begin ... 阅读全文
posted @ 2008-01-22 13:23 万一 阅读(4574) 评论(3) 推荐(0) 编辑
TScreen 类 - 屏幕的逻辑宽度与高度
摘要:var w,h: Integer; begin w := Screen.Width; h := Screen.Height; Text := Format('当前屏幕的分辨率是: %d*%d', [w,h]); end; 阅读全文
posted @ 2008-01-22 13:09 万一 阅读(4204) 评论(0) 推荐(0) 编辑
TScreen 类 - 获取字体列表
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate... 阅读全文
posted @ 2008-01-22 13:03 万一 阅读(5279) 评论(0) 推荐(0) 编辑
什么是堆、栈?
摘要:Delphi 的属性太复杂了, 先换换思路, 再继续学习. 程序需要的内存空间分为 heap(堆) 和 stack(栈); heap 是自由存储区, stack 是自动存储区; 使用 heap 需要手动申请、手动释放, stack 是自动申请、自动释放; 使用 heap 时, 如果只申请不释放, 就会发生"内存泄露"; 不需要申请和释放空间的元素, 譬如变量、结构(record)等, 是... 阅读全文
posted @ 2008-01-22 12:00 万一 阅读(7564) 评论(19) 推荐(0) 编辑
理解 Delphi 的类(十二) - 深入属性[1] - 先复习
摘要:关于属性的话题还有很多, 譬如: 数组属性、默认属性、class 属性等等. 先总结一下前面提到过的属性吧. TMyClass = class(TObject) private FName: string; procedure SetName(const Value: string); published property Name: string read FN... 阅读全文
posted @ 2008-01-18 13:41 万一 阅读(6325) 评论(15) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[13] - 方法的调用约定
摘要:因为使用方法参数的不同, 所以有了调用约定. 譬如 Delphi 默认的是从左到右读取参数; Window API 是从右到左读取参数. 如果没有调用约定, Delphi 就无法使用由 C 语言编写的 Window API; 如果没有调用约定, 别的语言也无法使用由 Delphi 编写的 DLL 文件中的方法. 指示字 参数读取顺序 参数删除 参数传递 备注 register 左→右... 阅读全文
posted @ 2008-01-18 13:31 万一 阅读(4508) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[12] - 消息方法
摘要://一个前导示例: {创建一 Win32 工程, 给窗体添加 OnKeyDown 事件} procedure Tbu.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Self.Text := Char(Key); end; {功能: 在键盘上按一个键, 窗体的标题栏会显示键名} //现在我们... 阅读全文
posted @ 2008-01-17 17:09 万一 阅读(5719) 评论(8) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[11] - 事件方法
摘要:在方法的类别中, 应该还有一种事件方法; 事件是一种特殊的属性, 使用事件, 就是使用属性; 然后属性再调用事件方法. 到属性里面再深入学习吧. 阅读全文
posted @ 2008-01-17 14:11 万一 阅读(4135) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[10] - 构造方法与析构方法
摘要://构造方法就是对象建立时调用的方法; 析构方法就是对象销毁时调用的方法. 如: TMyClass = class(TObject) public constructor Create; {构造方法} destructor Destroy; override; {析构方法} end; {几个要点: 这两个方法都可以追溯到所有类的祖先类 TObject; ... 阅读全文
posted @ 2008-01-17 14:09 万一 阅读(4949) 评论(5) 推荐(1) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[9] - 不能被覆盖的方法与不能被继承的类
摘要:{ 抽象类是一定要被继承才可以使用的; 抽象方法是一定要被覆盖才可以使用的. 现在说的是不能被覆盖的方法, 与不能被继承的类. } //譬如: TA = class procedure Proc; virtual; {TA 中的虚方法, 将要被覆盖} end; TB = class(TA) procedure Proc; override; {覆盖} end; TC =... 阅读全文
posted @ 2008-01-17 12:25 万一 阅读(4870) 评论(7) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类
摘要://抽象方法类似与接口; 在没有接口的年代 Delphi 是用抽象方法来模拟接口的; 我想它最终会被接口替代. {下面就定义了两个抽象方法} TMyClass = class(TObject) procedure Proc1; virtual; abstract; {抽象方法首先应该是一个虚方法或动态方法} function Fun: string; dynamic; abs... 阅读全文
posted @ 2008-01-17 00:36 万一 阅读(6061) 评论(3) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[7] - 关于 inherited
摘要:// inherited 就是调用父类方法的一个特殊命令; 举例: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) But... 阅读全文
posted @ 2008-01-16 21:27 万一 阅读(7010) 评论(5) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[6] - 类中的方法重载
摘要://类中的方法重载首先具备前面说过的重载相关的所有特点, 如: TMyClass = class(TObject) function Fun(s: string): string; overload; function Fun(i: Integer): Integer; overload; function Fun(x,y: Integer): string; overload; ... 阅读全文
posted @ 2008-01-16 19:53 万一 阅读(6624) 评论(2) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[5] - 静态方法、类方法、静态类方法
摘要://静态方法是默认的, 如果不是虚方法或纯虚方法, 那它就是一个静态方法. //类方法就是通过类名就可以访问的方法 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFo... 阅读全文
posted @ 2008-01-16 17:07 万一 阅读(11454) 评论(10) 推荐(1) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[4] - 访问限制(或者叫可见性)
摘要://下面说的数据成员不仅仅指方法 TMyClass = class(TObject) function Fun1: string; {公共区域的数据成员在默认状态下会归于 published 区} //所谓默认状态就是编译指令为{$M+}, 如果是{$M-}这些数据成员会归于 public 区 private function Fun2: string; {private 区的数据... 阅读全文
posted @ 2008-01-16 15:52 万一 阅读(5209) 评论(4) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[3] - 方法在实现时的参数省略
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) end; TBass = class function Fun1(x,... 阅读全文
posted @ 2008-01-16 15:51 万一 阅读(3983) 评论(4) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[2] - 关于覆盖与重定义
摘要://标准的覆盖是这样的 TBass = class procedure Proc; virtual; {或用 dynamic} end; TChild = class(TBass) procedure Proc; override; end; //以下几种情况属于重定义, 其中例 3-5 还会有编译提示 {例1} TBass = class procedure Proc; e... 阅读全文
posted @ 2008-01-16 13:14 万一 阅读(4580) 评论(3) 推荐(0) 编辑
理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法
摘要:方法来到类中, 以前的特点基本都在; 因为类一般是存在于一个继承链中, 所以就有了一些新的概念, 譬如: 继承、覆盖; 也有了很多新名称, 譬如: 静态方法、虚方法、动态方法、抽象方法、类方法、消息方法. 先从虚方法与动态方法开始吧 //下面的类中就定义了两个虚方法(virtual)、两个动态方法(dynamic) TMyClass = class procedure Proc1(x,y:... 阅读全文
posted @ 2008-01-15 16:07 万一 阅读(5650) 评论(2) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[29] - 传址参数不能赋予常量
摘要:{给这个函数可以赋常数变量} function Fun1(x,y: Integer): Integer; begin Result := x + y; end; {这个函数不能赋予常数变量} function Fun2(var x,y: Integer): Integer; begin Result := x + y; end; {测试} procedure TForm1.Butt... 阅读全文
posted @ 2008-01-15 15:52 万一 阅读(3916) 评论(1) 推荐(1) 编辑
理解 Delphi 的类(十) - 深入方法[28] - 递归函数实例: 搜索当前目录下的所有嵌套目录
摘要://上面一个例子不能说明递归函数的本质, 直接来个实用的函数吧, 刚好要用. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ... 阅读全文
posted @ 2008-01-15 15:45 万一 阅读(5667) 评论(2) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[27] - 递归函数: 简单示例
摘要://所谓递归函数, 就是自己调用自己的函数, 先来个简单的例子: {递归调用的简单示例} procedure alert(i: Integer = 1); begin ShowMessage(IntToStr(i)); {这是方法的功能} Inc(i); if i 阅读全文
posted @ 2008-01-15 11:57 万一 阅读(5074) 评论(2) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[26] - 回调函数
摘要://把一个方法当作另一个方法的参数, 就是回调方法, 大家习惯称作回调函数 type TFunType = function(i: Integer): Integer; {声明一个方法类型} function MyFun(i: Integer): Integer; {建立类型兼容的函数} begin Result := i*2; end; {把函数当作参数, 再定义一... 阅读全文
posted @ 2008-01-15 11:37 万一 阅读(9037) 评论(7) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[25] - 使用方法类型
摘要://弄明白这一点, 才好使用回调函数 {定义方法类型} type TFunType = function(x: Integer): Integer; {函数类型} TProcType = procedure(name: string); {过程类型} {定义一个符合 TFunType 类型的函数} function MyFun(x: Integer): Integer;... 阅读全文
posted @ 2008-01-15 11:13 万一 阅读(4960) 评论(13) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[24] - 方法是一个指针
摘要:{自定义过程} procedure MyProc; begin ShowMessage('ok'); end; {自定义函数} function MyFun: string; begin Result := 'ok'; end; {读取它们的指针} procedure TForm1.Button1Click(Sender: TObject); var p: Pointer; be... 阅读全文
posted @ 2008-01-15 01:06 万一 阅读(4299) 评论(2) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[23] - 重载
摘要:{ 下面的函数重名, 但参数不一样, 此类情况必须加 overload 指示字; 调用时, 会根据参数的类型和个数来决定调用哪一个; 这就是重载. } function MyFun(s: string): string; overload; begin Result := '参数是一个字符串: ' + s; end; function MyFun(i: Integer): s... 阅读全文
posted @ 2008-01-15 00:51 万一 阅读(5476) 评论(6) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[22] - 指针参数
摘要:{现在这个函数并没有 var 前缀, 也就是说参数应该不会被修改的} function MyFun(p: PInteger): Integer; {PInteger 是 Integer 的指针类型} begin p^ := p^ * 2; Result := p^; end; {测试} procedure TForm1.Button1Click(Sender: TObject);... 阅读全文
posted @ 2008-01-15 00:23 万一 阅读(5101) 评论(4) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[21] - 开放数组参数
摘要://给一个整型开放数组求和的函数 function MyFun(const arr: array of Integer): Integer; var i: Integer; begin Result := 0; for i in arr do Result := Result + i; end; {测试1:} procedure TForm1.Button1Click(Sender... 阅读全文
posted @ 2008-01-15 00:16 万一 阅读(7100) 评论(11) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[20] - 静态数组参数
摘要://静态数组做参数, 不能这样使用: function MyFun(arr: array[0..9] of Integer): Integer; var i: Integer; begin Result := 0; for i in arr do Result := Result + i; end; //应该先把数组定义成一个类型 Type IntArray = array[... 阅读全文
posted @ 2008-01-14 23:33 万一 阅读(5878) 评论(7) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[19] - 过程中的方法
摘要://Delphi 支持过程中的方法 procedure TForm1.Button1Click(Sender: TObject); procedure alert(s: string); begin ShowMessage(s); end; begin alert('万一'); {万一} end; 阅读全文
posted @ 2008-01-14 21:42 万一 阅读(3817) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[18] - 在接口区声明的方法都相当于提前声明了
摘要://要点18: 如果函数在接口区定义了, 就无需用 forward 提前声明了 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ... 阅读全文
posted @ 2008-01-14 21:41 万一 阅读(4015) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[17] - 提前声明
摘要://要点17: 如果前面的方法要调用后面的方法, 后面的方法需要提前声明 function MyFunB(x: Integer): Integer; forward; {使用 forward 指示字提前声明} function MyFunA(x: Integer): Integer; begin Result := MyFunB(x) * 3; {要调用后面的方法, 后面的方法需要提前声明... 阅读全文
posted @ 2008-01-14 21:40 万一 阅读(4016) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[16] - 方法的顺序
摘要://要点16: 在实现区(implementation), 自定义的方法是有顺序的 function MyFunA(x: Integer): Integer; begin Result := Sqr(x); {取平方} //MyFunB(x); {前面的函数不能调用后面的函数} end; function MyFunB(x: Integer): Integer; begin ... 阅读全文
posted @ 2008-01-14 21:36 万一 阅读(4083) 评论(2) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数
摘要://要点15: 调用其他单元的函数 //包含函数的单元: unit Unit2; interface function MyFun(x,y: Integer): Integer; {函数必须在接口区声明} implementation function MyFun(x,y: Integer): Integer; {函数必须在函数区实现} begin Result := x + y; ... 阅读全文
posted @ 2008-01-14 21:34 万一 阅读(6734) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[14] - 在TForm1 类内声明的方法
摘要://要点14: 如果声明在 TForm1 类内, 那它就是 TForm1 类的一个方法了 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TFor... 阅读全文
posted @ 2008-01-14 21:33 万一 阅读(4741) 评论(0) 推荐(1) 编辑
理解 Delphi 的类(十) - 深入方法[13] - 在 interface 区声明的方法
摘要://要点13: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = clas... 阅读全文
posted @ 2008-01-14 21:32 万一 阅读(4444) 评论(5) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[12] - implementation 区中的方法
摘要://要点12: implementation 区中的过程或函数, 只能在本单元调用 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ... 阅读全文
posted @ 2008-01-14 21:31 万一 阅读(5101) 评论(1) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[11] - 参数前缀
摘要://要点11: 参数可以分为: 默认参数(传值)、var(传址)、out(输出)、const(常数)四类 {默认参数是传值, 不会被改变} function MyF1(x: Integer): Integer; begin Inc(x); Result := x; end; {var参数是传址, 会被改变} function MyF2(var x: Integer): Integer... 阅读全文
posted @ 2008-01-14 21:29 万一 阅读(5022) 评论(4) 推荐(1) 编辑
理解 Delphi 的类(十) - 深入方法[10] - 默认参数
摘要://要点10: 过程和函数都可以有一个或多个默认参数; 但必须在非默认参数后面 function MyFun(s1: string; s2: string='好人'): string; begin Result := s1 + s2; end; {调用} procedure TForm1.Button1Click(Sender: TObject); var str1,str2: str... 阅读全文
posted @ 2008-01-14 21:28 万一 阅读(4586) 评论(4) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[9] - 调用时的括号
摘要://要点9: 没有参数的过程或函数, 在调用时可以省略 (); 也可以带着 function MyFun: string; begin Result := 'ok'; end; {调用} procedure TForm1.Button1Click(Sender: TObject); var s: string; begin s := MyFun; ShowMessage(s);... 阅读全文
posted @ 2008-01-14 21:27 万一 阅读(4032) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[8] - 如果忘了返回值
摘要://要点8: 忘了写返回值的函数, 也可以当过程用(没有人会这样做, 但 Delphi 竟然也允许) function MyFun(var x: Integer): string; begin x := x + 1; end; {调用} procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i :... 阅读全文
posted @ 2008-01-14 21:26 万一 阅读(4074) 评论(3) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[7] - Result
摘要://要点7: 不仅如此, Result 还有更灵活的运用 function MyFun(b: Byte): Char; begin //Result := Char(b); {我们当然可以这样写} Byte(Result) := b; {这样也行} end; {System 中就有这样一个函数} function TObject.ClassType: TClass; begin ... 阅读全文
posted @ 2008-01-14 21:23 万一 阅读(4606) 评论(5) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[6] - Result
摘要://要点6: Result 可以参与运算, "函数名"不可以 function MyFun(x,y: Integer): Integer; begin Result := x + y; Result := Result * 2; end; 阅读全文
posted @ 2008-01-14 21:21 万一 阅读(3918) 评论(1) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[5] - Result 与函数名
摘要://要点5: 函数的返回值可以使用 Result , 也可以使用函数名(但不提倡) function MyFun1(x,y: Integer): Integer; begin Result := x + y; end; function MyFun2(x,y: Integer): Integer; begin MyFun2 := x + y; end; 阅读全文
posted @ 2008-01-14 21:19 万一 阅读(4421) 评论(2) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[4] - 共同类型的参数的简化写法
摘要://要点4: 多个相同类型的参数可以简化写法 function MyFun(str: string; x,y,z: Integer): string; begin Result := str + IntToStr(x + y + z); end; 阅读全文
posted @ 2008-01-14 21:18 万一 阅读(4000) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[3] - 调用时参数分割
摘要://要点3: 在调用时, 参数使用 , 分割的 function MyFun(x: Integer; y: Integer): Integer; begin Result := x + y; end; {调用} procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := MyFun(1,2);... 阅读全文
posted @ 2008-01-14 21:15 万一 阅读(3719) 评论(0) 推荐(0) 编辑
理解 Delphi 的类(十) - 深入方法[2] - 参数分割
摘要://要点2: 过程和函数都可以有一个或多个参数; 参数用 ; 号分割 procedure MyProc(i: Integer); begin ShowMessage(IntToStr(i)); end; function MyFun(x: Integer; y: Integer): Integer; begin Result := x + y; end; 阅读全文
posted @ 2008-01-14 21:14 万一 阅读(3838) 评论(0) 推荐(1) 编辑
理解 Delphi 的类(十) - 深入方法[1] - 定义
摘要:类中包含字段、方法和属性(属性包含事件); 字段是靠方法组织与操作的; 属性也只是方便和规范了字段与方法的使用. 因此我觉得: 方法是最重要的. 方法无处不在, 它不仅仅存在与类中. 先从非类中的方法谈起吧, 因为类中的方法也拥有全部这些特性. 离开类的怀抱, 我们更喜欢把方法叫做过程或函数. //要点1: 过程用 procedure 定义, 函数用 function 定义; 过程没有返回值... 阅读全文
posted @ 2008-01-14 15:01 万一 阅读(4272) 评论(0) 推荐(1) 编辑
理解 Delphi 的类(九) - 关于类的向前声明
摘要://例1: 这是正确的 TClassA = class Field1: string; Field2: Integer; end; TClassB = class Field1: string; Field2: Integer; Field3: TClassA; {字段 Field3 的类型是刚刚新定义的 TClassA 类型} end;... 阅读全文
posted @ 2008-01-14 13:33 万一 阅读(5794) 评论(5) 推荐(1) 编辑
理解 Delphi 的类(八) - 关于类的定义
摘要://标准语法 TMyClass1 = class(TObject) end; //如果是继承自 TObject 可以省略 TMyClass2 = class end; //可以实现多个接口; 实现接口时经常用到 TInterfacedObject 类, 它实现了接口的默认方法 TMyClass3 = class(TInterfacedObject, I... 阅读全文
posted @ 2008-01-14 13:05 万一 阅读(11997) 评论(6) 推荐(0) 编辑
关于类的入门例子(9): 获取对象的 RTTI 属性与事件的函数
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, xmldom, XMLIntf, XMLBrokr, msxmldom, XMLDoc; type TForm1 = class(TFor... 阅读全文
posted @ 2008-01-14 02:25 万一 阅读(6210) 评论(3) 推荐(0) 编辑
关于类的入门例子(8): 遍历窗体中所有控件的函数
摘要://显示窗体中所有控件的函数 function GetCtrls(Control: TWinControl; List: TStringList): Boolean; var i: Integer; obj: TWinControl; begin for i := 0 to Control.ControlCount-1 do begin obj := TWinContro... 阅读全文
posted @ 2008-01-13 21:04 万一 阅读(6052) 评论(16) 推荐(0) 编辑
关于类的入门例子(7): 遍历窗体的所有父类
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-11 16:43 万一 阅读(4267) 评论(1) 推荐(0) 编辑
理解 Delphi 的类(七) - 认识类的多态
摘要:什么是多态? 我的理解就是: 同样一个方法, 在不同的对象里会有不同的实现, 仅此而已. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TFor... 阅读全文
posted @ 2008-01-11 02:27 万一 阅读(5952) 评论(1) 推荐(0) 编辑
理解 Delphi 的类(六) - 认识类的封装
摘要://这个类中的两个字段没有封装 TMyClass1 = class FName: string; FAge: Integer; end; //这个类中的两个字段封装了, 外部不能读写 TMyClass2 = class private FName: string; FAge: Integer; //public e... 阅读全文
posted @ 2008-01-11 02:26 万一 阅读(6401) 评论(5) 推荐(0) 编辑
理解 Delphi 的类(五) - 认识类的继承
摘要:先新建一个 VCL Forms Application 工程, 代码中就已经出现了两个类: 一个是 TForm 类; 一个是 TForm1 类; TForm1 继承于 TForm. TForm 是 TForm1 的父类; TForm1 是 TForm 的子类. unit Unit1; interface uses Windows, Messages, SysUtils, Variant... 阅读全文
posted @ 2008-01-11 02:25 万一 阅读(7532) 评论(6) 推荐(0) 编辑
理解 Delphi 的类(四) - 初识类的事件
摘要:先勾画一下思路: 1、建立一个类, 里面有年龄字段 FAge; 2、通过 Age 属性读写 FAge; 3、如果输入的年龄刚好是 100 岁, 将会激发一个事件, 这个事件我们给它命名为: OnHundred unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Cont... 阅读全文
posted @ 2008-01-11 02:24 万一 阅读(8790) 评论(10) 推荐(0) 编辑
理解 Delphi 的类(三) - 初识类的属性
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button... 阅读全文
posted @ 2008-01-11 02:22 万一 阅读(7830) 评论(8) 推荐(1) 编辑
理解 Delphi 的类(二) - 初识类的方法
摘要:说到"类", 就会提到: 属性、方法、事件 (这是类包含的内容); 封装、继承、多态 (这是类的主要用途). 下面定义并调用了了一个过程 MyProc、一个函数 MyFun. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ... 阅读全文
posted @ 2008-01-11 01:23 万一 阅读(7325) 评论(10) 推荐(2) 编辑
理解 Delphi 的类(一) - 从结构谈起
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button... 阅读全文
posted @ 2008-01-11 00:39 万一 阅读(12936) 评论(16) 推荐(0) 编辑
delphi.about.com 上的教材链接
摘要:http://spiderbites.about.com/delphi.htm 阅读全文
posted @ 2008-01-10 16:30 万一 阅读(2984) 评论(0) 推荐(0) 编辑
Delphi 7 以来的语法等变化
摘要:New Delphi language features since Delphi 7 New IDE features since Delphi 7 New VCL features since Delphi 7 Debugger Enhancements since Delphi 7 阅读全文
posted @ 2008-01-10 16:15 万一 阅读(2886) 评论(0) 推荐(0) 编辑
推荐一套 Delphi 入门级视频
摘要:Title Description Link #1 Intro to the IDE web • zip #2 Hello World web • zip #3 Basic Application Development web • zip #4 Language Introduction web • zip #5 More Lanugage Int... 阅读全文
posted @ 2008-01-10 13:18 万一 阅读(4888) 评论(5) 推荐(0) 编辑
学习结构[记录]类型(9) - 变体结构
摘要:变体结构也就是变体记录, 是一个比较复杂的概念. 专家不提倡使用. 兴趣所致, 我想把它弄明白. 一个最大的无符号整数(Cardinal)是 4294967295, 它的大小是 4 字节, 它的二进制表示是: 11111111 11111111 11111111 11111111 它的低字节的值是 11111111, 也就是十进制的 255 //测试: var c: Cardinal... 阅读全文
posted @ 2008-01-09 18:03 万一 阅读(6123) 评论(7) 推荐(0) 编辑
学习结构[记录]类型(8) - 结构嵌套
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-09 18:01 万一 阅读(4772) 评论(11) 推荐(0) 编辑
学习结构[记录]类型(7) - 结构也可以有构造函数
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button... 阅读全文
posted @ 2008-01-09 16:59 万一 阅读(3423) 评论(3) 推荐(0) 编辑
学习结构[记录]类型(6) - 结构的属性
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button... 阅读全文
posted @ 2008-01-09 16:03 万一 阅读(3681) 评论(5) 推荐(0) 编辑
学习结构[记录]类型(5) - 结构的方法
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button... 阅读全文
posted @ 2008-01-09 14:50 万一 阅读(3411) 评论(1) 推荐(0) 编辑
学习结构[记录]类型(4) - 结构指针
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-09 13:39 万一 阅读(6929) 评论(13) 推荐(0) 编辑
学习结构[记录]类型(3) - 结构间的关系
摘要:type TRec1 = record name: string[12]; age: Word; end; TRec2 = record name: string[12]; age: Word; end; var RecA,RecB: TRec1; RecX,RecY: TRec2; procedure TForm1.Button1C... 阅读全文
posted @ 2008-01-09 13:33 万一 阅读(4019) 评论(5) 推荐(0) 编辑
学习结构[记录]类型(2) - 压缩结构
摘要:type TRec1 = record i: Integer; w: Word; end; TRec2 = packed record {压缩结构: 牺牲效率, 减小尺寸} i: Integer; w: Word; end; procedure TForm1.Button1Click(Sender: TObject); begin Show... 阅读全文
posted @ 2008-01-09 13:15 万一 阅读(4185) 评论(3) 推荐(0) 编辑
学习结构[记录]类型(1) - 开始
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-09 13:05 万一 阅读(5756) 评论(17) 推荐(0) 编辑
动态数组的释放
摘要://动态数组一般是不需要手动释放的, 如果需要... var arr: array of Integer; begin {设置动态数组维数} SetLength(arr,10); {释放方法一} arr := nil; {释放方法二} SetLength(arr, 0); {释放方法三} Finalize(arr); end; 阅读全文
posted @ 2008-01-09 00:51 万一 阅读(10726) 评论(14) 推荐(1) 编辑
数组与子界
摘要:type TABC = 'A'..'G'; {定义子界} var abcArr: array[TABC] of Integer; {定义数组} abc: TABC; {定义子界变量} begin {数组赋值} abcArr['A'] := 11; abcArr['B'] := 22; abcArr... 阅读全文
posted @ 2008-01-09 00:32 万一 阅读(3000) 评论(0) 推荐(0) 编辑
数组与枚举
摘要:type TMyEnum = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday); {定义枚举} var weekArr: array[TMyEnum] of string; {定义数组} myEnum: TMyEnum; {定义枚举变量} begin {数组赋值} week... 阅读全文
posted @ 2008-01-09 00:21 万一 阅读(7301) 评论(0) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(21) - 暂停
摘要:发现了一个更好的工具 NativeXml, 有可能不再使用 XMLDocument 了. 阅读全文
posted @ 2008-01-08 01:44 万一 阅读(5710) 评论(4) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(20) - 动态建立 XMLDocument 对象
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, xmldom, XMLIntf, msxmldom, XMLDoc; type TForm1 = class(TForm) But... 阅读全文
posted @ 2008-01-08 01:41 万一 阅读(9597) 评论(11) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(19) - NodeValue 与 NodeName 的读写区别
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) But... 阅读全文
posted @ 2008-01-07 14:59 万一 阅读(5952) 评论(0) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(18) - 更好地显示 xml 的测试结果 - FormatXMLData 及其他
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls, OleCtrls, SHDocVw; type TForm1 = c... 阅读全文
posted @ 2008-01-07 14:52 万一 阅读(6701) 评论(1) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(17) - 上一个节点、下一个节点、父节点
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XM... 阅读全文
posted @ 2008-01-06 09:54 万一 阅读(5479) 评论(1) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(16) - 节点列表中的第一个与最后一个节点
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-05 21:39 万一 阅读(4725) 评论(1) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(15) - 创建与保存 xml
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, StdCtrls, msxmldom, XMLDoc; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-05 21:37 万一 阅读(16350) 评论(7) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(14) - 遍历 XML 文件
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 22:16 万一 阅读(13299) 评论(1) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(13) - 关于 XML 属性
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 21:37 万一 阅读(6584) 评论(0) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(12) - 读取或设置 xml 的编码与版本号
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 18:13 万一 阅读(6582) 评论(0) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(11) - 一个多余的属性: Nodes
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 17:01 万一 阅读(6448) 评论(2) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(10) - 判断节点类型: 支节点、叶节点、文本节点、空节点
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 16:46 万一 阅读(7318) 评论(2) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(9) - 关于 HasChildNodes 与 IsTextElement
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 16:29 万一 阅读(6662) 评论(1) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(8) - 添加与删除节点
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 16:12 万一 阅读(8912) 评论(6) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(7) - 获取节点名称与节点的属性名称
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 14:52 万一 阅读(10203) 评论(0) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(6) - 访问节点属性
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 14:33 万一 阅读(11178) 评论(3) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(5) - 获取元素内容
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 13:51 万一 阅读(11883) 评论(11) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(4) - 获取根目录下的元素数
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm1 = class(TForm) XML... 阅读全文
posted @ 2008-01-03 13:12 万一 阅读(12254) 评论(3) 推荐(0) 编辑
Delphi 中的 XMLDocument 类详解(3) - 读取 xml 文件
摘要:先虚拟一个测试文件: test.xml; 放在 c:\temp\ 下备用. 张三 男 34 李四 女 43 王五 女 25 孙六 男 52 unit Unit1; interface uses Classes, C... 阅读全文
posted @ 2008-01-03 11:29 万一 阅读(25505) 评论(6) 推荐(2) 编辑
Delphi 中的 XMLDocument 类详解(2) - 记要
摘要:1、TXMLDocument 适用于内存中操作和建立新的 xml 2、一个 TXMLDocument 文档其实就是一个节点集合 3、每个节点包括名称、文本内容、属性集合、子节点集合 4、可以按位置或名称访问节点 5、每一个节点都是一个 IXMLNode 对象 6、每一个节点下包含的节点集合是一个 IXMLNodeList 对象, 用节点的 ChildNodes 属性获取 7、根节点 XMLDoc... 阅读全文
posted @ 2008-01-03 01:03 万一 阅读(10075) 评论(0) 推荐(1) 编辑
Delphi 中的 XMLDocument 类详解(1) - 等待研究的内容
摘要://函数 AddChild(const TagName: DOMString): IXMLNode; overload; AddChild(const TagName, NamespaceURI: DOMString): IXMLNode; overload; CreateElement(const TagOrData, NamespaceURI: DOMString): IXMLNode; C... 阅读全文
posted @ 2008-01-02 23:34 万一 阅读(13123) 评论(2) 推荐(0) 编辑
xml 语法提示
摘要:1、忽略空白 2、注释: 3、指令: 4、特殊字符: ' " & 替代: ' " & 5、二进制数据: 6、区分大小写 7、标记不能交叠 8、单标记, 也就是空元素, 如: , 只用属性记录数据 9、属性值在引号内 10、xml 中的元素与属性的名字, 必须以字母或 _ 开头, 后面可以是字母、数字或 _ - : . 的组合, 但不能使用 xml 开始. 11、文件头包含版本与字符编... 阅读全文
posted @ 2008-01-02 22:54 万一 阅读(7619) 评论(0) 推荐(0) 编辑
关于 Delphi 中流的使用(9) 分割与合并文件的函数
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-02 16:31 万一 阅读(7997) 评论(1) 推荐(0) 编辑
关于 Delphi 中流的使用(8) 压缩与解压缩的函数
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-02 14:26 万一 阅读(6954) 评论(4) 推荐(2) 编辑
关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-01 22:50 万一 阅读(16452) 评论(17) 推荐(0) 编辑
关于 Delphi 中流的使用(6) 用流读写结构化文件
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; {添加 Memo 显示内容} B... 阅读全文
posted @ 2008-01-01 21:52 万一 阅读(9049) 评论(16) 推荐(0) 编辑
关于 Delphi 中流的使用(5) 组件序列化
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton... 阅读全文
posted @ 2008-01-01 18:02 万一 阅读(8127) 评论(19) 推荐(1) 编辑
关于 Delphi 中流的使用(4) 遍历读取流中的所有数据
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Me 阅读全文
posted @ 2008-01-01 15:16 万一 阅读(9848) 评论(12) 推荐(0) 编辑
关于 Delphi 中流的使用(3) 通过内存流读取文件
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; ... 阅读全文
posted @ 2008-01-01 13:14 万一 阅读(17835) 评论(24) 推荐(1) 编辑
关于 Delphi 中流的使用(2) 用 TFileStream(文件流) 读写
摘要:TStream 是一个抽象的基类, 不能直接生成对象. 在具体的应用中, 主要使用它的子孙类: TFileStream: 文件流 TStringStream: 字符串流 TMemoryStream: 内存流 TResourceStream: 资源文件流 THandleStream: 是 TFileStream 的父类、TStream 的子类 TCustomMemoryStream: 是 TMemo... 阅读全文
posted @ 2008-01-01 12:04 万一 阅读(51514) 评论(48) 推荐(2) 编辑
关于 Delphi 中流的使用(1) 用 TMemoryStream(内存流) 入门
摘要:前言: 所谓"流", 就是一段数据或是一块内存; 在进行流操作时, 我们不必关心流中的数据到底是什么; 只需要知道流的大小和当前的指针位置. 所以流只有两个属性: Size、Position. 对流的操作, 不过就是读取和写入. 所以流最主要的方法就是 Read 和 Write. 在很多控件的使用中, 读取主要用 LoadFromStream; 写入主要用 SaveToStream. 举个例子:... 阅读全文
posted @ 2008-01-01 11:59 万一 阅读(25002) 评论(31) 推荐(1) 编辑
^ 符号的特殊用法
摘要:begin ShowMessage(IntToStr(Byte(^A))); {1} ShowMessage(IntToStr(Integer(^b))); {2} ShowMessage(IntToStr(Integer(^^))); {30} ShowMessage(IntToStr(Integer(^?))); {127} end; ^ 符号的特殊用法产生... 阅读全文
posted @ 2008-01-01 01:51 万一 阅读(10595) 评论(3) 推荐(0) 编辑