Главная страница
    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.04 c
1-1101844581
Der Juvas
2004-11-30 22:56
2004.12.12
Очистка строки


1-1101826657
Павел
2004-11-30 17:57
2004.12.12
Таймер в многопоточном приложение


3-1100059505
Marat
2004-11-10 07:05
2004.12.12
Ошибка при вставке в StringGrid


3-1100174069
Layner
2004-11-11 14:54
2004.12.12
При вставке новой строки в DBGrid, при переходе на рядом


1-1101290251
ККВ
2004-11-24 12:57
2004.12.12
Чем открыть файл *.wdb?





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