ورود

View Full Version : به کار بردن F ها به جای کلید ترکیبی.



Mask
چهارشنبه 15 مهر 1388, 22:54 عصر
با سلام به دوستان.
من چطوری باید مثلا کلید F5 رو اختصاص بدم به یک باتن. یعتی مثلا در برنامه ای کلید ثبت داریم حالا کجا باید چه دستوری بنویسم که هر کجای برنامه که بودم با زدن F5 بر روی دکمه ثبت کلید بشه.(کلید های F ،کد اسکی ندارند).
و در مورد بقیه کلید ها به صورت تکی یا به همرا دکمخ کنترل یا شیفت.
ممنون از همه.

Felony
پنج شنبه 16 مهر 1388, 06:21 صبح
آسونترین راه کار این هست که یک PopupMenu روی فرمتون بزارید و داخلش کلیدهای مورد نظرتون رو اضافه کنید مثلا کلیدی با نام Add اضافه میکنید و خاصیت Shortcut اون کلید رو تنطیم میکنید و PopUpMenu رو به فرمتون اختصاص میدید ، و برای اینکه PopupMenu هم دیده نشه خاصیت AutoPopup رو False کنید .
حالا هرجای فرم برنامتون باشید با زدن کلید Shorcut مورد نظر عملیات نوشته شده در اون کلید انجام میشه .

khoshblagh
پنج شنبه 16 مهر 1388, 07:47 صبح
آسونترین راه کار این هست که یک PopupMenu روی فرمتون بزارید و داخلش کلیدهای مورد نظرتون رو اضافه کنید مثلا کلیدی با نام Add اضافه میکنید و خاصیت Shortcut اون کلید رو تنطیم میکنید و PopUpMenu رو به فرمتون اختصاص میدید ، و برای اینکه PopupMenu هم دیده نشه خاصیت AutoPopup رو False کنید .
حالا هرجای فرم برنامتون باشید با زدن کلید Shorcut مورد نظر عملیات نوشته شده در اون کلید انجام میشه .
با سلام خدمت شما
معنی جمله PopUpMenu رو به فرمتون اختصاص میدید چیست؟ من فرمایشات شما را اجرا کردم ولی در موقع اجرای برنامه منو ظاهر نمیشه . البته من PopupMenu هم دیده نشه خاصیت AutoPopup رو False همان true قرار دادم ولی باز هم منو ظاهر نشد.

Felony
پنج شنبه 16 مهر 1388, 09:30 صبح
شما به PopupMenu تون آیتمی اضافه کردید ؟ کلا مگه روش استفاده از popupMenu رو نمیدونید ؟ کافیه برای هر کدوم از آیتم هاش یه Shortcut تعریف کنید .

نمونه ای که ضمیمه کردم رو ببینید .

AliReza Vafakhah
پنج شنبه 16 مهر 1388, 13:24 عصر
کدهای اسکی :
کد اسکی به ترتیب

F1 = 112
.
.
.
F12 = 123

هم از کد اسکی میشه استفاده کرد هم از ActionList

اگه بخواهید کلید هم به صورت Gloabal در ویندوز تعریف بشه از تابعAPI زیر استفاده کنید

RegisterHotKey(Handle:HWND,KeyID:integer,FsModifie rs:Cardinal,VK:Cardinal);

FsModifiers=MOD_CONTROL , MOD_ALT , MOD_SHIFT , MOD_WIN
VK=KeyCode , VK_Keys



خوبی استفاده از این تابع اینه که حتی اگر برنامه شما در Background باشه با فشردن کلید دسترسی مربوطه کد شما در برنامه اجرا میشه

این تابع هم باید به صورت یک پیغام در برنامه شما اضافه بشه

تعریف :
protected
Procedure WMHotkey( Var msg: TWMHotkey ) ;message WM_HOTKEY;

فراخوانی :

procedure TFrmMain.WMHotkey(var msg: TWMHotkey);
begin
//msg.HotKey = KeyID
if(msg.HotKey=1)then
begin

end;
end;

موفق باشید

