Now I managed to insert table with old-school way(invoke),
but not with WS4AHK
If you find time to have a look at, please correct my script.
Now I added(working function)
numbered list/bullet list
Font/fontname/fontsize
Justify(left, center, right)
FindText/Cut/Paste/Delete/SelectAll/redo/undo/view properties.Functions left to implement are only table/cell/row functions.
Row/cell functions are esay to add, but I have a problem with a table function.
Thanks.
WS_DEControl.ahk
#Include ws4ahk.ahk ; designed for ws4ahk.ahk v0.01
; Command IDs
DECMD_BOLD = 5000
DECMD_COPY = 5002
DECMD_CUT = 5003
DECMD_DELETE = 5004
DECMD_DELETECELLS = 5005
DECMD_DELETECOLS = 5006
DECMD_DELETEROWS = 5007
DECMD_FINDTEXT = 5008
DECMD_FONT = 5009
DECMD_GETBACKCOLOR = 5010
DECMD_GETBLOCKFMT = 5011
DECMD_GETBLOCKFMTNAMES = 5012
DECMD_GETFONTNAME = 5013
DECMD_GETFONTSIZE = 5014
DECMD_GETFORECOLOR = 5015
DECMD_HYPERLINK = 5016
DECMD_IMAGE = 5017
DECMD_INDENT = 5018
DECMD_INSERTCELL = 5019
DECMD_INSERTCOL = 5020
DECMD_INSERTROW = 5021
DECMD_INSERTTABLE = 5022
DECMD_ITALIC = 5023
DECMD_JUSTIFYCENTER = 5024
DECMD_JUSTIFYLEFT = 5025
DECMD_JUSTIFYRIGHT = 5026
DECMD_LOCK_ELEMENT = 5027
DECMD_MAKE_ABSOLUTE = 5028
DECMD_MERGECELLS = 5029
DECMD_ORDERLIST = 5030
DECMD_OUTDENT = 5031
DECMD_PASTE = 5032
DECMD_REDO = 5033
DECMD_REMOVEFORMAT = 5034
DECMD_SELECTALL = 5035
DECMD_SEND_BACKWARD = 5036
DECMD_BRING_FORWARD = 5037
DECMD_SEND_BELOW_TEXT = 5038
DECMD_BRING_ABOVE_TEXT = 5039
DECMD_SEND_TO_BACK = 5040
DECMD_BRING_TO_FRONT = 5041
DECMD_SETBACKCOLOR = 5042
DECMD_SETBLOCKFMT = 5043
DECMD_SETFONTNAME = 5044
DECMD_SETFONTSIZE = 5045
DECMD_SETFORECOLOR = 5046
DECMD_SPLITCELL = 5047
DECMD_UNDERLINE = 5048
DECMD_UNDO = 5049
DECMD_UNLINK = 5050
DECMD_UNORDERLIST = 5051
DECMD_PROPERTIES = 5052
; Enums
;OLECMDEXECOPT
OLECMDEXECOPT_DODEFAULT = 0
OLECMDEXECOPT_PROMPTUSER = 1
OLECMDEXECOPT_DONTPROMPTUSER = 2
; DHTMLEDITCMDF
DECMDF_NOTSUPPORTED = 0
DECMDF_DISABLED = 1
DECMDF_ENABLED = 3
DECMDF_LATCHED = 7
DECMDF_NINCHED = 11
; DHTMLEDITAPPEARANCE
DEAPPEARANCE_FLAT = 0
DEAPPEARANCE_3D = 1
; OLE_TRISTATE
OLE_TRISTATE_UNCHECKED = 0
OLE_TRISTATE_CHECKED = 1
OLE_TRISTATE_GRAY = 2
; Error Return Values
;
DE_E_INVALIDARG = 0x5
DE_E_ACCESS_DENIED = 0x46
DE_E_PATH_NOT_FOUND = 0x80070003
DE_E_FILE_NOT_FOUND = 0x80070002
DE_E_UNEXPECTED = 0x8000ffff
DE_E_DISK_FULL = 0x80070027
DE_E_NOTSUPPORTED = 0x80040100
DE_E_FILTER_FRAMESET = 0x80100001
DE_E_FILTER_SERVERSCRIPT = 0x80100002
DE_E_FILTER_MULTIPLETAGS = 0x80100004
DE_E_FILTER_SCRIPTLISTING = 0x80100008
DE_E_FILTER_SCRIPTLABEL = 0x80100010
DE_E_FILTER_SCRIPTTEXTAREA = 0x80100020
DE_E_FILTER_SCRIPTSELECT = 0x80100040
DE_E_URL_SYNTAX = 0x800401E4
DE_E_INVALID_URL = 0x800C0002
DE_E_NO_SESSION = 0x800C0003
DE_E_CANNOT_CONNECT = 0x800C0004
DE_E_RESOURCE_NOT_FOUND = 0x800C0005
DE_E_OBJECT_NOT_FOUND = 0x800C0006
DE_E_DATA_NOT_AVAILABLE = 0x800C0007
DE_E_DOWNLOAD_FAILURE = 0x800C0008
DE_E_AUTHENTICATION_REQUIRED = 0x800C0009
DE_E_NO_VALID_MEDIA = 0x800C000A
DE_E_CONNECTION_TIMEOUT = 0x800C000B
DE_E_INVALID_REQUEST = 0x800C000C
DE_E_UNKNOWN_PROTOCOL = 0x800C000D
DE_E_SECURITY_PROBLEM = 0x800C000E
DE_E_CANNOT_LOAD_DATA = 0x800C000F
DE_E_CANNOT_INSTANTIATE_OBJECT = 0x800C0010
DE_E_REDIRECT_FAILED = 0x800C0014
DE_E_REDIRECT_TO_DIR = 0x800C0015
DE_E_CANNOT_LOCK_REQUEST = 0x800C0016
; ------------------------- General functions ---------------------------------------------------------------
DE_Add(hWnd, x, y, w, h)
{
Return GetComControlInHWND( CreateComControlContainer(hWnd, x, y, w, h, "DhtmlEdit.DhtmlEdit") )
}
DE_Move(pwb, x, y, w, h)
{
WinMove, % "ahk_id " . GetHWNDofComControl(pwb), , x, y, w, h
}
DE_BrowseMode(sDHtmlEdit) ; toggle between Edit mode and View mode.
{
sCode =
(
If `%v.Browsemode = 0 Then
`%v.Browsemode = 1
Else
`%v.Browsemode = 0
End If
)
If (!WS_Exec(sCode, sDHtmlEdit, sDHtmlEdit, sDHtmlEdit))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_LoadUrl(sDhtmlEdit, url) ;Load url(e.g. "http://www.autohotkey.com") and ready to edit in a WYSIWIG way
{
If (!WS_Exec(sDhtmlEdit ".LoadUrl %s", url))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_NewDocument(sDhtmlEdit) ;clear current document and open blank html document
{
If (!WS_Exec(sDhtmlEdit ".NewDocument"))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_LoadDocument(sDhtmlEdit, FileDir) ;open file dialog and last parameter is prompt string.
{
If (!WS_Exec(sDhtmlEdit ".LoadDocument", FileDir, prompt))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SaveDocument(sDhtmlEdit, Filedir) ;save contents in html.
{
If (!WS_Exec(sDhtmlEdit ".SaveDocument %s", FileDir))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_GetDocumentHtml(sDhtmlEdit) ;get and return DOCUMENT'S htmlcode
{
If (!WS_Eval(sRet, sDhtmlEdit ".DocumentHtml"))
Msgbox % A_LineFile ":" ErrorLevel
Return sRet
}
DE_SetDocumentHtml(sDhtmlEdit, sHtml) ;set document's htmlcode
{
If (!WS_Exec(sDhtmlEdit ".DocumentHtml = %s", sHtml))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_Refresh(sDhtmlEdit) ;open file dialog and last parameter is prompt string.
{
If (!WS_Exec(sDhtmlEdit ".Refresh"))
Msgbox % A_LineFile ":" ErrorLevel
}
; --- WYSIWYG Edit functions ----------------------------------------------------------------------------------------------
; Set property --> use ExecCommand(), Command ID
; Get Propery --> use QueryStatus(), command ID
DE_SetBOLD(sDhtmlEdit) ; toggle selections bold/normal
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_BOLD))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SetUnderline(sDhtmlEdit) ; toggle selections underline
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_UNDERLINE))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SetItalic(sDhtmlEdit) ; toggle selections italic
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_ITALIC))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SetForeColor(sDhtmlEdit, sColor) ; set font color string, e.g. "#55A0FF", "55A0FF", "Blue", "Red"
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v, %s"
, DECMD_SETFORECOLOR
, OLECMDEXECOPT_DODEFAULT
, sColor))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SetBackColor(sDhtmlEdit, sColor) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v, %s"
, DECMD_SETBACKCOLOR
, OLECMDEXECOPT_DODEFAULT
, sColor))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_Font(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_FONT))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SetFontName(sDhtmlEdit, sFont) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v, %s"
, DECMD_SETFONTNAME
, OLECMDEXECOPT_DODEFAULT
, sFont))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SetFontSize(sDhtmlEdit, iFontSize) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v, %s"
, DECMD_SETFONTSIZE
, OLECMDEXECOPT_DODEFAULT
, iFontSize))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_JustifyLeft(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_JUSTIFYLEFT))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_JustifyCenter(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_JUSTIFYCENTER))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_JustifyRight(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_JUSTIFYRIGHT))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SetHyperLink(sDhtmlEdit) ; insert hyperlink property in selection
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v, %s"
, DECMD_HYPERLINK
, OLECMDEXECOPT_DODEFAULT
, ""))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SetImage(sDhtmlEdit) ; insert image in selection
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v, %s"
, DECMD_IMAGE
, OLECMDEXECOPT_DODEFAULT
, ""))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_UnLink(sDhtmlEdit) ; insert image in selection
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v, %s"
, DECMD_UNLINK
, OLECMDEXECOPT_DODEFAULT
, ""))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_SelectAll(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_SELECTALL))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_Paste(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v"
, DECMD_HYPERLINK
, OLECMDEXECOPT_DODEFAULT))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_Properties(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_PROPERTIES))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_UnDo(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_UNDO))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_ReDo(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_REDO))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_FindText(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_FINDTEXT))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_Delete(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_DELETE))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_Cut(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_CUT))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_COPY(pDHtmlEdit) ;
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_COPY))
Msgbox % A_LineFile ":" ErrorLevel
}
; ------- LIST AND TABLE FUNCTIONS
DE_OrderList(pDHtmlEdit) ; NUMBERED LIST
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_ORDERLIST))
Msgbox % A_LineFile ":" ErrorLevel
}
DE_UnorderList(pDHtmlEdit) ; BULLET LIST
{
global
If (!WS_Exec(sDhtmlEdit ".ExecCommand " DECMD_UNORDERLIST))
Msgbox % A_LineFile ":" ErrorLevel
}
;DE_InsertTable(numrows, numcols, TableAttr = "100%", CellAttr = "" , Caption = "")
; DE_InsertTable(numrows, numcols) --> I don't know what's the problem here
; {
; WS_Exec("Set %v = CreateObject(%s)", tParam, "DEInsertTableParam.DEInsertTableParam")
; ; create a table object
; WS_Exec("tParam.NumRows = %v", numrows) -> set the table property.
; WS_Exec("tParam.NumCols = %v", numcols)
; return
; ;WS_Exec("Set tParam.TableAttrs = 100%")
;
; global DECMD_INSERTTABLE, OLECMDEXECOPT_DODEFAULT
; If (!WS_Exec(sDhtmlEdit ".ExecCommand %v, %v, %s"
; , DECMD_INSERTTABLE
; , OLECMDEXECOPT_DODEFAULT
; , tParam))
; Msgbox % A_LineFile ":" ErrorLevel
;
; }
; }
; --------- USING DOM ------------------------------------------------------------------------------------------
DE_DOM(sDHtmlEdit)
{
iret := WS_Exec("Set DHTMLDOM = %v.DOM", sDHtmlEdit)
return "DHTMLDOM"
}
; GetSelection(pDhtmlEdit) --> I don't know what's the problem. I can do it with easycom.ahk but not with ws4ahk
; {
; WS_Exec("Set SelType = %v.DOM.%s.%s", pDhtmlEdit, "selection", "type"))
; if seltype = text
; {
; WS_Exec("Set SelectedText = %v.DOM.%s.%s.%s.%s",
; pDhtmlEdit,
; "selection",
; "CreateRange()",
; "htmltext"))
; return SelectedText
; }
; }
WS_DEDemo
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#include WS_DEControl.ahk
If (!WS_Initialize("VBScript"))
{
Msgbox % "Error initializing EasyScript"
ExitApp
}
InitComControls()
Gui, +Resize +LastFound +theme
Gui, Add, Button, x0 y0 gSetBold, Bold
Gui, Add, Button, xp+40 gSetItalic,italic
Gui, Add, Button, xp+50 gSetUnderLine, underline
gui, Add, Button, xp+75 gSetBlue, Blue
Gui, Add, Button, xp+40 gSetImageLink, Image
Gui, Add, Button, xp+50 gSetHyperLink, Link
Gui, Add, Button, xp+50 gLoadUrl, LoadURL
Gui, Add, Button, xp+70 gGetDocument, GetHtml
gui, add, button, xp+70 gSetDocument, SetHtml
Gui, Add, button, xp+70 gSaveDocument, SaveHtml
Gui, Add, button, xp+80 gBrowseMode, BrowseMode Toggle
Gui, add, button, xp+140 gNewDocument, New
Gui, add, button, xp+40 gFindText, FindText
Gui, add, button, xp+70 gSetBackColor, SetBackColor
Gui, add, button, x0 yp+25 gSetFontName, SetFontName
Gui, add, button, xp+90 gSetFontSize, SetFontSize
Gui, add, button, xp+90 gSetFont, SetFont
Gui, add, button, xp+50 gList1, List1
Gui, add, button, xp+50 gList2, List2
gui, Add, Button, xp+50 gInsertTable, InsertTable
Gui, Show, w800 h600 Center, DhtmlEdit_Test
hWnd := WinExist()
DEdit := "DEdit"
; Method #1
ppvDEdit := DE_Add(hWnd, 0, 50, 800, 550)
WS_AddObject(ppvDEdit, DEdit)
; Method #2
; If (!WS_Exec("Set %v = CreateObject(%s)", DEdit, "DhtmlEdit.DhtmlEdit"))
; Msgbox % ErrorLevel
; If (!WS_Eval(ppvDEdit, DEdit))
; Msgbox % ErrorLevel
;
; hContainerCtrl := CreateComControlContainer(hWnd, 0, 25, 800, 575)
; AttachComControlToHWND(ppvDEdit, hContainerCtrl)
Gosub, SetDocument
Return ; end of auto-run
1::
;msgbox, % GetSelection(Dedit)
return
SetBold:
;iret := Invoke(DEdit, "ExecCommand()", DECMD_BOLD)
DE_SetBold(DEdit)
Return
SetItalic:
;iret := Invoke(DEdit, "ExecCommand()", DECMD_ITALIC)
DE_SetItalic(DEdit)
Return
SetBlue:
;iret := Invoke(DEdit, "ExecCommand()", DECMD_SETFORECOLOR, OLECMDEXECOPT_DODEFAULT, "Blue")
;DE_SetForeColor(DEdit, "0000FF")
DE_SetForeColor(DEdit, "Blue") ; possible way
;DE_SetForeColor(pDHtmlEdit, "#0000FF") ; also possible
Return
SetUnderline:
;iret := Invoke(DEdit, "ExecCommand()", DECMD_UNDERLINE)
DE_SetUnderline(DEdit)
Return
SetImageLink:
;iret := Invoke(DEdit, "ExecCommand()", DECMD_IMAGE, OLECMDEXECOPT_DODEFAULT, "")
DE_SetImage(DEdit)
Return
SetHyperLink:
;iret := Invoke(DEdit, "ExecCommand()", DECMD_HYPERLINK, OLECMDEXECOPT_DODEFAULT, "")
DE_SetHyperLink(DEdit)
Return
LoadUrl:
url := "http://www.autohotkey.com"
DE_LoadUrl(DEdit, url)
Return
NewDocument:
DE_NewDocument(DEdit)
Return
SaveDocument:
Filedir = %A_ScriptDir%\DhtmlEdit_%A_Now%.htm
DE_SaveDocument(DEdit, FileDir)
Return
GetDocument:
msgbox, % DE_GetDocumentHtml(DEdit)
Return
SetDocument:
htmlcode =
(
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<body
style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(255,204,51)" alink
="#ee0000" link="#0000ee" vlink="#551a8b">
<P>
<big style="FONT-FAMILY: Verdana"><big><EM><STRONG>Forgive</STRONG></EM> my <span
style="FONT-WEIGHT: bold; COLOR: rgb(51,51,255)" >poor</span> coding style! Yes?
</big></big></P>
<P><BIG style="FONT-FAMILY: Verdana"><BIG>This File is Edited with
<STRONG>DhtmlEdit_Demo</STRONG>
.
</P></BIG></BIG>
<ul style="FONT-FAMILY: Verdana">
<li><STRONG><U>First List</U></STRONG>
<li><FONT color=blue>second List</FONT>
<li><A href="http://www.autohotkey.com">what
now?(</A>click then go to AutohotKey)</li>
</ul>
<table
style="WIDTH: 440px; FONT-FAMILY: Verdana; HEIGHT: 52px; TEXT-ALIGN: left"
border="1" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td>This is a table
and the right image is directly from AutoHotKey Forum.</td>
<td><A href="http://www.autohotkey.com"><img style="WIDTH: 228px; HEIGHT: 133px"
alt="image cannot be loaed for some reason"
src="http://www.autohotkey.com/docs/images/AutoHotkey_logo.gif"></A></td>
</tr>
</tbody>
</table>
</body>
</html>
)
DE_SetDocumentHtml(DEdit, htmlcode)
htmlcode =
Return
BrowseMode:
DE_BrowseMode(DEdit)
Return
FindText:
DE_FindText(DEdit)
Return
SetBackColor:
DE_SetBackColor(DEdit, "Yellow")
Return
SetFontName:
DE_SetFontName(DEdit, "Arial Black")
Return
SetFontSize:
DE_SetFontSize(DEdit, "4")
Return
SetFont:
DE_Font(DEdit)
Return
List1:
DE_OrderList(DEdit)
Return
List2:
DE_UnOrderList(DEdit)
Return
InsertTable:
DE_InsertTable(2,2)
return
GuiSize:
DE_Move(ppvDEdit, 0, 50, A_GuiWidth, A_GuiHeight-50)
Return
GuiClose:
Gui, %A_Gui%:Destroy
ReleaseObject(ppvDEdit)
UninitComControls()
WS_Uninitialize()
ExitApp