Copy HTML to Clipboard
Based on How To Add HTML Code to the Clipboard by Using Visual C++
MSDN:
| This is sample code. Add error handling and adjust to your requirements as necessary. |
TEXT TO lcHtml NOSHOW <p> <b>Sample HTML</b> <ol> <li> <i>Line 1</i> <li> <s>Line 2</s> <li> <u>Line 3</u> </ol> <hr> ENDTEXT ? CopyHtml2Clipboard(lcHtml) RETURN
* Copy HTML to Clipboard FUNCTION CopyHtml2Clipboard(tcHtmlText) LOCAL lnDataLen, lcDropFiles, llOk, i, lhMem, lnPtr, lcHtmlText, lnRtfFormat, lcHtmlFormatHeader, lcHtmlEnd LOCAL lcHtmlStart, lcCrLf * Global Memory Variables with Compile Time Constants #DEFINE GMEM_MOVABLE 0x0002 #DEFINE GMEM_ZEROINIT 0x0040 #DEFINE GMEM_SHARE 0x2000 * Load required Windows API functions =LoadApiDlls() llOk = .T. * Clipboard HTML Format header TEXT TO lcHtmlFormatHeader NOSHOW Format:HTML Format Version:0.9 StartHTML:00000000 EndHTML:00000000 StartFragment:00000000 EndFragment:00000000 ENDTEXT lcCrLf = CHR(13) + CHR(10) * Check if Full HTML or fragmen is passed llFullHtml = (ATC("<html>", tcHtmlText) <> 0) IF NOT llFullHtml lcHtmlStart = "<html><body>" + lcCrLf + "<!-- ---StartFragment--- -->" + lcCrLf lcHtmlEnd = lcCrLf + "<!-- ---EndFragment--- -->" + lcCrLf + "<\body><\html>" ELSE lcHtmlStart = "" lcHtmlEnd = "" ENDIF lcHtmlText = lcHtmlFormatHeader + lcHtmlStart + tcHtmlText + lcHtmlEnd + CHR(0) * Fill header lnPos = AT("<html>", lcHtmlText) - 1 lcHtmlText = STRTRAN(lcHtmlText, "StartHTML:00000000", "StartHTML:" + PADL(lnPos,8, "0")) lnPos = AT("<!-- ---StartFragment--- -->", lcHtmlText)-1 lcHtmlText = STRTRAN(lcHtmlText, "StartFragment:00000000", "StartFragment:" + PADL(lnPos,8, "0")) lnPos = LEN(lcHtmlText) lcHtmlText = STRTRAN(lcHtmlText, "EndHTML:00000000", "EndHTML:" + PADL(lnPos,8, "0")) lnPos = AT("<!-- ---EndFragment--- -->", lcHtmlText)-1 lcHtmlText = STRTRAN(lcHtmlText, "EndFragment:00000000", "EndFragment:" + PADL(lnPos,8, "0")) lnDataLen = LEN(lcHtmlText) * Copy text into the allocated memory lhMem = GlobalAlloc(GMEM_MOVABLE+GMEM_ZEROINIT+GMEM_SHARE, lnDataLen+4) lnPtr = GlobalLock(lhMem) =CopyFromStr(lnPtr, @lcHtmlText, lnDataLen) =GlobalUnlock(lhMem) * Open clipboard and store HTML text into it llOk = (OpenClipboard(0) <> 0) IF llOk =EmptyClipboard() lnHtmlFormat = RegisterClipboardFormat("HTML Format") llOk = (SetClipboardData(lnHtmlFormat, lhMem) <> 0) * If call to SetClipboardData() is successful, the system will take ownership of the memory * otherwise we have to free it IF NOT llOk =GlobalFree(lhMem) ENDIF * Close clipboard =CloseClipboard() ENDIF RETURN llOk FUNCTION LoadApiDlls * Clipboard Functions DECLARE LONG OpenClipboard IN WIN32API LONG HWND DECLARE LONG CloseClipboard IN WIN32API DECLARE LONG EmptyClipboard IN WIN32API DECLARE LONG SetClipboardData IN WIN32API LONG uFormat, LONG hMem DECLARE LONG RegisterClipboardFormat IN WIN32API STRING lpszFormat * Memory Management Functions DECLARE LONG GlobalAlloc IN WIN32API LONG wFlags, LONG dwBytes DECLARE LONG GlobalFree IN WIN32API LONG HMEM DECLARE LONG GlobalLock IN WIN32API LONG HMEM DECLARE LONG GlobalUnlock IN WIN32API LONG HMEM DECLARE LONG RtlMoveMemory IN WIN32API As CopyFromStr LONG lpDest, String @lpSrc, LONG iLen RETURN
Recent comments
1 week 2 days ago
1 week 2 days ago
1 week 3 days ago
1 week 5 days ago
1 week 5 days ago
2 weeks 2 days ago
3 weeks 2 days ago
3 weeks 3 days ago
3 weeks 4 days ago
4 weeks 1 day ago