![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FormMouseMove [D6, WinXP]
начинающий 2 © (2004-11-27 15:53:00)Подскажите плиз в чём ошибка, вот код:
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* не выполняются. Или кто знает другой вариант.
начинающий 2 (2004-11-28 13:42:00) [1]>Пыч © (27.11.04 18:28) [3]
Блин, чтото про *CursorOnForm* я не подумал, должно получится. Спасибо за подсказку.
Пыч (2004-11-27 18:28:00) [2]...
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-27 17:35:00) [3]> Пыч (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 17:04:00) [4]>Короче опредиляю находится ли курсор на форме или нет...
Чтобы определить находится ли курсор на форме не нужно:
...
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 происходит,
в противном случае не происходит...