Of course, the next step is to wrap some code around your form and turn it
into a stored procedure so you can call it from anywhere, substituting
messages / button text, etc., as appropriate.

Emmitt Dove
Manager, Converting Applications Development
Evergreen Packaging, Inc.
[email protected]
(203) 214-5683 m
(203) 643-8022 o
(203) 643-8086 f
[email protected]


-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Doug
Hamilton
Sent: Monday, March 16, 2009 5:43 PM
To: RBASE-L Mailing List
Subject: [RBASE-L] - RE: 3 Button Pause/Dialog?

Thanks Mike. I tried your code and it worked (that was enough to make my 
day!)
Then I realized I wanted the Cancel to be the default. I went to the 
MSDN site, found the parameter & tried for a while to figure it out.
Then I thought hints & colors would be a good idea and so I created a 
generic 3 button R:Base form, YesNoCancel, as Emmitt, Larry & Javier 
suggested so I could get it "just so".  
I predefine hints, captions and message and apply them in an AfterStart 
EEP; they can changed to suit the specific need.
Each button on the form sets the appropriate vYNCResponse value.

SET VAR +
  vYNCCancelHint TEXT = ('Return to editing.'), +
  vYNCCaption text = ('Finished Edtiting'), +
  vYNCMsg TEXT = ('Do you want to exit and update?'), +
  vYNCNoHint TEXT = ('Discard all changes and exit.'), +
  vYNCResponse TEXT = NULL, +
  vYNCYesHint TEXT = ('Process the data and exit.')
 
EDIT USING YesNoCancel
CLEAR VAR vYNCCancelHint,vYNCCaption,vYNCNoHint,vYNCYesHint,vYNCMsg

IF vYNCResponse = ('Cancel') THEN
  RETURN
ENDIF

IF vYNCResponse = ('No') THEN
  CLOSEWINDOW
  RETURN
ENDIF

IF vYNCResponse = ('Yes') THEN
  CLOSEWINDOW
  RETURN
[process in calling form]
ENDIF

Thanks to all
Doug

MikeB wrote:

> Doug,
>
> How about using the wonderful Windows MessageBox?  Here's how:
> NOTE:  You have to supply a HANDLE for the Message box.  If you do not 
> supply a handle, it will become modeless and can be buried behind the 
> users view..  HANDLE is an undocumented value that is accessible with 
> the GETPROPERTY CompID HANDLE 'vHandleText' command.  You need to 
> convert the text to INTEGER before passing it to the function.
>
> The example shown here does NOT have an icon, but by changing the UINT 
> value, you can include the standard Windows Icons for the Message box.
> You VB/VBA users will recognize the structure of the MessageBox as the 
> underlying control used by those languages.
>
> In your forms OnBefore:
> { The declaration arguments are:
> 1 is an UINT (use RBase Integer) for the type of message box,
> 2 is the Caption of the message box,
> 3 is the Message to be displayed,
> 4 is the handle of the owner window (the current form or control}
> }
>
> IF (chkfunc('MessageBoxA')) = 0 THEN
>  STDCALL function 'MessageBoxA' alias 'MessageBox' +
>  (integer, ptr text (128), ptr text, integer  ) : integer
> ENDIF
>
> In your controls EEP:
> {Get the HANDLE of the owner window (form or control)}
> SET VAR vthiswndtxt TEXT = NULL
> GETPROPERTY RBASE_FORM HANDLE 'vThisWndtxt'
> SET VAR vcallerhwnd = (INT(.vthiswndtxt))
>
> SET VAR mb_yesnocancel = 3
> SET VAR vretval INTEGER = 0
> SET VAR vcaption TEXT = 'This is the Caption'
>
> SET VAR vmsg TEXT = ('This is the Message first Line' + +
> (CHAR(13)) +  (CHAR(10)) + +
> 'Select Yes, No, or Cancel')
>
>
> --                                  Type     Caption   Message  OwnerWnd
> -- function 'MessageBox' (integer, text (128), text, integer  ) : integer
>
> SET VAR vretval = (dlcall('user32.dll', 'MessageBoxA', mb_yesnocancel, 
> vcaption, vmsg, vcallerhwnd))
>
> SWITCH (.vretval)
>  CASE 6
>    PAUSE 2 USING 'You Selected YES  '
>    BREAK
>  CASE 7
>    PAUSE 2 USING 'You Selected  NO '
>    BREAK
>  CASE 2
>    PAUSE 2 USING 'You Selected CANCEL  '
>    BREAK
>  DEFAULT
>    PAUSE 2 USING 'You Selected CANCEL  '
>    BREAK
> ENDSW
>
>
> RECALC VARIABLES
>
>
> { All of the constant values to make up the various incarnations of 
> the MessageBox can be found at Microsoft's MSDN Library, this URL:
> <:http://msdn.microsoft.com/en-us/library/ms645505(VS.85).aspx>
>
>
> }
>
>
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of Doug
> Hamilton
> Sent: Monday, March 16, 2009 11:40 AM
> To: RBASE-L Mailing List
> Subject: [RBASE-L] - 3 Button Pause/Dialog?
>
> Can Pause or Dialog boxes have three buttons?
> Or should I build a quick mini-form w/ 3 buttons?
>
> Situation:
> User clicks exit button on a form after editing.
> Pause/Dialog/whatever, pops up for confirmation:
> ___
> Do you want to update the data?
>  Yes     No     Cancel
>
> Yes - updates & exits
> No - Exits without updating
> Cancel - returns to the form for more editing
>
> I could have two separate buttons on the form (Yes & No, Cancel is
> unneeded), but you know user will click "Yes" which will instantaneously
> illicit a "D'OH!".  Confirmation-after-click is much preferred.
>
> Or, ('cause it's Monday), what obvious solution am I not seeing?
> TIA
> Doug
>
>
>


Reply via email to