Sorting Components
From NSIS Wiki
Jump to navigationJump to search
Author: KiCHiK (talk, contrib) |
The following script shows how to sort components in the components page under a certain group. It was written for theAdib in the forums. His intention was to keep sections sorted for all available languages.
!define TVGN_ROOT 0 !define TVGN_NEXT 1 !define TVGN_NEXTVISIBLE 6 !define TVIF_TEXT 1 !define TVM_GETNEXTITEM 4362 !define TVM_GETITEMA 4364 !define TVM_GETITEMW 4414 !define TVM_SORTCHILDREN 4371 !define TVITEM '(i, i, i, i, i, i, i, i, i, i)' !ifdef NSIS_UNICODE !define TVM_GETITEM ${TVM_GETITEMW} !else !define TVM_GETITEM ${TVM_GETITEMA} !endif Page components "" compShow Page instfiles XPStyle on Name "test" OutFile "test.exe" Section ztest SectionEnd SectionGroup /e test Section c SectionEnd Section b SectionEnd Section a SectionEnd SectionGroupEnd Function compShow FindWindow $0 "#32770" "" $HWNDPARENT GetDlgItem $0 $0 1032 SendMessage $0 ${TVM_GETNEXTITEM} ${TVGN_ROOT} 0 $1 System::Alloc ${NSIS_MAX_STRLEN} Pop $2 loop: System::Call '*${TVITEM}(${TVIF_TEXT}, r1,,, r2, ${NSIS_MAX_STRLEN},,,,) i .r3' SendMessage $0 ${TVM_GETITEM} 0 $3 System::Call '*$2(&t${NSIS_MAX_STRLEN} .r4)' StrCmp $4 "test" 0 +2 ### CHANGE ME Goto found SendMessage $0 ${TVM_GETNEXTITEM} ${TVGN_NEXTVISIBLE} $1 $1 StrCmp 0 $1 done loop found: SendMessage $0 ${TVM_SORTCHILDREN} 0 $1 # recursive - SendMessage $0 ${TVM_SORTCHILDREN} 1 $1 done: System::Free $2 System::Free $3 FunctionEnd