![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
The ded |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 26.4.2004 Репутация: нет Всего: нет |
В событии oncreate нужно сделать так, чтобы ВСЕ выделенные(ДО запуска программы) файлы добавились бы в listbox...Наверное нужно использовать paramcount¶nstr() в структуре типа
той, которую я использую в opendialog'e : for i:=0 to opendialog1.files.count do listbox1.items.add(opendialog1.items.strings(i))... ![]() Заранее спасибо!!! ![]() |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Через 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 |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 26.4.2004 Репутация: нет Всего: нет |
в проводнике...
у меня почему-то не меняется paramcount(только 1 и не больше!(сколько бы я не выделял файлов))
А там тоже самое... ![]() |
||||||
|
|||||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Тогда ты не сможешь узнать, что там было выделено до момента запуска. Ты можешь узнать лишь то, что выделено вначале работы твоего приложения, а это может отличаться от того, что тебе надо, т.к. я могу, например, запустить файл и тут же закрыть проводник. Прога уже никак не узнает, что там было выделено... Но если тебя это устраивает, то навскидку план будет таков: 1)Узнай вначале класс окна проводника 2)Ищи окно такого же класса при запуске программы. Если окон несколько - выбирай самое верхнее (в Z-порядке) 3)Ищи в нём окно класса ListView (скорее всего это) 4)Получив хэндл ListView, узнай, какие элементы в нём выделены. ListView_GetCount - получить кол-во элементов Делаешь цикл от 0 до полученного значения-1: в цикле ListView_GetItem - получить итем У каждого полученного итема проверяй поле state, и если бит LVIS_SELECTED включен, то итем - выбран, его текст в поле pszText Ну если там другой класс (честно говоря, проводником никогда не пользовался ![]() PS: если будут трудности или вопросы - говори, расскажем подробнее, а может даже дадим готовый пример... -------------------- С уважением, г-н Посол. |
|||
|
||||
The ded |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 26.4.2004 Репутация: нет Всего: нет |
Я только знаю ф-ю findwindow => по пункту 1) сразу вопрос...
хотелось бы..... ![]() |
|||
|
||||
p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Вот сделал пример - ListBox1 заполнится названиями выделенных элементов в самом верхнем открытом Проводнике (если я правильно понимаю, что такое Проводник
![]() Если Проводник - это то окошко, где еще сбоку дерево каталогов, то тогда вместо класса CabinetWClass надо написать ExploreWClass:
PS: А можно универсальную сделать версию. Вместо тех двух строк напиши:
Если не найдёт одно, попытается найти другое -------------------- С уважением, г-н Посол. |
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
WinRar както работает же?
![]() и даже при незапущенной прогремме если открыть проводник, то при нажатии првой клавиши мыши -> контекстное меню->WinRar там несколько подменю, одно из них такое "добавить в имяфайла.rar", причем имя файла подставляется, а если выделены несколько файлов, то "добавить в имякталаога.rar", имякталаога=имя каталога, в котором выделены файлы, я так описываю потому, что ты не очень любишь проводник.
довольно удобная вещь, начинаю с Win95 только им и работаю, иногда с фаром |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
-------------------- С уважением, г-н Посол. |
|||
|
||||
The ded |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 26.4.2004 Репутация: нет Всего: нет |
Спасибо за беспокойство, но приведённый код не работает, т.е. ничего не происходит(listbox остаётся девственно чистым)!
TLVITEM находится в commctrl, не так ли? for i := 1 to ParamCount do ListBox1.Items.Add(ParamStr(i)); начинает работать иногда после format ц: , но не всегда=) Win9X |
|||
|
||||
p0s0l |
|
||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Видимо в Win9x окно проводника имеет другое название класса...
Посмотри сам... Например, создай новый проект, в него добавь таймер, и на таймер повесь:
Запусти проект, и наведи мышь проводник, в область ListView (там где иконки). В заголовке твоего окна должно появиться типа такого: "CabinetWClass" -> "SHELLDLL_DefView" -> "SysListView32" -> Если будет не так, то соответственно, подправь имена классов... (можно сделать проверку версии винды и соответственно искат нужные названия классов)
Добавлено @ 18:11 Мдя... Щас пересмотрел свой код, и понял, что в 9x это не должно работать, т.к. используется функция VirtualAllocEx... Как сделать без неё в Win9x - не знаю...
Странно, что прога у тебя вообще запустилась на девятке... Должно было выскочить окошко, что-то типа "Функция VirtualAllocEx не найдена в Kernel32.dll"... -------------------- С уважением, г-н Посол. |
||||||
|
|||||||
The ded |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 26.4.2004 Репутация: нет Всего: нет |
Нет всё работает =)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |