CodeTyphon version 1.70 released

CodeTyphon是一个lazarus的集成mod版本,集成了许多的第三方控件,1.70版本已经发布,可以发现,lnet和indy等库已经移植到wince了,不用担心wince下网络库的缺乏了。

changed log:

======> 22-May-2011 ver 1.70 =================================================

   -ADD pl_Graphics32VPR ,Vectorial Polygon Rasterizer for Graphics32 (Win32, Win64, WinCE)
   -ADD pl_BGRAcontrols  ,Visual Components for pl_BGRAbitmap library (Win32, Win64, Linux32, Linux64, WinCE) 
   -ADD pl_pl_ZenGLD3D   ,ZenGL library for DirectX  (Win32, Win64)

   -Rename/Update pl_mooncomp to pl_GeoGIScomp (Win32, Win64, WinCE, Linux32, Linux64) 

   -Update/Fix pl_freefpider 
   -Update pl_Synapse      (SVN 20-5-2011)
   -Update pl_BGRAbitmap   (SVN 20-5-2011)
   -Update pl_ZenGL        (SVN 20-5-2011) 
   -Update pl_GLScene      (SVN 22-5-2011)
   -Update pl_LNetComp     (SVN 20-5-2011)
   -Update pl_KambiEngine  (SVN 20-5-2011)
   -Update pl_LNetComp     (SVN 20-5-2011) 
   -Update pl_FortesReport (SVN 20-5-2011)
   -Update pl_OpenWire     (SVN 20-5-2011)

   -Port pl_Graphics32 to WinCE
   -Port pl_Synapse to WinCE
   -Port pl_lNet to WinCE
   -Port pl_Indy to WinCE
   -Port pl_VisualPlanIt to WinCE
   -Port pl_APE to WinCE
   -Port pl_DCP to WinCE
   -Port pl_FreeSpider to WinCE
   -Port pl_PowerPDF to WinCE
   -Port pl_OpenWire to WinCE

   -Port pl_GLScene to Linux32 and Linux64 (Manual installation to Lazarus IDE for Linux)
   -Port pl_KambiEngine to Linux32 and Linux64 (Manual installation to Lazarus IDE for Linux)    
   

NOTE:  Lazarus 0.9.31   Source from SVN 22-05-2011 Rev 30845
       FreePascal 2.5.1 Source from SVN 19-05-2011 Rev 17500

继续阅读

用TlistView 显示TIdFtp 目录列表

在使用idftp组件的时候,目录列表的显示,是个比较大的问题,在indy9的demo中,使用的是headercontrol+listbox,然后处理listbox的drawitem事件,看起来,也不简单。

由于indy10的demo少得可怜,特说明如下:其中,indy10,listview使用的是raize component 5的控件,跟标准控件可能有部分差异。

方法:

首先,在连接上服务器后,调用idftp的list函数,获取文件列表

其中,list的函数,

procedure List( ADest: TIdStrings, const ASpecifier: string = ”, ADetails: Boolean = True ); overload;

可以根据简单的表达式过滤,如下,就只显示出zip文件,AFiles存储了文件列表

AFiles := TIdStringList.Create;
AFtp.List(AFiles, ‘*.zip’, True);
if AFtp.DirectoryListing.Count <> 0 then
begin
   FillDirListView(AFtp.DirectoryListing)
end;

其实,idftp的ListResult属性也保存了相应的列表,完全可以忽略list函数中的该参数

继续阅读

利用Indy的TIdFtp控件实现FTP协议[转]

现在很多应用都需要上传与下载大型文件,通过HTTP方式上传大文件有一定的局限性。幸好FTP作为一个非常老而且非常成熟的协议可以高效稳定地完 成大文件的上传下载,并且可以完美地实现续传。就拿我写的电影服务器管理端程序来说,各种方案比较后,发现使用FTP可以完美地实现要求。但是要通过 WinSocket库实现FTP比较麻烦,幸好有Indy–一个包装了大多数网络协议的组件包。

通过Indy,程序设计人员可以通过阻塞方式进行编程,可以抛开蹩脚的Winsocket异步模式,采用与Unix系统上等同的阻塞编程模式进行。这样,程序员就可以很好的处理程序的运行流程。 下面,我们进入到Indy的TIdFtp世界。

1.控件的说明

使用Indy 9中的TIdFtp控件可以实现通过FTP方式进行文件的上传与下载。

2.控件的具体使用

(1)控件属性设置

默认属性即可,与服务器连接直接相关的属性如主机名与用户等在建立连接时进行设定。需要设定的是RecvBufferSize和SendBufferSize两属性的值。另外需要根据要传输的文件类型指定TransferType属性,而其他属性按默认值设定即可。

RecvBufferSize说明(默认值为8192字节):该属性为整型变量,用于指定连接所用的接受缓冲区大小。

SendBufferSize说明(默认值为32768字节):该属性也为整型变量,用于指定连接所用的发送缓冲区的最大值。该属性在 WriteStream方法中时,可用于TStream指定要发送内容的块数。如果要发送的内容大于本属性值,则发送内容被分为多个块发送。

TransferType说明(默认值为ftBinary):该属性为TIdFTPTransferType型变量。用于指定传输内容是二进制 文件(ftBinary )还是ASCII文件(ftASCII)。应用程序需要使用二进制方式传输可执行文件、压缩文件和多媒体文件等;而使用ASCII方式传输文本或超文本等 文本型数据。

继续阅读

indy中,IdTcpServer 出现thread terminate timeout 错误的解决办法

引用:

http://delphi.newswhat.com/geoxml/forumhistorythread?groupname=borland.public.delphi.internet.winsock&messageid=3f25c582$1@newsgroups.borland.com

使用indy9.0

在client没有disconnect的时候,设置tcpserver.active:=false 出现”Terminate Thread Timeout.”错误。

另外,虽然主窗体已经消失了,但是,还有程序还是在后台运行,没有退出。

——————————————–

解决办法:

1.IdTCPServer的事件处理中不要有GUI的操作

2.如果AThread.data赋值的是不规范的结构,即不是TObject类型的,需要在disConnect时,
设置Athread.data:=nil;可以在TcpServer的onDisConnect事件中处理。
如果没有设置为nil,在Active:=false时,就会出现timeout了。
> If you do not have an actual TObject assigned to
> the AThead.Data property, and the property is not nil, then you will get a
> crash during shutdown.

3.在TCPServer.Active:=false时,用try..except包围起来,不然还是会出现timeout的exception,不过已经可以退出程序了。

  try
IdTCPServer1.Active := False;
except on e: Exception do
begin
WritetoLog(0, e.Message); end; end;

4.有时候,还是无法正常退出后台程序,那么遍历client的连接,disconnect掉
大部分都是推荐的connection.disconnect,好像是connection.disconnectSocket比较有效。

/////////////
var
List: TList;
I: Integer;
begin
List := IdTCPServer1.Threads.LockList;
try
StatusBar1.Panels[1].Text := ‘Disconnecting…’;
Application.ProcessMessages;
for I := 0 to List.Count – 1 do
begin
try
TIdPeerThread(List.Items[I]).Connection.DisconnectSocect;
except
on E: Exception do
begin
TIdPeerThread(List.Items[I]).Stop;
end;
end;
end;
finally
IdTCPServer1.Threads.UnlockList;
end;

////////////

 

Del.icio.us :
Flickr :
Technorati :