dbgrid başlık satırı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4715
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 19 Oca 2004 08:01

Selam.

- Bahsedeceğim konular ileri düzey Delphi gerektirir. Çözümünü bulmakta zorlanabilirsiniz.

- Yapılacak en basit yol (istediğiniz opsiyonlar var mı bilmiyorum ama) QuantumGrid veya benzeri üçüncü parti bileşen paketini kurmak. (@Admin bu yazdıklarımı görünce bana gülecektir. :P Çünkü, çözümü varken üçüncü parti bileşen kullanmaya özel olarak karşıyım.)

- Delphi süprizlerle dolu bir dil. :)

- DBGrid aslında bir StringGrid özelliklerine sahiptir. Zaten şeklinden de bu çıkarımda bulunmuşsunuzdur.

- Delphi'de benzer bileşenler genelde en basit halinden türetilerek meydana gelirler.

- Madem DBGrid, StringGrid gibi bir bileşen, şunun da çalışması lazım.

- Başlık satır'ın yüksekliğini ayarlamak için

Kod: Tümünü seç

StringGrid1.RowHeights[0] := 30;
diyebiliyorsak

Kod: Tümünü seç

DBGrid1.RowHeights[0] := 30;
.. da diyebiliriz. Ama önce saklı (Protected-Korumalı) olan bu özelliğini açığa çıkarmak lazım.

- Bu nedenle DBGrid'i direkt kullanamayacağız. Siz yine formunuza DBGrid koyacaksınız, bildiğimiz türden atamaları Datasource vs. yapacaksınız.

- Formunuzun en başındaki Type satırının daha da üzerine gelip yapacağınız yeni Type tanımlaması ile bunu geçerli kılabilirsiniz.

Ödev 1: DBGrid'den türeyen yeni bir DBGrid nasıl yapılır. Bunun çözümü probleminizin çözümü... :o

Kod: Tümünü seç

 ***
- Bunu başardığınızda artık yeni bir DBGrid tipimiz meydana gelmiştir.

DBGrid.RowHeights[0] := 30; demenize halen müsade edilmez.

Kod: Tümünü seç

TYeniDBGrid(DBGrid1).RowHeights[0] := 30;
gibi demelisiniz.

- İki satır başlık yazma konusuna gelince.

- DBGrid'in ilk satırının height değerini büyüterek genişlettiniz. Şimdi buraya nasıl iki satır başlık yazacaksınız ona bakalım.

- TLabel'daki WordWrap olayı veya araya #13 (Enter Tuşu) eklenmiş yazılar; DBGrid caption'unda işe yaramaz.

- Bunun için Başlık satırını boşaltıp, Canvas (tuval) boyama yoluyla istediğiniz satırları yazdırmak zorundasınız.

- Bu kodlar tabiki DBGrid'in OnDrawColumnCell olayına yazılır.

Ödev 2. : DBGrid Canvas'ına nasıl yazı yazılır.
Yardımcı olacak Kod :

Kod: Tümünü seç

  If Column.Index = 0 then // Hangi kolona yazılmasını istiyorsanız
  begin // Rect.Left : İlgili kolonun soldan sağa doğru (x) koordinatı.
    ...
  end;

Kod: Tümünü seç

  
 ***
- Hepsi bu kadar.

- Cevapları araştırarak bulursanız bu kavramlar gelecekte bir çok işinize yarayacaktır.

- Çalışmalarınızda başarılar dilerim.
Resim Resim

Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7432
Kayıt: 09 Haz 2003 11:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek » 19 Oca 2004 11:14

mrmcop yazdı:- Yapılacak en basit yol (istediğiniz opsiyonlar var mı bilmiyorum ama) QuantumGrid veya benzeri üçüncü parti bileşen paketini kurmak. (@Admin bu yazdıklarımı görünce bana gülecektir. :P Çünkü, çözümü varken üçüncü parti bileşen kullanmaya özel olarak karşıyım.)
Yok hocam niye gülüyüm, Quantum Grid'i bir kullansan bir daha normal grid kullanmazsın.

