Автор Тема: IconChooser UDF - Диалог для выбор иконки из заданного файла  (Прочитано 13383 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
AutoIt: 3.3.6.1
Версия: 1.1

Категория: Система, Элементы GUI

Описание: Данная библиотека содержит всего одну функцию, которая воспроизводит диалоговое окно для выбора иконки из указанного файла, аналогично API функции PickIconDlg(). В сравнении с последней, имеет следующие преимущества:

  • Возможность изменять размеры отображаемых иконок.
  • Возможность изменять размер диалогового окна.
  • Возможность сохранять параметры окна (размеры, местоположение и т.д.) в реестре.
  • Полностью настраиваемый под конкретные задачи вид окна.
  • Более приятный внешний вид (особенно в Vista/7).

Пример:
(нажмите для показа/скрытия)

Скриншот:


Источник: IconChooser UDF (оффициальный форум)
Автор: Yashied


Примечание:

ВАЖНО. Данная библиотека регистрирует следующие WM сообщения:

WM_COMMAND
WM_CONTEXTMENU
WM_GETMINMAXINFO
WM_NOTIFY
WM_SYSCOMMAND

Поэтому, если ваш код предусматривает использование этих сообщений, то в соответствующих функциях обработки необходимо вызвать обработчики из этой библиотеки, в противном случае, функция будет работать неправильно, например:

Func MY_WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
      Local $Result = IC_WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
      If $Result <> $GUI_RUNDEFMSG Then
            Return $Result
      EndIf
      ...
EndFunc

« Последнее редактирование: Май 14, 2011, 01:58:15 от Yashied »


Думай, прежде чем говорить.

Русское сообщество AutoIt


Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Yashied,
У меня (Windows XP SP3 32), если кликнуть второй раз по пустому месту (49-52), то получается следующее:

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Это из-за стиля LVS_EX_SIMPLESELECT. Исправил.

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Yashied
Теперь все OK, спасибо. :)

Русское сообщество AutoIt

Re: IconChooser UDF - Диалог для выбор иконки из заданного файла
« Ответ #3 Отправлен: Май 06, 2011, 13:48:54 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Обновил библиотеку до версии 1.1.

Список изменений:
(нажмите для показа/скрытия)

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Yashied
Я один такой невезучий (Windows XP SP3x86)?
У меня кнопку выбора размера не видно. :(

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Я один такой невезучий...

:)

Ну, я не знаю почему XP не хочет рисовать кнопку с несуществующим стилем (для совместимости должен).

Исправил.

P.S

Вы бы уже подумали над переходом на Windows 7.

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Yashied  [?]
Цитировать
Исправил.
Теперь все в порядке. :)
Цитировать
Вы бы уже подумали над переходом на Windows 7
У меня есть и 32 и 64. Просто я проверяю и там, и там.

Русское сообщество AutoIt

Re: IconChooser UDF - Диалог для выбор иконки из заданного файла
« Ответ #7 Отправлен: Май 08, 2011, 21:34:19 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Обновил библиотеку, версия осталась прежней.

Список изменений:
(нажмите для показа/скрытия)

Оффлайн Семёнычев Роман [?]

  • Новичок
  • *
  • Сообщений: 25
  • Репутация: 1
  • Пол: Мужской
    • Награды
на windows 7 x64 sp1 не берётся индекс иконки
_arrayDisplay в значение [1] вписывает 0 вне зависимости от выбранной иконки

может я что то не так делаю
Код: AutoIt [Выделить]
#Include <IconChooser.au3>
$data = _IconChooserDialog(@SystemDir & '\shell32.dll', 23, 32)
_ArrayDisplay($Data)
 

« Последнее редактирование: Январь 17, 2016, 18:10:35 от Семёнычев Роман »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Замените соответствующий кусок в функции IC_WM_NOTIFY() на следующий:

Код: AutoIt [Выделить]
            Local $tNMIA = DllStructCreate($tagNMITEMACTIVATE, $lParam)
