Tips: dialog code in the forum

New QM versions, other news. Forum rules and tips.

Tips: dialog code in the forum

Postby Gintaras on Wed Jul 11, 2007 11:32 am

I often give dialog examples like this:

Function Dialog35
\Dialog_Editor
function# hDlg message wParam lParam
if(hDlg) goto messages

str controls = "3"
str e3
if(!ShowDialog("Dialog35" &Dialog35 &controls)) ret

;BEGIN DIALOG
;0 "" 0x90C80A44 0x100 0 0 223 135 "Dialog"
;1 Button 0x54030001 0x4 120 116 48 14 "OK"
;2 Button 0x54030000 0x4 170 116 48 14 "Cancel"
;3 Edit 0x54030080 0x200 6 10 96 14 ""
;END DIALOG
;DIALOG EDITOR: "" 0x202000B "" ""


ret
;messages
sel message
,case WM_INITDIALOG
,case WM_DESTROY
,case WM_COMMAND goto messages2
ret
;messages2
sel wParam
,case IDOK
,case IDCANCEL
ret 1



It may be not clear how to use it. Here are the explanations:

Create new function. Its name must be the same as used with the ShowDialog function in the example (in this case - Dialog35). Copy the code from the forum and paste in QM using menu Edit -> Other Formats -> Paste Escaped (in QM 2.3.0 and later - simply paste, and click 'Correct...' if it appears in the output).

If you need the function to have other name, give it any name and replace function name in the code. For example, if your function is MyDialog, use this:

if(!ShowDialog("MyDialog" &MyDialog &controls)) ret

Now, when you run the function using the Run button, it shows the dialog. If you need to show the dialog from other macro or function, cut the code that shows the dialog and paste there.

Also, to make the dialog easily editable with the Dialog Editor, insert space or semicolon before \ in the first line. Then, when you run the function using the Run button, it opens the dialog in the Dialog Editor.

Example:

Function Dialog35:
;\Dialog_Editor
function# hDlg message wParam lParam
if(hDlg) goto messages

;BEGIN DIALOG
;0 "" 0x90C80A44 0x100 0 0 223 135 "Dialog"
;1 Button 0x54030001 0x4 120 116 48 14 "OK"
;2 Button 0x54030000 0x4 170 116 48 14 "Cancel"
;3 Edit 0x54030080 0x200 6 10 96 14 ""
;END DIALOG
;DIALOG EDITOR: "" 0x202000B "" ""


ret
;messages
sel message
,case WM_INITDIALOG
,case WM_DESTROY
,case WM_COMMAND goto messages2
ret
;messages2
sel wParam
,case IDOK
,case IDCANCEL
ret 1



Another macro or function where you want to put code that shows the dialog:
;...
str controls = "3"
str e3
if(!ShowDialog("Dialog35" &Dialog35 &controls)) ret
;...


Gintaras
Site Admin
 
Posts: 10328
Joined: Thu Dec 19, 2002 7:36 pm
Location: Lithuania

Postby Gintaras on Wed Oct 31, 2007 6:20 am

And one important note. Dialog functions that look like above must not be used with QM versions below 2.1.9. Dialog functions compatible with older QM versions must contain some more code. Example:

;\Dialog_Editor
function# hDlg message wParam lParam
if(hDlg) goto messages

;BEGIN DIALOG
;0 "" 0x90C80A44 0x100 0 0 223 135 "Dialog"
;1 Button 0x54030001 0x4 120 116 48 14 "OK"
;2 Button 0x54030000 0x4 170 116 48 14 "Cancel"
;3 Edit 0x54030080 0x200 8 8 96 14 ""
;END DIALOG
;DIALOG EDITOR: "" 0x2020100 "" ""


ret
;messages
sel message
,case WM_INITDIALOG
,DT_Init(hDlg lParam) ;;*
,ret 1 ;;*
,case WM_DESTROY DT_DeleteData(hDlg) ;;*
,case WM_COMMAND goto messages2
ret
;messages2
sel wParam
,case IDOK
,DT_Ok hDlg ;;*
,case IDCANCEL DT_Cancel hDlg ;;*
ret 1

;* - not necessary in QM >= 2.1.9




You can make functions created for QM >= 2.1.9 compatible with older QM versions. Just insert the missing code.
Gintaras
Site Admin
 
Posts: 10328
Joined: Thu Dec 19, 2002 7:36 pm
Location: Lithuania


Return to QM and Forum Info

Who is online

Users browsing this forum: No registered users and 2 guests

cron