Delphi’de yeni bileşen oluşturma

07.06.2018 tarihinde Delphi 7’de Yeni bir Görünmeyen VCL bileşeninin oluşturulması konusu eklenmiştir.

Nesneye yönelik programlama dilleriyle yazılım geliştiren programcıların çoğu kullandıkları dille birlikte gelen hazır bileşenleri kullanmaya alışıktırlar. Bazen mevcut bileşenlerin yetersiz kalacağı durumlarda söz konusudur. Bu durumda yeni bir bileşen oluşturmak gerekir.

Yeni bir bileşen oluşturmak Delphi’de çok kolaydır. Yeni bir bileşen oluşturmakla Delphi’nin VCL (Visual Component Library) kütüphanesi genişletilmiş olur. Oluşturulan yeni bileşen artık yeni her uygulamada kullanılabilir.

Delphi Bileşen Paketleri

Tasarım anı bileşen paketleri : Delphi ortamına yüklenebilirler, genellikle bileşen özellik editörleri ve kaydetme kodu gibi işlemlerin tasarım anı kısımlarını içermektedirler. Geliştirme ortamına (IDE) yüklenebilirler.

Çalışma zamanı (Run Time) bileşen paketleri : Delphi uygulamaları tarafından çalışma anında kullanılırlar, geliştirme ortamına (IDE) direkt yüklenmezler. Derlenmiş halde bulunduklarından uygulamayla birlikte serbestce dağıtılabilirler.

Normal bileşen paketleri : Geliştirme ortamına yüklenemezler ve otomatik olarak çalışma anı bileşen paketleri listesine de eklenmezler. Bu tür paketler diğer bileşen paketleri tarafından kullanılan hizmet paketleri için kullanılırlar.

Hem tasarım hem de Çalışma zamanı bileşen paketleri : Genellikle birçok bileşen içeren bileşen paketlerinin hem Tasarım anı hem de Çalışma zamanı bileşenleri vardır. Tasarım anı bileşenleri ile özellikler yüklenir ve paketteki bileşenler kaydedilir. Çalışma anı bileşenleri ise çalışma anında kullanılır. Tek bir bileşen dosyasında hem tasarım hem de çalışma zamanı bileşen kodları birlikte bulunabilir.

Temel Bileşen Sınıfları

Delphi bileşen sınıfları hiyerarşisinde en üstte TObject nesne sınıfı yer almaktadır. Delphide’ki tüm bileşenler TObject sınıfından türetilmektedir. Delphinin bazı bileşenlerinin hangi bileşenlerden üretildiklerini ve bileşenlerin birbirleri ile olan ilişkilerini gösteren resim aşağıda görülmektedir :

Yeni bir bileşeni mevcut bir bileşenden veya kullanılabilir bir bileşene karşılık gelmeyen özet (abstract) bir bileşenden türetebilir. Örneğin TMemo bileşeninden oluşturulacak Yeni bileşen TMemo’nun tüm özelliklerini barındıracağı için değişiklik zor olacaktır. TMemo‘nun türetildiği TCustomMemo özet (abstract) bileşendir. Sadece temel özellikleri barındırdığı için yeni bileşen oluşturmak daha kolay olacaktır. Delphi’de programcıların işini kolaylaştırmak için birçok bileşenin türetildiği özet bileşenleri mevcuttur.

Türetilen yeni bileşen türetildiği bileşenin tüm özellik, yöntem ve olaylarını kalıtımsal olarak devralacaktır. Bu yeni bileşene ek özellikler, yöntemler ve olaylar eklenebilir, Mevcut özet (abstract) veya ezilebilecek (virtual) biçimde tanımlanmış yöntemleri değiştirebilir.

Delphi programcıların islerini hızlandırmak ve kolaylaştırmak amacıyla hazır olarak bir çok hazır fonksiyon ve sınıf sunar. Bileşen sınıfları temel olarak türetildikleri yerlere göre üç grupta ele alınabilir:

1- Görülebilen Bileşenler : TControl ‘dan türetilmiş bütün sınıflar bu gruba girer. İki farklı türü vardır :

