كيف أصنع شاشه ترحيبيه لبرآمجي ؟
#15
السلام عليكم

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

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

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

كود :
Windows : [align=center][COLOR=Blue]Borland Delphi Run-time Library Win32 API Interface Unit[/COLOR] Copyright (c) 1985-1999, Microsoft Corporation Translator: Borland Software Corporation[/align]

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

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

كود :
Windows : procedure Sleep; external kernel32 name 'Sleep'; [color=Blue]استدعاء إجراء النظام ويندوز فقط[/color]

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

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

الأن جرب و أكتب (مع العلم أن 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;

بهذه الطريقة لن تحدث أي مشاكل
عذرا للإطالة لانني فقط أحب عندما يتوفر لي الوقت ان أتقن و .. اعلًّم الاصطياد بدل تقديم السمكة.
تحياتي Smile
[-] كل من 1 user says قال شكرا ل merouane على المشاركة المفيدة
  • ELARAPY
الرد


الردود في هذا الموضوع
كيف أصنع شاشه ترحيبيه لبرآمجي ؟ - بواسطة merouane - 08-05-2008, 01:18 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم