السلام عليكم
طبعا يوجد فرق (لا شيء مكرر) .. واشكرك على دقة ملاحظتك
سأشرح بطريقتين : الاولى بديهية ، والثانية تجربة توضيحية
بيديهيا:
نفتح الوحدتين SysUtils و Windows (وذلك بـ CTRL + الضغط بالزر الأيسر للفأرة على كلمة SysUtils - نفس الشيء لـ Windows ) ثم نقرأ ما كتب من طرف الشركة على رأس الملفين.
لاحظ اللون الأزرق، والمعنى
الأولى تتضمن إرجراءات خاصة بدلفي (هنا نستطيع الاستقلال عن ويندوز)، والثانية تتضمن إجراءات النظام أي API
لنلقي نظرة على المضمون
هذا بالطريقة البديهية عن طريق استكشاف VCL
الأن عن طريق التجريب ، وفي الحقيقة قد تنفع كدرس في استعمال الوحدات، لكن اكتفي بوضعها هنا كرد.
لا توجد مشكلة مع Sleep لأنها في الوحدتين تستعملا نفس الإجراء .. لكن هناك مثال سيرينا الفرق.
لنعمل مع الإجراء Beep ، وللعلم هناك إجرائين Beep و ( Beep (dwFreq, dwDuration
وفي الأغلب نحن نستعمل الأولى.. لماذا ؟؟ لأنه
الأن جرب و أكتب (مع العلم أن Windows API يذكر لنا أن Beep تأخذ متغيرين كما - ( Beep (dwFreq, dwDuration -)
وضع الإجراء التالي عند الضغط على زر
ستفاجأ بخطا في التجميع Compilation وذلك بسبب أن الوحدة المذكورة أولا ستطغى عليها (أو تلغيها) الوحدة التالية ، الأن جرب
الآن كل شيء يعمل . هنا أشعر انه قد يختلط الامر على البعض سأوضح
( Beep (400, 100 تابعة للوحدة windows وهذه الوحدة مذكورة بعد SysUtils أي تلغيها
ومنه دلفي سيستعمل الإجراء الخاص بالوندوز ولن يأخذ بعين الاعتبار نظام التشغيل.
هذا مثال فقط ، و لكن لو كان لدينا إجراءات متداخلة بحيث لا نضمن انها لن تلغى من وحدة ما
اي بعبارة اخرى نحن نوجه دلفي أين نريد
بهذه الطريقة لن تحدث أي مشاكل
عذرا للإطالة لانني فقط أحب عندما يتوفر لي الوقت ان أتقن و .. اعلًّم الاصطياد بدل تقديم السمكة.
تحياتي
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;بهذه الطريقة لن تحدث أي مشاكل
عذرا للإطالة لانني فقط أحب عندما يتوفر لي الوقت ان أتقن و .. اعلًّم الاصطياد بدل تقديم السمكة.
تحياتي


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)