Mobile™ Опубликовано: 17 октября 2009 Жалоба Share Опубликовано: 17 октября 2009 есть такие? Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Atom.DP Опубликовано: 17 октября 2009 Жалоба Share Опубликовано: 17 октября 2009 есть такие?Что конкретно вас интересует? Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Mobile™ Опубликовано: 17 октября 2009 Автор Жалоба Share Опубликовано: 17 октября 2009 Что конкретно вас интересует?если вы программист то мне нужно в одну простейшую программу для отправки файлов на гейт прикрутить прогрессбар. точнее он там уже стоит но как заставить его работать ума не приложу. сижу уже второй день. изначально программа попала ко мне в таком виде-uses winsock; 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;и вторая часть-var ws : TWSAData; s : string;begin WSAStartup($101, ws); s := SendFile('localhost', '/1.php', 'c:\test.txt'); ShowMessage(s);end;вчера целый день засовывал ее на форму а сегодня все утро приделывал что бы файл кнопкой загружался и хост в edit1 записать можно было. а вот с прогрессбаром чувствую сам не справлюсь.исходники-http://webfile.ru/4012376 Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Mobile™ Опубликовано: 17 октября 2009 Автор Жалоба Share Опубликовано: 17 октября 2009 Что конкретно вас интересует?видимо вы ничем помочь не можете? Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
sergei 70 Опубликовано: 17 октября 2009 Жалоба Share Опубликовано: 17 октября 2009 видимо вы ничем помочь не можете?это тебе надо на форум програмистов Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
absurd Опубликовано: 17 октября 2009 Жалоба Share Опубликовано: 17 октября 2009 if len > 0 then // если есть чтото begin result := result + copy(buf, 0, len); // сюда добавить endПеред end добавить это:Form1.ProgressBar1.Position:= len * 100 / fs; // прогресс в %вместо переменной len возможно надо подставить какую то другую, Делфи под рукой нет, проверить не могу. Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Mobile™ Опубликовано: 18 октября 2009 Автор Жалоба Share Опубликовано: 18 октября 2009 не нероаботает Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...