procedure TfraHtmlEdit.BtnRightJustifyClick(Sender: TObject);
begin
with (WebBrowser.Document as IHTMLDocument2) do
begin
execCommand('JustifyRight', False, 1);
webbrowser.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DONTPROMPTUSER);
end;
end;
procedure TfraHtmlEdit.BtnUnderlineClick(Sender: TObject);
begin
with (WebBrowser.Document as IHTMLDocument2) do
begin
execCommand('Underline', False, 1);
webbrowser.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DONTPROMPTUSER);
end;
end;
procedure TfraHtmlEdit.BtnUndoClick(Sender: TObject);
begin
WebBrowser.ExecWB(OLECMDID_UNDO, OLECMDEXECOPT_DODEFAULT);
end;
procedure TfraHtmlEdit.cbFontSizeCloseUp(Sender: TObject);
begin
with (WebBrowser.Document as IHTMLDocument2) do
begin
execCommand('FontSize', False, cbFontSize.ItemIndex + 1);
webbrowser.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DONTPROMPTUSER);
end;
end;
function TfraHtmlEdit.CheckImgSize: Boolean;
begin
Result := CheckImgSize(200*1024);
if not Result then
begin
MsgDlg('图片容量太大,不能超过200k,请压缩图片后再继续保存操作', '提示', MB_OK + MB_ICONINFORMATION);
WebBrowser.SetFocus;
end;
end;
function TfraHtmlEdit.CheckImgSize(Size: Int64): Boolean;
var
i: Integer;
FileName: string;
begin
Result := True;
for i := 0 to WebBrowser.OleObject.document.images.length - 1 do
begin
FileName := WebBrowser.OleObject.document.images.item(i).href;
FileName := StringReplace(FileName, 'file:///', '', [rfReplaceAll]);
FileName := StringReplace(FileName, '/', '\', [rfReplaceAll]);
FileName := StringReplace(FileName, '%20', ' ', [rfReplaceAll]);
if GetFileSizes(FileName) > Size then
begin
Result := False;
Break;
end;
end;
end;
function TfraHtmlEdit.GetHTML: WideString;
begin
Result := (WebBrowser.Document as IHTMLDocument2).body.innerHTML;
end;
function TfraHtmlEdit.GetHTML_(ID: string): WideString;
var
i: Integer;
FileName: string;
str: WideString;
begin
str := HTML;
for i := 0 to WebBrowser.OleObject.document.images.length - 1 do
begin//注意:这有时候地址会替换不过来
FileName := StringReplace(WebBrowser.OleObject.document.images.item(i).href, 'file:///', '', [rfReplaceAll]);
FileName := StringReplace(FileName, '/', '\', [rfReplaceAll]);
FileName := StringReplace(FileName, '%20', ' ', [rfReplaceAll]);
str := StringReplace(str, FileName, 'C:\Temp\'+ID+'_'+IntToStr(i)+ExtractFileExt(FileName), [rfReplaceAll]);
end;
Result := str;
end;
function TfraHtmlEdit.GetSource: string;
var
i: Integer;
Disp: IDispatch;
Element: IHTMLElement;
begin
for i := 0 to (WebBrowser.Document as IHTMLDocument2).all.length -1 do
begin
Disp := (WebBrowser.Document as IHTMLDocument2).all.item(i, 0);
if Disp <> nil then
begin
Disp.QueryInterface(IID_IHTMLElement, Element);
if Element <> nil then
if SameText(Element.tagName, 'html') then
begin
Result := Element.outerHTML;
Break;
end;
end;
end;
end;
function TfraHtmlEdit.GetText: WideString;
begin
Result := (WebBrowser.Document as IHTMLDocument2).body.innerText;//HTMLDocument2.body.innerText;
end;
procedure TfraHtmlEdit.Init;
begin
Application.OnMessage := MessageHandler;
WebBrowser.Navigate('about:blank');
while WebBrowser.Busy do
Application.ProcessMessages;
HTMLDocument2 := WebBrowser.Document as IHTMLDocument2;
if not SameText(HTMLDocument2.designMode, 'on') then
HTMLDocument2.designMode := 'on';
end;
procedure TfraHtmlEdit.MessageHandler(var Msg: TMsg; var Handled: Boolean);
const
StdKeys = [VK_TAB, VK_RETURN]; { 标准键 }
ExtKeys = [VK_Delete, VK_BACK, VK_LEFT, VK_RIGHT]; { 扩展键 }
fExtended = $01000000; { 扩展键标志 }
begin
Handled := False;
with Msg do
if ((Message >= WM_KEYFIRST)
and (Message <= WM_KEYLAST))
and ((wParam in StdKeys) or (GetKeyState(VK_CONTROL) < 0) or (wParam in ExtKeys)
and ((lParam and fExtended) = fExtended)) then
try
if IsChild(webbrowser.Handle, hWnd) then
{ 处理所有的浏览器相关消息 }
begin
with (Webbrowser.Application as IOleInPlaceActiveObject) do
Handled := TranslateAccelerator(Msg) = S_OK;
if not Handled then
begin
Handled := True;
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
except
end;
end;
procedure TfraHtmlEdit.RzFontComboBoxCloseUp(Sender: TObject);
begin
with (WebBrowser.Document as IHTMLDocument2) do
begin
execCommand('FontName', False, RzFontComboBox.FontName);
webbrowser.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DONTPROMPTUSER);
end;
end;
procedure TfraHtmlEdit.BtnOutdentClick(Sender: TObject);
begin
with (WebBrowser.Document as IHTMLDocument2) do
begin
execCommand('Outdent', False, 1);
webbrowser.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DONTPROMPTUSER);
end;
end;
procedure TfraHtmlEdit.BtnSuperScriptClick(Sender: TObject);
begin
with (WebBrowser.Document as IHTMLDocument2) do
begin
execCommand('SuperScript', False, 1);
webbrowser.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DONTPROMPTUSER);
end;
end;
procedure TfraHtmlEdit.BtnSubScriptClick(Sender: TObject);
begin
with (WebBrowser.Document as IHTMLDocument2) do
begin
execCommand('SubScript', False, 1);
webbrowser.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DONTPROMPTUSER);
end;
end;
procedure TfraHtmlEdit.BtnStrikeThroughClick(Sender: TObject);
begin
with (WebBrowser.Document as IHTMLDocument2) do
begin
execCommand('StrikeThrough', False, 1);
webbrowser.ExecWB(OLECMDID_SAVE, OLECMDEXECOPT_DONTPROMPTUSER);
end;
end;
procedure TfraHtmlEdit.SetHTML(const Value: WideString);
begin
Application.ProcessMessages;
HTMLDocument2.body.innerHTML := Value;
end;
procedure TfraHtmlEdit.SetText(const Value: WideString);
begin
Application.ProcessMessages;
HTMLDocument2.body.innerText := Value;
end;
initialization
OleInitialize(nil);
finalization
try
OleUninitialize;
except
end;
end.