我用到了一个dhtmledit控件(一般操作系统都有:C:\Program Files\Common Files\Microsoft Shared\Triedit\DHTMLED.OCX ),我用该控件来进行html的编辑,
现在问题是在编辑内容时按下的回车键不是对文本进行换行,而是该控件进行了别的操作(进行html分段),只有按下shift+回车键才是对文本进行换行,我想实现的就是当在编辑内容的时候按下回车键后系统能自动发送 shift+回车键 组合键
用过formkeydown和FormKeyDown都不不行现在用如下办法也不行type
...
private
{ Private declarations }
procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := ApplicationMessage;//截获应用程序消息进行处理
end;procedure TForm1.ApplicationMessage(var Msg: TMsg;
var Handled: Boolean);
var
ShiftState: TShiftState;
KeyState: TKeyboardState;
begin
case Msg.Message of
WM_KEYDOWN:
BEGIN
case Msg.wParam of
VK_RETURN: //截获回车键
begin
GetKeyboardState(KeyState); //获取键盘状态
ShiftState := KeyboardStateToShiftState(KeyState);
if ShiftState =[] then //判断是否按下shift键
begin
KeyState[VK_SHIFT] :=1; //设置shift状态
SETKEYBOARDSTATE(KeyState);//设置取键盘状态
end;// msg.wParam := 0;
// keybd_event(vk_shift, 0, 0, 0);
// keybd_event(VK_RETURN, 0, 0, 0);
// keybd_event(VK_RETURN, 0, 2, 0);
// keybd_event(vk_shift, 0, 2, 0);
// postmessage(DHTMLEdit1.Handle,wm_keydown,VK_RETURN,0);
// postmessage(DHTMLEdit1.Handle,wm_keyup,VK_RETURN,0);
end;
end;
END;
end;
end;
end.
现在问题是在编辑内容时按下的回车键不是对文本进行换行,而是该控件进行了别的操作(进行html分段),只有按下shift+回车键才是对文本进行换行,我想实现的就是当在编辑内容的时候按下回车键后系统能自动发送 shift+回车键 组合键
用过formkeydown和FormKeyDown都不不行现在用如下办法也不行type
...
private
{ Private declarations }
procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := ApplicationMessage;//截获应用程序消息进行处理
end;procedure TForm1.ApplicationMessage(var Msg: TMsg;
var Handled: Boolean);
var
ShiftState: TShiftState;
KeyState: TKeyboardState;
begin
case Msg.Message of
WM_KEYDOWN:
BEGIN
case Msg.wParam of
VK_RETURN: //截获回车键
begin
GetKeyboardState(KeyState); //获取键盘状态
ShiftState := KeyboardStateToShiftState(KeyState);
if ShiftState =[] then //判断是否按下shift键
begin
KeyState[VK_SHIFT] :=1; //设置shift状态
SETKEYBOARDSTATE(KeyState);//设置取键盘状态
end;// msg.wParam := 0;
// keybd_event(vk_shift, 0, 0, 0);
// keybd_event(VK_RETURN, 0, 0, 0);
// keybd_event(VK_RETURN, 0, 2, 0);
// keybd_event(vk_shift, 0, 2, 0);
// postmessage(DHTMLEdit1.Handle,wm_keydown,VK_RETURN,0);
// postmessage(DHTMLEdit1.Handle,wm_keyup,VK_RETURN,0);
end;
end;
END;
end;
end;
end.
if ShiftState =[] then //判断是否按下shift键
begin
keybd_event(vk_shift, 0, 0, 0);
end;
就不要再
keybd_event(vk_shift, 0, 2, 0);
因為這樣,dhtmledit控件 最終收到的只是回車鍵而已。至于什么時候回復shift狀態,你可以把代碼改成這樣:
keybd_event(vk_shift, 0, 0, 0);
sendmessage(dhtmledit.Handle,wm_keydown,vk_Return,0);
keybd_event(vk_shift, 0, 2, 0);
单击dhtmledit控件,在它的OnKeyPress事件下写如下代码即可:
IF (GetKeyState(VK_Shift) and 128)=128 THEN EXIT;
if (Key=#13) then
begin
Key:=#0;
keybd_event(VK_Shift,0,0,0);
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_Shift,0,KEYEVENTF_KEYUP,0);
end;
注意你的承诺。
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_Shift,0,KEYEVENTF_KEYUP,0);
可以。
只有OnOnKeyPress事件、OnOnKeyDown事件、OnOnKeyUp事件(注意都是多了一个on)
而且OnOnKeyPress事件没有Key参数(别的delphi自带控件的OnKeyPress事件就有),你可以安装该控件试一下,
在C:\Program Files\Common Files\Microsoft Shared\Triedit\DHTMLED.OCX 有该控件to:zhao_yong
你的方法我也试过,没有效果
http://blog.csdn.net/ideation_shang/archive/2009/01/16/3798082.aspx