Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web

3149
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.