如何实现窗体内的控件自动隐藏?(100分)

  • 主题发起人 主题发起人 lovecs
  • 开始时间 开始时间
L

lovecs

Unregistered / Unconfirmed
GUEST, unregistred user!
如果ie在全屏方式下浏览网页,左边的收藏夹会有自动隐藏功能。
我在程序的左侧放了一个panel控件,右侧放了一个WebBrowser控件,
请问如何实现自动隐藏。
我试过以form的onmousemove事件来判断鼠标是否在panel上面,没有用处。
本想,当鼠标移到WebBrowser上后,panel控件自动隐藏。但WebBrowser并没有onmousemove
事件。怎么办?
高手指点!
 
要用到Mouse_leave和Mouse_In
用消息来做吧
 
帮帮忙,给段代码,谢谢了
 
你能控制WebBrowser的全屏幕吗?若能,在它的FullScreen事件中加上移动Panel的事件即可。
再在Panel的MouseMove事件中加上移出Panel的事件就可实现你的要求。
源码如下:你自己实现动画了,我是用一个按钮来实现FullScreen的,我对WebBrowser不熟
悉。你还可以自己加上动画过程。
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.FullScreen:=True;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Panel1.SetFocus;
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Panel1.Left<=(-Panel1.Width+1) then
Panel1.Left:=0;
end;

procedure TForm1.WebBrowser1FullScreen(Sender: TObject;
FullScreen: WordBool);
begin
Panel1.Left:=-Panel1.Width+1;
end;
 
谢谢你,但我不是想写浏览器程序,只不过是想在程序中加入一个浏览器的控件
 
下面是我做的一个改进TButton的控件,因该对你有所帮助,你可以用同样的方法改进TPanel.

unit Button1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TButton1 = class(TButton)

private FOnMouseLeave: TNotifyEvent;
 procedure WZMouseLeave(var Msg:TMessage); message CM_MOUSELEAVE;
  { Private declarations }

protected
  { Protected declarations }

public
  { Public declarations }

published
 property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  { Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
 //在系统中注册控件
 RegisterComponents('Samples', [TButton1]);
end;
 { TButton1 }

procedure TButton1.WZMouseLeave(var Msg: TMessage);
begin
 inherited;//继承父类
 if csLButtonDown in ControlState then
 begin
  Self.MouseUp(mbLeft,[ssLeft],0,0);
 end;
 if Assigned (FonMouseLeave) then FOnMouseLeave(Self);
 end;
end.

  代码添加完后,编译后,一个名为Button1的控件即加入Simples项,新建一个项目,试试这段代码:

procedure TForm1.Button11MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 label1.Caption:='在';
end;

procedure TForm1.Button11MouseLeave(Sender: TObject);
begin
 label1.Caption:='不在';
end;
 
设置一下属性就可以了,很简单的
panel的align=alleft,(还可以放置一个splitter控件(additional页中有的),
可以左右随意拖来,他的align=alleft),然后webbrower的align=alclient

最后需要的时候吧panel隐藏即可实现(visible=false)
 
在WebBrowser上放一个透明的Image控件,关于实现透明你可以用GetDC()和Bitblt实现
 
多人接受答案了。
 
后退
顶部