purebasic.info

PureBasic forum
Текущее время: Ср ноя 14, 2018 4:30 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 114 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.
Автор Сообщение
 Заголовок сообщения: Библиотека XP_Menu_Lib
СообщениеДобавлено: Вс ноя 09, 2008 8:54 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Данная библиотека позволяет сделать у меню стиль XP
Бета версия библиотеки готова, :) она в архиве. Там же есть пример использования.
Компилировалась и проверялась в PB 4.00


Пока справку не делал, рано ещё, поэтому вкратце расскажу как пользоваться.
После создания окна и меню нужно создать системный обработчик событий с помощью SetWindowCallback()
В процедуре-обработчике событий нужно вызывать процедуру
Код:
1
XP_Menu_CB(WindowID, Message, wParam, lParam)




Далее в основной проге регистрируем меню с помощью
Код:
1
XP_MenuRegister(HandeMenu, State, MenuType)


Первый параметр - системный ID меню получаемый с помощью MenuID

Второй параметр - 0 - обычное меню (константа #XP_DelMenu); 1 - XP меню (константа #XP_RegMenu). Можно менять во время работы проги.

Третий параметр - тип меню. 0 - главное меню (константа #XP_RegGeneraMenu ); 1 - контекстное меню (константа #XP_RegPopupMenu); 2 - системное меню (константа #XP_RegSysMenu)

При необходимости можно изменять основные параметры меню, например цвета.
Для этого нужно прочитать данные с помощью XP_MenuGetStructure которые запишутся в структуру Xp_MenuData
Затем изменяем интересующее значение и отсылаем данные в библиотеку с помощью XP_MenuSetStructure

Вот сама структура. Она уже объявлена.
Цитата:
Structure Xp_MenuData
ColFillColor.l ; Цвет выделенной части
FrameColor.l ; Цвет окантовки пункта
BackgroundColor.l ; Фоновый цвет меню
TextSelectColor.l ; Цвет текста выбранного пункта меню
TextNormalColor.l ; Цвет текста НЕ выбранного пункта меню
HeightItem.c ; Высота пункта меню в пикселях
IconBarSize.c ; Ширина области значков
IconBarColor.l ; Цвет области значков
EndStructure


-----------------
Библиотека для PB 4.00 - 4.20 http://purebasic.info/phpBB2/download.php?id=200
Для 4.30 http://purebasic.info/phpBB2/download.php?id=199
Для 4.40 http://purebasic.info/phpBB2/download.php?id=479


Вложения:
XP_Menu_Lib_1.rar [7.99 KiB]
Скачиваний: 476

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Последний раз редактировалось Пётр Ср дек 09, 2009 3:52 pm, всего редактировалось 3 раз(а).
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 09, 2008 9:33 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6397
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Протестировал в версии 4.02. работает нормально, выходной файл чуть больше 28 кб., вполне приемлемо. Была бы интересна фишка, когда за областью значков можно можно вставлять вертикальную надпись по всей длине открываемого меню. А так же менять шрифт и его размер.

По примеру меню где такая структура ( где то в кодархиве)

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Structure LPMENU
  MenuFont.l
  MenuColor.l
  FrameColor.l
  SideBarWidth.l
  GradStartColor.l
  GradEndColor.l
  SelGradStartColor.l
  SelGradEndColor.l
  SideText.s
  SideText1Color.l
  SideText2Color.l
  CheckColorEnable.l
  CheckColorDisable.l
  SelectorFrameColor.l
  SelectorTextColor.l
  ImageWidth.l
  ImageHeight.l
EndStructure
 
 
 
 


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 09, 2008 11:25 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
kvitaliy писал(а):
А так же менять шрифт и его размер
Это про текст самого меню?
Это запланировано в следующей версии. Там нужно будет только в вести соответствующий член структуры или отдельную функцию.
Ведь в данный момент принудительно устанавливается шрифт MS Sans Serif с размером 8.
Так же хочу в вести значки в меню, но пока ещё не получилось это...

kvitaliy писал(а):
Была бы интересна фишка, когда за областью значков можно можно вставлять вертикальную надпись по всей длине открываемого меню

Сделать это можно, ведь для создания области значков используется CreateImage().
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Procedure DrawSimpleSidebar(windowid,BarWidth)
Shared x_image
 If IsImage(x_image)
  FreeImage(x_image)
 EndIf
Shared x_image
Height     = GetMenuHigh(windowid,hMenu)
x_image    = CreateImage(#PB_Any,BarWidth,Height)
HBmp       = ImageID(x_image)
HBmpWidth  = BarWidth
HBmpHeight = Height
 
StartDrawing(ImageOutput(x_image))
 Box(0,0,BarWidth,Height,RGB(236, 241, 247))
StopDrawing()
 
EndProcedure



Нужно только разобраться как выводить текст в вертикально направлении.
И ещё один момент.
Если не предпринять специальных мер, то эта надпись будет во всех меню, а это не всегда желательно.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 10, 2008 5:11 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Ещё побегал с бубном вокруг компа. :D :D
Получилось так

Изображение

Что нового.
Появилась функция
Код:
1
XP_SetMenuFont(FontID)

с помощью которой можно установить желаемый шрифт, используемый в меню.

Появилась функция
Код:
1
XP_MenuDefault()

с помощью которой можно установить все настройки по умолчанию.

В конце функции XP_MenuRegister появился необязательный параметр WindowID.
Он нужен только если регистрируется главное меню и чтобы своевременно обновлять его при переключении стилей.
Для других типов меню, значение этого аргумента игнорируется.

Как видите поялилась градиентная раскраска области значков.
Поэтому члена IconBarColor структуры GeneralData больше нет, но зато появились члены
Цитата:
IconBarGradientStartColor.l ; Начальный (левый) цвет градиента области значков
IconBarGradientEndColor.l ; Конечный (правый) цвет градиента области значков

Изменять данные в структуре можно с помощью пары функций XP_MenuGetStructure и XP_MenuSetStructure

Цитата:
выходной файл чуть больше 28 кб., вполне приемлемо
при этом сама библиотека занимает примерно 8Кб. :)

Цитата:
Была бы интересна фишка, когда за областью значков можно можно вставлять вертикальную надпись по всей длине открываемого меню
смотрел на процедуру DrawGradientSidebar исходника Popup-Menu_OfficeXP-Style2.pb и чтото не мог понять как вертикать надпись выводится.
У меня только горизнтально получалось. :(


Вложения:
XP_Menu_Lib_v1.1.rar [23.2 KiB]
Скачиваний: 432

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 11, 2008 12:02 am 
Не в сети
студент

Зарегистрирован: Пн ноя 10, 2008 8:49 pm
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Как вы однако мучаетесь, парни... В сях на МФСе это делается за 3 минуты.


Последний раз редактировалось Хацкер Ср ноя 12, 2008 9:34 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 11, 2008 6:46 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6397
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
И весить в Сях это будет 300 метров...

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 11, 2008 11:04 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Исправил искажения цвета градиента в области значков.
Вот скрины нескольких стилей меню

Изображение Изображение Изображение

Уже неплохо получилось. Правда цвета не идеально подобраны, но если немного посидеть и поэкстериментировать, то думаю это тоже сделать можно.
Конечно не полная копия, но в большенстве случаев в полне достаточно похожего на офисное меню.
По крайнем мере 10Кб это не 172Кб как у CoolMenu.dll
Да и у этой библиотеки можно выбирать какое меню будет иметь офисный стиль а какое нет.
Кстати, если нужно, то можно сделать индивидуальную настройку цветов для каждого меню в отдельности. :shock:

kvitaliy писал(а):
Была бы интересна фишка, когда за областью значков можно вставлять вертикальную надпись по всей длине открываемого меню.

Пётр писал(а):
Если не предпринять специальных мер, то эта надпись будет во всех меню, а это не всегда желательно

Есть такая идея.
Добавить возможность править картинку области значков в проге пользователя.
Можно добавить возможность вызова процедуры пользователя по её адресу (через собаку то есть).
Процедуре будет передан идентификатор рисунка гда нужно нарисовать надпись, а для того чтобы понять какое сейчас меню собирается отобразится, будут передаваться ещё и ID меню, ID текущего пункта меню, имя заголовка меню.
Исходя из этих данных можно решать нужна ли в данном меню надпись.
Что скажите?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 11, 2008 2:18 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Иконки в меню. :)
Изображение

Надпись PB это текст, но он выведен горизонтально, а как его веркикально отобразить с помощью 2D функций из Пурика я не знаю. :(

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 11, 2008 3:27 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн ноя 03, 2008 9:46 pm
Сообщений: 62
Откуда: г. Майкоп
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
в 4.20 работает нормально :) мну понравилось :)

_________________
- Самый короткий вирус написан программистом из нашей фирмы - он занимает 0 байт, и даже автор не знает, что он делает.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 11, 2008 8:16 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
"Добил" значки и "взломал" галки (отмеченые пункты)
Зацените библиотеку! При этом учитывайте что в исполняемом файле она занимает всего 11Кб. :shock: :shock: Оно и понятноо, пурик создаёт ну очень компактный код.

Изменения

Функции XP_MenuDefault больше нет.
Её заменили
Код:
1
2
XP_Menu_XP_Default() ; Установка всех натроек  в стиль офис XP
XP_Menu_2003_Default() ; Установка всех настроек в стиль офис 2003


Библиотеку похоже нужно переименовать в Office_Menu_Lib. Посто когда её делал о стиле "Офис 2003" даже и не мечтал. 8)

