- 浏览: 102222 次
文章分类
- 全部博客 (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引擎和框架
非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效率的考量;
如果非要在 case 中使用字符串, 也不是不可以变通, 这里提供了五种方法.
代码文件:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses TypInfo; {操作枚举用}
{初始化一个单选组, 用于测试}
procedure TForm1.FormCreate(Sender: TObject);
begin
RadioGroup1.Items.CommaText := 'a,bb,ccc,dddd';
RadioGroup1.ItemIndex := 0;
end;
{这是 case 语句比较常规的用法}
procedure TForm1.Button1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0: Color := clRed;
1: Color := clYellow;
2: Color := clLime;
3: Color := clBlue;
end;
end;
{方法一: 假如要 case 的字符串的长度不同}
procedure TForm1.Button2Click(Sender: TObject);
var
str: string;
begin
str := RadioGroup1.Items[RadioGroup1.ItemIndex];
case Length(str) of
1 : Color := clRed;
2 : Color := clYellow;
3 : Color := clLime;
4 : Color := clBlue;
end;
end;
{方法二: 假如要 case 的字符串的第一个字母不同, case 是支持字符的}
procedure TForm1.Button3Click(Sender: TObject);
var
str: string;
begin
str := RadioGroup1.Items[RadioGroup1.ItemIndex];
case str[1] of
'a': Color := clRed;
'b': Color := clYellow;
'c': Color := clLime;
'd': Color := clBlue;
end;
end;
{方法三: 借用 TStringList}
procedure TForm1.Button4Click(Sender: TObject);
var
List: TStringList;
str: string;
begin
List := TStringList.Create;
List.Text := RadioGroup1.Items.Text;
str := RadioGroup1.Items[RadioGroup1.ItemIndex];
case List.IndexOf(str) of
0: Color := clRed;
1: Color := clYellow;
2: Color := clLime;
3: Color := clBlue;
end;
List.Free;
end;
{方法四: 借用枚举}
type
TMyEnum = (a, bb, ccc, dddd);
procedure TForm1.Button5Click(Sender: TObject);
var
MyEnum: TMyEnum;
str: String;
begin
str := RadioGroup1.Items[RadioGroup1.ItemIndex];
MyEnum := TMyEnum(GetEnumvalue(TypeInfo(TMyEnum), str));
case MyEnum of
a : Color := clRed;
bb : Color := clYellow;
ccc : Color := clLime;
dddd : Color := clBlue;
end;
end;
ps:稍做解释:GetEnumvalue 函数返回一个字符串对应的枚举型的值在某枚举类型
中的位置(要知道枚举类型是有顺序的,要不怎么叫顺序类型呢:-)),然后通过
一个强制类型转换将这个值转化为枚举型。于是就实现了把字符串转化为枚举型的操作
{方法五: 利用对比字符串返回的整数, 这种方法并不太可靠, 但在某种情况下会更灵活}
procedure TForm1.Button6Click(Sender: TObject);
var
str: string;
begin
str := RadioGroup1.Items[RadioGroup1.ItemIndex];
case CompareStr(str, 'a') of
0: Color := clRed;
1: Color := clYellow;
2: Color := clLime;
3: Color := clBlue;
end;
end;
end.
===========================================
在case语句中使用字符串
(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:http://hi.baidu.com/nsgtao/ ****)
在 case 语句中使用字符串 --- by 熊恒(beta)
我今天要介绍的是一个比较另类的方法。大家都知道,case 语句只能对顺序类型
(ordinal type)管用,那么我们先看一下顺序类型到底有那些呢:1)整型;2)字
符型;3)枚举型。
于是也就演化出三种在 case 语句里面使用字符串的方法(耐心看下去哦,最后一
种方法才是今天的重点:-p):
假如我们的具体应用如下(理想的,但是错误的写法):
str := 'Chongqing';
case str of // 编译器将在这一行制止你 :-(
'Beijing': ShowMessage('First');
'Tianjing': ShowMessage('Second');
'Shanghai': ShowMessage('Third');
'Chongqing': ShowMessage('Forth');
else ShowMessage('Other');
end;
(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:http://hi.baidu.com/nsgtao/ ****)
法一:字符串转为整型
这应该是比较通行的方法了,主要是利用 TStringList。先把备选的字符串挨个
Add 进去,然后调用其 IndexOf 方法。该方法返回一个整数,表示待找字符串出
现在列表中的位置:
//var strList: TStringList;
strList := TStringList.Create;
strList.Add('Beijing');
strList.Add('Tianjing');
strList.Add('Shanghai');
strList.Add('Chongqing');
str := 'Chongqing';
case strList.IndexOf(str) of
0: ShowMessage('First');
1: ShowMessage('Second');
2: ShowMessage('Third');
3: ShowMessage('Forth');
else ShowMessage('Other');
end;
strList.Free;
可以看到,这是比较麻烦的方法了,不过你可得记住这个方法,因为后面的讨论
将会讲到,这是最通用的方法。
另:当然,把字符串转化为整型后用于 case 不只这一种方法。另一种是通过把
备选项全部转化为等长度后合并为一个字符串,然后用 Pos 函数返回某字符串的
位置。在此不再累述,请查阅《程序员》杂志(具体哪一期不记得了:-()。
(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:http://hi.baidu.com/nsgtao/ ****)
法二:字符串转为字符型
这应该是最简单的一种方法,不过局限性比较大。如果你的备选项的第 N 个字
符(N 应为常数)都互不相同,那么你赚到了。这样,就可以通过取出这个字符,
来唯一标识你的字符串:
str := 'Chongqing';
case str[1] of // 第一个字符都不同,所以取出第一个进行比较
'B': ShowMessage('First');
'T': ShowMessage('Second');
'S': ShowMessage('Third');
'C': ShowMessage('Forth');
else ShowMessage('Other');
end;
不过如果你的备选项没有这样的特性,那么你就无缘使用这种方法了。
(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:http://hi.baidu.com/nsgtao/ ****)
法三:字符串转为枚举型
这种方法主要用到 RTTI 的特性。该方法的主要思路是,先把所有的备选项声名
为一个枚举类型的值,那么我们只要把要找的字符串也转换为枚举型,那么就可以
用 case 语句了。那么通过什么办法把一个字符串转化为枚举型呢?往下看:
// uses TypInfo; // 记得引用这个单元
// type TMyStrSel = (Beijing, Tianjing, Shanghai, Chongqing);
// 注意,上面这个定义不能放在某个函数内部哦,那样的话,它就没有运行类信息了
// var strSel: TMyStrSel;
str := 'Chongqing';
strSel := TMyStrSel(GetEnumValue(TypeInfo(TMyStrSel), str));
case strSel of
Beijing: ShowMessage('First');
Tianjing: ShowMessage('Second');
Shanghai: ShowMessage('Third');
Chongqing: ShowMessage('Forth');
else ShowMessage('Other');
end;
稍做解释:GetEnumValue 函数返回一个字符串对应的枚举型的值在某枚举类型
中的位置(要知道枚举类型是有顺序的,要不怎么叫顺序类型呢:-)),然后通过
一个强制类型转换将这个值转化为枚举型。于是就实现了把字符串转化为枚举型的
操作。
可以看到,在 case 语句这一段,我们的使用和理想中的使用方法几乎是一样的!
毕竟枚举类型可以做到见名知意嘛。的确比用前两种方法看起来直观得多。
当然,这并不是万能的方法,如果你的备选项有一个不符合 Delphi 的变量名命
名法则(如'AK-47'或中文等),则不能将其声明为一个枚举型,于是就不能使用这
个方法。如果是这样你就只能使用前两种方法了。极端的情况下,至少你还有第一
种方法可以使用 :-) 但在不少的场合,这种方法还是适用的。
Case 语句中使用字符串
作者:
function CaseString (const s: string;
const x: array of string): Integer;
var i: Integer;
begin
Result:= -1; // Default return parameter
for i:= Low (x) to High (x) do begin
if s = x[i] then begin Result:= i; Exit; end;
end;
end;
search:= 'delphi3000';
case CaseString (search, ['delphi3000',
'delphipages',
'Torry's']) of
0: s:= 'Excellent!';
1: s:= 'Good source';
2: s:= 'Not bad!';
end;
/////////////////////////////////
const MatchingStrings = '*First*Second*Third*';
var sString: string;
...
// sString has the data you want to test
case pos('*'+sString+'*',MatchingStrings) of
1: // This is the match for 'First'
7: // This is the match for 'Second'
14: // This is the match for 'Third'
else // In this case there were no matches
end;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
grp1: TGroupBox;
rb1: TRadioButton;
rb2: TRadioButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type TASK=(blue,green,black,white,maroon);
var
Form1: TForm1;
const
Taskzhaowang:TASK=blue;
Taskneizheng:TASK=green;
implementation
{$R *.dfm}
procedure asdf(t:task) ;
begin
case t of
blue:
ShowMessage('ZhaoWang:'+inttostr(Ord(t)));
green:
ShowMessage('NeiZhneg:'+inttostr(Ord(t)));
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
if(rb1.Checked) then asdf(Taskzhaowang);
if(rb2.Checked) then asdf(Taskneizheng);
end;
end.
发表评论
-
项目去除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 of问题
2011-11-23 18:49 3119case a of 这个的a只能是整型数字呀!您可以这样做,用 ... -
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 对 访 问 数 据 ...
相关推荐
在 Case 语句中使用字符串 在Delphi中使用正规表达式 字符串左右填充字符 扩展Pos函数 改变常量值 映射字符串到指定记录 格式化字符串为CGI请求 格式化文件大小 格式化秒为hh mm ss 检查一个字符串是否为有效Email...
在Delphi中使用SQL语句是与数据库进行交互的重要手段之一。本文将详细介绍如何在Delphi环境中构造和执行SQL查询,并给出具体的示例来帮助理解。 #### 一、基本SQL查询的构建 在Delphi中,通过`TADOQuery`组件来...
3. **类型枚举**:在Delphi中,`case`语句可以与枚举类型一起使用,方便处理特定类型的值: ```delphi type TColor = (clRed, clGreen, clBlue, clYellow); var ColorChoice: TColor; begin ColorChoice := ...
在Delphi编程中,`case`语句是一种重要的流程控制结构,它允许程序根据不同的条件执行不同的代码块。本篇文章将深入探讨`case`语句的使用实例,这对于Delphi新手来说是不可或缺的知识。 首先,我们需要理解`case`...
在 Delphi 编程环境中,实现字符串的大写转小写操作是常见的字符处理任务。这个实例源代码提供了直观的学习材料,让我们深入理解 Delphi 中如何处理字符串以及内存映射技术。下面将详细解释该实例涉及的关键知识点。...
语句章节讲解了Delphi中的各种基本语句结构,包括赋值语句、例程调用、goto语句、复合语句、if语句、case语句、repeat语句、while语句、for语句和for-in语句。这些语句构成了Delphi程序的基础,决定了程序执行的逻辑...
通过上述实现,我们能够方便地在Delphi中使用`JSon_SuperObject`组件来实现数据集与JSON之间的相互转换。这种方法不仅简化了数据传输的过程,而且提高了数据处理的灵活性和效率。对于需要频繁与Web服务交互的应用...
Delphi中的语句用于执行程序的操作,包括赋值语句、例程调用、控制流程语句(如if语句、case语句、while语句、for语句)等。 7. 例程 例程是程序中的基本执行单元,可以是过程(procedure)或函数(function)。...
本文总结了 Delphi 编程相关的知识点,涵盖了 Delphi 的基本概念、数据类型、变量、运算符、控制结构、函数、数组、字符串、文件输入/输出、异常处理、对象oriented 编程、数据库编程等方面。 1. Delphi 基本概念 ...
0050 如何在字符串中使用单引号 32 0051 结构对象的定义与使用 32 0052 使用数组为TlistView组件动态创建字段 33 0053 解决程序的死锁问题 34 0054 怎样实现接口委托 34 0055 在Delphi中使用汇编 35 ...
2.5 **P67 break, continue 例题**:讲解在循环中使用`break`和`continue`语句来控制循环流程。 2.6 **P67 作用域例题**:深入理解变量的作用域规则,包括局部变量、全局变量和方法参数。 2.7 **P84 例题**:可能...
6. **字符串操作**:Delphi的`String`类型是可变的,你可以直接修改字符串中的字符,例如`String[1] := 'A'`。此外,`String`类型还可以与其他控件属性兼容,如`Edit1.Text`。 7. **常用控件**:Delphi的VCL...
0050 如何在字符串中使用单引号 32 0051 结构对象的定义与使用 32 0052 使用数组为TlistView组件动态创建字段 33 0053 解决程序的死锁问题 34 0054 怎样实现接口委托 34 0055 在Delphi中使用汇编 35 ...
遍历输入字符串中的每个字符,如果是一个汉字(Unicode 编码在 #160 及以上),则计算其在 `HZCode` 数组中的位置,从而得到对应的拼音首字母。如果不是汉字,则直接保留原字符。 `GetPyFitstChar` 函数则是针对...
13. 条件语句和循环:文档中展示了如何使用case语句来处理不同的条件分支,以及循环结构的可能使用(尽管文档中没有具体的循环示例)。 14. 变量声明和赋值:文档中展示了如何声明变量(如x1, x2, y),以及如何...
1. 函数接收一个字符串 `hzchar`,长度至少为两个字节,因为汉字在 Unicode 中通常由两个字节表示。 2. 使用 `case` 语句,将汉字的 Unicode 值(由 `hzchar[1]` 和 `hzchar[2]` 组成)与预定义的范围进行比较。 3. ...
2. **控制结构**:掌握流程控制语句,如if-then-else、for循环和while循环,以及如何使用case语句进行多分支选择。 3. **函数与过程**:理解函数和过程的定义、调用,以及参数传递的不同方式(按值、按引用或按需)...
2.10.2 case语句 48 2.11 循环 49 2.11.1 for循环 49 2.11.2 while循环 49 2.11.3 repeat...until 50 2.11.4 Break()过程 50 2.11.5 Continue()过程 50 2.12 过程和函数 50 2.13 作用域 50 2.14 单元 55 2.14.1 uses...