Delphi中DHtmlEdit回车换两行的解决办法收藏

相信所有用到过DHtmlEdit  Ocx控件的朋友都遇到过这个问题,回车的时候,会产生<p></p>标记,导致行间距过大,而 Shift+回车 就比较正常,原因是Shift+回车 产生的标记是 <br>;今天看到CSDN有朋友发问,顺手写个解决办法,当然办法不止一种,css也可以解决,这里顺着提问者的思路给出解决办法.

 

 代码如下:

 

  1. unit Unit1;   
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   
  7.   Dialogs, OleCtrls, DHTMLEDLib_TLB, StdCtrls;   
  8.   
  9. type  
  10.   TForm1 = class(TForm)   
  11.     DHTMLEdit1: TDHTMLEdit;   
  12.     procedure FormCreate(Sender: TObject);   
  13.   private  
  14.     { Private declarations }  
  15.     procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean);   
  16.   
  17.   public  
  18.     { Public declarations }  
  19.   end;   
  20.   
  21. var  
  22.   Form1: TForm1;   
  23.   
  24. implementation  
  25.   
  26.   
  27. {$R *.dfm}  
  28.   
  29. procedure TForm1.FormCreate(Sender: TObject);   
  30. begin  
  31.   Application.OnMessage := ApplicationMessage;   
  32. end;   
  33.   
  34. procedure TForm1.ApplicationMessage(var Msg: TMsg;   
  35.   var Handled: Boolean);   
  36. var  
  37.   ShiftState: TShiftState;   
  38.   KeyState: TKeyboardState;   
  39.   ARange: OleVariant;   
  40. begin  
  41.   case Msg.Message of  
  42.     WM_KEYDOWN:   
  43.       begin  
  44.         case Msg.wParam of  
  45.           VK_RETURN: //截获回车键   
  46.             begin  
  47.               GetKeyboardState(KeyState); //获取键盘状态   
  48.               ShiftState := KeyboardStateToShiftState(KeyState);   
  49.               if ShiftState = [] then //判断是否按下shift键   
  50.               begin  
  51.                 //处理回车为Shift+回车的效果   
  52.                 ARange := DHTMLEdit1.DOM.selection.createRange;   
  53.                 if ARange.text <> '' then  
  54.                   DHTMLEdit1.DOM.selection.clear;   
  55.                 ARange.pasteHTML('<br/>');   
  56.                 ARange := DHTMLEdit1.DOM.selection.createRange;   
  57.                 ARange.select;   
  58.                 //取消当前事件   
  59.                 Msg.message := 0;   
  60.               end;   
  61.             end;   
  62.         end;   
  63.       end;   
  64.   end;   
  65. end;   
  66.   
  67.   
  68. end.  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值