Появилась функция
Код:
1
XP_GetMenuItemText(MenuID, Item) ; Читаем текст из пункта меню

с помощью которой нужно читать текст из пунктов меню если применён один из стилей, посколку встроеная функция GetMenuItemText даёт сбой при этом.

Появилась функция
Цитата:
XP_MenuSetIcon(MenuID, itemID, IconID)
которая загружает иконки в меню.

Структура сейчас имеет такой вид
Цитата:
Structure Xp_MenuData
ColFillColor.l ; Цвет выдделеной части
FrameColor.l ; Цвет оконтовки пункта
BackgroundColor.l ; Фоновый цвет меню
TextSelectColor.l ; Цвет текста выбраного пункта меню
TextNormalColor.l ; Цвет текста НЕ выбраного пункта меню
HeightItem.c ; Высота пункта меню в пикселях
IconBarSize.c ; Ширина обсласти значков
;IconBarColor.l ; Цвет области значков
IconBarGradientStartColor.l ; Начальный (левый) цвет градиента области значков
IconBarGradientEndColor.l ; Конечный (правый) цвет градиента области значков
MenuFontID.l ; Идентификатор используемлго шрифта

; Галочка
CheckBoxEnableActive_CHECK_Color.l ; Цвет ГАЛОЧКИ когда пункт активен и на него наведён курсор мышки
CheckBoxEnable_CHECK_Color.l ; Цвет ГАЛОЧКИ когда пункт активен и на него НЕ наведён курсор мышки
CheckBoxDisableActive_CHECK_Color.l ; Цвет ГАЛОЧКИ когда пункт пассивен и на него наведён курсор мышки
CheckBoxDisable_CHECK_Color.l ; Цвет ГАЛОЧКИ когда пункт пассивен и на него НЕ наведён курсор мышки
CheckBoxEnableActive_BACK_Color.l ; Цвет ФОНА галочки когда пункт активен и на него наведён курсор мышки
CheckBoxEnable_BACK_Color.l ; Цвет ФОНА галочки когда пункт активен и на него НЕ наведён курсор мышки
CheckBoxDisableActive_BACK_Color.l ; Цвет ФОНА галочки когда пункт пассивен и на него наведён курсор мышки
CheckBoxDisable_BACK_Color.l ; Цвет ФОНА галочки когда пункт пассивен и на него НЕ наведён курсор мышки
CheckBoxEnableActive_FRAME_Color.l ; Цвет ОБРАМЛЕНИЯ галочки когда пункт активен и на него наведён курсор мышки
CheckBoxEnable_FRAME_Color.l ; Цвет ОБРАМЛЕНИЯ галочки когда пункт активен и на него НЕ наведён курсор мышки
CheckBoxDisableActive_FRAME_Color.l ; Цвет ОБРАМЛЕНИЯ галочки когда пункт пассивен и на него наведён курсор мышки
CheckBoxDisable_FRAME_Color.l ; Цвет ОБРАМЛЕНИЯ галочки когда пункт пассивен и на него НЕ наведён курсор мышки

