TPanel ile Wrap kullanma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

TPanel ile Wrap kullanma

Mesaj gönderen barutali »

aşağıdaki resimde gördüğünüz gibi buttonlar olacak fakat ben bunları kodla oluşturuyorum. Yana yana koymada sıkıntı yok fakat X caption lı button gibi panelin sonuna gelince buttonun aşağı satırdan yeniden ekletmek istiyorum takıldığım yerde tam olarak bu kısım. Panel boyutu sabit değil aşağıda ben 25 tane oluşturuyorum fakat aslında 25 ten fazla da olabilir onu test amaçlı yaptım sadece .

Teşekkürler

buttonları oluşturmak için kullandığım kod..

Kod: Tümünü seç

var
 J : integer;
 B : TButton;
begin
  for j := 1 to 25 do
   begin
    b := TButton.Create(Panel1);
     with B do
     begin
       Parent  := Panel1;
       Caption := IntToStr(j);
       Height  := 50;
       Width   := 50;
       Left    := x + Width;
       x       := Left;
       ParentFont := false;
     end;
   end;
Resim
amatör küme programcı :D
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: TPanel ile Wrap kullanma

Mesaj gönderen unicorn64 »

butonu eklemeden önce eklenecek konumu kontrol edip,
x+width değeri panelin genişliğini aşacaksa eklemeyi bir alt satırdan devam ettirebilirsiniz...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: TPanel ile Wrap kullanma

Mesaj gönderen conari »

panelin boyutunu al.
ilk başlangıç noktasını belirli
başlangıç noktasına buton ekle
kalınan noktayı bul = başlangıç noktasına buton
kalınan noktayı panel boyutu ile kontrol et.
yeterli ise
kalınan noktayı bul
buton ekle
kalınan noktayı = kalınan nokta +buton
değilse alt satır
...

şeklinde devam et.

şöyle de olabilir. Panel boyutu, (yükseklik , genişlik) / botun boyutu (yükseklik genişlik)
en ve boydan kaç tane koyabileceğini gösterir. bunlara göre döngü ile atarsın.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: TPanel ile Wrap kullanma

Mesaj gönderen SimaWB »

Delphi versiyonun kaç bilmiyorum ama en kolayı, hiç kodla uğraşmadan FlowPanel kullanmak.
There's no place like 127.0.0.1
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: TPanel ile Wrap kullanma

Mesaj gönderen m_ekici »

FlowPanel tam olarak ne işe yarıyor? TPanel den farkı nedir?
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: TPanel ile Wrap kullanma

Mesaj gönderen SimaWB »

FlowPanel ilk olarak sanırım Delphi 2006'da çıktı. Aynı Panel gibi fakat üzerindeki bileşenleri otomatik olarak hizalama özelliği var(FlowStyle)
Ben Delphi XE kullanıyorum ve örnekler içerisinde FlowPanel ile ilgili güzel bir örnek var.(Samples\Delphi\VCL\FlowPanel)
Ayrıca bakınız.
There's no place like 127.0.0.1
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Re: TPanel ile Wrap kullanma

Mesaj gönderen barutali »

verilen cevaplar için herkese teşekkür ederim.. Aşağıdaki gibi sonuca ulaştım

Kod: Tümünü seç

unit UMASALAR;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AdvSmoothButton, cxGraphics, cxControls, cxLookAndFeels,
  cxLookAndFeelPainters, cxContainer, cxEdit, dxSkinsCore, dxSkinBlack,
  dxSkinBlue, dxSkinCaramel, dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide,
  dxSkinFoggy, dxSkinGlassOceans, dxSkiniMaginary, dxSkinLilian,
  dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins,
  dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green,
  dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black,
  dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinPumpkin, dxSkinSeven,
  dxSkinSharp, dxSkinSilver, dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008,
  dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, cxGroupBox,
  ExtCtrls, StdCtrls, AdvScrollBox, bsSkinCtrls, bsSkinBoxCtrls;

type
  TFMASALAR = class(TForm)
    cxGroupBox1: TcxGroupBox;
    AdvSmoothButton2: TAdvSmoothButton;
    AdvSmoothButton1: TAdvSmoothButton;
    AdvSmoothButton4: TAdvSmoothButton;
    btalt: TAdvSmoothButton;
    btust: TAdvSmoothButton;
    btMasaBirlestir: TAdvSmoothButton;
    kutu: TScrollBox;
    ScrollBar1: TScrollBar;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure btustClick(Sender: TObject);
    procedure btaltClick(Sender: TObject);
    procedure AdvSmoothButton2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  L, XX, T : Integer;
  A,B : BOOLEAN;
  public
    { Public declarations }
  procedure MasaOlustur;
  end;

var
  FMASALAR: TFMASALAR;

implementation

{$R *.dfm}

procedure TFMASALAR.AdvSmoothButton2Click(Sender: TObject);
begin
  Close;
end;

procedure TFMASALAR.btaltClick(Sender: TObject);
begin

  kutu.AutoScroll := True;
  kutu.ScrollBy(0, -125);
  btust.Enabled := True;
end;

procedure TFMASALAR.btustClick(Sender: TObject);
begin
  kutu.ScrollBy(0, 125);
end;

procedure TFMASALAR.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TFMASALAR.FormCreate(Sender: TObject);
begin
  T  := 20;
  L  := 15;
  A := False;
  B := False;
  XX := 0;
end;

procedure TFMASALAR.FormDestroy(Sender: TObject);
begin
  FMASALAR := nil;
end;

procedure TFMASALAR.FormResize(Sender: TObject);
begin
  if B = True then
  MasaOlustur;
end;

procedure TFMASALAR.FormShow(Sender: TObject);
begin
  if B = False then
   B := True;
end;

procedure TFMASALAR.MasaOlustur;
var
 J : integer;
 B : TAdvSmoothButton;
begin
    for j := 1 to 200 do
     begin

      b := TAdvSmoothButton.Create(kutu);
       with B do
       begin
         Parent  := kutu;
         Caption := IntToStr(j);
         Height  := 125;
         Width   := 125;
         Color   := $00FF8000;

         if A = FALSE then
         begin
           b.Left := L;
           b.Top  := T;
           A := True;
           Status.Visible := True;
           Status.Caption := '1';
           Status.Appearance.Glow := True;
           Status.Appearance.Fill.Color := clRed;
           Status.Appearance.Fill.ColorMirror := clRed;
           Status.Appearance.Fill.ColorMirrorTo := clRed;
           Status.Appearance.Fill.ColorTo := clRed;
           Status.Appearance.Fill.BorderColor := clGray;
           Status.Appearance.Fill.Rounding := 12;
           Status.Appearance.Fill.ShadowOffset := 0;
           Status.Appearance.Font.Charset := DEFAULT_CHARSET;
           Status.Appearance.Font.Color := clWhite;
           Status.Appearance.Font.Height := -20;
           Status.Appearance.Font.Name := 'Tahoma';
           Status.Appearance.Font.Style := [fsBold];
         end
          Else
          Begin
           if L + Width + Width>= kutu.Width then
           begin
            L       := 15;
            Left    := L;
            Top     := T + Height;
            T       := Top;
           end
              Else
              Begin
                  Top  := T;
                  Left := L + Width;
                  L    := Left;
              End;
          End;

         Appearance.Font.Style := [fsBold];
         Appearance.Font.Size  := 25;
         ParentFont := false;
       end;
     end;
end;

end.

Önizleme :

http://img39.imageshack.us/img39/922/masalari.png
amatör küme programcı :D
Cevapla