Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2371
Благодарности: 562

Профиль | Отправить PM | Цитировать


Когда то kotkovets сотворил интересный и полезный код - кнопочный тулбар из bmp

читать дальше »
Код: Выделить весь код
!include "CommCtrl.nsh"
!include "MUI2.nsh"

OutFile "ToolbarButton-test.exe"
ShowInstDetails Show

Page custom CreatePage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
xpstyle off

var dlg
var toolbar

!define ID_0   100
!define ID_1   101
!define ID_2   102
!define ID_3   103
!define ID_4   104
!define ID_5   105
!define ID_6   106
!define ID_7   107
!define ID_8   108
!define ID_9   109

Function CreatePage
    System::Call "comctl32::ImageList_Create(i32,i32,i${ILC_MASK}|${ILC_COLORDDB},i1,i0)i.R8" ;создаем имеджлист
    System::Call 'user32::LoadImage(i0,t"image-line.bmp",i${IMAGE_BITMAP},i0,i0,i${LR_LOADFROMFILE}|${LR_DEFAULTSIZE})i.R9'
    ;загружаем картинку в имеджлист первая картинку имеет индекс - 0
    System::Call "comctl32::ImageList_AddMasked(iR8,iR9,i${CLR_DEFAULT})"
    System::Call "gdi32::DeleteObject(iR9)"
    nsDialogs::Create 1044
    Pop $dlg
    ${NSD_CreateToolbar} 20u 5u 100% 40u ""
    Pop $toolbar
    ${NSD_AddStyle} $toolbar ${WS_BORDER}
    SendMessage $toolbar ${TB_BUTTONSTRUCTSIZE} 20 0
    SendMessage $toolbar ${TB_SETIMAGELIST} 0 $R8 ;созданный имеджлист помещаем на тулбар
    ${NSD_OnNotify} $toolbar toolbar
    
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_0} 0   ; ${NSD_TB_ADDBUTTONS} [хэндл контрола] [ID кнопки] [индекс картинки]
    ${NSD_TB_ADDSEPARATOR} $toolbar  ; добавляем сепаратор(разделитель)
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_1} 1
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_2} 2
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_3} 3
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_4} 4
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_5} 5
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_6} 6
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_7} 7
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_8} 8
    ${NSD_TB_ADDBUTTONS} $toolbar ${ID_9} 9
       
    nsDialogs::Show
    System::Call "comctl32::ImageList_Destroy(iR8)"
FunctionEnd

Function ID_LOAD
    MessageBox MB_OK "$R1 -->  ID_0" IDOK
FunctionEnd

Function ID_1
    MessageBox MB_OK "$R1 -->  ID_1" IDOK
FunctionEnd

Function ID_2
    MessageBox MB_OK "$R1 -->  ID_2" IDOK
FunctionEnd

Function ID_3
    MessageBox MB_OK "$R1 -->  ID_3" IDOK
FunctionEnd

Function ID_4
    MessageBox MB_OK "$R1 -->  ID_4" IDOK
FunctionEnd

Function ID_5
    MessageBox MB_OK "$R1 -->  ID_5" IDOK
FunctionEnd

Function ID_6
    MessageBox MB_OK "$R1 -->  ID_6" IDOK
FunctionEnd

Function ID_7
    MessageBox MB_OK "$R1 -->  ID_7" IDOK
FunctionEnd

Function ID_8
    MessageBox MB_OK "$R1 -->  ID_8" IDOK
FunctionEnd

Function ID_9
    MessageBox MB_OK "$R1 -->  ID_9" IDOK
FunctionEnd

Function toolbar
   System::Store SR2R1R0
   ; NM_CLICK уведомляет родительское окно органа управления, что пользователь щелкнул левой кнопкой мыши в пределах органа управления
   ${If} $R1 == ${NM_CLICK} ;уведомление о клике мыши по тулбару
       System::Call "*$R0(i,i,i,i.R1)"
       ${Select} $R1 ; в $R1 - возвращенный идентификатор кнопки
             ${Case} ${ID_0}
                 Call ID_LOAD
             ${Case} ${ID_1}
                 Call ID_1
             ${Case} ${ID_2}
                 Call ID_2
             ${Case} ${ID_3}
                 Call ID_3
             ${Case} ${ID_4}
                 Call ID_4
             ${Case} ${ID_5}
                 Call ID_5
             ${Case} ${ID_6}
                 Call ID_6
             ${Case} ${ID_7}
                 Call ID_7
             ${Case} ${ID_8}
                 Call ID_8
             ${Case} ${ID_9}
                 Call ID_9
       ${EndSelect}
   ${EndIf}
   System::Store L
