اكثر المحتويات زيارة
الدوال في الاكسل (4,654 مشاهده)
ربط قاعدة بيانات أكسس (MS Access) مع برنامج الفيجوال بيسك بطريقة(ODBC) (3,226 مشاهده)
الدرس الثالث : بعض تطبيقات الدوال في اكسل (2,414 مشاهده)
تعريف الاستعلام وطريقة عرضه في آكسس، أنواع الاستعلامات، نافذة تحديد الاستعلام! (1,853 مشاهده)
الدرس الثاني: بعض الحيل لتسهيل برنامج اكسل (1,699 مشاهده)
شرح طريقة استعمال الأوتلوك مع بريد الهوتميل (1,664 مشاهده)
تغيير لغة واجهة التطبيق من عربي الى انجليزي وبالعكس لـ Windows-based applications (1,659 مشاهده)
أنواع العلاقات وطريقة الربط بين الجداول. (1,570 مشاهده)
مقدمة عامة حول الاكسل وحيل خاصة بالاكسل (1,377 مشاهده)
الدرس الأول : عمل شريحة في البوربوينت (1,317 مشاهده)
أنشئ قاعدة بياناتك التي ستستند إليها في تعلم طريقة ربط الجداول والاستعلامات. (1,315 مشاهده)
دورة الأكسس: الدرس السادس : منوعات في أكسيس . (1,151 مشاهده)
كيفية حل مشاكل الانترنت اكسبلور Internet Explorer (1,135 مشاهده)
اضافه صوت ونص لخلفيه في باور بوينت (1,096 مشاهده)
درس تعريب المجلة (1,080 مشاهده)
برنامج Windows Movie Maker لتكوين أفلام (1,067 مشاهده)
شرح طريقة التجميع Grouping في برنامج الاكسل (1,060 مشاهده)
التعرف على مكونات الكمبيوتر (1,031 مشاهده)
مقدمة في ربط قواعد البيانات داخل بيئة الـ .NET باستخدام الـ VB.NET (981 مشاهده)
كيف تجعل برنامجك أكثر تألقا وجمالا باستخدام أداة Active Skin (909 مشاهده)
مقدمة عن لغة البيسك (898 مشاهده)
ما هو المات لاب MATLAB؟ (890 مشاهده)
الفيجوال بيسك - مقدمة (867 مشاهده)
دروس في الأوفيس الأكسس - Access0- (831 مشاهده)
نبذه عن الفيجوال بيسك (795 مشاهده)
الجديد
التحويل التلقائي للحروف ل- ل- ه إلى اسم الجلالة0---- (492 مشاهده)
النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0---النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0--- (284 مشاهده)
ضبط خيارات اللغة فى الـ Microsoft Word0--- (303 مشاهده)
استخدام لوحة المفاتيح في الـ Word0---- (431 مشاهده)
إضافة كلمة سر إلي ملفات الورد دون استخدام برامج0--- (384 مشاهده)
دمج المراسلات0-- (199 مشاهده)
وضع صورة كخلفية للنص0-- (288 مشاهده)
السماح للمستخدمين بتعديل أجزاء من ملف وورد محمي (Word2003)0--- (223 مشاهده)
كتابة الأرقام الكسرية ورموز المعادلات0-- (342 مشاهده)
درس كامل عن الدمج السهل من لوحة المفاتيح ف0-ي برنامج الـ Word (260 مشاهده)
دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (736 مشاهده)
دورة الأكسيس : الدرس الرابع : العلاقات0---- (440 مشاهده)
أساسيات في Access0--0 (283 مشاهده)
تصميم تقرير لطباعة البيانات0---- (343 مشاهده)
تصميم نموذج استعراض البيانات‏0--تصميم نموذج استعراض البيانات‏0-- (319 مشاهده)
تصميم نموذج إدخال‎ ‎البيانات0--- (340 مشاهده)
إنشاء قوائم خاصة باستخدام الماكرو(1)0-- (289 مشاهده)
خطوات إنشاء الماكرو في تذييل النموذج (2)0-- (234 مشاهده)
خطوات إنشاء الماكرو في تذييل النموذج (1)0- (240 مشاهده)
استعلامات SQL في Access - تعديل الجداول وإضافة الحقول0- (281 مشاهده)
استعلامات SQL في Access - تحديث البيانات الجدولية0-- (249 مشاهده)
الاستعلامات الإجرائية -4 (استعلام الحذف)0--- (144 مشاهده)
الاستعلامات الإجرائية -2 (استعلام الإلحاق)0--- (174 مشاهده)
تصميم تقرير لطباعة الإجمالي0--- (206 مشاهده)
استعلامات التحديد Select Query مع أمثله (1)0--- (258 مشاهده)
البحث

