Witam, mam problem z moim programem. A mianowicie program łączy się z FTP (IdFtp) i wszystko gra tak samo przy pobieraniu pliku z internetu (URLDownloadToFile) jaki i wysyła go na FTP (IdFTP.Put) lecz czy przy pobieraniu lub wysyłaniu program się zawiesza a gdy wykona swoją funkcję wyśle/pobierze działa poprawnie. Poczytałem o komponencie IdThreadComponent który daje efekt wątkowości. Więc też ładnie to dodałem do kodu i przy pobieraniu już się nie wiesza lecz jak bym nie dodał wysyłania na FTP program albo się nadal wiesza lub automatycznie po pobraniu wysyła na serwer lub w obu przypadkach nic się nie dzieje. Siedzę na tym od rana i nic. Oto kod programu (jest chaotyczny ale narazie ważne by działał).
Dodam że nie do końca znam się na Delphi. Dopiero się uczę i nie wszystko może być dobrze jak i poprawnie napisane.
Ps. a mam jeszcze takie pytanie jak pod button1 podpiąć progressbar2 żeby wraz ze wzrostem rozmiaru stan progressbara postępował. I jak podpiąć progressbar1 do button2 żeby działał tak jak wyżej. Mile widziane odnośniki do poradników itp.
Ps2. I takie ostatnie pytanko. Jak zauważyliście pewnie zostaje pobierane oprogramowanie wordpress w zip'ie. I teraz pytanie jak to wysłać na serwer rozpakowane aby to już działało albo jak to na serwerze rozpakować zdalnie przez program.
Pozdrawiam.
Kod:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Menus, StdCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdFTP, URLMon, XPMan, INIFiles, IdThreadComponent,
IdAntiFreezeBase, IdAntiFreeze;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
MainMenu1: TMainMenu;
Ustawienia1: TMenuItem;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
IdFTP1: TIdFTP;
XPManifest1: TXPManifest;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button5: TButton;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
ProgressBar1: TProgressBar;
Button6: TButton;
GroupBox3: TGroupBox;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label5: TLabel;
Label11: TLabel;
Button7: TButton;
Edit8: TEdit;
ProgressBar2: TProgressBar;
Label12: TLabel;
Label13: TLabel;
IdThreadComponent1: TIdThreadComponent;
Label14: TLabel;
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure IdFTP1Connected(Sender: TObject);
procedure IdFTP1Disconnected(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure IdThreadComponent1Run(Sender: TIdCustomThreadComponent);
procedure Button2Click(Sender: TObject);
procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
IdFTP1.Host:=Edit1.Text;
IdFTP1.Username:=Edit2.Text;
IdFTP1.Password:=Edit3.Text;
if not IdFTP1.Connected then
IdFTP1.Connect();
if Button2.Enabled=false then Button2.Enabled:=true else Button2.Enabled:=true;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if IdFTP1.Connected then
IdFTP1.Disconnect;
if Button2.Enabled=true then Button2.Enabled:=false else Button2.Enabled:=false;
end;
procedure TForm1.IdFTP1Connected(Sender: TObject);
begin
MessageBox(Handle, 'Połączono z serwerem!', 'Simple Setup WordPress', MB_OK or MB_ICONINFORMATION);
end;
procedure TForm1.IdFTP1Disconnected(Sender: TObject);
begin
MessageBox(Handle, 'Odłączono od serwera!', 'Simple Setup WordPress', MB_OK or MB_ICONINFORMATION);
end;
procedure TForm1.Button5Click(Sender: TObject);
var
INI : TINIFile;
begin
INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'ssw.ini'); // stworz plik INI na dysku C
try
INI.WriteString('Host', 'Ip', Edit1.Text);
INI.WriteString('User', 'Nazwa', Edit2.Text);
INI.WriteString('Password', 'Hasło', Edit3.Text);
INI.WriteString('Port', 'Port', Edit8.Text);
finally
INI.Free;
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
var
INI : TINIFile;
begin
INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'ssw.ini');
try
Edit1.Text := INI.ReadString('Host', 'Ip','plik INI nie istnieje');
Edit2.Text := INI.ReadString('User', 'Nazwa','plik INI nie istnieje');
Edit3.Text := INI.ReadString('Password', 'Hasło','plik INI nie istnieje');
Edit8.Text := INI.ReadString('Port', 'Port','plik INI nie istnieje');
finally
INI.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
IdThreadComponent1.Start;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
IdThreadComponent1.Start;
end;
procedure TForm1.IdThreadComponent1Run(Sender: TIdCustomThreadComponent);
begin
if
URLDownloadToFile(Nil,'http://pl.wordpress.org/wordpress-3.1.1-pl_PL.zip','c:wordpress-3.1.1-pl_PL.zip',0,Nil)<=3 then
MessageBox(Handle, 'Pobrano oprogramowanie WordPress. Opragramowanie gotowe do instalacji!', 'Simple Setup WordPress', MB_OK or MB_ICONINFORMATION);
if
URLDownloadToFile(Nil,'http://pl.wordpress.org/wordpress-3.1.1-pl_PL.zip','c:wordpress-3.1.1-pl_PL.zip',0,Nil)<>0 then
MessageBox(Handle, 'Błąd przy pobieraniu!', 'Simple Setup WordPress', MB_OK or MB_ICONEXCLAMATION);
IdThreadComponent1.Stop;
begin
IdFTP1.Put('C:\Users\Michał\Pictures\wordpres\wordpress-3.1.1-pl_PL.zip', 'wordpress-3.1.1-pl_PL.zip');
IdThreadComponent1.Stop;
end;
end;
procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
begin
Label14.Caption:= AStatusText;
end;
end.
Dodam że nie do końca znam się na Delphi. Dopiero się uczę i nie wszystko może być dobrze jak i poprawnie napisane.
Ps. a mam jeszcze takie pytanie jak pod button1 podpiąć progressbar2 żeby wraz ze wzrostem rozmiaru stan progressbara postępował. I jak podpiąć progressbar1 do button2 żeby działał tak jak wyżej. Mile widziane odnośniki do poradników itp.
Ps2. I takie ostatnie pytanko. Jak zauważyliście pewnie zostaje pobierane oprogramowanie wordpress w zip'ie. I teraz pytanie jak to wysłać na serwer rozpakowane aby to już działało albo jak to na serwerze rozpakować zdalnie przez program.
Pozdrawiam.