| Makale Tarihi : 14 Kasım 1999
Yazan:Can Kaynak |
|
Öğeleri Birleştirmek
Formlarımı tasarlarken, kendimi sürekli iki veya
daha çok öğeyi seçerken ve tek bir nesne gibi boyutlandırırken buluyorum. Örneğin
Çoğunlukla bir metin kutusunu forma bırakıyorum,hemen ardından bunu bir etiket
izliyor, daha sonra saatlerimi esaslı öğelerin boyutlarını hizalarını ayarlamaya
harcıyorum. Eğer metin kutusunu hareket ettirmeye ihtiyacım varsa emin olun etiketi de
hareket ettirmem gerekiyor.
Bence bir metin kutusu öğesinin bunu kendi etiketine
anlatması daha kolay olur. TLabelEdit standart kontroller olan TLabel ve TEdit'i içinde
barındırarak nesne hizalama işlemlerini oldukça iyi basitleştirir.
TLabel ve TEdit TLabelEdit'in kurucuları içindedir
ve çalışma-zamanı onların özelliklerine ve metotlarına ulaşabiliriz. Fakat
tasarım-zamanında da ulaşmak bizim işimizi kolaylaştıracaktır. Biz bunu TLabel ve
TEdit'in özelliklerini yayınlayarak her birini property editöre kaydettirerek
yapabiliriz.
unit LabelEdit;
interface
uses
Classes, Controls, DBCtrls, DsgnIntf, StdCtrls;
const
SPACING = 5;
type
TLabelEdit = class(TWinControl)
private
fField: TEdit;
fPrompt: TLabel;
public
constructor Create(Owner: TComponent); override;
destructor Destroy; override;
published
property Field: TEdit read
fField write fField;
property Prompt: TLabel read
fPrompt write fPrompt;
end;
TLabelEditProperty = class(TClassProperty);
procedure Register;
implementation
constructor TLabelEdit.Create(Owner: TComponent);
begin
inherited Create(Owner);
fPrompt := TLabel.Create(Self);
with fPrompt do
begin
Align := alLeft;
Alignment := taRightJustify;
Caption := 'Etiket:';
Layout := tlCenter;
Parent := Self;
end;
fField := TEdit.Create(Self);
with fField do
begin
Ctl3D := True;
Left := fPrompt.Width + SPACING;
Top := 0;
Parent := Self;
end;
Self.Height := fField.Top + fField.Height;
Self.Width := fField.Left + fField.Width;
end;
destructor TLabelEdit.Destroy;
begin
fField.Free;
fPrompt.Free;
inherited Destroy;
end;
procedure Register;
begin
RegisterComponents('KahveBahane', [TLabelEdit]);
RegisterPropertyEditor(TypeInfo(TLabel), TLabelEdit,
'Prompt',TLabelEditProperty);
RegisterPropertyEditor(TypeInfo(TEdit), TLabelEdit, 'Field', TLabelEditProperty);
end;
end.
Artık TLabel ve TEdit özelliklerini formun
üzerindeki tekil öğelermiş gibi düzenleyebiliriz ve bir kerede tek bir sürükle
bırak eylemi ile öğenin tümünü taşıyabiliriz. |