DbGrid Cellerinde ÜçNokta Olayı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
DbGrid Cellerinde ÜçNokta Olayı
S.A.
Dbgride alınan veriler Cell'e sığmıyorsa bazı componentlerde olduğu gibi son karakterine otomatik olarak 3 nokta koymak istiyorum.
Bunu Nasıl yapabilirim acaba
Dbgride alınan veriler Cell'e sığmıyorsa bazı componentlerde olduğu gibi son karakterine otomatik olarak 3 nokta koymak istiyorum.
Bunu Nasıl yapabilirim acaba
Re: DbGrid Cellerinde ÜçNokta Olayı
s.a yanlış hatırlamıyor isem cxgrid nesnesin de yapılabiliyodu. bi araştırın isterseniz. kolay gelsin.
Re: DbGrid Cellerinde ÜçNokta Olayı
Canvas işlemleriyle standart DBGrid için yapabilirsin.
- Canvas.TextWidth('Muharrem ARMAN') ile bu yazının ilgili canvastaki seçili font ve font özellikleri çerçevesinde ne kadarlık bir genişlik kaplayacağını hesaplatabilir, basit bir döngü ile DBGrid'in ilgili hücresinin genişliği ne kadar ise o kadara kadar bu yazıyı kırpabilirsin. Canvas.TEXTOUT ile de kırptığın bu kadarını, sonuna da '...' basarak yazdırırsan dilediğin olacaktır.
- Bu işlemleri OnDraw..... olayında gerçekleşir.
- Canvas.TextWidth('Muharrem ARMAN') ile bu yazının ilgili canvastaki seçili font ve font özellikleri çerçevesinde ne kadarlık bir genişlik kaplayacağını hesaplatabilir, basit bir döngü ile DBGrid'in ilgili hücresinin genişliği ne kadar ise o kadara kadar bu yazıyı kırpabilirsin. Canvas.TEXTOUT ile de kırptığın bu kadarını, sonuna da '...' basarak yazdırırsan dilediğin olacaktır.
- Bu işlemleri OnDraw..... olayında gerçekleşir.
Re: DbGrid Cellerinde ÜçNokta Olayı
Teşekkür Ederim Hocam
Re: DbGrid Cellerinde ÜçNokta Olayı
Mrmarman Hocam,
Ben Bu olayı bir türlü beceremedim. Sizden rica etsem küçük bir örnek vermeniz mümkünmüdür acaba ?
Teşekkürler
Ben Bu olayı bir türlü beceremedim. Sizden rica etsem küçük bir örnek vermeniz mümkünmüdür acaba ?
Teşekkürler
Re: DbGrid Cellerinde ÜçNokta Olayı
Neden olmasın...
Kod şöyle, kod içinde açıklama da bıraktım. Ayrıca hazırlanan örneğin de linkini aşağıda bulacaksın. DBGrid üzerine runtime'da mouse ile hücre boyutlarını kaydırarak değiştirdiğinde hemencecik otomatik olarak bu fonksiyon kendiliğinden devreye girecektir. ftWideString tipinde dedim ( TEXT olanlar için ) sen lazım olduğunda daha da detaylandırırsın.
Örnek resimdeki gibi bir sonuç elde etmiş olursun. Örneğin Rapidshare linkini de vereyim.. http://rapidshare.com/files/175250807/D ... amlama.rar

Kod şöyle, kod içinde açıklama da bıraktım. Ayrıca hazırlanan örneğin de linkini aşağıda bulacaksın. DBGrid üzerine runtime'da mouse ile hücre boyutlarını kaydırarak değiştirdiğinde hemencecik otomatik olarak bu fonksiyon kendiliğinden devreye girecektir. ftWideString tipinde dedim ( TEXT olanlar için ) sen lazım olduğunda daha da detaylandırırsın.
Kod: Tümünü seç
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
Var
Veri : String;
i : Integer;
begin
if Field.DataType = ftWideString then begin
if TDBGrid(Sender).Canvas.TextWidth(Field.AsWideString) > (Rect.Right-Rect.Left) then
begin // Canvas varsayılan font tipine göre, Filed içindeki text veri, eğer
// DataCell yani hücrenin eninden büyükse. (demek ki devamında örtülü kısım var)
// Bu durumda örtülü olmayan kısım olana kadar sondan ve fazladan 3 tane fazla kırpıp
// bu sonradan kırpılan fazlalık kısım yerine ... koyucaz.. nasıl mı ?
Veri := Field.AsWideString;
while TDBGrid(Sender).Canvas.TextWidth(Veri) > (Rect.Right-Rect.Left)
do Delete(Veri, Length(Veri), 1); // Sondan geri doğru kırpıyoruz..
For i := 1 to 3 do Delete(Veri, Length(Veri), 1); // 3 tane fazla kırptık...
Veri := Veri + '...';
TDBGrid(Sender).Canvas.Brush.Color := clYellow;
TDBGrid(Sender).Canvas.FillRect(Rect); // Önce renk doldur..
TDBGrid(Sender).Canvas.TextOut( Rect.Left+1, Rect.Top+1, Veri );
end;
end;
end;

