Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2009, 13:53   #21
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

сделайте так
Код:
function tform1.SendFile(host, script, filename:string):string;
и в какую-нибудь секцию
или так
Код:
tform1.ProgressBar.position
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.10.2009, 13:55   #22
Mobile™
Заблокирован
 
Регистрация: 26.06.2009
Сообщений: 60
По умолчанию

сделал так-
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
ws : TWSAData;
s : string;
begin
inc(num_packet);
progressbar1.position:= num_packet* 4096;
WSAStartup($101, ws);
s := SendFile(Edit1.Text, '/get.php', opendialog1.FileName);
ShowMessage(s);
end;
скомпилировалась но при передаче файла прогрессбар сразу доходит до 100 и процесс продолжается без его участия
Mobile™ вне форума Ответить с цитированием
Старый 19.10.2009, 13:57   #23
Mobile™
Заблокирован
 
Регистрация: 26.06.2009
Сообщений: 60
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
сделайте так
Код:
function tform1.SendFile(host, script, filename:string):string;
и в какую-нибудь секцию
или так
Код:
tform1.ProgressBar.position
тоже самое
Mobile™ вне форума Ответить с цитированием
Старый 19.10.2009, 14:08   #24
Mobile™
Заблокирован
 
Регистрация: 26.06.2009
Сообщений: 60
По умолчанию

вот весь имеющийся код-
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    ListBox1: TListBox;
    Button3: TButton;
    ProgressBar1: TProgressBar;
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private

  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   var num_packet: integer;
implementation

{$R *.dfm}

function SendFile(host, script, filename:string):string;
var
  sock : dword;
  ca : sockaddr_in;
  HTTPHeader : string;
  boundary : string;
  fs:dword;
  hFile : DWORD;
  buf : array [0..4095] of char;
  p : PHostEnt;
  rb : cardinal;
  len : integer;
  SubHeader1 : string;
  SubHeader2 : string;
