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

Вниз

FormMouseMove   Найти похожие ветки 

 
начинающий 2   (2004-11-27 15:53) [0]

Подскажите плиз в чём ошибка, вот код:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
If GetCapture = 0 then
   SetCapture(Form1.Handle);
 if PtInRect(Rect(Form1.Left,Form1.Top,
     Form1.Left + Form1.Width, Form1.Top + Form1.Height),
     ClientToScreen(Point(x, y))) then begin
     ........
     ........
 end else begin
     ........
     ........
   end;
end;

Короче опредиляю находится ли курсор на форме или нет, и в зависимости от того где он, выполняется то или другое действие. Так всё работает, если несчитать что кнопки на форме с первого клика не активируются, как и другие компаненты. Если ставлю *SetCapture(Form1.ClientHandle);* , то с компонентами всё нормально, а деиствия после *end else begin* не выполняются. Или кто знает другой вариант.


 
Пыч   (2004-11-27 17:04) [1]

>Короче опредиляю находится ли курсор на форме или нет...

Чтобы определить находится ли курсор на форме не нужно:
...
If GetCapture = 0 then
  SetCapture(Form1.Handle);
if PtInRect(Rect(Form1.Left,Form1.Top,
    Form1.Left + Form1.Width, Form1.Top + Form1.Height),
    ClientToScreen(Point(x, y))) then begin...

если "курсор на форме", то событие FormMouseMove происходит,
в противном случае не происходит...


 
Начинающий2   (2004-11-27 17:35) [2]

> Пыч   (27.11.04 17:04) [1]
если "курсор на форме", то событие FormMouseMove происходит,
в противном случае не происходит...


Вся проблема втом, что мне надо знать конкретно где курсор. А если делать по другому, то действия повторяются постоянно пока курсор на форме. А мне надо чтоб один раз.
Пример:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If x or y>=0 then begin
 label1.Caption:="Курсор на форме";
 height:=400;
 width:=600;
end else begin
 height:=10;
 width:=20;
end;
end;

Форма будет менять свои размеры, пока курсор на форме.


 
Пыч ©   (2004-11-27 18:28) [3]

...
var
 Form1: TForm1;
 CursorOnForm: Boolean = False;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
 Pt: TPoint;
begin
 Pt:=ScreenToClient(Mouse.CursorPos);
 if PtInRect(ClientRect, Pt) then
 begin
   if not CursorOnForm then
     Windows.Beep(50, 50);
   CursorOnForm:=True;
 end else
 begin
   if CursorOnForm then
     Windows.Beep(100, 50);
   CursorOnForm:=False;
 end;
end;
...


 
начинающий 2   (2004-11-28 13:42) [4]

>Пыч ©   (27.11.04 18:28) [3]

Блин, чтото про *CursorOnForm* я не подумал, должно получится. Спасибо за подсказку.



Страницы: 1 вся ветка

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.031 c
1-1101743824
NSerge
2004-11-29 18:57
2004.12.12
Сохранение в кодировке DOS(866)


14-1101284415
Ricko
2004-11-24 11:20
2004.12.12
"На самом деле"


1-1101726843
Sanya
2004-11-29 14:14
2004.12.12
Клавиатура vs Пользователя


8-1095138488
resha
2004-09-14 09:08
2004.12.12
Обработка звука!!!


3-1100182284
Katrin
2004-11-11 17:11
2004.12.12
Как узнать ID созданной с помощью SQL записи?