a- Pencereli Bileşenler : Delphi Görsel Bileşen Kütüphanesinin en büyük bileşen grubudur. TWinControl’den türemişlerdir. Bir pencereye dayalı bütün görünür (visual) bileşenlerin ebeveyn sınıfıdır. Bu sınıftan türetilmiş olan bileşenler windows mesajlarını, giriş (Focus) odağını alabilirler. Bu pencerelerde API fonksiyonları için kullanılabilecek pencere tutamaçları (Handle) kullanılabilir. Eğer bir bileşenin Handle numarası var ise, bu bileşen işletim Sistemi tarafından tanınabilmektedir. Herhangi bir programdan bu Handle numarası bilindiği takdirde, ilgili sınıfa ulaşılabilir. Örneğin TButton.

b- Penceresiz Bileşenler : TGraphicControl’den türemişlerdir. Bir pencere tutamacı (Handle) olmayan, görünür bileşenlerin ebeveyn sınıfıdır. Tutamaçları yoktur. Windows mesajlarını, giriş (Focus) odağını alamazlar. Pencereli denetimler gibi başka denetimleri içeremezler. Örneğin TSpeedButton.

2- Görünmeyen Bileşenler : TComponent‘ten türetilmiş bütün sınıflar bu gruba dahildir. Form’a eklendiğinde genellikle bir simge olarak görünürler. TComponent, bütün bileşenlerin ebeveyn sınıfıdır ve görsel olmayan bileşenler için doğrudan ebeveyn sınıf olarak kullanılır. Örneğin TTimer.

Bileşenlerin Erişim Kontrolü

Bileşenlerde (nesne) yöntem, olaylar ve diğer tanımların farklı erişim kontrolü vardır. Bir bileşen (nesne) içinde örneğin bir prosedüre erişim serbest iken başka bir prosedür veya değişkene erişim yasak olabilir. Bunun için farklı erişim seviyeleri belirlenmiştir :

Private : Sadece, sınıfın tanımlanmış olduğu unit’in içerisindeki koddan ulaşılabilir. Detayları ve değişkenleri gizlemek için kullanılır.

Protected : Sınıf yada bu sınıfın torunlarının tanımlandığı unit(lerin) içerisindeki kodlardan ulaşılabilir.

Public : Tüm kodlara ulaşılabilir. Kullanacak programcının erişmesi istenen kodlar bulunur.

Published : Tüm kodlara ulaşılabilir. Object Inspector’da görünecek özellikler içindir.

Aşağıda erişim kontrol seviyeleri için örnek bir bileşen kodu bulunmaktadır :

...
type
  TZar = class(TGraphicControl)
    private
        FDeger : Integer;
        FZarArkaRenk : TColor;
        FZarRenk : TColor;
        procedure DegerAyarla(Value : Integer);
        procedure ZarArkaRenkAyarla(Value : TColor);
        procedure ZarRenkAyarla(Value : TColor);
        procedure WMSize(var Message: TWMSize); message WM_PAINT;
    protected
        procedure Click; override;
        procedure DblClick; override;
        procedure Paint; override;
    public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        procedure ZarYuvarla;
    published
        property OnClick;
        property Deger : Integer read FDeger write DegerAyarla default 1;
        property ZarArkaRenk : TColor read FZarArkaRenk write ZarArkaRenkAyarla default clsilver;
        property ZarRenk : TColor read FZarRenk write ZarRenkAyarla default clwhite;
  end;

procedure Register;
...

Bileşenlerde Özellikler, Olaylar ve Metodlar

Özellikler (Properties), bileşenler için gerekli değerlerin değiştirilebilmesini ve ayarlanabilmesini sağlar. Uygulamanın tasarımı sırasında Form veya Bileşen seçili iken Published kısmında belirlenen özellikler Object Inspector‘un Properties kısmında görünür. Bu özellikler buradan değiştirilebilir. Özellikler çalışma esnasında kod ile de değiştirilebilirler.

Bileşenlerin (nesnelerin) değişkenlerine doğrudan ulaşılamaz. Bu sebeple değeri okunacak ve değştirilecek her değişken için özellik eklenmelidir.

Aşağıdaki örnekte TColor tipinde ZarArkaRenk özelliği tanımlanmıştır. Read tanımı ile private kısmında tanımlı FZarArkaRenk değişkeninden değer okunmakta (Programcı değişken private kısmında olduğu için doğrudan ulaşamaz), Write tanımı ile yine private kısmında olan ZarArkaRenkAyarla prosedüre ile değer yazılmaktadır. Default kısmında bileşen ZarArkaRenk özelliğinin varsayılan değeri (clSilver) ayarlıdır.

published
...
 property ZarArkaRenk : TColor read FZarArkaRenk write ZarArkaRenkAyarla default clsilver;
...

