[ prginfo @ 19.01.2010. 11:08 ] @
Koristim D2007

Na formi imam postavljena 2 TDateTimePicker-a koje korisnik menja i iz kojih se uzimaju vrednosti pomocu kojih se radi pretraga u bazi.

Problem je sto kada otvorim formu, DateTimeP. imaju odredjene vrednosti. Kada na klik dugmeta iscitavam te vrednosti, vraca mi se ok rezultat.
Medjutim, kada promenim vrednosti i opet kliknem na dugme, vracaju mi se iste vrednosti koje su bile kad se forma kreirala, iliti, ne gleda se promena vrednosti koja je nastala.

Da bi ovo proverio, stavio sam i 2 varijable tipa string koje pratim i uradio sam DateTimeToStr, tako da pratim promene, ali se one ne desavaju (ne registruju), vec se uzima prvobitna vrednost.

Gde je greska.
[ savkic @ 19.01.2010. 12:54 ] @
Startuj novi projekat, postavi jedan DateTimePicker i jedan button i u OnClick handleru upiši:

Caption := DateTimeToStr(DateTimePicker1.DateTime);
[ prginfo @ 19.01.2010. 13:13 ] @
Ok. I sta sada.

Caption forme mi se ispise sa datumom i vremenom.
Kada promenim podatak u DateTimePicker-u i ponovo kliknem na Button, dobijem novi Caption Forme.

Sta je poenta?

Ja sam pokusao da kazem, da se meni ne vraca promenjena vrednost, tj. ne gleda se promena vrednosti koja je nastala.

[ tkaranovic @ 19.01.2010. 14:42 ] @
Citat:
prginfo:
Caption forme mi se ispise sa datumom i vremenom.
Kada promenim podatak u DateTimePicker-u i ponovo kliknem na Button, dobijem novi Caption Forme.


Znači da se sa:

Caption := DateTimeToStr(DateTimePicker1.DateTime);

na Captionu Forme vidi promenjena vrednost?

Citat:
prginfo:
Sta je poenta?

Ja sam pokusao da kazem, da se meni ne vraca promenjena vrednost, tj. ne gleda se promena vrednosti koja je nastala.


Ali ako se vraća u neku promenljivu to se ne događa?

A taj kod izgleda ovako:

StrDatum := DateTimeToStr(DateTimePicker1.DateTime);

Šta se onda događa posle ovoga:

StrDatum := DateTimeToStr(DateTimePicker1.DateTime);
DateTimePicker1.DateTime := StrToDateTime(StrDatum);

Neka greška ili je u DateTimePicker1 opet početni datum i vreme?

[ prginfo @ 19.01.2010. 14:48 ] @
Poenta je da ja DateTimePicker postavim na neki datum, npr. 14.01.2010 i on mi tu vrednost vraca

Caption := DateTimeToStr(DateTimePicker1.DateTime);
Caption je 14.01.2010

Ali ako promenim DateTimePicker i postavim (u toku rada programa) na npr. 20.01.2010, i dalje mi se vrednost za Caption vraca 14.01.2010

Znaci, koju god vrednost da postavim pri kreiranju forme, kao da mi se ta vrednost zakuca, i promene se ne vide, a da pri tome mogu da menjam vrednosti DateTimePickera

To je problem.
[ prginfo @ 19.01.2010. 15:07 ] @
Postavio sam novi DateTimePicker i sa njim radi sve normalno.

Razlika je u formatu prikaza i tipu.

Ovaj koji mi radi kako treba, je standardni. Onaj koji mi ne vraca vrednosti, postavljen je da prikazuje i datum i vreme, i dtkTime je.

Kakve veze ima sve ovo?
[ tkaranovic @ 19.01.2010. 15:10 ] @
To se događa kada je na računaru podešen jedan format datuma/vremena a u DTP-u drugi. Recimo, na računaru je američki format 'dd/MM/yyyy' a u formatu DTP-a je domaći 'dd.MM.yyyy'.

Može da se stave u OnKreiranje forme formati:

ShortDateFormat := 'dd.MM.yyyy';
ShortTimeFormat := 'HH:mm:ss';
LongTimeFormat := 'HH:mm:ss';

pa neće dolaziti do tog konflikta bez obzira šta je podešano na računaru.
[ prginfo @ 19.01.2010. 15:13 ] @
Moze neki konkretniji primer.

Za sta stavljam formate u OnCreate Forme i kako?

Hvala
[ tkaranovic @ 19.01.2010. 16:05 ] @
Te varijable koje sam napisao imaju formate ya datum i vreme, one su u SysUtils unitu.

One, međutim, nemaju veze sa ovim konkretnim slučajem. Kada se DateTimePickeru stavi za format 'dd.MM.yyyy hh:mm' i u kind stavi da je za izmenu vremena - onda se datum ne može menjati. To nema, ipak, veze sa ti varijablama. Takav forma ne može da se koristi bez dodataka koje sam spominjao u temi u kojoj je preporučen takav format datuma i vremena za DateTimePicker.
[ savkic @ 19.01.2010. 21:43 ] @
> Postavio sam novi DateTimePicker i sa njim radi sve normalno.
> Razlika je u formatu prikaza i tipu.
> Ovaj koji mi radi kako treba, je standardni. Onaj koji mi ne vraca vrednosti, postavljen je da prikazuje i datum i vreme, i dtkTime je.

Aha znači imaš i datum i vreme, Delphi implentacija ima bug, ali se može lako srediti.


Code:

Dodaj sledeći handler u private sekciju forme na kojoj je kontrola.

procedure WMNotify(var Message: TWMNotify); message WM_NOTIFY;

i implementacija:

procedure TForm1.WMNotify(var Message: TWMNotify);
var
  Control: TWinControl;
begin
  inherited;
  if Message.NMHdr.code = DTN_DATETIMECHANGE then
  begin
    if PNMDateTimeChange(Message.NMHdr).dwFlags = GDT_VALID then
    begin
      Control := FindControl(Message.NMHdr.hwndFrom);
      if Assigned(Control) then
        TDateTimePicker(Control).DateTime := SystemTimeToDateTime(PNMDateTimeChange(Message.NMHdr).st);
    end;
  end;
end;

[ tkaranovic @ 20.01.2010. 05:10 ] @
Citat:
savkic:
Aha znači imaš i datum i vreme, Delphi implentacija ima bug, ali se može lako srediti.


Može onda i (sa uses CommCtrl):

Code:
procedure TForm1.DateTimePicker1Change(Sender: TObject);
 var pst: TSystemTime;
begin
 MonthCal_GetCurSel(DateTimePicker1.Handle, pst);
 DateTimePicker1.DateTime := SystemTimeToDateTime(pst);
end;


Mada je pre to nedostatak nego bag, jer je moglo je da postoji i dtkDateTime (pored dtkTime i dtkDate)...