Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.062 c
11-1083932600
*Pavel
2004-05-07 16:23
2004.12.12
Глюки с открытием файла


1-1101473863
kaktus
2004-11-26 15:57
2004.12.12
Такой вредный ИнДизайн!!!!!


1-1101379568
noname:)
2004-11-25 13:46
2004.12.12
ListView


1-1101889207
pomashok
2004-12-01 11:20
2004.12.12
mouse_event


6-1096626563
Дмитрий Ботвин
2004-10-01 14:29
2004.12.12
Объём оперативки на удаленном компе





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский