|
|
#1 |
|
Guest
Posts: n/a
|
Listbox Help
Hello,
How do I undate a ListBox dynamically ? I want to design a screen with the following fields: - a directory selection field - a listbox - 5 button (add, remove, up, down, clear), where Add adds an entry to the list (the value from the directory field). Remove removes the selected item from the list, Up/Down move the selected item up/down in the list, and clear clears the list. Assistance is much appreciated. |
|
|
|
#2 |
|
Moderator
Join Date: Jun 2002
Location: ${NSISDIR}
Posts: 2,775
|
-create a installoptions page with the needed controls
-add the notify flag to the buttons -in the leave function for the page, change the contents of the listbox as needed using the system plugin (InstallOptionsEx might support updating the items without using the system plugin) IntOp $PostCount $PostCount + 1 |
|
|
|
|
|
#3 |
|
Moderator
Join Date: Nov 2002
Location: Birmingham, England
Posts: 8,202
|
To add items to list box you can do the following:
code: I might have the second InstallOptions function named wrongly... You'll have to check! There are other ListBox messages which you'll have to search for either on Google, or MSDN. -Stu Need an installer? http://www.afrowsoft.co.uk |
|
|
|
|
|
#4 | |
|
Major Dude
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Guest
Posts: n/a
|
Thanks for your help. Thanks for the link to the SendMessage function.
How do I get the selected item ... like so ? GetDlgItem $R1 $hwnd 1204 # 1200 + Field # - 1 SendMessage $R1 ${LB_GETCURSEL} 0 0 Pop $R2 How do I selected an item ... |
|
|
|
#6 |
|
Guest
Posts: n/a
|
If anyone has any ideas, please help ...
Thank you. |
|
|
|
#7 |
|
Moderator
Join Date: Nov 2002
Location: Birmingham, England
Posts: 8,202
|
Use this to select a range of items:
!define LB_SELITEMRANGEEX 0x0183 SendMessage $R0 ${LB_SELITEMRANGEEX} ${From} ${To} ${From} is index to start from, and ${To} is where to stop. First item would be index 0 (zero based). Edit: And to un-select all the items again, use: !define LB_SETSEL 0x0185 SendMessage $R0 ${LB_SETSEL} 0 -1 -Stu Need an installer? http://www.afrowsoft.co.uk |
|
|
|
|
|
#8 |
|
Guest
Posts: n/a
|
Thanks Stu,
One last question (I think) ... I guess, to get the selected index, I need to define LB_GETSEL. What I am unsure about is hoe how to get the selected index, the value... How do I get the value... I guess what I am unclear about is how to get a value from a function, either one that I have definedd or a pre-defined method, like SendMessage. Thanks again. |
|
|
|
#9 |
|
Moderator
Join Date: Nov 2002
Location: Birmingham, England
Posts: 8,202
|
The last paramatar for SendMessage can be the return value, and so:
SendMessage $R0 ${LB_GETSEL} 0 0 $R0 $R0 == current selected index -Stu Need an installer? http://www.afrowsoft.co.uk |
|
|
|
|
|
#10 |
|
Guest
Posts: n/a
|
Thanks Stu, after posting that message, I tried it and it worked. I didn't get a chance to update ths thread.
I also tried the same approach for LB_GETTEXT (I think) to get the value, but I am getting -1. I wil read up.. but if you done this, I would appreciate if you could post the SendMessage call you used to get the selected value Thanks a Lot ! Peter |
|
|
|
#11 |
|
Moderator
Join Date: Nov 2002
Location: Birmingham, England
Posts: 8,202
|
If you want to get the current selected item in an InstallOptions ListBox, just use ReadINIStr, else this should work:
!define LB_GETSEL 0x0187 GetDlgItem $R1 $hwnd 1204 # 1200 + Field # - 1 SendMessage $R1 ${LB_GETSEL} 0 0 $R1 $R1 == selected index -Stu Need an installer? http://www.afrowsoft.co.uk |
|
|
|
|
|
#12 |
|
Guest
Posts: n/a
|
Thanks for your help ! Much Appreciated !
Peter |
|
|
|
#13 |
|
Guest
Posts: n/a
|
Actually Stu,
If you do not mind answering one more question... The GETSEL does not see to work .. but the ReadINIStr does... so be it. What I want to do is read all its entries, then traverse them .. and write out each one in a file. I know how to write the file.. i need to do two thigs. 1) Read all the entries State returns the selected value, ListItems .. no.. Text .. no.. 2) Enumerate each "line" Anyone .. ? thanks !!! |
|
|
|
#14 |
|
Guest
Posts: n/a
|
I guess to get all, I can select them all (with SendMessage), and then get them using ReadINI... I will try it.. this is the first thought that came to mind.. and might be a weird way
|
|
|
|
#15 |
|
Moderator
Join Date: Nov 2002
Location: Birmingham, England
Posts: 8,202
|
I'm not sure if that will work. You're adding items with SendMessage but I don't know if the InstallOptions dll will write the added items back to the INI file afterwards...
There's probably a LB_GETRANGE message but I'll have to try it out when I get home (can't do anything here at college!) -Stu Need an installer? http://www.afrowsoft.co.uk |
|
|
|
|
|
#16 | |
|
Major Dude
|
Quote:
|
|
|
|
|
|
|
#17 |
|
Guest
Posts: n/a
|
As Stu indicated, the ReadINIStr will read it from the current selected item. If I go next them back, the list is clear again.. need to write it to the ini or store it in a variable.
How do I write it to the ini ReadINIStr ? Also, how to get all the values ? Whould writing to the ini, then reading ini (ReadStr), state give me the values.. I will try it.. Thanks |
|
|
|
#18 |
|
Moderator
Join Date: Nov 2002
Location: Birmingham, England
Posts: 8,202
|
To write to the list, use WriteINIStr
![]() You can read the list items and then loop through them using this function: http://nsis.sourceforge.net/archive/...php?pageid=294 Do a loop like so: code: -Stu Need an installer? http://www.afrowsoft.co.uk |
|
|
|
|
|
#19 |
|
Junior Member
Join Date: Mar 2005
Location: SF
Posts: 9
|
Hey guys, I'm doing something very similar and wanted to ask some specific questions. I'm using sendmessage to add items to a listbox. On "next", i need to get all the values in the listbox. As deguix said, the added items by sendmessage do not go into the ListItems, so how do I make it go in there, so then I can get it out, and also if I go to next page and then back, the list will still be there?
So, repeating PeterDev's question - how do I get all the values (on "Next")?, what're the specific sendmessage commands to do this? If I can do this, then I can use writeinistr to put it in the ListItems. Any help would be greatly appreciated!! |
|
|
|
|
|
#20 | |
|
Member
Join Date: Jun 2006
Location: Paris - FR
Posts: 58
|
Quote:
shouldn't it be : StrCmp $R0 "" 0 Loop ;loop if more list items instead of what you write : StrCmp $R0 0 Loop ;loop if more list items Moreover, i didn't understand how to get all the values from a listbox in installoptions so i can "push $R0" where $R0 is the input string of the listItems. Do i have to use GetDlgItem and SendMessage to do so ? |
|
|
|
|
|
|
#21 |
|
Moderator
Join Date: Nov 2002
Location: Birmingham, England
Posts: 8,202
|
Yes it should be StrCmp $R0 "" 0 Loop.
Read from the State or ListItems flag with MUI_INSTALLOPTIONS_READ -Stu Need an installer? http://www.afrowsoft.co.uk |
|
|
|
|
|
#22 |
|
Member
Join Date: Jun 2006
Location: Paris - FR
Posts: 58
|
Great Afrow UK, i didn't know ListItems Flag was readable.
It now works as expected. Thx |
|
|
|
![]() |
|
|||||||
| Thread Tools | Search this Thread |
| Display Modes | |
|
|