Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Virtual Treeview заполнение и оформление 
V
    Опции темы
firs70
Дата 17.5.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Доброго времени суток.
Решил сделать программку которая бы заходила в инет на сайт FileFactory и скачаивала от туда страничку со списком "залитых туда моими файликами"  smile  Скачать скачал, даже с парсингом вроде бы разобрался (правда говорят что кривой у меня парсер, но пашет).
Код старинички следующий:
Код

---===вырезана не информативная часть===----
<div id="folder_14451" class="folder hidden" title="2007-02-February">
---===вырезана не информативная часть===----
<div id="files_14451" class="folder-contents" style="display:none;"><div class="file-list">
    <div id="file_894f54" title="http://www.filefactory.com/file/894f54" class="file" onmouseover="register_draggable(this);">
    <a href="http://www.filefactory.com/file/894f54" onmousedown="link_down();" onclick="return link_up();">SA34HA06.avi</a>
    ---===вырезана не информативная часть===----
    <div class="file-downloads" title="117">117</div>
    <div class="file-size" title="6054166">5.77 MB</div>
    ---===вырезана не информативная часть===----
    <div id="file_01a95b" title="http://www.filefactory.com/file/01a95b" class="file" onmouseover="register_draggable(this);">
    <a href="http://www.filefactory.com/file/01a95b" onmousedown="link_down();" onclick="return link_up();">SA34HA06.part10.rar</a>
    ---===вырезана не информативная часть===----
    <div class="file-downloads" title="192">192</div>
    <div class="file-size" title="28056454">26.76 MB</div>
                
---===вырезана не информативная часть===----
<div id="folder_26908" class="folder hidden" title="2007-03-March">
---===вырезана не информативная часть===----
<div id="files_26908" class="folder-contents" style="display:none;"><div class="file-list">
    <div id="file_eccc4e" title="http://www.filefactory.com/file/eccc4e" class="file" onmouseover="register_draggable(this);">
    <a href="http://www.filefactory.com/file/eccc4e" onmousedown="link_down();" onclick="return link_up();">P78207.part08.rar</a>
    ---===вырезана не информативная часть===----
    <div class="file-downloads" title="17">17</div>
    <div class="file-size" title="83886080">80.00 MB</div>
    ---===вырезана не информативная часть===----
    <div id="file_d00a3d" title="http://www.filefactory.com/file/d00a3d" class="file" onmouseover="register_draggable(this);">
    <a href="http://www.filefactory.com/file/d00a3d" onmousedown="link_down();" onclick="return link_up();">P78207.part10.rar</a>
    ---===вырезана не информативная часть===----
    <div class="file-downloads" title="17">17</div>
    <div class="file-size" title="59684524">56.92 MB</div>
                    
---===вырезана не информативная часть===----
<div id="folder_0" class="folder hidden" title="Default">
---===вырезана не информативная часть===----
<div id="files_0" class="folder-contents" style="display:none;"><div class="file-list">
    <div id="file_b42b59" title="http://www.filefactory.com/file/b42b59" class="file" onmouseover="register_draggable(this);">
    <a href="http://www.filefactory.com/file/b42b59" onmousedown="link_down();" onclick="return link_up();">lub.kak.lub_52.part4.rar</a>
    ---===вырезана не информативная часть===----
    <div class="file-downloads" title="0">0</div>
    <div class="file-size" title="100431872">95.78 MB</div>
    ---===вырезана не информативная часть===----
    <div id="file_5c7264" title="http://www.filefactory.com/file/5c7264" class="file" onmouseover="register_draggable(this);">
    <a href="http://www.filefactory.com/file/5c7264" onmousedown="link_down();" onclick="return link_up();">lub.kak.lub_52.part3.rar</a>
    ---===вырезана не информативная часть===----
    <div class="file-downloads" title="0">0</div>
    <div class="file-size" title="100431872">95.78 MB</div>
---===вырезана не информативная часть===----            

Специально привёл пример по 2 строки в каждой из "папок" что бы не было громоздко...

