Главная страница
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.024 c
1-1101405558
Gero
2004-11-25 20:59
2004.12.12
Прокрутка в консоли


3-1100241022
gek
2004-11-12 09:30
2004.12.12
Узнать формат базы данных


14-1100041467
GanibalLector
2004-11-10 02:04
2004.12.12
Даешь встречу в Харькове ???


3-1100156376
Брат
2004-11-11 09:59
2004.12.12
Проверка существования таблицы


1-1101672773
Донской
2004-11-28 23:12
2004.12.12
Код raise.exception.create не генерит ошибки!!