Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизАбсолютные координаты мыши. Найти похожие ветки
← →
Бегун (2004-04-29 03:21) [0]Если на событие формы OnMouseMove повесить обработчик:
procedure TfrmAdd.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
label1.Caption:=IntToStr(X);
label2.Caption:=IntToStr(Y);
end;
то, двигая мышкой, будем видеть изменение координат
относительно левого верхнего угла формы.
Что-бы получить абсолютные координаты:
label1.Caption:=IntToStr(frmAdd.Left+X);
label2.Caption:=IntToStr(frmAdd.Top+Y);
Но.
Если схватить форму за заголовок и тащить её - не происходит событие OnMouseMove.
И, следовательно, невозможно получить координаты мыши.
Вопрос:
Как получить абсолютные координаты мыши во время перетаскивания формы за заголовок? (по другому перетаскивать форму вроде и нельзя... :) )
← →
Gero © (2004-04-29 07:09) [1]GetCursorPos
← →
TUser © (2004-04-29 07:39) [2]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
M:TMouse;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.Caption:="x = "+inttostr(M.CursorPos.X)+"; y = "+
inttostr(M.CursorPos.Y);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
M:=TMouse.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
M.Free;
end;
end.
← →
Gero © (2004-04-29 07:42) [3]
> M:=TMouse.Create;
> M.Free;
Это еще зачем?
← →
Piople © (2004-04-29 07:45) [4]
> Gero
Потому что есть разные подходы для решения данной задачи.
← →
Gero © (2004-04-29 07:47) [5]
> Потому что есть разные подходы для решения данной задачи
А чем объект Mouse не устраивает?
← →
TUser © (2004-04-29 07:48) [6]В смысле зачем? Объекты что создавать не надо? Это же не Screen и не Application.
← →
Gero © (2004-04-29 07:49) [7]
> Это же не Screen и не Application
Это Mouse.
← →
Piople © (2004-04-29 07:49) [8]
> А чем объект Mouse не устраивает?
С чего ты взял что меня он не устраивает???
← →
Gero © (2004-04-29 07:52) [9]
> С чего ты взял что меня он не устраивает???
С того, что Вы мне ответили.
← →
Piople © (2004-04-29 07:55) [10]
> Gero
Разве я сказал что меня неустраивает??? Я сказал ЧТО ЕСТЬ РАЗНЫЕ ПОДХОДЫ ДЛЯ РЕШЕНИЯ ЗАДАЧ!!!
← →
MBo © (2004-04-29 08:11) [11]>TUser © (29.04.04 07:48) [6]
Прислушайся к Gero - в данном случае ты неправ. Mouse, как и, например, ClipBoard, создавать не нужно. Эта глобальная переменная автоматически создается в Init. секции модуля Controls.
← →
TUser © (2004-04-29 08:28) [12]Да, конечно, лучше mouse.
← →
Юрий Зотов © (2004-04-29 08:54) [13]А подходы к решению задачи действительно существуют разные. Существуют ОДНИ - и существуют ДРУГИЕ.
Уточнять, видимо, не стоит?
:о)
← →
Yar-Com (2004-04-29 09:04) [14]x := GetSystemMetrics(SM_CXSCREEN) div 2;
y := GetSystemMetrics(SM_CYSCREEN) div 2;
← →
Yar-Com (2004-04-29 09:15) [15]Боже мой, что я делаю!!!! =)
← →
Бегун (2004-04-30 10:25) [16]>TUser © (29.04.04 07:39) [2]
То что надо.
(Не использую M:TMouse, использую Mouse)
А можно ли обойтись без таймера?
← →
Expre$$ (2004-04-30 10:38) [17]label1.Caption :=IntToStr(Mouse.CursorPos.X);
label2.Caption :=IntToStr(Mouse.CursorPos.Y);
← →
Бегун (2004-04-30 11:47) [18]>Expre$$ (30.04.04 10:38) [17]
А куда этот код вставить????
Так работает:
procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
label1.Caption:="x = "+inttostr(Mouse.CursorPos.X);
label2.Caption:="y = "+inttostr(Mouse.CursorPos.Y);
end;
Но, как без таймера?
На какое событие повесить этот код?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c