من هنا وهناك
قريبا باذن الله
قريبا باذن الله
قريبا باذن الله
قريبا باذن الله
قريبا باذن الله
Resources فى DLLs1

استخدام Forms وResources فى DLLs




 

 


بسم الله الرحمن الرحيم


 

مقدمة:
   بقى جانبين مهمين فى DLLs سأغطيهما فى هذا الدرس وهما إستخدام Forms و Resources  ، ويعد هاذين الجانبين من الجوانب التى تُظهر قوة ومرونة DLLs .

 

استخدام Form فى DLLs :
إن DLL يمكن أن يختوى Forms مثل احتوائه على الكود تماماً ،ولا تختلف طريقة بناء فورم فى DLL عنها فى التطبيق العادى ، لنأخذ مثال عملى لبناء فورم فى DLL  :
1-ابنى تطبيق DLL  جديد (امسح التعليقات الظاهرة فى ترويسة DLL إذا رغبت بذلك) خزّن الDLL  باسم MyForms.dpr .
2-اختر file ثم new لبناء فورم جديد لمشروع DLL أضف أي أدوات تريدها على الفورم .
3-غيّر الخاصية name للفورم إلى DLLForm ،خزّن الفورم باسم DLLFormU.pas .
4-عد إلى وحدة DLL المصدرية ، أضف دالة تدعى ShowForm التى تبنى وتُظهر الفورم ،استخدم الكود التالي:

function ShowForm : Integer; stdcall;





var




Form : TDLLForm;




begin




Form := TDLLForm.Create(Application);




Result := Form.ShowModal;




Form.Free;




end;

5-أضف جزء exports إلى DLL وصدّر الدالة ShowForm ،يظهر جزء exports كالتالي:

exports





ShowForm;

6-اختر project ثم Build MyForms لبناء ملف ال DLL ،خزّن الDLL  .


لاحظ أن الدالة ShowForm قد صُرِّح عنها باستخدام الكلمة المحجوزة stdcall ،هذه الكلمة المحجوزة تخبر المترجم ليصدّر الدالة باستخدام الإستدعاء القياسي "calling convention" ،stdcall  يسمح لهذا الDLL ليُستخدم بواسطة بيئات تطوير أخرى غير دلفى.


ملاحظة: calling convention يحدد كيف سيمرر المترجم البارامترات عندما يستدعى الدوال والإجراءات ، الإستدعاءات الخمس القياسية للconventions هى (stdcall, cdecl, pascal, regester, safecall) .
الكود التالي يُظهر الDLL :

library MyForms;





uses




SysUtils,




Classes,




Forms,




DLLFormU in `DLLFormU.pas' {DLLForm};




function ShowForm : Integer; stdcall;




var




Form : TDLLForm;




begin




Form := TDLLForm.Create(Application);




Result := Form.ShowModal;




Form.Free;




end;




exports




ShowForm;








begin




end.
 

الآن التطبيق المستدعِى يمكنه أن يصرّح عن الدالة ShowForm وأن يستدعيها ، أنظر لتطبيق دلفى التالي:


unit TestAppU;





interface




uses




Windows, Messages, SysUtils, Classes, Graphics,



Controls, Forms, Dialogs, StdCtrls;




type




TForm1 = class(TForm)




Button1: TButton;




procedure Button1Click(Sender: TObject);




private




{ Private declarations }




public




{ Public declarations }




end;




var




Form1: TForm1;




function ShowForm : Integer; stdcall;




external `myforms.dll';