Eğer özelliğin tipi Integer, String vb temel tiplerdense Read ve Write kısımları için prosedür yazmaya gerek olmayabilir. Fakat bu tiplerde de prosedür yazılabilir. Bazı özellikler için Tasarım anı bileşeni yazılarak diyalog oluşturulabilir.

Olaylar (Events) bileşenlerin kullanacağı, etkileneceği standart sistem olaylarının (OnClick, OnDblClick vb) tanımlanmasıdır. Published kısmında Object Inspector‘un Events kısmında görünecek olaylar tanımlanır. Protected kısmında ise tüm olaylar tanımlanmıştır.

...
protected
 ...
 procedure Click; override;
 procedure DblClick; override;
 procedure Paint; override;
 ...
published
 ...
 property OnClick;
 ...

Metodlar (Methods), bileşende programıcının kullanabileceği prosedür ve fonksiyonlardır. Metodlar, Published kısmında tanımlanırlar. Object Inspector‘da görünmezler. Kod sayfasında bileşenin adı yazılıp nokta işareti konulduğunda gelen liste diğer temel metodlarla birlikte yer alırlar.

public
...
 procedure ZarYuvarla;
...

Delphi 7’de Yeni bir VCL bileşeninin oluşturulması

Delphi’de File->New->Other->Component seçilerek yeni bileşen oluşturulabilir. Bu seçeneğin seçilmesi ile ekrana beş kutudan oluşan bir diyalog gelir :

Burada Ancestor Type kısmında yazılmak istenen bileşenin türetileceği bileşen seçilir. Bütün bileşenler, diğer bileşenlerden veya TComponent bileşeninden oluşturulur. Sonradan oluşturulan türetilmiş bileşen türetildiği bileşenin tüm özelliklerini barındırır.

Class Name kısmına ise yazılacak bileşenin adı yazılır.

Palette Page kısmında ise bileşenin yer almasının istenilen Palet sayfasının ismi seçilir. Genellikle Samples sayfası tercih edilir. Buraya farklı bir isim girilerek yeni bir Palet sayfası da oluşturulabilir. Bu bilgiler girildikten sonra OK tuşuna basılarak diyalog kapatılır.

Ekrana otomatik doldurulmuş kod sayfası gelecektir. Bu kod sayfasına gerekli kodların yazılması ve eklemelerin yapılmasından sonra kodlar .pas uzantılı olarak kaydedilir. Bu .pas uzantılı bileşen delphiye tanıtılabilir ve kullanılabilir.

1- Delphi 7’de Yeni bir Pencereli VCL bileşeninin oluşturulması örneği

Aşağıda TButton bileşeninden türetilmiş yeni bir pencereli bileşen görülmektedir. Bileşenin ismi TYeniButton‘dur. Bileşen oluşturmaya basit bir örnektir.

Önce Component menüsünden New Component… seçilerek bileşen oluşturma diyalogu açılır. Aşağıda yeni bileşen için doldurulmuş hali görülmektedir :

Yeni Pencereli Vcl Bileşen

Diyalog OK tuşu ile kapatıldığında bir bileşen için temel kodların bulunduğu Kod sayfası açılacaktır :

unit YeniButton;

interface

uses
  SysUtils, Classes, Controls, StdCtrls;

type
  TYeniButton = class(TButton)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TYeniButton]);
end;

end.

Register fonksiyonu standarttır. Bileşenin Palet sayfasına kaydedilmesini sağlar.

Bu koda eklemeler ve kodda değişiklikler yapılarak bileşen oluşturulacaktır. Yeni oluşturulacak TYeniButton bileşeninde TButton‘dan farklı olarak başlangıçta Font adının “Comic Sans MS” ve Font büyüklüğünün “10” olması isteniyor. Bunun için koda aşağıdaki eklemeler yapılıyor :

unit YeniButton;

interface

uses
  SysUtils, Classes, Controls, StdCtrls;

type
  TYeniButton = class(TButton)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    constructor Create(AOwner : TComponent); override;
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

constructor TYeniButton.Create(AOwner : TComponent);
begin
  inherited Create( AOwner );
  Font.Name := 'Comic Sans MS';
  Font.Size := 10;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TYeniButton]);
end;

end.

Başlangıçta bileşen oluşturma sırasında işlem yapılacağı için public kısmına Constructor Create tanımı ve alt kısma constructor TYeniButton.Create oluşturucu prosedür ekleniyor.

