Dbgir Tablo Başlığı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sako
Üye
Mesajlar: 477
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Dbgir Tablo Başlığı

Mesaj gönderen sako »

Resim

Arkadaşlar yukarıdaki gibi başlık oluşturulabilecek gridler var ama bunu dbgrid de yapmamız mümkün müdür acaba ? Veya ücretsiz bir component var mıdır ?
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Dbgir Tablo Başlığı

Mesaj gönderen mrmarman »

(*) Standart bir TDBGrid üzerinde çalışılarak bu etki oluşturulabilir diye düşünüyorum. Denemeye değer aslında.

(1) DbGrid'in başlık satırını genişletiriz. Bunun için DBGrid'in atası olan StringGrid'den türemiş olduğunu kullanırız.
(2) OnDrawColumnCell ile her sütun oluşurkenki değerler dilediğiniz sütun indexlerindeki başlıkların yeniden revizyonu için kullanılabilir.

(*) Başka bir VCL sormuşsunuz, şöyle bir bakındım.
- EhLib VCL paketinde aşağıdaki ekran formu sizin istediğinize benziyor.
Resim

Başarılar.

(düzeltme : sütun yerine satır demişim bir kaç yerde, onu düzelttim)
En son mrmarman tarafından 08 Şub 2014 11:02 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Dbgir Tablo Başlığı

Mesaj gönderen mrmarman »

Tekrar Merhaba... Denemeye değer demiştim ya, bir örnek hazırladım... Benim için de iyi bir temrin / çalışma oldu. :bravo:

Resim

Kaynak Kodları :

Kod: Tümünü seç

Procedure TForm1.FormShow(Sender: TObject);
Var
  i : Integer;
begin
  AdoQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
                              +  ExtractFilePath(Application.exename) + 'Database.mdb';
  DataSource1.DataSet := ADOQuery1;
  DBGrid1.Options     := [dgRowSelect, dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit];
  DBGrid1.DataSource  := DataSource1;
  With AdoQuery1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT M_IMDB_ID as [IMDb no], M_Name as [Film Adı], M_Year as [Yıl], M_DirectedBy as [Yönetmeni], M_AlsoKnownAs as [Türkçe Adı]  FROM DivXTurk');
  end;
  AdoQuery1.Active   := True;
  for i := 0 to DBGrid1.Columns.Count - 1 do
    if DBGrid1.Columns[i].Width > 200 then DBGrid1.Columns[i].Width := 200;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
  BizimRect : TRect;
  iOrtaOffset : Integer;
