随笔分类 -  数据类型相关

1 2 3 下一页
判断集合从属关系的练习: 是否同时按下了 Ctrl 和 Shift 键
摘要://不少鼠标与键盘事件用到了集合参数: Shift: TShiftState;TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen);{判断是否按下了 Ctrl 键: 方法一}procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin Text := ''; if ssCtrl in Shift then Text := 阅读全文
posted @ 2011-06-18 11:37 万一 阅读(3537) 评论(0) 推荐(1) 编辑
枚举可以这样遍历
摘要:uses TypInfo;{以 TAlign 为例}procedure TForm1.Button1Click(Sender: TObject);var enum: TAlign; i: Integer; str: string;begin Memo1.Clear; for enum := Low(TAlign) to High(TAlign) do begin i := ord(enum); //Integer(enum) str := GetEnumName(TypeInfo(TAlign), i); Memo1.Lines.Add(Format('%d : %s', [i 阅读全文
posted @ 2011-03-29 16:39 万一 阅读(3583) 评论(0) 推荐(0) 编辑
Delphi 中 "位" 的使用(3) - TBits
摘要:TBits 直接继承自 TObject, 它只扩充出 2 个属性、1 个方法:简单示例:OpenBit 方法的主要用途 - 把第一个非 1 的 "位" 设置为 1:用 TBits 实现前面的例子(窗体设计与测试效果同前):Delphi 在下面单元的源码中都有 TBits 的应用:Menus、Buttons、ComCtrls、DBClient、DBTables、DBCommon、DesignEdit... 阅读全文
posted @ 2010-05-07 22:58 万一 阅读(4392) 评论(0) 推荐(0) 编辑
Delphi 中 "位" 的使用(2) - 集合
摘要:集合中的每个元素其实只占一个二进制位, 不足 8 个元素的集合只需要 1 个字节.先观察集合的大小:洞察集合的二进制表示:甚至可以把集合看成一个数字:用集合的方式重新做前一次的例子(窗体设计与测试效果同前):实例观察 TFontStyles 集合:TFontStyles 集合的测试效果图:接下来学习 TBits 类; 对 "位" 的操作 TBits 应该是最直观的. 阅读全文
posted @ 2010-05-07 22:57 万一 阅读(2874) 评论(0) 推荐(0) 编辑
Delphi 中 "位" 的使用(1) - 原始的二进制
摘要:本话题涉及: 1、常用二进制的位操作; 2、集合与 "位" 的关系; 3、TBits 类.这里的 "位" 是指二进制位, 譬如一个 Byte 有 8 个位、一个 Integer 有 32 个位.在 C 语言中可以定义由 "位" 字段构成的结构体, 但因效率问题好像使用也不广泛.假如要保存八种状态(True/False), 最笨的办法可以使用下面的结构体:其实用 1 个字节就可以表示 8 种状态了,... 阅读全文
posted @ 2010-05-07 22:56 万一 阅读(5124) 评论(0) 推荐(1) 编辑
理解浮点数的储存规则
摘要:早就想知道浮点数的存储原理; 从 Single 开始理解.Single(单精度浮点数 - 32 位):sef1823如浮点数: 13.625 (1*101 + 3*100 + 6*10-1 + 2*10-2 + 5*10-3)其二进制表示是: 1101.101(1*23 + 1*22 + 0*21 + 1*20 + 1*2-1 + 0*2-2 + 1*2-3)系数(或叫尾数)规范化: 1101.1... 阅读全文
posted @ 2010-05-04 15:10 万一 阅读(3297) 评论(2) 推荐(0) 编辑
Int64 与 Currency
摘要:procedure TForm1.Button1Click(Sender: TObject);var c: Currency; i: Int64 absolute c;begin c := 1234.5678; ShowMessage(IntToStr(i)); //12345678end;procedure TForm1.Button2Click(Sender: TObject);var... 阅读全文
posted @ 2010-05-03 23:54 万一 阅读(2976) 评论(0) 推荐(0) 编辑
将 4 个 Byte 合成 1 个 Integer 的五种方法 - 回复 "三足乌" 的问题
摘要:问题来源: http://www.cnblogs.com/del/archive/2010/04/21/1717584.html#1809298 阅读全文
posted @ 2010-04-24 16:13 万一 阅读(6430) 评论(5) 推荐(0) 编辑
关于 "高位" 与 "低位" - 回复 "Lovemit" 的问题
摘要:问题来源: http://www.cnblogs.com/del/archive/2008/09/11/1288760.html#1807074本话题会涉及到: Lo、Hi、HiByte、LoWord、HiWord、MakeWord、MakeLong、Int64Rec譬如有一个 Cardinal 类型的整数: 1144201745其十六进制的表示是: $44332211其二进制表示是: 01000100 00110011 00100010 00010001我们说 Cardinal 是 32 位的整数, 这里的位是指 "二进制的位数", 不信你数数.我们需要重点面对的是十六进 阅读全文
posted @ 2010-04-21 21:18 万一 阅读(7526) 评论(16) 推荐(1) 编辑
语法基础: 使用不同的数据类型标记数组
摘要:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton... 阅读全文
posted @ 2009-10-25 22:38 万一 阅读(4488) 评论(3) 推荐(1) 编辑
再说变体结构 - 回复 "彬" 的问题
摘要:问题来源: http://www.cnblogs.com/del/archive/2009/03/01/1032376.html#1464477 假如有这样三种结构, 分别来描述: 直线、圆与三角形: type {描述直线的结构} TLine = packed record ID: Integer; {编号} x1,y1: Integer; {第一点} x... 阅读全文
posted @ 2009-03-02 13:21 万一 阅读(4718) 评论(15) 推荐(1) 编辑
类型转换出现在赋值运算符左边的情况
摘要:下面是 Delphi 2009 VCL 源码的用到的: {ADODB.pas 第 4345 行:} Currency(Buffer^) := C; {ADODB.pas 第 4362 行:} SmallInt(Buffer^) := Byte(cVal) else {ADODB.pas 第 4363 行:} SmallInt(Buffer^) := iVal; {ADODB.pas 第... 阅读全文
posted @ 2009-01-11 10:35 万一 阅读(3417) 评论(1) 推荐(0) 编辑
关于结构体与类型转换的一点小技巧
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButto... 阅读全文
posted @ 2009-01-10 19:48 万一 阅读(4460) 评论(12) 推荐(0) 编辑
Delphi 的内存操作函数(3): 给结构体指针分配内存
摘要:使用结构或结构数组, 一般是不需要主动分配内存的, 譬如: var pts: TPoint; begin pts.X := 1; pts.Y := 2; ShowMessageFmt('%d,%d', [pts.X, pts.Y]); {1,2} end; //结构数组: var Arr: array[0..2] of TPoint; i: Integer; begin... 阅读全文
posted @ 2008-11-10 14:50 万一 阅读(10675) 评论(6) 推荐(0) 编辑
获取集合元素个数 - 回复"鹰@长空"
摘要:问题来源: http://www.cnblogs.com/del/archive/2008/05/11/978683.html#1191835 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TF... 阅读全文
posted @ 2008-05-11 13:09 万一 阅读(5050) 评论(10) 推荐(0) 编辑
获取变量类型的函数
摘要:Variants 单元下的 VarType 函数可以获取变量类型, 但它返回的只是一个数字; 需要再结合一下在 System 单元里定义的这些常量: varEmpty = $0000; varNull = $0001; varSmallint = $0002; varInteger = $0003; varSingle = $0004; varDouble = $0005... 阅读全文
posted @ 2008-05-09 23:01 万一 阅读(5565) 评论(4) 推荐(0) 编辑
关于 array of const
摘要:之前应该参考一下: 关于开放数组参数 //这是在 System 单元定义的一组标识数据类型的常量: vtInteger = 0; vtBoolean = 1; vtChar = 2; vtExtended = 3; vtString = 4; vtPointer = 5; vtPChar = 6; vtObject = 7; vtCl... 阅读全文
posted @ 2008-04-17 22:03 万一 阅读(9617) 评论(10) 推荐(1) 编辑
PChar 类型的又一些用法
摘要://使用 PChar^ var p: PChar; begin p := PChar('abcd'); ShowMessage(p); {abcd} ShowMessage(p^); {a} p := p + 2; ShowMessage(p^); {c} Dec(p); ShowMessage(p^); {b} ShowMessage(p)... 阅读全文
posted @ 2008-04-06 22:33 万一 阅读(5212) 评论(0) 推荐(0) 编辑
关于十六进制转十进制 - 回复 MaxCool 的问题
摘要:这不需要写函数. //如果十六进制非字符串, 无须转换, 直接赋值即可 var i: Integer; begin i := $FF; ShowMessage(IntToStr(i)); {255} end; //如果十六进制是字符串, 用 StrToInt 即可 var s: string; i: Integer; begin s := '$FF'; i :=... 阅读全文
posted @ 2008-03-19 15:20 万一 阅读(6012) 评论(23) 推荐(1) 编辑

1 2 3 下一页