Сделал я только заполнение строк имя файла, ссылка на файл, размер и количество скачек...
user posted image

Но, как видно из кода, там существуют "папки" в которых "лежат" файлы.
Хотелось бы сделать что бы тотбражалась папка (с плюсиком/минусом), а под ней располагались файлы этой папки как дочерние элементы...

Например:
-2007-02-February
|--SA34HA06.avi (и дальше ссылка, размер и кол-во скачек)
|--SA34HA06.part10.rar (и дальше ссылка, размер и кол-во скачек)
-2007-03-March
|--P78207.part08.rar (и дальше ссылка, размер и кол-во скачек)
|--P78207.part10.rar (и дальше ссылка, размер и кол-во скачек)
-Default
|--lub.kak.lub_52.part4.rar (и дальше ссылка, размер и кол-во скачек)
|--lub.kak.lub_52.part3.rar (и дальше ссылка, размер и кол-во скачек)

Хотелось бы что бы эта вот вся красота сама формировалась при загрузке, я читал статью в ней написаны примеры в которых описано как добавляются дочерние элементы в выделеном элементе (то есть на том на котором я сейчас стою). Здесь немного другая ситуация.

Я конечно был бы очень благодарен если бы мне здесь привели полноценный пример, но и любая помощь будет не лишней.

Заранее всем спасибо!!!
PM MAIL   Вверх
Sansa
Дата 17.5.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
firs70
Дата 17.5.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Sansa, спасибо конечно  smile 
Я же говорю что статью читал...
Цитата

я читал статью в ней написаны примеры в которых описано как добавляются дочерние элементы в выделеном элементе (то есть на том на котором я сейчас стою). Здесь немного другая ситуация.

PM MAIL   Вверх
aktuba
Дата 17.5.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



firs70,  smile Я же тебе говорил - читай внимательнее!!!

Добавить элемент в нужный узел - VT.AddChild(Node);


--------------------
user posted image
PM MAIL WWW Skype   Вверх
firs70
Дата 17.5.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



aktuba, ну пример напиши хоть малюсенький  smile , не понимаю как можно это организовать всё  smile , ПЛИИИЗЗЗЗ
PM MAIL   Вверх
firs70
Дата 17.5.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



так вроде с добавлением папок и файлов в папки разобрался, вот теперь бы сделать так что бы файлы добавлялись какждый в свою папку (у меня парсер ищет отдельно имя файла, ссылку, размер, и скачки и при формировании я не могу разделить куда какие кидать ).
Скорее всего надо парсер организовать как то по другому. подскажите хотя бы идею  smile 
PM MAIL   Вверх
Sansa
Дата 18.5.2007, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



Все зависит от того, какова структура исходного документа. Если гарантируется, что записи для всех файлов (расположенных в определенной папке) идут после записи для этой папки, и нигде больше в документе не встречаются, то при вставке в дерево узла папки его необходимо запоминать, и все узлы файлов, встреченных до следующей папки, добавлять как детей сохраненного узла папки.

Если записи файлов не группированы по папкам, то при добавлении очередного файла необходимо пробегать по всему дереву и искать ветку нужной папки

--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
firs70
Дата 18.5.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Sansa, да именно так. Идёт название папки потом содержащиеся в ней файлы, потом название другой папки и следом файлы 2-й папки...
Вот код моего парсера, НО что то не работает посмотрите может поможите кто чем может.
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  lNode1, lNode2: PVirtualNode;
  lData: PDataNode;
  str, txt, ID, Name, Downl, Size: string;
  len, Idx: Integer;
begin
 VirtualStringTree1.Clear;
