Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Özel bir TVertScrollBox
#1
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

16DQ8b.png

grV37Q.png

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


Bu Konudaki Yorumlar
Özel bir TVertScrollBox - Yazar: narkotik - 28-12-2018, Saat: 02:54
Özel bir TVertScrollBox - Yazar: frmman - 28-12-2018, Saat: 09:08
Özel bir TVertScrollBox - Yazar: klavye - 28-12-2018, Saat: 10:42
Cvp: Özel bir TVertScrollBox - Yazar: CesuR - 18-02-2019, Saat: 12:55
Özel bir TVertScrollBox - Yazar: narkotik - 18-02-2019, Saat: 18:36

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Firmaya özel geliştirilen yazılımın dağıtılması. tuna 11 3.398 19-01-2023, Saat: 16:52
Son Yorum: SercanTEK
  TVertScrollBox cihankoca 3 1.730 13-04-2021, Saat: 17:50
Son Yorum: cihankoca
Star TFlowLayout ile TVertScrollbox Kullanımı Abdullah ILGAZ 3 3.986 15-02-2021, Saat: 19:21
Son Yorum: yanniosman
  TVertScrollBox Touch Scroll Durdurmak hayalyilmaz43 4 2.907 10-08-2020, Saat: 15:35
Son Yorum: hayalyilmaz43
  Özel bir StringGrid narkotik 0 1.831 08-09-2019, Saat: 01:30
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi