안녕하세요
오늘은 날씨도 좋은데 이놈의 엔터땜에 집구석에 있습니다.....ㅜ.ㅜ
unit Web;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw, OLE2, ActiveX;
type
TfrmWeb = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure WebBrowser1NavigateComplete2(ASender: TObject;
const pDisp: IDispatch; const URL: OleVariant);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
end;
var
frmWeb: TfrmWeb;
implementation
{$R *.dfm}
procedure TfrmWeb.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Action := caFree;
end;
procedure TfrmWeb.FormCreate(Sender: TObject);
begin
Application.OnMessage := MsgHandler;
end;
procedure TfrmWeb.FormDestroy(Sender: TObject);
begin
FOleInPlaceActiveObject := nil;
end;
procedure TfrmWeb.FormKeyPress(Sender: TObject; var Key: Char);
begin
//Don't forget ot set the Keypreview property
//of the form to true!
if (Key=#13) then begin
Key := #0;
Keybd_Event(VK_LCONTROL, 0, 0, 0); //Ctrl key down
Keybd_Event(Ord('M'), MapVirtualKey(Ord('M'), 0), 0, 0); // 'M' key down
Keybd_Event(Ord('M'), MapVirtualKey(Ord('M'), 0), KEYEVENTF_KEYUP, 0); // 'M' Key up
Keybd_Event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); // Ctrl key up
Keybd_Event(VK_CANCEL, 0, 0, 0);
end;
end;
procedure TfrmWeb.MsgHandler(var Msg: TMsg; var Handled: Boolean);
const
StdKeys = [VK_BACK, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT];
var IOIPAO: IOleInPlaceActiveObject;
Dispatch: IDispatch;
begin
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 := IDispatch(WebBrowser1.Application);
if Dispatch <> nil then
begin
Dispatch.QueryInterface(IID_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 in StdKeys) then
//nothing - do not pass on Backspace, Left, Right, Up, Down arrows
else FOleInPlaceActiveObject.TranslateAccelerator(Msg);
end;
end;
procedure TfrmWeb.WebBrowser1NavigateComplete2(ASender: TObject;
const pDisp: IDispatch; const URL: OleVariant);
begin
//
end;
initialization
OleInitialize(nil);
finalization
OleUninitialize;
end.
이렇게 해서 브라우저 부분을 처리 했는데 textarea 부분에서 엔터키가 안먹힙니다.
WebBrowser1.Navigate('
http://testgyro.com/t/1.html');
여기에 아무것도 없는 textarea만 있는데 안되네여
저는 XE2로 작업하였습니다.
부디 회신 부탁드립니다.