| 
| 
 | Вопрос # 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™: Цитата: Да ладно, я скромный программист-пивоголик.  Скромных  программистов  не  бывает
  У меня, когда был практикующим программером,  самооценка  менялась от "я-гений!"  до  "Ну и мудак же  я !"   |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |