DateTimePickere Combobox style gibi görsel verme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

DateTimePickere Combobox style gibi görsel verme

Mesaj gönderen Serhat »

İyi akşamlar...

DateTimePickere style özelliği olmadığında görselde, göze hoş görünmüyor, combobox da style özelliği csDropDownList daki gibi DateTimePickere nasıl bir uygulama yapabilirim...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: DateTimePickere Combobox style gibi görsel verme

Mesaj gönderen mrmarman »

Şimdi söyleyeceğim şeyi bir öneri olarak sayma, sadece vakit geçiriyorum.
Bir ComboBox'u DateTimePicker ile birlikte kullanmak üzere bir test... Flicker yapıyor ama başka eklentilerle bu da aşılabilir. Şu an aklıma ilk bu geldi...
Resim

Kod: Tümünü seç

procedure TForm1.ComboBox1DropDown(Sender: TObject);
Var
  P:TSmallPoint;
begin
  With TComboBox(Sender) do begin
    Visible := False;
    DateTimePicker1.Top     := Top;
    DateTimePicker1.Left    := Left;
    DateTimePicker1.Width   := Width;
    DateTimePicker1.Visible := True;

    // DateTimePicker'in mouse ile tıklanan sondaki yerini hedef alıcaz...
    P.Y := DateTimePicker1.Height div 2;
    P.X := DateTimePicker1.Width - P.Y;
    PostMessage(DateTimePicker1.Handle,WM_LBUTTONDOWN,
    MK_LBUTTON, longint(p) );
    PostMessage(DateTimePicker1.Handle,WM_LBUTTONUP,
    MK_LBUTTON, longint(p) );
  end;
end;

procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
  ComboBox1.Items.Text     := DateTimeToStr( DateTimePicker1.DateTime );
  ComboBox1.ItemIndex      := 0;
  DateTimePicker1.Visible := False;
  ComboBox1.Visible := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DateTimePicker1.Visible  := False;
  DateTimePicker1.DateTime := Now;
  ComboBox1.Style          := csDropDownList;
  ComboBox1.Items.Text     := DateTimeToStr( DateTimePicker1.DateTime );
  ComboBox1.ItemIndex      := 0;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: DateTimePickere Combobox style gibi görsel verme

Mesaj gönderen Serhat »

Aklıma comcobox da döngü kullanarak 30 günlük bir tarih oluşturma yöntemi geldi, fakat bir türlü çalıştıramadım. :N(

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
  for i := ComboBoxDate.Items.Count - 30 downto 0 do
  begin
    ComboBoxDate.Items.BeginUpdate;
    ComboBoxDate.Items.Clear;
    ComboBoxDate.Items.Add(DateTimeToStr(Date));
    ComboBoxDate.Items.Add(DateTimeToStr(Date + i));
    ComboBoxDate.Items.EndUpdate;
    ComboBoxDate.ItemIndex := 0;
  end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: DateTimePickere Combobox style gibi görsel verme

Mesaj gönderen mrmarman »

Senin için bir çalışma...

Kullanırken, hangi aya ait günlük döküm alacaksan, o aydan bir tarih girmen referans için yeterli.
İşlem sonunda otomatik olarak referans tarihe odaklanıyor, dilersen son satırı silebilir yerine ItemIndex := 0 diyebilirsin. Sana kalmış.

Kod: Tümünü seç

Uses DateUtils;

procedure TarihDoldur( RefTarih:TDate; ComboBoxDate:TComboBox );
var
  dtTar : TDate;
begin
  dtTar := Int( DateUtils.StartOfTheMonth( RefTarih ) );
  ComboBoxDate.Items.BeginUpdate;
  ComboBoxDate.Items.Clear;
  while INT(dtTar) <= INT(DateUtils.EndOfTheMonth( RefTarih )) do
  begin
    ComboBoxDate.Items.Add( DateToStr( dtTar ) );
    dtTar := DateUtils.IncDay( dtTar, 1 );
  end;
  ComboBoxDate.Items.EndUpdate;
  ComboBoxDate.ItemIndex := ComboBoxDate.Items.IndexOf( DateToStr( Int(RefTarih) ) );
end;
Kullanımı :

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  TarihDoldur( now, ComboBox1 );
end;
Resim
Resim ....Resim
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Re: DateTimePickere Combobox style gibi görsel verme

Mesaj gönderen badkursat »

Merhabalar.

MrMarman hocamızın kodlarını da kullanarak TEdit türevi bir class oluşturdum umarım işinize yarar. Isterseniz modifiye ederek bileşen haline de getirebilirsiniz.
Resim

Bütün Dökümanlar:
https://yadi.sk/d/3WAdKvcngkbbV
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: DateTimePickere Combobox style gibi görsel verme

Mesaj gönderen mrmarman »

Eline sağlık güzel çalışma.
Küçük bir ekleme faydalı olabilir gibi... Eğer tarih içeriği mevcut ise yani en az ikinci defa tarih paneli açılıyorsa, o zaman referansı NOW'dan değil de mümkünse (Try/Except) TEXT'deki tarihten alması kullanıcının elini kolaylaştırır diye değerlendiriyorum.

Aşağıdaki eklenen kısım yani... Başarılar.

Kod: Tümünü seç

procedure TMyDatePicker.OnTarihBoxGoster(Sender: TObject);
begin
  If Not FAcik Then
    Begin
      FBasePanel.Visible := True;
      FAcik := True;
    end
  else
    Begin
      FBasePanel.Visible := False;
      FAcik := False;
    end;

  FBasePanel.Width := Self.Width;
  FBasePanel.Left  := Self.Left;
  FBasePanel.Top   := Self.Top + Self.Height;

// Eklenen kısım burası
// --------------------------------------------------------------
  if Self.Text <> '' then
    try FTempDate := StrToDate( Self.Text )
    except FTempDate := Now; end
  else FTempDate := Now;
// --------------------------------------------------------------

  FTarih.Caption := Ay(DateUtils.MonthOfTheYear(now));
  TarihDoldur(FTempDate,FListBox);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: DateTimePickere Combobox style gibi görsel verme

Mesaj gönderen brs »

badkursat yazdı:Merhabalar.

MrMarman hocamızın kodlarını da kullanarak TEdit türevi bir class oluşturdum umarım işinize yarar. Isterseniz modifiye ederek bileşen haline de getirebilirsiniz.
Resim

Bütün Dökümanlar:
https://yadi.sk/d/3WAdKvcngkbbV


:bravo:
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Cevapla