有些软件有这样的特效,一个图钉的按钮,点一下显示钉上的样子,窗体就不动,再一点取消的时候窗体就隐藏起来,能不能给段代码呢?

解决方案 »

  1.   

    楼主是需要窗体不能移动的代码吧那需要捕获窗体移动的消息
    procedure onmove(var msg:TMessage); message wm_syscommand;
      

  2.   


     手頭沒有開發環境 了,代碼就不寫了。 
     圖釘可以用二個圖標,比如這個PANEL創建出來。圖標你可以用一下 imageList  來管理,放二個圖標在裏面
     
     初始化時用 1  號圖標,當點擊的時候判斷如果是1號圖標在顯示,就換成2號圖標顯示,反之也是。 在切換圖標的時候 廳改變   dockKind  的值,可移動時要改為: dkDock   不可移動時改為:dkDrag 當然 dragmode := dmAutomatic
     
      

  3.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        CanMove:Boolean;
        Procedure MoveForm(var M:TWMNCHITTEST);Message WM_NCHITTEST;  public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.MoveForm(var M: TWMNCHITTEST);
    begin
      if not CanMove then
        Exit
      else
        inherited;end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      CanMove := not CanMove;
    end;end.
    你只要通过换图标,控制CanMove 就可以了
      

  4.   

    谢谢楼上的,弱弱的问一句要是 隐藏、固定的不是窗体而是 窗体上的Tanel控件,那该怎么改呢
      

  5.   

    也就是TPanel控件隐藏、固定的时候Procedure MoveForm(var M:TWMNCHITTEST);Message WM_NCHITTEST;
    怎么改,拜托了
      

  6.   

    那就不用那么复杂了
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Canhide := not Canhide;
      i:=form1.controlcount;
      for j:=i-1 downto 0 do
      begin
        if form1.controls[j].classname='TPanel' then
        begin
          if canhide then
            form1.controls[j].visible:=false
          else
            form1.controls[j].visible:=true;
        end;
      end;
    end;