//------------
str:=Memo2.Text; // в memo2 хранится код странички которую мы и парсим
Idx := Pos('<div id="folder_', str);
if Idx > 0 then
  while Idx < Length(str) do
   begin
    //------------------------------------------------------
    //==Папка==
    len := Length('<div id="folder_');
    if Copy(str, Idx, len) = '<div id="folder_' then
      begin
       txt := '';
       Inc(Idx, len);
        while (str[Idx] + str[Idx+1]+str[Idx+2] <>'e="') do
         begin Inc(Idx)end; Inc(Idx,3);
        while (str[Idx] <> '"') do
         begin
          txt :=txt + str[Idx];
          Inc(Idx);
         end;
        lNode1 := Form1.VirtualStringTree1.AddChild(nil);
        lData := Form1.VirtualStringTree1.GetNodeData(lNode1);
         with lData^ do
           begin
            MName := txt;
           end;
      end;
     //=========
     //==ID файла===
     len := Length('id="file_');
     if Copy(str, Idx, len) = 'id="file_' then
      begin
       txt := '';
       Inc(Idx, len);
       while (str[Idx] <> '"') do
        begin
         txt :=txt + str[Idx];
         Inc(Idx);
        end;
       ID := 'http://www.filefactory.com/file/' + txt;
      end else ID:='';
     //=============
     //==Имя файла===
     len := Length('return link_up();">');
     if Copy(str, Idx, len) = 'return link_up();">' then
      begin
       txt := '';
       Inc(Idx, len);
       while (str[Idx] + str[Idx+1] <>'</') do
        begin
         txt := txt + str[Idx];
         Inc(Idx);
        end;
       Name := txt;
      end else Name:='';
     //==============
     //==Скачки==
     len := Length('downloads" title="');
     if Copy(str, Idx, len) = 'downloads" title="' then
      begin
       txt := '';
       Inc(Idx, len);
       while (str[Idx]+str[Idx+1] <>'">') do
        begin
         txt := txt + str[Idx];
         Inc(Idx);
        end;
       Downl := txt;
      end else Downl:='';
     //==========
     //===Размер==
     len := Length('file-size" title="');
     if Copy(str, Idx, len) = 'file-size" title="' then
      begin
       txt := '';
       Inc(Idx, len);
       while (str[Idx] + str[Idx+1] <>'">') do
        begin Inc(Idx) end; Inc(Idx,2);
       while (str[Idx] + str[Idx+1] <>'</') do
        begin
         txt := txt + str[Idx];
         Inc(Idx);
        end;
       Size := txt;
      end else Size:='';
     //===========
    //------------------------------------------------------
    Inc(Idx);
    if (ID<>'')and(Name<>'')and(Downl<>'')and(Size<>'')then
     begin
      lNode2 := Form1.VirtualStringTree1.AddChild(lNode1);
      lData := Form1.VirtualStringTree1.GetNodeData(lNode2);
      with lData^ do
       begin
        MName := Name;
        MID := ID;
        MD := Downl;
        Msz := Size;
       end;
      end;
    end;
//------------
end;


Это сообщение отредактировал(а) firs70 - 18.5.2007, 11:08
PM MAIL   Вверх
Sansa
Дата 18.5.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



Можешь приатачить исходный текст html полностью? А то у тебя много тэгов порезано (незакрытые)
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
firs70
Дата 18.5.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



конечно могу  как файлик ибо код большой сам по себе...
http://images.dala.by.ru/list for parser.txt

Это сообщение отредактировал(а) firs70 - 18.5.2007, 12:26
PM MAIL   Вверх
Sansa
Дата 18.5.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



Subj

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  test.zip 3,10 Kb
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
firs70
Дата 21.5.2007, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Sansa, по моему парсеру если задавать одно из 4-х искомых (имя, ссылку, размер или скачки) работает как и в этом примере, впринципе разницы в работе нет!!! мне надо что бы добавлялись все 4 атрибута в строку.
PM MAIL   Вверх
firs70
Дата 21.5.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Всё победил!!!  smile  вот код парсера (может кому нибудь пригодится)
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  lNode1, lNode2: PVirtualNode;
  lData: PDataNode;
  str, txt, ID, Name, Downl, Size: string;
  len, Idx, Idx1: Integer;
  label perebor;
begin
 VirtualStringTree1.Clear;
