المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: أول مشاركة
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
عنق الزجاجة
السلام عليكم ورحمة الله وبركاته

حياكم الله أخواني ، وهذه أول مشاركة لي معكم ، فبالصدفة وصلت إليكم عن طريق موقع الردادي ، وقد شدني حسن تنظيم المنتدى واشتماله ، ودي أشارككم بس أعتقد مشاركاتي كلها أسئلة sad.gif ، أرجو منكم ومن الأخ مشرف القسم تحملني ، والله يكتب أجركم .

ودي من الأخ المشرف وكل من لديه المعرفة شرح بسيط جداً جداً - يتخلله الكود البسيط - لكود إظهار نافذة تحت نظام ويندوز طبعاً باستخدام MFC ، ودي أعرف التالي .

أنا مبرمج في فيجوال بيسك ، ودي أقول اللي أريده بالفيجوال بيسك وانتم الله يعينكم تفهمون علي sad.gif .

في الفيجوال بيسك لو أردت إظهار كلمة بسيطة فما علي ، هو إدراج أداة عنوان ثم كتابة بعض النصوص فيها .

ما أريده هو عمل هذه النافذة بالفيجوال سي ، بعد الأخذ في الاعتبار أن المعالج AppWizard قد انتهى والمحرر جاهز ، طبعاً الفورم هو نوع من الكلاس يتكون من عدد من الأحداث والخصائص ، ودي إن هذه المعلومات المشتته في رأسي ، يقوم الإخوة مع الشكر الجزيل بتنظيمها والإضافة عليها

وتقبلوا خالص تحياتي
Smart Star
الصراحه يا أخي لم أفهم القصد الذي تريده .
ياليت تضع لنك للكود المصدري لما ترديه بالغة الفيجوال بسيك
لعلني أستطيع مساعدتك .
عنق الزجاجة
شكراً يا أخي لردك .

ما أردته هو نافذة تحتوي على أداة عنوان تحتوي على أي نص ، في الفيجوال بيسك نكتب :
[code2]
Label1.Caption="VC++"
[/code2]
آمل المساعدة regular_smile.gif ، والشكر للجميع
عنق الزجاجة
يالربع ما يصير sad.gif ، عطونا وجه ولو شوي sad.gif
Smart Star
هنا أكثر من طريقه منها ما يلي :-

1- إذا كان المتغير المرتبط بعنصر التحكم هو CString فيكون الكود التالي :-

[code2]
Lable1 = _T("VC++");
UpdateData(FALSE);
[/code2]

2- أو يكون المتغير من نوع control أي CStatic فيمكن أن تكتب

[code2]
Lable1.SetWindowText(_T("VC++"));
[/code2]


ملاحظه :- أنا أفترض أنك تستخدم مكتبات MFC و يمكن تحديد نوع المتغير من ClassWizard
عنق الزجاجة
مشكور يا أخي ، بس ودي أعرف وش وظيفة UpdateData مع الشكر regular_smile.gif

أخوكم .
Adel Khayata
السلام عليكم.
الأخ "عنق الزجاجة" : إن وظيفة التابع UpdateData() هي إجراء عملية Syncronization بين الأداة Control و بين المتحول المربوط مع هذه الأداة و هو يحتاج بارامتر واحد فقط من نوع Boolean أي قيمته إما TRUE أو FALSE فعندما نريد تحديث الأداة بالقيمة الموجودة في المتحول المربوط معها نستدعي التابع UpdateData() و ببارامتر مساوي إلى FALSE و عندما نريد العكس ( أي تحديث المتحول المربوط مع الأداة بالقيمة الموجودة حاليا في الأداة ) فإننا نستدعي التابع UpdateData() و ببارامتر مساوي إلى TRUE أو يكفي استدعاء التابع بدون بارامتر لأن هذا التابع له قيمة افتراضية للبارامتر مساوية إلى TRUE فإذا لم تمرر أي بارامتر فإنه سيعتبر البارامتر مساويا إلى TRUE و في المثال الذي كتبه الأخ Smart Star فإن العبارة:
[code2]
Lable1 = _T("VC++");
[/code2]
استخدمت لتحميل قيمة معينة في المتحول المربوط مع الأداة , ولنقل هذه القيمة إلى الأداة استخدمنا التعليمة:
[code2]
UpdateData(FALSE);
[/code2]
وبالتالي أصبحت القيمة الموجودة في الأداة مطابقة للقيمة الموجودة في المتحول المربوط معها.
مع التحيات.
عنق الزجاجة
شكراً لكم جميعاً .regular_smile.gifregular_smile.gifregular_smile.gif