;~          If @AutoItX64 Then
;~              Local $tNMIA = DllStructCreate($tagNMHDR & ';uint Aligment;int Item;int SubItem;uint NewState;uint OldState;uint Changed;int X;int Y;lparam lParam;uint KeyFlags', $lParam)
;~          Else
;~              Local $tNMIA = DllStructCreate($tagNMHDR & ';int Item;int SubItem;uint NewState;uint OldState;uint Changed;int X;int Y;lparam lParam;uint KeyFlags', $lParam)
;~          EndIf
            Local $hLV = DllStructGetData($tNMIA, 'hWndFrom')
            Local $ID = DllStructGetData($tNMIA, 'Code')
            Local $Item = DllStructGetData($tNMIA, 'Index')


Оффлайн Семёнычев Роман [?]

  • Новичок
  • *
  • Сообщений: 25
  • Репутация: 1
  • Пол: Мужской
    • Награды
спасибо, помогло
а ещё вопрос
индекс с минусом и индекс без минуса имеет различия? где бы об этом прочитать

нашёл ваш же пост
http://autoit-script.ru/index.php?topic=1312.msg27167#msg27167

а можно вас попросить сделать найстройку в функции так, чтобы выводился индекс или название ресурса?
по вашему посту, "правильнее" указывать именно название ресурса, а не индекс
« Последнее редактирование: Январь 18, 2016, 17:27:40 от Семёнычев Роман »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Есть API функция _WinAPI_PickIconDlg(). Данная UDF сохраняет совместимость с этой функцией как в плане работы, так и в плане вызова. Если вы указываете положительное число для иконки, то это подразумевает порядковый номер иконки в ресурсах (от 0 и выше). Если же задано отрицательное число, то будет взята иконка с соответствующем именем. Например, если написать "-99", то будет использована иконка с именем (!) "99". Т.о. для проекта AutoIt следующие записи будут равнозначны:

Код: AutoIt [Выделить]
$Data = _IconChooserDialog(@ScriptFullPath, 0)


Код: AutoIt [Выделить]
$Data = _IconChooserDialog(@ScriptFullPath, -99)


Если иконка в своем имени содержит буквы, например "MAIN", то к такой иконке необходимо обращаться только по индексу.

Оффлайн Семёнычев Роман [?]

  • Новичок
  • *
  • Сообщений: 25
  • Репутация: 1
  • Пол: Мужской
    • Награды
у меня замечание есть
дело в том, что я к этой udf прикрутил сторонние программы, и заметил вот что:
при запуске функция ваша запоминает путь к файлу и больше ее не меняет, и даже если выбрать вручную какую-нибудь dll, другим программам передается именно путь к первоначально выбранному файлу
можно исправить, чтобы путь брался из строки?

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
При закрытии диалога ("OK" или "Cancel") текущий путь сохраняется в

HKEY_CURRENT_USER\Software\Y's\Common Data\Icon Chooser\1.1, IconPath
Этот путь используется для инициализации диалога при следующем вызове, неважно из какой программы. Если не ошибаюсь, то за это отвечает какой-то $IC_FLAG_* флаг. Попробуйте поэкспериментирвать. Просто вы меня сейчас заставляете вспоминать то, что я писал более 4-х лет назад.

Русское сообщество AutoIt

Re: IconChooser UDF - Диалог для выбор иконки из заданного файла
« Ответ #14 Отправлен: Февраль 06, 2016, 10:59:40 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
4934 Просмотров
Последний ответ Ноябрь 07, 2009, 11:33:43
от Heler
2 Ответов
3658 Просмотров
Последний ответ Апрель 19, 2010, 21:29:53
от VAR
6 Ответов
5382 Просмотров
Последний ответ Май 17, 2010, 11:49:01
от Yashied
3 Ответов
2703 Просмотров
Последний ответ Август 16, 2011, 09:12:39
от DelphiExpert
12 Ответов
6697 Просмотров
Последний ответ Апрель 26, 2015, 21:47:54
от CreatoR
8 Ответов
1725 Просмотров
Последний ответ Июль 03, 2015, 17:15:53
от InnI
3 Ответов
1240 Просмотров
Последний ответ Октябрь 15, 2015, 21:09:51
от ZlojBoter
26 Ответов
5961 Просмотров
Последний ответ Ноябрь 24, 2016, 23:59:08
от delmetvfj
1 Ответов
628 Просмотров
Последний ответ Декабрь 01, 2016, 16:42:16
от hedji
0 Ответов
278 Просмотров
Последний ответ Июль 28, 2017, 14:10:18
от OlegSmirnov