Delphi - 新语法介绍之For In


======================================================
注:本文源代码点此下载
======================================================

技术交流,dh讲解.

哈哈,java和c#里面的for in用起来真爽,我们delphin也不用眼红了,从d2005起,delphi里面也有这个功能了.首先我们要知道哪些类型可以用for in吧,下面就是:

for element in arrayexpr do stmt;数组

for element in stringexpr do stmt;字符串

for element in setexpr do stmt;集合

for element in collectionexpr do stmt;集合

for element in record do stmt;结构体

我们来看例子:

type

thuangjacky = (hja,hjb,hjc,hjd);

tjackyhuang = record

a,b,c:integer;

end;

const

stringexpr='huangjacky';

arrayexpr:array[0..5] of integer= (1,2,3,4,5,6);

setexpr:set of thuangjacky = [hja,hjb,hjd];

procedure tform1.formcreate(sender: tobject);

var

i:integer;

c:char;

d:thuangjacky;

f:tcomponent;

begin

for c in stringexpr do

showmessage(c);

for i in arrayexpr do

showmessage(inttostr(i));

for d in setexpr do

showmessage(inttostr(ord(d)));

for f in self do

showmessage(f.name);

end;

是不是很爽呀?哈哈,delphi也与时俱进呀.

之前写了类助手文章中,老赵问是不是扩展方法,因为对c#没有了解到这么多,所以不知道.

那么我们在java中要for in必须实现iterator吧.

那么delphi的会不会也要呢?

是的,如果我们要自己的类支持for in的话,就必须满足下面的条件:

1 必须有个公共方法getenumerator(),这个方法返回值是一个类,接口或者记录体.

2 上面返回的类,接口或者记录体中又必须有公共方法movenext(),这个方法的返回值是boolean.

3 1中返回的类,接口或者记录体中必须有一个只读的属性current,类型要和集合中的元素一样.

说了这么多,看个例子:

type

tmyintarray = array of integer;

tmyenumerator = class

values: tmyintarray;

index:integer;

public

constructor create;

function getcurrent: integer;

function movenext:boolean;

property current:integer read getcurrent;

end;

tmycontainer= class

public

function getenumerator: tmyenumerator;

end;

constructor tmyenumerator.create;

begin

inherited create;

values := tmyintarray.create(100, 200, 300);

index := -1;

end;

function tmyenumerator.movenext: boolean;

begin

if index

居然发现tmyintarray可以用create方法来创建数组,这个下去去研究下,或者万一兄已经研究过了.

好了,今天就到这里,我是dh.

绿色通道:好文要顶关注我收藏该文与我联系


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi11 是最Delphi 版本,而 `delphi-opencv-master` 是一个开源的 Delphi 与 OpenCV 集成的项目,它提供了一组 Delphi 封装的 OpenCV 函数和类,方便 Delphi 开发者使用 OpenCV 进行图像处理和计算机视觉操作。 在 Delphi11 中,你可以通过以下步骤来使用 `delphi-opencv-master`: 1. 首先,你需要下载 `delphi-opencv-master` 项目的源代码,可以从 GitHub 上下载:https://github.com/Laex/Delphi-OpenCV 2. 解压缩下载的源代码,并将其中的 `OpenCV` 文件夹复制到 Delphi11 项目的根目录下。 3. 在 Delphi11 中打开你的项目,然后在菜单栏中选择 `Project` -> `Options` -> `Delphi Compiler` -> `Search Path`,将 OpenCV 文件夹所在的路径添加到搜索路径中。 4. 在 Delphi11 中使用 `uses` 语句引入 `OpenCV_Image` 单元,并调用其中的函数和类来进行图像处理和计算机视觉操作。 例如,以下代码演示了如何使用 `delphi-opencv-master` 进行图像读取和灰度化: ``` uses OpenCV_Image; var img: IplImage; begin // 读取图像 img := LoadImage('lena.jpg'); // 将图像转换为灰度图像 cvCvtColor(img, img, CV_RGB2GRAY); // 显示图像 ShowImage('My Image', img); // 等待用户按下任意键 WaitKey; // 释放图像内存 img.Release; end; ``` 这段代码使用了 `OpenCV_Image` 单元中提供的 `LoadImage` 函数和 `ShowImage` 函数来读取和显示图像,使用了 OpenCV 库中的 `cvCvtColor` 函数将图像转换为灰度图像。你可以根据自己的需要,使用 `delphi-opencv-master` 中提供的其他函数和类来进行更加复杂的图像处理和计算机视觉操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值