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

برنامج Welcome Screen

بدأه مجلـد جديـد في 14 يوليو 2008 · 6 رد · 1,676 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

طلب مني خلال فترة التدريب عمل برنامج يقوم بالآتي :

عند بداية تشغيل جهاز الكمبيوتر ، اظهار نافذة بداخلها صورة ولمدة 10 ثواني

الصورة التي تظهر تتغير في فترة الاعياد وخلال شهر رمضان ، وايضاً عند وجود مناسبات معينة في المؤسسة ، مثلا البدء في تطبيق خطة جديدة.

بدأت في عمل البرنامج و وصلت الى النتائج التالية:

1) اخفاء ازرار close و maximize و minimize واطار ال form عن طريق تغيير formBorderStyle property الى None

2) وضع pictureBox على كامل ال form

3) اضافة timer وتتغيير ال interval الى 1000 حتى تعمل tick event كل ثانية

4) اخفاء البرنامج من TaskBar وذلك بتغيير showInTaskbar property الى False

5) جعل شاشة البرنامج onTop وذلك بتغيير TopMost property الى True

6) الغاء عمل Alt+F4 حتى لايمكن اغلاق الشاشة الا بعد مضي 10 ثواني ( او استخدام ال task manager )

7) تغيير شفافية الشاشة وذلك بتعديل قيمة المتغير opacity الى 0.8

8) لابد ان تكون الصورة باسم ws_pic.jpg في القرص الصلب C ، واستخدمت try & catch للتحكم بخطأ عدم وجود الصورة.

9) اضافة label وفيه جمله : this windows well ... وجعل لون الخلفية شفاف .

النقاط التي اطلب فيها المساعدة هي:

1) جعل البرنامج يستقبل صور بامتداد bmp او png ، وليس فقط jpg

pictureBox1.ImageLocation = "C:\\ws_pic.jpg";

اي لابد من اقوم بتغيير طريقة تحديد الصورة وانا لا اعرف ذلك :(

2) كيف اقوم بجعل البرنامج يشتغل عند بداية التشغيل ( اريد طريقة غير وضعه داخل مجلد start up )

3) افكار لتطوير البرنامج من قبلكم :)

البرنامج على الرابط التالي:

startup_app.zip

وهذا هو كود البرنامج ، اسأل عن اي شيء غير مفهوم:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace startup_app
{
	public partial class Form1 : Form
	{
		public DateTime startupTime;
		public DateTime endTime;

		public Form1()
		{
			InitializeComponent();
		}

		// to disable alt+f4
		protected override void OnClosing(CancelEventArgs e)
		{
			e.Cancel = true;
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			// change the window opacity
			Opacity = 0.5;
			startupTime = DateTime.Now;
			endTime = startupTime.AddSeconds(10); // run time

			// ******use try&catch blocks******
			try
			{
				pictureBox1.ImageLocation = "C:\\ws_pic.jpg";
				pictureBox1.Load();
			}
			catch (Exception excep)
			{
				MessageBox.Show ( "Make sure that there is a picture in C drive named ws_pic.jpg", "Error Loading Image", MessageBoxButtons.OK, MessageBoxIcon.Error );
				Application.Exit();
			}

		}

		private void timer1_Tick(object sender, EventArgs e)
		{
			if (startupTime != null )
			{
				if (DateTime.Now > endTime)
				{
					Application.Exit();
				}
			}
		}
	}
}
#2

بخصوص النقطة الثانية :

اقتباس
2) كيف اقوم بجعل البرنامج يشتغل عند بداية التشغيل ( اريد طريقة غير وضعه داخل مجلد start up )

اتضح لي ان البرنامج سوف يكون على سيرفر في الشبكة ، وان هناك script يقوم بعملية فتح البرنامج عند بداية تشغيل اي جهاز في الشبكة ، لذلك سوف تكون الصورة موجودة ايضا في السيرفر وسوف يقوم المسؤول عن السيرفر باضافة الصور manually

احتمال اقوم بعمل برنامج اخر يقوم باختيار اي صورة يتم تشغيلها ، ويكون موجود على السيرفر ايضا ويعمل 24/7