begin
  // Başlık Satırı Yüksekliği
  TStringGrid(DBGrid1).RowHeights[0] := 30;

  // Üst Başlıklar
  if Column.Index in [1,2,3] then
  begin // Birleştirilecek iki sütun...
    TDBGrid(Sender).Canvas.Brush.Color := clRed;
    BizimRect.Top    := 0;
    BizimRect.Bottom := TStringGrid(DBGrid1).RowHeights[0]-15;
    BizimRect.Left   := Rect.Left -1;
    BizimRect.Right  := Rect.Right+1;
    TDBGrid(Sender).Canvas.FillRect( BizimRect );
    TDBGrid(Sender).Canvas.Font.Color := clWhite;
    TDBGrid(Sender).Canvas.Font.Style := [fsBold];

    if Column.Index = 3 then
    begin
      iOrtaOffset := (TDBGrid(Sender).Columns[1].Width
                    + TDBGrid(Sender).Columns[2].Width
                    + TDBGrid(Sender).Columns[3].Width
                    - TDBGrid(Sender).Canvas.TextWidth('Film Adı, Yılı ve Yönetmeni Sütunları')
                    ) div 2 + TDBGrid(Sender).Canvas.TextWidth('Film Adı, Yılı ve Yönetmeni Sütunları');
      TDBGrid(Sender).Canvas.TextOut( BizimRect.Right - iOrtaOffset, BizimRect.Top, 'Film Adı, Yılı ve Yönetmeni Sütunları' );
    end;
  end else
  begin
    TDBGrid(Sender).Canvas.Brush.Color := clGray;
    BizimRect.Top    := 0;
    BizimRect.Bottom := TStringGrid(DBGrid1).RowHeights[0];
    BizimRect.Left   := Rect.Left  ;
    BizimRect.Right  := Rect.Right ;
    TDBGrid(Sender).Canvas.FillRect( BizimRect );
    TDBGrid(Sender).Canvas.Font.Color := clBlack;
    TDBGrid(Sender).Canvas.Font.Style := [];
  end;

  TDBGrid(Sender).Canvas.Brush.Color := clGray;
  BizimRect.Top    := TStringGrid(DBGrid1).RowHeights[0]-15;
  BizimRect.Bottom := TStringGrid(DBGrid1).RowHeights[0];
  BizimRect.Left   := Rect.Left  ;
  BizimRect.Right  := Rect.Right ;
  TDBGrid(Sender).Canvas.FillRect( BizimRect );
  TDBGrid(Sender).Canvas.Font.Color := clYellow;
  TDBGrid(Sender).Canvas.Font.Style := [];

  // Tüm Alt Başlıklar
  iOrtaOffset := ( Rect.Right-Rect.Left - TDBGrid(Sender).Canvas.TextWidth(Column.Title.Caption) ) div 2;
  TDBGrid(Sender).Canvas.TextOut( Rect.Left + iOrtaOffset, TStringGrid(DBGrid1).RowHeights[0]-15, Column.Title.Caption );
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  DBGrid1.Repaint;
end;
Düzeltme : Kaynak Kodları ve Veritabanı dahil Proje RAR paketi eklendi.
Dosya ekleri
DBGrid_BirlesikBaslik.rar
Kaynak Kodları ve MSAccess Veritabanı RAR paketi
(152.89 KiB) 187 kere indirildi
En son mrmarman tarafından 18 May 2015 07:17 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Resim
Resim ....Resim
sako
Üye
Mesajlar: 477
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Re: Dbgir Tablo Başlığı

Mesaj gönderen sako »

mrmarman çok teşekkür ederim allah razı olsun hocam. Çok büyük bir yükten kurtardınız beni...İşiniz rast gitsin...
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Dbgir Tablo Başlığı

Mesaj gönderen freeman35 »

Muharrem bey, elinize sağlık güzel olmuş. Bu tip şeylerle uğraşmayı seviyorsanız, lazarus u da denemenizi öneririm. Delphi den lazarusa component port etmek yada edilmişleri geliştirmek, yada ide üzerinde geliştirme düzeltme yapmak keyif verebilir.
Mesela benim şu öğrenme ve programı aktarma işini bitirdikten sonra ToDo bölümüne el atasım var. Neden bilmiyorum, ama bana lazarus daha sade ve basit geliyor, delphi çok karmaşaymış geliyor artık :)
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Dbgir Tablo Başlığı

Mesaj gönderen mrmarman »

Telekkürler ve de haklısınız, lazarus kurmuş ve denemiştim. Halen planlarım arasındadır.

- Diğer forumda defaten tekrarladığım bir cümle vardır.

- Kendime, bir işi yaparken üçüncü parti bir bileşen kullanmak gerekip gerekmediğini şu soruyu sorarak karar veriyorum. "Bu VCL'yi kullanmak zorunda mıyım? Olmadan yapamaz mıyım?" cevabı evet olan o kadar AZ sayıda bileşen var ki...

- Yukarıda, (soruda önerilmesi istendiği için) bileşen paketi önerirken de vicdan yaptım, onun için standart Delphi bileşeni ile deneyeyim istedim, sonuç; kendi adıma yine Delphi standart bileşenleri kazandı.

(*) Bu arada örnek projenin kaynak kodlarının yanında projenin veritabanıyla birlikte rar paketini koymayı unuttuğumu farkettim. Öğleden sonra eve geçince ilk işim yollamak olacak.
Resim
Resim ....Resim
Cevapla