delphi:我用两个panel重叠做了个工具面板,要求能够像窗口一样点击移动,拖动上层的panel下层panel移动,据说是在OnDockDrop和OnDockOver事件中写代码,但是还是不会,有高人请指导!万分感谢!

解决方案 »

  1.   

    下面是拖动一个panle的代码,你只需要在拖动过程中同时控制另一个panel即可unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
        FOldX,FOldY,FNewX,FNewY:integer;
        FMoveing:Boolean;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      FOldX := X;
      FOldY := Y;
      FMoveing := True;
    end;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if FMoveing then
      begin
        FNewX := X;
        FNewY := Y;
        Panel1.Left := Panel1.Left + FNewX - FOldX;
        Panel1.Top := Panel1.Top + FNewY- FOldY;
      end;
    end;procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      FMoveing := False;
    end;end.