在FormCreate中加入
Application.OnMessage=MessageHandler
///
procedure TfrmWebMain.MessageHandler(var Msg:TMsg;var Handled:Boolean);
var
iOIPAO: IOleInPlaceActiveObject;
Dispatch: IDispatch;
i:integer;
const
StdKeys=[VK_RETURN]; (* standard keys *)
ExtKeys=[VK_BACK,VK_LEFT,VK_RIGHT]; (* extended keys *)
fExtended=$01000000; (* extended key flag *)
begin
//消息处理
if(Msg.message=WM_CLOSE) then
begin
for i:=0 to pgcExplorer.PageCount-1 do
begin
if(Msg.hwnd=(pgcExplorer.Pages.Controls[0] as
TEmbeddedWB).Handle) then
begin
ClosePage(pgcExplorer.Pages as TTabEx);
Exit;
end;
end;
end;
if(pgcExplorer.ActivePage.Tag<>0) then
begin
Inherited;
Exit;
end;
Handled:=false;
Handled:=(IsDialogMessage((pgcExplorer.ActivePage.Controls[0]
as TEmbeddedWB).Handle, Msg)=True);
if Handled then
begin
if ActiveObject=nil then
begin
Dispatch:=(pgcExplorer.ActivePage.Controls[0]
as TEmbeddedWB).ControlInterface;
if Dispatch<>nil then
begin
Dispatch.QueryInterface(IOleInPlaceActiveObject,iOIPAO);
if iOIPAO <> nil then
ActiveObject:=iOIPAO;
end;
end
else
begin
{
if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or
(Msg.wParam =VK_RIGHT) or (Msg.wParam = VK_SHIFT) or
(Msg.wParam = VK_TAB) or (Msg.wParam = VK_DELETE)) then
}
//(Msg.Message>=WM_KEYFIRST) and (Msg.Message<=WM_KEYLAST)
if ((Msg.message=WM_KEYDOWN) or (Msg.message=WM_KEYUP)) and
((Msg.wParam in StdKeys) or {$IFDEF VER120}(GetKeyState(VK_CONTROL)< 0)
or {$ENDIF} (Msg.wParam in ExtKeys) and
((Msg.lParam and fExtended)=fExtended)) then
begin
Handled:=ActiveObject.TranslateAccelerator(Msg)=S_OK;
if not Handled then
begin
Handled:=True;
TranslateMessage(Msg);
//DispatchMessage(Msg);
end;
end
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('N')) then
begin
mniNewBlankClick(mniNewBlank);
cmbURL.SetFocus;
end
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('H')) then
mniNewHomeClick(mniNewHome)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('M')) then
mniNewCurrentClick(mniNewCurrent)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('O')) then
mniOpenClick(mniOpen)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('W')) then
mniCloseClick(mniClose)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('S')) then
mniSaveAsClick(mniSaveAs)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('X')) then
mniCutClick(mniCut)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('C')) then
mniCopyClick(mniCopy)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('V')) then
mniPasteClick(mniPaste)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('A')) then
mniSelectAllClick(mniSelectAll)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_CONTROL)<0)
and (Msg.wParam = Ord('F')) then
mniFindOnThisPageClick(mniFindOnThisPage)
else if (Msg.message = WM_KEYDOWN) and (Msg.wParam =VK_F3) then
mniPreviousExplorerClick(mniPreviousExplorer)
else if (Msg.message = WM_KEYDOWN) and (Msg.wParam =VK_F2) then
mniNextExplorerClick(mniNextExplorer)
else if (Msg.message = WM_KEYDOWN) and (Msg.wParam =VK_F5) then
mniRefreshClick(mniRefresh)
else if (Msg.message = WM_KEYDOWN) and (Msg.wParam =VK_ESCAPE) then
mniStopClick(mniStop)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_SHIFT)<0)
and(Msg.wParam =VK_F5) then
mniRefreshAllClick(mniRefreshAll)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_SHIFT)<0)
and(Msg.wParam =VK_ESCAPE) then
mniStopAllClick(mniStopAll)
else if (Msg.message = WM_KEYDOWN) and (Msg.wParam =VK_F11) then
mniFullScreenClick(mniFullScreen)
else if (Msg.message = WM_KEYDOWN) and (Msg.wParam =VK_F1) then
mniHelpTopicsClick(mniHelpTopics)
else if (Msg.message = WM_KEYDOWN) and (GetKeystate(VK_SHIFT)<0)
and (GetKeystate(VK_CONTROL)<0) and(Msg.wParam = Ord('P')) then
mniTabPositionClick(mniTabPosition)
else if(Msg.message=WM_KEYDOWN) and (Msg.wParam=VK_DELETE) then
begin
Handled:=ActiveObject.TranslateAccelerator(Msg)=S_OK;
if not Handled then
begin
Handled:=false;
TranslateMessage(Msg);
end;
end
else if(Msg.message=WM_KEYDOWN) and (Msg.wParam=VK_TAB) then
begin
Handled:=ActiveObject.TranslateAccelerator(Msg)=S_OK;
if not Handled then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
Handled:=false;
//WebSetFocus;
end;
end
else
ActiveObject.TranslateAccelerator(Msg);
end;
end
else
begin
//TranslateMessage(Msg);
Inherited;
end;
end;