Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];
ВнизКак правильно перетащить форму не за заголовок? Найти похожие ветки
← →
Сутковой Вадим (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c