str controls ="3" str ax3SHD
ax3SHD="$desktop$\index.html";; change to location of your html files if(!ShowDialog(dd &sub.DlgProc&controls))ret
#sub DlgProc function# hDlg message wParam lParam
sel message ,caseWM_INITDIALOG ,MSHTML.HTMLDocument doc=sub.DT_GetHtmlDocument(hDlg 3) ,MSHTML.HTMLInputElement- button1=+doc.getElementById("Button1") ,button1._setevents("sub.button1") ,MSHTML.HTMLInputElement- button2=+doc.getElementById("Button2") ,button2._setevents("sub.button2") ,;Note: HTMLInputElement can be used for any type of input elements. For some element types also can be used specific interfaces, eg HTMLInputTextElement. ,;Note: Use thread variables for html elements for which is called _setevents. ,;Note: After navigating to other page, if these thread variables still must be used, they must be reinitialized, and _setevents called again. If not used, they should be cleared (=0). ,caseWM_DESTROY ,caseWM_COMMANDgoto messages2 ret ;messages2 sel wParam ,caseIDOK ,caseIDCANCEL ret1 #sub DT_GetHtmlDocument function'MSHTML.HTMLDocument hDlg ctrlid [flags] ;;flags: 1 - return 0 if not loaded
;Returns MSHTML.HTMLDocument interface pointer of a web browser control which is on a custom dialog. ;Call this function from dialog procedure. ;Returns 0 if the control currently is not displaying a html document.
;hDlg - parent dialog ;ctrlid - web browser control id ;SHDocVw.WebBrowser we3 SHDocVw.WebBrowser we
we._getcontrol(id(ctrlid hDlg)) if(flags&1)if(we.Busyor we.ReadyState!=SHDocVw.READYSTATE_COMPLETE)ret ret we.Document
#sub button1_onclick functionMSHTML.DispHTMLInputElement'btn out"button 1 clicked" mes"sub1 button has been clicked"
#sub button2_onclick functionMSHTML.DispHTMLInputElement'btn1 out"button 2 clicked" mes"this is QM mes"
i had to revise your html as well got rid of useless unneeded parts and had to put css in html file or sometimes qm would have trouble finding the elements because it wasn't loaded yet.
indexrevised.zip (Size: 537 bytes / Downloads: 331)
i reposted the code and attachment posted wrong attachment and changed directory for the file in dialog code. place the html file on the desktop not in a folder
08-17-2018, 09:39 PM (This post was last modified: 08-17-2018, 09:47 PM by win.)
I added a text area in index.html with some QM code, can I run it?
If I can implement the functions, I put index.html in my website space, my friend, as long as QM is installed, he can run the QM code I wrote, which is very good.
str controls ="3" str ax3SHD
ax3SHD="$desktop$\index+.html";; change to location of your html files if(!ShowDialog(dd &sub.DlgProc&controls))ret
#sub DlgProc function# hDlg message wParam lParam
sel message ,caseWM_INITDIALOG ,MSHTML.HTMLDocument doc=sub.DT_GetHtmlDocument(hDlg 3) ,MSHTML.HTMLInputElement- button1=+doc.getElementById("Button1") ,button1._setevents("sub.button1") ,MSHTML.HTMLInputElement- button2=+doc.getElementById("Button2") ,button2._setevents("sub.button2") ,MSHTML.HTMLInputElement- button3=+doc.getElementById("Button2") ,button2._setevents("sub.button3") ,??? ,;Note: HTMLInputElement can be used for any type of input elements. For some element types also can be used specific interfaces, eg HTMLInputTextElement. ,;Note: Use thread variables for html elements for which is called _setevents. ,;Note: After navigating to other page, if these thread variables still must be used, they must be reinitialized, and _setevents called again. If not used, they should be cleared (=0). ,caseWM_DESTROY ,caseWM_COMMANDgoto messages2 ret ;messages2 sel wParam ,caseIDOK ,caseIDCANCEL ret1 #sub DT_GetHtmlDocument function'MSHTML.HTMLDocument hDlg ctrlid [flags] ;;flags: 1 - return 0 if not loaded
;Returns MSHTML.HTMLDocument interface pointer of a web browser control which is on a custom dialog. ;Call this function from dialog procedure. ;Returns 0 if the control currently is not displaying a html document.
;hDlg - parent dialog ;ctrlid - web browser control id ;SHDocVw.WebBrowser we3 SHDocVw.WebBrowser we
we._getcontrol(id(ctrlid hDlg)) if(flags&1)if(we.Busyor we.ReadyState!=SHDocVw.READYSTATE_COMPLETE)ret ret we.Document
#sub button1_onclick functionMSHTML.DispHTMLInputElement'btn out"button 1 clicked" mes"sub1 button has been clicked" run"notepad.exe"
08-17-2018, 10:42 PM (This post was last modified: 08-17-2018, 11:39 PM by Kevin.)
Now that i look at this idea better its not great idea. Big potential security vulnerability there .someone could change run notepad line to something else could easily do damage to the pc it runs on. Would need to put in place code to protect against this potential vulnerability.
also you have mistakes in your code
these lines are incorrect ,MSHTML.HTMLInputElement- button3=+doc.getElementById("Button2");;<--------------------- wrong button id
wrong variable name------->>>> ,button2._setevents("sub.button3")
if i am reading this correctly you were thinking of being able to run programs from the text area text that was typed? not just notepad?
this shows how to get the text area text i added in some comments so maybe you will understand better
str controls ="3" str ax3SHD
ax3SHD="$desktop$\index+.html";; change to location of your html files if(!ShowDialog(dd &sub.DlgProc&controls))ret
#sub DlgProc function# hDlg message wParam lParam
sel message ,caseWM_INITDIALOG ,;Gets document ,MSHTML.HTMLDocument doc=sub.DT_GetHtmlDocument(hDlg 3)
,;get input button1 element and set events for it ,MSHTML.HTMLInputElement- button1=+doc.getElementById("Button1") ,button1._setevents("sub.button1")
,;get input button2 element and set events for it ,MSHTML.HTMLInputElement- button2=+doc.getElementById("Button2") ,button2._setevents("sub.button2")
,;get input button3 element and set events for it ,MSHTML.HTMLInputElement- button3=+doc.getElementById("Button3") ,button3._setevents("sub.button3") ,;Note: HTMLInputElement can be used for any type of input elements. For some element types also can be used specific interfaces, eg HTMLInputTextElement. ,;Note: Use thread variables for html elements for which is called _setevents. ,;Note: After navigating to other page, if these thread variables still must be used, they must be reinitialized, and _setevents called again. If not used, they should be cleared (=0). ,caseWM_DESTROY ,caseWM_COMMANDgoto messages2 ret ;messages2 sel wParam ,caseIDOK ,caseIDCANCEL ret1 #sub DT_GetHtmlDocument function'MSHTML.HTMLDocument hDlg ctrlid [flags] ;;flags: 1 - return 0 if not loaded
;Returns MSHTML.HTMLDocument interface pointer of a web browser control which is on a custom dialog. ;Call this function from dialog procedure. ;Returns 0 if the control currently is not displaying a html document.
;hDlg - parent dialog ;ctrlid - web browser control id ;SHDocVw.WebBrowser we3 SHDocVw.WebBrowser we
we._getcontrol(id(ctrlid hDlg)) if(flags&1)if(we.Busyor we.ReadyState!=SHDocVw.READYSTATE_COMPLETE)ret ret we.Document
#sub button1_onclick functionMSHTML.DispHTMLInputElement'btn1 out"button 1 clicked" mes"sub1 button has been clicked"
#sub button2_onclick functionMSHTML.DispHTMLInputElement'btn2 out"button 2 clicked" mes"this is QM mes"
#sub button3_onclick functionMSHTML.DispHTMLInputElement'btn3 out"button 3 clicked" ;on button3 click get html document MSHTML.HTMLDocument doc=btn3.document
,;get text area element and text str s MSHTML.HTMLInputElement textarea=+doc.getElementById("TextArea1")
s=textarea.innerText;;; gets text in text area out s
08-18-2018, 12:21 AM (This post was last modified: 08-18-2018, 05:14 AM by Kevin.)
You should keep in mind that all html forms need to be preventive to protect servers or in this case the pc . You don't want users being able to run any program or file on that particular pc.Since you want to allow programs to be run I would suggest limiting the programs that could be run .To do this you're going to need a list of programs that can be run then compare the input text against that list and allow or disallow. This is Just a strong recommendation. The next part is you need to figure out how to read and process multi line strings. As the text is multilined .search the forum and read help about multiline strings.
Also you have to consider how are you going to process the data.
What if they change the wording?
Would be simpler to create a combo box and let them choose from a list . Trying to parse unknown data is not easy.
str controls ="3" str ax3SHD
ax3SHD="$desktop$\index+revised.html";; change to location of your html files if(!ShowDialog(dd &sub.DlgProc&controls))ret
,;get input button1 element and set events for it ,MSHTML.HTMLInputElement- button1=+doc.getElementById("Button1") ,button1._setevents("sub.button1")
,;get input button2 element and set events for it ,MSHTML.HTMLInputElement- button2=+doc.getElementById("Button2") ,button2._setevents("sub.button2")
,;get input button3 element and set events for it ,MSHTML.HTMLInputElement- button3=+doc.getElementById("Button3") ,button3._setevents("sub.button3") , ,;get input button4 element and set events for it ,MSHTML.HTMLInputElement- button4=+doc.getElementById("Button4") ,button4._setevents("sub.button4") , ,;Note: HTMLInputElement can be used for any type of input elements. For some element types also can be used specific interfaces, eg HTMLInputTextElement. ,;Note: Use thread variables for html elements for which is called _setevents. ,;Note: After navigating to other page, if these thread variables still must be used, they must be reinitialized, and _setevents called again. If not used, they should be cleared (=0). ,caseWM_DESTROY ,caseWM_COMMANDgoto messages2 ret ;messages2 sel wParam ,caseIDOK ,caseIDCANCEL ret1 #sub DT_GetHtmlDocument function'MSHTML.HTMLDocument hDlg ctrlid [flags] ;;flags: 1 - return 0 if not loaded
;Returns MSHTML.HTMLDocument interface pointer of a web browser control which is on a custom dialog. ;Call this function from dialog procedure. ;Returns 0 if the control currently is not displaying a html document.
;hDlg - parent dialog ;ctrlid - web browser control id ;SHDocVw.WebBrowser we3 SHDocVw.WebBrowser we
we._getcontrol(id(ctrlid hDlg)) if(flags&1)if(we.Busyor we.ReadyState!=SHDocVw.READYSTATE_COMPLETE)ret ret we.Document
#sub button1_onclick functionMSHTML.DispHTMLInputElement'btn1 out"button 1 clicked" mes"sub1 button has been clicked"
#sub button2_onclick functionMSHTML.DispHTMLInputElement'btn2 out"button 2 clicked" mes"this is QM mes"
#sub button3_onclick functionMSHTML.DispHTMLInputElement'btn3 ;on button3 click get html document MSHTML.HTMLDocument doc=btn3.document
,;get select box element and selected item int- t_hdlg Htm e=htm("SELECT""programlist""" t_hdlg "0"00x1013) str selItemText result1 result2 int selItem=e.CbItem(selItemText);;finds the selected item
result2=e.el.getAttribute("value"0);; stores program name to run
result1.from("Next Will Open " selItemText);; makes a string for mes mes result1;;; show run message run result2;;; run selected program
#sub button4_onclick functionMSHTML.DispHTMLInputElement'btn4 ;get document MSHTML.HTMLDocument doc=btn4.document ;;get text from input MSHTML.HTMLInputElement text=+doc.getElementById("message1") str s1=text.getAttribute("value"0) if(s1.len) ,mes s1;; show text in a message else ,mes"Opps!! You didnt type a message"
08-20-2018, 12:16 AM (This post was last modified: 08-20-2018, 12:19 AM by Kevin.)
there are few problems with the text area idea
1. typos if you make typo it will fail and close dialog
2. if qm command is type wrong will fail and close dialog
3. handling unknown data is not easy to many variables to try and contend with
check out my posted solution its very user friendly and eliminates errors.
if you give us a better idea of your ideas on what you would like to implement in this form can help further