Диалог выбора иконок

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Диалог выбора иконок

Сообщение Space » 20.06.2009 (Сб) 15:21

Как вызвать диалог выбора иконок 16х16 в shell32.dll? И как записать изображение в ImageList?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Диалог выбора иконок

Сообщение iGrok » 20.06.2009 (Сб) 22:08

Space писал(а):Как вызвать диалог выбора иконок 16х16 в shell32.dll? И как записать изображение в ImageList?

Хм. А о каком диалоге идёт речь?
ИМХО, нету стандартного диалог выбора иконки, и в каждой софтине он свой, в зависимости от текущих нужд.
label:
cli
jmp label

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Диалог выбора иконок

Сообщение Proxy » 20.06.2009 (Сб) 23:15

А с какой целью всё это? Ты случайно не хочешь просто извлечь иконки из Dll, EXE и поместить их в imagelist?
Если да, то в поиске глянь, если нет, то можешь дальше не читать. Такое поднималось раз 10 за время моего пребывания здесь. Есть функция в API для извлечения иконок из EXE, DLL (возвращала изображение, идентификатор не вспомню так быстро), и ещё была функция для просмотра количесва иконок в dll, exe. Вот с их помощью и делалось такое.

В Vista и Windows 7 могло всё несколько измениться: иконки уже точно не обязательно 64х64 битмап с альфаканалом 32х32 битмап с альфаканалом и 16х16 битмап с альфаканалом, т.к. уже видел иконку гигантского размера (точно не растянутую из 32х32 или 64х64). Может быть и эти 2 функции тоже изменились.
Follow the white rabbit.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Диалог выбора иконок

Сообщение Хакер » 21.06.2009 (Вс) 3:46

Есть такой диалог.
И функция есть. Правда она плохо документирована. Она имеет ординал 62, принимает хендл окна родителя, указатель на строку с именем файла, ноль и указатель на то место, куда следует записать ID выбранной ячейки.

И это один из случаев, где нужно быть внимательным: под 9x эта функция ждёт в качестве второго параметра указатель на ANSI-строку, а под NT — на юникодную.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Диалог выбора иконок

Сообщение Space » 21.06.2009 (Вс) 6:36

Я имел ввиду диалог, который вызывается по правому клику на ярлыке - Свойства - Сменить значок. Правда, там иконки не 16х16, а мне надо 16х16.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Диалог выбора иконок

Сообщение Хакер » 21.06.2009 (Вс) 6:38

И, что, мой ответ тебя не удовлетворяет?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Диалог выбора иконок

Сообщение Space » 21.06.2009 (Вс) 7:25

а как ты думаешь?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Диалог выбора иконок

Сообщение alibek » 21.06.2009 (Вс) 10:31

Space, тебе голова зачем дана? Тебе же дали подробный ответ.
Lasciate ogni speranza, voi ch'entrate.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Диалог выбора иконок

Сообщение Space » 21.06.2009 (Вс) 19:43

у меня нет головы :) Я - безбашенный программист. Ну во первых, я не знаю, что такое ординал 62, подозреваю, что это некий номер ф-и в dll.
Код: Выделить всё
function SHChangeIconDialog(hOwner: LongInt; sFilename: LPWSTR; nBuf: LongInt;
  var nIconIndex: LongInt): LongInt;
  stdcall; external 'Shell32.dll' index 62;

ну енто, код на Паскале нашёл, но ещё с головой там не гулял :)
Код: Выделить всё
куда следует записать ID выбранной ячейки.
И что я с этим ID буду делать?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Диалог выбора иконок

Сообщение iGrok » 21.06.2009 (Вс) 20:05

Space писал(а):у меня нет головы :) Я - безбашенный программист. Ну во первых, я не знаю, что такое ординал 62, подозреваю, что это некий номер ф-и в dll.
Код: Выделить всё
function SHChangeIconDialog(hOwner: LongInt; sFilename: LPWSTR; nBuf: LongInt;
  var nIconIndex: LongInt): LongInt;
  stdcall; external 'Shell32.dll' index 62;

ну енто, код на Паскале нашёл, но ещё с головой там не гулял :)
Код: Выделить всё
куда следует записать ID выбранной ячейки.
И что я с этим ID буду делать?

