Deze source werkt iets beter en krijg je het alTop idee. Mooiste zou zijn dat realtime visueel de overige panels ook mee schuiven.
Kijk maar... Had er ook een keer mee gespeeld.
Form zelf kan je zelf even maken. Lijkt mij niet zo lastig met vier panels.
Gewoon panel 3 t/m 5 slepen naar andere positie.
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ImgList, ActnList;
type
TForm1 = class(TForm)
Panel3: TPanel; // alTop
Panel4: TPanel; // alTop
Panel5: TPanel; // alTop
PanelClient: TPanel; // alClient
procedure PanelTopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure PanelTopMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure PanelTopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
StartX: Integer;
StartY: Integer;
implementation
{$R *.DFM}
procedure TForm1.PanelTopMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
DisableAlign;
StartX := X;
StartY := Y;
(Sender as TPanel).Align := alNone;
(Sender as TPanel).BringToFront;
end;
procedure TForm1.PanelTopMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
with Sender as TPanel do
if ssLeft in Shift then { make sure button is down }
begin
left := left - StartX + X;
top := top - StartY + Y;
end;
end;
procedure TForm1.PanelTopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
(Sender as TPanel).Align := alTop;
EnableAlign;
end;
end.
Bookmarks