تبلیغات
برنامه نویسی و الکترونیک - مقاله : استفاده از HotKey ها
 
منوی اصلی


--------------------------

--------------------------

--------------------------

--------------------------


سفارش پروژه

E-Mail :
Mahmood_Mehri@Hotmail.com

سایت برنامه نویس :  Mahmood_M


موضوعات

دانلود نرم افزار
 
تخصصی برنامه نویسی
  تخصصی برق ( الکترونیک )
  کامپوننت ها و ابزارها
  نرم افزارهای متفرقه
برنامه نویسی
  مباحث عمومی
  آموزش Delphi

  آموزش زبان C++ / C
 
آموزش Matlab

  آموزش زبان Assembly
  آموزش DataBase

الکترونیک
  مباحث عمومی
  مباحث عمومی الکترونیک
  معرفی قطعات الکترونیکی
  کار با مولتی متر
  مدارات الکترونیک
  میکروکنترلر
  میکروکنترلرهای AVR
  پروژه ها
مباحث متفرقه
  آموزشهای متفرقه
  معرفی سایت
  معرفی کتاب
  پاسخ به سئوالات
  مطالب عمومی


لینك دوستان
:: جک :: اس ام اس :: عکس
:: الکترونیک 89 گیلان
:: سورسهای نرم افزاری
:: اینترنت بدون تحریم
:: علمی.کتاب.مجله.نرم افزار.مقاله
:: مبارزات آزاد
:: برنامه نویسی از اهل زمین
:: :: جزیره ی دانلود ::
:: :: کامپیوتر و IT ::
:: بزرگترین پایگاه مدل لباس اینترنتی
:: مرکز دانلود ایرانیان
:: پایگاه علمی مهندسی تراشه
:: تمامی راهکارهای کامپیوتری
:: برنامه نویسی و طراحی وب
:: خرید ساعت دیواری
:: :: فناوری روز ::
:: :: همه چیز واسه موبایل ::
:: آموزش تخصصی کامپیوتر
:: * پیاز داغ اینترنت ! *
:: جدیدترین موزیکها و نرم افزارها
:: دانلود سورس ویژوال بیسیک
:: امپراطور دانلود و آموزش
:: موبایل و کامپیوتر
:: جدیدترین آهنگهای هفته
:: درباره ی دلفی !
:: برنامه نویس
:: پروژه های رایگان و آموزش ++C
:: ابراهیم آنلاین

 : " مقاله : استفاده از HotKey ها " :
 
با سلام ...
در این پست در مورد نحوه ی ثبت و استفاده از HotKey ها بحث خواهیم کرد ...
HotKey ها کلیدهای میانبری هستند که در سطح ویندوز تعریف می شوند ، هر برنامه ای در محیط ویندوز می تواند یک یا چند HotKey تعریف کند ، زمانی که کلیدهای مربوط به HotKey های تعرفی شده توسط کاربر فشرده شوند ، ویندوز اطلاعات مربوط به HotKey فشرده شده را به برنامه ی ثبت کننده ی HotKey به عنوان یک Message ارسال میکند ...

برای استفاده از یک HotKey باید کلیدهای مورد نظر را به عنوان یک HotKey در ویندوز Register کنیم که این کار توسط تابع RegisterHotKey انجام می شود ...
وقتی یک HotKey تعریف می کنیم ، باید Handle برنامه ای که قصد داریم HotKey را دریافت کند را به همراه یک شماره به عنوان ID برای HotKey و همچنین کلیدهای مورد نظر را مشخص نماییم ..
HotKey ها چون در خود ویندوز ثبت می شوند در خارج از برنامه ما نیز کاربرد خواهند داشت ، به عنوان مثال اگر برنامه ی ما در حالت Minimize باشد و HotKey مورد نظر ما در محیط ویندوز فشرده شود ، باز هم HotKey به برنامه ی ما ارسال خواهد شد و می توانیم در واکنش به این HotKey به عنوان مثال برنامه را از حالت Minimize به حالت Maximize در بیاوریم ...
وقتی کلید ( یا کلیدهای ترکیبی ) در ویندوز فشرده می شود ، در صورتی که کلید ( کلیدهای ) فشرده شده در لیست HotKey های Register شده وجود داشته باشد ، ویندوز HotKey فشرده شده را به هندل ثبت شده برای HotKey به عنوان یک پیغام WM_HOTKEY ارسال می کند ، پیغام ارسالی حاوی یک رکورد از نوع TWMHotKey است ، این رکورد یک مقدار به نام HotKey دارد که حاوی مقدار ID مربوط به HotKey است ، با بررسی این مقدار می توانیم تشخیص دهیم که آیا HotKey فشرده شده همان HotKey مورد نظر ما است یا خیر ...

خوب ، بهتر است یک مثال را بررسی نماییم :
می خواهیم یک HotKey تعریف کنیم که با فشرده شدن آن برنامه ی ما یک پیغام را به کاربر نمایش دهد ، ابتدا به صورت زیر در رویداد OnCreate فرم یک HotKey با مقدار کلیدهای " Ctrl+Alt+M " ثبت می کنیم :

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 10, MOD_CONTROL + MOD_ALT, 77);
end;

