| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > paramcount¶nstr() |
| Автор: The ded 19.10.2004, 17:13 |
| В событии oncreate нужно сделать так, чтобы ВСЕ выделенные(ДО запуска программы) файлы добавились бы в listbox...Наверное нужно использовать paramcount¶nstr() в структуре типа той, которую я использую в opendialog'e : for i:=0 to opendialog1.files.count do listbox1.items.add(opendialog1.items.strings(i))... Заранее спасибо!!! |
| Автор: p0s0l 19.10.2004, 20:58 | ||
Через ParamStr можно прочитать параметры, которые указывают при запуске твоей программы, типа: yourprogram1.exe abc.dat img1.jpg img2.jpg Тогда в твоей проге будет так: ParamStr(1) = "abc.dat" ParamStr(2) = "img1.jpg" ParamStr(3) = "img2.jpg" Чтобы добавить всё это в ListBox, делай так: for i := 1 to ParamCount do ListBox1.Items.Add(ParamStr(i)); А про OpenDialog что-то я не понял... Capacity - "вместимость", на сколько строк зарезервировано памяти. В принципе, этот параметр лучше не трогать, не зная, как им пользоваться. Он служит лишь для оптимизации. |
| Автор: The ded 19.10.2004, 21:13 | ||||||
в проводнике...
у меня почему-то не меняется paramcount(только 1 и не больше!(сколько бы я не выделял файлов))
А там тоже самое... |
| Автор: p0s0l 19.10.2004, 22:31 | ||
Тогда ты не сможешь узнать, что там было выделено до момента запуска. Ты можешь узнать лишь то, что выделено вначале работы твоего приложения, а это может отличаться от того, что тебе надо, т.к. я могу, например, запустить файл и тут же закрыть проводник. Прога уже никак не узнает, что там было выделено... Но если тебя это устраивает, то навскидку план будет таков: 1)Узнай вначале класс окна проводника 2)Ищи окно такого же класса при запуске программы. Если окон несколько - выбирай самое верхнее (в Z-порядке) 3)Ищи в нём окно класса ListView (скорее всего это) 4)Получив хэндл ListView, узнай, какие элементы в нём выделены. ListView_GetCount - получить кол-во элементов Делаешь цикл от 0 до полученного значения-1: в цикле ListView_GetItem - получить итем У каждого полученного итема проверяй поле state, и если бит LVIS_SELECTED включен, то итем - выбран, его текст в поле pszText Ну если там другой класс (честно говоря, проводником никогда не пользовался PS: если будут трудности или вопросы - говори, расскажем подробнее, а может даже дадим готовый пример... |
| Автор: The ded 20.10.2004, 22:06 | ||
Я только знаю ф-ю findwindow => по пункту 1) сразу вопрос...
хотелось бы..... |
| Автор: p0s0l 20.10.2004, 23:29 | ||||
| Вот сделал пример - ListBox1 заполнится названиями выделенных элементов в самом верхнем открытом Проводнике (если я правильно понимаю, что такое Проводник Если Проводник - это то окошко, где еще сбоку дерево каталогов, то тогда вместо класса CabinetWClass надо написать ExploreWClass:
PS: А можно универсальную сделать версию. Вместо тех двух строк напиши:
Если не найдёт одно, попытается найти другое |
| Автор: Akella 21.10.2004, 08:55 | ||
| WinRar както работает же? и даже при незапущенной прогремме если открыть проводник, то при нажатии првой клавиши мыши -> контекстное меню->WinRar там несколько подменю, одно из них такое "добавить в имяфайла.rar", причем имя файла подставляется, а если выделены несколько файлов, то "добавить в имякталаога.rar", имякталаога=имя каталога, в котором выделены файлы, я так описываю потому, что ты не очень любишь проводник.
довольно удобная вещь, начинаю с Win95 только им и работаю, иногда с фаром |
| Автор: p0s0l 21.10.2004, 11:04 | ||
|
| Автор: The ded 31.10.2004, 13:40 |
| Спасибо за беспокойство, но приведённый код не работает, т.е. ничего не происходит(listbox остаётся девственно чистым)! TLVITEM находится в commctrl, не так ли? for i := 1 to ParamCount do ListBox1.Items.Add(ParamStr(i)); начинает работать иногда после format ц: , но не всегда=) Win9X |
| Автор: p0s0l 31.10.2004, 18:08 | ||||||
| Видимо в Win9x окно проводника имеет другое название класса... Посмотри сам... Например, создай новый проект, в него добавь таймер, и на таймер повесь:
Запусти проект, и наведи мышь проводник, в область ListView (там где иконки). В заголовке твоего окна должно появиться типа такого: "CabinetWClass" -> "SHELLDLL_DefView" -> "SysListView32" -> Если будет не так, то соответственно, подправь имена классов... (можно сделать проверку версии винды и соответственно искат нужные названия классов)
Добавлено @ 18:11 Мдя... Щас пересмотрел свой код, и понял, что в 9x это не должно работать, т.к. используется функция VirtualAllocEx... Как сделать без неё в Win9x - не знаю...
Странно, что прога у тебя вообще запустилась на девятке... Должно было выскочить окошко, что-то типа "Функция VirtualAllocEx не найдена в Kernel32.dll"... |
| Автор: The ded 1.11.2004, 22:35 |
| Нет всё работает =) |