Re: DbGrid Cellerinde ÜçNokta Olayı
Bir kere işim düşmüştü, Gdi fonksiyonunun zaten böyle birşey içerdiğini görmüştüm: DT_END_ELLIPSIS. Tekrar araştırırken tesadüfen bu linke denk geldim burda senin istediğin davranışları dbgride kazandırmışlar.
Professional Looking Grids with Custom Drawing
Kod: Tümünü seç
DrawText(gridOwnerDraw.canvas.Handle, PChar(str),
length(str), txtRect,
DT_SINGLELINE or DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS);
Re: DbGrid Cellerinde ÜçNokta Olayı
Hocam Allah Razı Olsun, Çok Duamı Aldınız
Gerçekten Yardımseverliğiniz için Çok Teşekkür Ediyorum
Gerçekten Yardımseverliğiniz için Çok Teşekkür Ediyorum
Re: DbGrid Cellerinde ÜçNokta Olayı
Valla @undefined daha önce ihtiyacım hiç olmamıştı ama soruyu görür görmez aklıma ilk gelen yol buydu. Canvas işlemlerine elim alışmış bir kere ya, o bakımdan daha olmadan olduruveriyoruz.
Önerdiğin kısım bütünün bir parçası. Onda da eski verinin silinmesi falan gerekiyor. Bana daha fazla iş gücü istiyormuş gibi geldi ama karşılaştırmak gibi olmasın. Henüz deneme fırsatım olmadı.

Önerdiğin kısım bütünün bir parçası. Onda da eski verinin silinmesi falan gerekiyor. Bana daha fazla iş gücü istiyormuş gibi geldi ama karşılaştırmak gibi olmasın. Henüz deneme fırsatım olmadı.
Re: DbGrid Cellerinde ÜçNokta Olayı
S.a konu dbgridden açılmışken bende bu konu altında bi soru sorayım dbgridle ilgili. Fazladan konu açmak istemedim.
mrmarman hocam birde bazı programlarda şunu görüyorum dbgridde bir hücreye tıkladığımızda o hücrenin bulunduğu satırı komple seçiyo bunun için bi kod mu kullanmamız gereyio yoksa dbgridin bir özelliğini fln mı aktif etmemiz gerekio örnek bir resimde ekleyim daha açıklayıcı olsun

Yardımcı olursanız sevinirim saygılarımla iyi çalışmalar.
mrmarman hocam birde bazı programlarda şunu görüyorum dbgridde bir hücreye tıkladığımızda o hücrenin bulunduğu satırı komple seçiyo bunun için bi kod mu kullanmamız gereyio yoksa dbgridin bir özelliğini fln mı aktif etmemiz gerekio örnek bir resimde ekleyim daha açıklayıcı olsun

Yardımcı olursanız sevinirim saygılarımla iyi çalışmalar.
- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: DbGrid Cellerinde ÜçNokta Olayı
Merhaba.
Bunu TDBGrid'in Option kısmını açtığında karşına gelen seçeneklerden RowSelect özelliğini TRUE yaparsan elde edebilirsin. Ancak bu durumda hücreleri EDIT ( DBgrid üzerinden kayıt üzerinde değişiklik ) opsiyonunu kaybedersin. Tercihi bunu değerlendirerek yapmak lazım.

Diğer yandan yine bir önceki örnek gibi canvas operasyonları ile kendin toplu satırı boyama işlemi yaparsan, bu opsiyonu kendin elle halletmiş olursun ki o zaman hem EDIT etme hakkın saklı kalır hem de istediğin satırın boydan boya seçilmesi (ya da öyle görünmesi diyelim) imkanı elde etmiş olursun.
Bunu TDBGrid'in Option kısmını açtığında karşına gelen seçeneklerden RowSelect özelliğini TRUE yaparsan elde edebilirsin. Ancak bu durumda hücreleri EDIT ( DBgrid üzerinden kayıt üzerinde değişiklik ) opsiyonunu kaybedersin. Tercihi bunu değerlendirerek yapmak lazım.