begin
  result := '';
  // открываем файл на чтение
  hFile := CreateFile(PChar(filename), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  if hFile <> INVALID_HANDLE_VALUE then // если всё норм
  begin
    fs := GetFileSize(hFile, nil); // получим размер файла
    // создаем сокет
    sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    // если создался сокет
    if sock <> INVALID_SOCKET then // если норм
    begin
      ca.sin_family := AF_INET;
      ca.sin_port := htons(80); // порт 

      p := GetHostByName(PChar(host)); // получим ip по домену
      if p = nil then // если нету
      begin
        // значит это IP
        ca.sin_addr.s_addr := inet_addr(pchar(host));
      end
      else
      begin
        // выдерим ip
        ca.sin_addr := PInAddr(p.h_addr_list^)^;
      end;

      // коннектимся
      if connect(sock, ca, sizeof(ca)) <> -1 then
      begin
        // если всё норм
        // генерим разделитель
        boundary := inttohex(random(65535), 4)+inttohex(random(65535), 4)+inttohex(random(65535), 4);
          // создаем части HTTP заголовка
        SubHeader1 :=  '--'+boundary+#13#10+
                      'Content-Disposition: form-data; name="myfile"; filename="'+filename+'"'#13#10+
                      'Content-Type: application/octet-stream'#13#10#13#10;
        SubHeader2 := #13#10+'--'+boundary+'--'#13#10;
        HTTPHeader := 'POST '+script+' HTTP/1.1'#13#10+
                      'Host: '+host+#13#10+
                      'Connection: close'#13#10+
                      'Content-Type: multipart/form-data; boundary='+boundary+#13#10+
                      'Content-Length: '+inttostr(fs + length(SubHeader1) + length(SubHeader2))+#13#10#13#10+SubHeader1;

         // посылаем заголовок
        send(sock, HTTPHeader[1], length(HTTPHeader), 0);
        while true do
        begin
          rb := 0;
          // читаем 4 кила из файла
          ReadFile(hFile, buf, 4096, rb, nil);
          if rb = 0 then break; // если не считалось то выход из цикла
          send(sock, buf, rb, 0); // пошлем считанные данные

        end;
          // пошел последний разделитель
        send(sock, SubHeader2[1], length(SubHeader2), 0);
        while true do // к цикле ждем ответа от сервера
        begin
          len := recv(sock, buf, 4096, 0); // считали данные
          if len > 0 then // если есть чтото
          begin
            result := result + copy(buf, 0, len);
          end
          else
          begin // если нет больше данных то выходим из цикла
            break;
          end;
        end;
      end;
      closesocket(sock); // закрываем сокет
end;
CloseHandle(hFile); // закрываем файл
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ws : TWSAData;
s : string;
begin
WSAStartup($101, ws);
s := SendFile(Edit1.Text, '/get.php', opendialog1.FileName);
ShowMessage(s);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
FStream : TFileStream;
begin
with OpenDialog1 do
if Execute then
begin
Listbox1.Items.Add(opendialog1.FileName);
FStream:=TFileStream.Create(OPenDialog1.FileName,fmOpenRead);
Edit2.Text:=IntToStr(Round(FStream.Size/1024))+' килобайт.';
FStream.free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Listbox1.Clear;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SendMessage(ListBox1.Handle,LB_SETHORIZONTALEXTENT,width,0);
end;
end.
куда вставлять это-
Код:
inc(num_packet);
progressbar1.position:= num_packet* 4096 div fs;
чтобы работало
Mobile™ вне форума Ответить с цитированием
Старый 19.10.2009, 14:09   #25
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
Счастье

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
ws : TWSAData;
s : string;
begin
inc(num_packet);
progressbar1.position:= num_packet* 4096;
WSAStartup($101, ws);
s := SendFile(Edit1.Text, '/get.php', opendialog1.FileName);
ShowMessage(s);
end;
- вы мои сообщения не читаете?
Цитата:
Цитата:код вставил сюда
- явно не сюда... речь шла о цикле
- у вас есть функция SendFile, в ней у вас идет отправка пакетов... туды ее в качель
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.10.2009, 14:12   #26
Mobile™
Заблокирован
 
Регистрация: 26.06.2009
Сообщений: 60
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
ws : TWSAData;
s : string;
begin
inc(num_packet);
progressbar1.position:= num_packet* 4096;
WSAStartup($101, ws);
s := SendFile(Edit1.Text, '/get.php', opendialog1.FileName);
ShowMessage(s);
end;
- вы мои сообщения не читаете?


- у вас есть функция SendFile, в ней у вас идет отправка пакетов... туды ее в качель
дык вкорячиваю в сендфайл ошибка выскакивает как будто прогрессбар на форме отсутствует. а если в процедуру буттон1 то нет ошибки
Mobile™ вне форума Ответить с цитированием
Старый 19.10.2009, 14:17   #27
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вкорячиваете вы правильно (напоминаю у вас внутри там цикл отправки есть)...

Цитата:
ошибка выскакивает как будто прогрессбар на форме отсутствует. а если в процедуру буттон1 то нет ошибки
только опять не читаем
Код:
function tform1.SendFile(host, script, filename:string):string;
и в какую-нибудь секцию
...или так
form1.ProgressBar.position
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.10.2009, 14:22   #28
Mobile™
Заблокирован
 
Регистрация: 26.06.2009
Сообщений: 60
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
вкорячиваете вы правильно (напоминаю у вас внутри там цикл отправки есть)...


только опять не читаем
Код:
function tform1.SendFile(host, script, filename:string):string;
и в какую-нибудь секцию
...или так
form1.ProgressBar.position
я вот плохо понял что требуется сделать. толи заменить-
Код:
function SendFile(host, script, filename:string):string;
на
Код:
function tform1.SendFile(host, script, filename:string):string;
толи заменить
Код:
progressbar1.position:= num_packet* 4096 div fs;
на
Код:
form1.ProgressBar.position:= num_packet* 4096 div fs;
но на всякий случай попробывал так и так но ошибки при компиляции
Mobile™ вне форума Ответить с цитированием
Старый 19.10.2009, 14:56   #29
Mobile™
Заблокирован
 
Регистрация: 26.06.2009
Сообщений: 60
По умолчанию

помогите..
Mobile™ вне форума Ответить с цитированием
Старый 19.10.2009, 15:44   #30
Mobile™
Заблокирован
 
Регистрация: 26.06.2009
Сообщений: 60
По умолчанию

подскажите как делать
Mobile™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прогрессбар... Лёка Общие вопросы Delphi 12 18.03.2010 14:41
База данных приделать поиск demon9999 Помощь студентам 0 03.06.2008 00:26
Обратный отсчет в прогрессбар Stanislav Общие вопросы Delphi 3 09.01.2008 16:49