private
procedure WMNCHitTest (var M: TWMNCHitTest); message wm_NCHitTest;
//
// ля ля ля жу жу жу :)
//
procedure TYourFormName.WMNCHitTest (var Msg:TWMNCHitTest);
begin
inherited;
if (Msg.Result = htClient) then Msg.Result := htCaption;
end;
Перемещение формы
Заранее Спасибо!
Код:
Это было раз :)
Можно еще обработать нажание мышкой на панели. Это два 8)
Код:
procedure TYourFormName.YourPaneName_lMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
Есть еще способы :) Но и этого должно хватит за глаза :)
Код:
procedure TYourFormName.YourPaneName_lMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
Видимо, $F012 - это SC_MOVE?
Код:
unit Unit1;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
private
{ Private declarations }
protected
// Перехват сообщения WM_NCHITTEST для перемещения окна без заголовка.
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
// Результат HTCAPTION означает, что курсор находится над заголовком:
Message.Result := HTCAPTION;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
// Окно с рамкой (WS_THICKFRAME), но без заголовка (WS_POPUP):
Params.Style := WS_THICKFRAME or WS_POPUP;
end;
end.
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
private
{ Private declarations }
protected
// Перехват сообщения WM_NCHITTEST для перемещения окна без заголовка.
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
// Результат HTCAPTION означает, что курсор находится над заголовком:
Message.Result := HTCAPTION;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
// Окно с рамкой (WS_THICKFRAME), но без заголовка (WS_POPUP):
Params.Style := WS_THICKFRAME or WS_POPUP;
end;
end.
Код:
TForm1 = class(TForm)
...
private
OldX, OldY: Integer;
...
end;
...
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
OldX := X;
OldY := Y;
end;
...
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Shift = [ssLeft] then begin
Left := Left + (X - OldX);
Top := Top + (Y - OldY);
end;
end;
...
...
private
OldX, OldY: Integer;
...
end;
...
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
OldX := X;
OldY := Y;
end;
...
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Shift = [ssLeft] then begin
Left := Left + (X - OldX);
Top := Top + (Y - OldY);
end;
end;
...