Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 175

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
подскажите пожалуйста. я сделал такую программу. через opendialog добавляет название выбранного файла в listbox. По выбору нужного файла в listbox он его должен открывать. но тут возникает такая проблема. открывает только файлы которые были добавлены по последнему пути. там где путь в opendialog был изменен открывать отказывается. вот в чем и вопрос, как сделать так чтобы он сам находил путь к выбранному файлу, а не использовал последний путь

skew Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: skew (статус: Посетитель)
Вопрос отправлен: 31 мая 2012, 11:50
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 2 июня 2012, 11:08; участников в обсуждении: 6.
min@y™

min@y™ (статус: Доктор наук), 31 мая 2012, 13:37 [#1]:

Цитата (skew):

а не использовал последний путь

Последний путь - это грустно :(
Что тебе мешает добавлять в ListBox имена файлов с полным путём?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
skew

skew (статус: Посетитель), 31 мая 2012, 13:54 [#2]:

это можно, но это не так красиво смотрится. причем если форма компактная, а путь длинный еще и scroll добавится.
skew

skew (статус: Посетитель), 31 мая 2012, 13:56 [#3]:

поэтому я и хотел сделать так. можно впринципе попробовать создать второй listbox уже с полным путем и повторять действия за первым
Вадим К

Вадим К (статус: Академик), 31 мая 2012, 14:09 [#4]:

Ну так не нужно использовать ListBox как средство хранения информации. Но если уже дело на то пошло, то кто мешает в свойстве object сохранять полный путь, а в сам лист добавлять красиво урезанный?

два листбокса - это полностью порочный путь.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

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

skew (статус: Посетитель), 31 мая 2012, 14:21 [#6]:

ого сколько разной инфы. спасибо большое

31 мая 2012, 14:21: Статус вопроса изменён на решённый (изменил автор вопроса — skew)

min@y™

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

bugmenot (статус: 3-ий класс), 31 мая 2012, 17:54 [#9]:

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

min@y™

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™:

Цитата:

Да ладно, я скромный программист-пивоголик.

Скромных программистов не бывает :-) У меня, когда был практикующим программером, самооценка менялась от "я-гений!" до "Ну и мудак же я !" :-(

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.03 сек.