TabControl de Label create etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

TabControl de Label create etmek

Mesaj gönderen pentiumkivanc »

Kartlar adında bir formum var. Bu formdaki amaç, formdaki Tabcontrol nesnesine SAYFA isimli tablodaki kayıtları birer Tab olarak ekletmek. Daha sonra eklenen bu Tablara karşılık gelen alanları ASI tablosundan alıp label lar oluşturmak. Bu label lar ASI tablosundan çektiğim alan isimleri olacak. Yani Tabcontroldeki sayfa isimlerini SAYFA tablsundan, SAYFA tablosundaki sayfaya karşılık gelen alan isimlerini ASI tablosundan alacak. ASI tablosundan gelen bu değerleri Tabcontroldeki ilgili sayfaya label olarak create edecek. Benim yazdığım kod aşağıda

Aşağıda formun OnCreate olayındaki kodları var.

Kod: Tümünü seç

procedure TKartlar.FormCreate(Sender: TObject);
var

        i:integer;
        xpos,ypos,sut,sat:integer;

begin

KartTable.Active:=true;
i:=0;
sayfaadiquery.Active:=true;
                xpos:=110;
                ypos:=40;
                sut:=1;
                sat:=1;
        While not SayfaAdiQuery.Eof do
        begin
        TabControl.Tabs.Add(SayfaAdiQuerySAYFA_ADI.AsString);

        ASIQuery.SQL.Clear;
        ASIQuery.SQL.Add('select * from ASI where SAYFA="'+SayfaAdiQuerySAYFA_ADI.AsString+'"');
        ASIQuery.Open;


                while not ASIQuery.Eof do
                begin
                Tlabel.Create(self).Name:='Etiket'+inttostr(i);

                        with Tlabel(FindComponent('Etiket' + IntToStr(i))) do
                        begin
                        left:=xpos;
                        top:=ypos;
                        caption:=asiqueryalanadi.AsString;
                        parent:=tabcontrol;
                        visible:=true;
                        transparent:=false;
                        end;
                inc(i);
                inc(sut);

                if sut=3 then
                begin
                sut:=1;
                inc(sat);
                end;

                xpos:=10+(sut*100);
                ypos:=10+(sat*30);

                ASIQuery.Next;
                end;
        ASIQuery.Close;
        inc(tabin);
        SayfaAdiQuery.Next;
        end;
SayfaAdiQuery.Active:=False;

end;
Şimdi sayfaları ve alanları ilgili tablolardan okumada sorun yok ta. Label ların parent ini tabcontrol yapmama rağmen bu label lar, sadece ilgili tabcontrol sayfasında değil, tüm sayfalarda görünüyorlar. Tabcontrol de 3 adet sayfa oluşmuşsa her üç sayfada aynı alanlar var. Neden sadece ilgili sayfada ilgili label lar oluşmuyor?
Label nesnesini create ederken yaptığım hata ne?
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

tabcontrol hiç kullanmadım ama pagecontrol kullanıp parentını tabsheet versen işini görmez mi?
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

nailenin dediği gibi pagecontrol kullan ve oluşturacağın bileşeni sahip olacağı nesneye göre create et.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

naile hanım yardımınız için teşekkürler.
pagecontrol hiç kullanmadım :oops: bi bakayım.
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

Naile hanım dediğiniz gibi PageControl Kullandım OnCreate deki kodumun yeni hali şöyle:

Kod: Tümünü seç

procedure TKartlar.FormCreate(Sender: TObject);
var

        tabin,i:integer;
        xpos,ypos,sut,sat:integer;

begin

KartTable.Active:=true;i:=0;
sayfaadiquery.Active:=true;
        tabin:=0;
                xpos:=110;ypos:=40;
                sut:=1;
                sat:=1;
        While not SayfaAdiQuery.Eof do
        begin

        TTabsheet.Create(self).Name:='Tabsit'+inttostr(tabin);
        with TTabsheet(FindComponent('Tabsit' + IntToStr(tabin))) do
                        begin
                        caption:='Tabsit'+inttostr(tabin);
                        pagecontrol:=pagecontrol1;
                        end;


        ASIQuery.SQL.Clear;
        ASIQuery.SQL.Add('select * from ASI where SAYFA="'+SayfaAdiQuerySAYFA_ADI.AsString+'"');
        ASIQuery.Open;


                while not ASIQuery.Eof do
                begin
                Tlabel.Create(self).Name:='Etiket'+inttostr(i);

                        with Tlabel(FindComponent('Etiket' + IntToStr(i))) do
                        begin
                        left:=xpos;
                        top:=ypos;
                        caption:=asiqueryalanadi.AsString;
                       
showmessage(TTabsheet(FindComponent('Tabsit' + IntToStr(tabin))).Caption);// Bununla create edilen label ın hangi tabsheet te olduğunu anlıyorum ..
                        parent:=TTabsheet(FindComponent('Tabsit' + IntToStr(tabin)));
                        //parent:=tabcontrol;
                        visible:=true;
                        transparent:=false;
                        end;
                inc(i);
                inc(sut);

                if sut=3 then
                begin
                sut:=1;
                inc(sat);
                end;

                xpos:=10+(sut*100);
                ypos:=10+(sat*30);

                ASIQuery.Next;
                end;
        ASIQuery.Close;
        inc(tabin);
        SayfaAdiQuery.Next;
        end;
SayfaAdiQuery.Active:=False;

end;
Bu şekilde yaptığımda yukarıda da açıklamasını yaptığım showmessage ile gelen mesaj da yeni oluşturulan tabsheetin caption'u boş geliyor. Sanırım oluşturulan tabsheet'i bulamıyor. Dolayısıyla Create ettiğim labellar görünmüyor yani page control ün sayfaları boş çıkıyor. Bunun bir yolu olmalı. Runtime olarak sayfalar oluşturup bu sayfalara yine runtime oluşturulan nesneleri yerleştirmenin bir yolu olmalı...

nerede hata yapıyorum?
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

findcomponent
yerine

Kod: Tümünü seç

(sender as Tlabel)
kullansanda denesen olmazmı..
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

olmadı
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

Sorunu çözdüldüü :wink: :wink:

Kod: Tümünü seç

parent:=TTabsheet(FindComponent('Tabsit' + IntToStr(tabin))); 
kısmını with .. end arasında yapıyordum. bende parent i with döngüsünün dışına taşıdım. ve şöyle yaptım:

Kod: Tümünü seç

Tlabel(FindComponent('Etiket' + IntToStr(i))).Parent:=TTabsheet(FindComponent('Tabsit'+inttostr(tabin)));
Sorun düzeldi. Ama anlamadım niyee :?: with döngüsü tabsheet nesnesine erişmeyi neden engelledi? Bu normal mi?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
olayın çomzüldüğüne sevindim.
with komutunun içinde kullandığın zaman form
form ile karıştırabiliyor.Aynı propertiye sahip iki değişken olduğu için olabilir.

Kod: Tümünü seç

with label do
begin
  caption:='fkljkrle';
end;
kodu formun caption unu mu değiştirecek yoksa label ın kini mi? :?:
senin sıkıntında bundan dolayı olabilir.
KOlaygelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

Evet haklısınız. Etiketler forma yerleştirmiş sanırım.
Herkese gösterdiği ilgiden ötürü teşekkür ederim.
Cevapla