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

Вниз

При пертаскивании формы не за заголовок не работает 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
14-1134921756
ArtemESC
2005-12-18 19:02
2006.01.15
ClrScr Turbo Pas a


2-1135446082
SEN
2005-12-24 20:41
2006.01.15
Значение текстового поля в Word


1-1134061576
Леонид Федьков
2005-12-08 20:06
2006.01.15
Нажатие Caps Lock из программы


4-1131195247
Ejik
2005-11-05 15:54
2006.01.15
перехват createfilew


2-1135621862
Mahab
2005-12-26 21:31
2006.01.15
Jpeg