Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как отображать координаты курсора


Автор: Dedal 14.8.2002, 09:26
Как сделать, чтобы ведя мышкой возле самого курсора или где-нибудь в окне отображались его координаты?

Автор: Vit 14.8.2002, 11:03
Цитата(Guest @ 13.8.2002, 17:26)
ведя мышкой возле самого курсора

Это как?

Автор: Dapo 14.8.2002, 14:45
2 Vit:Наверное имеется в виду следующее: курсор - как монитор координат мышки.

2 Dedal: Можно сделать так (но не нужно):

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 Label1.Top:=y-10;
 Label1.Left:=x+10;
 Label1.Caption:=Inttostr(x)+' '+inttostr(y);
end;

Первое, что пришло в голову. Советую не использовать данную процеДуру (просто как вариант).  :hehe
PS Знаки препинания - отличная штука, если, конечно, умеешь ими пользоваться ;-)

Автор: Mikel 14.8.2002, 15:35
А не лучше как у всех на StatusBar выводить?

Автор: Sniper 16.8.2002, 05:54
Вот ещё вариант

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   Label1: TLabel;
   Timer1: TTimer;
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 mousepos : TPoint;
 mx, my :  longword;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
GetCursorPos(mousepos);
mx := mousepos.x;
my := mousepos.y;

label1.Caption := FloatToStr(mx) + ' ' +FloatToStr(my);
end;

end.

Автор: Song 17.8.2002, 05:35
Тогда нужно ограничивать перемещение окном.

Автор: Dapo 21.8.2002, 11:23
вот еще вариант:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
Refresh;
Form1.Canvas.TextOut(x,y-10,Inttostr(x)+' '+inttostr(y));
end;

Автор: Song 21.8.2002, 16:44
Тогда ещё нужно обновлять содержимое канвы.

Автор: Sniper 22.8.2002, 07:20
2Song: Всех поправил..... :-)))
Теперь предлагай свой вариант!!!!!!

Автор: Song 22.8.2002, 21:34
Мой вариант THintWindow+Application.ActivateHint()

Автор: Spawn 23.8.2002, 15:00
А можно, как уже приводилось на етом форуме, через HOOK:

var
HookHandle: hHook;

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PEVENTMSG;
begin
if Code >= 0 then begin
  result := 0;
  msg := Pointer(LParam);
  with Form1 do
    case msg.message of
      WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr (msg.ParamH);
    end;
end else
  result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookHandle <> 0 then
  UnhookWindowsHookEx(HookHandle);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)