لو أردت إظهار الوقت والتاريخ على نفس الأداة ، ما هو الكود اللازم مع الشكر ؟
Adel Khayata
السلام عليكم.
لاظهار الوقت و التاريخ استخدم الشيفرة التالية :
[code2]
CTime time= CTime::GetCurrentTime();
label = time.Format("%A %d %B %Y %H:%M:%S");
UpdateData(FALSE);
[/code2]
و كما ترى فقد تم استخدام CTime وهو Class خاص من أجل التعامل مع الوقت و التاريخ في MFC و صرحت عن متحول time من نوع CTime و حصلت على الوقت و التاريخ الحاليين باستخدام التابع GetCurrentTime() و من ثم قمت بعملية تحويل المعلومات الموجودة ضمن time إلى نص عن طريق التابع Format حيث:
%A تدل على اسم اليوم من الاسبوع.
%d تدل على اليوم من الشهر.
%B تدل على اسم الشهر.
%Y تدل على السنة.
%H تدل على الساعة.
%M تدل على الدقائق.
%S تدل على الثواني.
طبعاً يجب أن تنتبه إلى حالة الأحرف ( صغيرة أو كبيرة) regular_smile.gifregular_smile.gif
مع التحيات.
عنق الزجاجة
أشكرك أخوي عادل خياطة على هذه الإرشادات الجميلة واللي ما رايح أنساها لك طول عمري regular_smile.gif .

بس عندي أسئلة sad.gif :

1- ما هي كلاسات MFC ، وكيف أحصل على مرجع بسيط وسهل لاستخدامها .
2- ألا يمكن أن نستغني عن FORMAT في هذا الكود .
3- ألا يمكن استخدام CTime مباشرة من دون تعيين متغير له ، وإذا كان لا يمكن ما هو السبب ؟ .

وأشكرك مرة أخرى وأخرى regular_smile.gif .

تحياتي
Adel Khayata
السلام عليكم.
أخي " عنق الزجاجة" إن MFC Classes هي عبارة عن مكتبة ضخمة من ال Classes التي تقوم بوظائف عديدة و هي تسهل عملية البرمجة فهي في كثير من الأحيان تكون كافية لكتابة البرامج بدون الحاجة إلى استخدام توابع API و أفضل مرجع هو MSDN و هي موجودة في موقع Microsoft أو يمكنك الحصول عليها على 3CD .
يمكن الاستغناء عن التابع Format في حالتنا و لكن للحصول على القيم المطلوبة ( مثلا اليوم والسنة و الشهر ... الخ ) وذلك عن طريق توابع Get مثل:
GetYear() من أجل الحصول على السنة.
GetMonth() من أجل الحصول على الشهر .... الخ.
و طبعا لا يمكن استخدام CTime مباشرة و السبب بديهي وهو : أين سأخزن القيمة التي يرجعها التابع GetCurrentTime()؟؟
أتمنى أن أكون قد وضحت الأمور.
مع التحيات.
عنق الزجاجة
السلام عليكم regular_smile.gif .

أخي عادل وكل الإخوة ، اشكرك من عميق وأرجو من الله أن يجعل ذلك في ميزان حسناتك آمين .

قدرت طال عمرك أظهر التاريخ في TEXTBOX ، بس بصراحة ما قدرت أطلعه في أداة عنوان sad.gif ، وحاولت في إظهاره برسالة MessageBox ، ومشي الحال تمام ، إلا في أداة العنوان ، ما أدري ليش ؟ ، شوف الصورة يمكن تقرب الفكرة .


