Very neat, and I just love the balloons. Just one thought to do with structure/granularity. There are six or so methods in your (elegant) solution. But I'd like to have numeric checking on entry fields in a number of dialogs, and would prefer not to copy/paste code. Arguably the numeric-check methods would be better placed in a subclass of the edit control.
So: Is there any way I can subclass the Edit control? Or provide a mixin for it? I can't immediately see how this could be done. Of course an alternative would be to build a sort of "buddy" class or routine. Any thoughts? Many thx, Oliver -----Original Message----- From: Mark Miesfeld [mailto:[email protected]] Sent: 14 June 2011 17:17 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, <[email protected]> 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 ---------------------------------------------------------------------------- -- 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 [email protected] https://lists.sourceforge.net/lists/listinfo/oorexx-users ------------------------------------------------------------------------------ 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 [email protected] https://lists.sourceforge.net/lists/listinfo/oorexx-users
