Çalışma anında Create edilen nesneler.

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Çalışma anında Create edilen nesneler.

Mesaj gönderen RADCoder »

Merhabalar,
Kendi listemi yapmak üzere bir kaç nesneyi create metodu ile her button tıklamasında oluşturuyorum.
Bir ana Layout içinde bir takım nesneler oluşturup Layout'un Align özelliğini Top olarak ayarlıyorum.
Fakat şöyle bir sorun var ki, Birinci ve ikinci defa Button'a tıklayıp eklediyimde herşey normal, ama üçüncü ve daha sonrakı tıklamada, her sonda gelen Layout'u birinci takımın altına eklemekte.
Şöyleki 4 kez buttona tıkladığımda şu şekilde sırlanmış oluyor:

Kod: Tümünü seç

İlk sırada gelen Layout
Dördüncü sırada gelen Layout
Üçüncü sırada gelen Layout
İkinci sırada gelen Layout
Aşağıda yazmış olduğum kodlarımı sizlerele paylaşıyorum.

Kod: Tümünü seç


var
  frm_main: Tfrm_main;
  I : Integer;
  
  
  implementation

  {$R *.fmx}

  uses uTool;
  
procedure Tfrm_main.FormCreate(Sender: TObject);
begin
  I := 1;
end;

  
procedure Tfrm_main.AddNewContent(Name: String; Src: TBitmap;  ATag : Integer);
var
 ALayout : TLayout;
 RCT1, RCT2, RCT3 : TRectangle;
 ALabel  : TLabel;
 AImage : TImage;
 BTN1, BTN2, BTN3  : TSpeedButton;
begin

  ALayout := TLayout.Create(nil);
  ALayout.Parent := VertScrollBox1;
  ALayout.Align := TAlignLayout.MostTop;
  ALayout.Height := 360;
  ALayout.Tag :=  ATag;

    RCT1 := TRectangle.Create(nil);
    RCT1.Parent := ALayout;
    RCT1.Align := TAlignLayout.Top;
    RCT1.Height := 48;
    RCT1.Fill.Color := TAlphaColorRec.White;
    RCT1.Fill.Kind := TBrushKind.Solid;
    RCT1.Stroke.Color := TAlphaColorRec.Null;



       ALabel := TLabel.Create(nil);
       ALabel.Parent :=  RCT1;
       ALabel.Align := TAlignLayout.Client;
       ALabel.Margins.Left := 10;
       ALabel.StyledSettings := [TStyledSetting.Family];
       ALabel.Font.Style := [TFontStyle.fsBold];
       ALabel.FontColor :=  $FF140A54;
       ALabel.Font.Family := 'Roboto';
       ALabel.Font.Size := 13;
       ALabel.Text := Name;

       BTN1 := TSpeedButton.Create(nil);
       BTN1.Parent := RCT1;
       BTN1.Align := TAlignLayout.Right;
       BTN1.Width := 48;
       BTN1.StyleLookup := 'detailstoolbutton';
       BTN1.TintColor := $FF140A54;
       BTN1.OnClick := InfoClick;


end;
Kullanımı:

Kod: Tümünü seç

procedure Tfrm_main.btnInfoClick(Sender: TObject);
begin
    AddNewContent('Nahit Habiboff - '+IntToStr(I), Image1.Bitmap, I);
    Inc(I);
end;
Yapmak istediyim, tüm Layoutları kendi sırası ile ilkten sona doğru dize bilmek..

Yukardaki kodlarla ilgili yalnışlarımı düzeltmemde yardımcı olursanız çok sevinirim.
Herkese önceden teşekkürlerimi sunarım.
Kullanıcı avatarı
egeven
Üye
Mesajlar: 12
Kayıt: 03 Ara 2014 12:56

Re: Çalışma anında Create edilen nesneler.

Mesaj gönderen egeven »

Merhaba,
Sorunun nedenini bilmiyorum benimde başıma geldi, 2 önerim var.

1. Oluşturduğun paneli önce bottom yapıp sonra top yapabilirsin
2- Width, height, position.x ve position.y değerlerini kendin verebilirsin Align none yapıp, width parent ile aynı height te büyük ihtimal ile sabittir position.x 0, position.y yi hesaplaman lazım onuda bir değişkende tutup oluşturduğun panel sayısı*height + varsa marginleri ekleyerek çözebilirsin ben bu şekilde oluşturuyorum şuan sağlıklı çalışıyor.
Kullanıcı avatarı
Ilgaz
Üye
Mesajlar: 16
Kayıt: 06 Eki 2016 10:34

Re: Çalışma anında Create edilen nesneler.

Mesaj gönderen Ilgaz »

Merhaba,

Oluşturulacak nesne adedi ve oluşturulacağı yer adedi form create olduğu an itibariyle belirliyse Layout içerisindeki ExpandStyle parametresi varsayılan AddRows gelir onu FixedSize olarak değiştirin. Ama dinamik olarak ihtiyaç halinde eklenecek şekilde ise;

LayoutObject = class(TObject)
AddedObjectCount: Integer;
LayoutRowCount: Integer;
end;

şeklinde bir class oluşturun. Üreteceğiniz nesneyi FormOnCreate yada constructor içinde yazın ve create edin. Her yeni nesneyi oluşturduğunuzda hem eklenilen obje miktarını hemde her alt satıra geçişinde satır miktarını elinize alın. Yeni ekleme yapacağınızda son satır miktarını referans alarak +1 yapıp yeni satıra ekleyin. Column miktarını denetlemek içinse eklenilen obje miktarını kontrol edebilirsiniz.
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: Çalışma anında Create edilen nesneler.

Mesaj gönderen RADCoder »

Merhabalar, Cevabınız için minnetdarım. Zaman önemli deyil, ben olmasam bile, muhakak ihtiyacı olan insanlar bu cevaptan örnek çıkaracaktır mutlaka. Önemli olan üşenmeden zaman ayırıp detaylı bilgi verdiyiniz ve bunun için çok çok teşekkür ederim, Allah razı olsun.. Ben bu soruyu buraya açtıktan bir kaç gün sonra Swift-e başladım. Şu an 3 cü projemi yazıyorum ve gerçekten Objective-C den sonra Apple-ın yaptığı en mükemmel şey, Swift dilini ortaya çıkarması bence. Tek şey söyleye bilirim, ilerledikçe ilerliyor her bir adımda yeni bir şey keşf ediyorsunuz. Sadece iOS yazıcaksanız tavsiye ederim..
Hepiize başarılar dilerim..
Cevapla