//------------
str:=Memo2.Text;
if str <> '' then
Idx := Pos('<div id="folder_', str);
//------------------------------------------------------
while Idx < Length(str) do
 begin
  //==Папка==
  len := Length('<div id="folder_');
  txt := '';
  Inc(Idx, len);
  Idx1:=PosEx('<div id="folder_', str, Idx);
  If Idx1 = 0 then Idx1:=Length(str);
  while (str[Idx] + str[Idx+1]+str[Idx+2] <>'e="') do
   begin Inc(Idx)end; Inc(Idx,3);
  while (str[Idx] <> '"') do
   begin
    txt :=txt + str[Idx];
    Inc(Idx);
   end;
  lNode1 := Form1.VirtualStringTree1.AddChild(nil);
  lData := Form1.VirtualStringTree1.GetNodeData(lNode1);
   with lData^ do
    begin
     MName := txt;
    end;
  //=======
perebor:
   while Idx < Idx1 do
    begin
     //==ID файла===
     Idx:= PosEx('id="file_', str, Idx);
     if Idx > Idx1 then begin Idx:=Idx1; GoTo perebor; end;
     if Idx = 0 then begin Idx:=Length(str); GoTo perebor; end;
     len := Length('id="file_');
     txt := '';
     Inc(Idx, len);
     while (str[Idx] <> '"') do
      begin
       txt :=txt + str[Idx];
       Inc(Idx);
      end;
     ID := 'http://www.filefactory.com/file/' + txt;
     //=============
     //==Имя файла===
     Idx:= PosEx('return link_up();">', str, Idx);
     len := Length('return link_up();">');
     txt := '';
     Inc(Idx, len);
     while (str[Idx] + str[Idx+1] <>'</') do
      begin
       txt := txt + str[Idx];
       Inc(Idx);
      end;
     Name := txt;
     //==============
     //==Скачки==
     Idx:= PosEx('downloads" title="', str, Idx);
     len := Length('downloads" title="');
     txt := '';
     Inc(Idx, len);
     while (str[Idx]+str[Idx+1] <>'">') do
      begin
       txt := txt + str[Idx];
       Inc(Idx);
      end;
     Downl := txt;
     //==========
     //===Размер==
     Idx:= PosEx('file-size" title="', str, Idx);
     len := Length('file-size" title="');
     txt := '';
     Inc(Idx, len);
     while (str[Idx] + str[Idx+1] <>'">') do
      begin Inc(Idx) end; Inc(Idx,2);
     while (str[Idx] + str[Idx+1] <>'</') do
      begin
       txt := txt + str[Idx];
       Inc(Idx);
      end;
     Size := txt;
     //===========
//------------------------------------------------------
    //-----Добавление файлов----------
    if (ID<>'')and(Name<>'')and(Downl<>'')and(Size<>'')then
     begin
      lNode2 := Form1.VirtualStringTree1.AddChild(lNode1);
      lData := Form1.VirtualStringTree1.GetNodeData(lNode2);
      with lData^ do
       begin
        MName := Name;
        MID := ID;
        MD := Downl;
        Msz := Size;
       end;
     end;
//-----------------------------------
  end;
 end;
//------------
end;


Теперь возникли вопросики такого плана:
1. как сделать что бы последняя папка была раскрыта (-) и видно были содержащиеся в ней файлы.
2. хотелось бы ещё сделать копирование ссылок по пр. кнопке мыши ВЫДЕЛЕННЫЕ файлы (меню пр. кнопки и выделение нужных файлов реализовать смогу), необходим только код который бы копировал в буфер обмена переменные 2-го столбца ВЫДЕЛЕННЫХ строк.

Ну а добавление картинки (папки) надеюсь сам догоню, в статье что то подобное было...
Всем заранее спасибо!!!  smile 
PM MAIL   Вверх
Sansa
Дата 21.5.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



В моем примере поправь:
Код

procedure TForm1.DoFinishParse();
begin
  vtMain.Expanded[vtMain.RootNode.LastChild]:= True;
end;

--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
firs70
Дата 21.5.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



а как привязать к моему?
я немного не понял как реализовано "раскрытие" последней папки?
поподробнее можно пояснить? плизззз  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.