BPL Kullanımı

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

BPL Kullanımı

Mesaj gönderen Lost Soul »

BPL (Borland Package Library) borlandın sunmuş olduğu moduler çalışmaya olanak sunan bir teknolojidir.
Bu özellik sayesinden hem boyut olarak çok küçük boyutlarda programlar oluşturabilir;
hem daha hızlı uygulamalar geliştirebilir.
Hem de modüler çalışma sağlayabilirsiniz ki moduüler çalışma büyük projelerde
sıkıntılı bir çalışma gibi görünse de programın geliştirilmesinde bizlere çok büyük kolaylıklar sağlar aslında.

Zaten kullandığınız delphi sürümlerinin eriştiği kütüphanlere dikkat ederseniz. Componentlerin bpl uzantılı kütüphanelerden ibaret olduğunu görebilirsiniz.

BPL Kullanmak için aşağıdaki adımları izleyin
[*]Yeni bir project group oluşturun
[*]Proje Grubunuza bir Form uygulaması projesi ve bir package projesi ekleyin.
[*]Ana Programınız aktif proje iken Projejt/Options/Packages sekmesine gelip "Build with runtime packages" seçeneğini işaretleyin
[*]Package Library (Paket uygulamanızı) aktif edin ve Project/Options/directories sekmesinde "Output directory" kutucuğuna paketin ereye compile edileceğini belirtin. (adres olarak Çalışma klasörünüzü belirtmeniz tavsiye edilir)
bu adımı uygulamazsanız varsayılan olarak delphinin default bpl output directory klasörüne derlenir.
[*]Programınızı yazın ve derleyin :)


Aşağıda bpl'nin proje içerisinde kullanımına örnekeyen kodlar gösterilmektedir.
Verilen örnekte bağımsız form ve embedded form özellikleri ayrı ayr gösterilmektedir.

Örnekte de göreceğiniz üzre bpl kullanımı aslında çok ama çok basittir.
Bu örneği bir kez kavradınız mı gerisi artık sizin hayal gücünüze kalmıştır.
Faydalı olması dileğiyle iyi günler dilerim.

Paketi çağıran ana program:

Kod: Tümünü seç

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, AppEvnts;

type
  Tmain = class(TForm)
    Panel1: TPanel;
    ypanel: TPanel;
    Button1: TButton;
    Button2: TButton;
    secenekler: TRadioGroup;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  main: Tmain;
  Paketim : HModule;
  ModFolder:String;

implementation

{$R *.dfm}


procedure Tmain.Button1Click(Sender: TObject);
begin
if Paketim<>0 then
  try
  UnloadPackage(Paketim);
  except
  end;
if Paketim<>0 then
try
  FinalizePackage(Paketim);
  except
  end;
Paketim:=LoadPackage(ModFolder+'paket.bpl');
//InitializePackage(PcariKart);
end;

procedure Tmain.Button2Click(Sender: TObject);

begin


Paketim:=LoadPackage(ModFolder+'paket.bpl');
end;

procedure Tmain.Button3Click(Sender: TObject);
begin
if Paketim<>0 then
  try
  UnloadPackage(Paketim);
  except
  end;
if Paketim<>0 then
try
  FinalizePackage(Paketim);
  except
  end;
end;

procedure Tmain.FormCreate(Sender: TObject);
var ln : string;
begin
Modfolder:=extractfilepath(paramstr(0));
ln:=#13#10;
showmessage ('paket önceden bir kez yüklenmiş'+ln+
             've yüklemeden sonra Finalize edilmemiş ise '+ln+
             'Program hata verir'+ln+
             'Eğer bir kez paketi yüklemişseniz'+ln+
             'Önce Kaldır buyonun tıklayın sonra Yükle diyin'+ln+
             'Yada ''kaldır ve yükle'' butonunu tıkayarak bu işi'+ln+
             'Programa bırakın'+ln+
             'Peki o zaman neden bu seçeneği koydum' +ln+
             'iki sebebi var:' +ln+ln+
             '1: Bazen projelerde kaldır ve yükle opsiyonu kullanışlı olamayabiliyor' +ln+
             'bu çok nadiren oluyor ama olmayabiliyor işte'   +ln+ln+
             '2: Paketleri şuursuzca kullanınca başınıza neler gelebileceğini görebilesiniz diye'+ln+
             'böylece bu kadar try except kontorlü koymaya ne gerek var soru işaretinini de kafalardan silmiş olduk');
end;

end.
Paketin kendisi:

Kod: Tümünü seç

unit fPaketForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  Tpaketform = class(TForm)
    durum: TPanel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  paketform: Tpaketform;

implementation

{$R *.dfm}

initialization
case TRadioGroup(Application.MainForm.FindComponent('secenekler')).ItemIndex of
0: // Ayrı pencere
  begin
  if paketform=nil then paketform := TPaketForm.Create(Application);
  paketform.durum.Caption:='Form ayrı pencere olarak görüntüleniyor';
  end;
1: // Panel içinde
  begin
  if paketform=nil then paketform := TPaketForm.Create(Application);
  PaketForm.Align:=AlClient;
  Paketform.BorderStyle:=bsNone;
  Paketform.Parent:=TWinControl(Application.MainForm.FindComponent('ypanel'));
  paketform.durum.Caption:='form Embedded olarak görüntüleniyor';
  end;
end; //Case
Paketform.Show;
finalization
if Paketform<>nil then Paketform.Destroy;
end.
Dosya ekleri
BPL KULLANIMI.rar
Örnek BPL ullanımı. Delphi 2007 de derlenmiştir.
(58.9 KiB) 542 kere indirildi
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: BPL Kullanımı

Mesaj gönderen vkamadan »

Merhaba ,

Host uygulamada "Build With Runtime Packages" demeden dinamik olarak BPL yüklenebiliyor fakat sınıflara erişilemiyor hiç bir işe yaramıyor, runtime paketleri exe içine dahil edecek şekilde yapılan derlemerde BPL kullanmak mümkün değilmidir?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: BPL Kullanımı

Mesaj gönderen Lost Soul »

Evet malesef Build With Runtime Packges (xe3 de link with runtime packages olarak geçmekte) kaldırılınca bpl içindeki classa erişilemiyor. (En azından registerclass ile durum böyle)
Projelerde bplden host uygulamaya tek yönlü erişim politikaasıi izlenirse pek de önemli değil aslında :)
Diğer türlü findwindow tarzı şeyler denenebilir ama ne kadar sağlıklı olur şüpheli :)

Ayrıca Bu linkte güzel ipuçları var.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: BPL Kullanımı

Mesaj gönderen vkamadan »

@Lost Soul bilgiler ve paylaşımın için çok teşekkür ederim .
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla