2012-08-01 42 views
0

目前我正在爲我們的產品通過NSIS開發安裝包,但是,我們的產品經理不喜歡MUI_PAGE_COMPONENTS的默認樣式,所以我不知道如何通過NSIS實現組件頁面,同時刪除描述框和何時鼠標懸停在組件上的工具提示將給出說明如何通過NSIS在MUI_PAGE_COMPONENTS中實現工具提示效果?

感謝您的所有時間!

回答

0
!define MUI_COMPONENTSPAGE_NODESC 

將從組件頁面

2
!define MUI_COMPONENTSPAGE_NODESC 
!include MUI2.nsh 
!include LogicLib.nsh 

!insertmacro MUI_PAGE_COMPONENTS 
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_LANGUAGE English 

Section Foo SID_FOO 
SectionEnd 
Section Bar SID_BAR 
SectionEnd 
Section Baz SID_BAZ 
SectionEnd 

var ttip 

!define WS_POPUP 0x80000000 
!define TTF_SUBCLASS 0x010 
!define /math TTM_ACTIVATE ${WM_USER} + 1 
!define /math TTM_ADDTOOL ${WM_USER} + 4 
!define /math TTM_SETTOOLINFO ${WM_USER} + 9 
!define /math TTM_TRACKACTIVATE ${WM_USER} + 17 
!define /math TTM_TRACKPOSITION ${WM_USER} + 18 
!define /math TTM_POP ${WM_USER} + 28 
!define /math TTM_POPUP ${WM_USER} + 34 

Function .onMouseOverSection 
${If} $0 = -1 
killtip: 
    SendMessage $ttip ${TTM_ACTIVATE} 0 0 
    Return 
${EndIf} 
StrCpy $2 "" 
${If} $ttip = 0 
    System::Call 'USER32::CreateWindowEx(i${WS_EX_TOPMOST},t"tooltips_class32",i,i${WS_POPUP},i,i,i,i,i0,i,i,i)i.r2' 
    StrCpy $ttip $2 
${EndIf} 
StrCpy $1 "" 
${Select} $0 
${Case} ${SID_FOO} 
    StrCpy $1 "Foo?" 
${Case} ${SID_BAR} 
    StrCpy $1 "BarBarBar" 
${Case} ${SID_BAZ} 
    StrCpy $1 "Baaaaaaaaaaaaaaaaaz!!!" 
${EndSelect} 
FindWindow $3 "#32770" "" $HWNDPARENT 
System::Call '*(i40,i${TTF_SUBCLASS},i$3,i0x408,i,i,i,i,i0,tr1)i.r1' 
SendMessage $2 ${TTM_ADDTOOL} 0 $1 
SendMessage $ttip ${TTM_SETTOOLINFO} 0 $1 
SendMessage $ttip ${TTM_ACTIVATE} 1 0 
SendMessage $ttip ${TTM_TRACKACTIVATE} 1 $1 
System::Free $1 
${If} $2 <> 0 
    ;BUGFIX: Sometimes we get an initial onMouseOverSection call with no place to show a tip 
    System::Call 'USER32::IsWindowVisible(ir3)i.r0' 
    ${IfThen} $0 = 0 ${|} goto killtip ${|} 
${EndIf} 
FunctionEnd 
+0

大卸下描述,這就是我需要的,我想我必須寫一個自定義的DLL和從腳本雖然,大加讚賞叫! – whossa 2012-08-03 02:15:44

相關問題