28-12-2018, Saat: 02:54
Merhaba ;
Mobil uygulamalarımda dinamik nesne oluşumlarında sürekli ihtiyaç duyduğum için ufak çaplı özel bir VertScrollBox yazdım.İki özelliği bulunmakta.
1-) Siz içerisine dinamik oluşturduğunuz nesleri ekledikçe flowpanel gibi ekleyerek gider. Farkı scroll otomatik çıkar. Margin değerleri verebilirsiniz. Kolon sayısını siz belirlersiniz.
2-) Responsive, Kolon değerini ve margin değerlerini vermezsiniz. İçerisine nesne ekledikçe nesnelerin boyunu otomatik ayarlar. Bunu yapmamın nedeni scrollsuz tam sığdırma yapar.
Not ; Gelliştirilebilir, çok vaktim olmadığı için üstüne koymuyorum. İlgilen arkadaşlar geliştirmeye devam edebilir. Bizde faydalanmış oluruz.
Sample Proje Link
Mobil uygulamalarımda dinamik nesne oluşumlarında sürekli ihtiyaç duyduğum için ufak çaplı özel bir VertScrollBox yazdım.İki özelliği bulunmakta.
1-) Siz içerisine dinamik oluşturduğunuz nesleri ekledikçe flowpanel gibi ekleyerek gider. Farkı scroll otomatik çıkar. Margin değerleri verebilirsiniz. Kolon sayısını siz belirlersiniz.
2-) Responsive, Kolon değerini ve margin değerlerini vermezsiniz. İçerisine nesne ekledikçe nesnelerin boyunu otomatik ayarlar. Bunu yapmamın nedeni scrollsuz tam sığdırma yapar.
Not ; Gelliştirilebilir, çok vaktim olmadığı için üstüne koymuyorum. İlgilen arkadaşlar geliştirmeye devam edebilir. Bizde faydalanmış oluruz.
Sample Proje Link
unit NrVertScrollBox; interface uses System.SysUtils, System.Types, System.UITypes, FMX.Controls, System.Classes, FMX.Layouts, Math; type TNrVertScrollBox = class(TVertScrollBox) private ObjectWidth : Single; ObjectHeight : Single; FColumnCount: Integer; FRightMargin: Integer; FBottomMargin: Integer; FResponsive: Boolean; FSumWidth: Single; FSumHeight: Single; FItemCount: integer; procedure SetColumnCount(const Value: Integer); procedure SetRightMargin(const Value: Integer); procedure SetBottomMargin(const Value: Integer); procedure SetResponsive(const Value: Boolean); procedure ResWH; procedure SetSumHeight(const Value: Single); procedure SetSumWidth(const Value: Single); procedure SetItemCount(const Value: integer); { private declarations } protected { protected declarations } public constructor Create(AOwner: TComponent;AColumnCount,ARightMargin,ABottomMargin:Integer;AResponsive:Boolean); destructor Destroy; override; procedure ItemsAdd(Control:TControl); published property ItemCount:integer read FItemCount write SetItemCount; property SumWidth:Single read FSumWidth write SetSumWidth; property SumHeight:Single read FSumHeight write SetSumHeight; property ColumnCount: Integer read FColumnCount write SetColumnCount; property RightMargin: Integer read FRightMargin write SetRightMargin; property BottomMargin: Integer read FBottomMargin write SetBottomMargin; property Responsive: Boolean read FResponsive write SetResponsive; end; implementation { TNrVertScrollBox } constructor TNrVertScrollBox.Create(AOwner: TComponent;AColumnCount,ARightMargin,ABottomMargin:Integer;AResponsive:Boolean); begin inherited Create(AOwner); ColumnCount := AColumnCount; RightMargin := ARightMargin; BottomMargin := ABottomMargin; Responsive := AResponsive; SumWidth := 0; SumHeight := 0; ItemCount := 0; ObjectWidth := 0; ObjectHeight := 0; end; destructor TNrVertScrollBox.Destroy; begin // inherited; end; procedure TNrVertScrollBox.ResWH; function X:Integer; begin case ItemCount of 0..1 : Result := 1; 2..4 : Result := 2; 5..12 : Result := 3; 13..20 : Result := 4; 21..28 : Result := 5; 29..36 : Result := 6; 37..44 : Result := 7; 45..52 : Result := 8; 53..60 : Result := 9; 61..68 : Result := 10; 69..76 : Result := 11; 77..84 : Result := 12; 85..94 : Result := 13; else Result := 14; end; end; begin ColumnCount := X; ObjectWidth := (Width-1) / ColumnCount; ObjectHeight := (Height-1) / Ceil((ItemCount/ColumnCount)); end; procedure TNrVertScrollBox.ItemsAdd(Control: TControl); Var Ind : Integer; begin if not Responsive then begin if ObjectWidth = 0 then begin ObjectWidth := (Width-(Pred(ColumnCount)*RightMargin))/ColumnCount; ObjectHeight := ObjectWidth; end; BeginUpdate; Control.BeginUpdate; Control.Width := ObjectWidth; Control.Height := ObjectHeight; Control.Parent := Self; Control.Position.X := SumWidth; Control.Position.Y := SumHeight; if (Succ(ItemCount)) mod ColumnCount <> 0 then SumWidth := SumWidth + ObjectWidth + RightMargin else begin SumWidth := 0; SumHeight := SumHeight + ObjectHeight + BottomMargin; end; InsertComponent(Control); ItemCount := Succ(ItemCount); Control.EndUpdate; EndUpdate; end else begin ItemCount := Succ(ItemCount); ResWH; BeginUpdate; Control.Parent := Self; InsertComponent(Control); SumWidth := 0; SumHeight := 0; ItemCount := 0; for Ind := 0 to Pred(ComponentCount) do begin if Components[Ind].ClassType = Control.ClassType then begin with TControl(Components[Ind]) do begin BeginUpdate; Width := ObjectWidth; Height := ObjectHeight; Position.X := SumWidth; Position.Y := SumHeight; if (Succ(ItemCount)) mod ColumnCount <> 0 then SumWidth := SumWidth + ObjectWidth else begin SumWidth := 0; SumHeight := SumHeight + ObjectHeight end; EndUpdate; end; ItemCount := Succ(ItemCount); end; end; EndUpdate; end; end; procedure TNrVertScrollBox.SetBottomMargin(const Value: Integer); begin FBottomMargin := Value; end; procedure TNrVertScrollBox.SetColumnCount(const Value: Integer); begin FColumnCount := Value; end; procedure TNrVertScrollBox.SetItemCount(const Value: integer); begin FItemCount := Value; end; procedure TNrVertScrollBox.SetResponsive(const Value: Boolean); begin FResponsive := Value; end; procedure TNrVertScrollBox.SetRightMargin(const Value: Integer); begin FRightMargin := Value; end; procedure TNrVertScrollBox.SetSumHeight(const Value: Single); begin FSumHeight := Value; end; procedure TNrVertScrollBox.SetSumWidth(const Value: Single); begin FSumWidth := Value; end; end.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..