Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TClientSocket & TProgressBar [D7, XP]


Страницы:   1 2 3

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;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо