如何创建类似于 TeamViewer (hide/show) 的交互式选项面板?
How can I Create a Interactive Panel of Options Similar to TeamViewer (hide/show)?
我不知道如何调用像 TeamViewer 那样的交互式工具面板。我的问题很objective:如何创建一个交互式面板,面板会随时hide/show?
示例:
编辑:
我找到了一个可能的解决方案(下面的代码)。现在我想插入一个“Button
”粘在右侧和 Panel
下方。我该怎么做?
procedure TForm1.btn1Click(Sender: TObject);
begin
AnimateWindow(Panel1.Handle, 800, AW_SLIDE or AW_VER_NEGATIVE or AW_HIDE);
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
AnimateWindow(Panel1.Handle, 800, AW_SLIDE or AW_VER_POSITIVE or AW_ACTIVATE);
end;
试试这个:
unit NP;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TMainFrm = class(TForm)
Timer1: TTimer;
Timer2: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
public
end;
var
MainFrm: TMainFrm;
Range: integer;
implementation
{$R *.dfm}
procedure TMainFrm.FormCreate(Sender: TObject);
begin
Width := 255;
Height := Screen.Height;
Left := 0 - Width;
Top := 0;
Range := 0;
Timer1.Enabled := True;
Timer2.Enabled := True;
MainFrm.Show;
end;
procedure TMainFrm.Timer1Timer(Sender: TObject);
var
pos: TPoint;
begin
GetCursorPos(pos);
if (pos.X < 10) and (MainFrm.Left < 0) then
begin
Range := 20;
MainFrm.Show;
end;
if (Range <> 0) then
MainFrm.Left := MainFrm.Left + Range;
if MainFrm.Left < 0 - MainFrm.Width then
begin
Range := 0;
MainFrm.Left := 0 - MainFrm.Width;
MainFrm.Hide;
end;
if (Range = 20) and (MainFrm.Left >= 0) then
begin
Range := 0;
MainFrm.Left := 0;
end;
end;
procedure TMainFrm.Timer2Timer(Sender: TObject);
var
pos: TPoint;
begin
GetCursorPos(pos);
if pos.X > MainFrm.Width then
Range := -20;
end;
end.
阿克塞尔
type
TForm1 = class(TForm)
pnl1: TPanel;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
if btn1.Caption = 'H' then
begin
btn1.Top := 0;
btn1.Caption := 'S';
AnimateWindow(Pnl1.Handle, 400, AW_SLIDE or AW_VER_NEGATIVE or AW_HIDE);
end
else
begin
btn1.Top:= pnl1.Height;
btn1.Caption := 'H';
AnimateWindow(Pnl1.Handle, 400, AW_SLIDE or AW_VER_POSITIVE or AW_ACTIVATE);
end;
end;
end.
这是我的解决方案:
I'm still using AnimateWindow
api.
- 在
Button
属性上,设置 right = 0
- 当
Panel
可见时,Button
有top := Panel.Height
- 到最后,当
Panel
不可见(隐藏)时,Button
有top := 0
我不知道如何调用像 TeamViewer 那样的交互式工具面板。我的问题很objective:如何创建一个交互式面板,面板会随时hide/show?
示例:
编辑:
我找到了一个可能的解决方案(下面的代码)。现在我想插入一个“Button
”粘在右侧和 Panel
下方。我该怎么做?
procedure TForm1.btn1Click(Sender: TObject);
begin
AnimateWindow(Panel1.Handle, 800, AW_SLIDE or AW_VER_NEGATIVE or AW_HIDE);
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
AnimateWindow(Panel1.Handle, 800, AW_SLIDE or AW_VER_POSITIVE or AW_ACTIVATE);
end;
试试这个:
unit NP;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TMainFrm = class(TForm)
Timer1: TTimer;
Timer2: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
public
end;
var
MainFrm: TMainFrm;
Range: integer;
implementation
{$R *.dfm}
procedure TMainFrm.FormCreate(Sender: TObject);
begin
Width := 255;
Height := Screen.Height;
Left := 0 - Width;
Top := 0;
Range := 0;
Timer1.Enabled := True;
Timer2.Enabled := True;
MainFrm.Show;
end;
procedure TMainFrm.Timer1Timer(Sender: TObject);
var
pos: TPoint;
begin
GetCursorPos(pos);
if (pos.X < 10) and (MainFrm.Left < 0) then
begin
Range := 20;
MainFrm.Show;
end;
if (Range <> 0) then
MainFrm.Left := MainFrm.Left + Range;
if MainFrm.Left < 0 - MainFrm.Width then
begin
Range := 0;
MainFrm.Left := 0 - MainFrm.Width;
MainFrm.Hide;
end;
if (Range = 20) and (MainFrm.Left >= 0) then
begin
Range := 0;
MainFrm.Left := 0;
end;
end;
procedure TMainFrm.Timer2Timer(Sender: TObject);
var
pos: TPoint;
begin
GetCursorPos(pos);
if pos.X > MainFrm.Width then
Range := -20;
end;
end.
阿克塞尔
type
TForm1 = class(TForm)
pnl1: TPanel;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
if btn1.Caption = 'H' then
begin
btn1.Top := 0;
btn1.Caption := 'S';
AnimateWindow(Pnl1.Handle, 400, AW_SLIDE or AW_VER_NEGATIVE or AW_HIDE);
end
else
begin
btn1.Top:= pnl1.Height;
btn1.Caption := 'H';
AnimateWindow(Pnl1.Handle, 400, AW_SLIDE or AW_VER_POSITIVE or AW_ACTIVATE);
end;
end;
end.
这是我的解决方案:
I'm still using
AnimateWindow
api.
- 在
Button
属性上,设置right = 0
- 当
Panel
可见时,Button
有top := Panel.Height
- 到最后,当
Panel
不可见(隐藏)时,Button
有top := 0