Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi IDE'sine Eklenti Yapmak - 2
#1
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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. Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol, Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol, Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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ı:
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

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.
{ talk is cheap show me the code. }
Cevapla
#3
Merhaba,
Değerli anlatım ve emekleriniz için çok teşekkür ederim.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
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?
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
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
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBu 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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
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, Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlEvet 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.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#10
Aynen, excel de felan var ya, tam süper olur Smile
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi'de Inno Setup | Sorgulu Uninstall İşlemi Halil Han Badem 10 301 09-08-2018, Saat: 10:43
Son Yorum: SimaWB
  Delphi'de Dökümantasyon Nasıl Yapılır uparlayan 21 736 17-07-2018, Saat: 16:54
Son Yorum: uparlayan
  Kitap İnceleme ( Algoritma ve Delphi 2005 ) #1 boreas 0 161 02-06-2018, Saat: 15:39
Son Yorum: boreas
  Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) csunguray 6 855 09-04-2018, Saat: 02:34
Son Yorum: dkadir
  Delphi Direktif Kullanımı narkotik 3 421 12-03-2018, Saat: 00:44
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi