W dzisiejszym artykule przedstawię sposób na stworzenie prawdziwego zegara, takiego ze wskazówkami i z wyświetlaczem. Cały projekt oprzemy na DelphiX, bo najlepiej nadaje się do naszych celów. Zegar będzie miał trzy wskazówki, każda w innym kolorze, wskazująca godzinę będzie najkrótsza, a sekundy najdłuższa. Jako tło zalecam użycie jakiegoś obrazka przedstawiającego tarczę zegara o rozmiarze 256×256. Żebyście nie musieli się zbytnio przemęczać, dołączam do projektu gotowy obrazek, wykonany własnoręcznie.
Wstawmy na formę potrzebne komponenty:

TDXDraw – Name:draw, Width:256, Height:256
TDXImageList – Name: imagelist
TDXTimer – Name: timer, Interval: 1, ActiveOnly: false

Właściwość AutoSize formy ustawicie na true i BorderStyle na bsSingle. Dodajcie jeszcze rysunek tarczy do komponentu imagelist.

Teraz musimy przemyśleć, jak będziemy rysowali nasze wskazówki. Na tarczy zegara, wskazówka sekundowa ma zakres od 0-59, czyli 60 wartości, wskazówka minutowa to samo, ale zauważmy, że wskazówka godzinna nie ma 24 wartości, tylko na 12, i obraca się o dwa razy o 360 stopni w ciągu doby. Będziemy również potrzebowali trzech tablic, jednej do przechowywania informacji o aktualnym czasie, drugiej do przechowywania informacji o tym, o ile procent obrotu dana wskazówka się obróciła (to może być trochę niezrozumiałe, ale zaraz zobaczycie o co chodzi), i trzeciej do przechowywania stopnia obrotu wskazówki. Do pobrania aktualnego czasu użyjemy funkcji Time. Wszystko oczywiście umieścimy w procedurze OnTimer komponentu timer. Zadeklarujmy więc nasze zmienne i tablice:

Teraz część najbardziej nas interesująca czyli obliczanie położenia wskazówek zegara. Najpierw musimy odpowiednio pociąć tekst i wsadzić informacje o czasie do komórek tablicy czas. Aha, jeszcze jedna uwaga dla nie obeznanych :), kąty podajemy w radianach, a nie w stopniach (2PI=360 stopni). Następnie obliczamy właśnie ten procent obrotu i na końcu obliczamy kąt obrotu wskazówki. Dziwicie się pewnie, dlaczego jeszcze odejmujemy PI/2 (90 stopni). Ano dlatego, że jak byśmy mieli normalnie 0 stopni, to by nam wskazówka wskazywała godzinę 3, a u nas 0 stopni musi być na godzinie 12, a godzina 3 musi mieć 90 stopni, więc musimy odjąć PI/2, żeby nam to dobrze wyszło. No i wreszcie rysowanie naszych wskazówek. Jak już wcześniej napisałem, każda ma inny kolor, grubość i długość. Do rysowania przyda się znajomość sinusów i cosinusów, bo bez tego nic nie zrobimy. Oto część dalsza procedury:

Jeszcze jedna rzecz. Dodając tego kod do zdarzenia OnCreate formy, zmienimy kształt naszej tarczy na okrągłą:

Nie wiem czy się to komuś przyda, ale efekt wygląda ciekawie 🙂

Autor: krajew4