Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно перетащить форму не за заголовок? [D6, Win95/98]


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

Как правильно перетащить форму не за заголовок? При использовании этого:
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;
Ни одна кнопка на форме не риагирует на усердные клики по ней! Да и вообще форма как парализованна! Есть ли другой способ?
Заранее большооой вам сенкс!


Vlad1   (2002-11-22 21:25:00) [1]

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



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;

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


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

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


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

Это лучший способ - 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-17 18:56:00) [4]

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


Николай Быков   (2002-11-17 17:44:00) [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 17:43:00) [6]

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


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

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:15:00) [8]

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо