相信所有用到过DHtmlEdit Ocx控件的朋友都遇到过这个问题,回车的时候,会产生<p></p>标记,导致行间距过大,而 Shift+回车 就比较正常,原因是Shift+回车 产生的标记是 <br>;今天看到优快云有朋友发问,顺手写个解决办法,当然办法不止一种,css也可以解决,这里顺着提问者的思路给出解决办法.
代码如下:
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, OleCtrls, DHTMLEDLib_TLB, StdCtrls;
- type
- TForm1 = class(TForm)
- DHTMLEdit1: TDHTMLEdit;
- procedure FormCreate(Sender: TObject);
- 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;
- ARange: OleVariant;
- 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
- //处理回车为Shift+回车的效果
- ARange := DHTMLEdit1.DOM.selection.createRange;
- if ARange.text <> '' then
- DHTMLEdit1.DOM.selection.clear;
- ARange.pasteHTML('<br/>');
- ARange := DHTMLEdit1.DOM.selection.createRange;
- ARange.select;
- //取消当前事件
- Msg.message := 0;
- end;
- end;
- end;
- end;
- end;
- end;
- end.