![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
При пертаскивании формы не за заголовок не работает OnMouseUp [D7, 2000]
azl © (2005-12-25 16:16:00)Добрый день. Столкнулся с такой проблемой: При пертаскивании формы не за заголовок не работает событие OnMouseUp.
procedure TForm1.Form1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform (WM_SYSCOMMAND,SC_MOVE+2,0);
end;
Пробовал другой вариант:
type
TForm = class(TForm)
private
procedure NCHitTest(var WMNCMsg: TWMNCHitTest); message WM_NCHITTEST;
end;
...
procedure TForm1.NCHitTest(var WMNCMsg: TWMNCHitTest);
begin
inherited;
with WMNCMsg do if Result = HTClient then Result:= HTCaption;
end;
OnMouseUp работает, но при этом не SpeedButton не нажимается.
Как быть в такой ситуации?
Мне нужно чтобы и событие OnMouseUp работало и SpeedButton нажмался, и при этом можно было перетаскивать форму не за заголовок.
Спасибо.
azl (2005-12-26 14:03:00) [1]Да, действительно все работает. У меня ошибка была в том, что в событии OnMouseDown я писал вот как:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Pos := Point(x, y);
ReleaseCapture;
Perform (WM_SYSCOMMAND,SC_MOVE+2,0);
end;
Спасибо.
Fenik (2005-12-25 23:42:00) [2]uses Messages;
Fenik (2005-12-25 23:40:00) [3]> azl © (25.12.05 17:39) [3]
> Да, но это совершенно не работает.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
Pos: TPoint;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Pos := Point(x, y);
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
SetBounds(Left - (Pos.x - x), Top - (Pos.y - y), Width, Height);
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('Yes!');
end;
end.
Все работает. Хватаю за форму левой кнопкой, таскаю, отпускаю - выскакивает сообщение 'Yes!'.
Antonn (2005-12-25 18:09:00) [4]да есть такая фигня, сам как то задавал вопрос. решения небыло, как то по другому решал...
azl (2005-12-25 17:39:00) [5]
> Fenik ©
Да, но это совершенно не работает. Мало того, функция Pos здесь совершенно не причем. Я, конечно, изменял Pos на Pos1 (Pos1: TPoint);
Я заметил, что при первом способе OnMouseUp cрабатывает если делать щелчок правой кнопкой мыши.
azl (2005-12-25 17:15:00) [6]Спасибо большое
Fenik (2005-12-25 16:28:00) [7]
procedure TFM.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Pos := Point(x, y);
end;
procedure TFM.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
SetBounds(Left - (Pos.x - x), Top - (Pos.y - y), Width, Height);
end;