Renklendirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Renklendirme

Mesaj gönderen pma »

https://www.dropbox.com/s/9acel0l6x54hpof/1.jpg

şekildeki gibi bir dbgrid nesnem var otomasyonumda müşterime kiralama yaparken kira tarihi ve teslim tarihini date nesnesi ile alıp kirada tablomdaki date özellikli alana gönderip kaydoluyor resimdeki grid kirada tablomu yansıtıyor.

gridteki kiralı filmlerin bulunduğu tüm satırlarda güncel tarihi kontrol edip

teslim tarihini geçmemişse tüm satırın yeşil
teslim tarhini geçmişse kırmızı renk olmasını istiyorum

DBGrid1.Canvas.Brush.Color := clRed kodu ile yapmaya çalıştım ama sanırım if leri yanlış yazdım..

yardımlar için teşekkürler..
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Renklendirme

Mesaj gönderen hido »

selam altta iki örnek var gerisini sen sanırım çöze bilirsin

procedure TForm1.DBGrid1DrawColumnCell
(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn;
State: TGridDrawState);
if DataSet1.FieldByName('tarih').AsString= '09.04.2012' then
begin
grid.Canvas.Brush.Color := clSilver
end;



procedure TForm1.DBGrid1DrawColumnCell
(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Table1.FieldByName('Salary').AsCurrency>36000 then
DBGrid1.Canvas.Brush.Color:=clWhite;
DBGrid1.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Renklendirme

Mesaj gönderen xxxjedixxx »

DBGrid'in DefaultDrawing özelliğini False yapıp dener misin?
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Renklendirme

Mesaj gönderen pma »

Teşekkür Ederim xxxjedixxx yazdığınız 2 kod işe yaradı
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Renklendirme

Mesaj gönderen pma »

Programıma güncel tarihi bir değişkene atamak istiyorum bilgisayarın o günkü tarihide olabilir bunun bir yolu varmı acaba ??
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Renklendirme

Mesaj gönderen xxxjedixxx »

Kod: Tümünü seç

//Sadece Tarih için
var Tarih: TDate;

Tarih := Now; // O anki Tarih, örn: 29.04.2014
Tarih := EncodeDate(2014, 4, 29); // Manuel oluşturma

//Tarih ve Saat için
var Tarih: TDateTime;

Tarih := Now; // O anki Tarih ve Saat, örn: 29.04.2014 21:20:30
Tarih := EncodeDateTime(2014, 4, 29, 21, 20, 30, 00); // Manuel oluşturma
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Renklendirme

Mesaj gönderen pma »

Tekrar Teşekkür Ederim Yardımınız İçin..
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Renklendirme

Mesaj gönderen pma »

Kodlarımda Bir Hata Var Anlamadığım

tarih:TDate; //Global Değişken Oluşturdum

tarih := Now; //FormCrate te güncel bilgisayar tarihini aldım (29.04.2014)

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin

if (tarih) > Table1.FieldByName('Teslim_Tarih').AsDateTime then
DBGrid1.Canvas.Brush.Color:=clRed

else if (tarih) = Table1.FieldByName('Teslim_Tarih').AsDateTime then
DBGrid1.Canvas.Brush.Color:=clYellow

else
DBGrid1.Canvas.Brush.Color:=clGreen;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

tablomda heryer kırmız tarih küçük-büyük eşit farketmiyor https://www.dropbox.com/s/9acel0l6x54hpof/1.jpg
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Renklendirme

Mesaj gönderen Lord_Ares »

Birincisi now ile aldığın bugunun tarihini showmessage(datetostr (tarih)) diyerek gör ki tarih senin istediğin formatta geliyormu. Farklı bir formatta geliyor ve bu yüzden karşılaştırman doğru çalışmıyor olabilir.

ikinci dikkatimi çeken

if (tarih) > Table1.FieldByName('Teslim_Tarih').AsDateTime then
DBGrid1.Canvas.Brush.Color:=clRed

bu kod satırında diyorsun ki tarih değişkeni teslim tarih alanındaki tarih ve saatten büyükse kırmızı yap. Dün kaydedilmiş bir bilgi, haliyle bu karşılaştırmaya göre bu günün tarihinden küçük olduğu için hepsi kırmızı oluyor olabilir. Veritabanındaki kayıtlı tarihleri kontrol et ve bugunun tarihinden daha büyük bir tarih kaydı gir ve sonucu gözle.
Sanırım şurasıda AsDateTime yerine asDate olmalı. Çünkü hem tarihi hem zamanı alıyorsun o şekilde.

Şuan bulunduğum bilgisyarda Delphi kurulu olmadığı için deniyemiyorum. Fakat şöyle bir denermisin

if Table1Teslim_Tarih.AsDate < tarih then
DBGrid1.Canvas.Brush.Color:=clRed;
else if Table1Teslim_Tarih.AsDate=tarih then
DBGrid1.Canvas.Brush.Color:=clYellow;
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Renklendirme

Mesaj gönderen xxxjedixxx »

Eğer karşılaştırma yaparken saatleri dikkate almayacaksan, Now yerine Date kullan.

Tarih := Date; // saatsiz tarih için
veya
Tarih := Trunc(Now); // saatli tarihten saati temizlemek için

Bir de tablodaki tarih değeri datetime tipindeyse ve saati dikkate almak istemiyorsan saati temizle.

if Tarih = Trunc(Table1.FieldByName('Teslim_Tarih').AsDateTime) then
DBGrid1.Canvas.Brush.Color := clRed
else ....
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Renklendirme

Mesaj gönderen freeman35 »

"if TDate(Tarih) = TDate(Table1.FieldByName('Teslim_Tarih').AsDateTime)" TDate ile cast edebilirsiniz.
baze şu şekildede kullanılabilinir, Date + stringtotime('11:11:11'); tarih bilgisine istediğiniz zamanı ekleyebilirsiniz
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 !!!
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Renklendirme

Mesaj gönderen pma »

Tüm Yardımlar İçin Teşekkür Ederim Problemi son yorumdaki kod ile çözdüm..
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Renklendirme

Mesaj gönderen ozcank »

Arkadaşlar bende bir soru sormak istiyorum konu renk olarak açılmışken. Bende DBGrid1 üzerinde dolaşan barı options dan RowSelect true yaptım rengini maviden başka bir renk olarak bir türlü değiştiremedim yardımcı olabilir misiniz?
Kullanıcı avatarı
muratmutlu
Üye
Mesajlar: 57
Kayıt: 02 Tem 2005 02:44
Konum: Antalya

Re: Renklendirme

Mesaj gönderen muratmutlu »

DBGrid'in DefaultDrawing özelliğini False yapıp aşağıdaki kodu dener misin ?

Kod: Tümünü seç

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if gdSelected in state then
  begin
    DBGrid1.Canvas.Font.Color := clYellow;
    DBGrid1.Canvas.Brush.Color := clRed;
  end;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Cevapla