电气工程师

导航

2011年12月1日 #

Windows API 的数据类型与 Delphi 数据类型对照表

摘要: Windows 数据类型Delphi 数据类型描述LPSTRPAnsiChar字符串指针LPCSTRPAnsiChar字符串指针DWORDLongWord整数BOOLLongBool布尔型PBOOL^BOOL指向布尔值的指针PByte^Byte指向字节值的指针PINT^Integer指向整数值的指针PSingle^Single指向单精度浮点值的指针PWORD^Word指向16位值的指针PDWORD^DWORD指向32位值的指针LPDWORDPDWORD指向32位值的指针UCHARByte8位值(可用来表示字符)PUCHAR^Byte指向8位值的指针SHORTSmallint带符号16位整数UI 阅读全文

posted @ 2011-12-01 11:23 电气工程师 阅读(106) 评论(0) 推荐(0) 编辑

WinAPI: ShellExecute - 打开外部程序或文件

摘要: ShellExecute( hWnd: HWND; {指定父窗口句柄} Operation: PChar; {指定动作, 譬如: open、print} FileName: PChar; {指定要打开的文件或程序} Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是 nil} Directory: PChar; {缺省目录} ShowCmd: Integer {打开选项}): HINST; {执行成功会返回应用程序句柄; 如果这个值 <= 32, 表示执行错误}//返回值可能的错误有: = 0 {内存不足}E... 阅读全文

posted @ 2011-12-01 11:21 电气工程师 阅读(170) 评论(0) 推荐(0) 编辑

关于 "高位" 与 "低位"

摘要: 本话题会涉及到: Lo、Hi、HiByte、LoWord、HiWord、MakeWord、MakeLong、Int64Rec譬如有一个 Cardinal 类型的整数: 1144201745其十六进制的表示是: $44332211其二进制表示是: 01000100 00110011 00100010 00010001我们说 Cardinal 是 32 位的整数, 这里的位是指 "二进制的位数", 不信你数数.我们需要重点面对的是十六进制, 不管是几进制的数在编译成汇编代码时都是用十六进制表示, 因为它最直观;我们用十六进制来分析, 也是因为它的直观.怎么直观的? Cardin 阅读全文

posted @ 2011-12-01 11:19 电气工程师 阅读(479) 评论(0) 推荐(0) 编辑

动态数组的释放

摘要: //动态数组一般是不需要手动释放的, 如果需要...var arr: array of Integer;begin {设置动态数组维数} SetLength(arr,10); {释放方法一} arr := nil; {释放方法二} SetLength(arr, 0); {释放方法三} Finalize(arr);end; 阅读全文

posted @ 2011-12-01 11:15 电气工程师 阅读(140) 评论(0) 推荐(0) 编辑

数组类型与数组指针的巧妙利用

摘要: 本例通过存取结构, 慢慢引入了数组类型与指针的一些使用方法; 其中六个小例子的测试内容和结果都是一样的.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6... 阅读全文

posted @ 2011-12-01 11:13 电气工程师 阅读(140) 评论(0) 推荐(0) 编辑

关于动态数组指针操作的两个例子

摘要: 最近突然感觉 Delphi 的动态数组非常好用, 善用它可以省略很多 GetMem、ReallocMem; 并且它是被自动维护的.动态数组变量 arr 本身就是指针, 不能再用 @arr 获取;但要获取某个元素位置的指针, 应该是 @arr[x]; 但随着数组的再分配, 这个地址是变化的.//动态数组地址测试var i: Integer; arr: TBytes; p: PByte;begin SetLength(arr, 5); for i := 0 to 4 do arr[i] := i + 65; ShowMessage(StringOf(arr)); {ABCDE} p := PByt 阅读全文

posted @ 2011-12-01 11:11 电气工程师 阅读(179) 评论(0) 推荐(0) 编辑

运算符

摘要: 运算符包括:@ not ^ * / div mod and shl shr as + - or xor = > < <> <= >= in is其中 @ not ^ 是一元运算符; + - 有时是一元,有时是二元; 其他都是二元运算符.一元运算符在运算数的前面, ^ 例外,也可以在后面,如: P^; 二元运算符在运算数中间.运算符的行为随运算数的类型而变,譬如: not , 面对整数是对位求反; 面对布尔是逻辑非运算.除了 ^ is in,其它运算可应用在Variant(变体类型)上.算术运算符: + - * / div mod... 阅读全文

posted @ 2011-12-01 11:09 电气工程师 阅读(166) 评论(0) 推荐(0) 编辑

@ 与 ^ 运算符

摘要: procedure TForm1.Button1Click(Sender: TObject);var str: string; p: Pointer;begin p := @str; //变量 str 的地址 p := @Form1; //变量 Form1 的地址 p := @TForm1.Button1Click; //过程 TForm1.Button1Click 的地址 p := Addr(str); //同 p := @str; ShowMessage(IntToStr(Integer(p))); //显示end;//例2:procedure TForm1.Button1Click(Se 阅读全文

posted @ 2011-12-01 11:08 电气工程师 阅读(256) 评论(0) 推荐(0) 编辑

is 与 as 运算符举例

摘要: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ActnList, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); private procedure MyPro(Sender: TObject); { Private declara... 阅读全文

posted @ 2011-12-01 11:07 电气工程师 阅读(155) 评论(0) 推荐(0) 编辑

单元文件结构

摘要: unit Unit1;interface {接口部分开始}uses {引用单元列表,这是可选的,如果包含必须紧跟interface关键字} {接口部分声明常量/类型/变量/过程和函数,这些声明对引用单元就像自己的声明一样} {在接口部分声明的过程和函数,就像使用了forward关键字} {接口部分结束}implementation {实现部分}uses {如果包含uses字句,必须紧跟关键字implementation} {在这里实现interface中定义的过程和函数,可以任意顺序的定义和调用.} {在这里可以省略过程和函数的列表,如果包括,必须一样.} {可以定义单元私有的常量/类型(包括 阅读全文

posted @ 2011-12-01 11:04 电气工程师 阅读(103) 评论(0) 推荐(0) 编辑