فعندما ياتي شهر رمضان مثلا يقوم باعادة تسميه الصورة رقم 2 الى ws_pic.jpg

وعندما تاتي ايام عيد الفطر يقوم باعادة تسميه بطاقة التهنئة الى ws_pic.jpg واعادة الصورة السابقة الى اسمها السابق وهكذا ...

#4

هل من الممكن ان اعمل مثل طريقة اخي Moudey وذلك باضافة timer جديد اسمه timer2 واجعل tick event له كل 100 ms مثلا واقوم بتعديل المتغير Opacity داخل هذه event ؟ ما رأيكم ؟

#5

نعم استطيع عمل الشاشة باستخدام timer والتعديل على متغير Opacity واستخدام Thread.Sleep واصبحت تماما مثل طريقة اخي Moudey ! وبدون استخدام دوال API وعوار الراس :D ان شاء الله ارفق البرنامج اليوم حتى يراه الخبراء ويكتبوا ارائهم خاصة اخي Moudey لاني اتوقع ان هناك شيء خاطئ قمت بعمله ؟

#6

البرنامج بعد اضافة خاصية الشفافية ، بحيث بفتح بنفس الطريقة التي قام بعملها مشرفنا محمد .

هو نفس البرنامج السابق ، لكن اضفت timer جديد باسم timer2 يقوم بالتأكد هل الشفافية اقل من 1.0 ؟ اذا كانت كذلك يقوم بزيادتها بمعدل 0.01 ثم مناداة الدالة Thread.Sleep لمدة 5 ms

اود ان انبه ان timer2 يقوم بمناداة الدالة timer2_tick كل 1ms .

ان شاء الله سوف اقوم بجعلها تختفي بنفس طريقة ظهورها ، وذلك باضافة شرط آخر داخل دالة timer2 ، وهو اذا كان الوقت المتبقي على انهاء الشاشة نصف ثانية او ثانية فانه يبدأ في التقليل من قيمة المتغير Opacity حتى تصل الى 0.0

الفرق بين برنامج اخي محمد وبرنامجي ان الصورة التي يعرضها برنامج splash screen ممكن تكون شفافة في بعض الاماكن ( في حال استخدام صورة من gif او png عندما لا يكون هنا background layer ) . هل من الممكن عمل ذلك في هذا البرنامج ؟ مثلا اخفاء Form1 تماماً؟

رابط تحميل البرنامج ، ولا تنس وضع صورة في قرص C باسم ws_pic.jpg :

Copy_of_startup_app_v1.zip

هذا هو كود timer1 & timer2

  1.  
  2. private void timer1_Tick(object sender, EventArgs e)
  3. {
  4. label2.Text = runTime.ToString();
  5. runTime--;
  6. if (startupTime != null )
  7. {
  8. if (Opacity < 1.0 && DateTime.Now.AddSeconds(1) < endTime )
  9. {
  10. Opacity += 0.01;
  11. Thread.Sleep(5);
  12. }
  13.  
  14. if (DateTime.Now.AddSeconds(1) >= endTime)
  15. {
  16. Opacity -= 0.01;
  17. Thread.Sleep(5);
  18. }
  19.  
  20. }
  21.  
  22.  
  23.  

تم تعديل هذه المشاركة بواسطة مجلـد جديـد في 16 يوليو 2008 في 19:40

#7

السطر 8

الشرط هو : هل الشفافية اقل من 1.0 && DateTime.Now.AddSeconds(1) < endTime

القسم الثاني من الشرط سوف يتضح سبب استخدامه عندما تقرا السطر رقم 14:

هل تبقى على نهاية البرنامج ثانية واحدة ؟ اذا كان الشرط صحيح فانه يدخل داخل ال block ويبدأ في انقاص قيمة Opacity . عندما يتم مناداة الدالة مرة اخرى timer2_tick فسوف يدخل على الشرط الاول ويجده صحيح ويقوم بزيادة المتغير Opacity ! هذا خطأ logic error . لذلك اضفت القسم الثاني في السطر رقم 8 ، وكان بالامكان استخدام متغير boolean لغرض التسهيل وان شاء الله سوف اقوم بذلك.

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