implementation




{$R *.DFM}




procedure TForm1.Button1Click(Sender: TObject);




begin




ShowForm;




end;




end.

لاحظ أنى استخدمت الكلمة المحجوزة stdcall مرة أخرى عندما صرّحت عن الدالة فى لتطبيق المستدعِى نظراً لأن الدالة كانت قد صدّرت من ال DLL مع stdcall ، لذلك يجب أن تُستورد مع stdcall ،يجب عليك دائماً أن تستورد الدالة أو الإجراء بنفس calling convention الذى استخدمته لتصديره.


ملاحظة: إذا كنت ستستخدم DLL فى تطبيقات دلفى فقط ،فإنك لا تحتاج للقلق حول استخدام stdcall عند تصديرك لدوالك و إجراءاتك ، أما إذا كان DLL سيُستدعى من مجال عريض من التطبيقات فيمكن أن تُصدّر دوالك وإجراءاتك مع stdcall .


مثال لاستدعاء الدالة السابقم من لغة Visual Basic :
1-شغّل تطبيق جديد فى VB .
2-فى جزء General للفورم أكتب سطر التصريح التالي عن الدالة (لا تنسى حساسية هذا السطر بالنسبة لحالة أحرف اسم الدالة كبيرة أم صغيرة):


Private Declare Function ShowForm Lib "myforms.dll" () As Integer


3-أضف زر أمر على الفورم وفى حدث النقر له أكتب السطر التالي :
dim x as integer
x=showform


4-نفّذ البرنامج ،أنقر على زر الأمر ،لاحظ أن الفورم الجديد سيظهر .


استدعاء MDI Form  فى DLL :
    امتلاك MDI child من DLL هو حالة خاصة ،لنقل أنك تملك تطبيق دلفى والفورم الرئيسي هو MDI Form   ،إذا كنت تحاول أن تستخدم MDI child موجود فى DLL
،فإنك ستحصل على اعتراض VCL يقول (لايوجدMDI Forms نشط الآن) .
لكنك تملك MDI Form فما المشكلة إذاً؟ بالنسبة ل VCL أنت لا تملك MDI Form .
عندما تحاول أن ترى MDI child ،فإن VCL تحاول أن تفحص ما إذا كانت خاصية MainForm لغرض التطبيق صالحة أم لا ،إذا كانت هذه الخاصية ليست صالحة ،يظهر الإعتراض ، المشكلة هى أن ال DLL كذلك يحتوى على غرض Application غير التطبيق الذى أنت تعمل عليه حالياً ،وهذا الغرض يتم فحص خاصية MainForm له لكن DLL لا يملك MainForm ،هذا الفحص سيفشل دائماً.


لحل هذه المشكلة يجب إسناد غرض تطبيق التطبيق المستدعِى إلى غرض تطبيق DLL ،كذلك يجب أن يتم إعادة غرض تطبيق DLL إلى وضعه الأصلى ،لذلك عليك أن تخزن مؤشر لغرض تطبيق DLL فى متغير عام فى DLL ،لذلك يمكن إعادته لوضعه الأصلى قبل أن يتوقف تحميل DLL .
لنتبع الخطوات التالية الضرورية لمشاهدة MDI child Form فى DLL :
1-إعمل مؤشر عام من النوع TApplication فى  DLL .
2-خزّن غرض تطبيق DLL فى المتغير الذى عرّفته.
3-أسند غرض تطبيق التطبيق المستدعى إلى غرض تطبيق DLL .
4-أنجز وأظهر الMDI child Form .
5-أعد غرض تطبيق  DLL قبل وقف تحميله.
ضع الكود التالي قرب قمة وحدة المصدر لDLL :

var


DllApp : TApplication;


