Module Msgbox.pkg
1// MSGBOX.pkg
2//
3// 08/02/96 JJT - Checks a little harder for a container handle. If object
4// using this is inactive (no handle) we want it to look for
5// its parent handle. Else we get modeless confirm
6// 09/12/96 JJT - Add addition Default button support
7//
8Use VdfBase.pkg
9Use LanguageText.pkg
10Use Dll.pkg
11Use WinUser.pkg
12Use GlobalFunctionsProcedures.pkg
13
14// Buttons required
15#replace MB_OK |CI$00000000
16#replace MB_OKCANCEL |CI$00000001
17#replace MB_ABORTRETRYIGNORE |CI$00000002
18#replace MB_YESNOCANCEL |CI$00000003
19#replace MB_YESNO |CI$00000004
20#replace MB_RETRYCANCEL |CI$00000005
21
22// Icon required
23#replace MB_ICONHAND |CI$00000010
24#replace MB_ICONQUESTION |CI$00000020
25#replace MB_ICONEXCLAMATION |CI$00000030
26#replace MB_ICONASTERISK |CI$00000040
27#replace MB_ICONWARNING MB_ICONEXCLAMATION
28#replace MB_ICONERROR MB_ICONHAND
29#replace MB_ICONINFORMATION MB_ICONASTERISK
30#replace MB_ICONSTOP MB_ICONHAND
31
32// Default to which button
33
34#replace MB_DEFBUTTON1 |CI$00000000
35#replace MB_DEFBUTTON2 |CI$00000100
36#replace MB_DEFBUTTON3 |CI$00000200
37#replace MB_DEFBUTTON4 |CI$00000300
38
39// Modal Type
40#replace MB_APPLMODAL |CI$00000000
41#replace MB_SYSTEMMODAL |CI$00001000
42#replace MB_TASKMODAL |CI$00002000
43
44#replace MB_HELP |CI$00004000
45#replace MB_RIGHT |CI$00080000
46#replace MB_RTLREADING |CI$00100000
47
48#replace MB_NOFOCUS |CI$00008000
49#replace MB_SETFOREGROUND |CI$00010000
50#replace MB_DEFAULT_DESKTOP_ONLY |CI$00020000
51#replace MB_SERVICE_NOTIFICATION |CI$00040000
52
53#replace MB_TYPEMASK |CI$0000000F
54
55#replace MB_USERICON |CI$00000080
56
57#replace MB_ICONMASK |CI$000000F0
58#replace MB_DEFMASK |CI$00000F00
59#replace MB_MODEMASK |CI$00003000
60#replace MB_MISCMASK |CI$0000C000
61
62// Function Return Values
63#REPLACE MBR_Ok 1
64#REPLACE MBR_Cancel 2
65#REPLACE MBR_Abort 3
66#REPLACE MBR_Retry 4
67#REPLACE MBR_Ignore 5
68#REPLACE MBR_Yes 6
69#REPLACE MBR_No 7
70
71External_Function MessageBox "MessageBoxA" User32.dll ;
72 Handle hWndParent ;
73 String sText ;
74 String sCaption ;
75 DWord wType ;
76 Returns Integer
77
78Function Message_Box GLOBAL String sMessage String sCaption ;
79 Integer Btns Integer Icon returns Integer
80 Boolean bEnabled
81 Handle hWnd hwPrnt hwTest hwOwner
82 String IncorrectNewline
83 String szMessage szCaption
84 Pointer lpszMessage lpszCaption
85 integer rval iVoid Obj
86
87 Move (Replaces("\n",sMessage,Character(13))) to sMessage
88 Move (sMessage +character(0)) To szMessage
89
90 Move "" To IncorrectNewline
91 Append IncorrectNewline "\" (Character(13))
92 Move (Replaces(IncorrectNewline, szMessage, "\n")) To szMessage
93
94 GetAddress of szMessage To lpszMessage
95 Move (OemToAnsi(lpszMessage,lpszMessage)) To iVoid
96
97 Move (sCaption +character(0)) To szCaption
98 GetAddress of szCaption To lpszCaption
99 Move (OemToAnsi(lpszCaption,lpszCaption)) To iVoid
100
101 // 8.3 change. Global methods should not be using self. We will have message boxes use
102 // the focus as a starting point for looking for a container handle. (this was changed for 12.0 - see below)
103
104
105 Get Focus of desktop to Obj // start with the focus
106 Move (gOwnerWindowHandle(Obj)) to hWnd // global function finds the right handle for us
107 // If no main-window, use container_handle of focus. If no window handle, use MB_TASKMODAL. We don't always use this
108 // because it adds the message box to the caption bar.
109 Move (MessageBox (hWnd, szMessage, szCaption, Btns IOR Icon IOR If(hWnd=0,MB_TASKMODAL,0))) To rval
110 Function_Return rVal
111End_Function
112
113Procedure Info_Box GLOBAL String sMessage String sTitle
114 Handle hWnd
115 String sCaption
116 integer rval
117 If Num_Arguments eq 1 Move C_$Information To sCaption
118 Else Move sTitle To sCaption
119 Get Message_Box sMessage sCaption MB_OK MB_ICONINFORMATION to rval
120End_Procedure
121
122Procedure Stop_Box GLOBAL String sMessage String sTitle
123 Handle hWnd
124 String sCaption
125 Integer rval
126 If (Num_Arguments eq 1 or sTitle='') Move C_$Stop To sCaption
127 Else Move sTitle To sCaption
128 Get Message_Box sMessage sCaption MB_OK MB_ICONHAND to rval
129End_Procedure
130
131Function YesNo_Box GLOBAL String sMessage String sTitle Integer DfltBtn ;
132 Returns Integer
133 Handle hWnd
134 String sCaption
135 Integer Dflt
136 Integer rval
137
138 If (Num_Arguments = 1 or sTitle = '') Move C_$Question To sCaption
139 Else Move sTitle To sCaption
140
141 If (Num_Arguments < 3 OR DfltBtn = 0 OR DfltBtn = MB_DEFBUTTON1);
142 Move MB_DEFBUTTON1 to Dflt
143 Else ;
144 Move MB_DEFBUTTON2 to Dflt
145
146 Get Message_Box sMessage sCaption MB_YESNO (MB_ICONQUESTION IOR Dflt) ;
147 to rval
148
149 Function_Return rval
150End_Function
151
152Function YesNoCancel_Box GLOBAL String sMessage String sTitle Integer DfltBtn ;
153 Returns Integer
154 Handle hWnd
155 String sCaption
156 Integer rval
157 Integer Dflt
158
159 If (Num_Arguments = 1 or sTitle = '') Move C_$Question To sCaption
160 Else Move sTitle To sCaption
161
162 If (Num_Arguments < 3 OR DfltBtn = 0 OR DfltBtn = MB_DEFBUTTON1);
163 Move MB_DEFBUTTON1 to Dflt
164 Else If (DfltBtn = 1 OR DfltBtn = MB_DEFBUTTON2);
165 Move MB_DEFBUTTON2 to Dflt
166 Else ;
167 Move MB_DEFBUTTON3 to Dflt
168
169 Get Message_Box sMessage sCaption MB_YESNOCANCEL (MB_ICONQUESTION IOR Dflt) ;
170 to rval
171
172 Function_Return rval
173End_Function
174