فيه نقطة ثانية ، من ناحية الفيجوال سي لا تحتوي على أداة تايمر مثل الفيجوال بيسك ، ولحل المشكلة - على ما أعتقد - نحتاج الى عمل حلقة بحيث تقوم بحساب الوقت ، مع السماح لكافة الرسائل بالعمل ، أرجو إلقاء الضوء على هذه النقطة بالتفصيل .

وفيه نقطة أخرى ، ألا يمكن استخدام دوال ++C القياسية ضمن MFC ، وإذا كان يمكن ، كيف مع الشكر regular_smile.gifregular_smile.gifregular_smile.gif .

تحياتي ، وأشكرك على تطويلة بالك معانا ، ولو سمحت أريد عنوان البريد الإليكتروني يا أخ عادل regular_smile.gif .
هاني الأتاسي
الواضح أنك تستخدم ويندوز XP ... regular_smile.gif

بالنسبة إلى أداة ال Static أو ماتسميها على الاغلب ب أداة العنوان .. فيجب أن تنتبه إلى أن تعطيها ID مختلف عن IDC_STATIC .. مثلا IDC_STATIC_TIME وهذا يتم طبعا من ال Resource Editor .

طبعا بما أنك استطعت اظهار الوقت في Edit Box فهي نفس الطريقة من أجل الStatic Control .. ولكن أعتقد مشكلتك كما ذكرت في المقطع السابق ..

سوف اشرح وسوف أركز على الصور من أجل سرعة الشرح وأيضا مع كود بسيط في النهاية من أجل أن ترى البرنامج والتعديلات ..

أولا طبعا قم باضافة أداء static عادية وأعطها ID معين كما هو في الصور التالية :


الآن قم باسناد متحول إلى هذه الأداة عن طريق الكلاس ويزارد كما في الصورة التالية :


من شاشة ال MFC Class Wizard ومن الصفحة Member Variables يمكنك اسناد الناحولات إلى العتاصر على ال Dialog .. وطبعا يمكنك اسناد متحول من النوع CStatic وذلك في حالة احببت تغيير خواص الأداة أو تغيير الخط أو تحريكها أو كل ماله علاقة بالأداة حتى أنه يمكن تغيير نصها بتعليمة واحدة كما ذكر الأخ سمارت في اجابته عليك في SetWindowText ..
هنا سوف أسند متحول من نوع CString طبعا يمكن اسناد متحول رقمي وما إلى ذلك ..


الآن من أجل المؤقت .. طبعا لا يوجد أداه مثل الفيجوال بيسك وهذا بسبب أنه إذا لاحظت أن جميع الأدوات في الفيجوال سي هي أدوات قياسية لويندوز أي عبارة عن Common Controls .. أما التايمر في الفيجوال بيسك فهي عبارة عن أداة اضافية وليست قياسية في الويندوز ..

يمكنك الرجوع إلى الفائدة السابعة للأه عبد الرحمن يعطيع العافية في الصفحة :
http://arabteam.nicmatic.com/vb/showthread...3?threadid=2627

عندما تستدعي التابع SetTimer برقم المؤقت في البارامتر الأول وزمن التوقيت في المتحول الثاني بالمللي ثانية و NULL في المتحول الثالث .. فإن ويندوز يرسل رسالة من نوع WM_TIMER إلى نافذتك التي استدعيت لها ال SetTimer هذه الرسالة تأتي بشك دوري بحيث الزمن بين كل رسالتين هو الزمن الذي حددته تقريبا .

أكيد يجب أن تضع تابع لمعالجة الرسائل WM_TIMER وهذا عن طريق ال Class Wizard كما في الصورة التالية :


بعد أن تضع روتين تنفيذ الرسالة ممكن تضع فيه الكود التي تريد تنفيذه كل ثانية مثلا .. في حالتك كود احضار الوقت واسناده إلى المتحول الذي صنعته ومن ثم استدعاء UpdateData بمتحول FALSE .

