بدست آوردن موقعیت نشانگر ماوس بر روی کامپوننت
سلام به اساتید محترم
میدونم که موقعیت نشانگر ماوس بر روی هر آبجکتی رو میشه در OnMouseMove اون و با متغیرهای X و Y به دست آورد.
procedure TCustomControl.MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Caption := IntToStr(x) + ' ' + IntToStr(y);
end;
من در حال نوشتن یه کامپوننت هستم که بدست آوردن موقعیت نشانگر ماوس بر روی کامپوننت برام مهم هست و نمیدونم چجور این کار رو انجام بدم .
کسی میتونه کمکی بده ؟ ممنون از همه
نقل قول: بدست آوردن موقعیت نشانگر ماوس بر روی کامپوننت
سلام مجدد به همه عزیزان
راهش رو پیدا کردم و با یه توضیح مختصر مینویسمش شاید یه جایی به درد کسی بخوره .
در زمان نوشتن کامپوننت یه تایمر رو میسازیم و اجرای یه پروسیژر رو به رویداد OnTimer اون اختصاص میدیم .
مثال :
constructor T*****.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FTimer := TTimer.Create(Self);
with FTimer do begin
Enabled := FALSE;
Interval := 1;
OnTimer := MousePositionControl;
end;
.
.
.
بعد پروسیژر :
procedure T*****.MousePositionControl(Sender:TObject);
var
P: TPoint;
FMX, FMY: Word;
begin
P := Mouse.CursorPos;
P := Self.ScreenToClient(P);
FMX := P.x;
FMY := P.y;
.
.
.
متغیرهای FMX , FMY موقعیت نشانگر ماوس روی کامپوننت در زمان اجرا رو برمیگردونن .
ایشالا مفهوم بوده باشه توضیحاتم .
نقل قول: بدست آوردن موقعیت نشانگر ماوس بر روی کامپوننت
سلام. تایمر داخل کامپوننت فقط داره سرباره ایجاد می کنه، یک متد هست در کامپوننت های کنترل به نام MouseMove که می تونید اون رو اورراید کنید.
بگردید دنبالش و اگه نبود حتما در کلاس بالاترش پیداش می کنید.
اون رو در پروتکتد کلاس بنویسید و اوررایدش کنید.
نقل قول: بدست آوردن موقعیت نشانگر ماوس بر روی کامپوننت
با تشکر از شما جناب زالی
اول بگم که این اولین کامپوننتی هست که دارم می نویسم و توی این زمینه خیلی مبتدیم .
کامپوننتی که دارم مینویسم یک Image هست که از کلاس TGraphicControl مشتق شده و زمانی که در Protected کنترل MouseMove رو override میکنم ارور زیر نمایش داده میشه :
نقل قول:
Declaration of 'MouseMove' differs from previous declaration
اگه اشتباه نکنم بخاطر اینه که توی کلاس TGraphicControl این کنترل تعریف نشده همچنین در کلاس بالاترش TControl هم تعریف نشده و در نهایت در کلاس بالاتر (TComponent) کنترل MouseMove به شکل زیر تعریف شده :
نقل قول:
procedure MouseMove(Shift: TShiftState; X, Y: Integer); dynamic;
میخواستم ببینم راه صحیح تعریف کنترل MouseMove واسه کامپوننت من چیه ؟
آیا اگه به شکل زیر تعریفش کنم صحیحه ؟
نقل قول:
procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
ممنون میشم راهنماییم کنید ، مرسی
نقل قول: بدست آوردن موقعیت نشانگر ماوس بر روی کامپوننت
تقریبا هیچ وقت متدهای داینامیک یا ویرچوال رو دوباره تعریف نکنید.
اروری هم که می ده مربوط به نبودن متد نیست، مربوط به اینه که چیزی که دارید تعریف می کنید با متد پایه ای که وجود داره فرق می کنه.
تعریفتون رو درست انجام بدید.