Dzięki za uwagi.
Widzę, że użyłeś do testów programu z interfejsem klasycznym (UI z Windows). Główny nacisk kładłem na tryb ciemny (ten korzysta z VCL Styles), ponieważ nie bardzo lubię jasny interfejs, szkoda oczu :P
Nie oznacza to oczywiście, żeby zaniedbać styl klasyczny. Niestety, ograniczony jestem dostępnymi rozwiązaniami. O ile wiem, aplikacje Delphi oparte na VCL mogą korzystać ze stylu klasycznego Windows (ze stylem zdefiniowanym domyślnie w xml, w oparciu o ComCtl32.dll) lub bez nich (wygląd rodem z WinXP, jeśli zmodyfikujemy manifest). Można też korzystać z mechanizmu VCL Styles (ma wiele problemów, ale daje fajne efekty) lub ewentualnie rozwiązań trzecich (zazwyczaj płatne komponenty).
Program przy pierwszym uruchomieniu sprawdza, czy w systemie operacyjnym ustawiona jest opcja trybu ciemnego (dla aplikacji) i ustawia tryb ciemny (VCL Styles) lub "jasny" (klasyczny Windows).
Plik konfiguracyjny INI powinien utworzyć się przy pierwszym odpaleniu! (wtedy też program sprawdza dostępne klasy WMI oraz tworzy wpisy do pseudo-cache, dzięki czemu kolejne odpalenie programu nie wymaga sprawdzania dostępnych klas WMI, co znaczeni skraca czas dostępu do danych).
Spróbuję odnieść się do Twoich uwag:
Wyrzuciłbym separator ten który jest nad TPageControl
, a etykietkę z wersją bym w ogóle usunął, skoro wersja programu jest podana w oknie About
. Dolny separator też bym usunął, bo jest zbędny. Chyba na górze i dole masz kontrolki TPanel
, bo np. używasz w połączeniu z Align
, to usunąłbym im obramowanie.
Rozważę usunięcie separatorów (ale tylko w trybie jasnym). Etykieta wersji zniknie, jak program wyjdzie z fazy Beta (Zrobione)
Przycisk Close
bym usunął, bo po to każde okno ma przycisk do zamykania, aby swoich nie trzeba było dodawać. Własny przycisk przydaje się tylko, gdy formularz ma ustawiony styl bsNone
— żeby nie trzeba było używać Alt+F4. Natomiast przycisk Report
bym zmodyfikował, dając mu tytuł Create report
, Save to file…
lub coś pokroju Export data to file…
()w każdym razie z czasownikiem w nazwie), tak aby dokładnie było wiadomo do czego służy.
Hmm, chyba tak zrobię, w sumie po co dublować tę samą funkcjonalność. Nazwę dałem taką krótką, bo nie chciałem tak długiego przycisku :P No, ale może można go zwiększyć nieco, skoro wywalę przycisk "Close". (Zrobione)
Plus brak opcji eksportu danych do zwykłego pliku tekstowego, co też jest dużym minusem. Przy czym dobrze by było, aby dało się wyeksportować do pliku tekstowego wybrane strony TPageControl
.
To jest ciekawe... zastanawiam się, czy zajrzałeś do Ustawień programu. Tam jest opcja, do zmiany formatu raportu. Do wyboru jest HTML oraz TXT. Można też wybrać, które dane chcemy wyeksportować (tak, mogłem to zrobić tak, że te opcje pokażą się po kliknięciu w przycisk 'Report', ale zdecydowałem się na to, że to wszystko będzie w ustawieniach programu).
Samo tworzenie raportu też mi się trochę nie podoba. Raz, że używać okna dialogowego do wyboru katalogu docelowego, a dwa, że raport automatycznie otwiera się w przeglądarce (użytkownik nie ma możliwości wyboru czy chce go otworzyć czy tylko wyeksportować).
Tutaj jak wyżej... są na to odpowiednie opcje. Możesz zostawić domyślnie (czyli program zapyta gdzie utworzyć raport), możesz ustawić domyślny katalog wyjściowy dla raportu. Zrealizowałem to też tak, że raport możesz otworzyć (bez zapisywania go) lub otworzyć i zapisać (i kilka powiązanych z tym opcji).
Te przyciski w ogóle bym zmienił, bo nie da się do nich dostać z poziomu klawiatury, więc UX troszkę cierpi. Zmieniłbym je na zwykłe TButton
, a jeśli bardzo chcesz z ikonkami, to na TBitButton
. W każdym razie na pewno bym wybrał którąś z klas przycisków dziedziczących po TWinControl
.
To są chyba TSpeedButton (choć już nie pamiętam). Nie ma jakiejś specjalnej przyczyny dlaczego akurat ten. Dawno temu takiego użyłem i zostało (ten program jest reanimacją mojego starego projektu).
Nie ma też żadnej możliwości szybkiego skopiowania danych z tych pól. Jeśli będę chciał skopiować np. nazwę procesora, to pozostanie mi albo przepisać sobie ją ręcznie, albo wygenerować pełny raport. To można rozwiązać na wiele sposobów — można zamiast etykiet użyć TEdit
bez obramowania (tak jak to jest w oknach systemowych narzędzi), można też obsłużyć menu kontekstowe, a można np. po najechaniu kursorem wyświetlić małą ikonkę do kopiowania treści.
Tak, pełna zgoda. W przyszłości spróbuję zmienić TLabel na TEdit z odpowiednimi flagami, aby ukryć krawędzie (nie zrobiłem tego, bo to dużo zmian i uznałem, że bez tego da się żyć). Ale z pewnością to jedna z rzeczy do ulepszenia (tutaj to nie wiem jak to najłatwiej zrobić... może jednak jakaś opcja kopiowania przy każdej kontrolce, bo w trybie Ciemnym z VCL Styles z kontrolką TEdit jest za dużo zabawy (trzeba by zmieniać kolor tła i fontu, aby dopasować... zobaczę w przyszłości)
Nie wiem też czy rozmiar etykiet z informacjami w TPageControl
jest hardkodowany, ale jeśli nie, to zabezpiecz się przed skalowaniem interfejsu. Bo program wygląda tak, jakby jego minimalny rozmiar (Constraints
) był dopasowany do rozmiaru etykiet i odstępów między nimi. No i nie wiem też, czy nie trafi się taka sytuacja, że zawartość etykiety będzie na tyle długa, że najdzie na obrazek w dolnym rogu TPageControl
. Jeśli jest taka możliwość, to bym po prostu sprawdzał czy etykieta nachodzi na obrazek i jeśli tak, to bym te obrazki ukrył we wszystkich zakładkach. Poza tym zastanowiłbym się nad TScrollBox
, w razie gdyby etykiety mogły być naprawdę długie oraz miały większą wysokość niż założyłeś.
Piszę o tym dlatego, że niektóre etykiety nie mieszczą się w oknie, gdy to jest małe (TEdit
by rozwiązał ten problem):
Program powinien się skalować (interfejs wraz z kontrolkami). Obrazki nie będą skalowane (oprócz tych z nagłówka i about oraz okien pobierania danych) - w ogóle ich nie pokazuję przy DPI<>96. Zdecydowałem się na takie rozwiązanie, bo nie chciałem zwiększać rozmiaru exe (bo musiałbym dodawać obrazki dla DPI>100%). ALE, to się zmieni jak zaimplementuję rozwiązanie, w którym wszystkie obrazki zostaną przeniesione do osobnego pliku dll (rozważam taką opcję).
Tak - niektóre kontrolki Tlabel przyjmują ciągi znaków, które są za długie (zostawiłem to tak jak jest - użytkownik może powiększyć okno)
Wszystko działa dobrze, a informacje pobiera sprawnie, mniej więcej w 3-4 sekundy. Natomiast jest jeden poważny błąd — jeśli spróbuję zapisać raport w lokalizacji, do której program nie ma praw zapisu (np. bezpośrednio na C:\
), to pojawi się okienko błędu, ale przycisk do tworzenia raportu zostaje zablokowany i aby jeszcze raz spróbować wygenerować raport, trzeba wyłączyć i włączyć ponownie program.
Tak, do poprawy (blokuje przycisk, żeby go nie naklikać klika razy - ale zapomniałem o obsłudze błędów :P) (Poprawione)
No i dziwne jest to, że program tworzy plik .ini
dopiero podczas eksportu raportu, zamiast przy rozruchu, kiedy wykryje, że go nie ma. IMO to trochę dziwne zachowanie, a sam byłem zdziwiony, bo myślałem, że raport składa się z dwóch plików, a nie z jednego (tylko .html
).
To jest niemożliwe. Program tworzy plik INI (konfiguracyjny) przy 1 uruchomieniu programu. Jeśli plik istnieje, dane zapisywane są przy zamykaniu lub zmianie ustawień.
Plik raportu jest 1 plikiem (obrazki kodowane są w Base64, a style CSS są w sekcji Head).
Jest też jedna nieścisłość w interfejsie — w głównym oknie strony komponentu TPageControl
mają kolor biały:
natomiast w oknie ustawień przyjmują kolor formularza, co wygląda brzydko:
Tak, to prawda. Chyba będę musiał to zmienić (Poprawione)
Interfejs nie jest spójny. No i w innych oknach też są te nadmiarowe separatory pod nagłówkami. Poza tym, we wszystkich oknach zwiększyłbym odstęp TPageControl
od krawędzi, tak do 8px
. No i naprawił odwieczny problem z renderowaniem tytułów TGroupBox
, dodając po jednej spacji przed i po tytule. A tak w ogóle to bym te TGroupBox
wypierdzielił z głównego okna, bo ich tytuły jedynie duplikują nazwy zakładek. :D
Pomyślimy...
Program na pewno poddany zostanie jeszcze pewnym zmianom... też w kodzie... chcę użyć tablic dwuwymiarowych dla danych, które mogą mieć więcej instancji (np. monitor). Teraz używam TStringList i jest to tylko kłopot. Ogólnie, program ma być użyteczny ale też prosty i czytelny.
-Pawel