TWebrowser 从 Word 文档复制
TWebrowser Copy from Word Document
我有一个处于编辑模式的 TWebBrowser,我正在尝试允许用户从 word 文档(或任何地方)复制和粘贴文本和图像,然后粘贴到网络浏览器中
我已经能够使用以下代码粘贴文本:
pvaIn := EmptyParam;
HtmlEditor.ExecWB(OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT, pvaIn);
HtmlEditor 是我的 TWebBrowser 组件
我的问题是当尝试粘贴图像时网络浏览器似乎知道我粘贴了图像,但它只显示一个可编辑的文本框。
有没有办法将图像粘贴到 TWebBrowser 中?
这里的解决方案是将位图保存到磁盘,然后创建图像 html 图像并将其附加到光标位置的 HTML。
if clipboard.hasformat(cf_bitmap) then //only if the clipboard currently has a image
begin
bmp := TBitMap.Create();
CreateGuid(uid);
try
filename := 'cb(' + System.Copy(guidToString(uid), 2, 8) + ').bmp'; //generate a unique filename
path := ExtractFilePath(paramstr(0)) + filename;//the location where we will save it
bmp.LoadFromClipboardFormat(cf_bitmap, clipboard.GetAsHandle(cf_bitmap), 0);
bmp.SaveToFile(path); //save the clipboard image to disk
Doc2 := nil;
Doc2 := self.HtmlEditor.Document as IHTMLDocument2;
if Doc2 = nil then
exit;
if Assigned(Doc2.Body) then
begin
Image := Doc2.createElement('img') as IHtmlDOMNode; //create the img element
(Image as IHTMLImgElement).src := path; //set this to the path of the image we just saved
if GetcaretPos(cursor) then //get the element at the cursor position
begin
ElementAtCursor := Doc2.elementFromPoint(cursor.X, cursor.Y);
Html := '<img src="' + path + '"></img>'; //insert the image after this element
ElementAtCursor.insertAdjacentHTML('AfterBegin', Html);
end
else
(Doc2.Body as IHtmlDOMNode).appendChild(Image); //else just append to the body
end;
finally
bmp.free();
end;
end;
如您所见,第一步是检查剪贴板是否有 CF_BITMAP,如果有,我们将其保存到磁盘。然后我们创建一个 img HTML 元素将该文件名附加到 img 的 src。最后,我们将 img 添加到光标所在的 HTML 中,如果我们无法获取光标,那么我们将追加到 HTML body
我有一个处于编辑模式的 TWebBrowser,我正在尝试允许用户从 word 文档(或任何地方)复制和粘贴文本和图像,然后粘贴到网络浏览器中
我已经能够使用以下代码粘贴文本:
pvaIn := EmptyParam;
HtmlEditor.ExecWB(OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT, pvaIn);
HtmlEditor 是我的 TWebBrowser 组件
我的问题是当尝试粘贴图像时网络浏览器似乎知道我粘贴了图像,但它只显示一个可编辑的文本框。
有没有办法将图像粘贴到 TWebBrowser 中?
这里的解决方案是将位图保存到磁盘,然后创建图像 html 图像并将其附加到光标位置的 HTML。
if clipboard.hasformat(cf_bitmap) then //only if the clipboard currently has a image
begin
bmp := TBitMap.Create();
CreateGuid(uid);
try
filename := 'cb(' + System.Copy(guidToString(uid), 2, 8) + ').bmp'; //generate a unique filename
path := ExtractFilePath(paramstr(0)) + filename;//the location where we will save it
bmp.LoadFromClipboardFormat(cf_bitmap, clipboard.GetAsHandle(cf_bitmap), 0);
bmp.SaveToFile(path); //save the clipboard image to disk
Doc2 := nil;
Doc2 := self.HtmlEditor.Document as IHTMLDocument2;
if Doc2 = nil then
exit;
if Assigned(Doc2.Body) then
begin
Image := Doc2.createElement('img') as IHtmlDOMNode; //create the img element
(Image as IHTMLImgElement).src := path; //set this to the path of the image we just saved
if GetcaretPos(cursor) then //get the element at the cursor position
begin
ElementAtCursor := Doc2.elementFromPoint(cursor.X, cursor.Y);
Html := '<img src="' + path + '"></img>'; //insert the image after this element
ElementAtCursor.insertAdjacentHTML('AfterBegin', Html);
end
else
(Doc2.Body as IHtmlDOMNode).appendChild(Image); //else just append to the body
end;
finally
bmp.free();
end;
end;
如您所见,第一步是检查剪贴板是否有 CF_BITMAP,如果有,我们将其保存到磁盘。然后我们创建一个 img HTML 元素将该文件名附加到 img 的 src。最后,我们将 img 添加到光标所在的 HTML 中,如果我们无法获取光标,那么我们将追加到 HTML body