- 浏览: 102215 次
文章分类
- 全部博客 (56)
- AS3 基础 (13)
- AS3 Loading (3)
- AS3 XML (1)
- AS3 数组 (10)
- AS3 包 (0)
- AS3 声音 (0)
- AS3 时间日期 (0)
- AS3 鼠标 (1)
- AS3 组件 (0)
- AS3 滤镜 (2)
- AS3 特效 (0)
- AS3 与后台 (0)
- AS3 影片控制 (3)
- AS3 算法 (2)
- AS3 素材 (0)
- AS3 书籍 (0)
- AS3 实例 (0)
- AS3 其他 (2)
- 未处理 (1)
- Flex 组件 (0)
- Flex 与ASP.NET (0)
- delphi 基础 (11)
- SQL 基础 (3)
- Delphi combox (1)
- 电脑基础 (0)
- 吃穿住行 (0)
- delphi 数据库 (0)
- SQL 实例代码 (0)
- delphi 报错 (1)
- delphi 函数 (1)
- as3 个人作品 (0)
最新评论
-
hanker888:
眼睛都看花了,能否推荐一下目前用得最多的?
常用flash引擎和框架
case a of 这个的a只能是整型数字呀!您可以这样做,用ComboBox1.ItemIndex属性来做:
i:= ComboBox1..ItemIndex;
case i of
0: ADOTable1.FieldByName('pid').AsString:= '0';//对应***部
1: ADOTable1.FieldByName('pid').AsString:= '1';//对应人事部
2: ADOTable1.FieldByName('pid').AsString:= '2';//财务部
3: ADOTable1.FieldByName('pid').AsString:= '3';//技术部
----------------------------------------------
针对您的补充,回答:
问题补充:i:=ComboBox1.ItemIndex; 报错Incompatible, types:'string' and 'Integer'//没有定义i,您必须先定义i:integer;
case i of 报错Ordinal type required
0: ADOTable1.FieldByName('pid').AsString:= 1; 报错Incompatible types:'string' and 'Integer'// 用‘’把1括起来,因为是字符串的。
1: ADOTable1.FieldByName('pid').AsString:= 2; 同上// 用‘’把2括起来,因为是字符串的。
2: ADOTable1.FieldByName('pid').AsString:= 3; 同上// 用‘’把3括起来,因为是字符串的。
===================================================================
只用过几天的vb, 不知道vb怎样.
对于in来判断一个字符串是否在集合中,你可以绕一下,不用集合,使用AnsiIndexStr。
比如:
S := 'ABC ';
case AnsiIndexStr(S, [ 'ABC ', 'DEF ', 'GHI ']) of
0: //ABC
;
1: //DEF
;
2: //GHI
;
end;
in是二进制操作符,相当于test指令,相当于判断(element and elements) > 0。如果允许string
作为集合的元素,那么首先集合会变成一个Variant array,因为集合的成员已经不能用位来
表示这么简单了,这样的话,你声明一个简单集合,在不支持字符串的情况下可能只需要1个
字节,如果支持string的话,就会大得多,而且集合操作极其低速,因为要对variant array
进行操作,要判断数组的长度,元素的类型。这当然比不上的位操作来得快,也许你到时候
又要抱怨为什么它的in操作为什么这么慢了,集合要占这么多内存,你甚至也会像这里的一
位大佬那样说,pascal太次了。
对于为什么case只接受有序类型(枚举也是有序类型),不接受其他类型如字符串,大概原因可
能和字符串不能作为集合元素的原因相同。
至于为什么不能使用:
case Sender of
Button1: stmt1;
Button2: stmt2;
...
end;
的原因,我想可能是语义问题。
如果不限制判别式为常量表达式,会导致语义二义性,
如果Button1或Button2是变量或函数调用,那么运行时,Button1和Button2有可能等值。那
么当Sender = Button1 = Button2时,到底执行stmt1, 还是执行stmt2呢?
你还是可以绕一下,这样调用:
if Sender is TComponent then
case TComponent(Sender).Tag of
1: //Button1
;
2: //Button2
;
...
end;
当然前提是各个Button的tag是unique的。
除了二义性,还有一个是优化的问题,如果限制使用常量表达式,则代码通常较为有效一点。
像这样的语句:
case TComponent(Sender).Tag of
1: stmt1;
3: stmt3;
5: stmt5;
...
n: stmtn;
else
stmt_else;
end;
当case分支足够长,编译的大概会像这样编指令序列:
编译器预先计算好这样一个指令偏移表:
jmp_offset[1..n] = (
addr_of_stmt1 - addr_of_stmt_else, //for case 1
0 , //for case 2
addr_of_stmt3 - addr_of_stmt_else, //for case 3
0 , //for case 4
addr_of_stmt5 - addr_of_stmt_else, //for case 5
...,
addr_of_stmtn - addr_of_stmt_else //for case n
); //如果else的机会较小则可能会以addr_of_stmt1来作为基地址
register := TComponent(Sender).Tag;
compare register, 0
if less_or_equal then goto stmt_else
compare register, n
if great_than then goto stmt_else
goto addr_of_stmt_else + jmp_offset[register]
但是允许变量判别式的话,
case Sender of
Button1: stmt1;
Button3: stmt3;
Button5: stmt5;
...
ButtonN: stmtN;
else
stmt_else;
end;
则指令序列类似于:
register := Sender;
compare register, button1
if equal then goto stmt1
compare register, button3
if equal then goto stmt3
compare register, button5
if equal then goto stmt5
...
compare register, ButtonN
if equal then goto stmtN
发表评论
-
项目去除SVN .
2011-12-14 21:06 697当项目不需要SVN标志的时候,我们一般怎么办哪??可能很多人设 ... -
VisualSVN安装与配置(Delphi7-2010/VS2010)
2011-12-14 20:25 44891. 软件准备 1) VisualSVN-Server-2. ... -
如何才能在memo中进行查找和继续查找
2011-12-05 21:42 3856memo1.Lines.IndexOf(你要查找的字符串),返 ... -
Delphi第三方控件安装方法--RxLib、EhLib
2011-12-05 21:43 34172010-02-14 13:22:34| 分类: Delph ... -
关于 Delphi 中流的使用(7) 压缩与解压缩(TCompressionStream、TDecompressionStream)
2011-11-21 20:12 2411--------------------引自 万 ... -
Delphi在case 语句中使用字符串(集)
2011-11-23 18:50 4333非常遗憾 Delphi 的 case 语句不支持字符串, 但我 ... -
delphi数据类型及sql server数据类型
2011-11-23 18:49 888delphi数据类型及sql server数据类型 200 ... -
Delphi 中 TStrings 一些用法
2011-11-21 20:14 723Delphi TStrings是一个抽象类,在实际开发中, ... -
BackLinks
2011-11-21 20:13 663BackLinks[1] 也是一个依靠交易链接,传递 Page ... -
Delphi服务器配置问题Database name 什么意思
2011-11-19 15:46 898Delphi 3.0 对 访 问 数 据 ...
相关推荐
在Delphi编程中,`case`语句是一种重要的流程控制结构,它允许程序根据不同的条件执行不同的代码块。本篇文章将深入探讨`case`语句的使用实例,这对于Delphi新手来说是不可或缺的知识。 首先,我们需要理解`case`...
在Delphi编程环境中,`case`语句是一种强大的控制流结构,它允许程序根据不同的条件执行不同的代码块。本教程将深入探讨`case`语句在Delphi中的高级应用,结合实际示例来帮助理解其功能和用法。 首先,我们要明白`...
在Delphi7这个经典的集成开发环境中,我们可以利用其强大的 Pascal 语言特性,如 `case` 语句来实现这一功能。`case` 语句在 Delphi 中用于执行多分支选择,根据特定条件执行不同的代码块。 首先,我们需要了解 ...
摘要:Delphi源码,数据库应用,Case用法 Delphi高级Case语句应用实例,演示如何使用Case语句打开数据表,带有SQLSERVER测试数据文件,在Database文件夹下,测试前请自行附加。 运行环境:Delphi+MSSQL
case Reader.NodeType of ntElement: // 处理开始元素 ntEndElement: // 处理结束元素 else // 处理其他类型的节点 end; end; Reader.Active := False; end; ``` 4. **XML数据绑定**:Delphi还支持XML...
4. **Case label outside of range of case expression**:在CASE语句中,所有的标签必须落在表达式的可能值范围内。如果标签超出了这个范围,编译器将无法确定匹配项。 5. **Circular unit reference to **:当一...
case Message.Msg of WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL: ...
14. 错误的 case 语句是 case x <= 2.0 of 0: x := 0; 1: x := 1 end,因 case 表达式类型不一致。 知识点:Delphi case 语句、类型检查 15. 循环执行次数是 6。 知识点:Delphi 循环语句、循环执行次数计算 16....
Delphi 中的 Case 语句可以用来实现多分支选择。例如,CASE x<=2.0 OF 0:x:=0; 1:x:=1 END; 是一个合法的 Case 语句。 15. 循环执行 Delphi 中的循环执行可以使用 WHILE 语句或 FOR 语句。例如,WHILE y; 是一个...
在软件开发中,设计模式是解决常见问题的经过验证的解决方案,它们代表了最佳实践,并且在各种编程语言中都有应用,包括Delphi。本示例将深入探讨如何在Delphi中实现和利用设计模式。 1. **单例模式**:单例模式...
case LanguageComboBox.ItemIndex of 0: ResourceStringTable1.LangID := 0; // English (United States) 1: ResourceStringTable1.LangID := 768; // French (France) // ... Add more language options here ...
case I of 0: ShowMessage('Column1: ' + Item.Data[I].ToString); 1: ShowMessage('Column2: ' + Item.Data[I].ToString); 2: ShowMessage('Column3: ' + Item.Data[I].ToString); end; end; end else ...
case GetDriveType(PChar(DriveLetter + ':')) of DRIVE_UNKNOWN: Result := '未知'; DRIVE_NO_ROOT_DIR: Result := '无根目录'; DRIVE_REMOVABLE: Result := '可移动'; DRIVE_FIXED: Result := '固定'; DRIVE...
在Delphi编程环境中,设置全局快捷键和判断鼠标按键是两个关键功能,它们可以极大地提升应用程序的交互性和用户友好性。下面将详细讲解如何在Delphi中实现这些功能。 首先,我们来讨论如何设置全局快捷键。全局...
case Str of '.ico': begin Icon := TIcon.Create; try Icon.LoadFromFile(PicFileName); Result.Handle := Icon.Handle; finally Icon.Free; end; end; '.jpg', '.jpeg': begin Jpeg1 := TJPEGImage....
case FieldType of 'Integer': Fields.Add(FieldName, ftInteger, FieldSize); 'String': Fields.Add(FieldName, ftString, FieldSize); 'Blob': Fields.Add(FieldName, ftBlob, FieldSize); end; end; ...
case MSComm1.CommEvent of comEvReceive: begin while MSComm1.InBufferCount > 0 do // 输入 FIFO 不为空 begin str := MSComm1.Input; // 从 FIFO 中只取 1 个字符,因为 MSComm1.InputLen := 1 if str = ...
case Message.Msg of WM_SETCURSOR: begin if Message.WParam = HTCLIENT then begin // 设置自定义光标 Message.Result := 1; // 表示已处理该消息 end else inherited; // 其他情况交给父类处理 end; ...
case Action of cnAdded: ShowMessageFmt('Add: %d', [Item]); cnRemoved: ShowMessageFmt('Remove: %d', [Item]); cnExtracted: ShowMessageFmt('Extract: %d', [Item]); end; end; procedure TForm1.Button1...
case Message.Msg of WM_HOTKEY: begin // 这里处理热键被触发的逻辑 if Message.WParam = FHotKeyId then // 比如弹出一个消息框显示热键已被触发 ShowMessage('热键Ctrl+Shift+A已被按下'); end; end; ...