Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

Как создать в листбоксе итем содержащий путь к файлу   Найти похожие ветки 

 
Cheguevara   (2004-12-31 21:46) [0]

Здрасьте все, вот какой вопросик тут вылез, как создать в лист боксе итем, со своим именем, но ещё и содержищий путь к файлу, или другую текстовую инфу. Тоесть суть вопроса в том как добавить в лист бокс файл.


 
Palladin ©   (2004-12-31 22:17) [1]

Я так понимаю файл известен и вполне определен полным путем и именем.
Все достаточно просто. Создаем структуру описывающую нужную информацию о файле.



PFileInfo=^TFileInfo;
TFileInfo=Record
strCaption,
strPath,
strName:String;
nSize:Integer;
... and so on...
End;



Так как файлов скорее всего много, то, соответственно, определяем контейнер файлов.

Files:TList;

Перед использованием не забываем создать этот объект. Лучше всего поместить его в форму содержащую ListBox и в событии этой формы OnCreate создавать, в OnDestroy - уничтожать.

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



Var
prFileInfo:PFileInfo;
...
New(prFileInfo);
//заполняем
Files.Add(prFileInfo);



Для того что бы вывести содержимое контейнера в ListBox необходимо
Design-time
1 Выставить свойство TListBox.Style в lbVirtual
2 Реализовать событие TListBox.OnData
Run-time
1 Назначить количесто Item равным Files.Count

С первым пунктом DT надеюсь понятно. Со вторым думаю не совсем, хотя проще чем аналог из ListView. В описаном мною случае реализация события будет выглядеть как:



procedure TForm1.ListBox1Data(Control: TWinControl; Index: Integer;
 var Data: String);
begin
Data:=PFileInfo(Files[Index]).strCaption;
end;


По поводу пункта RT нужно лишь после считки информации о всех файлах добавить строчку
ListBox1.Items.Count:=Files.Count;

Перед уничтожением Files, нужно незабыть освободить память от каждого экземпляра PFileInfo



Var
prFileInfo:PFileInfo;
i:Integer;
Begin
ListBox1.Items.Count:=0;
For i:=0 to Files.Count-1 Do
 Begin
  prFileInfo:=PFileInfo(Files[i]);
  Dispose(prFileInfo);
 End;
Files.Free;
End;



P.S.: Неужели будут еще вопросы...


 
Cheguevara   (2004-12-31 22:43) [2]

Ухты, чтото я не очень понял.
Я ещё только начинаю осваивать делфи, и поэтому мне многое непонятно. Вообще моя задача такова: в листбоксе хранится список файлов которые использует прога, и при клике на итем, у меня выводится путь к этому файлу.


 
Palladin ©   (2004-12-31 22:51) [3]

Нет вопросов - нет ответов.


 
Gero ©   (2004-12-31 22:52) [4]


> Palladin ©   (31.12.04 22:17)

Короче, как всегда зря распинался.


 
Cheguevara   (2004-12-31 23:01) [5]


> Palladin ©

Сорри конечно, что такой непонятливый :), вопросы есть:
может для моей цели больше подойдёт другая компонента? Мне нужен всеголиш список файлов.


 
begin...end ©   (2004-12-31 23:08) [6]

> [2] Cheguevara   (31.12.04 22:43)

> и при клике на итем, у меня выводится путь к этому файлу

Выводится КУДА?


 
Gero ©   (2004-12-31 23:08) [7]


Cheguevara   (31.12.04 23:01)
> может для моей цели больше подойдёт другая компонента?

Может.


 
Gero ©   (2004-12-31 23:10) [8]


> в листбоксе хранится список файлов

Что такое «файл»?
Имеется в виду путь к файлу?


 
Palladin ©   (2004-12-31 23:13) [9]

Это парадокс ответчиков. На довольно емкие вопросы нормальное распинание готовится около часа. Никто на такое не пойдет. Даются наводки где искать. Возмущение: "а че эт вы тут мне насували", "так ответить на любой вопрос можно!". Довольно не емкие и простые вопросы - нормальное распинание минут 15-20, мне вот сейчас не жалко было тем более тема то, любой продвинутый начинающий реализует. Но вот однако результат. Вроде разжевано. Происходит шокирование ответчика словами "я еще только начинаю осваивать делфи". Да при чем тут делфи? В решении вопроса делфи участвует на 2%. В основном отсутствие опыта структурного программирования (и вообще понятия алгоритмистики) и не знание основ паскаля.

А однако по вопросам данного индивидуума на форуме легко просматривается, что он чет нагло протянул руки к проекту, который нормально не потянет даже через три месяца упорного изучения основ программирования. Да еще с уклоном в область графики. Эта область сама по себе довольно емкая по знаниям. Для опытного программиста займет не меннее месяца изучения базовых: терминов, понятий и инструментов. Чего уж говорить о нем...

Ну не все конечно так плохо :) есть таки и нормальные вопрошатели...
Сорри, прорвало...


 
Gero ©   (2004-12-31 23:19) [10]


> Palladin ©   (31.12.04 23:13)

Учится никто не хочет, все хотят код.
Вод написал бы ты ему код за 5 минут, объяснил бы куда его писать, и все — вопросов бы не было.
Такое ощущуние, что твой первый пост вобще не читался.

Хотя нечего грустить, Новый Год на дворе!
С праздником!


 
GrayFace ©   (2004-12-31 23:25) [11]

Cheguevara   (31.12.04 22:43) [2]
Ухты, чтото я не очень понял.

Ну вот способ гораздо проще:
 ListBox1.Items.AddObject("Строка",PChar(s));
Где s - путь к файлу. Естественно, s должно быть не локальной переменной, а должена храниться где-то в массиве.


 
Palladin ©   (2004-12-31 23:25) [12]

Спасибо :) Тебя с наступающим, а у меня еще 364 дня 22 часа и 35 минут до нг..


 
Gero ©   (2004-12-31 23:27) [13]


> Palladin ©   (31.12.04 23:25)

Ну так тебя с прошедшим :)


 
Palladin ©   (2004-12-31 23:28) [14]


> [11] GrayFace ©

Нюню, подождем пока твоя программа папку "%winnt%\System32\" откроет...


 
GrayFace ©   (2004-12-31 23:29) [15]

GrayFace ©   (31.12.04 23:25) [11]
s должно быть не локальной переменной, а должена храниться где-то в массиве

По-правде можно сделать и без массива, но для этого подсчет ссылок надо обмануть.
Это должно быть примерно так:
ListBox1.Items.AddObject("Строка",PChar(s));
PInteger(@s)^:=0;

А самый понятный способ - просто использовать массив.


 
Cheguevara   (2005-01-01 01:32) [16]

бЛин, спасиба всем, оказалось всё очень просто, нужно было всеголиш посмотреть повнимательнее на свойства компонентов :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
3-1103106176
Pavelkq
2004-12-15 13:22
2005.01.16
Выбор типа базы.


3-1103093807
Vogres
2004-12-15 09:56
2005.01.16
Преобразование даты


1-1104505164
Spinu Oleg
2004-12-31 17:59
2005.01.16
Кодировка в Delphi 7 Windows 98 unicode


1-1104407913
Руслана
2004-12-30 14:58
2005.01.16
Не удаляется файл


14-1104406243
_1008_
2004-12-30 14:30
2005.01.16
Иногда полезно читать афоризмы на этом сайте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский