|
Вопрос # 6 175/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
подскажите пожалуйста. я сделал такую программу. через opendialog добавляет название выбранного файла в listbox. По выбору нужного файла в listbox он его должен открывать. но тут возникает такая проблема. открывает только файлы которые были добавлены по последнему пути. там где путь в opendialog был изменен открывать отказывается. вот в чем и вопрос, как сделать так чтобы он сам находил путь к выбранному файлу, а не использовал последний путь
 |
Вопрос задал: skew (статус: Посетитель)
Вопрос отправлен: 31 мая 2012, 11:50
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 2 июня 2012, 11:08; участников в обсуждении: 6.
|
min@y™ (статус: Доктор наук), 31 мая 2012, 13:37 [#1]:
Цитата (skew):
а не использовал последний путь
Последний путь - это грустно 
Что тебе мешает добавлять в ListBox имена файлов с полным путём?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
skew (статус: Посетитель), 31 мая 2012, 13:54 [#2]:
это можно, но это не так красиво смотрится. причем если форма компактная, а путь длинный еще и scroll добавится.
|
|
skew (статус: Посетитель), 31 мая 2012, 13:56 [#3]:
поэтому я и хотел сделать так. можно впринципе попробовать создать второй listbox уже с полным путем и повторять действия за первым
|
|
Вадим К (статус: Академик), 31 мая 2012, 14:09 [#4]:
Ну так не нужно использовать ListBox как средство хранения информации. Но если уже дело на то пошло, то кто мешает в свойстве object сохранять полный путь, а в сам лист добавлять красиво урезанный?
два листбокса - это полностью порочный путь.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 31 мая 2012, 14:19 [#5]:
Цитата (skew):
поэтому я и хотел сделать так. можно впринципе попробовать создать второй listbox уже с полным путем и повторять действия за первым
Короче, делай так:
1) Для хранения полных имён файлов создай List: TStringList и всё, что открываешь с помощью OpenDialog, складывай в него.
2) Для отображения коротких имён файлов используй ListBox в виртуальном режиме, т.е. со свойством Style = lbVirtual и событием отрисовки строк OnData:
procedure TMainForm.ListBoxData(Control: TWinControl; Index: Integer; var Data: String);
begin
Data:= ExtractFileName(List[Index]);
end;
Да, и не забудь обновлять свойство ListBox.Count при добавлении/удалении имён файлов в List.
ListBox.Count:= List.Count;
Есть ещё несколько способов решить эту задачу. Например:
а) привязывать полный путь файла к строке ListBox с помощью ListBox.Items.Objects;
б) вместо ListBox использовать TListView в режиме vsReport с одной колонкой, в которой хранить короткие имена файлов, а в невидимых SubItem'ах - полные пути.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
skew (статус: Посетитель), 31 мая 2012, 14:21 [#6]:
ого сколько разной инфы. спасибо большое
|
31 мая 2012, 14:21: Статус вопроса изменён на решённый (изменил автор вопроса — skew)
|
min@y™ (статус: Доктор наук), 31 мая 2012, 14:22 [#7]:
в) Завести TStringList, добавлять туда пути, исключая дублирование (т.е. уникальные), а в свойстве ListBox.Items.Objects хранить номера путей в этом списке. А чо, прикольно. Как связанные таблицы БД.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 31 мая 2012, 17:35 [#8]:
вай, min@y™, ты гений! у меня аж прямо руки зачесались, захотелось вариант в) реализовать
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
bugmenot (статус: 3-ий класс), 31 мая 2012, 17:54 [#9]:
Ой-вэй, а я аналогичное делал с помощью OwnerDraw, виртуальный листбокс кошернее будет
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
min@y™ (статус: Доктор наук), 31 мая 2012, 20:16 [#10]:
Цитата (Егор):
вай, min@y™, ты гений!
Да ладно, я скромный программист-пивоголик. Но ничто человеческое мне не чуждо.
Цитата (Егор):
у меня аж прямо руки зачесались, захотелось вариант в) реализовать
Этот вариант намного сложнее "а" и "б". Но вполне реализуем. И сильно экономит память, если куча файлов валяется в одном каталоге (Хотя... это щас не актуально).
Цитата (bugmenot):
делал с помощью OwnerDraw, виртуальный листбокс кошернее будет
А ещё кошернее - ListBox.Style = lbVirtualOwnerDraw!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Толяныч (статус: 4-ый класс), 2 июня 2012, 11:08 [#11]:
min@y™: Цитата:
Да ладно, я скромный программист-пивоголик.
Скромных программистов не бывает У меня, когда был практикующим программером, самооценка менялась от "я-гений!" до "Ну и мудак же я !"
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|