Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

FTP & INDY   Найти похожие ветки 

 
stepan_mk   (2005-08-05 11:19) [0]

DELPHI7
INDY10
есть такой код
 
...
var s:TstringList;
...
BEGIN
...
if ftp.Connected
  then
   begin
   s:=TStringList.Create;
    ftp.List(s);
...



На комаде list получаю ошиПку Index out of bounds(0)
ПРОЧЕМУ? И как сделать чтоб не возникала?


 
stepan_mk   (2005-08-05 12:32) [1]

пропобал и так писать
...
BEGIN
...
if ftp.Connected
 then
  begin
   ftp.List;
...
ОшиПка та же


 
Alexander Panov ©   (2005-08-05 13:13) [2]

stepan_mk   (05.08.05 12:32) [1]

TIdFtp - событийно-зависимый компонент. Следовательно, выполнять некоторое действие(в данном случае List), надо по наступлению некоторого события.
У тебя это событие - OnConnect(либо подобное).
Подробнее см. в справке.


 
stepan_mk   (2005-08-05 14:10) [3]

У меня пере етим есть Connect, Get, и ещё куча кода.
А потом ели надо то ищется нужний файл в директории


 
Alexander Panov ©   (2005-08-05 14:31) [4]

Вот пример. Правда Инди версии 9. Но думаю, что тут отличий не должно быть.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

var
 WM_FTPEndGetFile: Cardinal;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 public
   procedure MyWndProc(var Message: TMessage);
 end;

var
 Form1: TForm1;

implementation

uses uSimpleGetFTP;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Enabled := False;
 TSimpleGetFTP.Create("ftp.almar.net.ru","!readme.txt","!readme.txt",Handle,WM_FTPEndGetFile);
end;

procedure TForm1.MyWndProc(var Message: TMessage);
begin
 if Message.Msg = WM_FTPEndGetFile then
 begin
     Button1.Enabled := True;
     case Message.WParam of
     0: ;
     1: ;
     2: ;
     100: Memo1.Lines.Assign(TStringList(Message.LParam));
     end;
     Message.Result := 0;
     Exit;
 end;
 WndProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.Title := Self.Caption;
 WM_FTPEndGetFile := RegisterWindowMessage(PChar(Application.Title+IntToStr(Application.Handle)));
 WindowProc := MyWndProc;
end;

end.


unit uSimpleGetFTP;

interface

uses
 Classes, Windows,IdBaseComponent, IdComponent, IdTCPConnection,
 IdTCPClient, IdFTP, IdFTPCommon;

type
 TSimpleGetFTP = class(TThread)
 private
   FHandle: THandle;
   FMessage: Cardinal;
   FFTP: TIdFtp;
   FUrl,FSrcFile,FDestFile: String;
 protected
   procedure Execute; override;
 public
   constructor Create(const aURL, aFile, aDestFile: String; aHandle: THandle; IdMessage: Cardinal);
   destructor Destroy; override;
 end;

implementation

constructor TSimpleGetFTP.Create(const aURL, aFile, aDestFile: String; aHandle: THandle; IdMessage: Cardinal);
begin
 inherited Create(True);
 FreeOnTerminate := True;
 FUrl := aUrl;
 FSrcFile := aFIle;
 FDestFIle := aDestFIle;
 FHandle := aHandle;
 FMessage := idMessage;
 Resume;
end;

destructor TSimpleGetFTP.Destroy;
begin
 FFtp.Free;
 inherited;
end;

procedure TSimpleGetFTP.Execute;
var
 Err: Cardinal;
 List: TStringList;
begin

List := TStringList.Create;
try
 FFtp := TIdFtp.Create(nil);
 FFtp.Host := FUrl; //+";";
 FFtp.Password := "aaa@aaa.aaa";
 FFtp.Username := "Anonymous";
 FFtp.TransferType := ftBinary;
 FFTp.Passive := True;
 Err := 0;

 try
   if Err=0 then FFTP.Connect;
 except
   Err := 1;
 end;

 try
   if Err=0 then
   begin
//      FFtp.ChangeDirUp;
//      FFtp.ChangeDir("/pub/farplugins/");
     FFtp.List(List);
     SendMessage(FHandle,FMessage,100,Integer(List));
   end;
 except
   Err := 3;
 end;

 try
   if Err=0 then FFTP.Get(FSrcFile,FDestFile,True,False);
 except
   Err := 2;
 end;

 try
   FFTP.Disconnect;
 except
 end;
 SendMessage(FHandle,FMessage,Err,0);
finally
 List.Free;
end;
end;

end.


 
stepan_mk   (2005-08-05 14:59) [5]

1. Не врубился что означает
SendMessage(FHandle,FMessage,100,Integer(List));
2. На Indy 9 у меня всё пахало.


 
Alexander Panov ©   (2005-08-06 17:32) [6]

stepan_mk   (05.08.05 14:59) [5]
1. Не врубился что означает
SendMessage(FHandle,FMessage,100,Integer(List));


Так организована передача результата из одного потока в другой(основной). Передается ссылка на TStringList.



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
2-1130622911
Takezhan
2005-10-30 01:55
2005.11.20
Отправка почты формата html


1-1130395821
VG
2005-10-27 10:50
2005.11.20
Диараммы в отчетах


2-1131235497
sergey1
2005-11-06 03:04
2005.11.20
хочу попросить совета, каким образом можно в DELPHI 7


2-1131204041
Zed
2005-11-05 18:20
2005.11.20
Процессы


1-1130343525
Боян Георгиев
2005-10-26 20:18
2005.11.20
Can only modify an image if it contains a bitmap.