Sola Dayalı Yazabilen TEdit Öğesi.


talignedit.gif (3992 bytes)
TEdit öğesi normalde sadece sola dayalı olarak veri girişi kabul eder. Fakat bazı durumlarda bunun tam tersinin olması gerekir. Örneğin Sayısal bir değeri girerken sağdan sola yazılırsa yazılan sayı daha okunaklı olur. Bunu sağlamanın en iyi yolu TEdit kökenli ve Hizalama özelliğini sağlayan TAlignment sınıfının TEdit'ten türeyen yeni öğeye eklenmesidir. Bunu eklemek için yeni bir component oluşturup bunun kök sınıfını TEdit vermeliyiz.Daha sonra aşağıdaki kodu girmeliyiz:


unit AlignEdit;

interface

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

type
TAlignEdit = class(Tedit)
private
protected
f_iAlign: TAlignment;
procedure SetAlignment(iAlign: TAlignment);
procedure CreateParams(var aParams: TCreateParams); override;
public
constructor Create(aOwner: TComponent); override;
published
property Alignment: TAlignment
    read f_iAlign write SetAlignment default taLeftJustify;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Kahwe', [TAlignEdit]);
end;
constructor TAlignEdit.Create(aOwner: TComponent);
begin
    inherited Create(aOwner);

//Sola dayalıyı varsayılan yap
f_iAlign := taLeftJustify;
end;

procedure TAlignEdit.CreateParams(var aParams: TCreateParams);
const
AlignmentArray: array[TAlignment] of DWord =
            (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
inherited CreateParams(aParams);

aParams.Style := aParams.Style AND (NOT 0) OR (ES_MULTILINE)
            OR (AlignmentArray[f_iAlign]);
end;

procedure TAlignEdit.SetAlignment(iAlign: TAlignment);
begin
    if iAlign <> f_iAlign then
begin
    // Veriyi Kaydet
        f_iAlign := iAlign;

// Pencereyi yeni hizalama sitili ile tekrar yarat.
    RecreateWnd;
end;
end;

end.

yukarıdaki kodda gördüğünüz gibi TAlignment sıfı bir property olarak tanımlanıp TEdit'in Createparams yordamı kullanılarak style değişkenine ekleniyor.Her hizalama değişikliğinde mutlaka pencereyi tekrar yaratmalıyız. Aksi taktirde ypılan değişiklik edit nesnesinde görünmez. Bu tıpkı Refresh yapmak gibi birşey.
PackInstall.gif (4176 bytes)
Acemiler için:Eğer bu kodu çalışmasını istiyorsanız önce bir Öğe Paketi yaratmalısınız. Bunun için  File/New komutunu çalıştırın. Karşınıza çıkan listeden package itemini seçin ve ok tuşuna basın. Paketi  bir dizinin altına kaydedin.
İkinci olarak yeni bir öğe yaratacağız. Component/New component komutunu çalıştırın. Buraya Ancestor Type sahasına TEdit girin. Class Name sahasına TAlignEdit girin ve üç nokta ile nitelenmiş düğmeye tıklayarak istediğiniz yere kaydedin. Dikkat ClassName ile aynı olmalıdır fakat başında T olmayacak.Buradan install butonunu seçip daha önce kaydettiğiniz paketin içerisine atabilirsiniz. Daha sonra yukarıdaki kodu girip paketi kurun.
newcomp.gif (4989 bytes)
Umarım bu kod yardımcı olmuştur. Bana her konuda soru sorabilirsiniz.
Soru sormak için lütfen Soru Formunu doldurun.
xxxxxx