| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > "сетевая Грабилка" |
| Автор: DonPager 19.6.2003, 20:17 |
| Прости мне конечно мою лень.... просто наверняка уже кто- то занимался этим вопросом.... и может подсказать Итак для грабилки файлов нужно реализовать: 1)возможность докачки файла... (самое важное и я не знаю как 2) создать табличку в которой вместо строк: кнопка, флажок,поле, поле,прогресбарчик,поле.... (я знал но забыл....) подскажите.... |
| Автор: dm9 19.6.2003, 22:34 |
| По второму вопросу: сделай компонент, в основе которого - Panel или ScrollBox. Положи на него нужные тебе вещи - прогрессбары, эдиты, чекбоксы и прочее. Затем создавай такие компоненты, запихивай, например, в динамический массив, располагй один под другим, и все будет ОК. Я похожее когда-то делал. |
| Автор: SmaLL 20.6.2003, 08:21 |
| Грабилка файлов из локальной сети или из инета? |
| Автор: altarasjuk 20.6.2003, 12:46 | ||
Я щас делаю примерно такое же, только без прогрессбара. Вообще это всё можно найти уже готовым, если кто знает где, то скажите, плиз. А я делаю так: Беру обычный стринг грид и в его ячейках рисую то, что мне надо(кнопочки и чекбоксы) ну и прогресс там реализовать думаю будет не сложно. |
| Автор: dm9 20.6.2003, 18:06 |
| Хотелось бы спросить, что значит "рисую"? Просто сам обрабатываешь OnDrawCell и рисуешь ручками кнопки и чекбоксы? Если так, то экономия памяти налицо... но и гораздо сложнее. |
| Автор: altarasjuk 20.6.2003, 18:22 | ||
|
| Автор: DonPager 21.6.2003, 11:25 | ||||
так немного не красиво получается... приходится два раза таб нажимать...да и прогресы обновлять каждый раз надо... лажечка получается.... 2 Small
из локалки.... Хех, вот вы и наказали меня за размещение 2х вопросов.... ...ответили на тот, который меня меньше интерисовал... Самое главное щас для меня реализовать докачку... |
| Автор: altarasjuk 21.6.2003, 12:19 | ||
|
| Автор: Mikel 21.6.2003, 15:13 |
| Можно конечно самому написать используя WinInet, но и можно скачать JVCL- там есть такой компонент |
| Автор: DonPager 21.6.2003, 21:20 | ||
по полной тсп/ип (ЛОКАЛКА!!!) само собой это будет работать и на фтп и на нттр и т.д.. 2Mikel а стандартными средствами никак не получится? |
| Автор: altarasjuk 21.6.2003, 22:14 |
| ну если по локалке, то очень просто начинаешь читать файл с нужного байта. А если по http, то так не получится, надо почитать доку, не все сервера это поддерживают, для http если я не ошибаюсь при запросе в стриме надо передавать байт с которого начинать читать, но опять же скажу надо почитать доку. И кстати если не секрет, то зачем докачка по локалу? |
| Автор: DonPager 21.6.2003, 22:41 | ||
допустим хочешь ты фильму перекачать , качаешь.... а у етого гада вдруг на последнем проценте пробки выбивает или ещё что.... а по поводу открываешь , читаешь.... почуть поподробней.... я делаю так: открываю файл , читаю его размер , запоминаю...начинаю читать по биту создаю файл, пишу в него по биту и считаю..... и запоминаю.... .... ну и т.д... проблема с автоматическим пуском докачки ......вешает сеть... |
| Автор: DonPager 21.6.2003, 22:50 |
| пускаю ачала пинги.... |
| Автор: Mikel 22.6.2003, 08:33 |
| Я отдал статью на сайт по WinInet. Как опубликуют, так дам ссылку. Там есть пример закачки файла. |
| Автор: altarasjuk 23.6.2003, 10:18 | ||
|
| Автор: DonPager 24.6.2003, 18:42 | ||
.... только вот одна проблемка с этим а так ооооооочень медленно... |
| Автор: altarasjuk 24.6.2003, 18:54 | ||
| >больше 4б за раз не получается передавть.... ПОЧЕМУ ИМХО, нужно это дело буфферизировать. Смотри пример:
|
| Автор: DonPager 24.6.2003, 19:38 |
| Я тоже через буфер делаю... только что-то не могу его больше 4х байт сделать... [CODE]var Src, Dest : TFileStream; TMP: TMemoryStream; P :Int64; cnt : Int64; begin STOP := false; Src := TFileStream.Create(DataFileNew[CntDownload-1].InFile,fmOpenRead); Dest := TFileStream.Create(DataFileNew[CntDownload-1].OutFile,fmOpenWrite); ProgressBar1.Max := DataFileNew[CntDownload-1].FileSize; Tmp := TMemoryStream.Create; cnt := DataFileNew[CntDownload-1].Loaded; P := Src.Seek(cnt,soFromBeginning); Src.Position := P; Dest.Position := P; try while (cnt <= DataFileNew[CntDownload-1].FileSize)and(not STOP) do begin Dest.Write(TMP,Src.Read(TMP,4)); //ProgressBar1.Position := cnt; Memo1.Lines.Add(IntToStr(cnt)); Inc(cnt,4); if cnt > DataFileNew[CntDownload-1].FileSize then cnt := DataFileNew[CntDownload-1].FileSize; Application.ProcessMessages; end; finally DataFileNew[CntDownload-1].Loaded := cnt; Tmp.Free; Src.Free; Dest.Free; end; end;[CODE] |
| Автор: altarasjuk 24.6.2003, 20:13 |
| Нафига ты такие сложности написал ? Возьми тот исходник, щють-щють подкорректируй, тебе там собственно только на if Self.Terminated then begin надо чёто менять и юзай на здоровье и не парся. Там ты чё-то такого навоял, что глаз режет. И кстати, я б тебе советовал почитать про рефакторинг. Тогда и код будет легче писать. |
| Автор: DonPager 25.6.2003, 21:54 | ||||
сам по себе то кодик маленький...
просто он из проекта выдернут .... и никаких сложностей... |