الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ساعة عقارب ( بالفيجوال سي )

مغلق
بدأه عنق الزجاجة في 17 أغسطس 2001 · 3 رد · 608 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الإخوة الكرام :)

قمت بعمل أول برنامج بالفيجوال سي بلس بلس ، ومع إنه توه في بدايته ، بس هذا اللي قدرت عليه :( .

clock.GIF

أرجو من الإخوة الكرام تزويدي بالملاحظات التالية :

1- ودي أعرف دالة تغيير حجم ولون الخط .

2- دالة رسم النقطة .

3- الفورم يتحدث كل ثانية ، وإذا حدث أي تغيير أثناء هذه المدة يتشوه ، ما السبب ؟

4- في الكود قمت باستدعاء دالتين أكثر من مرة ( لتحويل من الدرجات الى الراديان ) ودي أعرف كيف أنشئ دالة وأسوي المعادلة فيها وأرجع بالقيمة فقط :) .

ولكم تحياتي .:):):)

#2

السلام عليكم

بالنسبة لإنشاء خط فعليك أن تعلن عن متحول خط وتستخدم الدالة CreateFont ، تأخذ هذه الدالة عدة متغيرات أترك للأخوة شرحها ، لأني مانا فاهم الدالة مية مية .

بالنسبة لتلوين بيكسل في النافذة فهناك دالتان SetPixel وتأخذ ثلاثة متغيرات الإحداثيات السيني والصادي واللون ، وترجع اللون السابق للنقطة في حال النجاح و -1 في حال الفشل .

والدالة الثانية هي SetPixelV وهي تشبه الدالة الاولى تماما إلا أنها أسرع لأنها لا تعيد اللون بل تعيد أي رقم غير الصفر في حال النجاح وصفر في حال الفشل .

بالنسبة للسؤال الرابع لو ممكن توضح أكثر وتكتب الدالتين لربما أستطيع المساعدة .

أخوك ،

#3

السلام عليكم.

مبروك أخي "عنق الزجاجة" :)

بالنسبة لتغيير الخط فهل أنت تقصد تغيير الخط المستخدم في الأدوات ( إذا كان كذلك راجع سلسلة التجارب - التجربة الرابعة على الوصلة http://arabteam.nicmatic.com/vb/showthread...3?threadid=3125 ) أما إذا كنت تستخدم ال Device Context للرسم فيجب انشاء الخط بنفس الطريقة السابقة و من ثم عليك اختياره عن طريق التابع SelectObject .

بالنسبة لتغيير لون الخط في DC فعليك استخدام التابع SetTextColor .

و بالنسبة لدالة رسم النقطة فهو كما ذكر لك الأخ آل عيد.

بالنسبة لتشوه الفورم فهل تقوم بعملية الرسم ضمن OnPaint ؟؟!! لأن هذا التابع هو المسؤول عن عملية تحديث الفورم عند حدوث أي عملية تحريك أو تغيير مكان للنافذة.

بالنسبة للسؤال الأخير فحسب ما فهمت أنك تريد وضع شيفرة معينة ضمن برنامجك بحيث تستدعيها كلما أردت بدون الحاجة إلى كتابتها مرة أخرى و يتم ذلك كالتالي :

إذا كان تريد استخدام التابع الذي في أكثر من Class فعليك كتابته على مستوى ال Global في مكان واحد و من ثم التصريح عن هذا التابع في باقي ال Classes عن طريق extern.

أما إذا كنت تريد استخدامه في Class واحد فقط فالأفضل تصريحه ك Member function و يتم ذلك كما يلي : إضغط بزر الماوس اليمين على اسم ال Class و اختر ِAdd Member Function ثم حدد القيمة التي سيرجعها التابع و اسم التابع و بارامتراته و نوع التابع ( virtual , public ...الخ ) و بعدها يضيف Visual C هذا التابع إلى ال Class ثم اكتب الشيفرة ضمن هذا التابع الجديد و في كل مرة تريد تنفيذ نفس الشيفرة عليك استدعاء التابع بواسطة اسمه مع تحديد البارامترات .

إذا أردت توضيح آخر فأنا جاهز:):)

مع التحيات.

#4

السلام عليكم ،،،

بالنسبة لسؤال الاول قم بالتالي :

1- لتغيير حجم الخط ونوعه كذلك ، يجب عليك اظهار صندوق تغيير الخط، ولكن قبل ذلك عرف متغير من نوع LOGFONT في فئة الصندوق Dialog ، و متغير من نوع CFont و اعطهم اي اسم ، مثلا logfont و m_font ، ثم أظف زر و ضع معالج لرسالة ضغط الزر و الذي سيقوم بإظهار صندوق تغيير حجم الخط ونوعه و نرسل عنوان logfont ... بعد اختيار نوع الخط سنقوم بصنع الخط عن طريق التابعCreateFontIndirect و الذي يستقبل logfont و الذي يحتوي على الخط المطلوب ... بعد ذلك حدد اي اداة لديك في النافذة عن طريق GetDlgItem ثم غير الخط عن طريق الاجراء SetFont و ارسال m_font ، عموما إليك كود اظهار صندوق تغيير الخط :

CFontDialog dlgfont(&logfont); // LOGFONT تم ارسال المتغير

	if (dlg.DoModal() == IDOK ) //  ضغط زر موافق
	    m_font.CreateFontIndirect( &logfont );

الان لدينا الخط الذي نريد في الكائن m_font نريد أن نغير الخط لأحد الادوات و لنفرض ان االرقم المصدر لها هو ID_STATIC، نغير في الكود كالتالي :

CFontDialog dlgfont(&logfont); // LOGFONT تم ارسال المتغير

	if (dlg.DoModal() == IDOK ) //  ضغط زر موافق
          {
	    m_font.CreateFontIndirect( &logfont );
            GetDlgItem(ID_STATIC)->SetFont(&m_font,TRUE);
          }

بالنسبة للون الخط نغير بوضع معالج لرسالة WM_CTLCOLOR ، و التي ترسل رقم المصدر للاداة التي مرسلة الراسلة، كل ما عليك القيام به التشييك بإستقدام رقم المصدر .. كالتالي :

HBRUSH CTypingTutorialDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   if (pWnd->GetDlgCtrlID() == IDC_K_LETTER)// حدد الاداة التي تريد تغيير لونها
   {
      pDC->SetTextColor(RGB(255, 0, 0));/ تغيير لون الخط
      hbr = m_brush;
   }

   return hbr;
}

SetPixel( int 5, int 5, RGB(0,255,0));

بالنسبة لمسئلة التحديث وش دالة التحديث اللي تستخدمها عن ارسال رسالة التايمر .. او بالاصح هل تحدث منطقة او النافذة كلها ... كذلك وش تقصد بالضبط لكمة يتشوه .

بالنسبة لسؤالك الاخير ... يا ليت توضح اكثر ... انت تقصد كيف تسوي دالة ؟؟؟ حدد الفئة اللي تبيها بزر الفارة اليمين و اختر Add member Function .. ثم حدد اسمها و حط نوع القيمة المرجعة int او اللي تبي .. واكتب دالتك عادي !!

اتمنى ان اكون افدتك ...

تقبل تحياتي ،،،،،،،،

هذا الموضوع مغلق.

مواضيع مشابهة