以TFtpServer组件为例
如果我要建立一个名为FtpServer1的TFtpServer组件,
并为该组件创建一个FtpServer1Authenticate的过程,
用显式调用的方法很容易实现:在窗体中添加一个TFtpServer组件就行了.但是现在我想隐式建立一个这样的组件及其相关过程,
从而达到不在窗体中添加组件的目的,请问该如何声明组件及过程?调用?还有,隐式建立组件能使编译后的程序更小吗?
如果我要建立一个名为FtpServer1的TFtpServer组件,
并为该组件创建一个FtpServer1Authenticate的过程,
用显式调用的方法很容易实现:在窗体中添加一个TFtpServer组件就行了.但是现在我想隐式建立一个这样的组件及其相关过程,
从而达到不在窗体中添加组件的目的,请问该如何声明组件及过程?调用?还有,隐式建立组件能使编译后的程序更小吗?
首先uses该组件单元
创建FtpServer1 := TFtpServer.Create;
给组件添加过程先写个FtpServer1Authenticate,
然后把该过程赋给组件的相应属性,如FtpServer1.OnAuthenticate := FtpServer1Authenticate;其实两种创建的方式没多大区别,就是动态创建要多写些代码,一般动态创建用在没有窗体或要创建多个相同组件的地方
比如 创建FtpServer1 := TFtpServer.Create; 是在implementation里面创建?
之前需要在 public 里先声明吗?
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
好像不能这样赋值,类型不匹配
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FtpSrv,FtpSrvC;//FtpSrv和FtpSrvC要用到的单元type
TForm1 = class(TForm)
Button1: TButton;
procedure FtpServer1Authenticate(Sender: TObject;
Client: TFtpCtrlSocket; UserName, Password: TFtpString;
var Authenticated: Boolean);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FtpServer1Authenticate(Sender: TObject;
Client: TFtpCtrlSocket; UserName, Password: TFtpString;
var Authenticated: Boolean);
begin
//你的事件代码
end;procedure TForm1.Button1Click(Sender: TObject);
var FtpServer1:TFtpServer;
begin
FtpServer1:=TFtpServer.Create(self); //创建
FtpServer1.OnAuthenticate:=Form1.FtpServer1Authenticate;//连接事件
FtpServer1.Addr:='192.168.1.1';//其它设置
//FtpServer1.Free; // 最后释放
end;end.
今晚测试.
再次握手,呵呵
这样我的程序还是减肥不了,有办法不用use单元,只启用想要用到的事件吗?
比如我只需要用到TFtpServer的OnAuthenticate事件?