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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2009, 12:55   #1
puzik_off
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 78
По умолчанию Помогите выбрать компонент

День добрый всем.

Надо написать файловый менеджер на Delphi_7.

Один из его модулей - список файлов и папок с которым нужно будет работать

Список будет создаваться перетаскиванием файлов и папок с диспетчера задач
или рабочего стола в наш контейнер. При этом в контейнере создается строка
из 3 записей:
1) Полный путь и имя файла/папки
2) Доступность (т.е. наличие этого файла/папки)
3) Размер этого файла/папки

Список при закрытии формы сохраняется в реестре и при следующем открытии грузится
из реестра автоматически проверяя доступность всех элементов.

Для организации списка даны компоненты (на выбор):
Memo, RichEdit, ListBox, TreeView, ListView, ShellTreeView, ShellListView

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

Я начал писать. взял за основу ListBox с 3 колонками, но столкнулся с "не быстрым"
доступом к его ячейкам и усомнился в правильности выбора.

Может быть лучше не создавать колонки в ListBox, а, скажем, подшивать стригновое поле
слева к пути/имени файла и в это поле вносить 2 стринга: Доступность и размер?
Или вообще делать не на ListBox?

Сижу в раздумье, тупею постепенно ) Выручайте...

Mail: puzik_off@mail.ru
ICQ: 483129208

PS: Я студент, но тема не имеет отношения к учебе.

Последний раз редактировалось puzik_off; 30.12.2009 в 13:03. Причина: поправка
puzik_off вне форума Ответить с цитированием
Старый 30.12.2009, 14:52   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Используй две структуры. Например TStringList-TListView. Причем визуальный используй только для отображения, все работы проводи в TStringList. И отображай ровно столько сколько поместиться на экране (ну может чуть больше для прокрутки).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.12.2009, 21:43   #3
puzik_off
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 78
По умолчанию

г.Utkin
Прошу прощения за нескромность, - ваш альтруизм и приближающийся праздник, не помогут мне убедить вас набросать хотя бы блок-схему предложенного вами решения?
puzik_off вне форума Ответить с цитированием
Старый 30.12.2009, 22:31   #4
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Я бы создал TListView и TFileListBox. Сейчас объясню зачем.

Ну с TListView таким образом:
Цитата:
var index:integer; dropTarget:string;
begin
dropTarget:=strPas(pszFileName);

TFileListBox.ApplyDirectory(dropTar get); //получаем все файлы которые лежат в этой директории в список

TListView.Items.AddFirst(nil,TFileL istBox.Directory); // создаем корневое имя, это имя = названии директории, которую перетаскиваем
TListView.Items[0].ImageIndex:=0; // применяем индекс картинки (по желанию, просто визуализации больше)

// дальше цыкл по файлам в директории:
index:=0; // начальный индекс файла, с которого начинаем
for i:=1 to TFileListBox.Items.Count do
begin
TListView.Items.AddChild(TListView. Items[0],TListView.Items[TListView.ItemIndex]);
TListView.Items.Item[TListView.Items.GetFirstNode.Index+ 1].ImageIndex:=0; // опять есть хотим - делаем другой индекс с картинкой
index:=index+1;
end;
end;
Ну и всё. Осталось только это запихнуть при дропе файла/директории. А на счёт дропа используй WMDropFiles (hDrop : THandle; hWindow : HWnd);. Почитай в интернете - найдёшь как и куда что вставлять.
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 30.12.2009, 23:02   #5
puzik_off
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 78
По умолчанию

TFileListBox использовать не могу,- его нет в нужной мне библиотеке, да и предыдущий пример с невизуальным компонентом, хоть и более сложный, скорее всего реально быстрее работать будет...
puzik_off вне форума Ответить с цитированием
Старый 31.12.2009, 09:00   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от puzik_off Посмотреть сообщение
г.Utkin
Прошу прощения за нескромность, - ваш альтруизм и приближающийся праздник, не помогут мне убедить вас набросать хотя бы блок-схему предложенного вами решения?
Я не использую блок-схем.
Разбейте задачу на два этапа:
1. Решите задачу только с использованием TStringList (при этом отображение можно не реализовывать, достаточно лишь чтобы Вы убедились, что все работает как положено).
2. Поместите Ваш визуальный компонент и отлавливайте события (например прокрутку) или имитируйте прокрутку и перемещение сами.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 31.12.2009, 10:36   #7
puzik_off
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 78
По умолчанию

Ясно, буду пытаться, организовать взаимосвязь между 2 списками будет самое трудное для меня, особенно если учесть что каждая строка должна содержать 3 поля...
puzik_off вне форума Ответить с цитированием
Старый 31.12.2009, 10:44   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от puzik_off Посмотреть сообщение
Ясно, буду пытаться, организовать взаимосвязь между 2 списками будет самое трудное для меня, особенно если учесть что каждая строка должна содержать 3 поля...
Чего сложного? Используй 3 СтрингЛиста, мухи отдельно, котлеты отдельно. Нету там никаих препятствий.
Ты определяешь позицию откудова и до кудова показывать. Допустим, тебе надо видеть 20 строчек (а в папке пусть будет хоть тысяча файлов), вот и бери эти 20 из СтрингЛистов и всобачивай туда. Нажал клавишу прокрутки вверх? Чудненько, удаляешь последний элемент и вставляешь первый (в визуальном компоненте).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 31.12.2009, 10:49   #9
puzik_off
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 78
По умолчанию

а в визуальном компоненте 3 столбца делать? или отображать в одной строке три параметра.?
puzik_off вне форума Ответить с цитированием
Старый 31.12.2009, 10:50   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от puzik_off Посмотреть сообщение
а в визуальном компоненте 3 столбца делать? или отображать в одной строке три параметра.?
Это уже не принципиально, как лучше смотрится так и делай .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите выбрать железо martwy Компьютерное железо 2 20.12.2009 21:01
Помогите выбрать язык RNT Помощь студентам 3 23.05.2009 19:27
Какой компонент выбрать ? pashokq Компоненты Delphi 3 28.04.2009 22:24
Какой компонент выбрать для вывода таблицы картинок ICO Comer_Jus Мультимедиа в Delphi 3 21.05.2008 20:35