From: Art H. <art...@ar...> - 2013-06-30 20:41:42
|
<html><head><meta name="Generator" content="PSI HTML/CSS Generator"/> <style type="text/css"><!-- body{font-family:'Tahoma';font-size:12pt;font-color:'#000000';} LI{display:list-item;margin:0.00in;} p{display:block;margin:0.00in;} body{} --></style> </head><BODY ><div><SPAN style="font-size:12pt;color:navy;">Yes, I have the default working in my main program, and it has been</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">for awhile.  I was wanting to get around the delay time by using an</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">Ok button to signal when the selection was what I wanted.  I have</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">built a small test case that seems to want to work, but on the second</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">character input I get a 0x0005 (op code?) violation -not sure where</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">as I am not familiar with how to peruse that type of error.  I will</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">zip up the three files (rex, rc and h) for the test and you can tell me</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">where I have made a stupid mistake !! (sending to your private addr)</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">Really hate to bother you on a weekend, but do appreciate your help.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">   Art</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">> Art,</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> This is what the MSDN docs say about the default processing by the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> listbox of the WM_CHAR message:</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> "Moves the selection to the first item that begins with the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> character the user typed. If the list box has the LBS_OWNERDRAW</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> style, no action occurs.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> Multiple characters typed within a short interval are treated as a</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> group, and the first item that begins with that series of</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> characters is selected."</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> Below is a very simple listbox that demonstrates the default</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> incremental search.  If I run it and type in A C T and hit enter, I</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> get this back:</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> User searched for and found: ActionCenter.dll</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> So, it seems to work pretty good.  The only thing I don't like is</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> the delay time before it stops treating the letters as a group.  If</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> you type A C and delay a bit, when you type T it takes you to: </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> t2embed.dll</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> This would be a dialog to start with and use to implement your own</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> incremental search:</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> /* Simple Dialog listBoxSearch.rex */</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> symbolMap = .table~new</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> symbolMap[IDC_LB_FILEs] = 200</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> --symbolMap[] =</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> --symbolMap[] =</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> .application~setDefaults('O', symbolMap, .false, 'Courier New', 10)</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> dlg = .SimpleDialog~new</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> if dlg~initCode = 0 then do</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">>   if dlg~execute("SHOWTOP") == dlg~IDOK then do</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">>     say 'User searched for and found:' dlg~searchAndFound     end  </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">>   else do       say 'User canceled'     end   end</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> return 0</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> -- End of entry point.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> ::requires "ooDialog.cls"</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> ::class 'SimpleDialog' subclass UserDialog</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> ::attribute searchAndFound get</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> expose selectedText</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> return selectedText</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> ::method init</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> expose selectedText</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> forward class (super) continue</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> title = "Directory Listing with Search"</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> self~create(30, 30, 186, 124, title, "CENTER")</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> selectedText = ''</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> ::method defineDialog</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">>   style = 'VSCROLL HSCROLL PARTIAL SORT NOTIFY'</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">>   self~createListBox(IDC_LB_FILES, 10, 10, 166, 90, style)    </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> self~createPushButton(IDOK, 126, 105, 50, 14, 'DEFAUT', "Ok")    </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> self~createPushButton(IDCANCEL, 74, 105, 50, 14, ,"Push Me")</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> ::method initDialog</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> expose lb</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> lb = self~newListBox(IDC_LB_FILES)</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> attributes = "READWRITE READONLY HIDDEN SYSTEM DIRECTORY ARCHIVE"  </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> lb~addDirectory("C:\Windows\System32\*", attributes)</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> ::method ok unguarded</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> expose lb selectedText</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> selectedText = lb~selected</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> return self~ok:super</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> ::method cancel unguarded</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> msg   = 'Haa - tricked you. Push Me is actually cancel'   title =</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> "You Have Just Been Canceled"   ret = MessageDialog(msg, self~hwnd,</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> title)   return self~cancel:super</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> On Sun, Jun 30, 2013 at 11:49 AM, Mark Miesfeld</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> <mie...@gm...> wrote:</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> Hi Art,</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> I've never tried something like that, but this is how I would</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> start.</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> Set an exposed variable to the empty string.  Connect the onChar</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> event to the listbox.  When the event handler is invoked, append</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> the character to the exposed variable.  Then use the find()</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> method using the exposed variable string as the textOrPrefix,</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> probably the current index as the startIndex, and exact as false.</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> If you get a hit, move the selection to the returned index.  Each</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> time a new character comes in, it is appended to the current</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> search string and find() is invoked again.  I think that should</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> get you close, then you run it and see what doesn't work.  </SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> You want to set up your onChar handler so that the character is</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> not passed on to the listbox.  I'm hoping the docs are sufficient</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> for you to determine how to do that.  I'm not being secretive, if</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> I remembered off of the top of my head I'd just tell you.</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> One thing that thing I can think of that might take a little</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> thought is what to do if the find() does not produce a hit.</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> Also, you'll need to figure out when to set the search string</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> back to the empty string.</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> Let me know if you are having problems.  If I have a little time,</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> I'll probably play with it a bit.</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> The other thing is, the listbox seems to already have a search</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> function built in.  You do realize that don't you?  I suspect you</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> are asking because the built in procedure is not sufficient for</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> what you want.  I don't have any example programs around that</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> have very many items in a listbox, but it seems to work somewhat.</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> --</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> Mark Miesfeld</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> On Sun, Jun 30, 2013 at 10:33 AM, Art Heimsoth</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> <art...@ar...> wrote:</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> I am trying to locate a string in a listbox by typing the</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> characters, but</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> I want the number of characters to be variable.  For example, in</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> looking for names in a listbox, I would like to start typing and</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> for each character bring up the next matching string.  I am using</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> Find and I understand I can specify a multiple character string,</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> but I would like for the listbox find to select the first item</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> matching the first character, allow me to enter another character</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> and have the find select the string that now matches both</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> characters, repeating until the Enter key is pressed where the Ok</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> button would then cause the currently selected string to be</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> retrieved, but how would I approach this?  How would I define an</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> onChar event on the listbox to allow me to build the string to be</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> passed to the find?  Any suggestions as to approach appreciated.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> --</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> Art Heimsoth - art...@ar...</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>></SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> ----------------------------------------------------------------</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> --------------</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> This SF.net email is sponsored by Windows:</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> Build for Windows Store.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> <a href="http://p.sf.net/sfu/windows-dev2dev">http://p.sf.net/sfu/windows-dev2dev</a></SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> _______________________________________________</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> Oorexx-users mailing list</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> Oor...@li...</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> <a href="https://lists.sourceforge.net/lists/listinfo/oorexx-users">https://lists.sourceforge.net/lists/listinfo/oorexx-users</a></SPAN><SPAN style="font-size:12pt;"><br /><br /><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |