İlk makalede Delphi IDE'sine nasıl eklenti yapabileceğimize dair giriş yapmıştım. Şimdi bir başka eklenti örneğini anlatmaya çalışacağım. Bu sefer Dockable Form örneği oluşturacağız.
Nedir Dockable Form?
Aslında Türkçesi her şeyi anlatıyor: Yerleştirilebilir Form
Delphi'yi kullanırken IDE üzerinde sürekli kullandığımız formlar var. Object Inspector, Project Manager, Tool Palette vs. Bunların hepsi Yerleştirilebilir Form'a örnektir. Bu tip formları IDE'nin istediğimiz bir noktasına sabitleyebildiğimiz gibi, bağımsız olarak görünmesini de sağlayabiliyoruz. Aynı şekilde tamamen görünmez yapmak yada tekrar görünür yapmak için IDE'nin ana menüsünden açıp kapatabiliyoruz.
Şimdi bir yerleştirilebilir form yapıp bunu IDE içinde nasıl kullanabileceğimizi görelim:
İlk makalede bahsedildiği gibi yeni bir Package (bpl uzantılı proje) oluşturuyoruz ve Requires kısmına DesignIDE'yi ekliyoruz. Yine ilk makalede anlatıldığı gibi Delphi IDE'sine bir menü elemanı eklememiz gerekecek. Bunun için Project Manager'da Contains üzerinde sağ tıklayıp Add New -> Unit seçiyoruz. Bu unitin içeriği ilk makalede verilen ilk örneğe çok benzer. Bu örnek kodlar IDE'de Help menüsü altındaki Help Wizard içerisine DelphiCan adında bir menü elemanı ekler ve bu eleman seçildiğinde 2. formumuzu (Yerleştirilebilir Form) açar.
Yerleştirilebilir Form'larda dikkat etmemiz gereken kısımlar;
Şimdilik kodlarımız ilk makaledekiyle hemen hemen aynı.
Şimdi ikinci formumuzu, yani "yerleştirilebilir form"umuzu oluşturalım:
Projeye yeni bir form eklemek için Project Manager'da Contains'e sağ tıklayıp Add New -> VCL Form seçiyoruz. Bu formumuzu, aynen VCL uygulama geliştiriyormuşuz gibi istediğimiz şekilde tasarlayabiliriz. Daha sonra bu formu "Yerleştirilebilir Form" yapmak için formumuzun unit'inde uses kısmına DockForm ekliyoruz. Formumuz, normal bir VCL form olduğu için TForm sınıfından türetilmiştir ( class(TForm) ). Biz bu kısmı class(TDockableForm) olarak değiştirmeliyiz. Böylece formumuz IDE üzerinde "sürükle bırak"la hareket ettirilebilecek. Yerleştirilebilir formun en son durumunu, yani nereye sürüklenip bırakıldığı vs. bilgilerini hatırlayabilmesi için constructor ve destructor prosedürlerine şunları yazıyoruz:
Oluşturduğumuz bu unit için yapılacaklar sadece bu kadar! Form ve Unit'imize istediğimiz ismi veriyoruz.
Ben form tasarımı olarak daha önce şuradaki makalede kullandığım RSS formunu kullandım ve formuma isim olarak FormRSS verdim.
Şimdi yukarıda paylaştığım eksik kısımları tamamlayalım:
İlk olarak formumuzu kullanabilmek için uses kısmına unit ismimizi ekleyelim. Ayrıca DeskUtil'i de ekleyelim. DeskUtil, formumuzu IDE'ye tanıtacak fonksiyonların bulunduğu unit'tir.
Yukarıda eksik bıraktığım fonksiyon içerikleri aşağıdaki şekilde olmalı:
Projemizi tamamladık. Şimdi projemizi Build ediyoruz. Sonra Project Manager'da projeye sağ tıklayıp Install'ı seçiyoruz. Projenin yani Package'ın install edildiğine dair bir mesaj ekrana çıkmış olmalı.
Artık eklentimiz IDE içerisinde kullanıma hazır demektir. Bunu kontrol etmek için Help menüsü altındaki Help Wizards'a bakabiliriz. Orada DelphiCan seçeneği olmalı. Buna tıkladığımızda yukarıda tasarladığımız formumuz açılacaktır. Bu formumuzu aynı Object Inspector vs. gibi, IDE'nin istediğimiz bir yerine sürükleyip bırakabilir/tutturabiliriz.
Bendeki son durum şu şekilde:
Projenin kaynak kodları:
https://yadi.sk/d/0O1QJ0d53Qz7ex
IDE'ye eklenti hazırlama konusu devam edecek
Nedir Dockable Form?
Aslında Türkçesi her şeyi anlatıyor: Yerleştirilebilir Form
Delphi'yi kullanırken IDE üzerinde sürekli kullandığımız formlar var. Object Inspector, Project Manager, Tool Palette vs. Bunların hepsi Yerleştirilebilir Form'a örnektir. Bu tip formları IDE'nin istediğimiz bir noktasına sabitleyebildiğimiz gibi, bağımsız olarak görünmesini de sağlayabiliyoruz. Aynı şekilde tamamen görünmez yapmak yada tekrar görünür yapmak için IDE'nin ana menüsünden açıp kapatabiliyoruz.
Şimdi bir yerleştirilebilir form yapıp bunu IDE içinde nasıl kullanabileceğimizi görelim:
İlk makalede bahsedildiği gibi yeni bir Package (bpl uzantılı proje) oluşturuyoruz ve Requires kısmına DesignIDE'yi ekliyoruz. Yine ilk makalede anlatıldığı gibi Delphi IDE'sine bir menü elemanı eklememiz gerekecek. Bunun için Project Manager'da Contains üzerinde sağ tıklayıp Add New -> Unit seçiyoruz. Bu unitin içeriği ilk makalede verilen ilk örneğe çok benzer. Bu örnek kodlar IDE'de Help menüsü altındaki Help Wizard içerisine DelphiCan adında bir menü elemanı ekler ve bu eleman seçildiğinde 2. formumuzu (Yerleştirilebilir Form) açar.
Yerleştirilebilir Form'larda dikkat etmemiz gereken kısımlar;
- Register prosedürü içinde ikinci formumuzu IDE'ye tanıtmalıyız. (Bu örnekte CreateDockForm)
- Eklentimiz kapatılırken formumuzun hafızadan serbest bırakmalıyız. (Bu örnekte RemoveDockForm)
- Gerektiğinde ikinci formumuzu göstermeliyiz. (Bu örnekte ShowDockForm)
unit DelphicanMenu; interface uses ToolsAPI; type TDelphicanMenu = class(TNotifierObject, IOTAMenuWizard, IOTAWizard) public function GetIDString: string; function GetName: string; function GetState: TWizardState; procedure Execute; function GetMenuText: string; procedure Destroyed; end; procedure Register; implementation uses System.SysUtils; procedure CreateDockForm; begin // Daha sonra doldurulacak end; procedure ShowDockForm; begin // Daha sonra doldurulacak end; procedure RemoveDockForm; begin // Daha sonra doldurulacak end; procedure Register; begin RegisterPackageWizard(TDelphicanMenu.Create); CreateDockForm; end; { TDelpicanMenu } procedure TDelphicanMenu.Destroyed; begin RemoveDockForm; end; procedure TDelphicanMenu.Execute; begin ShowDockForm; end; function TDelphicanMenu.GetIDString: string; begin Result := 'SimaWB delphican.com'; // IDE eklentimiz için ayırt edici bir ID end; function TDelphicanMenu.GetMenuText: string; begin Result := 'DelphiCan'; // Ekleyeceğimiz Menu Item'ın başlığı end; function TDelphicanMenu.GetName: string; begin Result := 'DelphiCan Menu Item'; // IDE eklentimizin ismi end; function TDelphicanMenu.GetState: TWizardState; begin Result := [wsEnabled]; // Eklentinin durumu end; initialization finalization RemoveDockForm; end.
Şimdilik kodlarımız ilk makaledekiyle hemen hemen aynı.
Şimdi ikinci formumuzu, yani "yerleştirilebilir form"umuzu oluşturalım:
Projeye yeni bir form eklemek için Project Manager'da Contains'e sağ tıklayıp Add New -> VCL Form seçiyoruz. Bu formumuzu, aynen VCL uygulama geliştiriyormuşuz gibi istediğimiz şekilde tasarlayabiliriz. Daha sonra bu formu "Yerleştirilebilir Form" yapmak için formumuzun unit'inde uses kısmına DockForm ekliyoruz. Formumuz, normal bir VCL form olduğu için TForm sınıfından türetilmiştir ( class(TForm) ). Biz bu kısmı class(TDockableForm) olarak değiştirmeliyiz. Böylece formumuz IDE üzerinde "sürükle bırak"la hareket ettirilebilecek. Yerleştirilebilir formun en son durumunu, yani nereye sürüklenip bırakıldığı vs. bilgilerini hatırlayabilmesi için constructor ve destructor prosedürlerine şunları yazıyoruz:
constructor TFormRSS.Create(AOwner: TComponent); begin inherited; DeskSection := Name; AutoSave := True; SaveStateNecessary := True; end; destructor TFormRSS.Destroy; begin SaveStateNecessary := True; inherited; end;
Oluşturduğumuz bu unit için yapılacaklar sadece bu kadar! Form ve Unit'imize istediğimiz ismi veriyoruz.
Ben form tasarımı olarak daha önce şuradaki makalede kullandığım RSS formunu kullandım ve formuma isim olarak FormRSS verdim.
Şimdi yukarıda paylaştığım eksik kısımları tamamlayalım:
İlk olarak formumuzu kullanabilmek için uses kısmına unit ismimizi ekleyelim. Ayrıca DeskUtil'i de ekleyelim. DeskUtil, formumuzu IDE'ye tanıtacak fonksiyonların bulunduğu unit'tir.
Yukarıda eksik bıraktığım fonksiyon içerikleri aşağıdaki şekilde olmalı:
procedure CreateDockForm; begin if not Assigned(FormRSS) then begin FormRSS := TFormRSS.Create(nil); if @RegisterFieldAddress <> nil then RegisterFieldAddress(FormRSS.Name, @FormRSS); RegisterDesktopFormClass(TFormRSS, FormRSS.Name, FormRSS.Name); end; end; procedure ShowDockForm; begin CreateDockForm; if not Assigned(FormRSS) then Exit; if not FormRSS.Floating then begin FormRSS.ForceShow; FocusWindow(FormRSS); end else FormRSS.Show; end; procedure RemoveDockForm; begin if Assigned(FormRSS) then begin if @UnregisterFieldAddress <> nil then UnregisterFieldAddress(@FormRSS); FreeAndNil(FormRSS); end; end;
Projemizi tamamladık. Şimdi projemizi Build ediyoruz. Sonra Project Manager'da projeye sağ tıklayıp Install'ı seçiyoruz. Projenin yani Package'ın install edildiğine dair bir mesaj ekrana çıkmış olmalı.
Artık eklentimiz IDE içerisinde kullanıma hazır demektir. Bunu kontrol etmek için Help menüsü altındaki Help Wizards'a bakabiliriz. Orada DelphiCan seçeneği olmalı. Buna tıkladığımızda yukarıda tasarladığımız formumuz açılacaktır. Bu formumuzu aynı Object Inspector vs. gibi, IDE'nin istediğimiz bir yerine sürükleyip bırakabilir/tutturabiliriz.
Bendeki son durum şu şekilde:
Projenin kaynak kodları:
https://yadi.sk/d/0O1QJ0d53Qz7ex
IDE'ye eklenti hazırlama konusu devam edecek
There's no place like 127.0.0.1