Create kodu bütün bileşenlerde bulunur. Eğer yeni bir bileşende yoksa türetildiği atasının Create kodlarınını otomatik kullanacağı ve yeni bir ekleme ihtiyacı duyulmadığı için yazılmamıştır. Bu bileşende Create kodunda ekleme yapılacağı için yazılmıştır.

Bileşenler türetildikleri atalarının yöntem, olaylarını ve diğer tanımlarını otomatik kullanırlar.

Create koduna inherited Create(AOwner : TComponent); eklenmiştir. Bunun anlamı bileşenin önce türetildiği atasının Create kodlarını gerçekleştirileceğidir. Bu kod eklenmezse sadece bileşenin kendi Create kodu gerçekleştirilir. Büyük ihtimal bileşen ve onu kullanacak uygulama hata verir veya kapanır. Çünkü bileşenler türetildikleri atalarının kodlarından bağımsız değildirler. Inherited kodu istisnai durumlarda eklenmez.

Inherited kelimesi türetilen atanın kodlarının gerçekleştirilmesi sağlamaktadır. Oluşturucu Consructor Create kodunda en başa yazılırlar. Diğer metodlarda duruma göre kodun en başında veya en sonunda yazılırlar. Yokedici Destructor Destroy kodunda ise en sona yazılırlar.

Inherited kodundan sonra Yazıtipinin adını ve yüksekliğini belirleyen kodlar eklenmiştir. Bu kodlar başlangıç içindir. Tasarım anında değiştirilebilirler.

Bileşenler genellikle Delphi’nin Imports alt dizinine kaydedilirler.

Not Rad Studio’larda bileşen oluşturma mantığı benzer olmasına karşın Tek bir diyalog yerine bileşen oluşturma sihirbazı şeklinde birden fazla sayfadan oluşan diyalog kullanılmaktadır.

Rad studiolarda yeni bileşen oluşturma

Delphi 7’de Bileşenin Kurulması

Bileşen kaydedildikten sonra Component menüsünden Install Component seçilerek bileşenin kurulmasına başlanır.

Bileşen kurma diyalogu4

Into existing package tabı ile bileşen var olan paketlerden birine eklenir. Değişiklik yapılmazsa bileşen User Component dclusr.dpk paketine kaydedilir. Into new package tabı ile yeni paket oluşturulup ona eklenebilir.

OK tuşu ile devam edilir.

Paket diyalogu

Paket diyalogu açılır. Bu diyalogda Compile tuşuna ve hata çıkmazsa Install tuşuna basılarak kurma tamamlanır. Değişiklik yapılmamışsa bileşen User Component dclusr.dpk paketine kaydedilmiştir. En son paket kaydedilsin mi sorusuna Yes denilerek paket kaydedilerek kapatılır. Bileşen tanımlandığı Palet sayfası kısmında kullanıma hazırdır.

Yeni bileşen ve türetildiği bileşen uygulamada aşağıdaki şekilde görülmektedir :

Uygulama içinde yeni bileşen ve türetildiği bileşen

Not Rad studio’larda bileşeni kurmak için bileşenin bulunduğu paketi açarak sağ tarafta paket ismine sağ tıklayarak Compile ve Install yapmak yeterlidir. Eğer bileşenin hazır paketi yoksa sadece unit dosyası varsa Yeni bir paket oluşturup unit dosyasını o pakete ekleyerek (sağ tıklayıp Add diyerek) kaydetmek ve yukarıdaki gibi paketi kurmak yeterlidir. En son paketteki değişiklikler aynı menüde Save ile kaydedilir. Bir pakete birden fazla bileşen eklenip hepsi bir seferde kurulabilir.

Rad studio'larda paket ve içindeki unit

Paket sağ tıklama menüsü

2- Delphi 7’de Yeni bir Penceresiz VCL bileşeninin oluşturulması örneği

Aşağıda TGraphicControl bileşeninden türetilmiş TZar adlı yeni bir penceresiz bileşen görülmektedir. TZar formda Zar şeklinde görünen basit bir bileşen örneğidir.

Önce Component menüsünden New Component… seçilerek bileşen oluşturma diyalogu açılır. Bileşen Ancestor type kısmında TGraphicControl seçilerek diyalog OK tuşu ile kapatıldığında bir oluşan temel kodların bulunduğu kod sayfasına aşağıdaki kod girilir :

{
  TZar Delphi Component (TZar Delphi Bileşeni)
  
  Based on the TDice component Copyright © 1995 by Zane Rathwick
  TDice bileşeni temel alınmıştır. Copyright © 1995 by Zane Rathwick
}