وطبعا لا تنسى انهاء المؤقت قبل اغلاق البرنامج عن طريق استدعاء KillTimer ..

الكود بشكل كامل موجود في الوصلة :
http://arabteam.nicmatic.com/atassi/glass_time.zip

regular_smile.gif
Adel Khayata
السلام عليكم.
شكرا لك أخي هاني regular_smile.gifregular_smile.gif كفيت ووفيت regular_smile.gifregular_smile.gif
مع التحيات.
Adel Khayata
اه نسيت.
هناك نقطة نسيها الأخ هاني الا و هي النقطة الاخيرة حول مكتبات C++ و الجواب هو طبعا فيكفي وضع #include لاسم ملف ال Header في بداية الملف حتى تستطيع استخدام هذه المكتبات.
و بالنسبة لايميلي فهو:
adel_khayata@hotmail.com
بس لا تبعتلي ايميلات كتييييييييييير regular_smile.gifregular_smile.gif
عمبمزحregular_smile.gifregular_smile.gifregular_smile.gif
خود راحتك أخي "عنق الزجاجةregular_smile.gifregular_smile.gifregular_smile.gif
مع التحيات.
عنق الزجاجة
ألف شكرررررررررررر يا أخ هاني ، وموصول الشكر للأخوة عادل وSmart Star والأخ عبد الرحمن .

بصراحة الواحد ما يدري وش يقول عند هولاء الكرام ، ولكن ما عند الله هو خير لكم .regular_smile.gifregular_smile.gifregular_smile.gif .

ممكن تأذنوا لي - مشكورين بسؤال - sad.gif .

السؤال قمت بالتغيير في خصائص الصندوق ( الفورم ) ووضعت الخاصية Right to Left ، الحاصل ، رفض هذا التغيير ، وقام بإعطائي رسالة الخطأ التالية :
[code2]
undefined keyword or key name: WS_EX_LAYOUT_RTL
[/code2]

ولما رحت للتعليمات في MSDN ، قام بإعطائي الحل التالي
[code2]
open MCLMFCIncludeAfxRes.h and add the following include directive:

#include
[/code2]

سويت كل هذا الشفلات ، وما زال الخطأ موجوداً omg_smile.gif ؟ ، ما ذا أعمل .

ودي أسأل عن سبب تغيير ID لأداة العنوان ، ولماذا لم يقبل بالإسم الافتراضي ؟ .

ولماذا كل هذه الإقتراحات لـ ID لأي أداة ، علماً أنها تبدأ ببادئات معينة ، فهل من توضيح حول هذه النقطة مع الشكر الجزيل للجميع regular_smile.gifregular_smile.gifregular_smile.gif .

تحياتي وشكري الجزيل للجميع ومن الأعماق .

أخوكم
Adel Khayata
السلام عليكم.
أخي "عنق الزجاجة" : لحل مشكلة Right To Left يكفي أن تضيف السطر التالي إلى برنامجك و هو :
[code2]
#define WS_EX_LAYOUT_RTL 0X00400000L
[/code2]
و بالنسبة لسؤالك الثاني : لاحظ أنه كلما تضع أداة Static Text فإن ال ID حقها هو IDC_STATIC و ذلك لأنه غالبا ما تكون هذه الأداة لعرض نص ستاتيكي أي ثابت و بالتالي لاداعي لحجز معرفات إضافية و لكن عندما تحتاج إلى تغيير النص الموجود في هذه الأداة بشكل ديناميكي فعليك تغيير المعرف إلى أي قيمة أخرى ( طبعا غير محجوزة مسبقا) أو يمكنك استخدام التابع SetWindowText مباشرة كما ذكر سابقا.
و بالنسبة للبادئة في كل معرف فهي ليست اجبارية و لكنها تدل على نوع الأداة التي تشير إليها فمثلا:
البادئة IDC تعني Identifier Control و
IDD تعني Identifier Dialog و
IDB تعني Identifier Bitmap و
IDS تعني Identifier String ... الخ
مع التحيات.
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.