PDA

View Full Version : چگونگی تشخیص پایین بودن چپ کلیک موس



SYNDROME
پنج شنبه 10 مرداد 1387, 09:36 صبح
با سلام
چطور می توانم تشخیص دهم که چپ کلیک موس الان فشرده شده است یا نه.
با تشکر از همه

dkhatibi
پنج شنبه 10 مرداد 1387, 10:47 صبح
http://delphi.newswhat.com/geoxml/forumhistorythread?groupname=borland.public.delphi .vcl.components.writing.win32&messageid=43f6a110@newsgroups.borland.com

Mahmood_M
پنج شنبه 10 مرداد 1387, 15:27 عصر
چطور می توانم تشخیص دهم که چپ کلیک موس الان فشرده شده است یا نه.
چه موقعی میخواید تشخیص بدید ؟ چه کامپوننتی باید این موضوع رو تشخیص بده ؟

لطفا بیشتر توضیح بدید ...

...

Hsimple11
پنج شنبه 10 مرداد 1387, 17:55 عصر
بستگی به محل شما دارد مثلا میتوانید در رویداد MouseDown مربوط به فرم خود بنویسید :


case Button of
mbLeft : .
.
.


این لینک (http://delphi.about.com/od/vclusing/a/mouseevents.htm) را ببینید اگر جایی نیاز به ترجمه بود بفرمایید.

SYNDROME
پنج شنبه 10 مرداد 1387, 18:21 عصر
با تشکر از همه دوستان
من یک فرم دارم و ممکن است این موس بر روی هر کامپونت و هرجایی از صفحه قرار داشته باشید و یا حتی بعضی وقتها از فرم خارج و دوباره به فرم برگردد.
حالا می خواهم بدانم آیا چپ کلیک موس که چند لحظه قبل گرفته شده است هنوز پایین است یا کاربر چپ کلیک را رها کرده است.
منتظر راهنمایی دوستان هستم

Mahmood_M
پنج شنبه 10 مرداد 1387, 21:44 عصر
حالا می خواهم بدانم آیا چپ کلیک موس که چند لحظه قبل گرفته شده است هنوز پایین است یا کاربر چپ کلیک را رها کرده است.
منتظر راهنمایی دوستان هستم
برای این کار می تونید مثلا یک متغیر Boolean تعریف کنید و در رویداد OnMouseDown اون رو True کنید و در OnMouseUp اون رو Flase کنید ، در این صورت اگه متغیر True باشه ، یعنی موس فشرده شده هست و اگه False باشه موس فشرده شده نیست ...
مثال :

...
private
{ Private declarations }
public
isDown : Boolean
{ Public declarations }
end;
...

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
isDown := True;
end;

...

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
isDown := False;
end;

موفق باشید ...

SYNDROME
پنج شنبه 10 مرداد 1387, 21:49 عصر
با تشکر از آقا محمود
من خودم این کار را کردم ولی نمی خواهم با این روش این کار را انجام دهم.
به دنبال دستوری هستم که با فراخوانی آن مشخص شود کلیک موس پایین است یا نه.
منتظر راهنمایی شما هستم
موفق باشید

vcldeveloper
جمعه 11 مرداد 1387, 01:12 صبح
باید یک Global Mouse Hook تعریف کنید:
http://delphi.about.com/od/windowsshellapi/a/mousehook.htm

Hamid_PaK
جمعه 11 مرداد 1387, 06:07 صبح
ولی حاج علی فکر نکنم که بشه فهمید آیا کلیک شده یا نه !

یا حق ...

vcldeveloper
جمعه 11 مرداد 1387, 06:18 صبح
فکر نکنم که بشه فهمید آیا کلیک شده یا نه !
تمام پیام های تولید شده توسط موس را برمیگردونه، پس پیام هایی مثل WM_LBUTTONDOWN یا WM_LBUTTONDBLCLK را هم شامل میشه.

SYNDROME
جمعه 11 مرداد 1387, 08:16 صبح
تمام پیام های تولید شده توسط موس را برمیگردونه، پس پیام هایی مثل WM_LBUTTONDOWN یا WM_LBUTTONDBLCLK را هم شامل میشه.
با تشکر ازشما
بنده برنامه فوق را گرفتم.
برنامه فوق موس را از لحاظ حرکتی کنترل می کند و اگر به انتهای سمت چپ صفحه برسد به سمت راست منتقل می کند.
ولی نمی دانم چطور باید WM_LBUTTONDOWN را در برنامه چک کنم.(تا حالا موس را hook نکرده ام)
ممنون می شوم من را راهنمایی کنید.
با تشکر از شما

vcldeveloper
جمعه 11 مرداد 1387, 16:00 عصر
ولی نمی دانم چطور باید WM_LBUTTONDOWN را در برنامه چک کنم.
یکی از پارامترهایی که به تابع Hook شما ارسال میشه، اسم پیام (مثلا WM_LBUTTONDOWN) هست. آن را بررسی کنید، هر وقت پیام مورد نظر شما بود، کد مورد نظر خود را اجرا کنید.