Можешь на стене записать. Можешь инвертировать три верхних бита, прибавить 153 и разделить пополам. Можешь порыться в памяти по полученному адресу...

А можешь подсунуть функции, которая извлекает иконки из библиотек...
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Диалог выбора иконок

Сообщение Хакер » 21.06.2009 (Вс) 21:20

Space писал(а):у меня нет головы :) Я - безбашенный программист.

Это оксюморон похлеще, чем немой певец.

Ну во первых, я не знаю, что такое ординал 62, подозреваю, что это некий номер ф-и в dll.

Это значит, что функция имеет такой ординал. Для безмозглых можно перефразировать: надо написать Alias "#62" при объявлении функции.

Space писал(а):И что я с этим ID буду делать?

Работать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Диалог выбора иконок

Сообщение djalex777 » 21.06.2009 (Вс) 21:21

[Хакер] :: Зачем постить ерунду?

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Диалог выбора иконок

Сообщение djalex777 » 21.06.2009 (Вс) 21:27

Хакер, что же я такого написал? Человек не знал как вызвать функцию по номеру, вот ему и был пример. Далее по-поводу последнего параметра - в него возвращается номер выбранной иконки. И где тут ерунда написана?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Диалог выбора иконок

Сообщение Хакер » 21.06.2009 (Вс) 21:37

Ответ и пример того, что должно было быть в объявлении, если функция импортируется по ординалу, уже был дан. Ценности в твоём примере не было никакой: та его часть, которая показывала импорт по ординалу, не имела ценности, потому что ответ уже был дан. Остальная же часть более чем наполовину была ошибочной.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Диалог выбора иконок

Сообщение Proxy » 21.06.2009 (Вс) 21:47

А можно было модериал разместить под постом, а пост оставить? А то интересно же что там было.
Follow the white rabbit.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Диалог выбора иконок

Сообщение djalex777 » 21.06.2009 (Вс) 21:53

В момент блокирования Хакером записи там должно было быть:
Код: Выделить всё
Private Declare Function SHChangeIconDialog Lib "shell32" Alias "#62" (ByVal hOwner As Long, ByRef szFilename As Byte, ByVal Reserved As Long, ByRef lpIconIndex As Long) As Long

И часть моего предыдущего поста :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Диалог выбора иконок

Сообщение Хакер » 21.06.2009 (Вс) 22:03

Этого чела забанить за враньё. В оригинале второй параметр был ByVal ... As String, последний As Integer, тип возврата As Integer.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Диалог выбора иконок

Сообщение djalex777 » 21.06.2009 (Вс) 22:08

1. Когда я начал писать тот свой пост, твоего поста с Alias "#62" ещё не было.
2. Когда я вспомнил разницу между Integer VB.NET и VB6 я изменил свой пост, но он уже не сохранился (не отредактировался), т.к. был заблокирован Хакером.
Вот тебе и враньё

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Диалог выбора иконок

Сообщение Хакер » 21.06.2009 (Вс) 22:17

Вообще это забавно.

Пункт первый не принимается, т.к. если бы за время пока ты писал своё сообщение кто-то бы ответил (в твоей верси: я) сюда, форум бы предупредил тебя. Так что оправдание не засчитывается. Ты начал писать сообщение либо после того, как я запостил своё, либо всё-же видел предупреждение от форума.

Пункт второй не принимается, и что примечательно, по той же причине: если бы ты отредактировал своё сообщения до блокировки, форум бы меня предупредил об этом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Диалог выбора иконок

Сообщение djalex777 » 21.06.2009 (Вс) 22:24

Хакер писал(а):Пункт первый не принимается, т.к. если бы за время пока ты писал своё сообщение кто-то бы ответил (в твоей верси: я) сюда, форум бы предупредил тебя. Так что оправдание не засчитывается. Ты начал писать сообщение либо после того, как запостил своё, либо всё-же видел предупреждение от форума.

:) Оправдание? Разницу между оправданием и объяснением чувствуешь? А почему были обяснения? - из уважения к форуму и его посетителям. Возможно какое-то предупреждение и было, но я его просто пропустил.

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

Хм.. А теперь включаем мозг - я жму - отредактировать сообщение, после этого ты жмешь заблокировать (или что-то в этом духе). Запись заблокирована и в то же время поднята у меня на изменение. Я жму отправить и получаю сообщение о том, что запись заблокирована.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Диалог выбора иконок

