各位高手幫幫忙啊。我有兩個表單,在A表單中做了一個procedure,但是在B表單中呼叫,老是報錯,要么提示沒有足夠的引數,要么提示太多引數,問題到底出在哪里啊?
A表單代碼:(A可以編譯成功)
unit updateunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdFTP,inifiles,shellapi,jpeg;
type
Tupdate = class(TForm)
update: TButton;
cancel: TButton;
ProgressBar1: TProgressBar;
Label1: TLabel;
ListView1: TListView;
IdFTP1: TIdFTP;
ProgressBar2: TProgressBar;
Label2: TLabel;
private
{ Private declarations }
public
{ Public declarations }
procedure idftp1work(sender:Tobject;AWorkmode:Tworkmode;const AWorkcount:integer);
procedure idftp1workend(sender:Tobject;AWorkmode:Tworkmode);
procedure loadini;
procedure connectftp;
end;
var
update: Tupdate;
host,username,password,host_new,username_new,password_new:string;
rootpath,dirpath,dirpath_new,exepath:string;
conftpini,conftpini_new:Tinifile;
fmainexe,fmainexe_new,fparam,fparam_new:string;
version,version_new:string;
implementation
{$R *.dfm}
procedure Tupdate.idftp1work(sender:Tobject;AWorkmode:Tworkmode;const AWorkcount:integer);
begin
progressbar1.Position:=aworkcount;
application.ProcessMessages;
end;
procedure Tupdate.idftp1workend(sender:Tobject;AWorkmode:Tworkmode);
begin
progressbar1.Position:=0;
progressbar2.StepBy(1);
end;
procedure Tupdate.loadini; //在這里讀取ini的資訊
begin
conftpini:=Tinifile.Create(extractfilepath(application.ExeName)+'ftp.ini');
host:=conftpini.ReadString('ftpinfo','host','');
username:=conftpini.ReadString('ftpinfo','username','');
password:=conftpini.ReadString('ftpinfo','password','');
dirpath:=conftpini.ReadString('ftpinfo','dirpath','');
fmainexe:=conftpini.ReadString('coninfo','main','');
fparam:=conftpini.ReadString('conftpini','param','');
version:=conftpini.ReadString('version','version','')
end;
procedure Tupdate.connectftp; //連接ftp服務器
begin
idftp1.Host:=host;
idftp1.Username:=username;
idftp1.Password:=password;
idftp1.Port:=21;
idftp1.Connect();
rootpath:=idftp1.RetrieveCurrentDir;
end;
end.
B表單代碼:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdFTP;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses updateunit; //在這里參考了A表單的pas檔案
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
updateunit.update.loadini;
updateunit.update.connectftp; //在這里就報錯了。
end;
end.
-----我想在B表單中呼叫A表單中的Tupdate.connectftp方法,可是報錯,不知道哪里的問題,是哪些引數要傳過來嗎?各位大蝦幫我看看。謝謝啦。
uj5u.com熱心網友回復:
你要創建A的實體,通過實體去訪問,否則就要把函式宣告為class級別的uj5u.com熱心網友回復:
同意版主, A表單要創建實體的。uj5u.com熱心網友回復:
汗。。居然出這樣的錯。。uj5u.com熱心網友回復:
我是菜鳥,不知道如何創建A的實體,您能幫我修改一下上面的代碼嗎?謝謝啦。uj5u.com熱心網友回復:
procedure TForm1.FormCreate(Sender: TObject);begin if not Assigned( updateunit.update) then
updateunit.update:= updateunit.Tupdate.create(nil);
updateunit.update.loadini;
updateunit.update.connectftp; //在這里就報錯了。
end;
uj5u.com熱心網友回復:
也是報錯。不過謝謝你。uj5u.com熱心網友回復:
汗...;一直這樣使用,沒出現過你說的錯誤uj5u.com熱心網友回復:
另建一個TUpdate變數,uj5u.com熱心網友回復:
procedure TForm1.FormCreate(Sender: TObject);var Fupdate : Tupdate;
begin
Fupdate := Tupdate.Create(Self);
Fupdate.loadini;
Fupdate.connectftp;
...
//Fupdate.Free;
end;
uj5u.com熱心網友回復:
我試了,如果是button這樣沒有問題,只是我現在呼叫的是idftp連接服務器的程序,一運行就會報錯,就是連接程序當中的這一句“rootpath:=idftp1.RetrieveCurrentDir;”報錯。不知道哪里的問題。uj5u.com熱心網友回復:
那看來不是類和物件的問題羅。。uj5u.com熱心網友回復:
那看來不是類和物件的問題羅。。uj5u.com熱心網友回復:
如果不用單元參考呢?讓他自己在一個工程里跑行不行?如果還不行就說明那個表單本身就有問題
uj5u.com熱心網友回復:
謝謝你。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154450.html
標籤:VCL組件開發及應用
上一篇:C語言大數加法的一個疑問求解
下一篇:高分求 DELPHI 控制視頻卡
