From: <os...@si...> - 2011-05-29 18:41:14
|
Mark, Thanks for this answer. The clouds are lifting. But I still don't understand it all, even though I've read the sections of ooDialog Reference that you pointed out. I've been trying to understand the relationship between: (a) a control (e.g. an Edit control) (b) the data value placed in that control (e.g. the string "ABC123") (c) dlgData as in the third param of the following line of code: dlg = .ProductView~new("ProductView.rc", IDD_PRODUCT_VIEW, dlgData., "ProductView.h") I have the impression that using auto-detect is meant to make things easier for the programmer. But I can't see this. So I built two exceedingly simple dialog programs (atatched) to check things out. And I'm still confused. I guess the first question is this: am I supposed to be able to use the third param directly myself as a programmer? I assumed "yes". So, I have a .h file with an edit control with id 1002. Suppose I want to populate this with the data "ABC123"? How would I do this? I tried in the initDialog method with no success. And also in an event handler method (for a pushbutton). In both, I did: dlgdata.DATA1002 = "ABC1002" In both, the interpreter said dlgData was a string, not a stem variable. One other thing - when the "data attributes" of a dialog are mentioned, it doesn't seem to mean the same thing as an attribute (::ATTRIBUTE) of a class. Is that right? Btw, another question is, when I omit the third param (dlgData), how do I populate an edit control with its initial data? When I get all this straight, I hope to use both approaches in the Guide to explain the differences. Many thanks, Oliver PS: The ResDlg program is mainly used at the moment to check out the over-writing of my data in a class that omits the third parameter - I made it a ResDialog class just for the heck of it. With a judiciously-placed SysSleep, I can now see my data disappearing! -----Original Message----- From: Mark Miesfeld [mailto:mie...@gm...] Sent: 27 May 2011 14:25 To: Open Object Rexx Users Subject: Re: [Oorexx-users] ooDialog - setText does not seem to set text the first time. On Thu, May 26, 2011 at 6:00 PM, Mark Miesfeld <mie...@gm...> wrote: > On Thu, May 26, 2011 at 4:41 PM, <os...@si...> wrote: > >> Using ResDialog, I cannot initially display data in an edit control. >> The test I ran to try to isolate the problem is as follows: > ... >> I have two identical programs, except that one uses RcDialog while >> the other uses ResDialog. > > I would expect the same problem to exist in the RcDialog. Although the programs are similar, they are not identical. In the program for the RcDialog, you use this for the new() method: dlg = .ProductView~new("ProductView.rc", IDD_PRODUCT_VIEW, dlgData., "ProductView.h") and in the program for the ResDialog you use this: dlg = .ProductView~new("ProductView.dll", IDD_PRODUCT_VIEW, , "ProductView.h") So, in the Rc dialog you supply the 3rd dialog data stem argument, and in the Res dialog, you omit that 3rd argument. If you either use the argument in both programs, or omit the argument in both programs, they will behave exactly the same. When you use the argument, after initDialog() is executed, the ooDialog framework will use the stem to set the values of the dialog controls and will not use the data attributes to set the controls. But, since you never initialized the stem, there are no controls to set. This is why you see the text that you set with: prodNo = self~newEdit("IDC_PROD_NO") r = prodNo~settext("ABC123") When you omit the argument, after initDialog() finishes, ooDialog sets the edit control to the value of its data attribute, which is the empty string. This behavior is now documented in section "3.2.1 new (Class method)" the new method of the dialog object. If you read that and the "Understanding data attributes" section, it should be perfectly clear. <grin> This was a good topic, it is an area that can be very confusing. -- Mark miesfeld ---------------------------------------------------------------------------- -- vRanger cuts backup time in half-while increasing security. With the market-leading solution for virtual backup and recovery, you get blazing-fast, flexible, and affordable data protection. Download your free trial now. http://p.sf.net/sfu/quest-d2dcopy1 _______________________________________________ Oorexx-users mailing list Oor...@li... https://lists.sourceforge.net/lists/listinfo/oorexx-users |
From: Mark M. <mie...@gm...> - 2011-05-29 20:29:42
|
On Sun, May 29, 2011 at 12:39 PM, <os...@si...> wrote: I'm going to move this one question / point of yours to the top: > I have the impression that using auto-detect is meant to make things easier > for the programmer. But I can't see this. Exactly! You hit the nail on the head. This is why I don't like the whole concept, and don't use it in my programs. > But I still don't understand it all, even though I've read the sections of > ooDialog Reference that you pointed out. I've been trying to understand the > relationship between: > (a) a control (e.g. an Edit control) > (b) the data value placed in that control (e.g. the string "ABC123") > (c) dlgData as in the third param of the following line of code: > dlg = .ProductView~new("ProductView.rc", IDD_PRODUCT_VIEW, dlgData., > "ProductView.h") > ... > I guess the first question is this: am I supposed to be able to use the > third param directly myself as a programmer? I assumed "yes". Sort of yes, but it is mostly used internally. You populate the stem *before* you pass it to the new() method. Then *after* the dialog is closed you can use it to get the values of the controls when the user closed the dialog with 'ok'. If the user closed the dialog with 'cancel', the values are meaningless. > So, I have a > .h file with an edit control with id 1002. Suppose I want to populate this > with the data "ABC123"? > How would I do this? Here is your program stripped down of everything not needed to show how to do it. When you execute the program "ABC123" will be in the edit control. If you type something else in the edit control and close with 'ok' then it will print out whatever text you had typed. data.1002 = "ABC123" dlg = .RcDlg~new("dlg.rc", IDD_DIALOG1, data., "dlg.h") if dlg~execute("SHOWTOP") == 1 then do say "Text in edit control on close with 'ok':" say data.1002 end ::REQUIRES "ooDialog.cls" ::CLASS RcDlg SUBCLASS RcDialog PUBLIC The above is the complete program. Note that there is no code to set the edit control text to "ABC123" in the program. Yet it does get set. Here is an execution where I typed 'Mark' in the edit control then pressed the Ok button: C:\work>RcDlg.rex Text in edit control on close with 'ok': Mark C:\work> > I tried in the initDialog method with no success. And also in an event > handler method (for a pushbutton). > In both, I did: > dlgdata.DATA1002 = "ABC1002" > In both, the interpreter said dlgData was a string, not a stem variable. Yeah, you are just on the wrong track completely. The usage is as I show above. By the way, this code in your program shows a common misunderstanding with exposed variables: ::METHOD ok UNGUARDED expose dlgData say dlgData.DATA1002 The exposed object variable is not in the local .RcDlg variable pool. It is only in the .PlainBasDialog's variabl pool. You can not access it by exposing its name. This is an ooRexx topic that is confusing, and I don't want to go into it here. But, just as an FYI, you could gain access to it this way: ::METHOD ok UNGUARDED s. = self~dlgData say s.DATA1002 > One other thing - when the "data attributes" of a dialog are mentioned, it > doesn't seem to mean the same thing as an attribute (::ATTRIBUTE) of a > class. Is that right? No, that is not right. "Data attributes" are indeed ::attributes. They are created by the ooDialog framework on the fly within the dialog object. A "dialog data stem", is not an attribute. "Automatic data detection" is really only the automatic detection of the controls in a ResDialog, a ResDialog only, no other type of dialog. However, the internal implementation of these 3 different things is very tightly woven together. So much so, that if you turn "automatic data detection" off, you turn all of it off. So much so, that you can not turn off just one of the 3 different things. There is no easy way to talk about it if you have to mention all 3 things every time you really just want to talk about the whole interwoven process. So I usually just use one of the terms when talking about it in general, data attributes or automatic data detection. Here is your example program changed to show the data attribute part of this: /* RcDlg_2.rex */ dlg = .RcDlg~new("dlg.rc", IDD_DIALOG1, , "dlg.h") dlg~IDC_EDIT1 = "ABC123" if dlg~execute("SHOWTOP") == 1 then do say "Text in edit control on close with 'ok':" say dlg~IDC_EDIT1 end ::REQUIRES "ooDialog.cls" ::CLASS RcDlg SUBCLASS RcDialog PUBLIC > Btw, another question is, when I omit the third param (dlgData), how do I > populate an edit control with its initial data? You turn automatic data detection off and populate it like you originally tried to. Here is an example: /* RcDlg_1.rex */ dlg = .RcDlg~new("dlg.rc", IDD_DIALOG1, , "dlg.h") dlg~execute("SHOWTOP") ::REQUIRES "ooDialog.cls" ::CLASS RcDlg SUBCLASS RcDialog PUBLIC ::method 'initDialog' self~newEdit(IDC_EDIT1)~setText("ABC123") ::method ok unguarded say "Text in edit control on close with 'ok':" say self~newEdit(IDC_EDIT1)~getText return self~ok:super ::method initAutoDetection self~noAutoDetection Here is the execution when I type Hank in the edit control: C:\work>RcDlg_1.rex Text in edit control on close with 'ok': Hank The above is the method I would advocate. In the above, you'll notice that for a simple program, you can implement the same functionality with a few less lines of code by using auto detection. However, it is harder to understand how the program works. With a complex program, it would be much harder for another programmer to understand how it works. I personally wish auto detection was off by default, but it isn't. -- Mark Miesfeld |
From: <os...@si...> - 2011-06-13 17:20:09
|
In the initDialog I specify: self~connectNotifyEvent("IDC_DECNUM1","GOTFOCUS",yyyy) self~connectNotifyEvent("IDC_DECNUM1","LOSTFOCUS",xxxx) Both give a zero return code. However, no matter how much I try to place focus on the edit control "IDCDECNUM1", I never get the methods "xxxx" or "yyyy" invoked. Am I doing something wromg? Maybe I'm misunsderstanding what "focus" is?? Many thanks, Oliver PS: The code is attached - a test dialog for sorting out how to check for valid numeric entry. It's pretty messy I'm afraid 'cos I'm doing a couple of other things as well. |
From: Mark M. <mie...@gm...> - 2011-06-14 14:26:25
|
On Mon, Jun 13, 2011 at 8:48 AM, <os...@si...> wrote: Sorry for the late reply, I was not at a computer yesterday. A rare event in my life. <grin> > In the initDialog I specify: > > self~connectNotifyEvent("IDC_DECNUM1","GOTFOCUS",yyyy) > self~connectNotifyEvent("IDC_DECNUM1","LOSTFOCUS",xxxx) > > Both give a zero return code. > > However, no matter how much I try to place focus on the edit control > "IDCDECNUM1", I never get the methods "xxxx" or "yyyy" invoked. > > Am I doing something wromg? Maybe I'm misunsderstanding what "focus" is?? You just need to change to: y = self~connectEditEvent("IDC_DECNUM1","GOTFOCUS",yyyy) x = self~connectEditEvent("IDC_DECNUM1","LOSTFOCUS",xxxx) The connectNotifyEvent() connects a generic event. In general, I'd say it is less predictable to know if you will get the generic event notification unless you understand all the nuances of how the underlying controls work. In order to capture a notification, the notification has to be sent to the dialog. Almost all of the notifications we are concerned about in ooDialog are sent by a dialog control to its parent. In this case, the edit control sends the got and lost focus notifications to its parent. There is no generic message generated. In general, if an individual control is listed as having an event, the generic event message is not going to be generated for that event. By the way, I just looked and in the latest ooDialog doc, for the connectNotifyEvent() I pretty much spell that out. I'm not saying that to discourage questions here, please ask any and all questions. It is the only way to get things about ooDialog cleared up. My point is, that 2 or 3 years ago the above information was not to be found in the ooDialog doc, and a lot of the doc was misleading. That may have discouraged people from going to the doc to get help with understanding how to use ooDialog. But, in the current doc I've gone a long way to try and clarify how things work. -- Mark Miesfeld |
From: <os...@si...> - 2011-06-15 17:11:15
|
Ah-ha! Many thanks, Mike, that explains it prefectly. I went back and read the manual (build 6965) and yes, it did say (effectively) don't use this. May I suggest that it might be better if your warning were to be more "shouted"? If you wish, I'll submit a patch with my preferred text. Atb, Oliver -----Original Message----- From: Mark Miesfeld [mailto:mie...@gm...] Sent: 14 June 2011 14:26 To: Open Object Rexx Users Subject: Re: [Oorexx-users] ooDialog - Lost/Got Focus event not working? On Mon, Jun 13, 2011 at 8:48 AM, <os...@si...> wrote: Sorry for the late reply, I was not at a computer yesterday. A rare event in my life. <grin> > In the initDialog I specify: > > self~connectNotifyEvent("IDC_DECNUM1","GOTFOCUS",yyyy) > self~connectNotifyEvent("IDC_DECNUM1","LOSTFOCUS",xxxx) > > Both give a zero return code. > > However, no matter how much I try to place focus on the edit control > "IDCDECNUM1", I never get the methods "xxxx" or "yyyy" invoked. > > Am I doing something wromg? Maybe I'm misunsderstanding what "focus" is?? You just need to change to: y = self~connectEditEvent("IDC_DECNUM1","GOTFOCUS",yyyy) x = self~connectEditEvent("IDC_DECNUM1","LOSTFOCUS",xxxx) The connectNotifyEvent() connects a generic event. In general, I'd say it is less predictable to know if you will get the generic event notification unless you understand all the nuances of how the underlying controls work. In order to capture a notification, the notification has to be sent to the dialog. Almost all of the notifications we are concerned about in ooDialog are sent by a dialog control to its parent. In this case, the edit control sends the got and lost focus notifications to its parent. There is no generic message generated. In general, if an individual control is listed as having an event, the generic event message is not going to be generated for that event. By the way, I just looked and in the latest ooDialog doc, for the connectNotifyEvent() I pretty much spell that out. I'm not saying that to discourage questions here, please ask any and all questions. It is the only way to get things about ooDialog cleared up. My point is, that 2 or 3 years ago the above information was not to be found in the ooDialog doc, and a lot of the doc was misleading. That may have discouraged people from going to the doc to get help with understanding how to use ooDialog. But, in the current doc I've gone a long way to try and clarify how things work. -- Mark Miesfeld ---------------------------------------------------------------------------- -- EditLive Enterprise is the world's most technically advanced content authoring tool. Experience the power of Track Changes, Inline Image Editing and ensure content is compliant with Accessibility Checking. http://p.sf.net/sfu/ephox-dev2dev _______________________________________________ Oorexx-users mailing list Oor...@li... https://lists.sourceforge.net/lists/listinfo/oorexx-users |
From: Mark M. <mie...@gm...> - 2011-06-15 18:30:04
|
On Wed, Jun 15, 2011 at 11:09 AM, <os...@si...> wrote: > I went back and read the manual (build 6965) and yes, it did say > (effectively) don't use this. > May I suggest that it might be better if your warning were to be more > "shouted"? > If you wish, I'll submit a patch with my preferred text. Sure go ahead and submit a patch. Remember though that connectNotifyEvent() does work in many cases. It just depends on the specific event combined with the specific control type. -- Mark Miesfeld |
From: <os...@si...> - 2011-06-16 21:33:30
|
Mark, Working through the detail of your numeric check of data in an edit control, I noticed that the "getCaretPos" method is not in build 6965 of the ooDialog ref. I checked in several of the source files, but couldn't find it. Can you tell me please which ooDialog source file I should look in? The statement in your EditDecs file (in the 'onUpdate' method) was: pos = self~getCaretPos(ecDecNum2) - 1 Btw, I wondered why this is not a method on the edit control itself rather than on the dialog. This is an area that seems a little confusing. Is there a principle I can apply to predict whether a method is on a control object or on a dialog object? Many thanks, Oliver |
From: Mark M. <mie...@gm...> - 2011-06-16 22:19:36
|
On Thu, Jun 16, 2011 at 3:31 PM, <os...@si...> wrote: > Working through the detail of your numeric check of data in an edit control, > I noticed that the "getCaretPos" method is not in build 6965 of the ooDialog > ref. I checked in several of the source files, but couldn't find it. Can you > tell me please which ooDialog source file I should look in? > > The statement in your EditDecs file (in the 'onUpdate' method) was: > pos = self~getCaretPos(ecDecNum2) - 1 The getCaretPos() method is a method I wrote in the example program, it is a method I added to my dialog subclass. ::method getCaretPos private > Btw, I wondered why this is not a method on the edit control itself rather > than on the dialog. It is not a method of the .Edit class because the Windows API used with Edit controls does not have such a method. That doesn't mean the method couldn't be added to the .Edit class, it just means no has thought to do so, as of yet. In the Windows API, the EM_GETSEL edit control message is defined as: "Gets the starting and ending character positions of the current selection" and in the Remarks section of the Windows documentation for that message it says: If there is no selection, the starting and ending values are both the position of the caret. So, that is a relatively simple way to get the character position of the caret, and is what I used. However, it is not foolproof. If you do have a selection, the caret will be either at the end of the selection, or the front of the selection - depends on if you selected from right to left or from left to right. > This is an area that seems a little confusing. Is there > a principle I can apply to predict whether a method is on a control object > or on a dialog object? In general there is no principle here. This was confusing I think because you didn't notice that I had defined the method in my program. In general, at this point in ooDialog, I don't think there are any methods for controls that are defined on the dialog object, that don't have a matching method in the control itself. My personal belief is that during the history of ooDialog too many methods were added to the dialog object, that did not belong to a dialog object. Among these are methods like getListWidth and setListWidth that set or get a list box width. I never use methods of the dialog object that should be dialog control methods. If I need to do something with a dialog control, I use a dialog control object. -- Mark Miesfeld |
From: <os...@si...> - 2011-06-16 22:41:11
|
> The getCaretPos() method is a method I wrote in the example program, it is a method I added to my dialog subclass. Doh! Sorry - I should have spotted that... Ref methods on control vs on dialog - maybe the principle is, always look first in the control documentation. Many thx, Oliver -----Original Message----- From: Mark Miesfeld [mailto:mie...@gm...] Sent: 16 June 2011 22:19 To: Open Object Rexx Users Subject: Re: [Oorexx-users] ooDialog - getCaretPos On Thu, Jun 16, 2011 at 3:31 PM, <os...@si...> wrote: > Working through the detail of your numeric check of data in an edit > control, I noticed that the "getCaretPos" method is not in build 6965 > of the ooDialog ref. I checked in several of the source files, but > couldn't find it. Can you tell me please which ooDialog source file I should look in? > > The statement in your EditDecs file (in the 'onUpdate' method) was: > pos = self~getCaretPos(ecDecNum2) - 1 The getCaretPos() method is a method I wrote in the example program, it is a method I added to my dialog subclass. ::method getCaretPos private > Btw, I wondered why this is not a method on the edit control itself > rather than on the dialog. It is not a method of the .Edit class because the Windows API used with Edit controls does not have such a method. That doesn't mean the method couldn't be added to the .Edit class, it just means no has thought to do so, as of yet. In the Windows API, the EM_GETSEL edit control message is defined as: "Gets the starting and ending character positions of the current selection" and in the Remarks section of the Windows documentation for that message it says: If there is no selection, the starting and ending values are both the position of the caret. So, that is a relatively simple way to get the character position of the caret, and is what I used. However, it is not foolproof. If you do have a selection, the caret will be either at the end of the selection, or the front of the selection - depends on if you selected from right to left or from left to right. > This is an area that seems a little confusing. Is there a principle I > can apply to predict whether a method is on a control object or on a > dialog object? In general there is no principle here. This was confusing I think because you didn't notice that I had defined the method in my program. In general, at this point in ooDialog, I don't think there are any methods for controls that are defined on the dialog object, that don't have a matching method in the control itself. My personal belief is that during the history of ooDialog too many methods were added to the dialog object, that did not belong to a dialog object. Among these are methods like getListWidth and setListWidth that set or get a list box width. I never use methods of the dialog object that should be dialog control methods. If I need to do something with a dialog control, I use a dialog control object. -- Mark Miesfeld ---------------------------------------------------------------------------- -- EditLive Enterprise is the world's most technically advanced content authoring tool. Experience the power of Track Changes, Inline Image Editing and ensure content is compliant with Accessibility Checking. http://p.sf.net/sfu/ephox-dev2dev _______________________________________________ Oorexx-users mailing list Oor...@li... https://lists.sourceforge.net/lists/listinfo/oorexx-users |
From: <os...@si...> - 2011-06-26 19:53:59
|
The latest document builds were at http://build.oorexx.org/builds/docs/. This link now seems to be dead. Is this temporary, or has the location moved? Many thanks, Oliver |
From: Mark M. <mie...@gm...> - 2011-06-26 20:52:07
|
On Sun, Jun 26, 2011 at 1:52 PM, <os...@si...> wrote: > The latest document builds were at http://build.oorexx.org/builds/docs/. > This link now seems to be dead. > > Is this temporary, or has the location moved? Temporary, but, the docs weren't being built for several weeks. I'm thinking of adding the oodialog.pdf and oodguide.pdf to the SourceForge download and keeping them (semi) up-to-date. I'll add the latest there in a bit so that people can get them. -- Mark Miesfeld |
From: Mark M. <mie...@gm...> - 2011-06-26 21:15:23
|
On Sun, Jun 26, 2011 at 1:52 PM, Mark Miesfeld <mie...@gm...> wrote: > I'm thinking of adding the oodialog.pdf and oodguide.pdf to the > SourceForge download and keeping them (semi) up-to-date. I'll add the > latest there in a bit so that people can get them. I did that. You can get up-to-date versions of the ooDialog Reference and the ooDialog User Guide docs at: https://sourceforge.net/projects/oorexx/files/ooDialog/ -- Mark Miesfeld |
From: <os...@si...> - 2011-06-27 15:17:02
|
Excellent! Many thanks. -----Original Message----- From: Mark Miesfeld [mailto:mie...@gm...] Sent: 26 June 2011 21:15 To: Open Object Rexx Users Subject: Re: [Oorexx-users] Latest document builds? On Sun, Jun 26, 2011 at 1:52 PM, Mark Miesfeld <mie...@gm...> wrote: > I'm thinking of adding the oodialog.pdf and oodguide.pdf to the > SourceForge download and keeping them (semi) up-to-date. I'll add the > latest there in a bit so that people can get them. I did that. You can get up-to-date versions of the ooDialog Reference and the ooDialog User Guide docs at: https://sourceforge.net/projects/oorexx/files/ooDialog/ -- Mark Miesfeld ---------------------------------------------------------------------------- -- All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2d-c2 _______________________________________________ Oorexx-users mailing list Oor...@li... https://lists.sourceforge.net/lists/listinfo/oorexx-users |
From: David A. <dav...@gm...> - 2011-06-27 12:49:08
|
FYI - The Build Machine is off line at the moment, I hope to have it back sometime today. And you are correct, docs build have not been happening on a regular basis. The VM that does the docs builds has become flaky and I need to replace it. Also, when the Build machine become available again it will take me a few days to get the VMs back up. All this is cause by a change I made to my ATT DSL account. I actually have a new set of static IP addresses and that is what is cause all my reconfiguration issues. Most od them have been resolved but I need to modify the DNS entries for my new IP addresses. David Ashley On 06/26/2011 03:52 PM, Mark Miesfeld wrote: > On Sun, Jun 26, 2011 at 1:52 PM,<os...@si...> wrote: > >> The latest document builds were at http://build.oorexx.org/builds/docs/. >> This link now seems to be dead. >> >> Is this temporary, or has the location moved? > Temporary, but, the docs weren't being built for several weeks. > > I'm thinking of adding the oodialog.pdf and oodguide.pdf to the > SourceForge download and keeping them (semi) up-to-date. I'll add the > latest there in a bit so that people can get them. > > -- > Mark Miesfeld > > ------------------------------------------------------------------------------ > All of the data generated in your IT infrastructure is seriously valuable. > Why? It contains a definitive record of application performance, security > threats, fraudulent activity, and more. Splunk takes this data and makes > sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-d2d-c2 > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > -- David Ashley ooRexx Development Team |
From: <os...@si...> - 2011-06-30 21:16:10
|
I have four .rex files, each with a different set of ::requires directives. The four files refer to one another, all four are part of a single application, and all run in the same process. In fact they are the files attached to my last post "An Edit Control that accepts only decimal numbers". However, if I place all the "::requires" directives in the first file to be loaded (i.e the file I start from the command line) and comment out the "::requires" directives from the other three files, I get errors resulting from classes not found. I had thought that the ::requires directive applied throughout the executing process, but apparently not. Can anyone tell me precisely how the "requires" directive is applied at run-time when a single app consists of multiple files? Many thanks, Oliver |
From: Rick M. <obj...@gm...> - 2011-06-30 21:24:57
|
Each file identifies which other files are required using the ::REQUIRES directives. Each file only has visibility to those other files that it identifies as needing. Since each element identifies only the bits it needs, it avoids potential naming conflicts with other files that might be in use. Rick On Thu, Jun 30, 2011 at 6:14 PM, <os...@si...> wrote: > I have four .rex files, each with a different set of ::requires directives. > The four files refer to one another, all four are part of a single > application, and all run in the same process. In fact they are the files > attached to my last post "An Edit Control that accepts only decimal > numbers". > > However, if I place all the "::requires" directives in the first file to be > loaded (i.e the file I start from the command line) and comment out the > "::requires" directives from the other three files, I get errors resulting > from classes not found. > > I had thought that the ::requires directive applied throughout the executing > process, but apparently not. > > Can anyone tell me precisely how the "requires" directive is applied at > run-time when a single app consists of multiple files? > > Many thanks, > Oliver > > > ------------------------------------------------------------------------------ > All of the data generated in your IT infrastructure is seriously valuable. > Why? It contains a definitive record of application performance, security > threats, fraudulent activity, and more. Splunk takes this data and makes > sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-d2d-c2 > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > |
From: <os...@si...> - 2011-07-10 18:55:05
|
A couple of years ago (around April 2009), I did an ooRexx project with multiple files (containing classes and routines) in three directories. I set up a single file with most of the ::requires statements in it, and called it at the start of the program. This worked. I tried re-running the program the other day, and it didn't work (couldn't find classes/routines). I conclude that the behavior of "::requires" has changed since early-to-mid 2009. Is this the case? Many thanks, Oliver -----Original Message----- From: Rick McGuire [mailto:obj...@gm...] Sent: 30 June 2011 21:25 To: Open Object Rexx Users Subject: Re: [Oorexx-users] How does ::REQUIRES work? Each file identifies which other files are required using the ::REQUIRES directives. Each file only has visibility to those other files that it identifies as needing. Since each element identifies only the bits it needs, it avoids potential naming conflicts with other files that might be in use. Rick On Thu, Jun 30, 2011 at 6:14 PM, <os...@si...> wrote: > I have four .rex files, each with a different set of ::requires directives. > The four files refer to one another, all four are part of a single > application, and all run in the same process. In fact they are the > files attached to my last post "An Edit Control that accepts only > decimal numbers". > > However, if I place all the "::requires" directives in the first file > to be loaded (i.e the file I start from the command line) and comment > out the "::requires" directives from the other three files, I get > errors resulting from classes not found. > > I had thought that the ::requires directive applied throughout the > executing process, but apparently not. > > Can anyone tell me precisely how the "requires" directive is applied > at run-time when a single app consists of multiple files? > > Many thanks, > Oliver > > > ---------------------------------------------------------------------- > -------- All of the data generated in your IT infrastructure is > seriously valuable. > Why? It contains a definitive record of application performance, > security threats, fraudulent activity, and more. Splunk takes this > data and makes sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-d2d-c2 > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > ---------------------------------------------------------------------------- -- All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2d-c2 _______________________________________________ Oorexx-users mailing list Oor...@li... https://lists.sourceforge.net/lists/listinfo/oorexx-users |
From: Rick M. <obj...@gm...> - 2011-07-10 19:10:10
|
A lot of the underlying mechanisms were redone with 4.0, but there have not been any intentional changes to the visibility rules. I don't see how a setup such as the one you describe would ever have worked. Rick On Sun, Jul 10, 2011 at 3:53 PM, <os...@si...> wrote: > A couple of years ago (around April 2009), I did an ooRexx project with > multiple files (containing classes and routines) in three directories. I set > up a single file with most of the ::requires statements in it, and called it > at the start of the program. This worked. > > I tried re-running the program the other day, and it didn't work (couldn't > find classes/routines). I conclude that the behavior of "::requires" has > changed since early-to-mid 2009. Is this the case? > > Many thanks, > Oliver > > > > -----Original Message----- > From: Rick McGuire [mailto:obj...@gm...] > Sent: 30 June 2011 21:25 > To: Open Object Rexx Users > Subject: Re: [Oorexx-users] How does ::REQUIRES work? > > Each file identifies which other files are required using the ::REQUIRES > directives. Each file only has visibility to those other files that it > identifies as needing. Since each element identifies only the bits it > needs, it avoids potential naming conflicts with other files that might be > in use. > > Rick > > On Thu, Jun 30, 2011 at 6:14 PM, <os...@si...> wrote: >> I have four .rex files, each with a different set of ::requires > directives. >> The four files refer to one another, all four are part of a single >> application, and all run in the same process. In fact they are the >> files attached to my last post "An Edit Control that accepts only >> decimal numbers". >> >> However, if I place all the "::requires" directives in the first file >> to be loaded (i.e the file I start from the command line) and comment >> out the "::requires" directives from the other three files, I get >> errors resulting from classes not found. >> >> I had thought that the ::requires directive applied throughout the >> executing process, but apparently not. >> >> Can anyone tell me precisely how the "requires" directive is applied >> at run-time when a single app consists of multiple files? >> >> Many thanks, >> Oliver >> >> >> ---------------------------------------------------------------------- >> -------- All of the data generated in your IT infrastructure is >> seriously valuable. >> Why? It contains a definitive record of application performance, >> security threats, fraudulent activity, and more. Splunk takes this >> data and makes sense of it. IT sense. And common sense. >> http://p.sf.net/sfu/splunk-d2d-c2 >> _______________________________________________ >> Oorexx-users mailing list >> Oor...@li... >> https://lists.sourceforge.net/lists/listinfo/oorexx-users >> > > ---------------------------------------------------------------------------- > -- > All of the data generated in your IT infrastructure is seriously valuable. > Why? It contains a definitive record of application performance, security > threats, fraudulent activity, and more. Splunk takes this data and makes > sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-d2d-c2 > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > > > ------------------------------------------------------------------------------ > All of the data generated in your IT infrastructure is seriously valuable. > Why? It contains a definitive record of application performance, security > threats, fraudulent activity, and more. Splunk takes this data and makes > sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-d2d-c2 > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > |
From: <os...@si...> - 2011-07-10 20:39:09
|
Rick, you're right. I just recovered the project from backup to check my memory. I did have a file of ::requires (for a good reason), but I *also* had ::requires in each of the other files as appropriate - i.e. according to the rules you described. My apologies, Oliver -----Original Message----- From: Rick McGuire [mailto:obj...@gm...] Sent: 10 July 2011 19:10 To: Open Object Rexx Users Subject: Re: [Oorexx-users] How does ::REQUIRES work? A lot of the underlying mechanisms were redone with 4.0, but there have not been any intentional changes to the visibility rules. I don't see how a setup such as the one you describe would ever have worked. Rick On Sun, Jul 10, 2011 at 3:53 PM, <os...@si...> wrote: > A couple of years ago (around April 2009), I did an ooRexx project > with multiple files (containing classes and routines) in three > directories. I set up a single file with most of the ::requires > statements in it, and called it at the start of the program. This worked. > > I tried re-running the program the other day, and it didn't work > (couldn't find classes/routines). I conclude that the behavior of > "::requires" has changed since early-to-mid 2009. Is this the case? > > Many thanks, > Oliver > > > > -----Original Message----- > From: Rick McGuire [mailto:obj...@gm...] > Sent: 30 June 2011 21:25 > To: Open Object Rexx Users > Subject: Re: [Oorexx-users] How does ::REQUIRES work? > > Each file identifies which other files are required using the > ::REQUIRES directives. Each file only has visibility to those other > files that it identifies as needing. Since each element identifies > only the bits it needs, it avoids potential naming conflicts with > other files that might be in use. > > Rick > > On Thu, Jun 30, 2011 at 6:14 PM, <os...@si...> wrote: >> I have four .rex files, each with a different set of ::requires > directives. >> The four files refer to one another, all four are part of a single >> application, and all run in the same process. In fact they are the >> files attached to my last post "An Edit Control that accepts only >> decimal numbers". >> >> However, if I place all the "::requires" directives in the first file >> to be loaded (i.e the file I start from the command line) and comment >> out the "::requires" directives from the other three files, I get >> errors resulting from classes not found. >> >> I had thought that the ::requires directive applied throughout the >> executing process, but apparently not. >> >> Can anyone tell me precisely how the "requires" directive is applied >> at run-time when a single app consists of multiple files? >> >> Many thanks, >> Oliver >> >> >> --------------------------------------------------------------------- >> - >> -------- All of the data generated in your IT infrastructure is >> seriously valuable. >> Why? It contains a definitive record of application performance, >> security threats, fraudulent activity, and more. Splunk takes this >> data and makes sense of it. IT sense. And common sense. >> http://p.sf.net/sfu/splunk-d2d-c2 >> _______________________________________________ >> Oorexx-users mailing list >> Oor...@li... >> https://lists.sourceforge.net/lists/listinfo/oorexx-users >> > > ---------------------------------------------------------------------- > ------ > -- > All of the data generated in your IT infrastructure is seriously valuable. > Why? It contains a definitive record of application performance, > security threats, fraudulent activity, and more. Splunk takes this > data and makes sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-d2d-c2 > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > > > ---------------------------------------------------------------------- > -------- All of the data generated in your IT infrastructure is > seriously valuable. > Why? It contains a definitive record of application performance, > security threats, fraudulent activity, and more. Splunk takes this > data and makes sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-d2d-c2 > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > ---------------------------------------------------------------------------- -- All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2d-c2 _______________________________________________ Oorexx-users mailing list Oor...@li... https://lists.sourceforge.net/lists/listinfo/oorexx-users |
From: <os...@si...> - 2011-07-10 21:55:05
|
If you're using ResEdit to generate *.rc and *.h files to use with ooDialog, then beware of an infrequent but potentially tricky problem. It's this: sometimes ResEdit (an otherwise excellent piece of freeware) generates, in a *.h file, two different symbolic IDs with the same numeric ID. This can lead to unexpected results (such as closing the dialog when clicking a radio button - turned out the my menu item "Close" had the same numweric ID as the radio button!). Oliver |
From: Mark M. <mie...@gm...> - 2011-06-14 17:16:57
|
On Mon, Jun 13, 2011 at 8:48 AM, <os...@si...> wrote: > PS: The code is attached - a test dialog for sorting out how to check for > valid numeric entry. It's pretty messy I'm afraid 'cos I'm doing a couple of > other things as well. Oliver, I reworked you program to restrict the user to entering a decimal number with no more than 2 decimal places. It is a pretty good implementation. The code is formatted so it shouldn't wrap. For your reference: /** * Shows how prevent the user from entering invalid * characters in an edit control. In this case the * user is resctricted to entering a decimal number * with no more than 2 decimal places. */ .EditDecs~newInstance ::requires ooDialog.cls ::class EditDecs subclass ResDialog ::method newInstance class dlg = self~new("EditDecs.dll", IDD_EDITDECS, - dlgData., "EditDecs.h") dlg~activate ::method activate unguarded r = self~execute("SHOWTOP") say "EditDecs-activate-02: r =" r ::method initDialog expose ecDecNum1 ecDecNum2 decNum2Prev inSetText ecDecNum1 = self~newEdit("IDC_DECNUM1") ecDecNum2 = self~newEdit("IDC_DECNUM2") self~connectEditEvent("IDC_DECNUM1", "GOTFOCUS", - onGotFocus) self~connectEditEvent("IDC_DECNUM1", "LOSTFOCUS", - onLostFocus) self~connectEditEvent("IDC_DECNUM2","UPDATE") decNum2Prev = '' inSetText = .false ::method onUpdate unguarded expose ecDecNum2 decNum2Prev inSetText text = ecDecNum2~getText() if inSetText then do inSetText = .false return end if \ self~isValidNumber(text, ecDecNum2) then do pos = self~getCaretPos(ecDecNum2) - 1 inSetText = .true ecDecNum2~setText(decNum2Prev) ecDecNum2~select(pos, pos) return self~badChar(ecDecNum2) end else do decNum2Prev = text end ::method isValidNumber private use strict arg number, edit haveDecimal = .false places = 0 do i = 1 to number~length n = number~substr(i, 1) if haveDecimal then do if n == '.' then return self~setBalloonMsg(places) places += 1 if places > 2 then return self~setBalloonMsg(places) end if \ self~isDecimalDigit(n) then return self~setBalloonMsg(places) if n == '.' then haveDecimal = .true end return .true ::method setBalloonMsg private expose balloonMsg use strict arg places if places >= 2 then balloonMsg = "Only two decimal places are allowed." else balloonMsg = "You can only type a number here." return .false ::method badChar private expose balloonMsg use strict arg edit edit~showBalloon("Unacceptable Character", - balloonMsg, "ERROR") return 0 ::method isDecimalDigit private use strict arg n if n >= 0, n <= 9 then return .true if n == '.' then return .true return .false ::method getCaretPos private use strict arg edit d = edit~selection if d~startChar == d~endChar then return d~startChar else return d~endChar ::method onLostFocus unguarded say "Lost Focus IDC_DECNUM1." ::method onGotFocus unguarded say "Got Focus IDC_DECNUM1." -- Mark Miesfeld |
From: Mark M. <mie...@gm...> - 2011-07-05 15:29:11
|
On Tue, Jun 14, 2011 at 10:16 AM, Mark Miesfeld <mie...@gm...> wrote: > On Mon, Jun 13, 2011 at 8:48 AM, <os...@si...> wrote: > > > PS: The code is attached - a test dialog for sorting out how to check for > > valid numeric entry. It's pretty messy I'm afraid 'cos I'm doing a couple > of > > other things as well. > > Oliver, > > I reworked you program to restrict the user to entering a decimal > number with no more than 2 decimal places. It is a pretty good > implementation. > My implementation was okay, but I wasn't 100% happy with it. That, plus Oliver's idea to subclass the edit control to make the decimal number only available generically, lead me to create a better implementation. I put the example in the "Extra ooDialog Samples" package I just announced. Which can be downloaded from: https://sourceforge.net/projects/oorexx/files/ooDialog/ooDialog.Samples/ You will need to pick up the latest beta ooDialog 4.2.0 build also. After you install the samples package, the number only example will be found in ooDialog.samples.0.0.1\Controls\Edit\NumberOnly All the code for implementing the functionality is in a file: NumberOnlyEditEx.cls To include a decimal number only edit control in you programs, you just require that file: ::requires 'ooDialog.cls' ::requires 'NumberOnlyEditEx.cls' There is an example program: CalcMPG.rex that demonstrates how to use the NumberOnlyEditEx extension, along with a read me. The extension supports signed decimal numbers, so you can have an edit control that allows numbers like -1388.342 or +96.98. You specify how many decimal places to allow, and optionally whether to allow the sign character, through the initDecimalOnly() method: editGas = self~newEdit(IDC_EDIT_GAS) editGas~initDecimalOnly(3) initDecimalOnly() takes a second arg that allows the sign character, by default the sign character is not allowed: editGas = self~newEdit(IDC_EDIT_GAS) editGas~initDecimalOnly(2, .true) The functionality is implemented using the connectCharEvent() method. With this event connection, your event handling method get invoked each time a character is about to be sent to the edit control. In your event handler, you can examine which character is about to be sent to the edit control. If you reply .true, the character is then sent to the control. If you reply .false, the character is not sent. That is the proper way to implement this functionality. editGas = self~newEdit(IDC_EDIT_GAS) editGas~initDecimalOnly(3) editGas~connectCharEvent(onChar) In the event handler method in the dialog object, you just forward the onChar() message to the edit control: ::method onChar unguarded forward to (arg(6)) The NumberOnlyEditEx extension implements the initDecimalOnly() method and the onChar() event handler that is forwarded to from your dialog object. The actual arguments to the onChar() method are: ::method onChar unguarded use arg char, isShift, isCtrl, isAlt, misc, control The sixth argument, the 'control' argument above, is the actual Rexx edit control object. The technique for the decimal number only implementation could be used as a basis for implementing other types of restricted input edit controls. Telephone number only edit controls would be one example. -- Mark Miesfeld |
From: <os...@si...> - 2011-07-06 09:46:45
|
Oops - strike my note about allowing for translation - all human-visible strings are already externalised in class 'MT' (in file NumberOnlyEditEx.cls). Excellent. Oliver _____ From: Oliver Sims [mailto:oli...@si...] On Behalf Of os...@si... Sent: 06 July 2011 10:12 To: 'Open Object Rexx Users' Subject: RE: [Oorexx-users] ooDialog - Lost/Got Focus event not working? Great stuff, Mark. I love it! I'll certainly use it in the Guide. Two possible enhancements: - Provide for specifying a limit to number of digits before the decimal point (e.g. if a price is not allowed to be more than 1000). - Allow for translation of the text in the balloons into another language. Oliver _____ From: Mark Miesfeld [mailto:mie...@gm...] Sent: 05 July 2011 15:29 To: Open Object Rexx Users Subject: Re: [Oorexx-users] ooDialog - Lost/Got Focus event not working? On Tue, Jun 14, 2011 at 10:16 AM, Mark Miesfeld <mie...@gm...> wrote: On Mon, Jun 13, 2011 at 8:48 AM, <os...@si...> wrote: > PS: The code is attached - a test dialog for sorting out how to check for > valid numeric entry. It's pretty messy I'm afraid 'cos I'm doing a couple of > other things as well. Oliver, I reworked you program to restrict the user to entering a decimal number with no more than 2 decimal places. It is a pretty good implementation. My implementation was okay, but I wasn't 100% happy with it. That, plus Oliver's idea to subclass the edit control to make the decimal number only available generically, lead me to create a better implementation. I put the example in the "Extra ooDialog Samples" package I just announced. Which can be downloaded from: https://sourceforge.net/projects/oorexx/files/ooDialog/ooDialog.Samples/ You will need to pick up the latest beta ooDialog 4.2.0 build also. After you install the samples package, the number only example will be found in ooDialog.samples.0.0.1\Controls\Edit\NumberOnly All the code for implementing the functionality is in a file: NumberOnlyEditEx.cls To include a decimal number only edit control in you programs, you just require that file: ::requires 'ooDialog.cls' ::requires 'NumberOnlyEditEx.cls' There is an example program: CalcMPG.rex that demonstrates how to use the NumberOnlyEditEx extension, along with a read me. The extension supports signed decimal numbers, so you can have an edit control that allows numbers like -1388.342 or +96.98. You specify how many decimal places to allow, and optionally whether to allow the sign character, through the initDecimalOnly() method: editGas = self~newEdit(IDC_EDIT_GAS) editGas~initDecimalOnly(3) initDecimalOnly() takes a second arg that allows the sign character, by default the sign character is not allowed: editGas = self~newEdit(IDC_EDIT_GAS) editGas~initDecimalOnly(2, .true) The functionality is implemented using the connectCharEvent() method. With this event connection, your event handling method get invoked each time a character is about to be sent to the edit control. In your event handler, you can examine which character is about to be sent to the edit control. If you reply .true, the character is then sent to the control. If you reply .false, the character is not sent. That is the proper way to implement this functionality. editGas = self~newEdit(IDC_EDIT_GAS) editGas~initDecimalOnly(3) editGas~connectCharEvent(onChar) In the event handler method in the dialog object, you just forward the onChar() message to the edit control: ::method onChar unguarded forward to (arg(6)) The NumberOnlyEditEx extension implements the initDecimalOnly() method and the onChar() event handler that is forwarded to from your dialog object. The actual arguments to the onChar() method are: ::method onChar unguarded use arg char, isShift, isCtrl, isAlt, misc, control The sixth argument, the 'control' argument above, is the actual Rexx edit control object. The technique for the decimal number only implementation could be used as a basis for implementing other types of restricted input edit controls. Telephone number only edit controls would be one example. -- Mark Miesfeld |
From: Ruurd I. <ru...@id...> - 2011-07-07 12:08:22
|
The README's for 4.0.0 and 4.0.1 had WSH temporarily disabled. The README for 4.1.0 does not mention that anymore. Does that mean WSH is enabled in 4.1.0? tia, Ruurd |
From: Rick M. <obj...@gm...> - 2011-07-07 12:16:32
|
No, there still is no WSH support. Rick On Thu, Jul 7, 2011 at 7:52 AM, Ruurd Idenburg <ru...@id...> wrote: > The README's for 4.0.0 and 4.0.1 had WSH temporarily disabled. > > The README for 4.1.0 does not mention that anymore. > > Does that mean WSH is enabled in 4.1.0? > > tia, > > Ruurd > > ------------------------------------------------------------------------------ > All of the data generated in your IT infrastructure is seriously valuable. > Why? It contains a definitive record of application performance, security > threats, fraudulent activity, and more. Splunk takes this data and makes > sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-d2d-c2 > _______________________________________________ > Oorexx-users mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-users > > |