كن متأكداً من وضع الكلمة المحجوزة var تحت قائمة uses فى وحدة DLL المصدرية ،ثم ابنى الإجراء الذى سيعمل على تبديل TApplication ويبنى MDI child Form ،الإجراء سيظهر كالتالي :

procedure ShowMDIChild(MainApp : TApplication);





var




Child : TMDIChild;




begin




if not Assigned(DllApp) then begin




DllApp := Application;




Application := MainApp;




end;




Child := TMDIChild.Create(Application.MainForm);




Child.Show;




end;
 

عندما تستدعى هذا الإجراء فإنك ستمرر غرض التطبيق للتطبيق المستدعِى ،إذا كان مؤشر DLLApp لم يتم إسناده ،فإنك تسند غرض تطبيق DLL إلى مؤشر مؤقت ،ثم تسند غرض التطبيق للتطبيق المستدعى لغرض تطبيق DLL ،هذا يفحص تأكيد ما إذا كان غرض التطبيق قد وضع(أسند) مرة واحدة فقط.
بعد ذلك سيتم بناء MDI child Form ،يُمرر الفورم الرئيسي للتطبيق المستدعى كمالك ، فى النهاية ،يظهر الفورم.
كل ما تبقى هو إرجاع مؤشر تطبيق DLL قبل وقف تحميله ،بإمكانك استخدام DLLProc لإعادة تخزين مؤشر تطبيق DLL كالتالي :

procedure MyDLLProc(Reason: Integer);





begin




if Reason = DLL_PROCESS_DETACH then




{ DLL is unloading. Restore the Application pointer. }




if Assigned(DllApp) then




Application := DllApp;




end;


تذكّر أنك خزنت مؤشر تطبيق DLL سابقاً ،والآن أنت فقط تعيد تخزينه  .
كما رأيت تركيب MDI child Form فى DLL يتطلب عمل إضافى لكنه بالتأكيد ممكن.


استخدام  Resources in DLLs :
أحياناً تحتاج إلى امتلاك مصادر Resources محتواة داخل DLL ويتم استيرادها من قبل تطبيقاتك بدلاً عن وضعها كجزء من الملف التنفيذى للبرنامج.
من أهم استخدامات هذا الأسلوب هو جعل برنامجك أكثر سهولة فى قابلية نقله إلى لغات أخرى غير لغتك الوطنية ،
لنأخذ مثالاً على ذلك :
  لنفرض أنك تملك تعليمات شاشة لتطبيقك ،وتلك التعليمات مشتملة فى خمس سلاسل موجودة فى DLL ،هذه الجمل يمكن أن تُدعى IDS_INSTRUCTION1, IDS_INSTRUCTION2 إلى آخره.
يمكنك أن تُحمّل وتعرض السلاسل كالتالى :


LoadString(DllInstance, IDS_INSTRUCTION1, Buff, SizeOf(Buff));
InstructionLabel1.Caption := Buff;


البارامتر الأول للدالة LoadString يحتوى على ممسك Instance لل DLL حيث توجد السلاسل ،البارامتر الثانى يحتوى رقم ID لل Resource المراد تحميله ،حيث أنك تقوم ببناء DLLs التى تحتوى السلاسل بعدة لغات مختلفة قبل تحميلها ،ويمكن استخدام الكود التالى لتحديد ممسك الDLL .


var
  DLLName : String;
begin
  case Language of
    laFrench : DllName := `french.dll';
    laGerman : DllName := `german.dll';;
    laSpanish : DllName := `spanish.dll';
    laEnglish : DllName := `english.dll';
  end;
  DllInstance := LoadLibrary(PChar(dllName));
end;


كل ماعليك فعله هو تحميل ال DLL الصحيح ،هذا يمثّل أحد استخدامات Resources الذى ستجد بالتأكيد الكثير من الاستخدامات له عند بناء تطبيقاتك .


