Program Kalendarz - jaką kontrolkę wybrać?

0

Witam!
Dostałem jako projekt zrobienie kalendarza rolnika. Z tego co zauważyłem notatka w kalendarzu (czy warto siać, etc.) zależy od fazy księżyca w danym dniu.
Nie wiem które narzędzie warto wybrać z Tool Palette.
TCalendar ? Tylko jak dodać do niego notatki itd.

0

Mam stare Delphi (7), ale w Lazarusie TCalendar to bardzo uboga kontrolka z podstawowymi funkcjami; Jeśli zależy Ci na efektowności to warto poszukać lepszych kontrolek w sieci, albo samemu we własnym zakresie zaprogramować taką od podstaw z własnym rysowaniem; Wtedy będzie można dość łatwo dostosować kontrolkę pod własne oczekiwania.

0

Sam raczej na 100% nic nie wymyślę to dla mnie zbyt skomplikowane.

Na dobrą sprawę potrzebuję kalendarza z widokiem tygodnia i miejscem przy każdym dniu na notatki, które zależą od tego w jakim położeniu znajduje się księżyc.

0

Tworzenie własnej kontrolki jest tak samo skomplikowane, jak tworzenie aplikacji okienkowej - wystarczy podstawowa wiedza w zakresie programowania obiektowego + kreatywność i chęci;

Zawsze możesz wkorzystać podstawowy TCalendar, a notatki trzymać w jakiejś wirtualnej liście (np. TStringList) lub zbudować obpowiednią klasę do przechowywania notatek z danych dni, a podczas wybierania daty z kalendarza wyświetlać notatki np. w TMemo, TListBox, TCheckListBox, TValueListEditor czy podobnych;

Możliwości jest wiele, więc zastanów się najpierw nad tym jak interfejs ma wyglądać, potem poukładaj kontrolki na formularzu (jeśli nie chcesz oprogramować swojej) a na końcu oprogramuj je i stwórz jakiś silnik do obsługi tych notatek + zapis/odczyt do/z pliku by nie tracić ich po zakończeniu sesji.

0

Czy TCalendar umożliwia stworzenie eventu po kliknięciu na datę z kalendarza?

2

Tego nie wiem, bo nie używałem tego komponentu. Jednak mogę z czystym sumieniem polecić TStringGrid. Zobacz na dołaczony do tego posta kod w Delphi 7 wraz z exekiem. Może nie jest idealny i pisany przeze mnie dawno temu, jeszcze w Delphi 3. Ale spełnia swoje zadanie. A dodatkowo TStringGrid, poza własnością Cells posiada również własnośc Objects. Daje nam to możliwość dodawania do komórek własnego obiektu, na przykład jakiejś klasy przykładowo TWydarzenieRolnicze czy jak sobie to nazwiesz. Wtedy sprawdzamy i jeśli w danym dniu TWydarzenieRolnicze[ACol, ARow] <> nil to wiemy, że można tę komórkę TStringGrid narysować na przykład innym kolorem tekstu lub tła (zobacz sobie jak w kodzie u siebie rysuje dzień aktualny lub niedzielę). A po kliknięciu na komórkę, co również można łatwo obsłużyć, można w innych komponentach wyświetlić dodatkowe informacje jak tekst czy liczby związane z tym dniem, a nawet grafikę. Wszystko zależy jakie pola będzie posiadała Twoja klasa ze zdarzeniem (dziedzicząca po TObject).

0

Bardzo ci dziękuję :)
W międzyczasie testowałem inne możliwości i zacząłem robić to tak:

procedure TForm4.Calendar1Change(Sender: TObject);
begin
if Calendar1.Day = 1 then
    Label1.Caption := '1';
end;

procedure TForm4.FormCreate(Sender: TObject);
begin
if Calendar1.Day = 16 then
    Label1.Caption := 'jakiś hint';
end; 

Działa :) Myślę że na tym oprę program, że każdy dzień będzie zmieniał zmienną informującą o położeniu księżyca i do każdego dnia na najbliższe miesiące dopiszę wartość tej zmiennej. Nie widzę szybszego wyjścia bo niestety nie jest to do końca regularne z tego co widzę.

Doszedłem do tego że mam w procedurze (przy kliknięciu na kalendarz) sprawdzanie jaka data jest wybrana i wyświetlenie do niej informacji. Czy da się uruchomić procedurę w procedurze? Czyli chodzi mi oto żeby ta procedura była również wykonywana przy starcie programu, a nie chcę jej powielać i wklejać tego samego do drugiego eventu.

0

Form1.Create

0

Chodzi mi o to że chcę do procedury wstawić inną.

procedure TForm4.FormCreate(Sender: TObject);
begin
if Calendar1.Month = 1 then
    Label1.Caption := 'Styczeń';
end; 

Powiedzmy że tą procedurę chcę wstawić innej procedury. Da się tak żeby nie powtarzać kodu?

0

Jeśli nie wiesz w jaki sposób wywołuje się procedurę w innej procedurze to polecam najpierw siąść i nauczyć się podstaw kodzenia, o dopiero później spróbować cokolwiek napisać.

0

Już to zrobiłem. Problem leżał w innej naturze :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1