Delphi Can

Orjinalini görmek için tıklayınız: CalendarView tarih değeri
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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ı. Big Grin
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;
(26-03-2018, Saat: 16:34)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]Ş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ı. Big Grin
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;


Teşekkür ederim, CalendarView1 hatalı olduğunu düşünmeye başlamıştım cevabınızla emin oldum. 
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.