Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
14-1135167379
syte_ser78
2005-12-21 15:16
2006.01.15
IPB


14-1135142731
begin...end
2005-12-21 08:25
2006.01.15
С Днём рождения! 21 декабря


2-1135614059
zaN0za
2005-12-26 19:20
2006.01.15
Аналог процедуры


14-1134927011
Din
2005-12-18 20:30
2006.01.15
Алгоритм


2-1135374380
zxcv
2005-12-24 00:46
2006.01.15
dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский