![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TClientSocket & TProgressBar [D7, XP]
atas-sheriff © (2006-12-20 18:10:00)Здраствуйте!
Я отправляю файл клиентом на сервер:
fs:=TFileStream.Create(FileEdit.Text,fmOpenread);
fs.Position:=0;
ClientSocket1.Socket.SendText('Size:'+IntToStr(fs.Size)+#0+'Name:'+ExtractFileName(OpenDialog.FileName)+#0);
ClientSocket1.Socket.SendStream(fs);
Как сюда "приделать" ProgressBar? Надо ж знать сколько осталось ждать
atas-sheriff (2006-12-21 13:43:00) [21]Ок. Я тебе слепо верил))). А и ёщо какая разница ctNonBlocking и ctBlocking
Сергей М. (2006-12-21 13:40:00) [22]
> нашо ты писал procedure?
Все претензии - к Кофи Аннену)
Код был дан тебе в кач-ве иллюстрации концепции решения !
А не для слепого передирания и последующего хныка, мол, "не пашет" ...
И голова, понимаешь ли, дана программеру отнюдь не для жевания)
Anatoly Podgoretsky (2006-12-21 13:38:00) [23]> atas-sheriff (21.12.2006 13:36:36) [36]
Ответь, почему ты написал procedure :-)
Сергей М. (2006-12-21 13:37:00) [24]
> Всьо работает
Как только изменишь ClientType с ctNonBlocking на ctBlocking, это "кароче все" работать перестанет, имей ввиду)
Любая карета, полученная нахаляву, рано или поздно станет тыквой)
atas-sheriff (2006-12-21 13:36:00) [25]ДА ПОНЯЛ Я))) И нашо ты писал procedure???
Anatoly Podgoretsky (2006-12-21 13:35:00) [26]> atas-sheriff (21.12.2006 13:25:32) [32]
Мало ли что он тебе написал, ты в учебник погляди, что такое функция, а что такое процедура.
Сергей М. (2006-12-21 13:34:00) [27]
> Но Сергей мне написал в [21]
TProgressFileStream = class(TFilestream)
protected
functionRead(var Buffer; Count: Longint): Longint; override;
end;
Неужели так сложно дотумкать самому ?)
atas-sheriff (2006-12-21 13:34:00) [28]Кароче)) Я всьо понял. Всьо работает. И очень БОЛЬШОЕ БОЛЬШОЕ СПАСИБО Сергею и Анатолию :)
atas-sheriff (2006-12-21 13:25:00) [29]Но Сергей мне написал в [21]
Anatoly Podgoretsky (2006-12-21 13:23:00) [30]> atas-sheriff (21.12.2006 13:22:30) [30]
Еще раз надо написать?
atas-sheriff (2006-12-21 13:22:00) [31]а про ошибку??
TProgressFileStream = class(TFilestream)
protected
procedure Read(var Buffer; Count: Longint): Longint; override;// Вот здесь ошибка: "Procedure cannot have a result type"
end;
Сергей М. (2006-12-21 13:18:00) [32]
> // А вот это куда)
Никуда. Оно на своем месте.
> // И это
И это тоже.
> fs:=TFileStream.Create(FileEdit.Text,fmOpenread);
Найди хотя бы одно отличие от моегокода
fs:=TProgressFileStream.Create(FileEdit.Text,fmOpenread);
Понимаю, нахождение и осознание различий - задача тяжелая, но за тебя ее никто не решит)
Anatoly Podgoretsky (2006-12-21 13:14:00) [33]> atas-sheriff (21.12.2006 13:08:27) [27]
Разобраться, что такое процедура и что такое функция.
atas-sheriff (2006-12-21 13:08:00) [34]OK.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, ComCtrls, Buttons, XPman;
type
TForm1 = class(TForm)
FileEdit: TEdit;
Button1: TButton;
Button2: TButton;
ClientSocket1: TClientSocket;
OpenDialog: TOpenDialog;
Edit2: TEdit;
Button3: TButton;
Sizelabel: TLabel;
ProgressBar1: TProgressBar;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
// А вот это куда)
type
TProgressFileStream = class(TFilestream)
protected
procedure Read(var Buffer; Count: Longint): Longint; override;// Вот здесь ошибка: "Procedure cannot have a result type"
end;
var
Form1: TForm1;
fs :TFileStream;
implementation
{$R *.dfm}
// И это
procedure TProgressFileStream.Read;
begin
Result := inherited Read(Buffer, Count);
Form1.ProgressBar1.StepBy(Result);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ClientSocket1.Active=true then
begin
if not FileExists(FileEdit.Text) then
Exit;
fs:=TFileStream.Create(FileEdit.Text,fmOpenread);
fs.Position:=0;
ClientSocket1.Socket.SendText('Size:'+IntToStr(fs.Size)+#0+'Name:'+ExtractFileName(OpenDialog.FileName)+#0);
ClientSocket1.Socket.SendStream(fs);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog.Execute then
begin
FileEdit.Text:=OpenDialog.FileName;
FS:=TFileStream.Create(OPenDialog.FileName,fmOpenRead);
ProgressBar1.Min := 0; //Вот
ProgressBar1.Max := fs.Size;//это
ProgressBar1.Position := 0; //сюда. Здесь вопросов НЕТ)
SizeLabel.Caption:=IntToStr(Round(FS.Size/1024))+' ÊÁ';
FS.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Button3.Tag:=Button3.Tag + 1;
if not odd(Button3.Tag) then
begin
ClientSocket1.Active:=false;
Exit;
end;
ClientSocket1.Host:=Edit2.Text;
ClientSocket1.Active:=true;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Button3.Caption := 'Disconnect';
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Button3.Caption := 'Connect';
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s:string;
begin
s:=Socket.ReceiveText;
if s='recived' then
MessageBox(0,'File recived!','Information',mb_iconinformation+mb_ok);
end;
end.
Да я знаю что я Ламер))
Сергей М. (2006-12-21 12:59:00) [35]
> чтота делаю но невиходит
> Ну вопшем код
Я не вижу в этом коде никаких попыток выполнить мои рекомендации.
Показывай, как ты "что-то делал" и что конкретно при этом "невиходит"...
Будем разбирать пошагово твои действия ...
atas-sheriff (2006-12-21 12:54:00) [36]Ну я вопше чтота делаю но невиходит. Немогу понять почему. Ну вопшем код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, ComCtrls, Buttons, XPman;
type
TForm1 = class(TForm)
FileEdit: TEdit;
Button1: TButton;
Button2: TButton;
ClientSocket1: TClientSocket;
OpenDialog: TOpenDialog;
Edit2: TEdit;
Button3: TButton;
Sizelabel: TLabel;
ProgressBar1: TProgressBar;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
fs :TFileStream;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
if ClientSocket1.Active=true then
begin
if not FileExists(FileEdit.Text) then
Exit;
fs:=TFileStream.Create(FileEdit.Text,fmOpenread);
fs.Position:=0;
ClientSocket1.Socket.SendText('Size:'+IntToStr(fs.Size)+#0+'Name:'+ExtractFileName(OpenDialog.FileName)+#0);
ClientSocket1.Socket.SendStream(fs);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog.Execute then
begin
FileEdit.Text:=OpenDialog.FileName;
FS:=TFileStream.Create(OPenDialog.FileName,fmOpenRead);
SizeLabel.Caption:=IntToStr(Round(FS.Size/1024))+' КБ';
FS.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Button3.Tag:=Button3.Tag + 1;
if not odd(Button3.Tag) then
begin
ClientSocket1.Active:=false;
Exit;
end;
ClientSocket1.Host:=Edit2.Text;
ClientSocket1.Active:=true;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Button3.Caption := 'Disconnect';
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Button3.Caption := 'Connect';
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s:string;
begin
s:=Socket.ReceiveText;
if s='recived' then
MessageBox(0,'File recived!','Information',mb_iconinformation+mb_ok);
end;
end.
Напиши пожалуйста куда это прилипить)) НУ PLIZZZZZ)
Сергей М. (2006-12-21 12:50:00) [37]
> а ти уверен что это работает?
При условии, что ClientType = ctNonBlocking - куда оно денется)
atas-sheriff (2006-12-21 12:47:00) [38]Сергей а ти уверен что это работает???
atas-sheriff (2006-12-21 11:56:00) [39]ООООООООооо)). Спасибо!!!
Сергей М. (2006-12-21 11:48:00) [40]type
TProgressFileStream = class(TFilestream)
protected
procedure Read(var Buffer; Count: Longint): Longint; override;
end;
...
procedure TProgressFileStream.Read;
begin
Result := inherited Read(Buffer, Count);
MyProgressBar.StepBy(Result);
end;
...
fs:=TProgressFileStream.Create(FileEdit.Text,fmOpenread);
try
..
MyProgressBar.Min := 0;
MyProgressBar.Max := fs.Size;
MyProgressBar.Position := 0;
ClientSocket1.Socket.SendStream(fs);
except
fs.Free;
reise;
end;