unit Zar;

interface

uses Messages, Windows, SysUtils, Classes, Controls, Forms, Menus, Graphics;

type
  TZar = class(TGraphicControl)
    private
        FDeger : Integer;
        FZarArkaRenk : TColor;
        FZarRenk : TColor;
        procedure DegerAyarla(Value : Integer);
        procedure ZarArkaRenkAyarla(Value : TColor);
        procedure ZarRenkAyarla(Value : TColor);
        procedure WMSize(var Message: TWMSize); message WM_PAINT;
    protected
        procedure Click; override;
        procedure DblClick; override;
        procedure Paint; override;
    public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        procedure ZarYuvarla;
    published
        property OnClick;
        property Deger : Integer read FDeger write DegerAyarla default 1;
        property ZarArkaRenk : TColor read FZarArkaRenk write ZarArkaRenkAyarla default clsilver;
        property ZarRenk : TColor read FZarRenk write ZarRenkAyarla default clwhite;
  end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('Samples', [TZar]);
end;

procedure TZar.DegerAyarla(Value : Integer);
begin
 FDeger := Value;
 if FDeger < 0 then FDeger := 0;
 if FDeger > 6 then FDeger := 6;

 Paint;
end;

procedure TZar.ZarArkaRenkAyarla(Value : TColor);
begin
 FZarArkaRenk := Value;
 Paint;
end;

procedure TZar.ZarRenkAyarla(Value : TColor);
begin
 FZarRenk := Value;
 Paint;
end;

procedure TZar.Click;
begin
 inherited Click;
end;

procedure TZar.DblClick;
begin
 inherited DblClick;
 ZarYuvarla;
end;

constructor TZar.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);

 FDeger := 1;
 FZarArkaRenk := clsilver;
 FZarRenk := clwhite;

 width := 32;
 height := 32;
end;

destructor TZar.Destroy;
begin
 inherited Destroy;
end;

procedure TZar.WMSize(var Message: TWMSize);
begin
 inherited;
 {Boyutlandırma sabit}
 Width := 32;
 Height := 32;
end;

procedure TZar.Paint;
var mybitmap : Tbitmap;
begin
  mybitmap := Tbitmap.create;
  mybitmap.width := 32;
  mybitmap.height := 32;
  {Arka renk}
  mybitmap.canvas.brush.color := FZarArkaRenk;
  mybitmap.canvas.pen.color := FZarArkaRenk;
  mybitmap.canvas.rectangle(0, 0, width, height);
  {Zar rengi}
  mybitmap.canvas.pen.color := clblack;
  mybitmap.canvas.brush.color := FZarRenk;
  mybitmap.canvas.roundrect(0, 0, width, height, 7, 7);

  {Noktalar çiziliyor}
  case FDeger of
     1: begin
        mybitmap.canvas.pen.color := clBlack;
        mybitmap.canvas.brush.color := clBlack;
        mybitmap.canvas.ellipse(13, 13, 19, 19);
        end;
     2: begin
        mybitmap.canvas.pen.color := clBlack;
        mybitmap.canvas.brush.color := clAqua;
        mybitmap.canvas.ellipse(5, 5, 11, 11);
        mybitmap.canvas.ellipse(21, 21, 27, 27);
        end;
     3: begin
        mybitmap.canvas.pen.color := clBlack;
        mybitmap.canvas.brush.color := clYellow;
        mybitmap.canvas.ellipse(13, 13, 19, 19);
        mybitmap.canvas.ellipse(5, 5, 11, 11);
        mybitmap.canvas.ellipse(21, 21, 27, 27);
        end;
     4: begin
        mybitmap.canvas.pen.color := clBlack;
        mybitmap.canvas.brush.color := clGreen;
        mybitmap.canvas.ellipse(5, 5, 11, 11);
        mybitmap.canvas.ellipse(21, 21, 27, 27);
        mybitmap.canvas.ellipse(5, 21, 11, 27);
        mybitmap.canvas.ellipse(21, 5, 27, 11);
        end;
     5: begin
        mybitmap.canvas.pen.color := clBlack;
        mybitmap.canvas.brush.color := clBlue;
        mybitmap.canvas.ellipse(5, 5, 11, 11);
        mybitmap.canvas.ellipse(21, 21, 27, 27);
        mybitmap.canvas.ellipse(5, 21, 11, 27);
        mybitmap.canvas.ellipse(21, 5, 27, 11);
        mybitmap.canvas.ellipse(13, 13, 19, 19);
        end;
     6: begin
        mybitmap.canvas.pen.color := clBlack;
        mybitmap.canvas.brush.color := clRed;
        mybitmap.canvas.ellipse(5, 5, 11, 11);
        mybitmap.canvas.ellipse(21, 21, 27, 27);
        mybitmap.canvas.ellipse(5, 21, 11, 27);
        mybitmap.canvas.ellipse(21, 5, 27, 11);
        mybitmap.canvas.ellipse(5, 13, 11, 19);
        mybitmap.canvas.ellipse(21, 13, 27, 19);
        end;
 end;
 {Bitmap ekrana aktarılıyor}
 canvas.copyrect(rect(0, 0, 32, 32), mybitmap.canvas,rect(0, 0, 32, 32));
 mybitmap.free;
