From: Oliver S. <oli...@si...> - 2013-06-24 21:59:53
|
In Exercise08 of the ooDialog Guide, I've introduced drag/drop of Product and/or Customer onto the Order Form. All works fine except for the following sequence: (a) Surface an Order Form (by dbl-clk on OrderForm icon in the Order Management dialog) (b) Surface a Product (dbl-clk on Product List then dbl-clk on any item in the listview) (c) Drag the Product to the OrderForm. In this case, the following error occurs: Error 97 running D:\...\Exercise08\Order\OrderFormView.rex line 809: Object method not found Error 97.001: Object "ECPRODNUM" does not understand message "SETTEXT" However, this error does not occur if, before the first drag of a product to the order form, I click on the "Order Lines" tab on the Order Form. I believe what's happening in the error situation is that the Order Lines control dialog is not being initialised properly. It's necessary first to click on the Order Lines tab. After that, I can drag a product onto the Customer tab and all works fine (except of course I don't see the result until the Order Lines tab is clicked) or onto the Order Lines tab. So to my question: How do I initialise a control dialog that is initially hidden (i.e. not on top) without clicking on its tab? Is it just a matter of invoking ~execute for both control dialogs as part of the OrderForm's initialisation? Or is this not possible? My initial attempts to do this result in errors. Many thanks for any help. Btw, the code is in svn.code...ooDialog\trunk\examples\userGuide/Exercises/Exercise08. -- Oliver Sims |
From: Mark M. <mie...@gm...> - 2013-06-24 22:52:58
|
On Mon, Jun 24, 2013 at 2:58 PM, Oliver Sims < oli...@si...> wrote: > In Exercise08 of the ooDialog Guide, I've introduced drag/drop of Product > and/or Customer onto the Order Form. > All works fine except for the following sequence: > (a) Surface an Order Form (by dbl-clk on OrderForm icon in the Order > Management dialog) > (b) Surface a Product (dbl-clk on Product List then dbl-clk on any item in > the listview) > (c) Drag the Product to the OrderForm. > In this case, the following error occurs: > Error 97 running D:\...\Exercise08\Order\OrderFormView.rex line 809: > Object method not found > Error 97.001: Object "ECPRODNUM" does not understand message "SETTEXT" > You can not use setText() until the underlying edit control has been created. > > However, this error does not occur if, before the first drag of a product > to the order form, I click on the "Order Lines" tab on the Order Form. > > I believe what's happening in the error situation is that the Order Lines > control dialog is not being initialised properly. It's necessary first to > click on the Order Lines tab. After that, I can drag a product onto the > Customer tab and all works fine (except of course I don't see the result > until the Order Lines tab is clicked) or onto the Order Lines tab. > In the example code I wrote for using ControlDialog dialogs, the underlying dialog window is not created until it is actually used. If you have a tab control with 7 tabs and the user never visits tabs 3,4,5,6,7, there is, usually, no sense in creating the underlying windows for those tabs. > > So to my question: How do I initialise a control dialog that is initially > hidden (i.e. not on top) without clicking on its tab? > You need to change the basic logic of the program so that you start (execute) all of the ControlDialog dialogs but do not show them until their tab is clicked on. Start by changing this: -- set up tabs for Customer Details and Order Lines: cd1 = .CustDetailsDlg~new("Order\OrderFormView.rc", IDD_ORDFORM_CUST_DIALOG) cd2 = .OrderLinesDlg~new("Order\OrderFormView.rc", IDD_ORDFORM_ORDLINES_DIALOG) tabContent = .array~of(cd1, cd2) cd1~ownerDialog = self self~prep(tabContent) -- set up tabs for Customer Details and Order Lines: cd1 = .CustDetailsDlg~new("Order\OrderFormView.rc", IDD_ORDFORM_CUST_DIALOG) cd2 = .OrderLinesDlg~new("Order\OrderFormView.rc", IDD_ORDFORM_ORDLINES_DIALOG) tabContent = .array~of(cd1, cd2) cd1~ownerDialog = self *cd2~ownerDialog = self* self~prep(tabContent) Then you need to start both dialogs, but only show and position the first one. It is a matter of reworking the logic of the program, and then getting it to work. ;-) -- Mark Miesfeld |
From: Mark M. <mie...@gm...> - 2013-06-24 23:10:42
|
Oliver, I haven't pulled in you latest commits, but with the OrderFormView.rex I have, this seems to be sufficient to get it to work: 1.) cd1~ownerDialog = self cd2~ownerDialog = self self~prep(tabContent) 2.) -- Tab stuff starts: cd1 = tabContent[1] cd2 = tabContent[2] cd1~execute cd2~execute 3.) if havePositioned[index] then do last = tabContent[lastSelected] last~hide dlg~show lastSelected = index end else do --dlg~ownerDialog = self --dlg~execute self~positionAndShow(index) end -- Mark Miesfeld |
From: Oliver S. <oli...@si...> - 2013-06-25 13:56:39
|
Many thanks indeed, Mark. I guess I didn't understand Control Dialogs well enough. But I'm getting there ... -- Oliver Sims _____ From: Mark Miesfeld [mailto:mie...@gm...] Sent: 25 June 2013 00:11 To: Open Object Rexx Users Subject: Re: [Oorexx-users] Control Dialog and Drag/Drop Oliver, I haven't pulled in you latest commits, but with the OrderFormView.rex I have, this seems to be sufficient to get it to work: 1.) cd1~ownerDialog = self cd2~ownerDialog = self self~prep(tabContent) 2.) -- Tab stuff starts: cd1 = tabContent[1] cd2 = tabContent[2] cd1~execute cd2~execute 3.) if havePositioned[index] then do last = tabContent[lastSelected] last~hide dlg~show lastSelected = index end else do --dlg~ownerDialog = self --dlg~execute self~positionAndShow(index) end -- Mark Miesfeld |
From: Art H. <art...@ar...> - 2013-06-30 17:33:54
|
<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;">I am trying to locate a string in a listbox by typing the characters, but</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">I want the number of characters to be variable.  For example, in looking</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">for names in a listbox, I would like to start typing and for each character</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">bring up the next matching string.  I am using Find and I understand</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">I can specify a multiple character string, but I would like for the listbox</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">find to select the first item matching the first character, allow me to</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">enter another character and have the find select the string that now</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">matches both characters, repeating until the Enter key is pressed where</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">the Ok 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;"><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |
From: Mark M. <mie...@gm...> - 2013-06-30 18:49:38
|
Hi Art, I've never tried something like that, but this is how I would start. Set an exposed variable to the empty string. Connect the onChar event to the listbox. When the event handler is invoked, append the character to the exposed variable. Then use the find() method using the exposed variable string as the textOrPrefix, probably the current index as the startIndex, and exact as false. If you get a hit, move the selection to the returned index. Each time a new character comes in, it is appended to the current search string and find() is invoked again. I think that should get you close, then you run it and see what doesn't work. You want to set up your onChar handler so that the character is not passed on to the listbox. I'm hoping the docs are sufficient for you to determine how to do that. I'm not being secretive, if I remembered off of the top of my head I'd just tell you. One thing that thing I can think of that might take a little thought is what to do if the find() does not produce a hit. Also, you'll need to figure out when to set the search string back to the empty string. Let me know if you are having problems. If I have a little time, I'll probably play with it a bit. The other thing is, the listbox seems to already have a search function built in. You do realize that don't you? I suspect you are asking because the built in procedure is not sufficient for what you want. I don't have any example programs around that have very many items in a listbox, but it seems to work somewhat. -- Mark Miesfeld On Sun, Jun 30, 2013 at 10:33 AM, Art Heimsoth <art...@ar...>wrote: > I am trying to locate a string in a listbox by typing the characters, but > I want the number of characters to be variable. For example, in looking > for names in a listbox, I would like to start typing and for each character > bring up the next matching string. I am using Find and I understand > I can specify a multiple character string, but I would like for the listbox > find to select the first item matching the first character, allow me to > enter another character and have the find select the string that now > matches both characters, repeating until the Enter key is pressed where > the Ok button would then cause the currently selected string to be > retrieved, but how would I approach this? How would I define an > onChar event on the listbox to allow me to build the string to be > passed to the find? Any suggestions as to approach appreciated. > > -- > Art Heimsoth - art...@ar... > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by Windows: > > Build for Windows Store. > > http://p.sf.net/sfu/windows-dev2dev > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |
From: Mark M. <mie...@gm...> - 2013-06-30 20:10:50
|
Art, This is what the MSDN docs say about the default processing by the listbox of the WM_CHAR message: "Moves the selection to the first item that begins with the character the user typed. If the list box has the LBS_OWNERDRAW style, no action occurs. Multiple characters typed within a short interval are treated as a group, and the first item that begins with that series of characters is selected." Below is a very simple listbox that demonstrates the default incremental search. If I run it and type in A C T and hit enter, I get this back: User searched for and found: ActionCenter.dll So, it seems to work pretty good. The only thing I don't like is the delay time before it stops treating the letters as a group. If you type A C and delay a bit, when you type T it takes you to: t2embed.dll This would be a dialog to start with and use to implement your own incremental search: /* Simple Dialog listBoxSearch.rex */ symbolMap = .table~new symbolMap[IDC_LB_FILEs] = 200 --symbolMap[] = --symbolMap[] = .application~setDefaults('O', symbolMap, .false, 'Courier New', 10) dlg = .SimpleDialog~new if dlg~initCode = 0 then do if dlg~execute("SHOWTOP") == dlg~IDOK then do say 'User searched for and found:' dlg~searchAndFound end else do say 'User canceled' end end return 0 -- End of entry point. ::requires "ooDialog.cls" ::class 'SimpleDialog' subclass UserDialog ::attribute searchAndFound get expose selectedText return selectedText ::method init expose selectedText forward class (super) continue title = "Directory Listing with Search" self~create(30, 30, 186, 124, title, "CENTER") selectedText = '' ::method defineDialog style = 'VSCROLL HSCROLL PARTIAL SORT NOTIFY' self~createListBox(IDC_LB_FILES, 10, 10, 166, 90, style) self~createPushButton(IDOK, 126, 105, 50, 14, 'DEFAUT', "Ok") self~createPushButton(IDCANCEL, 74, 105, 50, 14, ,"Push Me") ::method initDialog expose lb lb = self~newListBox(IDC_LB_FILES) attributes = "READWRITE READONLY HIDDEN SYSTEM DIRECTORY ARCHIVE" lb~addDirectory("C:\Windows\System32\*", attributes) ::method ok unguarded expose lb selectedText selectedText = lb~selected return self~ok:super ::method cancel unguarded msg = 'Haa - tricked you. Push Me is actually cancel' title = "You Have Just Been Canceled" ret = MessageDialog(msg, self~hwnd, title) return self~cancel:super On Sun, Jun 30, 2013 at 11:49 AM, Mark Miesfeld <mie...@gm...> wrote: > Hi Art, > > I've never tried something like that, but this is how I would start. > > Set an exposed variable to the empty string. Connect the onChar event to > the listbox. When the event handler is invoked, append the character to > the exposed variable. Then use the find() method using the exposed > variable string as the textOrPrefix, probably the current index as the > startIndex, and exact as false. > > If you get a hit, move the selection to the returned index. Each time a > new character comes in, it is appended to the current search string and > find() is invoked again. I think that should get you close, then you run > it and see what doesn't work. > > You want to set up your onChar handler so that the character is not passed > on to the listbox. I'm hoping the docs are sufficient for you to determine > how to do that. I'm not being secretive, if I remembered off of the top of > my head I'd just tell you. > > One thing that thing I can think of that might take a little thought is > what to do if the find() does not produce a hit. > > Also, you'll need to figure out when to set the search string back to the > empty string. > > Let me know if you are having problems. If I have a little time, I'll > probably play with it a bit. > > The other thing is, the listbox seems to already have a search function > built in. You do realize that don't you? I suspect you are asking because > the built in procedure is not sufficient for what you want. I don't have > any example programs around that have very many items in a listbox, but it > seems to work somewhat. > > -- > Mark Miesfeld > > > > On Sun, Jun 30, 2013 at 10:33 AM, Art Heimsoth <art...@ar...>wrote: > >> I am trying to locate a string in a listbox by typing the characters, but >> I want the number of characters to be variable. For example, in looking >> for names in a listbox, I would like to start typing and for each >> character >> bring up the next matching string. I am using Find and I understand >> I can specify a multiple character string, but I would like for the >> listbox >> find to select the first item matching the first character, allow me to >> enter another character and have the find select the string that now >> matches both characters, repeating until the Enter key is pressed where >> the Ok button would then cause the currently selected string to be >> retrieved, but how would I approach this? How would I define an >> onChar event on the listbox to allow me to build the string to be >> passed to the find? Any suggestions as to approach appreciated. >> >> -- >> Art Heimsoth - art...@ar... >> >> >> ------------------------------------------------------------------------------ >> This SF.net email is sponsored by Windows: >> >> Build for Windows Store. >> >> http://p.sf.net/sfu/windows-dev2dev >> _______________________________________________ >> Oorexx-users mailing list >> Oor...@li... >> https://lists.sourceforge.net/lists/listinfo/oorexx-users >> >> > |
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> |
From: Mark M. <mie...@gm...> - 2013-06-30 21:01:06
|
On Sun, Jun 30, 2013 at 1:41 PM, Art Heimsoth <art...@ar...>wrote: > Yes, I have the default working in my main program, and it has been > for awhile. I was wanting to get around the delay time by using an > Ok button to signal when the selection was what I wanted. I have > built a small test case that seems to want to work, but on the second > character input I get a 0x0005 (op code?) violation -not sure where > as I am not familiar with how to peruse that type of error. > Yikes that's a crash. > I will > zip up the three files (rex, rc and h) for the test and you can tell me > where I have made a stupid mistake !! (sending to your private addr) > This looks like a bad bug. Whether you made a mistake or not, it shouldn't crash. ;-) You can open a bug report if you want, it's nice to track these things. > > Really hate to bother you on a weekend, but do appreciate your help. > No problem, it is a kind of interesting scenario. I'm using the program I posted to implement a working solution. It is far enough along to see that a pretty good solution is doable. I'll post it later. Thanks for finding a bug. -- Mark Miesfeld |
From: Mark M. <mie...@gm...> - 2013-06-30 21:38:04
|
On Sun, Jun 30, 2013 at 2:00 PM, Mark Miesfeld <mie...@gm...> wrote: > > On Sun, Jun 30, 2013 at 1:41 PM, Art Heimsoth <art...@ar...>wrote: > >> Yes, I have the default working in my main program, and it has been >> for awhile. I was wanting to get around the delay time by using an >> Ok button to signal when the selection was what I wanted. I have >> built a small test case that seems to want to work, but on the second >> character input I get a 0x0005 (op code?) violation -not sure where >> as I am not familiar with how to peruse that type of error. >> > > Yikes that's a crash. > I don't get a crash, rather everything hangs. The reason is this: ::method OK expose Fescue. Fescue.Seller = 'A' dlg = .SelectDialog~new("Test.rc", SELLER_DIALOG, , "Test.h") dlg~parent = self dlg~Fescue = Fescue. dlg~sendMyData dlg~Execute("SHOWTOP", IDI_DLG_OOREXX) return 0 In OK() you start your second dialog. Then in your second dialog you have this: ::method onChar unguarded expose Fescue. lb findchar use arg char ... self~parent~logError(0,"Searching for" findchar) return .false In your first dialog you have for logError() ::method logError expose Fescue. use strict arg retrn, msg ... What happens is, in your second dialog you type the first character. onChar() starts executing and runs until it hits self~parent~logError() logError() is unguarded. At this instant ok(), also unguarded, is executing waiting for your second dialog to finish. logError() can not run, so your onChar() method is blocked at that line. The ok() method is waiting for your second dialog to end. So you have a classic deadlock. Nothing can proceed. In addition, in the window processing loop, the interpreter is waiting for the reply from onChar(). So no more messages can be processed. As soon as you type a second character or click on a button that message is sent to the window by the operating system. At this point you are really hosed. Your second dialog can not process any message, so it can not be closed. The first dialog can not end until the second dialog is closed, and the second dialog can not be closed. ;-) The OS has a timer and sees that the application is not processing its window messages. So, in Windows 7 at least, you get the 'Application is not responding" dialog and you have to have the OS forcibly close the application. To fix that, you need to make either ok() or logError() unguarded. Things shouldn't crash though. Is it on XP you see the crash? -- Mark Miesfeld |
From: Art H. <art...@ar...> - 2013-06-30 23:03:00
|
<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;">Thanks Mark,  yes this is on XP.  Am I creating another problem if</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">I always use unguarded on my methods, whether they are events</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">or others?</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">I am having other problems in my main program that I suspect are</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">due to the usage of unguarded or lack of.  I have an input panel</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">with several edit input fields where I am using LOSTFOCUS and also</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">GOTFOCUS on some of them.  I have unguarded on all of those event</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">handlers, but if I cancel out of that input panel, I sometimes get entries</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">into one or more of those event handlers - like the event is pending</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">somewhere when I do the cancel and start a different menu process.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">I don't know how to cancel the events when the original input menu</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">is cancelled, and some of them will put up more info on the screen</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">when they fire.</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">> To fix that, you need to make either ok() or logError() unguarded.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">Will change these two.  Thanks again.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> Things shouldn't crash though.  Is it on XP you see the crash?</SPAN><SPAN style="font-size:12pt;"><br /><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |
From: Mark M. <mie...@gm...> - 2013-06-30 23:25:41
|
On Sun, Jun 30, 2013 at 4:02 PM, Art Heimsoth <art...@ar...>wrote: > Thanks Mark, yes this is on XP. Am I creating another problem if > I always use unguarded on my methods, whether they are events > or others? > Art, In general I advise to make all event handlers unguarded. If you make all methods unguarded, you could create another problem, sometimes. Really, the best thing to do is to analyze everything and only make a method unguarded if needed. But, hey, I rarely do that. So the blanket statement make all event handlers unguarded is not the best advice. It is good enough advice for the general use of ooDialog though. If you had a mission critical application, you might want to make sure that having all event handlers unguarded is the right thing to do. If you have variables, especially exposed variables, that need to be accessed sequentially. Or in a strictly deterministic order, then a guarded method is usually the best way to do it. What I do is make all my event handlers unguarded and all other methods I leave guarded. Except convenience methods that are called from event handlers. Those I make unguarded. Then if something hangs, I try to figure out why. ;-) > > I am having other problems in my main program that I suspect are > due to the usage of unguarded or lack of. I have an input panel > with several edit input fields where I am using LOSTFOCUS and also > GOTFOCUS on some of them. I have unguarded on all of those event > handlers, but if I cancel out of that input panel, I sometimes get entries > into one or more of those event handlers - like the event is pending > Well, when you move to a new input panel, which I assume is a dialog, you will get a lost focus in the old one, in an edit control if that control had the focus. > somewhere when I do the cancel and start a different menu process. > I don't know how to cancel the events when the original input menu > is cancelled, and some of them will put up more info on the screen > when they fire. > One thing you could try is adding a flag. Set it to .true when you start with the first input panel and set it to .false right before you cancel out of it. In the event handler, if the flag is .false return immediately without doing any thing. -- Mark Miesfeld |
From: Art H. <art...@ar...> - 2013-07-01 02:26:47
|
<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;">This is what I did.  Also used a switch test in the event handlers to</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">detect when the dialog is no longer active to prevent unwanted</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">changes to a subsequent dialog panel.  The program is now working</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">using multiple keyed characters to search a name file, using the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">onChar event with a ListBox.  Thanks Mark for your help.</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">> In general I advise to make all event handlers unguarded.  If you</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> make all methods unguarded, you could create another problem,</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> sometimes.</SPAN><SPAN style="font-size:12pt;"><br /><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |
From: Art H. <art...@ar...> - 2013-07-08 22:57:02
|
<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;">Is there any general information on what a recommended approach</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">might be for error handling/recovery with ooRexx and ooDialog?</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">I have a specific problem right now, where I have not found a good</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">solution.  I run the application with Rexxhide and have found that</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">if ooRexx errors, for example with a "Bad arithmetic conversion"</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">type of error, if I have also have a .TimedMessage with an infinite</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">timeout, the only way I have found to end the application and</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">regain control is by using the Task Manager.  Since the .TimedMessage</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">blocks getting control via the normal windows "X" close, or a cancel</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">button, and Rexxhide prevents a Ctrl-C from interrupting the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">interpreter.  I could use a timed duration of the longest period I</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">would expect the timed activity to take, but then the waiting message</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">would also keep the dialog from continuing until the timeout period</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">has expired.  Looking for suggestions/thoughts.</SPAN></div> <div><SPAN style="font-size:12pt;"><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |
From: Mark M. <mie...@gm...> - 2013-07-09 00:13:43
|
On Mon, Jul 8, 2013 at 3:56 PM, Art Heimsoth <art...@ar...>wrote: > Is there any general information on what a recommended approach > might be for error handling/recovery with ooRexx and ooDialog? > I have a specific problem right now, where I have not found a good > solution. I run the application with Rexxhide and have found that > if ooRexx errors, for example with a "Bad arithmetic conversion" > type of error, if I have also have a .TimedMessage with an infinite > timeout, the only way I have found to end the application and > regain control is by using the Task Manager. Since the .TimedMessage > blocks getting control via the normal windows "X" close, or a cancel > button, and Rexxhide prevents a Ctrl-C from interrupting the > interpreter. I could use a timed duration of the longest period I > would expect the timed activity to take, but then the waiting message > would also keep the dialog from continuing until the timeout period > has expired. Looking for suggestions/thoughts. > > In the next version of ooDialog, I'm going to have an ooDialog.exe that, among other things, can be used to run ooDialog programs in a similar manner to rexxhide.exe. The difference will be that if a Rexx error condition is raised that ends the program, a message box will display the condition information that is normally written to the console. However that will not help with your TimedMessage problem. In general, I always run my ooDialog programs from the command line until they are completely debugged. That should help some, presumably you do not intend to have a bad arithmetic conversion. For your specific problem here, I would write my own timed message dialog. When using it, send a reference to the executing dialog to your timed message dialog. In your timed message, periodically check back to see if the other dialog is still alive. Quit the timed message if you discover the other dialog is ended. This still might not work if the error doesn't cause the other dialog to end, but just causes it to hang. All in all, I don't have any good recommendations. I could say don't write any code that would cause an error, but ... ;-) Reading back your description, I would think writing your own timed message might work. Write it so that the timed message can be closed. -- Mark Miesfeld |
From: Art H. <art...@ar...> - 2013-08-13 21:08:17
|
<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;">> For your specific problem here, I would write my own timed message</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> dialog.  When using it, send a reference to the executing dialog to</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> your timed message dialog.  In your timed message, periodically</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> check back to see if the other dialog is still alive.  Quit the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> timed message if you discover the other dialog is ended.</SPAN><SPAN style="font-size:12pt;"><br /><br />I tried to start a second dialog and then use WinTimer in that dialog, with</SPAN></div> <div><SPAN style="font-size:12pt;">the intention of setting a shared variable from the main dialog when I wanted</SPAN></div> <div><SPAN style="font-size:12pt;">the second dialog to end.  The second dialog would put up a panel that </SPAN></div> <div><SPAN style="font-size:12pt;">includes a "Cancel" button to allow manual cancellation if necessary.</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;">The problem I am running into is I have not found a way to allow the main</SPAN></div> <div><SPAN style="font-size:12pt;">dialog to regain control and continue to do work while the timer is running.</SPAN></div> <div><SPAN style="font-size:12pt;">I can cancel the second dialog with the "Cancel" and that is when the first</SPAN></div> <div><SPAN style="font-size:12pt;">dialog resumes operation.  What am I missing?  I have the second dialog</SPAN></div> <div><SPAN style="font-size:12pt;">defined with the STYLE DS_MODALFRAME - should it be something else?</SPAN></div> <div><SPAN style="font-size:12pt;"><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |
From: Mark M. <mie...@gm...> - 2013-08-13 21:42:13
|
On Tue, Aug 13, 2013 at 2:08 PM, Art Heimsoth <art...@ar...>wrote: > > For your specific problem here, I would write my own timed message > > dialog. When using it, send a reference to the executing dialog to > > your timed message dialog. In your timed message, periodically > > check back to see if the other dialog is still alive. Quit the > > timed message if you discover the other dialog is ended. > > > I tried to start a second dialog and then use WinTimer in that dialog, with > the intention of setting a shared variable from the main dialog when I > wanted > the second dialog to end. The second dialog would put up a panel that > includes a "Cancel" button to allow manual cancellation if necessary. > > The problem I am running into is I have not found a way to allow the main > dialog to regain control and continue to do work while the timer is > running. > I can cancel the second dialog with the "Cancel" and that is when the first > dialog resumes operation. What am I missing? I have the second dialog > defined with the STYLE DS_MODALFRAME - should it be something else? > Well I don't think I'd use DS_MODALFRAME, but that has nothing to do with your problem. It is most likely the way you are starting the second dialog. If you use execute(), the method will not return until the second dialog ends, and your first dialog can not continue until execute() returns. You need to use popup() to start the second dialog. The popup() method returns immediately and your first dialog can continue working. I'm pretty sure that is what you are missing. But, if you are already using popup(), then I would need to see some code to say why the first dialog doesn't continue. -- Mark Miesfeld |
From: Art H. <art...@ar...> - 2013-08-14 01:59:24
|
<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;} --></style> </head><BODY ><div><SPAN style="font-size:12pt;color:navy;">> On Tue, Aug 13, 2013 at 2:08 PM, Art Heimsoth</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> <art...@ar...> wrote:</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> For your specific problem here, I would write my own timed</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> message</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> dialog.  When using it, send a reference to the executing dialog</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> to your timed message dialog.  In your timed message,</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> periodically check back to see if the other dialog is still</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> alive.  Quit the</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:purple;">>>> timed message if you discover the other dialog is ended.</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> I tried to start a second dialog and then use WinTimer in that</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> dialog, with</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> the intention of setting a shared variable from the main dialog</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> when I wanted</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> the second dialog to end.  The second dialog would put up a panel</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> that includes a "Cancel" button to allow manual cancellation if</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> necessary.  </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> The problem I am running into is I have not found a way to allow</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> the main dialog to regain control and continue to do work while the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> timer is running. I can cancel the second dialog with the "Cancel"</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> and that is when the first dialog resumes operation.  What am I</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> missing?  I have the second dialog defined with the STYLE</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> DS_MODALFRAME - should it be something else?</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;">> Well I don't think I'd use DS_MODALFRAME, but that has nothing to</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> do with your problem.</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;">> It is most likely the way you are starting the second dialog.  If</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> you use execute(), the method will not return until the second</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> dialog ends, and your first dialog can not continue until execute()</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> returns.</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;">> You need to use popup() to start the second dialog.  The popup()</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> method returns immediately and your first dialog can continue</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> working.</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">That was the problem.. thanks again for your help.</SPAN></div> <div><SPAN style="font-size:12pt;"><br /><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |
From: Art H. <art...@ar...> - 2013-08-14 21:52:44
|
<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:maroon;">>> On Tue, Aug 13, 2013 at 2:08 PM, Art Heimsoth</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> <art...@ar...> wrote:</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:blue;">>>> For your specific problem here, I would write my own timed</SPAN></div> <div><SPAN style="font-size:12pt;color:blue;">>>> message </SPAN><SPAN style="font-size:12pt;color:purple;">dialog.  When using it, send a reference to the executing</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> dialog to your timed message dialog.  In your timed message,</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> periodically check back to see if the other dialog is still</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> alive.  Quit the </SPAN><SPAN style="font-size:12pt;color:blue;">timed message if you discover the other dialog is ended.</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>></SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> I tried to start a second dialog and then use WinTimer in that</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> dialog, with the intention of setting a shared variable from the main dialog</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> when I wanted </SPAN><SPAN style="font-size:12pt;color:maroon;">the second dialog to end.  The second dialog would put up a panel</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>>> that includes a "Cancel" button to allow manual cancellation if necessary.  </SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> You need to use popup() to start the second dialog.  The popup()</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> method returns immediately and your first dialog can continue</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> working.</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">I'm still having trouble with this, but I am not sure my approach will work</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">anyway.  I am trying to get an operation like .timedmessage but where I</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">can cancel it from the popup panel; ie, add a cancel button to that dialog</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">that would do the same thing as sending ok to the .timedmessage dialog.</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">In using a dialog that I build and kick off with popupAsChild() or with popup()</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">the child panel is not displayed until after the child InitDialog returns.  I was </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">intending to put the timed logic in the InitDialog, but seems like I need some </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">other method for it - how do I kick that off?  </SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">To test this, I put a do loop with say statements in the child and parent</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">dialogs, and found that if I canceled the parent dialog, the do loops</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">continued until they timed out - they were not canceled.  I assume that</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">in normal for dialogs?</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">Another problem with this approach, is the underlying dialog is allowed to run,</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">but the user dialog buttons, menu, etc are also active allowing user input which</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">is what I need to block; ie, a modal setup.</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">I am looking for something that will notify the user the application is busy, but</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">allow them to cancel it manually if necessary without using task manager.  While</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">this notification is showing, all interfacing controls should be disabled, but the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">underlying dialog logic; ie, SQL lookups should be allowed to continue.</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">If I could figure out how to get the timed message to run in the child dialog,</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">I could disable all the buttons and menu items while the child dialog is active</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">and then enable them again when the lookup operation is complete and the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">child is ended.  Are there other (simpler) ways to accomplish this?</SPAN></div> <div><SPAN style="font-size:12pt;"><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |
From: Staffan T. <sta...@gm...> - 2013-08-15 10:14:59
|
Art, Sorry, I haven't followed this thread from the start so I may not have understood exactly what you are after. Anyway, I've used solutions like these for what I believe being for similar problems: 1. Dialog A starts Dialog B using popupAsChild passing a Cancel object to it. The user can cancel the B process by pressing a Cancel button in A. A changes the Cancel object accordingly, B sees this by checking its status periodically, and terminates. 2. Dialog A starts Dialog B (via a class method in B) which in turn uses popupAsDialog and passes the message object created by popupAsChild back to A. A disables the button at the same time to avoid starting B twice. The thread in A goes into a loop and every 500ms it checks if B has completed using the message object, in which case it leaves the loop and enables the button again. I don't know if any of these two scenarios fits your problem but maybe it can be of some help. Good luck. Staffan On Wed, Aug 14, 2013 at 11:52 PM, Art Heimsoth <art...@ar...>wrote: > >> On Tue, Aug 13, 2013 at 2:08 PM, Art Heimsoth > >> <art...@ar...> wrote: > >> > >>> For your specific problem here, I would write my own timed > >>> message dialog. When using it, send a reference to the executing > >>> dialog to your timed message dialog. In your timed message, > >>> periodically check back to see if the other dialog is still > >>> alive. Quit the timed message if you discover the other dialog is > ended. > >>> > >>> I tried to start a second dialog and then use WinTimer in that > >>> dialog, with the intention of setting a shared variable from the main > dialog > >>> when I wanted the second dialog to end. The second dialog would put > up a panel > >>> that includes a "Cancel" button to allow manual cancellation if > necessary. > >> > >> You need to use popup() to start the second dialog. The popup() > >> method returns immediately and your first dialog can continue > >> working. > >> > I'm still having trouble with this, but I am not sure my approach will work > anyway. I am trying to get an operation like .timedmessage but where I > can cancel it from the popup panel; ie, add a cancel button to that dialog > that would do the same thing as sending ok to the .timedmessage dialog. > > In using a dialog that I build and kick off with popupAsChild() or with > popup() > the child panel is not displayed until after the child InitDialog returns. > I was > intending to put the timed logic in the InitDialog, but seems like I need > some > other method for it - how do I kick that off? > > To test this, I put a do loop with say statements in the child and parent > dialogs, and found that if I canceled the parent dialog, the do loops > continued until they timed out - they were not canceled. I assume that > in normal for dialogs? > > Another problem with this approach, is the underlying dialog is allowed to > run, > but the user dialog buttons, menu, etc are also active allowing user input > which > is what I need to block; ie, a modal setup. > > I am looking for something that will notify the user the application is > busy, but > allow them to cancel it manually if necessary without using task manager. > While > this notification is showing, all interfacing controls should be disabled, > but the > underlying dialog logic; ie, SQL lookups should be allowed to continue. > > If I could figure out how to get the timed message to run in the child > dialog, > I could disable all the buttons and menu items while the child dialog is > active > and then enable them again when the lookup operation is complete and the > child is ended. Are there other (simpler) ways to accomplish this? > > -- > Art Heimsoth - art...@ar... > > > ------------------------------------------------------------------------------ > Get 100% visibility into Java/.NET code with AppDynamics Lite! > It's a free troubleshooting tool designed for production. > Get down to code-level detail for bottlenecks, with <2% overhead. > Download for free and get started troubleshooting in minutes. > http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |
From: Art H. <art...@ar...> - 2013-08-15 14:15:31
|
<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;">Thanks Staffan, I think solution 1. is what would work if I could get</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">the dialog for it to display and the looping logic to also run.</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">> 1. Dialog A starts Dialog B using popupAsChild passing a Cancel</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> object to it. The user can cancel the B process by pressing a</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> Cancel button in A. A changes the Cancel object accordingly, B sees</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> this by checking its status periodically, and terminates.</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">I put the looping logic in B to look for the cancel signal in the </SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">initDialog method, but that prevents the B dialog panel from being</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">displayed.  How do I get that checking logic to run AND the dialog</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">to be displayed?</SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;color:navy;">I assume that in order to keep the user from interacting with the other</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">controls (other than the cancel button) in A, that I need to disable them</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">while I have B displaying the "Wait" dialog, and then enable them again</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">when B has been signalled to terminate.  Is that correct?</SPAN><SPAN style="font-size:12pt;"><br /><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |
From: Staffan T. <sta...@gm...> - 2013-08-15 14:40:27
|
> I put the looping logic in B to look for the cancel signal in the > initDialog method, but that prevents the B dialog panel from being > displayed. How do I get that checking logic to run AND the dialog > to be displayed? > If you insert FORWARD CLASS(SUPER) CONTINUE as the first statement in initDialog, that should start the dialog and control will return to your next statement in your code where you wish to place the loop. > I assume that in order to keep the user from interacting with the other > controls (other than the cancel button) in A, that I need to disable them > while I have B displaying the "Wait" dialog, and then enable them again > when B has been signalled to terminate. Is that correct? > > Sounds good to me. Staffan |
From: Mark M. <mie...@gm...> - 2013-08-15 15:01:31
|
On Thu, Aug 15, 2013 at 7:39 AM, Staffan Tylen <sta...@gm...>wrote: > > >> I put the looping logic in B to look for the cancel signal in the >> initDialog method, but that prevents the B dialog panel from being >> displayed. How do I get that checking logic to run AND the dialog >> to be displayed? >> > > If you insert FORWARD CLASS(SUPER) CONTINUE as the first statement in > initDialog, > Actually, the super class initDialog() is a nop. Invoking the super class initDialog() through forward does nothing and is not needed. Doesn't hurt, but really doesn't add anything. ;-) -- Mark Miesfeld |
From: Staffan T. <sta...@gm...> - 2013-08-15 15:05:08
|
Ooops, I think I've stumbled over that in the past. It's hard to make old dogs sit. Thanks, Staffan On Thu, Aug 15, 2013 at 5:01 PM, Mark Miesfeld <mie...@gm...> wrote: > On Thu, Aug 15, 2013 at 7:39 AM, Staffan Tylen <sta...@gm...>wrote: > >> >> >>> I put the looping logic in B to look for the cancel signal in the >>> initDialog method, but that prevents the B dialog panel from being >>> displayed. How do I get that checking logic to run AND the dialog >>> to be displayed? >>> >> >> If you insert FORWARD CLASS(SUPER) CONTINUE as the first statement in >> initDialog, >> > > Actually, the super class initDialog() is a nop. Invoking the super class > initDialog() through forward does nothing and is not needed. > > Doesn't hurt, but really doesn't add anything. ;-) > > -- > Mark Miesfeld > > > > ------------------------------------------------------------------------------ > Get 100% visibility into Java/.NET code with AppDynamics Lite! > It's a free troubleshooting tool designed for production. > Get down to code-level detail for bottlenecks, with <2% overhead. > Download for free and get started troubleshooting in minutes. > http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |
From: Art H. <art...@ar...> - 2013-08-15 15:17:50
Attachments:
testpopup.rex
|
<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;">> On Thu, Aug 15, 2013 at 7:39 AM, Staffan Tylen</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> <sta...@gm...> wrote:</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;">>>> I put the looping logic in B to look for the cancel signal in</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>> the</SPAN></div> <div><SPAN style="font-size:12pt;color:purple;">>>></SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> initDialog method, but that prevents the B dialog panel from being</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> displayed.  How do I get that checking logic to run AND the dialog</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> to be displayed?</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;">>> If you insert FORWARD CLASS(SUPER) CONTINUE as the first</SPAN></div> <div><SPAN style="font-size:12pt;color:maroon;">>> statement in initDialog,</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;">> Actually, the super class initDialog() is a nop.  Invoking the</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> super class initDialog() through forward does nothing and is not</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">> needed.</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;">> Doesn't hurt, but really doesn't add anything.  ;-)</SPAN></div> <div><SPAN style="font-size:12pt;color:navy;">></SPAN></div> <div> </div> <div><SPAN style="font-size:12pt;">I have modified the example code in the reference manual under popupAsChild </SPAN></div> <div><SPAN style="font-size:12pt;">by moving where the child dialog is started and putting some Say statements to</SPAN></div> <div><SPAN style="font-size:12pt;">see the operation.  I attached that if someone can tell me what stupid thing I</SPAN></div> <div><SPAN style="font-size:12pt;">am doing or not doing :-)..</SPAN></div> <div><SPAN style="font-size:12pt;"><br />--<br />  Art Heimsoth - art...@ar...</SPAN></div> </body></html> |