هر برنامه نويس دلفي مطمئنا در طول فعاليت برنامه نويسيش با فايلهاي BPL برخورد داشته ، در اين مقاله سعي ميکنيم کمي در مورد اين فايلها توضيح بديم و نحوه ي ساخت و استفاده از اونها رو هم بررسي کنيم ...
مطمئنا همتون با فايلهاي DLL آشنايي داريد ، به زبان ساده فايلهاي DLL يا Dynamic Link Library ، به شما اين امکان رو مي دند که درون اونها توابع ، متد ها ، اشياء و ... رو ذخيره کنيد و در مواقع لزوم در برنامه ي خودتون اونها رو Load کنيد ...
در اينجا قصد داريم با نوع ديگري از فايلهاي DLL آشنا بشيم!
فايلهاي BPL يا Borland Package Library ، فايلهاي کتابخانه اي هستند که توسط شرکت بورلند ( سابق ) ايجاد شدند ، اين نوع فايلها که مخصوص IDE دلفي و برنامه هاي نوشته شده با زبان دلفي هستند ، مانند DLL ها به شما اين امکان رو ميدن که درون اونها توابع ، متدها ، اشياء و ... ! رو ذخيره کرده و در مواقع لزوم Load کنيد ...


براي درک بهتر مراحل ساخت و استفاده از يک نمونه فايل BPL رو بررسي ميکنيم ، قصد داريم يک Form رو درون يک فايل BPL قرار داده و در برنامه اون رو نمايش بديم ...
براي شروع کار بعد از ورود به محيط دلفي ، کليه ي پروژه هاي در حال ساخت ! رو ببنديد ( با رفتن به مسير File > Close All ) ، در ادامه يک Package جديد ايجاد کنيد ( از مسير File > New > Package ) ، بعد از ساخت Package پروژه رو با ذخیره کنید ...
Package ساخته شده دو قسمت به نامهای Contains و Requires داره ، قسمت Contains شامل دستورات و اشیاء ای هست که شما در قالب یک Unit یا Form درون Package خودتون قرار میدید ، قسمت Requires مربوط به میشه به فایلهای مورد نیاز برای Unit هایی که در قسمت Contains قرار داده اید ...
قصد داریم یک Form رو درون Package قرار بدیم ، برای اضافه کردن یک Form به Package روی قسمت Contains راست کلیک کرده و به مسیر " Add New > Form " برید :



بعد از ساخت فرم اشیاء مورد نظرتون رو درونش قرار بدید و فرم دلخواهتون رو بسازید ، در اینجا قصد داریم فرمی بسازیم که مقداری رو از کاربر دریافت کنه و به برنامه برگشت بده ! ، پس یک Label و یک Edit به همراه یک BitBtn بر روی فرم قرار میدیم :

به این قسمت دقت کنید :
ما در Package خودمون یک تابع تعریف میکنیم که دو ورودی به عنوان Caption فرم و Caption مربوط به Label دریافت میکنه و در بدنه ی تابع Caption ها رو به Form و Label اختصاص میده و در ادامه فرم رو نمایش میده و در آخر هم مقدار وارد شده توسط کاربر رو به عنوان خروجی برگشت میده ، تقریبا چیزی شبیه به یک InputBox ، پس تابع مورد نظرمون رو به صورت زیر تعریف میکنیم :
کد:
کد:
function ShowForm(FCaption, LCaption : String) : String;
کد:
کد:
var  F : TMyForm; begin  F := TMyForm.Create(nil);  try   F.Caption := FCaption;   F.MyLabel.Caption := LCaption;   F.ShowModal;  finally   Result := F.MyEdit.Text;   F.Free;  end; end; 

در OnClick مربوط به دکمه ی بر روی فرم هم باید فرم رو ببندیم :
کد:
کد:
procedure TMyForm.PostBtnClick(Sender: TObject);
کد:
کد:
begin  if MyEdit.Text <> '' then   Close  else   ShowMessage('Please Enter Value !'); end;

برای تنوع ! می تونیم قبل از بستن فرم خالی نبودن Edit رو بررسی کنیم ...


خوب ، بعد از ساخت فرم باید پروژه رو کامپایل کنید ، در هنگام کامپایل پروژه با پنجره ی زیر مواجه خواهید شد :




