Что нового

ModernMenu - Расширенное создание меню GUI и Tray

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AutoIt: 3.3.8.1
Версия: 1.x (неизвестно на самом деле)

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

Описание: Позволяет создавать расширенное меню для GUI и Tray.
Имеется возможность задавать иконки пунктов меню, цвет (включая фоновой), шрифт, боковой вертикальный баннер, и др.
Также имеется возможность создавать более одного значка в системном лотке (трей).


Файл: ModernMenu.zip

Снимки:





Источник: autoitscript.com
Автор(ы): Holger Kotsch
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
хм. в справке есть как раз оно. только называется ModernMenuRaw



Добавлено:
Сообщение автоматически объединено:

я так и не разобрался как это использовать в 64-битной версии скрипта. так как при компиляции в х64 нет отображения подключаемых иконок и стилей
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
joiner [?]
в справке есть как раз оно
В русскоязычной?

называется ModernMenuRaw
Тут тоже сама библиотека так и называется. Просто Raw это версия со всеми подключёнными константами, я её тут кстати немного изменил.

так и не разобрался как это использовать в 64-битной версии скрипта
Перезалил архив, попробуй теперь.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
CreatoR [?]
В русскоязычной?
да . я как раз использовал из нее примеры для написания http://autoit-script.ru/index.php/topic,11757.msg76795.html#msg76795
меню управления



Добавлено:
Сообщение автоматически объединено:

теперь в варианте х64 работает как надо.
смотрю что там появился еще один файл ModernMenu. для чего он?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
joiner [?]
там появился еще один файл ModernMenu. для чего он?
Это оригинальная версия (отличается от Raw тем, что в ней объявляются нужные переменные, могут быть конфликты с другими подключаемыми фалами констант), в примерах не используется.


P.S.
Я бы вообще переименовал все константы во что то типа «$MM_Constant...». А ещё библиотеку можно почистить, использовать встроенные UDF функции WinAPI и _GUI*.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
CreatoR
так в чем была проблема,что при компиляции скрипта в х64 не работали стили и иконки?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
joiner [?]
в чем была проблема,что при компиляции скрипта в х64 не работали стили и иконки?
В структуре $stDrawItem, я заменил:
Код:
DllStructCreate("uint;uint;uint;uint;uint;dword;dword;int[4];dword", $lParam)

на:
Код:
DllStructCreate("uint;uint;uint;uint;uint;hwnd;hwnd;int[4];dword", $lParam)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
есть один неприятный момент. к примеру, запускаем скрипт из архива sample_Win2Tray.au3
пробуем выгрузить процесс explorer.exe и запустить его. видим что иконка в трее не появилась. сам процесс скрипта в списке есть, а меню в трее так и не появилось..как это исправить?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
joiner [?]
пробуем выгрузить процесс explorer.exe и запустить его. видим что иконка в трее не появилась. сам процесс скрипта в списке есть, а меню в трее так и не появилось..как это исправить?
В sampleGUIandTray.au3 есть пример с пересозданием иконок.

Как то так:
Код:
$nTaskBarCreated = DllCall("user32.dll", "uint", "RegisterWindowMessageA", "str", "TaskbarCreated")
DllCall("user32.dll", "none", "ChangeWindowMessageFilter", "UINT", $nTaskBarCreated[0], "dword", 1)
GUIRegisterMsg($nTaskBarCreated[0], "RecreateIcons")

While 1
    ...
WEnd

Func RecreateIcons()
	For $i = 1 To $arTrayWin[0][0]
		If $arTrayWin[$i][0] <> 0 Then
			_TrayIconSetState($arTrayWin[$i][0], 2)
			_TrayIconSetState($arTrayWin[$i][0], 1)
		EndIf
	Next
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
joiner [?]
пробуем выгрузить процесс explorer.exe и запустить его. видим что иконка в трее не появилась. сам процесс скрипта в списке есть, а меню в трее так и не появилось..как это исправить?
я пользовался _RefreshTrayIcons в дополнительной справке.
OffTopic:

Видимо невнимательно читал, проблема только при компиляции в x64 версию скрипта, а я думаю почему иконки работают на Win7 x64.



Добавлено:
Сообщение автоматически объединено:

Кстати эта модернизация на версии 3.3.6.1 вылетает с такой ошибкой
case $WM_RBUTTONDBLCLK
case ^ ERROR

Error: Variable used without being declared.

Я когда пробовал ModernMenuRaw, то выяснил одну причину, она должна быть последней в списке перечислений #include, тогда она не конфликтует. Если она в начале списка, то регистрирует недостающие константы и последующие UDF начинают кричать о переназначении константы. Хотя Holger тем самым увеличил совместимость на случай модификации констант AutoIt3, он просто назначает если они не назначены.
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
ModernMenuRaw глючит с GUICtrlSetBkColor
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <ModernMenuRaw.au3>

$hGUI = GUICreate("GUI с кнопкой") 
$Button_1 = GUICtrlCreateButton("Обычная кнопка", 10, 20, 120)
GUICtrlSetBkColor(-1, 0x00ff00) ; Green

GUISetState()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd


Если закомментировать: ;#include <ModernMenuRaw.au3>, то кнопка отображается

Как это исправить?
 
Верх