코드 해석좀 부탁드립니다. 첨보는 코드인지라. 죄송합니다.
type
Tfrm = class(TForm)
private
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
end;
procedure Tfrm.FormActivate(Sender: TObject);
begin
Application.OnMessage := MessageLoop;
end;
procedure Tfrm.MessageLoop(var Msg: TMsg; var Handled: Boolean);
const
DialogKeys: set of Byte = [VK_TAB, VK_RETURN, VK_DELETE, VK_EXECUTE, VK_ESCAPE, VK_CANCEL,
VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_F10, VK_TAB];
MSJVMClassName = 'MSAWT_Comp_Class'; // for Java Applets
var
iOIPAO : IOleInPlaceActiveObject;
Dispatch: IDispatch;
Str : String;
begin
if (WebBrowser1 <> nil) and((Msg.Message = WM_KEYDOWN) or (Msg.Message = WM_KEYUP)) and
(Msg.wParam in DialogKeys) then
begin
Handled := IsDialogMessage(WebBrowser1.Handle, msg) = True;
SetLength(Str, MAX_PATH);
GetClassName(Msg.hwnd, PChar(Str), MAX_PATH);
SetLength (Str, StrLen (PChar(Str)));
if (Msg.wParam = VK_DELETE) and (Str = MSJVMClassName) then
else if Handled then
if FOleInPlaceActiveObject <> nil then FOleInPlaceActiveObject.TranslateAccelerator(Msg)
else
begin
Dispatch := WebBrowser1.Application;
if Dispatch <> nil then
begin
Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
if iOIPAO <> nil then FOleInPlaceActiveObject := iOIPAO;
end;
end;
end else Handled := False;
end;
|