W projekcie, nad którym pracuję już bodaj szósty miesiąc, potrzebuję użyć dedykowanego komponentu, który pozwoli użytkownikowi wybrać kolor z zadanej palety; A że interfejs programu będzie zupełnie kastomowy - piszę kolejny komponent praktycznie od podstaw, dlatego że musi pasować do całości i posiadać dedykowaną funkcjonalność;
Niestety Lazarus póki co nie wspiera dynamicznie łączonych paczek (packages), dlatego dla każdego nowego komponentu piszę aplikację testową, w której PaintBox
"udaje" ten właściwy komponent;
Oczywiście wszystko nie jest zaprogramowane w tym testowym programie, bo to raczej nie ma sensu; Ma on pozwolić na szybkie sprawdzenie czy wszystkie algorytmy działają prawidłowo i wykluczyć tracenie czasu na rekompilowanie środowiska; W każdym razie komponent będzie bardzo podobny do tego (albo i identyczny - zastanawiam się jeszcze), który widać na poniższym zrzucie:
To co widać po lewej jego stronie to lista kafelek z kolorami (przewinięta w prawo do końca), a ta duża kafelka po prawej to podgląd koloru na trochę większej przestrzeni; Na nim będzie malowana jeszcze maska, czyli grafika PNG z półprzezroczystą fakturą, a na jej dolnej części (na jaśniejszym pasku) będzie kod koloru (specyficzny dla danej palety, nie RGB); Ramki rysowanej linią przerywaną nie będzie w ogóle - służy jedynie do testów;
Natomiast tytuł okna ustalany jest na podstawie indeksu aktywnego koloru; Jeżeli kliknie się w daną małą kafelkę, poprzednio aktywna zostanie odznaczona, nowa zostanie zaznaczona i przemalowana zostanie kafla poglądowa (ta duża); Jeśli kliknie się w puste pole, na którym nie znajduje się mała kafelka, lub w pole podglądu - tytuł okna zmieni się na odpowiedni tekst (że pod kursorem nie ma kafelka z kolorem do wyboru);
Funkcji kryjących się pod przyciskami raczej nie trzeba tłumaczyć - służą do przewijania listy kolorów;
Co sądzicie o takim komponencie? Wygląda ciekawie, czy może zbyt nudno/ubogo?
W razie czego do posta dorzucam źródła dla Lazarusa i plik wykonywalny - można się pobawić; Do kompilacji nie potrzeba żadnych dodatkowych modułów czy paczek; Kod nie jest zbytnio skomplikowany - trochę macierzy i rekordów, trochę malowania i nieco podstawowej arytmetyki; Jeżeli komuś przyda się kod, to niech korzysta bez ograniczeń.
PS: Plik wykonywalny został przemielony przez strip.exe i upx.exe.
PS1: skan pliku wykonywalnego na VirusTotal