밑도 끝도 없이, 뭐하는 코드인지도 알려주지 않고 해석해달라니요. --;;
살펴보니 TWebBrowser 컴포넌트에서 일부 키들이 안먹는 걸 해결하기 위한 코드이군요.
이 코드는 별 생각 없이 써도 상관없는 코드이고, 수정할 일도 없을 겁니다.
어디서부터 어디까지 모르시는 건지 조금도 알려주시지 않으셨으니 답변으로 강좌를 쓸 수도 없고...
참고할 만한 것들을 알려드리지요.
포럼 사이트 내에도 이 소스가 몇번 언급된 곳이 있습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=6289
위 글에도 있지만 이 소스의 최초 출처는 HHF Innovations(
http://members.shaw.ca/iedelphi/)라는 사이트입니다.
그리고 해당 소스가 있는 구체적인 위치는,
http://members.shaw.ca/iedelphi/webbrowser.htm#bugs2 이고요.
다음 문서도 참고하세요.
http://support.microsoft.com:80/support/kb/articles/q168/7/77.asp&NoWebContent=1&NoWebContent=1
꼬꼬닭 님이 쓰신 글 :
: 코드 해석좀 부탁드립니다. 첨보는 코드인지라. 죄송합니다.
:
: 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;