* Her takıldığın noktada 3. parti bileşen kullanmaya,
* Kodu olmayan 3. parti bileşen kullanmaya,

ben de karşıyım. Ama amerikayı yeniden keşfetmeye de gerek yok. Qunatum Grid + Printing system ikilisi bana muazzam zaman kazandırıyor. Tavsiye ederim :wink:

NOT : Biraz daha çalışırsam olacak bu iş, seni de Quantumcu yapacağız :lol:

Kolay gelsin.

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4715
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 19 Oca 2004 11:27

NOT : Biraz daha çalışırsam olacak bu iş, seni de Quantumcu yapacağız
- @Admin Download linkini bir ara alırım...
:lol: :lol: :lol:
Resim Resim

fahri
Üye
Mesajlar: 5
Kayıt: 18 Haz 2003 07:59

DBGrid Row Title

Mesaj gönderen fahri » 20 Oca 2004 09:37

type
TAccessDBGrid = class(TDBGrid);

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
S1, S2: String;
begin
with TAccessDBGrid(DBGrid1) do
begin
// Increase title height
// Titelhöhe vergrössern
RowHeights[0] := 32;

Canvas.Brush.Style := bsClear;

// Column Titles
// Spalten Titel setzen
case Column.Index of
0: begin
Column.Title.Caption := '';
S1 := 'Row 1';
S2 := 'Row 2';
end;
1: begin
Column.Title.Caption := '';
S1 := 'Row 1';
S2 := 'Row 2';
end;
end;
// write title:
// Titel ausgeben:
Canvas.TextOut(Rect.Left+2, 2, S1);
Canvas.TextOut(Rect.Left+2, 16, S2);
end;
end;

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4715
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 20 Oca 2004 10:31

@fahri selam.

- @ali bulmak üzereydi. Bu zevki kendisinden mahrum bırakmana gerek yoktu. Bulamadığı taktirde daha da anlayacağı türden bir cevapla bu sorununun çözümüne yine buradan ulaşacaktı.

- Anlattıklarımızdan farklı olarak uyguladığın tekniği bize de açıklarsan şahsen sevinirim.

- Ama bu gördüğüm kadarıyla henüz ilk mesajın, umarım diğer mesajlarında açıklamalı cevaplar yazarak herkesi Delphi'yi kavrayarak öğrenmesine yardımcı olursun.

- Çalışmalarında başarılar dilerim.
Resim Resim

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4715
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 21 Oca 2004 12:50

@ali

- Vakit ayırıp -çözümü kavraman adına- cevabı direkt vermeyip kötü bişey yaptığımı düşünüyorsan bunu bildir, aksi durumda cevabında neyi hangi yolla değiştirdiğin, bunu neye dayanarak yaptığın beni zaten ilgilendirmez.

- @fahri'nin cevap vermesi iyi fakat zamansız olduğunu düşünüyordum, kendisi bunu anlayacaktır :wink: . Ama senin @mrmcop'a basit bir cevabı bile çok görmenden yola çıkarak bundan sonra soracağın sorulara -sadece şahsım adına, kimseye diyecek bişeyim yok- cevap vermeyi reddediyorum. :!:

- Çalışmalarında başarılar dilerim. :idea:
Resim Resim

Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7432
Kayıt: 09 Haz 2003 11:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek » 21 Oca 2004 02:45

Merhaba,

ben Muharrem beyin cevap verme şeklini çok takdir ediyorum. Direk kod vermek yerine, olayın mantığını kavramanın daha faydalı olacağına inanıyorum, biliyorum.

Aldığımız karar neticesi daha çok bu tarz, daha detaylı, olayın mantığını anlatan cevaplar vermeye çalışacağız. Amacımız tek balık vermektense balık tutmayı öğretmek.

Bize karşılık beklemeden yardımcı olmak için saatlerini harcayan insanlardan bir teşekkürü esirgemeyelim.

Kolay gelsin.

Cevapla