Felony
پنج شنبه 16 مهر 1388, 13:56 عصر
اگه بخواهید کلید هم به صورت Gloabal در ویندوز تعریف بشه از تابعAPI زیر استفاده کنید
1.
RegisterHotKey(Handle:HWND,KeyID:integer,FsModifie rs:Cardinal,VK:Cardinal);
2.

3.
FsModifiers=MOD_CONTROL , MOD_ALT , MOD_SHIFT , MOD_WIN
4.
VK=KeyCode , VK_Keys


خوبی استفاده از این تابع اینه که حتی اگر برنامه شما در Background باشه با فشردن کلید دسترسی مربوطه کد شما در برنامه اجرا میشه

این تابع هم باید به صورت یک پیغام در برنامه شما اضافه بشه

تعریف :
1.
protected
2.
Procedure WMHotkey( Var msg: TWMHotkey ) ;message WM_HOTKEY;


فراخوانی :
1.
procedure TFrmMain.WMHotkey(var msg: TWMHotkey);
2.
begin
3.
//msg.HotKey = KeyID
4.
if(msg.HotKey=1)then
5.
begin
6.

7.
end;
8.
end;


موفق باشید

ایشون نخواستن کلیدهای کیبورد رو هوک کنن ...

Hamid.Kad
پنج شنبه 16 مهر 1388, 15:49 عصر
خاصیت KeyPreview فرم را True کنید. در رویداد Keydown فرم بنویسید:

if key = VK_F2 then
Button1Click(Self);

AliReza Vafakhah
پنج شنبه 16 مهر 1388, 16:49 عصر
ایشون نخواستن کلیدهای کیبورد رو هوک کنن ...


من چطوری باید مثلا کلید F5 رو اختصاص بدم به یک باتن. یعتی مثلا در برنامه ای کلید ثبت داریم حالا کجا باید چه دستوری بنویسم که هر کجای برنامه که بودم با زدن F5 بر روی دکمه ثبت کلید بشه.(کلید های F ،کد اسکی ندارند).

فکر کنم پست رو دقیق نخوندید ، سه روش رو ذکر کردم

vcldeveloper
جمعه 17 مهر 1388, 02:05 صبح
ایشون نخواستن کلیدهای کیبورد رو هوک کنن
ایجاد Shortcut با استفاده از RegisterHotKey ربطی به هوک کردن کلیدهای کیبورد نداره.

جواب سوال تاپیک در پست های 5 و 7 داده شد. البته سوال تکراری بود.

Felony
جمعه 17 مهر 1388, 07:36 صبح
جواب سوال تاپیک در پست های 5 و 7 داده شد. البته سوال تکراری بود.
روشی که من گفتم درست نیست ؟ البته من خودم از این روش استفاده نمیکنم و این اولین باری بود که به ذهنم رسید و تستش کردم و جواب داد .

Hamid.Kad
جمعه 17 مهر 1388, 09:22 صبح
روشی که شما مطرح کردید جواب میده، ولی راه حل منطقی نیست. مثل این میمونه که من بخوام جمع دو عدد a و b رو حساب کنم و از فرمول زیر استفاده کنم:

a+ab-ab+b
در صورتیکه با نوشتن a+b به همون نتیجه میشه رسید. منظورم اینه که یه کم کار رو سخت تر کردید و البته زمان بیشتر برای تنظیم کردن منو و ....

Felony
جمعه 17 مهر 1388, 14:46 عصر
:متعجب:تفسیر جالبی بود ، کجای این کار سخته ؟ برای کسی که میخواد ک دنویسی نکنه کار از این راحت تر پیدا میشه ؟

تنها مشکل این روش زمانی هست که طرف بخواد تو فرم برنامش PopupMenu بزاره و نمایشش بده .

merced
جمعه 17 مهر 1388, 15:13 عصر
:متعجب:تفسیر جالبی بود ، کجای این کار سخته ؟ برای کسی که میخواد ک دنویسی نکنه کار از این راحت تر پیدا میشه ؟

تنها مشکل این روش زمانی هست که طرف بخواد تو فرم برنامش PopupMenu بزاره و نمایشش بده .

اون وقت كافيه به جاي كل PopupMenu اون منوهايي رو كه نمي خواد نمايش نده :تشویق: روش عالي بود .

من از ActionList استفاده مي كنم