Главная страница
    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.075 c
3-1099469147
Sergy Ivanec
2004-11-03 11:05
2004.12.12
Interbase, проблема с большим числом записей


14-1101301441
РВА
2004-11-24 16:04
2004.12.12
Где найти


6-1096822363
Wolverrum
2004-10-03 20:52
2004.12.12
ADO и CGI


1-1101721431
Брат
2004-11-29 12:43
2004.12.12
Динамическое создание объекта


3-1100178213
Мирон
2004-11-11 16:03
2004.12.12
Как в триггере BeforeInsert корректно отменить вставку строки





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