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.
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.
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.
Umarım bu kod yardımcı olmuştur. Bana her konuda soru sorabilirsiniz.
Soru sormak için lütfen Soru Formunu doldurun.