Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.02;
Скачать: CL | DM;

Вниз

Как правильно перетащить форму не за заголовок?   Найти похожие ветки 

 
Сутковой Вадим   (2002-11-17 17:04) [0]

Как правильно перетащить форму не за заголовок? При использовании этого:
public
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
......
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;
Ни одна кнопка на форме не риагирует на усердные клики по ней! Да и вообще форма как парализованна! Есть ли другой способ?
Заранее большооой вам сенкс!


 
Николай Быков ©   (2002-11-17 17:11) [1]

Есть другой способ.
Эти мастера совсем обнаглели: всем, кто у них про это спрашивает, они говорят про WM_NCHITTEST.
Я всегда по-другому делаю перетаскивание формы


 
Сутковой Вадим   (2002-11-17 17:15) [2]

И как же? Плиз подскажи, запёкся уже!


 
Ученик ©   (2002-11-17 17:40) [3]

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0)
end
end;


 
Сутковой Вадим   (2002-11-17 17:43) [4]

Спасибки Ученику , ща опробую!


 
Николай Быков ©   (2002-11-17 17:44) [5]

Вот это пример показывает возможность перетаскивания формы как за поверхность формы, так и за компонент Label1
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
MDown:boolean;
XPos,YPos:integer;
implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MDown:=true;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MDown:=false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not MDown then
begin
XPos:=X;
YPos:=Y;
end
else
begin
Left:=Left+X-XPos;
Top:=Top+Y-YPos;
end;
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MDown:=true;
end;

procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MDown:=false;
end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not MDown then
begin
XPos:=X+Label1.Left;
YPos:=Y+Label1.Top;
end
else
begin
Left:=Left+Label1.Left+X-XPos;
Top:=Top+Label1.Top+Y-YPos;
end;
end;

end.


 
Сутковой Вадим   (2002-11-17 18:56) [6]

Спасибо больщое , опробовал оба пимера, всё прекрасно работает!


 
Nick N A   (2002-11-18 04:14) [7]

Это лучший способ - Windows API!

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Form1.Perform(wm_syscommand,SC_MOVE+2,0);
end;


 
Игорь Шевченко ©   (2002-11-18 12:17) [8]

А...эта...WM_NCHITTEST - проще и лучше... :-)))


 
Vlad1 ©   (2002-11-22 21:25) [9]

Прав Игорь Шевченко.



type Tform1=class(TForm)
......................
Procedure AllMove(var Msg:TMessage);message WM_NCHITTEST;
......................

implementation
.....................
procedure TForm1.AllMove(var Msg:TMessage);
begin
inherited;
if Msg.Result=1 then Msg.Result:=2;
end;

Вполне нормально работает.



Страницы: 1 вся ветка

Текущий архив: 2002.12.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-4435
Ренат
2002-11-19 08:24
2002.12.02
Типизированные файлы


1-4367
sural
2002-11-19 23:01
2002.12.02
Как узнать позицию курсора в edit е ?


1-4334
Slaviq
2002-11-19 20:38
2002.12.02
TTreeView


3-4184
BorisUK
2002-11-11 06:55
2002.12.02
Interbase Client Server


4-4688
Velocity
2002-10-19 13:31
2002.12.02
Запись в открытый файл