Konuyu Oyla:
  • Derecelendirme: 5/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi IDE'sine Eklenti Yapmak - 2
#1
İ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 Smile  
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:
lbM2Ol.gif


Projenin kaynak kodları:
https://yadi.sk/d/0O1QJ0d53Qz7ex

IDE'ye eklenti hazırlama konusu devam edecek Smile
There's no place like 127.0.0.1
WWW
Cevapla
#2
Mükemmel bir anlatım, çok teşekkür ederim. Kapsamlı bilgiler, kaynak kod ve gif olarak kullanımın gösterilmesi her şeyi tamamlıyor.
Cevapla
#3
Merhaba,
Değerli anlatım ve emekleriniz için çok teşekkür ederim.
Cevapla
#4
Çok faydalı 10 numara evladiyelik bir makale olmuş, elinize sağlık.

Bu makalenin 3. bir bölümü olacak mı? Mesela kaynak koda bir şeyler ekleyen türden?
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#5
Merhaba,
Delphi 10.2.2.2004 sürümüne kurdum. Sorunsuz ve stabil çalışıyor. 
Tekrar teşekkürler. 
İkinci versiyon için talepleri topluyor musunuz? Smile
Cevapla
#6
Ufkumu açan bir örnek, elinize sağlık hocam.
Cevapla
#7
Teşekkürler SimaWB hocam çok güzel, kaliteli ve emek verilmiş bir paylaşım.
Ellerinize sağlık
Cevapla
#8
(26-12-2017, Saat: 23:55)uparlayan Adlı Kullanıcıdan Alıntı: Bu makalenin 3. bir bölümü olacak mı? Mesela kaynak koda bir şeyler ekleyen türden?
Evet başka bölümler de olacak. IDE üzerinde gördüğünüz herşeye müdahale edebiliriz. Siz nasıl bir özelliğe ihtiyacınız olduğunu belirtin Wink


(26-12-2017, Saat: 23:56)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Delphi 10.2.2.2004 sürümüne kurdum. Sorunsuz ve stabil çalışıyor. 
Tekrar teşekkürler. 
İkinci versiyon için talepleri topluyor musunuz? Smile

Test edip, sonuç bildirdiğiniz için teşekkür ederim.
Bunu 1. versiyon olarak kabul etmiyorum Smile  O yüzden 2. versiyon için değil, daha önce bahsettiğim DelphiCan'lara özel geliştirmeyi planladığım eklenti paketi için talep alabilirim.
There's no place like 127.0.0.1
WWW
Cevapla
#9
(27-12-2017, Saat: 09:29)SimaWB Adlı Kullanıcıdan Alıntı: Evet başka bölümler de olacak. IDE üzerinde gördüğünüz herşeye müdahale edebiliriz. Siz nasıl bir özelliğe ihtiyacınız olduğunu belirtin Wink

Ansızın elektrik kesintilerine karşın Auto Save gibi bir eklenti fena olmaz.
WWW
Cevapla
#10
Aynen, excel de felan var ya, tam süper olur Smile
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ile .Net Ortamında geliştirilen dll içerisindeki fonksiyon kullanımı yhackup 10 7.802 09-04-2023, Saat: 02:17
Son Yorum: gogo72
  Delphi ve Protocol Buffers SimaWB 10 6.636 10-12-2022, Saat: 15:04
Son Yorum: SimaWB
  Delphi AES 128 ECB PKCS5 Padding ile sorun aegean 1 761 28-11-2022, Saat: 13:07
Son Yorum: aegean
  Delphi ile İşletim Sistemi Yazımı PROGRAMADOR35 13 7.809 26-09-2021, Saat: 21:29
Son Yorum: ekremkocak
  Delphi ile Scada Milenyumotomasyon 18 9.772 28-07-2021, Saat: 10:53
Son Yorum: mehkamaci



Konuyu Okuyanlar: 1 Ziyaretçi