Diğer yandan yine bir önceki örnek gibi canvas operasyonları ile kendin toplu satırı boyama işlemi yaparsan, bu opsiyonu kendin elle halletmiş olursun ki o zaman hem EDIT etme hakkın saklı kalır hem de istediğin satırın boydan boya seçilmesi (ya da öyle görünmesi diyelim) imkanı elde etmiş olursun.
Re: DbGrid Cellerinde ÜçNokta Olayı
Sağolun hocam ilk söylediğiniz şuan yapmakta olduğum programda müşterileri listelemede kullandığım dbgridde olur çünkü o dbgridlerde edit olayı olmayacak. İkinci dediğinizde biraz önce forumda başka konudada okudum tam dediğiniz gibi deilde benzeri bir olaydı fakat uyguladığımda sizin dediğiniz gibi olmadı kodu tam çeviremedim kendi istediğim şekle şuan için zaten hem tüm satırı seçtirip hemde dbgrid üzerinde edit yaptırma gibi bir durum söz konusu değil ama yinede o konudada fikir sahibi olmamı sağladığınız için çok tşk ederim.
Saygılar iyi çalışmalar.
Saygılar iyi çalışmalar.
- Devler Gibi İşler Yapmak İçin Karıncalar Gibi Çalışmak Lazım ...
Re: DbGrid Cellerinde ÜçNokta Olayı
@mrmarman Hocam,
Birşey farkettim.
Bazı dbgridlerimin DrawColumnCell'inde aşağıdaki gibi satır satır renklendirme var. Eğer DrawColumnCell'inde bu kod varsa çalışmıyor 3 nokta olayımız
Ne yapmamızı önerirsiniz ?
Birşey farkettim.
Bazı dbgridlerimin DrawColumnCell'inde aşağıdaki gibi satır satır renklendirme var. Eğer DrawColumnCell'inde bu kod varsa çalışmıyor 3 nokta olayımız
Ne yapmamızı önerirsiniz ?
Kod: Tümünü seç
procedure TForm1.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
If (gdSelected in state) then // eğer seçili ise
begin
DBGrd1.Canvas.Brush.Color := $00FD959C; // zemin rengi
DbGrd1.Canvas.Font.Color := clYellow; // font rengi
end
else
begin
if (DBGrd1.datasource.dataset.recno mod 2) =0
then DBGrd1.Canvas.Brush.Color := $00C8FBFD
else DBGrd1.Canvas.Brush.Color := $00BFD7B5;
dbGrd1.Canvas.Font.Color:=clRED; // Fontun rengini değiştirir..
DBGrd1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
Re: DbGrid Cellerinde ÜçNokta Olayı
O zaman bütün renklendirmeleri aynı procedure içine taşıma opsiyonunu kullanabilirsin. Aynı procedure'de de sıralama hatası yaparsan aynı olumsuz sonucu elde edersin.
Bu satırı koyduktan sonra ilgili değişikliği yaprsanız, önce varsayılan renklendirme yapılmış olur, ondan sonra senin yapacakların işleme alınır.
Eğer tersini, yani önce kendi istediğin üç noktalı işlemi yapıp ardından bu satırı eklersen ne olur ? Önce üç nokta koyar, ardından da eski varsayılan haline döndürür.
Kısaca yapacağın işlem, önce default renklendirmenin yapılmasını sağlayacak, ondan sonra dilediğin modifikasyonun oluşmasını sağlamalısın.
Kod: Tümünü seç
DBGrd1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
Eğer tersini, yani önce kendi istediğin üç noktalı işlemi yapıp ardından bu satırı eklersen ne olur ? Önce üç nokta koyar, ardından da eski varsayılan haline döndürür.
Kısaca yapacağın işlem, önce default renklendirmenin yapılmasını sağlayacak, ondan sonra dilediğin modifikasyonun oluşmasını sağlamalısın.
Re: DbGrid Cellerinde ÜçNokta Olayı
@mrmarman Hocam,mrmarman yazdı:O zaman bütün renklendirmeleri aynı procedure içine taşıma opsiyonunu kullanabilirsin. Aynı procedure'de de sıralama hatası yaparsan aynı olumsuz sonucu elde edersin.
Hep Olumsuz sonuçları elde ediyorum. Tüm kombinasyonları uyguladım, farklı şeyler denedim, yapamadım bir türlü.
Son bir rica etsem,
Kodun son halini bir toplayabilirmisiniz acaba ?