[ Bojann @ 18.03.2005. 19:44 ] @
Radim jedan program koji se bavi rasporedom masina po nekim gradilistima. Uglavnom te masine mogu da budu slobodne, zauzete ili rezervisane za odredjeni vremenski interval.dakle, u bazi stoji podatak o tome kada je konkretna masina uzeta i kada se vraca. Takodje moguce je izvrsiti i rezervaciju.
problem je u sledecem: Kada korisnik pita da li je i kada neka masina zauzeta ja mu iz baze cupam intervale u kojem je ona zauzeta ili rezervisana. Da li ja taj raspored zauzetosti ili rezervisanosti mogu nekako da prikazem na nekakvom kalendaru kao sto je monthcalendar ili tako nesto? Da li takva nekakva komponenta postoji da se na njoj prikazuju recimo prekrizeni i neprekrizeni dani u zavisnosti od necega(konkretno kod mene od zauzetosti masina)
[ Milos D @ 20.03.2005. 14:07 ] @
Pogledaj TCalendar klasu ("Samples" stranica palete). Jedno resenje bi bilo da nasledis tu klasu, dodas event "AfterDrawCell" koji bi pozivao iz preklopljene DrawCell metode i u tom eventu onda mozes da precrtavas datume.
[ Bojann @ 20.03.2005. 14:14 ] @
Kako se dodaje event na nasledjenu kasu i kako se ona uopste nasledjuje?
[ Milos D @ 20.03.2005. 18:52 ] @
Ajde ipak varijanta bez eventa, verovatno ce ti biti lakse.

Nisam probao, ali trebalo bi otprilike ovako:

Code:


uses Calendar;

type

TMojKalendar = class (TCalendar)
// znaci klasa TMojKalendar nasledjuje klasu TCalendar
  protected
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: GridDrawState); override;
// znaci da "preklapas" metodu (proceduru objekta) DrawCell (koja inace iscrtava sadrzaj celije grid-a), odnosno dajes svoju implementaciju te metode
  end;

procedure Register;

implementation

procedure TMojKalendar.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var CellDay : word; CellDate : TDate;
begin
  // prvo pozoves nasledjenu DrawCell metodu koja ce iscrtati celiju
  inherited;
  // zatim izracunas datum celije koja se iscrtava
  CellDay := strtoint (CellText[ACol, ARow]);
  CellDate := EncodeDate (Year, Month, CellDay);
  // pa ako treba precrtati
  if TrebaPrecrtatiDan (CellDate)
     then begin
            // precrtas celiju
            Canvas.Pen.Color := clRed;
            Canvas.MoveTo (ARect.Left, ARect.Top);
            Canvas.LineTo (ARect.Right, ARect.Bottom);
          end;
end;

// Ova procedura registruje komponentu tj. postavlja ju na "Samples" stranicu palete
procedure Register;
begin
  RegisterComponents('Samples', [TMojKalendar]);
end;



Treba jos da:
1. dodas svoju funkciju "TrebaPrecrtatiDan" koja vraca true ako ga treba precrtati.
2. napravs Delfi paket (file/new/package), u njega dodas ovaj unit i instaliras paket.
[ Bojann @ 21.03.2005. 19:42 ] @
Pa necu valjda za svaki datum racunati gde i kako treba crtati? Milsim da je to puno posla za mene, a mislio sam da i delphi ima neku mocniju opciju kada je to u pitanju. U svakom slucaju, hvala na savetima
Da li neko zna neku gotovu komponentu koja radi nesto slicno?
I jos nesto: Postoji li komponenta kao na primer DBDateTimePicker, znaci komponenta koja prepoznaje polja u tabeli koja su tipa date ili time?
[ sasas @ 21.03.2005. 20:11 ] @
Možeš eventualno da pogledaš na torry.net, tamo ima kamara komponenti za kalendare, sigurno ima nešto i za tebe.
Mislim da bi ti sigurno uradile posao komponente iz JEDI VCL biblioteke, tamo imaš grupe komponenti 'Time Framework' i 'Timeline Framework', ove poslednje imaju baš lep prikaz na način na koji ti treba (kao onaj timeline iz ms encarte).

ss.
[ Milos D @ 21.03.2005. 20:15 ] @
Citat:

Pa necu valjda za svaki datum racunati gde i kako treba crtati?


Ne treba da racunas ni gde ni kako da crtas nego samo da li doticno polje (dan) treba precrtati ili ne - sve ostalo je vec uradjeno.
[ Bojann @ 21.03.2005. 20:17 ] @
Kakve su to komponente iz JEDI VCL biblioteke i gde ih mogu naci?
[ sasas @ 21.03.2005. 20:42 ] @
JEDI i JEDI VCL možeš pronaći na sourceforge.net

biblioteke su open source. vodi računa da ako sve instaliraš, JEDI VCL je zaista ogroman (mislim da ima preko 500 komponenti), ali meni je jako zanimljiv...

ss.