FunctionEnd

Section ""
SectionEnd




Но к сожалению этот код нормально компилится только в версии NSIS 2.46. В NSIS 3 получаем ошибку...

И дело похоже в CommCtrl.nsh. Даже откорректированная для NSIS 3 ( из справочника) - не работает.
А не работает наверное потому , что в этом варианте CommCtrl.nsh нет макросов для Toolbar_а (__NSD_TB_ADDBUTTONS и сопутствующее добро... )

Как бы это дело подретушировать для NSIS 3 ? Я в сети находил вариант CommCtrl.nsh с нужными макросами, но подстановка их в CommCtrl.nsh всё равно приводит к ошибке...
читать дальше »
Код: Выделить весь код
${DEFINE} CMB_MASKED              0x02
${DEFINE} TBSTATE_CHECKED         0x01
${DEFINE} TBSTATE_PRESSED         0x02
${DEFINE} TBSTATE_ENABLED         0x04
${DEFINE} TBSTATE_HIDDEN          0x08
${DEFINE} TBSTATE_INDETERMINATE   0x10
${DEFINE} TBSTATE_WRAP            0x20
${DEFINE} TBSTATE_ELLIPSES        0x40
${DEFINE} TBSTATE_MARKED          0x80

${DEFINE} TB_ADDBUTTONS           1044
${DEFINE} TB_INSERTBUTTON         1045
${DEFINE} TB_DELETEBUTTON         1046
${DEFINE} TB_GETBUTTON            1047
${DEFINE} TB_BUTTONCOUNT          1048
${DEFINE} TB_COMMANDTOINDEX       1049
${DEFINE} TB_HITTEST              1093


#################################################################
# ${NSD_TB_ADDBUTTONS}                                          #
#################################################################

!macro __NSD_TB_ADDBUTTONS htoolbar_ ID_CODE_ IMAGE_
        !verbose push
	!verbose ${_COMMCTRL_NSH_VERBOSE}
   Push `${htoolbar_}`
   Push `${ID_CODE_}`
   Push `${IMAGE_}`
   ${CallArtificialFunction} __NSD_TB_ADDBUTTONS_Call
   !verbose pop
!macroend
!macro __NSD_TB_ADDBUTTONS_Call
    System::Store SR2R1R0
    System::Call "*(iR2, iR1, i${TBSTATE_ENABLED}, i${TBSTYLE_BUTTON}, i0, i0)i.R1"
    SendMessage $R0 ${TB_ADDBUTTONS} 1 $R1
    System::Free $R1
    System::Store L
!macroend
${DEFINE} NSD_TB_ADDBUTTONS "!insertmacro __NSD_TB_ADDBUTTONS"
#################################################################
!macro __NSD_TB_ADDSEPARATOR htoolbar_
   !verbose push
	!verbose ${_COMMCTRL_NSH_VERBOSE}
   Push `${htoolbar_}`
   ${CallArtificialFunction} __NSD_TB_ADDSEPARATOR_Call
   !verbose pop
!macroend
!macro __NSD_TB_ADDSEPARATOR_Call
    System::Store SR0
    System::Call "*(i-1, i0, i0, i${TBSTYLE_SEP}, i0, i0)i.R1"
    SendMessage $R0 ${TB_ADDBUTTONS} 1 $R1
    System::Free $R1
    System::Store L
!macroend
${DEFINE} NSD_TB_ADDSEPARATOR "!insertmacro __NSD_TB_ADDSEPARATOR"

!define __NSD_Toolbar_CLASS ${TOOLBARCLASSNAME}
;!define __NSD_Toolbar_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${TBSTYLE_TOOLTIPS}|${TBSTYLE_TRANSPARENT} ;|${CCS_NORESIZE}|${CCS_ADJUSTABLE}
 !define __NSD_Toolbar_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${TBSTYLE_TOOLTIPS}|${TBSTYLE_TRANSPARENT}|${CCS_NORESIZE}|${CCS_ADJUSTABLE}|${CCS_NODIVIDER}
!define __NSD_Toolbar_EXSTYLE 0

!insertmacro __NSD_DefineControl Toolbar

Последний раз редактировалось MKN, 27-05-2020 в 16:17.


Отправлено: 11:30, 18-07-2015 | #1689