|
|
#1 |
|
Junior Member
Join Date: Jan 2005
Posts: 4
|
a message box after MUI_PAGE_DIRECTORY?
Hi,
I have an install script that lets the user choose his install dir using this page: !insertmacro MUI_PAGE_DIRECTORY What I need to do is not allow them to select a directory that contains spaces (ex. "c:\program files\abc" is not allowed). How can I add a function that looks for spaces in the INSTDIR and, if there are spaces, shows a message box and returns back to the MUI_PAGE_DIRECTORY page? Any help is greatly appreciated! Jed |
|
|
|
|
|
#2 |
|
Moderator
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,434
|
You can set up a Leave function like so:
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "checkInstDir" !insertmacro MUI_PAGE_DIRECTORY This is what you need: http://nsis.sourceforge.net/archive/...ances=0,11,122 -Stu |
|
|
|
|
|
#3 |
|
Senior Member
Join Date: Sep 2004
Location: Wisconsin, US
Posts: 258
|
JedBartlett,
Add this line right above your !insertmacro MUI_PAGE_DIRECTORY line: !define MUI_PAGE_CUSTOMFUNCTION_LEAVE "DirectoryLeave" Then add a function like this: Function DirectoryLeave <check $INSTDIR for spaces here, goto end if no spaces> MessageBox MB_OK "$INSTDIR contains spaces, try again" Abort End: FunctionEnd This will allow the user to hit the next or install button, but will then run the DirectoryLeave function, and if your $INSTDIR contains spaces, will show the messagebox and loop them back to the MUI_PAGE_DIRECTORY page to allow them to fix their error. As for the <check $INSTDIR for spaces here, goto end if no spaces>, I’m not sure how to check for spaces in a string ($INSTDIR), but someone will come along shortly and tell you that part. This should get you started, I’ll keep checking on that line. |
|
|
|
|
|
#4 |
|
Senior Member
Join Date: Sep 2004
Location: Wisconsin, US
Posts: 258
|
How about this:
C.4 Search in a string ; StrStr ; input, top of stack = string to search for ; top of stack-1 = string to search in ; output, top of stack (replaces with the portion of the string remaining) ; modifies no other variables. ; ; Usage: ; Push "this is a long ass string" ; Push "ass" ; Call StrStr ; Pop $R0 ; ($R0 at this point is "ass string") Function StrStr Exch $R1 ; st=haystack,old$R1, $R1=needle Exch ; st=old$R1,haystack Exch $R2 ; st=old$R1,old$R2, $R2=haystack Push $R3 Push $R4 Push $R5 StrLen $R3 $R1 StrCpy $R4 0 ; $R1=needle ; $R2=haystack ; $R3=len(needle) ; $R4=cnt ; $R5=tmp loop: StrCpy $R5 $R2 $R3 $R4 StrCmp $R5 $R1 done StrCmp $R5 "" done IntOp $R4 $R4 + 1 Goto loop done: StrCpy $R1 $R2 "" $R4 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Exch $R1 FunctionEnd |
|
|
|
![]() |
|
|||||||
| Thread Tools | Search this Thread |
| Display Modes | |
|
|