Сообщение Хакер » 21.06.2009 (Вс) 22:32

djalex777 писал(а): Запись заблокирована и в то же время поднята у меня на изменение. Я жму отправить и получаю сообщение о том, что запись заблокирована.

Именно так. Ты не успел отредактировать, а не я прошляпил момент, когда плохой пост стал хорошим.
Это важно, потому что в следующих сообщениях ты выставил меня так, как будто это именно я стёр хороший, правильный пост.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Диалог выбора иконок

Сообщение Proxy » 21.06.2009 (Вс) 22:44

как будто это именно я стёр хороший, правильный пост.

нет кто-то другой стёр этот пост. Это конечно дело сугубо модераторское, ну если уж вы посчитали правильным не удалять темы даже если они бредоподобны (вы же просто блокируете темы на VBStreets), то и удалять посты пользователей тоже как-то не логично.
Если кажется, что не удалённой информацией кто-то неприменно попробует воспользоваться, то это не разумно: красный модериал сразу бросается в глаза.
Follow the white rabbit.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Диалог выбора иконок

Сообщение Space » 22.06.2009 (Пн) 0:15

Человек не знал как вызвать функцию по номеру
О, я человек! Хотя и программист :)
Для безмозглых можно перефразировать
Ну спасибо. Так приятно услышать комплимент от кого-то :) Но у меня ещё остался спинной мозг ;)
Кстати, а что это за фишка - ординал? Функции нельзя было дать имя? Или это вечная проблема программеров с именованием? Или Микрософт решили опять съэкономить на памяти?
Да, кстати... В "Что? Где? Когда?" бородатый мужик играл в команде Мухина, это не ты, Хакер?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Диалог выбора иконок

Сообщение Хакер » 22.06.2009 (Пн) 0:34

Кстати, а что это за фишка - ординал? Функции нельзя было дать имя? Или это вечная проблема программеров с именованием? Или Микрософт решили опять съэкономить на памяти?

Это двухбайтный номер функции. Имя можно не указывать. Тогда останется возможность импортировать функцию только по ординалу.

бородатый мужик играл в команде Мухина, это не ты, Хакер?

Нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Диалог выбора иконок

Сообщение Space » 22.06.2009 (Пн) 1:13

Ну, ординал, наверное, лучше запоминается, чем имя :) И именованные константы ошибка века ;)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Диалог выбора иконок

Сообщение iGrok » 22.06.2009 (Пн) 1:30

Space писал(а):Ну, ординал, наверное, лучше запоминается, чем имя :) И именованные константы ошибка века ;)

Ну например так:
"Если речь идёт о недокументированной функции, то почему нельзя обойтись без имени? Зачем оно нужно?"

Вот они и обошлись.

UPD:
А оказывается у неё таки есть имя, и имя это "PickIconDlg": http://msdn.microsoft.com/en-us/library/bb776481.aspx

Но:
MSDN писал(а):Note This function is available through Windows Vista and Microsoft Windows Server 2003. It might be altered or unavailable in subsequent versions of Windows.
label:
cli
jmp label

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Диалог выбора иконок

Сообщение Proxy » 22.06.2009 (Пн) 10:10

А может всётаки стоит где-то завести раздел с разборами Windows API? Просто много полезной информации теряется в недрах форума и затем когда-нибудь всплывёт повторно (и не раз). В MSDN многое как-то не слишком понятно описано, а изменения в API есть от версии к версии, без этого никак. Хотя бы в сишных примерах использования.
Follow the white rabbit.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Диалог выбора иконок

Сообщение Space » 22.06.2009 (Пн) 11:18

а в Винде есть запрет на использование каких-то функций из-за авторских прав и всё такое?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Диалог выбора иконок

Сообщение alibek » 22.06.2009 (Пн) 12:17

Ты сам понял, что сказал?
Lasciate ogni speranza, voi ch'entrate.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Диалог выбора иконок

Сообщение Proxy » 22.06.2009 (Пн) 14:34

Авторских прав? Нет конечно, API и разработано для взаимодействия ОС со сторонними продуктами ППО (и не только сторонними).
Может речь о чём-то другом? Права доступа?
Follow the white rabbit.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 96

    TopList  
cron