end;

procedure TZar.ZarYuvarla;
begin
 {1 ile 6 arasında rastgele sayı üretiliyor ve çiziliyor}
 DegerAyarla(random(6)+1);
end;

end.

Bu bileşen basit bir zardır. Ekranda çıkan zara çift tıklanarak veya ZarYuvarla fonksiyonunu kullanarak zar rastgele değiştirilmektedir.

TGraphicControl bileşeninden türetilmiş penceresiz bileşenler bileşenin kendi penceresi (Canvas) üzerinde Paint olayı oluştuğunda grafik komutları kullanıp istenilen çizimler yapılarak türetilirler.

Bileşenin Private kısmında kendi değişkenleri ve kendi için kullanacağı prosedürler bulunmaktadır. Protected kısmında bileşenin olayları tanımlanmıştır. Public kısmında programcıların bileşende kullanacağı prosedürler bulunmaktadır. Published kısmında tasarım anında bileşen seçili iken Object Inspector’da görünecek özellikler ve olaylar bulunmaktadır.

TZar bileşenin form üzerinde yerleştirimiş hali aşağıdaki şekildedir :

Zar bileşeni forma eklenmiş

TZar internetten bulunmuş olan Dice adlı bileşenin değiştirilmiş halidir.

3- Delphi 7’de Yeni bir Görünmeyen VCL bileşeninin oluşturulması örneği

Aşağıda görünmeyen bir bileşen olan TTimer sınıfından türetilmiş TBeepTimer bileşeni görülmektedir. TBeepTimer bileşeninde TTimer bileşeninin Interval özelliğine Beep sesi eklenmiştir. Ayrıca Published kısmına bu sesin açılıp kapanmasını sağlayan TimerBeep özelliği ve Sürüm numarası için Surum özelliği eklenmiştir.

Önce Component menüsünden New Component… seçilerek bileşen oluşturma diyalogu açılır. Bileşen Ancestor type kısmında TTimer seçilerek diyalog OK tuşu ile kapatıldığında bir oluşan temel kodların bulunduğu kod sayfasına aşağıdaki kod girilir :

unit BeepTimer;

interface

uses SysUtils, Classes, ExtCtrls;

type
  TBeepTimer = class(TTimer)
  private
    FBeep:Boolean;
    FSurum:string;
    procedure BeepAyarla(Value : Boolean);
    function BeepAl : Boolean;
    procedure SurumAyarla(Value : String);
    function SurumAl : String;
    { Private declarations }
  protected
    procedure Timer; override;
    { Protected declarations }
  public
    constructor Create(AOwner: TComponent); override;
    { Public declarations }
  published
    Property TimerBeep : Boolean read BeepAl write BeepAyarla default True;
    Property Surum : String read SurumAl write SurumAyarla;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TBeepTimer]);
end;

procedure TBeepTimer.BeepAyarla(Value : Boolean);
begin
  FBeep := Value;
end;

function TBeepTimer.BeepAl:Boolean;
begin
  result := FBeep;
end;

procedure TBeepTimer.SurumAyarla(Value : String);
begin
  FSurum := FSurum; // Surum değişmiyor
end;

function TBeepTimer.SurumAl:String;
begin
  result := FSurum;
end;

procedure TBeepTimer.Timer;
begin
  if FBeep then Beep;
  inherited;
end;

constructor TBeepTimer.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FBeep := True;
 FSurum := '1.0';
end;

end.

Bileşen forma yerleştirildiği zaman sadece simge şeklinde görünmektedir. TTimer’den türetildiği için simge TTimer’in simgesidir. Bu simge değiştirilebilir.

Devam edecek…

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.