EndStructure


Пробуйте, оценивайте...

PS.
Я вот одного не могу понять.
Что на ОФ. форуме никто ничего подобного сделать не мог?
Скажем я практически не знаю API (а в библиотеке API как собак не резаных :) ) и ничего, пишу. Это значит что подобное может зделать КАЖДЫЙ (я не приувеличиваю).
А на ОФ. форуме есть много умных людей...


Вложения:
XP_Menu_Lib_1.2.rar [27.19 KiB]
Скачиваний: 452

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 12, 2008 5:24 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Итак, подвожу некоторые итоги.
В библиотеке есть почти всё что мне требовалось. Она в месте со справкой в архиве. :)
Можете её использовать в Ваших программах. :) :)

PS.
Тут меня посетила бредовая идея поместить её на страничку http://www.purearea.net/pb/english/userlibs.php но незнаю как это сделать. :(
В крайнем случае на оф. форум.
Уверен, многие спасибо скажут. :D


Вложения:
XP_Menu_Lib v 1.2.rar [58.38 KiB]
Скачиваний: 455

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 12, 2008 5:53 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Пн ноя 03, 2008 9:46 pm
Сообщений: 62
Откуда: г. Майкоп
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
ну мну ещё прикалывает модернлук режим в PB :)

Изображение

в твоей библии хорошо, что цвета можно поменять, а так через API это не так удобно :)

вывод : хорошая библия :)

_________________
- Самый короткий вирус написан программистом из нашей фирмы - он занимает 0 байт, и даже автор не знает, что он делает.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 12, 2008 6:25 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Кстати, при компиляции в PB 4.20 есть расхождения в значках по сравнению с PB 4.00. :shock:
Странно! :?
Вот скрин из PB4.20
Изображение

А вот из PB4.00
Изображение

SaYLOR писал(а):
через API это не так удобно
Да это понятно, делал эту либу почти полностью на API - врагу не пожелаешь!

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 13, 2008 9:49 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Пётр писал(а):
В крайнем случае на оф. форум.
Выложил библиотеку на оф. форуме. http://www.purebasic.fr/english/viewtopic.php?t=35149&start=0&postdays=0&postorder=asc&highlight=&sid=1dea3623b2a072175fa667a1524a003c
Правда, я английский не знаю, а писал там с помощью "Сократа персонального" :shock:

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 13, 2008 10:43 am 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Выложил библиотеку на оф. форуме.

Теперь они все свои буржуйские мозги сломают в поисках причины, за что русского отругать, подколоть или придраться.
Что-нибудь обязательно им не понравится, я буду следить, что именно.

Или будут втупую игнорировать тему и отмалчиваться.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 114 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB