Merhaba.
Tarihe göre listviewde sıralama yaptırıyorum, fakat bir sorunla karşı karşıya kaldım.
Calendar tarihi click yaptığımda normal olarak (26.03.2018) olarak veriyor
aynı tarihi ikinci kez click yaptığımda ise (00.00.0000) olarak tarihi veriyor. Bu sorun neden kaynaklı olabilir?
procedure TForm2.CalendarView1Click(Sender: TObject);
begin
showmessage(datetostr(CalendarView1.Date));
end;
Şimdi denedim çok garip bir durum. Ben de ilk defa karşılaştım. Her gün bir şeyler öğreniyorum bunun için sana da teşekkür.
Şöyle test ettim, aynı anda birden fazla tarih seçme imkanından yola çıktım, her click olayında CalendarView1.SelectionCount olayına baktım (0) veya (1) oluyordu. (1) olduğunda doğru değer veriyor (0) olduğunda ters köşe oluyordu.
Ben de Seçim adedini teke düşürürsem ne olur diye bakındım
CalendarView1.SelectionMode := TSelectionMode(0); //smNone;
şeklinde yapınca düzeldi. Anladığım odur ki, ilk tıklamada seçmiş, ikinci tıklamada seçimi kaldırmış oluyoruz.
Bilgine...
Şöyle bir üçkağıt yaptım. Hani mouse move olurken değeri okuyoruz ya, orayı şöyle yapınca mode ne olursa olsun en son mouse pozisyonundaki DATE değeri global bir değişkenden alındı.
var
xDate, xClickDate : TDate;
procedure TForm1.CalendarView1Click(Sender: TObject);
begin
xClickDate := xDate;
showmessage(datetostr(xClickDate));
end;
procedure TForm1.CalendarView1DrawDayItem(Sender: TObject;
DrawParams: TDrawViewInfoParams; CalendarViewViewInfo: TCellItemViewInfo);
begin
xDate := CalendarViewViewInfo.Date;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CalendarView1.SelectionMode := TSelectionMode(2); //smNone:0, mSingle:1, smMultiple:2
end;
Rica ederim.
Hata demeyelim, seçimi geri alma opsiyonu var diyelim.
Sadece ifade kısmını yazılımcı tarafından elden geçirilerek renginin değiştirilmesi vs. ile yeniden düzenlenmesi gerekiyor.
Başarılar.
Biraz eskide kalmış bir konu lakin alternatif çözüm olarak müsaadenizle sunmak istedim. CalendarView1 in Properties inden SelectionMod'u smNone yaptığınızda sorun ortadan kalkmaktadır.