المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: كيف و كيف؟؟ ( بالـVC++)
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
DR-A
السلام عليكم و رحمة الله و بركاته
انا ابي اعرف
كيف اسوي برنامج لما المستخدم يظغط فيه على الزر A يسوي اوامر معينه.. مثلا يطلعله رساله..
السؤال الثاني
أبي اسوي Disable للـCtrl+Alt+Del
ولكم مني أجمل تحية
regular_smile.gif
عبدالرحمن
أولا تعرف وظيفة لل Message المسماة WMKEYDOWN وذلك من خلال ال Class Wizard ومن ثم تضغط زر Edit Code وتكتب التالي تحت تعليق TODO:-

; char a
;( a = char(nChar
;(' if(a =='X
; (" MessageBox("X Key is Down
}

أولا عرفنا متغير من فئة char وهذا المتغير هو المفتاح المضغوط
وفي السطر الثاني حولناالزر المضغوط الى حرف ابجدي .
وفي السطر الثالث جملة شرطية :_ اذا كان الحرف المضغوط هو الحرف x
اذن اعرض رسالة ماسيج .

اسال لله التوفيق للجميع
DR-A
حطيت هذا
كود
void CTestDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

{



 char a;

 a = char(nChar);

 if(a == 'X')

 {

  MessageBox("X Key is Down");

 }

    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);



}

ولا صلحت sad.gif
عبدالرحمن
البرنامج صحيح 100%
جرب اكتب الكود مرة ثانية
واذا في خطا ياليت تكتب الخطا هنا .
LizardKing
السلام عليكم ورحمة الله وبركاته،

بالنسبة للسؤال الأول، فما كتبه الأخ عبدالرحمن يقوم بالعمل المطلوب، لكن إذا كان مفتاح CAPS Lock مفتوحاً فقط! إذا أردت أن يعمل في جميع الحالات فاكتبه كما يلي:

كود
void CTestDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

{

 char a;

 a = char(nChar);

 if(a == 'X' || a == 'x')

 {

  MessageBox("X Key is Down");

 }



    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);

}



بالنسبة للطلب الثاني، فتستطيع عمل ذلك باستخدامة دالة الأبي آي: SystemParametersInfo، وذلك لخداع وندوز وجعله يعتقد بأن حافظ الشاشة يعمل، ولذا فإنه يمنع استخدام CTRL+ALT+DEL وكذلك استخدام ALT+TAB. ولكي تمنع هذا أثناء عمل برنامجك، هو أن تضع استدعاء هذه الدالة في الدالة OnInitDialog لتفعل المنع، واستدعاء آخر في الدالة OnDestroy لإلغاء المنع. تستطيع وضع الدالتين السابقتين باستخدام الـ Wizard وذلك بالنقر بالزر الأيمن على الكلاس CTestDlg في الـ ClassView، واختيار الأمر Add Windows Message Handler، بعد ذلك اختر الرسالة WM_INITDIALOG ثم اضغط Add والرسالة WM_DESTROY ثم اضغط Add. بعد ذلك ضع استدعاءات الدالة فيهما كما يلي:

كود
BOOL CTestDlg::OnInitDialog(){

//.....Default code

//.....



//Put the following line

//Second Parameter:

// = 1 if you want to set it on

// = 0 if you want to set it off

SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, 1, NULL, 0);



return TRUE;

}





//.........

//.........



void CTestDlg::OnDestroy(){

SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, 0, NULL, 0);

  CDialog::OnDestroy();

}


ملاحظة أخيرة: هذه الدالة مخصصة للإستخدام الداخلي لوندوز، ولا تنصح مايكروسوفت باستخدامها للتطبيقات، كما أنها لا تعمل على وندوز NT أو وندوز 2000.

تمنياتي لك بالتوفيق،
تحياتي للجميع.
هاني الأتاسي
أشكركم على هذه الاجابات ولكن عندي تعليق بالنسبة ل OnKeyDown ..

إن البارامتر الأول يأتي فيع رمز Virtal Key اي ليس محرف لذا يجب المقارنة مع ال VK_X ... أي يصبح الكود كالتالي:

[code2]
if(mChar == VK_X)
{
MessageBox("X Key is Down");
}

CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
[/code2]

أما VK_X إذا ماكانت معرفة عندك في القيجوال سي++ فقيمتها هي 0x58 أو الحرف الكبير أي 'X' ... وبالتالي يكفي المقارنة مع الحرف الكبير فقط ... فيفضل أن تكتب في رأس الملف :

[code2]
#define VK_X 0x58
// OR
#define VK_X 'X'
[/code2]

أما إذا كان في صندوق الحوار الذي لديك توجد أدوات حتى ولو كانت Static أو صورة فيفضل وضع الكود السابق داخل التابع PreTranslateMessage مع بعض التعديل طيعا .. وذلك لأن النافذة أو الكونترول التي ليس عليها التركيز أو ال Focuse لا تستقبل رسائل OnKeyDown أو OnChar ...

أي تقوم من الClass Wizard باضافة التابع PreTranslateMessage وتكتب التالي :

[code2]
#define VK_X 0x58

BOOL CTest2Dlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN &&
pMsg->wParam == VK_X)
{
MessageBox("X is pressed");
return TRUE; // Don't process the message any more..
}

return CDialog::PreTranslateMessage(pMsg);
}
[/code2]

عند استخدام هذا الكود فإن الزر X على الكيبورد سوف ينفذ ولن ترسل الرسالة إلى بقية الأدوات التي على الفورم .. يعني أولوية التنفيذ هنا صارت للحرف X ...
DR-A
LizardKing :
===========
أشششششكرك جدا على محاولتك في المسج لما المستخدم يظغط زر... لكن انا كنت حاط صور (سوري نسيت اقولك)

هاني الأتاسي :
============
أهلييييين باللي حطني بلوك بالماسنجر sad.gif معليش يحق لك
أشكرك جدا على ساعدتك و صلحت (اخيرااااااا)
هاني الأتاسي
ياأخي DR-A أنا آسف إن ضايقتك ، ولكن أنا ما أحب أتناقش كثير على الماسنجر حتى تنحط الأسئلة في المنتدى وتعم الفائدة ...
LizardKing
السلام عليكم ورحمة الله وبركاته،

الأخ هاني لو سمحت، كيف أستطيع أن أضع الكود في مربع أسود مثلك ؟ حيث أن الكود الذي أضعه باستخدام الأمر (code) و (/code) (ملاحظة أستخدمت الأقواس العادية بدال المربعة حتى لا يعتقد البرنامج بأني أكتب كوداً) يأتي بمحاذاة إلى اليمين، مما يشوه البرنامج. لا تقل لي أنك فعلت ذلك باستخدام HTML، لأنه إذا كان كذلك فإننا معشر الزوار لن نستطيع إضافتها لأنها معطله ! regular_smile.gif .. تحياتي لك وللجميع.
fsl
أخ LizardKing بدلا من code اكتب code2
و نريدك أن تستمر في مشاركاتك وتفيدنا ان شاء الله
LizardKing
جزاك الله خيراً أخي العزيز وإن شاء الله سنستفيد من بعض.
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.