Delphi Can

Orjinalini görmek için tıklayınız: Label leri Panel içersinde sıralama
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhabalar 
bir kaç sorum olacaktı ricam yardımcı olmanız

Yaklaşık 100 adet program çalışırken label üretip bunları panel içersinde sıralamak istiyorum  panelin satırı dolunca aşağıya devam ederek 
labelleri göstersin farklı yöntemlerle yapıyorum yanlız kodlama çok uzuyor ve kontroller e çok zaman harcıyorum 
pratik bir yöntem varmı bir örnekle göstermeniz mümkünmü ?

2 nci sorum ise Tlabel caption içerikleri ekrana yansıttıktan sonra görsel olarak  bir boşluk bırakarak sonraki labeli göstermesini çözemedim.
Açıklamak gerekirse  x:=label1.caption+' '+label2.caption+' '+label3.caption ..........; Gibi 
TLabellerin  onclik olayı var ve captionların içerinde 1 ila 9 adet arasında karekter vardır 
ekranda  "1        999         3       789456999" Gibi gözüküyor benim istediğim ise şu "1 999 3 789456999"

3 üncü sorum ise oluşturulmuş tlabellerden biri ile işim bitince aradan çıkartmak için gizlediğimde yeri boş kalıyor ve görsellik bozuluyor 
 bir sonraki kaybolan labelin yerine gelmesini istiyorum  
öncelikle bunların çözümünden yardımcı olmanızı rica ediyorum Saygılar 
Sağlıcakla kalın 
Kod:
interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Label1: TLabel;
   Label2: TLabel;
   ListBox1: TListBox;
   procedure FormCreate(Sender: TObject);
   PROCEDURE LCLICK(SENDER:TOBJECT);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 mixX,mixY,MixADI:array [1..99] of string;
 mixrenk: array [1..99] of tcolor;
 i:integer;
 Lbl:tlabel;


implementation

{$R *.dfm}
procedure TFORM1.LClick(Sender: TObject);
begin
ShowMessage('label Adı : '+TLABEL(Sender).name+#13#10+
          'Caption : '+TLABEL(Sender).caption+#13#10+
          'Tag : '+inttostr(TLABEL(Sender).tag)+#13#10+
           'RENK : '+COLORTOSTRING(TLABEL(SENDER).FONT.COLOR)+#13#10+
           '  ne ekliyelim ?'  );
   // TEST hangi bilgileri editliyelim mesela
           (Sender as TLABEL).Caption:='10101010101';
            (Sender as TLABEL).LEFT:=145;
             (Sender as TLABEL).font.COLOR:=Clblack;

           END;
procedure TForm1.FormCreate(Sender: TObject);
begin
{   TEST ------------------
  FOR i:=1 TO 99 DO
  BEGIN
  randomize();
  MiXADI[I]:=inttostr(random(9999999));
  END;
  --------------------------------  }



    LBL:=Tlabel.Create(self);
    LBL.Parent:=Form1.panel1;
   for I := 1 to 99 do
     begin
       LBL.name:='ETI'+inttostr(I);
       randomize;
       LBL.Caption:=inttostr(random(99999999));
       LBL.tag:=I;
       LBL.FONT.COLOR:=StringToColor('clSkyBlue');
       LBL.OnClick:=LClick;
       ListBox1.Items.Add(LBL.NAME) ;
     end;
      // TEST
     // FOR I:=1 TO 99 DO tlabel(LBL).left:=(LBL.LEFT+lbl.Width)+10;
      // ------
END;
    end.
TFlowPanel'i kullanın, 1 ve 3.yü çözecektir.

Şu şekilde yaparsanız 2. sorun zaten hiç olmuyor, Ufak bir değişiklik yaptım, TLabel'lerin OnMouseDown event'ini kullandım. Sol klikte sizin yazdığınız ShowMessage çalışıyor, sağ klik yaptığınızda o label'i görünmez yapıyor. Bunun dışında bir hata var, lbl := TLabel.Create.. 'i döngünün içinde yapmanız gerekir. İkincisi hata değil ama yapılmaması gerekir, lokal değişkenleri globalde tanımlamamalıdır. Yani lbl ve I değişkeni OnCreate event'i içinde olmalıdır.

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    FlowPanel1: TFlowPanel;
    ListBox1: TListBox;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  lbl : TLabel;
  I : Integer;
begin
   for I := 1 to 99 do
     begin
       LBL:=Tlabel.Create(self);
       LBL.Parent:=FlowPanel1;
       LBL.name:='ETI'+inttostr(I);
       randomize;
       LBL.Caption:=inttostr(random(99999999))+' ';
       LBL.tag:=I;
       LBL.FONT.COLOR:=RGB(Random(255), Random(255), Random(255));
       lbl.OnMouseDown := Label1MouseDown;
       ListBox1.Items.Add(LBL.NAME) ;
     end;
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=TMouseButton.mbLeft then
    ShowMessage('label Adı : '+TLABEL(Sender).name+#13#10+
          'Caption : '+TLABEL(Sender).caption+#13#10+
          'Tag : '+inttostr(TLABEL(Sender).tag)+#13#10+
           'RENK : '+COLORTOSTRING(TLABEL(SENDER).FONT.COLOR)+#13#10+
           '  ne ekliyelim ?'  )
  else
  if Button=TMouseButton.mbRight then
    TLabel(Sender).Visible := False;
end;

end.


Teşekkür ederim. 
Delphi 7 de yıllar önce yazmıştım. Delphi 12 ye geçince de yenilikleri inceleme fırsatım olmamıştı flowpanel i bilmiyordum mesela, bilmediğimden basit usul panel kullanmıştım değiştirince sorun halloldu.
Ayrıca uyarılarınız için teşekkür ederim "lbl := TLabel.Create"  evet doğrudur onunla panel1 dongunun içindeydi zaten test ederken yukarda kalmış 
tekrar teşekkür ederim programda güncelleme yapmaya devam edeceğim soru 4 te görüşmek üzere Smile