0

我不知道如何调用像 TeamViewer 这样的交互式工具面板。我的问题非常客观:如何创建一个交互式面板,面板将随时隐藏/显示?

例子: 在此处输入图像描述


编辑:

我找到了一个可能的解决方案(下面的代码)。现在我想插入一个“ 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;
4

2 回答 2

1
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.

这是我的解决方案:

我还在用AnimateWindowapi。

  • Button属性上,设置right = 0
  • Panel可见时,Buttontop := Panel.Height
  • 最后,当Panel不可见(隐藏)时,Buttontop := 0
于 2018-05-05T18:11:35.720 回答
-2

试试这个:

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.

阿克塞尔

于 2018-05-05T08:22:53.150 回答