DBGrid içerisinde Check sembolü gösterme ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
nnicc39
Üye
Mesajlar: 26
Kayıt: 20 Nis 2006 08:59
Konum: Çankırı

DBGrid içerisinde Check sembolü gösterme ?

Mesaj gönderen nnicc39 »

Paradox dosyasında logical bir alan var. Bu alanın değeri DBGrid içerisinde True ve False olarak gözüküyor haliyle. Ben True yerine check sembolü koymasını istiyorum. Bunu tek bir aktif kayıt için DBCheckBox kullanarak yapabildim. Fakat tüm kayıtlarda nasıl göstereceğimi bulamadım. Herkese iyi çalışmalar.
cagatay77
Üye
Mesajlar: 37
Kayıt: 31 Eki 2003 12:34

Mesaj gönderen cagatay77 »

Kullanmak istediğin özellik malesef DBGrid nesnesinde bulunmuyor. Bu ve bunun gibi birçok kullanışlı özellik için QuantumGrid'i öneririm. Aldığı parayı sonuna kadar hakeden componentlerden biri bence.
turkcanfidan
Üye
Mesajlar: 380
Kayıt: 31 Eki 2005 03:26

Mesaj gönderen turkcanfidan »

Arkadaş haklı o yüzden dbgrid le hiç uğraşmayın.

Konu ile ilgili olarak bknz: viewtopic.php?t=14352&view=previous
nnicc39
Üye
Mesajlar: 26
Kayıt: 20 Nis 2006 08:59
Konum: Çankırı

Mesaj gönderen nnicc39 »

Arkadaşlar Teşekkürler. Fakat;

Şu an program oldukça ilerlemiş durumda. Pek çok işimi DBGrid ile hallettim. Bunu da çözülürse çok iyi olacak. Bunu kodla yapmanın yolu var mı?
celalatak
Üye
Mesajlar: 70
Kayıt: 27 Şub 2004 12:41

Mesaj gönderen celalatak »

Önce forma bir DBCheckBox koyun. DBgridin DBGrid1ColEnter ve DBGrid1DrawColumnCell presedürlerine aşağıdaki kodları kendi alanınıza uyarlıyarak yazın.

Kod: Tümünü seç

procedure TfrmOdemeAl.DBGrid1ColEnter(Sender: TObject);
begin
if DBGrid1.Columns[DBGrid1.SelectedIndex].FieldName='aciklama' THEN
         DBCheckBox1.Visible:=true
         else
         DBCheckBox1.Visible:=false;
end;

Kod: Tümünü seç

procedure TfrmOdemeAl.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
if (gdfocused in state) and (column.FieldName='aciklama') then
        begin
        dbcheckbox1.SetBounds(rect.Left+dbgrid1.Left+1,
        rect.Top+dbgrid1.Top+1,rect.Right-rect.Left+1,
        rect.Bottom-rect.Top+1);
        end;

end;
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Eğer DBGrid üzerinde değişiklik yaptırmıyorsan aşağıdaki kodu DrawDataCell eventine yazabilirsin. Forma iki adet TImage koyman gerekiyor. İlkinin adı imgChecked, ikincisinin adı imgUnchecked. Elbette resimleri istersen ImageList'e de atabilirsin, ya da private tanımlayacağın iki tane TBitmap de kullanabilirsin. Tamamen sana kalmış. Resimlerin Transparent özelliğini kullanacak olursan daha güzel sonuç elde edersin.

Ben üşendiğimden sadece Max fonksiyonu için Math unitini de ekledim. Eğer senin unitinde eklenmemişse ya eklemen , ya da Max yerine aynı işi yapacak bir fonksiyon yazman gerekiyor.

Kod: Tümünü seç

procedure TForm1.dbgrd1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
  pt:TPoint;
begin
  if Field.DataType = ftBoolean then
  begin

    if gdSelected in State then
      dbgrd1.Canvas.Brush.Color:=clHighlight
    else
      dbgrd1.Canvas.Brush.Color:=clWindow;

    dbgrd1.Canvas.FillRect(Rect);

    if gdFocused	in State then
      dbgrd1.Canvas.DrawFocusRect(Rect);

    pt.X:= Max(((Rect.Right - Rect.Left) div 2 - imgChecked.Width div 2) + Rect.Left, Rect.Left);
    pt.Y:= Max(((Rect.Bottom - Rect.Top) div 2 - imgChecked.Height div 2) + Rect.Top, Rect.Top);

    if Field.Value then
      dbgrd1.Canvas.Draw(pt.X, pt.Y, imgChecked.Picture.Bitmap)
    else
      dbgrd1.Canvas.Draw(pt.X, pt.Y, imgUnchecked.Picture.Bitmap);
  end;
end;
Cevap yazmamın sebebi sorunun çözülmemiş olması değil, örnek kod olması içindir. Denemedim ama sanırım celalatak'ın yazdığı kod da işe yarayacaktır.

Kolay gelsin,
Bahadır Alkaç
nnicc39
Üye
Mesajlar: 26
Kayıt: 20 Nis 2006 08:59
Konum: Çankırı

Mesaj gönderen nnicc39 »

Celelatak. Sizin söylediğinizi ben soruyu sorarken söylemiştim. Tek bir kayıt için DBCheckBox ile yapılabiliyor. Fakat ben bütün kayıtlarda aynı anda görünmesini istiyorum. Sanırım Opt2000 sizin söylediğinizde de sadece bir kayıtta gösteriyor.
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

celalatak ve benim söylediğimiz DBGrid'in onDraw eventinde çalıştığı için her kayıtta geçerli.

Kolay gelsin,
Bahadır Alkaç
nnicc39
Üye
Mesajlar: 26
Kayıt: 20 Nis 2006 08:59
Konum: Çankırı

Mesaj gönderen nnicc39 »

Arkadaşlar ben size tam olarak anlamadım herhalde. Celalatak kardeş; Sizin yazdığınız kodun aynısını ben daha önce yazmıştım. . Opt2000 sizinkinde de aynı mantık geçerli. İlkinde dbcheckbox in yeri değişiyor ikincisinde de image nesnesinin. Çalışıyor. Fakat Liste halinde alt altta aynı anda check sembolü göstermiyor.
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

ya mustafa abi boşuna söylemiyor arama yapın diye
bu konu kaç kere konuşuldu

viewtopic.php?t=9455

viewtopic.php?t=13006
bu grid
http://www.aseyazilim.com/download.asp?git=2 adresinde mevcut
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Cevapla