مقدار برگشتی تابع RegisterHotKey یک مقدار Boolean است ، اگر اجرای تابع موفقیت آمیز باشد ، مقدار True و در غیر اینصورت مقدار False را برمیگرداند .
به پارامترهای RegisterHotKey دقت کنید ، در اولین پارامتر ما Handle پنجره ی برنامه ی خودمان را وارد کردیم، اگر به این پارامتر مقدار Nil بدهید ، ویندوز پیغام HotKey را به Thread ای که پنجره ی ما توسط آن ساخته شده ارسال خواهد کرد ، دومین پارامتر مربوط به ID ای است که برای HotKey در نظر می گیریم که در اینجا عدد 10 انتخاب شده ، در پارامتر سوم باید کلیدهایی را مشخص کنید که می خواهید حالت فشرده داشته باشند ! ، به عنوان مثال وقتی می خواهیم کلیدهای Ctrl + Alt + M را فشار دهیم باید ابتدا Ctrl و Alt را در حالت فشرده نگه داریم و سپس M را فشار دهیم !! ، پس در پارامتر سوم تابع باید Ctrl و Alt را به عنوان کلیدهایی که باید در حالت فشرده باشند مشخص کنیم ، مقادیر این پارامتر ، مقادیر زیر یا ترکیبی از آنها می تواند باشد :
  • MOD_ALT : برای مشخص کردن حالت فشرده برای کلید ALT
  • MOD_SHIFT : برای مشخص کردن حالت فشرده برای کلید Shift
  • MOD_Control : برای مشخص کردن حالت فشرده برای کلید Control
  • MOD_WIN : برای مشخص کردن حالت فشرده برای کلید Win
پارامتر آخر هم مربوط به مقدار عددی کلید M است ، در این پارامتر می توانید مقدار یکی از کلیدهای حروف یا عدد یا ... صفحه کلید را وارد نمایید .

خوب ، تا اینجا یک HotKey تعریف کردیم ، در پایان کار برنامه باید Hotkey تعریف شده را UnRegister کنیم !
یک سئوال : چرا HotKey ی Register شده را UnRegister می کنیم ، نمی توانیم در اجراهای بعدی برنامه ، دوباره از آن استفاده نماییم ؟
جواب : به عهده ی خواننده !

برای حذف HotKey تعریف شده می توانیم در رویداد OnClose فرم اصلی از تابع UnRegisterHotKey استفاده نماییم :

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnregisterHotKey(Handle, 10);
end;

این تابع مقادیر Handle و ID مربوط به HotKey مورد نظر را می گیرد و آن را حذف میکند ...
اما قسمت مهم کار ایجاد یک Message Handler است که توسط آن بتوانیم به HotKey ارسال شده به برنامه جواب دهیم !
Message Handler درواقع یک Procedure است که در زمان دریافت پیغام خاصی اجرا خواهد شد ، برای ساخت همچین Procedure ای از عبارت message در انتهای تعریف Procedure استفاده میکنیم ، بعد از عبارت Message هم باید نوع پیغام را مشخص نماییم :

procedure MSG_Hotkey(var msg: TWMHotkey ); message WM_HOTKEY;

می توانید این Procedure را در قسمت Private فرم اصلی تعریف نمایید ...
بعد از تعریف این Procedure در بدنه ی کلاس مربوط به فرم باید اعلان خارجی ( External Declaration ) آن را هم بنویسیم :

procedure TForm1.MSG_Hotkey(var msg: TWMHotKey);
begin
if msg.HotKey = 10 then
begin
ShowMessage('HotKey Pressed !');
end;
end;

همانطور که در بالا هم اشاره شد پیغامی که به برنامه ارسال میشود از نوع WM_HOTKEY بوده و شامل یک رکورد از نوع TWMHotKey است ، این رکورد عضوی به نام HotKey دارد که مقدار ID مربوط به HotKey را حمل میکند ! ، در دستور بالا ابتدا مقدار آن را بررسی می کنیم ، اگر HotKey مورد نظر ما ( با مقدار 10 ) بود ، یک پیغام را به کاربر نمایش خواهیم داد ...