در ابتدای مقاله ذکر شد که قسمت Requires برای هر Package مربوط به فایلهایی هست که Unit ها سایر اجزایی که در قسمت Contains قرار می دید برای اجرا به اونها نیاز دارند ، وقتی یک Form رو به Package اضافه میکنید باید کتابخانه ی VCL یا Visual Component Library هم به عنوان کتابخانه ی مورد نیاز به پروژه اضافه بشه تا همراه پروژه کامپایل بشه ، VCL مربوط به اشیاء Visual ای هست که در برنامه استفاده شدند ...
در قسمت Requires فایل دیگری با نام RTL.dcp قرار داره که به صورت پیشفرض به پروژه اضافه میشه ، این کتابخانه که همون Run-Time Library هست ، برای همه پروژه های ایجاد شده با دلفی نیاز هست و معمولا دلفی اون رو به صورت پیشفرض به برنامه اضافه میکنه ...
به هر حال ، با دادن پاسخ مثبت به پنجره ی باز شده در هنگام کامپایل فایل vcl.dcp به Package شما اضافه میشه و همراه اون کامپایل میشه ...
بعد از کامپایل پروژه به مسیری که پروژه رو در اون ذخیره کردید برید ، در این مسیر فایل Package با پسوند DPK وجود داره و فایلی با پسوند BPL دیده نمیشه !! ، خروجی BPL مربوط به Package ها در مسیری ذخیره میشه که در قسمت " Tools > Options > Delphi Options > Library - Win32 " و در بخش Package Output Directory مشخص شده ، پس به مسیر گفته شده برید و فایل BPL مربوط به پروژتون رو کپی کنید و در کنار برنامه ای که باید از اون استفاده کنه قرار بدید !
می تونید مسیر فایلهای BPL رو به دلخواه خودتون تغییر بدید ...


خوب ، اما نحوه ی استفاده از فایل BPL ...
برای استفاده از توابع درون یک فایل BPL باید ، ابتدا Package رو در برنامه Load کنیم ، بعد یک تابع رو به تابع درون BPL ارتباط بدیم و در ادامه تابع ارتباط داده شده رو فراخوانی کنیم و در نهایت Package لود شده رو UnLoad کنیم ، یک پروژه ی جدید بسازید ، یک Edit و یک BitBtn بر روی فرم قرار بدید ، در رویداد OnClick مربوط به BitBtn دستورات زیر رو بنویسید :

کد:

var
کد:
کد:
 ShowF : function(FCaption, LCaption : String) :  String;  MyPkg : HMODULE;  FC, LC : String; begin  MyPkg := LoadPackage(ExtractFilePath(Application.ExeName)+'  MyPackage.bpl');  FC := 'Enter Value ... ';  LC := 'Value : ';  if MyPkg <> 0 then   begin    try     @ShowF := GetProcAddress(MyPkg, 'ShowForm');     if Assigned(ShowF) then      Edit1.Text := ShowF(FC, LC)     else      ShowMessage('Function not found !');    finally     UnloadPackage(MyPkg);    end;   end; end;

به یک نکته ی مهم توجه کنید :
ما در هنگام ساخت Package دو کتابخانه ی VCL و RTL رو به عنوان کتابخانه های مورد نیاز قرار دادیم ، برای اینکه برنامه ی ما بتونه از این فایل BPL بدون مشکل استفاده کنه ، باید برنامه رو همراه با کتابخانه های VCL و RTL به عنوان Run-Time Library عرضه کنیم ...
برای این منظور به قسمت Project > Options > Packages برید قسمت Build With Run Time Packages رو فعال کنید و در کادر زیر این گزینه کتابخانه ی VCL و RTL رو وارد کنید :

کد:

vcl;rtl
توجه کنید که باید این فایلها همراه برنامه ی شما باشند تا برنامه ی شما بدون مشکل اجرا بشه ! ، متاسفانه این یکی از محدودیتهای استفاده از Package های BPL هست ...


توجه کنید که اگر در درون Package خودتون از اشیاء دلفی و نوع های مخصوص دلفی مثل String استفاده نکرده باشید ، می تونید با Package خودتون مثل یک فایل DLL رفتار کنید و همچنین نیازی به وارد کردن vcl و rtl به قسمت Requires مربوط به Package نیست تا نیازی به وجود این فایلها در کنار برنامتون باشه که در اینصورت می تونید برنامه ی استفاده کننده از فایل BPL رو هم بدون Package های Run-Time کامپایل و عرضه کنید ( توجه کنید برای این منظور تیک قسمت Build With Run-Time Packages رو بردارید )


توجه : مسیرها و گزینه هایی که در بالا ذکر شد برای دلفی 2010 بود ، اگر دلفی 7 استفاده می کنید به موارد زیر توجه کنید :
برای ایجاد Package جدید به مسیر File > New > Other برید و در صفحه ی New گزینه ی Package رو انتخاب کنید!
مسیر ذخیره ی فایلهای BPL در مسیر Tools > Environment Options و در صفحه ی Library قرار داره!


امیدوارم مفید بوده باشه ، موفق باشید.