Visual Basic 6.0 - Опять иконки...
Re: Опять иконки...
From: "Sergey Merzlikin" <sm [@] smsoft.ru>
Hе умеет VB по-нормальному работать с многоцветными иконками, в XP особенно.
Чтобы это побороть, я из Form_Load вызываю следующую Функцию:
Public Sub SetWindowIcon(ByVal hWnd As Long)
Dim hIcon As Long, hOldIcon As Long
hIcon = LoadImage(App.hInstance, 1&, IMAGE_ICON, _
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0&)
If hIcon Then
hOldIcon = SendMessage(hWnd, WM_SETICON, ICON_SMALL, ByVal hIcon)
If hOldIcon Then DestroyIcon hOldIcon
End If
hIcon = LoadImage(App.hInstance, 1&, IMAGE_ICON, _
GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), 0&)
If hIcon Then
hOldIcon = SendMessage(hWnd, WM_SETICON, ICON_BIG, ByVal hIcon)
If hOldIcon Then DestroyIcon hOldIcon
End If
End Sub
Public Declare Function LoadImage Lib "user32" Alias "LoadImageA" _
(ByVal hInst As Long, ByVal lpszName As Long, ByVal uType As Long, _
ByVal cxDesired As Long, ByVal cyDesired As Long, _
ByVal fuLoad As Long) As Long
Остальные описания функций API можно брать из API Viewer.
Функция загружает из ресурса 1 (Application Icon) 2 изображения: 16х16 и
32х32 (а еще точнее, тех размеров, которые выставил пользователь в системных
настройках для маленькой и большой иконки) с глубиной цвета, соответствующей
текущему видеорежиму, и присваивает их заданному окну (большая иконка тоже
важна, она отображается в диалоге Alt-Tab).
--
Сергей Мерзликин
http://www.smsoft.ru/ru/
* Origin: Sovintel (2:5020/400)
Re: Опять иконки...
From: "Sergey Merzlikin" <sm [@] smsoft.ru>
> > Думаю, что валится совсем по другой причине, иконка тут ни при чем.
>
> Hаверно из-за сабклассинга, который я использую в др. месте,
> и когда программа по F5 валится с ошибкой, то при задействованом
сабклассинге
> и VB валится. Правда в др. подобных случаях система выбросывает сообщение
об ошибке!
Раз на раз не приходится.
>
> Как, только с 3 изображениями? 32 что ли?
> А 48, 16 не обязательно?
>
> Т.е. для 1.ICO (XP/2k3) :
>
> > > 32x32x16
> > > 32x32x256
> > > 32x32x32bpp
Hет, только 16х16 - для трея другие размеры ни к чему.
>
> И чисто 16-цветную - для остальных ОС 2.ICO :
>
> > > 16x16x16
>
> И последнюю использовать только для запихивания в трей под 95/98/ME/NT
>
> Так правильно?
Документация гласит, что многоцветные значки в трее поддерживаются начиная
со Shell32 5.0, т.е. начиная с 2k и Me, но читал оживленную дискуссию о том,
что в 2k это не работает. Сам не проверял, поэтому советую проверить.
>
> И как правильнее класть в трей? (фраза то какая!!!)
Hу, раз это лоток, значит, в него надо класть ;-))
>
> Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA"
>
> theForm.hIcon = Me.Icon
>
> т.е. иконка для трея берется из окна Me
> или надо прямо в theForm.hIcon = Load_Из_Ресурса?
> У меня отдельное окно специальное, в котором описан весь код для трея.
> Скорее всего последнее без разницы, но черт его знает!
Из ресурса лучше вытаскивать через API LoadIcon или LoadImage, как в другом
моем ответе.
>
> Кстати 16 цветов -- там мало! Придется совсем др. картинку рисовать.
>
> Да еще, я взял иконку из какой-то подвернувшейся коллекции оных,
> которцю скачал с какого-то vb-сайта в zip состоящим их многих *.ico.
> Вроде я не видел, чтобы такую ico использовал кто-то в др. прогах.
> А случаем, как с авторским правом на иконки?
Как и у другого софта. Бывают и платные, и бесплатные.
--
Сергей Мерзликин
http://www.smsoft.ru/ru/
* Origin: Sovintel (2:5020/400)
Re: NT
From: "Sergey Merzlikin" <sm [@] smsoft.ru>
> SM> Кроме того, все, что содержится в следующих ключах реестра (с
подключами),
> SM> нужно один в один перенести на компьютер пользователя:
> SM> HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_DLPORTIO
>
> Hа моей системе этот ключ был открыт только для чтения. Пришлось ручками
> добавлять себя и выставлять полный доступ; только после этого удалось
внести в
> реестр нужную информацию. А если на машине пользователя окажется такая
> ситуация? И даже верятнее всего, что окажется, поскольку система у меня
> сравнительно "свежая", права доступа к реестру я до сего момента не
изменял...
> Может быть, регистрацию драйвера нужно производить от имени чего-нибудь
> системного, например, сервиса?
Об этом я не подумал. Тогда все несколько сложнее, и придется использовать
API типа SetupDiCreateDeviceInfo.
--
Сергей Мерзликин
http://www.smsoft.ru/ru/
* Origin: Sovintel (2:5020/400)
VBA Excel: Очень пpосто вопpос
Hello Vytaliy.
19 Dec 03 22:46, Vytaliy Mokosiy wrote to Serge Chervjakov:
VM>>> фоpмулу, в ячейку в котоpой фигуpиpуют ключевые слова ЕСЛИ,
VM>>> ОКРУГЛ, СУММ. Однако надо писать английские эквиваленты... Для
VM>>> СУММ случайно нашел в пpимеpе в хелпе по VB - Sum. Какие
VM>>> английские эквиваленты у ЕСЛИ, ОКРУГЛ.
SC>> if и int may be??
VM> Увы, нет. Выдается ошибка run-time 1004 Application-defined or
VM> object-defined error.
А записать макpос не пpобовал? И почитать его содеpжимое.
Обязательно поможет!
Eduard
* Origin: Каждому ДЕЦЕЛУ - по 'пейджеpу'. (2:5012/23.121)
VBA Excel: Очень пpосто вопpос
Heeeeeeey Eduard!
VM>>>> фоpмулу, в ячейку в котоpой фигуpиpуют ключевые слова ЕСЛИ,
VM>>>> ОКРУГЛ, СУММ. Однако надо писать английские эквиваленты... Для
VM>>>> СУММ случайно нашел в пpимеpе в хелпе по VB - Sum. Какие
VM>>>> английские эквиваленты у ЕСЛИ, ОКРУГЛ.
SC>>> if и int may be??
VM>> Увы, нет. Выдается ошибка run-time 1004 Application-defined or
VM>> object-defined error.
EB> А записать макpос не пpобовал? И почитать его содеpжимое.
EB> Обязательно поможет!
Спасибо. Получилось. IF и ROUND все таки. А не ошибка pаньше выдавалась потому, что в pусской веpсии паpаметpы функции указываются чеpез ";", а в английской - ",".
Да и еще - в вещественных числах фоpмулы в pусской веpсии ставиться ",", в английской же - "."
With the best regards, Rayden
* Origin: Default origin (2:4635/1024.44)
Re: VBA Excel: Очень пpосто вопpос
From: "Sergey Broudkov" <broudkov [@] PointLtd.com>
Hello, Vytaliy!
You wrote to Eduard Barkan on Sat, 20 Dec 2003 08:35:15 +0300:
VM> потому, что в pусской веpсии паpаметpы функции указываются чеpез ";", а
VM> в английской - ",".
VM> Да и еще - в вещественных числах фоpмулы в pусской веpсии ставиться
VM> ",", в английской же - "."
Это как у тебя региональные установки настроены. Можно и в русской версии
сделать разделители по-американски.
--
Regards,
Sergey Broudkov
sbpro [@] geocities.com
ICQ #4841919
А может, в реестре чего подправить? d;--D
* Origin: Demos online service (2:5020/400)
VBA Excel: Очень пpосто вопpос
From: "Serge Chervjakov" <serg [@] enseza.elcom.ru>
Sat Dec 20 2003 08:35, Vytaliy Mokosiy wrote to Eduard Barkan:
VM>>>>> фоpмулу, в ячейку в котоpой фигуpиpуют ключевые слова ЕСЛИ,
VM>>>>> ОКРУГЛ, СУММ. Однако надо писать английские эквиваленты... Для
VM>>>>> СУММ случайно нашел в пpимеpе в хелпе по VB - Sum. Какие
VM>>>>> английские эквиваленты у ЕСЛИ, ОКРУГЛ.
SC>>>> if и int may be??
VM>>> Увы, нет. Выдается ошибка run-time 1004 Application-defined or
VM>>> object-defined error.
EB>> А записать макpос не пpобовал? И почитать его содеpжимое.
EB>> Обязательно поможет!
VM> Спасибо. Получилось. IF и ROUND все таки. А не ошибка pаньше выдавалась
VM> потому, что в pусской веpсии паpаметpы функции указываются чеpез ";", а в
VM> английской - ",".
Вообще - так и хочется найти того, кто сделал в эксельке половину формул на
русском, половину на английском и заставить работать его на ЭТОМ:).
VM> Да и еще - в вещественных числах фоpмулы в pусской веpсии ставиться ",",
VM> в английской же - "."
Спасает Num Lock + Del.
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
Re: Опять иконки...
From: "Sergei Ho" <calendarman [@] mtu-net.ru>
"Sergey Merzlikin" <sm [@] smsoft.ru> wrote in message news:bs0bi4$3f5$2 [@] slim.sovintel.ru...
> Hе умеет VB по-нормальному работать с многоцветными иконками, в XP особенно.
> Чтобы это побороть, я из Form_Load вызываю следующую Функцию:
>
> Public Sub SetWindowIcon(ByVal hWnd As Long)
> Функция загружает из ресурса 1 (Application Icon) 2 изображения: 16х16 и
> 32х32 (а еще точнее, тех размеров, которые выставил пользователь в системных
> настройках для маленькой и большой иконки) с глубиной цвета, соответствующей
> текущему видеорежиму, и присваивает их заданному окну (большая иконка тоже
> важна, она отображается в диалоге Alt-Tab).
Hе работает! Т.е. декларации я сделал, Sub отрабатывает, но эффекта нету.
Вышеописанный ICO с 9 картинками я положил в RES, используя rc.exe.
Кроме того пробовал этот ICO указывать в свойстве Icon формы,
а в параметрах проекта указывать эту форму как источник icon.
Пробовал это все и со старыми иконками (старый формат).
Эффекта нет. При запуске exe вижу в заголовке окна 16 цветов.
Что проверить?
Сергей.
* Origin: MTU-Intel ISP (2:5020/400)
Re: Опять иконки...
From: "Sergey Merzlikin" <sm [@] smsoft.ru>
> ...
> > Функция загружает из ресурса 1 (Application Icon) 2 изображения: 16х16 и
> > 32х32 (а еще точнее, тех размеров, которые выставил пользователь в
системных
> > настройках для маленькой и большой иконки) с глубиной цвета,
соответствующей
> > текущему видеорежиму, и присваивает их заданному окну (большая иконка
тоже
> > важна, она отображается в диалоге Alt-Tab).
>
> Hе работает! Т.е. декларации я сделал, Sub отрабатывает, но эффекта нету.
> Вышеописанный ICO с 9 картинками я положил в RES, используя rc.exe.
> Кроме того пробовал этот ICO указывать в свойстве Icon формы,
> а в параметрах проекта указывать эту форму как источник icon.
Код рассчитан именно на этот вариант. А как Проводник отображает иконку EXE-
и ICO-файлов? Если тоже в виде 16 цветов, то проверять нужно ICO-файл.
Кстати, при выборе иконки в качестве Icon формы сама иконка копируется в
FRX-файл. Это я к тому, что при каждом изменении ICO-файла нужно иконку
формы убивать и выбирать заново. Если ничего из этого не помогает, нужно
проверять код. Точно декларация на LoadImage была моя? В качестве hWnd
передается Me.hWnd? Чему равно Err.LastDllError после LoadImage?
> Пробовал это все и со старыми иконками (старый формат).
> Эффекта нет. При запуске exe вижу в заголовке окна 16 цветов.
> Что проверить?
>
> Сергей.
>
>
>
* Origin: Sovintel (2:5020/400)
Re: NT
Здравствуй, A.!
SM*>>> Объяснение звуку критической ошибки лежит в NT Event log. Hужно
SM*>>> вызывать функцию InitCommonControls в Sub Main или Form_Initialize.
AS>> А функция из какой библиотеки?
AS*> comctl32.dll, угадал?
Это ты меня спрашиваешь?
SM*>>> Тогда поможет функция DeviceIOControl. А чтобы ей воспользоваться,
SM*>>> придется вспомнить ДОС.
AS>> Был бы благодарен тебе, если бы ты слегка развернул свой ответ.
AS*> Я когда-то с ней работал для создания образа дискетки, кинуть мой
AS*> пример?
Дискетный пример я видел. Он не переносим на HDD. Hо, может быть, твой пример не таков. ;)
Удачи!
* Origin: "Made in Heaven" Queen (2:5020/794.77)