S
SeaSky
Unregistered / Unconfirmed
GUEST, unregistred user!
当然用TList, Tlist有单链表结构全部功能, 尤其对数据的插入、删除
交换、排序、压缩(Pack)等操作有很高的效率. 同时还有高效的排序方案(你
只需要传送一个比较函数指针变量给Sort过程就行了.
可变数组的效率不如它, (不过, 编译器对可变数组有可能是通过链表实现的,
否则程序实现时很难找到一块任意大小的, 连续的内存空间来存放数组.)
粗略的看了你的程序, 下面的操作应该会发生问题.
fr := @(hhhftp1.FileList)
(因为你正在访问一个私有变量FileList〕
同时对一个Property 进行地址操作是不安全的, 它得到的不是你想要的东西.
得到的可能是某个函数的地址 , @操作符只可以对变量进行操作.
你的程序中 TFileReco 完全可以用TList来实现, 而且效率高高...
(大量的程序控件都是用的TList实现的, 这已经成为这类问题的标准解决方案)
你参照一下Tlist中的Add的例子. 改造一下HHHFTP控件. 不明白的地方说出来。
大家帮你解决, 这个控件问题用Tlist解决是很Easy的事。
不过要小心, HHHFTP变成SEASKYFTP就不妙了。 ) .
再提醒你一点,看看关于数组属性在VCL类中的标准方法吧。
交换、排序、压缩(Pack)等操作有很高的效率. 同时还有高效的排序方案(你
只需要传送一个比较函数指针变量给Sort过程就行了.
可变数组的效率不如它, (不过, 编译器对可变数组有可能是通过链表实现的,
否则程序实现时很难找到一块任意大小的, 连续的内存空间来存放数组.)
粗略的看了你的程序, 下面的操作应该会发生问题.
fr := @(hhhftp1.FileList)
(因为你正在访问一个私有变量FileList〕
同时对一个Property 进行地址操作是不安全的, 它得到的不是你想要的东西.
得到的可能是某个函数的地址 , @操作符只可以对变量进行操作.
你的程序中 TFileReco 完全可以用TList来实现, 而且效率高高...
(大量的程序控件都是用的TList实现的, 这已经成为这类问题的标准解决方案)
你参照一下Tlist中的Add的例子. 改造一下HHHFTP控件. 不明白的地方说出来。
大家帮你解决, 这个控件问题用Tlist解决是很Easy的事。
不过要小心, HHHFTP变成SEASKYFTP就不妙了。 ) .
再提醒你一点,看看关于数组属性在VCL类中的标准方法吧。