المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : كيف أصنع شاشه ترحيبيه لبرآمجي ؟


delphi4you
02-05-2008, 10:03 PM
السلام عليكم ورحمة الله وبركآته

استفسار عن السبلاش سكرين الشاشه الترحيبيه
كيف أقوم بعملها ؟

أمير الدلفي
02-05-2008, 10:58 PM
و عليكم السلام ورحمة الله تعالى وبركاته

كان من الأحسن البحث في المنتدى قبل طرح التساؤل
خذ الرابط :
http://www.delphi4arab.com/forum/showthread.php?t=7

مهدي
02-05-2008, 11:11 PM
و عليكم السلام و رحمة الله و بركاته

أنظر للكود التالي


program Project1;
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {SplashScreen};

{$R *.RES}

begin
SplashScreen := TSplashScreen.Create(Application);
try
SplashScreen.Show;
Application.Initialize;
SplashScreen.Update;
Sleep(1000); Application.CreateForm(TForm1, Form1);
SplashScreen.Hide;
finally
SplashScreen.Free;
end;
Application.Run;
end.

delphi4you
04-05-2008, 01:28 PM
للأسف يا اخواني والله مشكل
أنا أساسا لا أعرف ماذا أفعل بالكود ولا أعرف كيف اتعامل معه
ولا أعرف كيف أعمل الشاشه الترحيبيه اساسا
اعذروني فانا مبتدئ جديد

B.M.AbdelAziZ
04-05-2008, 02:04 PM
انشا مشروع جديد في دلفي
في المشروع لديك Form1 نافذة واحدة رئيسية تمثل برنامجك
عليك باضافة نافذة ثانية Form2 والتي تستخدم ك Splash
قم بتغيير اسم Form2 الى SplashScreen من الخاصية Name
ثم من القائمة الاساسية Menu اضغط على Projet ثم Voir le source
يظهر لك المشروع قم بتعديله ليصبح بالشكل الذي ذكره الاخ مهدي فوق

والسلام عليكم ورحمة الله

delphi4you
04-05-2008, 04:41 PM
لاكن المشكلع أنني عندما أقوم بوضع الكود
تظهر لي خطوط حمر ولايمكن تشغيل البرنامج الا بتصحيح هذه الاكواد فعلا مشكل
مالعمل يا اخوان ؟

B.M.AbdelAziZ
04-05-2008, 05:14 PM
انتبه جيدا لردي السابق
عليك استخدام 2 Form
وتغيير اسم Form2 الى SplashScreen

professor DeXTeR
04-05-2008, 06:56 PM
فيما يبدو لي بأنك لم تعرف دلفي على شاشاتك

جرب وضع هذه التعلميه

var SplashScreen: TSplashScreen;

delphi4you
04-05-2008, 07:40 PM
جزاك الله خيرا
فأنا وضعت اسم الفورم splash screen في الخاصيه caption نسيت أن أضعها في name
يقال بأنه اذا أردت زياده فتره ظهور الشاشه الترحيبيه علي تعديل قيمه الـ sleep
للأسف هنالك خطأ في هذه التعليميه لا أعرف ماهو

أخي professor DeXTeR للأسف لا أعرف عما تتحدث بالظبط

bilgads
04-05-2008, 07:56 PM
يا أخي يجب عليك ان لا تدع فراغ بين sleep والقوس
وإذا اردت ان تزيد المدة ماعليك إلا ان تزيد الرقم الذي مابين القوسين حيث
1000=1ثانية

merouane
04-05-2008, 08:12 PM
أضف windows بعد Forms
uses
Forms, windows,

هذا السطر مكرر احذف أحدهما
Application.CreateForm(TForm1, Form1);
لست بحاجة إلى هذا السطر
Application.CreateForm(TSplashscreen, Splashscreen);

B.M.AbdelAziZ
04-05-2008, 08:17 PM
جرب وضع هذه التعلميه

ما هذا !!! هده برمجة وليس حقل تجارب

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

يا جماعة من لا يعرف لا يجيب ويترك السؤال لغيره
صاحب السؤال يريد التعلم فلا تزيدوه اخطاء وتدخلوه في متاهات


http://www.arb-up.com/files/arb-up-2008-1/18N22836.png


Sleep معرفة في Windows
والخطأ بالصورة لانك نست كتابة Windows في Uses مباشرة تحت Forms

1000 تعني ثانية
لكي يظهر SlpashScreen ثلاث ثوان مثلا غيرها ب3000

مهدي
04-05-2008, 09:31 PM
نعم يجب إضافة windows إلى uses لكي تعمل الوظيفة sleep.

snyper
05-05-2008, 10:01 AM
تعليمة sleep موجودة في المكتبتين SysUtils و Windows
لكن هل من فرق بينهما الاثنين من kernel32

merouane
08-05-2008, 02:18 AM
السلام عليكم

تعليمة sleep موجودة في المكتبتين SysUtils و Windows
لكن هل من فرق بينهما


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

بيديهيا:
نفتح الوحدتين SysUtils و Windows (وذلك بـ CTRL + الضغط بالزر الأيسر للفأرة على كلمة SysUtils - نفس الشيء لـ Windows ) ثم نقرأ ما كتب من طرف الشركة على رأس الملفين.
SysUtils :
Delphi / Kylix Cross-Platform Runtime Library
System Utilities Unit
Copyright (c) 1995-2002 Borland Softwrare Corporation