خوب ، تا اینجا با نحوه ی ایجاد و حذف یک HotKey آشنا شدیم ، اما در آخر بهتر است چند نکته ی دیگر را هم مرور کنیم :
  1. در هنگام ثبت HotKey ، اگر یک HotKey با همان ID موجود باشد ، HotKey ما ثبت نخواهد شد و تابع RegisterHotKey مقدار False را برگشت خواهد داد ، برای حل این مشکل ، به یک ID یکتا نیاز داریم ، در ویندوز جدولی سیستمی به عنوان Atom - Table وجود دارد که می توانیم یک رشته را در آن ثبت کرده و یک مقدار عددی یکتا تحویل بگیریم ! ، چندی پیش ! در این پست در مورد Atom - Table و نحوه ی استفاده از آن توضیحات بیشتری داده شده
  2. در هنگام ثبت HotKey اگر ID و Handle وارد شده تکراری باشند ، HotKey جدید با HotKey موجود تعویض خواهد شد و کلیدهای جدید وارد شده به عنوان HotKey ثبت می شوند
  3. یک برنامه در محیط ویندوز نمی تواند برای سایر برنامه ها HotKey تعریف کند ، درواقع هر Thread می تواند تنها برای Handle هایی که خودش Create کرده HotKey ثبت کند
  4. اگر در هنگام ثبت HotKey مقدار Handle مورد نظر را وارد نکنیم ، ویندوز پیغام مربوط به HotKey را به صف پیغامهای مربوط به Thread ای که HotKey را ثبت کرده می فرستد
خوب ، برای درک بهتر ، یک مثال را با هم مرور می کنیم ...
در این مثال می خواهیم سه HotKey ثبت کنیم ، برای هر کدام می توانیم از Atom - Table یک مقدار عددی به عنوان ID دریافت نماییم ، در رویداد OnCreate فرم اصلی به صورت زیر HotKey ها را ثبت میکنیم :

procedure TForm1.FormCreate(Sender: TObject);
begin
// Get an Integer Value as ID
ID1 := GlobalAddAtom('HOTKEY_1');
ID2 := GlobalAddAtom('HOTKEY_2');
ID3 := GlobalAddAtom('HOTKEY_3');

// Register HotKeys
RegisterHotKey(Handle, ID1, MOD_CONTROL, 77); // Ctrl + M
RegisterHotKey(Handle, ID2, MOD_ALT, 78); // Alt + N
RegisterHotKey(Handle, ID3, MOD_CONTROL+MOD_ALT, 65) // Ctrl + Alt + A
end;

توجه کنید که متغیرهای ID1 ، ID2 ، ID3 باید به صورت Global ( عمومی ) تعریف شوند تا در رویداد OnClose ( یا OnDestroy ) فرم برای حذف HotKey ها هم بتوانیم از آنها استفاده نماییم :

var
Form1: TForm1;
ID1, ID2, ID3 : Integer;

implementation

برای دریافت پیغام HotKey همانطور که در بالا توضیح داده شد باید یک Message Handler بسازیم :

  private
Procedure MSG_Hotkey(var msg: TWMHotkey ); message WM_HOTKEY;
{ Private declarations }

در بدنه ی Message Handler متناسب با هر HotKey یک پیغام را نمایش خواهیم داد :

procedure TForm1.MSG_Hotkey(var msg: TWMHotKey);
begin
if msg.HotKey = ID1 then
ShowMessage('First HotKey Pressed ( Ctrl + M)');
if msg.HotKey = ID2 then
ShowMessage('First HotKey Pressed ( Alt + N)');
if msg.HotKey = ID3 then
ShowMessage('First HotKey Pressed ( Ctrl + Alt + A)');
end;

و در پایان هم برای حذف HotKey ها در رویداد OnClose ( یا OnDestroy ) فرم اصلی از تابع UnRegisterHotKey استفاده می نماییم ، توجه کنید که دیگر نیازی به رشته های ثبت شده در Atom - Table و مقدار های عددی آنها نداریم و بهتر است آنها را نیز حذف نماییم :

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnregisterHotKey(Handle, ID1); // Unregister First HotKey
GlobalDeleteAtom(ID1); // Delete String "HORKEY_1" from Atom - Table

UnregisterHotKey(Handle, ID2); // Unregister Second HotKey
GlobalDeleteAtom(ID2); // Delete String "HORKEY_2" from Atom - Table

UnregisterHotKey(Handle, ID3); // Unregister Third HotKey
GlobalDeleteAtom(ID3); // Delete String "HORKEY_3" from Atom - Table
end;

مثالی که در بالا توضیح داده شد رو هم می تونید از لینک زیر دریافت کنید :

امیدوارم مفید بوده باشه ، موفق باشید ...

 

 :: لینك ثابت نویسنده : محمود مهری نظرات Comment

مطالب اخیر

معرفی کانال و گروه های تلگرام
استفاده از Component Template ها در دلفی
مقاله : نحوه ی استفاده از پنل پیامک در نرم افزار
E-Book :: راه اندازی موتورهای DC و پله ای با استفاده از میکرو کنترلر AVR
آشنایی با عملگرهای بیتی ( Bitwise Operators )
تست دیود و ترانزیستور با مولتی متر
دلفی :: ارسال آرایه به حافظه ی Clipboard
یک سایت فوق العاده برای علاقه مندان به علم فیزیک
مداری برای نمایش عبور جریان برق از بدن !!
سال نو مبارک ...
آدرس وبلاگ !
ساخت یک LED فلاشر با میکروکنترلر AVR ATMega16A
آشنایی با کاربرد " رله " ( Relay ) در مدار
کار با ماتریسها در Matlab
SQL :: آشنایی با دستور شرطی WHERE


صفحات وبلاگ :