Форум: "Основная";
Текущий архив: 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