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

تغيير لون واجهة البرنامج و غيرها من الاسئلة

مغلق
بدأه راكان الحنيطي في 23 أكتوبر 2004 · 8 رد · 832 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الان بدأت استعمال ال Visual C++ بشكل جدي و انا احاول ان اقوم بصنع بعض البرامج التي ممكن ان اتعلم من خلالها كيفية عمل بعض الاشياء.

حتى الان تمكنت من ان اقوم ببعض الاشياء و هذا الكود

BOOL CProgramDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);  	// Set big icon
	SetIcon(m_hIcon, FALSE);  // Set small icon

	// TODO: Add extra initialization here
	//Set Window Position
	SetWindowPos(0,0,0,800,600,SWP_SHOWWINDOW);

	//Set Fonts for labels
	CFont* Font = new CFont;
	Font->CreatePointFont(180,"Tahoma");
	m_lblProgramName.SetFont(Font);
	delete Font;
	Font = new CFont;
	Font->CreatePointFont(120,"Tahoma");
	m_lblData.SetFont(Font);

	//Progress bar properties
	m_PB.SetRange32(0,100);
	m_PB.SetStep(1);

	//Then Timer
	SetTimer(IDC_Inc,200,0);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

السؤال الاول:

كيف استطيه ان اغير لون الخلفية لواجهة التطبيق و لون النص في ال CStaticText علما بان ال Visual Basic تمكنك من فعل ذلك عن طريق خاصية ال BackGround color؟

وجدت هذا الطريقة لكنها تمكنك من تغيير الخلفية و لون النص لكن ماذا لو اردت كل Static ان يكون له لون خاص به مثل احمر و الثاني اصفر و هكذا؟

السؤال الثاني:

كيف استطيع ان اقوم باعدة ترتيب امكنة الكنترولات التي على الفورم في نصف الفورم عندما اوسعه؟ اي انه اريد ان تكون lblProgramName في اعلى الفورم و في المنتصف

The top property = 0 but dunno how to calculate the left from the form's width

السؤال الثالث:

كيف اقوم نوع ال BorderStyle الى 0 اي No borders for the form

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

و تحية لكل اعضاء المنتدى :)

سلام

تعديل ارفقت البنامج و هو عبارة عن فايروس سليم فقط يوهمك بانه يقوم بمسح ملفات الوندوز لكها خدعة لا غير. :P

Virus.zip

تم تعديل هذه المشاركة بواسطة راكان الحنيطي في 23 أكتوبر 2004 في 23:21

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#2

ياهلا فيك ياراكان ,,

اقتباس
لكن ماذا لو اردت كل Static ان يكون له لون خاص به مثل احمر و الثاني اصفر و هكذا؟

آخر مايهمني في برمجة المؤشرات ومذابح الذاكرة ومقابض الأطر وكل هذه الأهوال هو الاهتمام بلون ال TextBox أو ال static وحتى لون الخلفية !!

لكن عموما لتغيير لون أي شيء تريده عليك بالتالي وانظر الى هذه المجزرة :)

أضف حدث رسالة جديدة لكامل ال Form وهو باسم WM_CTLCOLOR ,, وانشيء الدالة الجديدة ,, وحرر الكود كالتالي مثلا :

HBRUSH CMFCDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{  

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);


if (pWnd->GetDlgCtrlID() == IDC_STATICTIME)
{
pDC->SetTextColor(RGB(0, 0, 255));
pDC->SetBkColor(RGB(100,200,0));
}

if (pWnd->GetDlgCtrlID() == IDC_STATIC1)
{
pDC->SetTextColor(RGB(0, 0, 255));
pDC->SetBkMode(TRANSPARENT);
}

return hbr;
}

ال IDC_STATICTIME عبارة عن static Box وال IDC_STATIC1 هو Static Box مختلف ,,

غير اسمائهما للأسماء الموجودة عندك ,, وشغل البرنامج وسترى أن اللون تغيير وستفهم الباقي لوحدك :)

اقتباس
كيف استطيع ان اقوم باعدة ترتيب امكنة الكنترولات التي على الفورم في نصف الفورم عندما اوسعه؟ اي انه اريد ان تكون lblProgramName في اعلى الفورم و في المنتصف

في مصرف ال Visual Studio 2003 ستجدها في المكان المعدل في الصورة ,,

123_231020041555260.2006494.jpg

اقتباس
كيف اقوم نوع ال BorderStyle الى 0 اي No borders for the form

ماذا يفعل ال Boarder Style ؟ هل هي نفسها الموجودة في Properties أم هناك غيرها ؟!

حملت الملف قبل قليل وسأرى مافيه وأعطيك الرد ,, تشكر ياراكان :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

السلام عليكم

اسف على التدخل السريع و لكن استاذ HGB ممكن تقولي شو الطريقة اذا كان بدي احرك الماوس فوق اداة العنوان يتغير لونها و بعد ان ابعد الماوس يرجع اللون الاصلي ...

الصراحة انا كان بدي ادور على شيئ اسمه Mouse Move للاداة العنوان بس ما لقيتها ؟؟؟؟؟

وشكرا

تم تعديل هذه المشاركة بواسطة Dot-NEt في 24 أكتوبر 2004 في 03:57

#4
اقتباس
فوق اداة العنوان يتغير لونها

ماهي أداة العنوان ؟؟

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#5

borderstyle.JPG

