Форум: "Начинающим";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизПри пертаскивании формы не за заголовок не работает OnMouseUp Найти похожие ветки
← →
azl © (2005-12-25 16:16) [0]Добрый день. Столкнулся с такой проблемой: При пертаскивании формы не за заголовок не работает событие 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 нажмался, и при этом можно было перетаскивать форму не за заголовок.
Спасибо.
← →
Fenik © (2005-12-25 16:28) [1]
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;
← →
azl © (2005-12-25 17:15) [2]Спасибо большое
← →
azl © (2005-12-25 17:39) [3]
> Fenik ©
Да, но это совершенно не работает. Мало того, функция Pos здесь совершенно не причем. Я, конечно, изменял Pos на Pos1 (Pos1: TPoint);
Я заметил, что при первом способе OnMouseUp cрабатывает если делать щелчок правой кнопкой мыши.
← →
Antonn © (2005-12-25 18:09) [4]да есть такая фигня, сам как то задавал вопрос. решения небыло, как то по другому решал...
← →
Fenik © (2005-12-25 23:40) [5]> 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!".
← →
Fenik © (2005-12-25 23:42) [6]uses Messages;
← →
azl © (2005-12-26 14:03) [7]Да, действительно все работает. У меня ошибка была в том, что в событии 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;
Спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c