[delphi] Watki

0

Bardzo mi sie one spodobaly ale cos mi nie wychodzi ich uzywanie :-) mam taki unit:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdFTP, StdCtrls, Gauges;

type
TForm1 = class(TForm)
progress: TGauge;
Button1: TButton;
host: TEdit;
user: TEdit;
pass: TEdit;
FTP: TIdFTP;
OpenDialog1: TOpenDialog;
Button2: TButton;
procedure FTPWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure FTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TTest = class(TThread)
public
constructor Create;
protected
procedure Execute; override;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
constructor TTest.Create;
begin
FreeOnTerminate := True;
inherited Create(False);
end;

procedure TTest.Execute;
begin
*tu powinno sie wysylac na sewer ale sie
*nie chce wyslylac i nie wiem dlaczego
if form1.opendialog1.Execute then
begin
form1.FTP.Host := form1.host.text;
form1.FTP.Username := form1.user.text;
form1.FTP.Password := form1.pass.text;
form1.FTP.Connect(TRUE,10000);
form1.FTP.Put(form1.opendialog1.filename,ExtractFileName(form1.opendialog1.filename),False);
end;
end;

procedure TForm1.FTPWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
progress.Progress := aworkcount
end;

procedure TForm1.FTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
progress.MaxValue := aworkcountmax;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
*tutaj normalnie wysylany jest plik na serwer
*i dziala dobrze
if opendialog1.Execute then
begin
FTP.Host := host.text;
FTP.Username := user.text;
FTP.Password := pass.text;
FTP.Connect(TRUE,10000);
FTP.Put(opendialog1.filename,ExtractFileName(opendialog1.filename),False);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var test:ttest;
begin
test.Execute;
end;

end.

no i kompiluje sie dobrze ale jak nacisne na Button2 to wyskakuje

Debugger Exception Notification

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address D68BD88B. Read of address D68BD88B'. Process stopped. Use Step or Run to continue.

OK Help

i nie wiem co jest zle. Zrodla tego sa dostepne tu:

www.winprotect.republika.pl/test.zip

(jest tam komponent z indy wiec sie nie przestraszcie :-) )
Wiem ze nikomu nie chce sie czytac dlugic postow ale bylbym wam bardzo wdzieczny za poprawienie mnie. Juz jestem nastawiony na lawine krytyki :-)

--
pozdrawiam PEDROS {hello}

Encyklopedia was potrzebuje:
www.4programmers.net/delphi/help.php

Delphi 6 Personal.

0

Pedros napisał:
procedure TTest.Execute;
begin
*tu powinno sie wysylac na sewer ale sie
*nie chce wyslylac i nie wiem dlaczego
if form1.opendialog1.Execute then
begin
form1.FTP.Host := form1.host.text;
form1.FTP.Username := form1.user.text;
form1.FTP.Password := form1.pass.text;
form1.FTP.Connect(TRUE,10000);
form1.FTP.Put(form1.opendialog1.filename,ExtractFileName(form1.opendialog1.filename),False);
end;
end;

Moim skromnym zdaniem to ten fragment jest błędny. Nie możesz odwoływać się do Form1 bezpośrednio. Wątek jest niezależny i nie wie o istnieniu Form1. Jeżeli chcesz odwoływać się do Form1 to musisz użyć Synchronize. Więcej w pomocy i plikach przykładowych.--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

0

W helpie do Synchronize jest cos takiego:

procedure TMyThread.PushTheButton;

begin
Button1.Click();
end;

procedure TMyThread.Execute;
begin
...
Synchronize(PushTheButton);
...
end;

no ale jak zrobilem cos takiego to delphi pokazuje mi ze nie wie co to jest opendialog1 czym jesat tez ftp :( --pozdrawiam PEDROS {hello}

Encyklopedia was potrzebuje:
www.4programmers.net/delphi/help.php

Delphi 6 Personal.

0

Pedros napisał:
procedure TForm1.Button2Click(Sender: TObject);
var test:ttest;
begin
test.Execute;
end;

PP

begin
test:=TTest.Create;
test.Execute;
text.Free
end;--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

0

Vogel napisał:
begin
test:=TTest.Create;
test.Execute;
text.Free
end;

ROTFL ano rzeczywiście. To jest tak oczywiste, że się o tym zapomina :D
Tylko pytanie, czy tak od razu można Free?--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

0

Dryobates napisał:
ROTFL ano rzeczywiście. To jest tak oczywiste, że się o tym zapomina :D
Tylko pytanie, czy tak od razu można Free?

Też racja. Przecież jest FreeOnTerminate:=True :)--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

1 użytkowników online, w tym zalogowanych: 0, gości: 1