uses
{...,} SHDocVw, OleCtrls, ActiveX;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
SaveMessageHandler: TMessageEvent;
procedure MyMessageHandler( var Msg: TMsg; var Handled: Boolean );
public
end;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate( 'http://decoding.dax.ru' );
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.OnMessage := SaveMessageHandler;
FOleInPlaceActiveObject := nil;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
SaveMessageHandler := Application.OnMessage;
Application.OnMessage := MyMessageHandler;
end;
procedure TForm1.FormDeactivate(Sender: TObject);
begin
Application.OnMessage := SaveMessageHandler;
end;
procedure TForm1.MyMessageHandler(var Msg: TMsg; var Handled: Boolean);
var
iOIPAO: IOleInPlaceActiveObject;
Dispatch: IDispatch;
begin
{ exit if we don't get back a webbrowser object }
if WebBrowser1 = nil then
begin
Handled := False;
Exit;
end;
Handled := IsDialogMessage( WebBrowser1.Handle, Msg ) = True;
if Handled and ( not WebBrowser1.Busy ) then
begin
if FOleInPlaceActiveObject = nil then
begin
Dispatch := WebBrowser1.Application;
if Dispatch <> nil then
begin
Dispatch.QueryInterface( IOleInPlaceActiveObject, iOIPAO );
if iOIPAO <> nil then
FOleInPlaceActiveObject := iOIPAO;
end;
end;
if FOleInPlaceActiveObject <> nil then
if ( ( Msg.message = WM_KEYDOWN ) or ( Msg.message = WM_KEYUP ) ) and
( ( Msg.wParam = VK_BACK ) or ( Msg.wParam = VK_RETURN ) ) then
begin
// Здесь обрабатываем нажатие клавиш
end
else
FOleInPlaceActiveObject.TranslateAccelerator( Msg );
end;
end;
// Способ первый
procedure TForm1.WB_HideScrollBar(Hide: Boolean);
begin
if Hide then
begin
WebBrowser1.OleObject.Document.Body.Style.OverflowX := 'hidden';
WebBrowser1.OleObject.Document.Body.Style.OverflowY := 'hidden';
end
else
begin
WebBrowser1.OleObject.Document.Body.Style.OverflowX := '';
WebBrowser1.OleObject.Document.Body.Style.OverflowY := '';
end;
end;
// Способ второй
uses
{...,} MSHTML;
procedure TForm1.Button1Click(Sender: TObject);
var
lDocument: IHTMLDocument2;
lBody: IHTMLElement;
lStyle: IHTMLStyle2;
begin
if Assigned( WebBrowser1.Document ) and
( Succeeded( WebBrowser1.Document.QueryInterface( IHTMLDocument2, lDocument ) )) then
begin
lBody := lDocument.Body;
if Assigned( lBody ) and Assigned( lBody.style ) and
Succeeded( lBody.Style.QueryInterface( IID_IHTMLStyle2, lStyle ) ) then
begin
lStyle.overflowX := 'hidden'; // Убираем горизонтальный скрол,
// чтобы вернуть, нужно присвоить пустую строку
lStyle.overflowY := 'hidden'; // Убираем вертикальный скрол
// чтобы вернуть, нужно присвоить пустую строку
end;
end;
end;
procedure TForm1.WB_HideBorder(Hide: Boolean);
begin
if Hide then
WebBrowser1.OleObject.Document.Body.Style.borderStyle := 'none'
else
WebBrowser1.OleObject.Document.Body.Style.borderStyle := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if WebBrowser1.ReadyState = READYSTATE_COMPLETE then
WebBrowser1.OleObject.Document.ParentWindow.Scrollto( 0, WebBrowser1.OleObject.document.body.scrollHeight );
end;
При использовании материала - ссылка на сайт обязательна