هذه هي صورة من الفجوال بيسك عن ال BorderStyle و يمكن ان ترى ما يحدث الى الفورم عند تغييرها الى None

و على كل قمت باضافة الكود و كل شيء لكن العملية لم تنجح حيث انه لم يقم بتغيير الوانها.

و بالمناسبة: احب معرفة التفاصيل الصغيرة قبل الكبيرة في اللغة و ان شاء الله تفهم ما اقصد :)

اما بالنسبة الي موقع الكنترولات فاريد ان اعرف كيفية تحرك الادوات برمجيا لانه في الكود اقوم بتغيير حجم الفورم الى حجم الشاشة و اريد ان اسحب منتصف الفورم لاقوم بتحريك الادوات

شكرا على مساعدتك و ما تقصر اخ هيثم

سلام

تم تعديل هذه المشاركة بواسطة راكان الحنيطي في 24 أكتوبر 2004 في 21:20

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#6

بالمناسبة: ما هي الخطوات اللازمة لاستعمال اداة مثل ال RichEdit control لانه حاولت استخدامها و البرنامج لا يعمل عند وضعها. فهل هناك كود معين يجب وضعه او تعديلات على المشروع لاستخدام ااداة؟

انا غلبتك معي اخ هيثم لكن تحملني شوي :)

سلام و شكرا

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#7

ياأهلين ,,

عادي ياراكان أسأل كما تريد وسنحاول أن نجيبك باذن الله ,, نريد أن نكسب محترفي VC++ جدد :)

الله يعينك ,,

المهم خذ الكود المرفق ,, "ملخبط وغير منظم" لكنه يفي بالمطلوب ,, لونت ال static Box وحركت ال Button مع Timer ,,

اذهب الى دالة ال Timer وهي آخر دالة وستفهم كيف تعمل ,,

المهم توجد عدة طرق لتحريك ال Button ,, أجمل مافي VC++ أنه كلما دخلت في مطب يمكن أن تتحايل وتخرج من طريق آخر ,, يعني أنت تدور بين فئة هي CWnd بال MFC وبين مقبض الذاكرة المغلف فيها HWND بهذين يمكن أن تفعل كل شيء ,,,

المهم الكود :

  HWND hwnd;
  static int x=10,y=10;

  //Try the next tow lines .. 
  hwnd = GetDlgItem(IDC_BUTTON3)->GetSafeHwnd();
  ::SetWindowPos(hwnd, NULL,x++,y++,20,20,SWP_SHOWWINDOW);

يحرك الزر ,,

والكود :

  LPRECT rect = new RECT;
  rect->top=0;
  rect->left=0;
  rect->right=x++;
  rect->bottom=y++;
  GetDlgItem(IDC_BUTTON3)->MoveWindow(rect);

أيضا يحرك الزر ,, ويوجد غيره بالمناسبة ,, خذ واختار , برمجة ال VC++ الرائع فيها أنك لن تحتاج كل ماتريد أن تعمل بدالة Win32 أن تقوم بعمل Invok أو أي شيء ,, استدعي الدالة مباشرة وافعل ماتريد ,, أو استخدم مكتبة ال MFC ,, يعني أنت محاط بكم خيارات كبير للغاية ,, لذا هي رائعة ومرنة :)

==============

بالنسبة لل Rich Edit لم أتعامل معها من قبل أبدا ,, لكن يمكن أن أعرف لك ذلك يوم الغد باذن الله ,, ولايهمك ,, حتى ذلك الوقت أتمنى أن يجيبك أحد الخبراء :)

عموما شغل الكود التالي ,, وأتمنى أن لاتصاب بجلطة عندما ترى ملف ال EXE وهو يعمل ,, حيث كتبت الكود بسرعة ولم أهتم لأي منظر جمالي !!

mfc.rar

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#8

السلام عليكم

استاذي HGB انا اقصد الاداة STATIC الموجودة في ++VC

ولك جزيل الشكر

#9

السلام عليكم,

هنا أسئلة متعددة وسأحاول إضافة بعض الأشياء وإذا كان أسئلة أضن أنه من الأحسن التركيز على موضوع واحد في كل مرة :

- فيما يخص تغيير مكان الكنترولات يمكن أن نستعمل الطريقة :

نزيد رسالة WM_SIZE لرسائل الإنتظار أو الدالة OnSize وهذه ستحدث كل مرة تتغير فيه حجم النافذة وهنا ستكون عندنا طول وعرض النافذة ومن هنا وحسب هذه المعطيات نقوم بتغيير وضع الكنترولات باستعمال الدالة SetWindowPos وهي تمكن في آن واحد من تغيير الموقع وكذلك حجم الكنترول.

- حين نريد أن نعرف النقر من الماوس على عنوان النافذة مثلا نستعمل رسائل الماوس التالية WM_NCxxxxx عوض ما نستعمل WM_xxxxx لنراقب الماوس داخل Client area نضيف NC لكي نريد Non Client Area .

- إذا أردنا أن نغير أي شكل أو Style في كنترول ما أثناء تشغيل البرنامج فيمكن أن نستعمل الدالة SetClassLong ونعطيها البارامتر حسب ما نريد تغييره كما نعطيها التغيير الجديد ويمكن أن نرى مختلف البارامترات في ملف MSDN مثلا.

أتمنى أن تكون هذه الإضافات مفيدة وإذا كان هناك أي توضيحات ستجد الإخوان مستعدين إن شاء الله.

إلى اللقاء.

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

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