Windows :

Borland Delphi Run-time Library
Win32 API Interface Unit

Copyright (c) 1985-1999, Microsoft Corporation

Translator: Borland Software Corporation

لاحظ اللون الأزرق، والمعنى
الأولى تتضمن إرجراءات خاصة بدلفي (هنا نستطيع الاستقلال عن ويندوز)، والثانية تتضمن إجراءات النظام أي API

لنلقي نظرة على المضمون
SysUtils :

{$IFDEF MSWINDOWS} في حال كان البرنامج يعمل تحت نظام ويندوز
procedure Sleep; external kernel32 name 'Sleep'; stdcall; هنا نستدعي إجراء النظام العادي
{$ENDIF} أو
{$IFDEF LINUX} في حال كان البرنامج يعمل تحت نظام لينكس
procedure Sleep(milliseconds: Cardinal);
begin
usleep(milliseconds * 1000); // usleep is in microseconds اما هنا خاص بالنظام لينكس
end;
{$ENDIF}

Windows :

procedure Sleep; external kernel32 name 'Sleep'; استدعاء إجراء النظام ويندوز فقط

هذا بالطريقة البديهية عن طريق استكشاف VCL

الأن عن طريق التجريب ، وفي الحقيقة قد تنفع كدرس في استعمال الوحدات، لكن اكتفي بوضعها هنا كرد.
لا توجد مشكلة مع Sleep لأنها في الوحدتين تستعملا نفس الإجراء .. لكن هناك مثال سيرينا الفرق.
لنعمل مع الإجراء Beep ، وللعلم هناك إجرائين Beep و ( Beep (dwFreq, dwDuration
وفي الأغلب نحن نستعمل الأولى.. لماذا ؟؟ لأنه
uses
Windows, سبقت
SysUtils, تلغي الأولى

الأن جرب و أكتب (مع العلم أن Windows API يذكر لنا أن Beep تأخذ متغيرين كما - ( Beep (dwFreq, dwDuration -)
uses
Windows,
SysUtils,

وضع الإجراء التالي عند الضغط على زر
procedure TForm1.Button1Click(Sender: TObject);
begin
Beep(400,100);
end;

ستفاجأ بخطا في التجميع Compilation وذلك بسبب أن الوحدة المذكورة أولا ستطغى عليها (أو تلغيها) الوحدة التالية ، الأن جرب
uses
SysUtils,Windows, . . . .
. . . . . . . . . .
procedure TForm1.Button1Click(Sender: TObject);
begin
Beep(400,100);
end;

الآن كل شيء يعمل . هنا أشعر انه قد يختلط الامر على البعض سأوضح

( Beep (400, 100 تابعة للوحدة windows وهذه الوحدة مذكورة بعد SysUtils أي تلغيها
ومنه دلفي سيستعمل الإجراء الخاص بالوندوز ولن يأخذ بعين الاعتبار نظام التشغيل.
هذا مثال فقط ، و لكن لو كان لدينا إجراءات متداخلة بحيث لا نضمن انها لن تلغى من وحدة ما

اي بعبارة اخرى نحن نوجه دلفي أين نريد
uses
Windows, SysUtils, . . . . ..
. . . . . . . . . . . . . . . . . . . .
procedure TForm1.Button1Click(Sender: TObject);
begin
Windows.Beep(400,100);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
SysUtils.Beep;
end;

بهذه الطريقة لن تحدث أي مشاكل
عذرا للإطالة لانني فقط أحب عندما يتوفر لي الوقت ان أتقن و .. اعلًّم الاصطياد بدل تقديم السمكة.
تحياتي :)

snyper
08-05-2008, 06:30 AM
شكرا على الايضاح وكن عند ضغط CTRL + الضغط بالزر الأيمن للفأرة على كلمة sleep or Beep نجد انه ينقلنا الى مكتبة SysUtils الخاصة بدلي ولا ينقلنا الى مكتبة windows اي يولي الاهمية الى مكتبة ديلفي
فلماذا عند اجراء المثال الاول يعطي خطاء في التجميع بمعنى اوضح لماذا يقوم ديلفي بربطها بالمكتبة الثانية

merouane
08-05-2008, 09:29 AM
وكن عند ضغط CTRL + الضغط بالزر الأيمن للفأرة على كلمة sleep or Beep نجد انه ينقلنا الى مكتبة SysUtils الخاصة بدلي ولا ينقلنا الى مكتبة windows اي يولي الاهمية الى مكتبة ديلفي


جرب ضع SysUtils قبل windows ثم اضغط على sleep or Beep سيأخذك إلى windows.

فلماذا عند اجراء المثال الاول يعطي خطاء في التجميع

بمعنى اوضح لماذا يقوم ديلفي بربطها بالمكتبة الثانية

لم أفهم السؤال ؟؟

http://devala2.wordpress.com/2008/04...splash_screen/

ما قمت به صحيح .. لكن Form1 ستاخذ دائما حيزا في الذاكرة - تخيل شاشة ترحيبية تحتوي صورة ذات دقة عالية أو فيديو أو فلاش.. ألن تريد التخلص من الحجز غير النافع للذاكرة

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

والسلام