问题:
procedure InitRichEditURLDetection(RE: TRichEdit);
var
mask: Word;
begin
mask := SendMessage(RE.Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RE.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
end;
//接收消息
procedure receive(var Msg: TMessage); message WM_NOTIFY;
RichEdi直接放在FORM上是可以收到消息
RichEdi放在panel上是就收不到消息,这种情况要怎么样处理?
解决办法:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, forms, Graphics, Controls,ComCtrls,
ComObj, ActiveX, Dialogs,TntClasses,TntComCtrls,TntSysUtils,RichEdit,StdCtrls;
type
TRichEdit=class(TTntCustomRichEdit)
private
procedure CNNotify(var Msg: TWMNotify); message CN_NOTIFY;
protected
{ Protected declarations }
procedure CreateWnd; override;
procedure DoURLClick (const URL : Widestring; place:TCharRange);
published
property Align;
property Alignment;
property Anchors;
property BevelEdges;
property BevelInner;
property BevelOuter;
property BevelKind default bkNone;
property BevelWidth;
property BiDiMode;
property BorderStyle;
property BorderWidth;
property Color;
property Ctl3D;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property HideSelection;
property HideScrollBars;
property ImeMode;
property ImeName;
property Constraints;
property Lines;
property MaxLength;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PlainText;
property PopupMenu;
property ReadOnly;
property ScrollBars;
property ShowHint;
property TabOrder;
property TabStop default True;
property Visible;
property WantTabs;
property WantReturns;
property WordWrap;
property OnChange;
property OnContextPopup;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseWheel;
property OnMouseWheelDown;
property OnMouseWheelUp;
property OnProtectChange;
property OnResizeRequest;
property OnSaveClipboard;
property OnSelectionChange;
property OnStartDock;
property OnStartDrag;
property OnDblClick;
end;
TForm1 = class(TForm)
RichEdit1: TRichEdit;
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TRichEdit.CreateWnd;
var
mask: Word;
begin
inherited CreateWnd;
SendMessage(Handle, EM_AUTOURLDETECT,1, 0);
mask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(Handle, EM_SETEVENTMASK, 0, mask or ENM_CHANGE or ENM_SELCHANGE or
ENM_REQUESTRESIZE or ENM_PROTECTED or ENM_LINK);
end;
procedure TRichEdit.DoURLClick(const URL : Widestring; place:TCharRange);
begin
end;
procedure TRichEdit.CNNotify(var Msg: TWMNotify);
var
p: TENLink;
begin
if (Msg.NMHdr^.code = EN_LINK) then
begin
p := TENLink(Pointer(Msg.NMHdr)^);
if (p.Msg = WM_LBUTTONDOWN) then
try
Perform(EM_EXSETSEL, 0, Longint(@(p.chrg)));
DoURLClick(SelText,p.chrg);
except
end;
end;
inherited;
end;
end.