بناء Resources DLL :
يمكنك أن تبنى DLL يتكون فقط من Resources ،أو يمكنك مزج الكود وال Resources فى نفس DLL تركيب Resources فى DLL مماثل لإضافة Resources  لتطبيقك ،لفعل ذلك ابدأ مشروع DLL جديد ثم أضف سطر فى DLL لربط ال Resources :


{$R RESOURC.RES}


استخدام Resource DLL :
  يجب عليك أن تحصل على DLL's instance ممسك لل DLL قبل أن تستطيع الوصول إلى Resources الموجودة فى DLL ،إذا كان DLL يحتوى على Resources فقط فإنك ستستخدم التحميل الديناميكى ،أما إذا احتوى DLL على Resources  وكود معاً فإنك تختار التحميل الأستاتيكي ل DLL ،لاحظ أنه فى حالة تحميل DLL ستاتيكياً فإنك تستطيع استخدام Loadlibrary لالتقاط instsnce handle .


DllInstance := LoadLibrary(`resource.dll');


ومن ثم تستخدم الممسك عندما تحتاج إليه ،الكود التالى يُحمّل صورة نقطية موجودة فى DLL إلى أداة Image :
 

procedure TMainForm.FormCreate(Sender: TObject);





begin




DLLInstance := LoadLibrary(`resource.dll');




if DLLInstance <> 0 then begin




Image.Picture.Bitmap.




LoadFromResourceName(DLLInstance, `ID_BITMAP1');




FreeLibrary(DLLInstance);




end else




MessageDlg(`Error loading resource DLL.',




mtError, [mbOk], 0);




end;


لم يبقى الكثير لنقوله فى هذا الموضوع ،بالطبع بإمكانك تحميل  Resources ستاتيكياً أو ديناميكياً ،فى كلا الطريقتين لك أن تستخدم Loadlibrary لالتقاط الممسك لل DLL ، لاتنسى استدعاء FreeLibrary عندما تنتهى من العمل مع DLL ،أو قبل أن تغلق تطبيقك.


ملاحظة: استخدام التحميل الديناميكى له ميزة إضافية حيث أنه يسمح لتطبيقك أن يحمّل بشكل أسرع ، حيث أنك تقوم بتحميل Resource DLL عندما تحتاجه وتنهى تحميله عند انتهاء حاجتك إليه ،نتيجة لهذا فإن تطبيقك سيستخدم ذاكرة أقل منه عندما تكون الموارد فى الملف التنفيذى.


الخلاصة :
استخدام Dynamic Link Library ليس صعباً مثلما يظهر لك أول الأمر ، DLLs هو طريق عظيم لإعادة استخدام الكود ،بعد أن تبنى DLL يمكنك استدعاؤه من تطبيقك الذى يحتاجه ،بناء VCL forms فى DLL واستدعاء هذه الforms من تطبيقات غير تطبيقات دلفى مظهر قوي ،استخدام الResources  فى DLLs مظهر فعّال إذا استطعت التحكم فى متى وأين تحمّل هذه المصادر.


رجائى أن أكون قد وفقت لكشف النقاب عن هذا الجانب البرمجى المهم ليس فقط فى لغة الدلفى وإنما فى معظم لغات البرمجة التى تتفق فى DLL كمفهوم ولا تختلف إلا فى طريقة تجهيزه واستخدامه ... ولا أدعى أن هذه الدروس المحدودة ستجعلك متمكناً منه بشكل كامل ،ولكننى أعتبرها بداية ممتازة لتجعلك تنطلق لمزيد من البحث والدراسة والاستخدام لل DLL وصولاً إلى برمجة عربية ذات مستوى عالمى.


 

Resources فى DLLs1

أضف هذه المادة في موقعك:
مواد مشابهة:
المتغيرات في برنامج الدلفي المتغيرات في برنامج الدلفي
المتغيرات في برنامج الدلفي
(مرات المشاهدة: 187 مرات)
مقدمة في DLL   - مقدمة في DLL -
مقدمة في DLL -
(مرات المشاهدة: 57 مرات)
الثوابت في برنامج الدلفي- الثوابت في برنامج الدلفي-
الثوابت في برنامج الدلفي-
(مرات المشاهدة: 151 مرات)
إنجاز وحدة DLL فى لغة دلفي إنجاز وحدة DLL فى لغة دلفي
إنجاز وحدة DLL فى لغة دلفي
(مرات المشاهدة: 147 مرات)
الدالة Case- الدالة Case-
الدالة Case-
(مرات المشاهدة: 52 مرات)
المتغيرات في برنامج الدلفي- المتغيرات في برنامج الدلفي-
المتغيرات في برنامج الدلفي-
(مرات المشاهدة: 180 مرات)
الكلمة الأساسية IF - THEN- الكلمة الأساسية IF - THEN-
الكلمة الأساسية IF - THEN-
(مرات المشاهدة: 131 مرات)
الكلمة الأساسية IF - THEN الكلمة الأساسية IF - THEN
الكلمة الأساسية IF - THEN
(مرات المشاهدة: 68 مرات)
الثوابت في برنامج الدلفي الثوابت في برنامج الدلفي
الثوابت في برنامج الدلفي
(مرات المشاهدة: 75 مرات)
حلقات التكرار While - For - Repeat- حلقات التكرار While - For - Repeat-
حلقات التكرار While - For - Repeat-
(مرات المشاهدة: 139 مرات)
تعارف اهداءات ترحيب تبريك الحوار العام الفسحة العامة الطلاب و الاختبارات و الاسئله الجريمه حوادث كوارث جرائم معجم لهجات الفاظ مصطلحات عبارات حكم المنتدى الاسلامى تفسير الاحلام dreams صوتيات اسلاميه اناشيد محاضرات خطب وعظ الخينة الرمضانية اللغة الانجليزيه English الطرائف والمرح والفكاهه والتسليه العاب اكس بوكس بلاستيشن XBOX360 & PS3 playstation بلاي استيشن دريم كاست نتندو Anime انمي افلام كرتون السياحة و السفر والرحلات الافلام المنوعه افلام عربيه افلام اجنبيه الصور المضحكه والتعليق مسابقات الغاز حكاوي تطوير المواقع و السكربتات Ajax XML CSS JavaScript PHP Perl CGI seo Search Engine web2 تطوير و صيانة المنتديات vBulletin مشاكل و حلول للمنتديات و المواقع المشكله و الحل و الصيانة الهاكات برودكت بلقن Product - Plugins استايلات قوالب واجهاتstyle - template حراج انترنت مستعمل + جديد اشهار مواقع تبادل اعلانات بيع و شراء منتديات ستلايت فضائيات قنوات ترددات كامات شفرات مفاتيح شيرنج Sharing كروت ساتلايت و الرسيفرات الشعر العام البوح بالخافي فصحى نبطي الخاطرة الأدبية خواطر منوعه قصص روايات الكمبيوتر الحاسب والاجهزة العام البرامج الكاملة وشروحها وتعريب البرامج البرامج العربية والمعربة البرامج المشروحة و شروحات البرامج فوتوشوب photoshop رسم تصميم فلاتر فرش تدرجات خطوط باترن اشكال جوال بلوتوث جميع اجهزة الجوال mobile bluetooth بوكيت بي سي Pocket PC اجهزة كفية بلوتوث bluetooth فلاش سويتش سويش ماكس FLASH _ SWiSH الهكرز و الاختراق حماية فيروسات اختراق كراك hacker crack virus حواء للبنات نسائي للحريم فقط والبنوتات المطبخ للطبخ والاكل وكل امور المطابخ تطوير الذات و البرمجة اللغوية العصبية عيادة طبية للفلوق وغيرها صحه وعلاج health طقها والحقها الرياضي رياضه عربيه منوعه رياضه اجنبيه دوري اسباني وايطالي وغيره قنص صيد رحلات برية بحرية سيارات دراجات نارية تفحيط ترهيم
جميع الحقوق محفوظة مدرسة المشاغبين منتديات مدرسة المشاغبين  Copyright © All rights reserved sitemap