Multi-Device Application (FMX) proje tipinde kullanılan UI (Kullanıcı arayüz nesneleri)
temelde bir varsayılan stile sahiptir. Yani her nesne platforma özgü doğal boyutunda (FixedSize) görünecek şekilde
ayrı ayrı tanımlanmıştır.
FMX nesne stilleri, FMX.Controls.TStyledControl sınıfı içerisinde yer alırlar. FMX platformlarının varsayılan nesne boyutlarında bir değişiklik yapmak için sınıfın temel özelliklerinden AdjustFixedSize virtual metodunu ezmek gerekiyor. Bu metot içerisinde hedef platforma göre her nesnenin varsayılan boyutu TAdjustType enum tipi ile sabitlenmektedir. Bu tip None, FixedSize, FixedWidth, FixedHeight olmak üzere 4 farklı değere sahiptir.
Örneğin Android hedef platformu için TEdit nesnesinin TAdjustType.FixedHeight değeri 32 olarak atanmıştır. Dolayısıyla Android hedef
platformu için geliştirilen bir uygulamada kullandığınız TEdit nesnesi 32 piksel boyutunu aşmayacaktır. Buna bağlı olarak
edit font boyutu (Font.Size) belirlenen Edit yüksekliğinden fazla olması durumunda, Edit nesnesinin metinsel değeri
tam olarak görüntülenmeyecek, yalnızca edit boyutunda görünecektir.
Bu makale kapsamında TEdit nesnesinin AdjustFixedSize prosedürünü ezerek, istenilen boyuta getirilebilen bir Edit nesnesi
oluşturacağız.
1- Yeni bir Multi-Device Application Delphi projesi başlatalım.
2- FMX.Edit referansında yer alan TEdit nesnesini aşağıdaki gibi yeniden tanımlayalım.
Kod: Tümünü seç
type
TEdit = class(FMX.Edit.TEdit)
protected
procedure AdjustFixedSize(const Ref: TControl); override;
end;
"Complete Class at Cursor" menüsünü seçelim. Bu durumda procedure'ün implementation kod kısmı otomatik olarak oluşturulacaktır.
Yeni oluşan procedure yapısı aşağıdaki gibi olacaktır.
Kod: Tümünü seç
procedure TEdit.AdjustFixedSize(const Ref: TControl);
begin
inherited;
end;
platform kontrollerini gerçekleştirip işlem yapmaktadır. Burada amacımız platforma özgü direktifleri devre dışı barakmak ise inherited
kod satırını da silmemiz gerekiyor. Sakıncası ne olabilir derseniz, Edit nesnesi temel sınıfta öncelikle varsayılan boyuta getirilecek,
daha sonra bizim yöntemimiz devreye girecek ve varsayılan boyutları yok sayacaktır.
Kısacası Edit nesnesinin boyutu 2 defa değiştirilecektir.
4- Bu durumun önüne geçmek ve boyutlandırma işleminin yalnızca bir defa çalışmasını sağlamak için inherited direktifini silelim.
Oluşturulan metodun kod kısmında, platforma özgü kısıtlamayı devre dışı bırakmak için Edit'in TAdjustType enum tipine None değerini atayacağız. Bunun için SetAdjustType procedure'ünü kullanacağız.
5- TEdit nesnesinin varsayılan boyut tipini değiştirecek yeni metodu aşağıdaki gibi yeniden düzenleyelim.
Kod: Tümünü seç
procedure TEdit.AdjustFixedSize(const Ref: TControl);
begin
SetAdjustType(TAdjustType.None);
end;
Bunun için forma 2 adet TEdit nesnesi yerleştirelim ve Object Inspector penceresinden özelliklerini aşağıdaki gibi ayarlayalım.
Edit1
Size.Height=65
Text=Merhaba
TextSettings.Font.Size=50
TextSettings.Font.Style.fsBold=True
Width=250
Edit2
Text=Merhaba
TextSettings.Font.Size=50
TextSettings.Font.Style.fsBold=True
Width=250
Bu haliyle kod çalışacaktır. Hâlihazırda masaüstü uygulamalarında nesne boyutu ile ilgili bir kısıtlama olmadığı için (en azından şimdilik

Son bir işlem olarak; tanımladığımız tip ve procedure'ün yalnızca mobil platformlar için geçerli olmasını sağlayacak direktifleri yazalım.
Projenin tamamlanmış halini paylaşıyorum.
Kod: Tümünü seç
unit uBoyut;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.Edit;
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
type
TEdit = class(FMX.Edit.TEdit)
protected
procedure AdjustFixedSize(const Ref: TControl); override;
end;
{$ENDIF}
type
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
{ TEdit }
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
procedure TEdit.AdjustFixedSize(const Ref: TControl);
begin
SetAdjustType(TAdjustType.None);
end;
{$ENDIF}
end.

İyi Çalışmalar
Fesih ARSLAN