当前位置:主页>销售管理软件> 列表

如何让MEMO显示?

销售管理软件版1楼: procedure my_MOUSELEAVE(var Message: TMessage); message CM_MOUSELEAVE;

procedure tform1.my_MOUSELEAVE(var Message: TMessage);
var
p: TPoint;
begin

GetCursorPos(p);
p := self.ScreenToClient(p);

if not PtInRect(ClientRect, p) then
Memo1.Lines.Add(''out form 了'');
end;

当mouse移出FORM1时MEMO可以显示''out form 了'';
问题:
但如果是一panel时,当mouse移出panel时,如何让MEMO显示?请哪位大侠解答!!!

2楼: procedure tform1.my_MOUSELEAVE(var Message: TMessage);
var
p: TPoint;
begin

GetCursorPos(p);
p := self.ScreenToClient(p);

if not PtInRect(ClientRect, p) then//这里换成panel的范围
Memo1.Lines.Add(''out form 了'');
end; 如sql进销存系统

3楼: 楼上的误会我的意思了,我的初衷是调用PANEL有消息时:
procedure tpanel1.my_MOUSELEAVE(var Message: TMessage);
var
p: TPoint;
begin

GetCursorPos(p);
p := self.ScreenToClient(p);

if not PtInRect(ClientRect, p) then
Memo1.Lines.Add(''out form 了'');
end;
MEMO1变成未定义,但我又不想动态建MEMO1,有办法吗?

4楼: 从TPanel继承生成新类,添加OnMouseLeave事件即可
TZPanel = class(TPanel)
private
{ Private declarations }
FFocusColorUse: Boolean;
FFocusForeColor: TColor;
FFocusBackColor: TCOlor;
FLastForeColor: TColor;
FLastBackColor: TColor;
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
procedure SetFocusColorUse(Value: Boolean);
procedure SetFocusForeColor(Value: TColor);
procedure SetFocusBackColor(Value: TColor);
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
{ Protected declarations }
procedure DoEnter; override;
procedure DoExit; override;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;


published
{ Published declarations }
property FocusColorUse: Boolean read FFocusColorUse write SetFocusColorUse;
property FocusForeColor: TColor read FFocusForeColor write SetFocusForeColor;
property FocusBackColor: TColor read FFocusBackColor write SetFocusBackColor;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;
constructor TZPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FFocusForeColor := clBlack;
FFocusBackColor := clYellow;
FFocusColorUse := True;
FLastForeColor := Self.Font.Color;
FLastBackColor := Self.Color;
end;

procedure TZPanel.CMMouseEnter(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseEnter) then
FOnMouseLeave(Self);
end;

procedure TZPanel.CMMouseLeave(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;

procedure TZPanel.SetFocusColorUse(Value: Boolean);
begin
if FFocusColorUse <> Value then
FFocusColorUse := Value;
end;

procedure TZPanel.SetFocusForeColor(Value: TColor);
begin
if FFocusForeColor <> Value then
FFocusForeColor := Value;
end;

procedure TZPanel.SetFocusBackColor(Value: TColor);
begin
if FFocusForeColor <> Value then
FFocusBackColor := Value;
end;

procedure TZPanel.DoEnter;
begin
inherited;
if FFocusColorUse = True then
begin
FLastForeColor := Self.Font.Color;
FLastBackColor := Self.Color;
Self.Font.Color := FFocusForeColor;
Self.Color := FFocusBackColor;
end;
end;

procedure TZPanel.DoExit;
begin
inherited;
if FFocusColorUse = True then
begin
Self.Font.Color := FLastForeColor;
Self.Color := FLastBackColor;
end;
end;

5楼: 天道酬勤兄:
MEMO1应该怎样定义,才能使程序运行时不出现"MEMO1变成未定义"的提示?
谢谢!

6楼: 根本不需要继承,用个ApplicationEvents控件就能搞顶,试试我下面的代码,我用的是WM_MOUSEMOVE消息:
在ApplicationEvents的OnMessage事件里写:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if msg.message=wm_mousemove then
if (msg.hwnd=panel1.Handle) or ischild(panel1.Handle,msg.hwnd) then
memo1.Text:=''鼠标移入''
else
memo1.Text:=''鼠标移出'';
end;