Rozdział 13
Ostateczne poprawki
Obecnie należy się zatrzymać i spojrzeć wstecz. Powinniśmy dostrzec potrzebę
drobnych zmian, które uczynią program bardziej estetycznym i przyjaznym
w użyciu.
Faza przeglądania projektu po jego skonstruowaniu bywa wykonywana pobieżnie,
bez świadomości jej znaczenia. Ocena programu oczami przyszłego użytkownika
jest przydatna podczas konstruowania aplikacji. Pozwala wydobyć na jaw
problemy związane z jej działaniem Jeśli aplikacja przetrzyma krytyczną autorską
kontrolę, to są duże szanse, że zda również egzamin w normalnym działaniu.
Faza przeglądania jest ważna również dlatego, że pozwala wprowadzić do
programu pewne udogodnienia i rozszerzenia. Takie ulepszenia pozwalają cieszyć
się pracą i czynią trud programisty bardziej przyjemnym.
Ulepszenia, które wprowadzimy w tym rozdziale, to:
Wyposażenie aplikacji w logo.
Zmiana tytułu i ikony programu.
Dodanie systemu pomocy (w tym pomocy kontekstowej).
Dodanie „dymków” z objaśnieniami.
Uaktywnienie paska statusu.
Dodanie okna dialogowego „O programie”.
Dodanie przycisku umożliwiającego wydruk formularzy (i innych rozszerzeń
usprawniających system).
Dodanie okien dialogowych do potwierdzania niektórych poleceń.
Po wykonaniu tych poprawek zakończymy pracę, porównując kompletną aplikację
ze specyfikacją sporządzoną we wcześniejszym rozdziale. Sprawdzimy jej
zgodność z
założonymi na początku właściwościami, celowość rozwiązań,
stabilność oraz ogólną funkcjonalność programu.
408
Część II
Dodawanie rysunku do aplikacji
Dodawanie tła do aplikacji Delphi nie jest konieczne. Niektórzy programiści wolą
skonstruować specjalne okno, którego jedynym celem jest wyświetlenie logo.
W naszym przypadku dodamy mapę bitową do głównego okna programu,
fmRSYSMAN0
.
Zanim rysunek zostanie umieszczony na formularzu, musi powstać mapa bitowa.
Można wykorzystać jeden z
rysunków towarzyszących Delphi, Windows
lub innym pakietom, można również sporządzić własny projekt za pomocą
narzędzi typu Image Editor z Delphi. Edytor rysunków dostępny jest z menu
Tools
w folderze Delphi. Rysunki 13.1 i 13.3 prezentują przykłady wykonane przez
autora przy pomocy edytora rysunków Delphi.
Wczytujemy ponownie projekt RENTMAN (jeśli jeszcze tego nie zrobiliśmy)
i otwieramy
fmRSYSMAN0
w wizualnym projektancie formularzy. Wybieramy
środkowy panel i umieszczamy na nim komponent
Image
. Nowy obiekt
nazywamy
imSplash
i ustawiamy jego własność
Aligment
na
alClient
.
Następnie dwukrotnie klikamy na jego właściwości
Picture
i w kolejnym
okienku dialogowym wybieramy przycisk
Load
. Pojawi się następne okno (
Load
),
przy pomocy którego wybieramy mapę bitową i klikamy na opcji
Open
. Po
powrocie do okna
Picture
zatwierdzamy wybór przyciskiem
OK
.
Jeśli rysunek będzie wyświetlany na formularzu, którego wymiary mogą być
zmieniane (tak jak w naszym przypadku), to należy się upewnić, że wielkość
obrazka jest wystarczająca, by mógł wypełnić okno powiększone do pełnego
Rysunek 13.1.
Przy użyciu
narzędzia Delphi
o nazwie Image
Editor można
utworzyć własne,
oryginalne mapy
bitowe, takie jak
przedstawiona
obok.
Rozdział 13 Ostateczne poprawki
409
rozmiaru. W tym celu wystarczy powiększyć okno aplikacji, a następnie przejrzeć
w inspektorze obiektów własności
Height
i
Width
. Można utworzyć lub znaleźć
mapę bitową odpowiadającą tym parametrom.
Innym rozwiązaniem jest rozciągnięcie mapy bitowej do potrzebnej wielkości.
Takie postępowanie nie jest jednak godne polecenia, gdyż zazwyczaj kończy się
zniekształceniem rysunku. Aby rozciągnąć mapę bitową, należy nadać jej
właściwości
Strech
wartość
True
.
Ustawienie właściwości
Strech
na
True
umożliwia dodatkowo pomniejszanie
mapy bitowej, co pozwala podczas dokonywanych zmian na dostosowanie jej
wielkości do rozmiaru okna formularza. Ważne jest, aby sprawdzić poprawny
widok rysunku przy pełnym rozmiarze okna. W przypadku
fmRSYSMAN0
domyślnym rozmiarem formularza jest wielkość maksymalna.
Po prawidłowym wpasowaniu mapy bitowej do formularza, zachowujemy projekt
i uruchamiamy program. Rysunek 13.2. ilustruje widok obrazka umieszczonego na
formularzu podczas pracy programu.
Ustawienie tytułu oraz ikony programu
Możemy teraz określić tytuł oraz ikonę aplikacji. Delphi każdej aplikacji
przyporządkowuje tę samą domyślną ikonę. Takie rozwiązanie jest dopuszczalne,
dopóki tworzymy jedynie podręczne narzędzia, ostatecznie wprowadza jednak
chaos. Ikona aplikacji ma za zadanie umożliwić jej identyfikację jednym rzutem
oka oraz rozróżniać jedne programy od innych.
Rysunek 13.2.
Dodanie rysunku
do głównego okna
aplikacji poprawia
jej wygląd.
410
Część II
Aby przyporządkować aplikacji unikatową ikonę, musimy rozpocząć od wyboru
jakiegoś obrazka. Zarówno Windows, jak i Delphi zawierają całe kolekcje
możliwych do wykorzystania ikon. Możemy również utworzyć własne symbole,
wykorzystując do tego Image editor.
Następnie wybraną ikonkę możemy połączyć z
aplikacją (z
menu
Project
wybieramy pozycję
Option
i klikamy na etykiecie aplikacji), po czym wpisujemy
do okienka tytułu: RENTMAN System, wciskamy przycisk
Load Icon
i wyznaczamy nową ikonę (por. rysunek 13.4).
Ustawiony w ten sposób tytuł będzie wykorzystany w pasku zadań Windows do
identyfikacji naszego programu. Ikona będzie występowała w wielu różnych
miejscach, przede wszystkim tam, gdzie Windows wymaga ikony do
reprezentowania programu. Będzie również obecna na komputerach użytkowników
programu, jeśli w oparciu o
InstalShield
napiszemy program do instalowania
naszej aplikacji.
Rysunek 13.3. Do
zaprojektowania
ikony mającej
reprezentować
aplikację można
wykorzystać Image
Editor z pakietu
Delphi.
Rysunek 13.4.
Do połączenia
ikony z aplikacją
oraz nadania jej
odpowiedniego
tytułu
wykorzystujemy
okno dialogowe
dostępne przy
pomocy opcji:
Project\Options\Ap
plications.
Rozdział 13 Ostateczne poprawki
411
Dodawanie systemu pomocy Windows
Warto (pomimo złożoności tematu i bogatej literatury dotyczącej tworzenia,
dodawania i wykorzystywania) wyposażyć naszą aplikację w system pomocy
Windows wzorem wszystkich profesjonalnych programów.
Narzędzia do tworzenia plików pomocy
Dwa spośród licznych narzędzi warte są wymienienia:
ForeHelp
i
RoboHelp
.
Jeśli mamy zamiar serio zajmować się tworzeniem systemów pomocy, to warto
zainwestować w jeden z nich. Pozwoli to zaoszczędzić wiele godzin mozolnej
pracy. W tej części rozdziału pokażemy tradycyjną metodę tworzenia plików
pomocy.
Podstawowe zagadnienia
Aby budować zbiory pomocy Windows, należy poznać ich składniki. Każdy
kompletny zbiór pomocy zawiera trzy podstawowe pliki: plik projektu (*.HPJ-
help-project file), plik zawierający spis zawartości pomocy (*.CNT- help-contents
file) i plik przechowujący treść zagadnień pomocy (*.RTF- rich-text file). Pierwsze
dwa zbiory są plikami tekstowymi, a trzeci zawiera dane w formacie RTF. Zbiory
formatu RTF można tworzyć przy pomocy wielu edytorów tekstu, w szczególności
programem MS WORD. Wszystkie te pliki (jak również, w razie potrzeby, inne)
muszą być odpowiednio połączone przy pomocy specjalnego kompilatora pomocy
Windows.
UWAGA
Program WordPad, dołączony standardowo do Windows, może odczytywać
i zapisywać pliki w
formacie RTF, ale nie posiada niektórych narzędzi
formatujących, niezbędnych do tworzenia plików pomocy. Ponieważ nie
umożliwia tworzenia przypisów i pisania tekstem ukrytym, nie nadaje się na edytor
tekstu pomocy. Element Delphi o nazwie
TRichEdit
używa tych samych
wewnętrznych sterowników Windows, co Word Pad, więc również nie jest
narzędziem, którym moglibyśmy się tu posłużyć.
Wszystkie trzy wymienione wyżej pliki zawierają specjalne instrukcje sterujące
wyglądem i zachowaniem się wygenerowanego z nich pliku pomocy. Zanim
pojawił się Windows 95 pliki z projektem oraz z zawartością pomocy musiały być
edytowane ręcznie (chyba że wykorzystywano programy narzędziowe nie będące
elementem Windows). Począwszy od Windows 95 Microsoft dostarcza narzędzi
412
Część II
ułatwiających pracę z plikami pomocy. Zestaw nazywa się Microsoft Help
Workshop i jest dostępny w pakiecie Delphi.
Zanim utworzymy pliki projektu i spisu zwartości, musimy napisać plik z tekstem
pomocy. Zbiór powinien zawierać dowolny tekst z pewną liczbą znaków
specjalnych i
specjalnych atrybutów formatujących, które będą określać
zagadnienia pomocy oraz relacje między nimi.
Tekst pomocy jest pogrupowany według zagadnień, przy czym każde z nich
powinno znajdować się na oddzielnej stronie. Znajdujące się w obrębie każdego
tematu znaki przypisów są wykorzystywane do oznaczania tytułu zagadnienia, jego
identyfikatora, kolejności przeglądania oraz hasła indeksu. Specjalne atrybuty
tekstu wyznaczają odwołania (hotspot) łączące ze sobą różne zagadnienia. Tabela
13.1. zawiera wykorzystywane do zarządzania plikiem pomocy znaki specjalne i
atrybuty tekstu.
Tabela 13.1. Znaki specjalne i atrybuty wykorzystywane do tworzenia pliku
pomocy.
Symbol/atrybut Znaczenie
# Określa identyfikator zagadnienia, który jest
wykorzystywany przy każdym odwołaniu się do tematu.
$ Definiuje
tytuł zagadnienia.
K Określa hasło indeksu lub zbiór haseł.
+ Określa miejsce zagadnienia w ustalonej kolejności
przeglądania.
A Definiuje
słowo kluczowe
!
Definiuje miejsce uruchomienia makrodefinicji.
* Określa znacznik do warunkowego wyłączenia lub wyboru
zagadnienia
> Określa typ używanego okna.
@
Wskazuje komentarz do zagadnienia.
Podwójne
podkreślenie
Wyznacza skok do innego tematu (hotspot).
Tekst ukryty
Identyfikuje temat o danym ID- celem przełączenia.
Jedynie pierwsza pozycja- symbol identyfikatora zagadnienia (nazywany również
łańcuchem kontekstowym - ang. context string) jest aktualnie niezbędny do
Rozdział 13 Ostateczne poprawki
413
prawidłowego działania systemu, reszta jest opcjonalna. W praktyce najczęściej są
wykorzystywane pierwsze cztery, czyli: #, $, K, +.
Budowa pliku z tekstem pomocy
Znając przeznaczenie odpowiednich symboli, możemy je odpowiednio
wykorzystać. Rozpoczniemy od utworzenia nowego pliku przy pomocy procesora
tekstu. Edytor musi posiadać możliwość zapisywania plików w formacie RTF,
tworzenia przypisów oznaczonych symbolami użytkownika, podwójnego
podkreślania oraz pisania tekstu ukrytego. Najczęściej wykorzystywanym do tego
celu procesorem jest MS Word, ale można użyć każdego edytora spełniającego
wymienione wymagania.
Utworzymy trzy proste tematy pomocy do programu RENTMAN. Ustanowimy
połączenia między zagadnieniami oraz zdefiniujemy elementy indeksu dla każdego
z nich.
Rozpoczniemy od wprowadzenia następującego tekstu pomocy do pozycji menu-
Log a call
:
Log a call
Wybierając tę opcję wywołasz formularz do opisania zlecenia
związanego z
konserwacją nieruchomości. Wymaga on określenia
nieruchomości, kt
órej dotyczy zlecenie.
Wprowadzanie łańcucha kontekstowego
Umieszczamy kursor bezpośrednio przed słowem Log i wprowadzamy przypis
oznaczony symbolem użytkownika # (W MS Word 7.0 opcja
Wstaw\Przypisy
).
W tym momencie zostanie utworzony identyfikator zagadnienia. Wpisujemy
LogCall
w okienku przeznaczonym na tekst przypisu. Inne zagadnienia, które
powinny być skojarzone z
tym tematem, będą używały tego łańcucha
kontekstowego do ustanowienia połączenia. Można również wykorzystać
identyfikator zagadnienia w programie Windows Workshop; przyporządkowując
go aktualnym numerom pomocy kontekstowej, które mogą być wykorzystywane
przez aplikację.
Wprowadzanie tytułu zagadnienia
Ponownie umieszczamy wskaźnik kursora bezpośrednio przed słowem
Log
i wprowadzamy przypis oznaczony symbolem użytkownika $. W ten sposób
ustanawiamy tytuł zagadnienia. Jako tekst adnotacji wpisujemy
Log a Call
.
Ponieważ Windows pozwala na wyszukiwanie zagadnień przy pomocy tytułów, to
wprowadzenie tytułu do każdego zagadnienia na pewno się opłaca. Tytuł będzie
pojawiał się na liście ostatnio wykorzystywanych tematów pomocy (History list),
w oknie dialogowym do przeszukiwania zagadnień oraz w menu Zakładki.
Zazwyczaj brzmi identycznie jak pierwsza linijka zagadnienia.
414
Część II
Pierwsza linia tekstu zagadnienia powinna być sformatowana, podobnie tytuły
rozdziałów, paragrafów itp. Można wykorzystać większy rozmiar czcionki,
pogrubienie lub inną metodę powodującą, że tytuł będzie odróżniał się od treści
zagadnienia.
Wprowadzanie słów kluczowych
Zdefiniujemy teraz kilka haseł (słów kluczowych) do naszego zagadnienia. W tym
celu, bezpośrednio przed słowem
Log
, umieszczamy przypis oznaczony symbolem
K
, a jako treść adnotacji wpisujemy:
Log a call; Calls, logging;
Calls, entering; Calls, adding
. Powyższa zawartość będzie dostępna
w indeksie plików pomocy, co ułatwi użytkownikowi lokalizację interesującego go
tematu.
Bezpośrednio po definicji zagadnienia umieszczamy znak końca strony (w MS
Word: skrót klawiszowy CTRL+ENTER). Rysunek 13.5. ilustruje skompletowane
zagadnienie pomocy. Zauważmy, że spacje, które Word pozostawia po przypisach,
są usunięte. Warto usuwać te spacje ze względu na kłopoty, jakie, nie wiadomo
czemu, sprawiają kompilatorowi.
Następnym etapem konstruowania przykładu jest sporządzenie stron opisujących
zagadnienie
Property
- jako pomoc do pozycji
Tables
z głównego menu oraz
zagadnienie Work Orders jako pomocy do opcji
Reports
.
Na kolejnej stronie pliku wpisujemy następujący tekst zagadnienia
Property
:
Property
Rysunek 13.5.
Skompletowane
zagadnienie
pomocy „Log
a Call”
Rozdział 13 Ostateczne poprawki
415
Wybierając tę opcję wywołasz formularz do wprowadzania
i
uaktualniania spisu nieruchomości. Aby się dowiedzieć, jak
korzystać z
dziennika zleceń konserwacji, należy przejść do
zagadnienia Log calls.
Podobnie jak poprzednio wprowadzamy łańcuch kontekstowy, tytuł i słowa
kluczowe. Nie należy zapomnieć o
sformatowaniu pierwszego wiersza
zagadnienia. Powinien wyglądać podobnie do pierwszego wiersza zagadnienia
Log a Call
.
Łączenie dwóch zagadnień przy użyciu „skoków” (Hotspot)
Zajmiemy się połączeniem zagadnienia
Property
z
Log a Call
. Ustawiamy
kursor myszy na stronie
Property
, bezpośrednio po prawej stronie (bez spacji)
napisu
Log calls
. Wpisujemy tekst:
LogCall
, zaznaczamy go myszą
i ukrywamy, ustawiając na
True
jego atrybut
Hidden
(w MS Word: opcja
Format\Czcionka
). Teraz zaznaczamy tekst Log calls i podkreślamy go podwójną
linią (w MS Word: atrybut podwójnej opcji
Format\Czcionka\Podkreślenie
). W ten
sposób napis
Log calls
zostanie zmieniony w odwołanie do innego tematu,
łatwe do rozpoznania dzięki doskonale znanemu zielonemu podkreśleniu,
widocznemu po wyświetleniu pomocy przez system Windows. Po kliknięciu przez
użytkownika w obrębie tego tekstu, na ekranie pojawi się właściwe zagadnienie
pliku pomocy.
UWAGA
Skoki do tematów (hotspot) są zazwyczaj identyfikowane dzięki zielonemu
podkreśleniu. Nie jest to jedyne rozwiązanie. Twórca programu może zmienić
zarówno kolory służące do specjalnych celów, jak i atrybuty podkreślenia. Aby
zobaczyć wszystkie skoki dostępne w bieżącym oknie pomocy, należy wcisnąć
kombinację klawiszy CTRL+TAB. Wszystkie miejsca skoków zostaną
wyświetlone w kolorach odwróconych.
Ponieważ każde zagadnienie powinno kończyć się znakiem nowej strony,
wstawiamy go bezpośrednio po tekście naszego nowego tematu.
416
Część II
Ostatnim zagadnieniem pomocy do naszego programu jest Work Orders, który
będzie komentarzem do menu
Reports
. Wprowadźmy następujący tekst:
Work Order Print
Opcja umożliwia wybór oraz drukowanie wykazu prac. Wykaz p
rac
zawiera zestawienie robót koniecznych do wykonania
w
wynajmowanych nieruchomościach. Aby uzyskać więcej
informacji, można przeczytać zagadnienia Property lub Log
a Call.
Tak jak w
przypadku poprzednich tematów uzupełniamy zagadnienie
odpowiednimi przypisami, a następnie przystępujemy do ustawienia połączeń.
Rozpoczniemy od zmiany połączenia z zagadnienia Property; chcemy aby skok,
który tam ustanowiliśmy, nie powodował przejścia do innego zagadnienia, lecz
wyświetlenie go w specjalnym oknie. Jedyną różnicą, dzięki której aktywny tekst
przełącza pomoc do innego zagadnienia lub wyświetla je w oknie pomocniczym,
polega na sposobie podkreślenia odpowiedniego tekstu. Aby spowodować
wyświetlenie wskazanego zagadnienia w oknie pomocniczym, właściwe miejsce
powinno być podkreślone linią pojedynczą, a nie podwójną.
Na stronie Work Order Print umieszczamy kursor bezpośrednio po prawej stronie
(bez spacji) słowa
Property
. Wpisujemy hasło
Property
, zaznaczamy je
i ukrywamy tak, jak w poprzednim przykładzie. Następnie zaznaczamy słowo
Property
i podkreślamy je.
Analogicznie tworzymy połączenie do zagadnienia
Log a Call
, wykorzystując
do tego napis
Log a Call
. Efekt ilustruje rysunek 13.7.
Rysunek 13.6.
Skompletowany
temat pomocy
Property.
Rozdział 13 Ostateczne poprawki
417
Mając skompletowane wszystkie zagadnienia, możemy sporządzić spis treści.
Spis treści pomocy
Kompilator pomocy wymaga, aby spis treści był pierwszym zagadnieniem w pliku.
Dlatego umieszczamy kursor na początku pliku i wstawiamy znak końca strony.
Tworzymy spis treści wpisując:
RENTMAN System Spis treści
Log a Call
Add or update property
Print work orders
Następnie wstawiamy trzy podstawowe przypisy do tematu, używając słowa
Contents
jako słowa kluczowego. Kolejną czynnością będzie ustanowienie
połączeń między tematami pomocy. Skoki na tej stronie mają za zadanie
spowodować przejście do wybranego zagadnienia.
Umieszczamy kursor bezpośrednio po prawej stronie hasła
Log a
Call
i wpisujemy tekst
LogCall
, zaznaczamy go i ukrywamy, a następnie zaznaczamy
hasło
Log a Call
i podkreślamy je podwójną linią. Odpowiednio modyfikując
indeksy, powtarzamy procedurę dla haseł
Add or update property
oraz
Print work orders,
zamieniając wszystkie linie tematu na skoki do
odpowiednich tematów pomocy.
Rysunek 13.8. ilustruje skompletowany spis treści pomocy.
Przed przejściem do tworzenia pliku projektu i spisu zawartości, pozostało jeszcze
ustanowić odpowiednią sekwencję przeglądania. Ustalenie kolejności przeglądania
Rysunek 13.7.
Skompletowany
temat pomocy
Work Order Print.
418
Część II
jest potrzebne, aby móc przechodzić kolejno po wszystkich zagadnieniach
pomocy. System pomocy Windows umożliwia takie przeglądanie po wciśnięciu
klawisza
Przeglądaj
, który można uaktywnić dzięki programowi Help Workshop.
Chociaż można ustawić dowolną liczbę sekwencji przeglądania pliku pomocy, to
(ze względu na prostotę) pozostaniemy przy jednej.
Ustawiamy wskaźnik kursora bezpośrednio po lewej stronie pierwszej linii spisu
treści i wstawiamy przypis, oznaczając go symbolem użytkownika +. Jako treść
adnotacji wpisujemy słowo auto. Taki zapis jest interpretowany przez kompilator
jako zlecenie przyporządkowania zagadnieniu kolejnego numeru sekwencji
przeglądania. Chociaż możemy przyporządkować każdemu tematowi stały numer,
to takie rozwiązanie jest bardziej elastyczne i umożliwia dodawanie kolejnych
zagadnień bez konieczności przebudowy kolejki. Czynność wstawiania przypisu
„auto” powtarzamy dla każdego tematu pomocy.
Budowa pliku zawierającego zagadnienia pomocy jest zakończona. Zachowujemy
go na dysku (upewniając się, że będzie zapisany w formacie RTF ) w głównym
katalogu systemu RENTMAN, nadając mu nazwę
rentman.rtf.
Tworzenie pliku ze spisem zawartości pomocy
We wcześniejszych wersjach Windows programista musiał ręcznie tworzyć plik ze
spisem treści (chyba że korzystał z
narzędzi nie pochodzących z
pakietu
Windows). Zarówno ten plik tekstowy, jak i plik projektu były następnie łączone
z odpowiednim plikiem RTF przy pomocy kompilatora pracującego w systemie
DOS.
Rysunek 13.8.
Skompletowany
spis treści pomocy.
Rozdział 13 Ostateczne poprawki
419
Z chwilą wejścia na rynek Windows 95 Microsoft udostępnił graficzny edytor
o nazwie Help Workshop, przeznaczony do tworzenia dwóch wymienionych
plików tekstowych. Program służy również do kompilacji i testowania plików
pomocy. Narzędzie wchodzi w skład Delphi i można je znaleźć w katalogu
..\Delphi3\Help\tools
. Plik z programem nosi nazwę
HCW.EXE
.
Help Author
Pierwszą czynnością jest włączenie opcji
File\Help Author
. Uruchomienie tej opcji
ma liczne zalety. Po pierwsze, udostępnia wiele dodatkowych informacji
o systemie pomocy (takich jak numer każdego tematu pomocy), które będą
wyświetlane w czasie projektowania. Po drugie, umożliwia korzystanie z pewnych
kombinacji klawiszy do przemieszczania się po pliku pomocy (niezależnie od tego,
czy przycisk
Browse
jest aktywny, czy nie). I tak CTRL+SHIFT+
←
- pozwala
cofnąć się do poprzedniego zagadnienia, CTRL+SHIFT+
→
- umożliwia przejście
do następnego zagadnienia, CTRL+SHIFT+HOME przesuwa nas na początek
pliku, a CTRL+SHIFT+END na jego koniec.
Kolejną czynnością jest wybranie opcji
File\New
, po której należy dwukrotnie
kliknąć na opcji
Help Contents
.
Właściwe tworzenie pliku rozpoczynamy od wpisania
.\rentman.hlp
do pola
edycji
Defoult filename
(
and window
). W polu
Default
title
box
wprowadzamy
nazwę
RENTMAN system
. Kolejno wciskamy przycisk
Add Above
- i w okienku
Title
- umieszczamy tytuł: Rentman System Spis treści, a w polu
Topic ID
wpisujemy
Contents
. Nowe ustalenia zachowujemy, wciskając klawisz
OK
.
Następnie wciskamy przycisk
Add Below
, w okienku
Title
umieszczamy tytuł:
Log
a Call
, następnie w polu
Topic ID
wpisujemy
LogCall
i znów zachowujemy
zmiany wciskając klawisz
OK
. Powtarzamy proces dla pozostałych tematów
pomocy.
Po dodaniu ostatniego zagadnienia zapisujemy zbiór na dysku w głównym
katalogu systemu RENTMAN pod nazwą
rentman.cnt
. Listing 13.1. pokazuje
zawartość napisanego właśnie pliku.
Listing 13.1. Wygenerowany przez program Help Workshop plik
spisu zawartości.
:Base .\rentman.hlp
:Title RENTMAN System
1 RENTMAN System Spis treści=Contents
1 Log a Call=LogCall
1 Property=Property
1 Print a work order=WorkOrderPrint
420
Część II
Tworzenie pliku z projektem pomocy
Podobnie jak poprzedni, tak i tworzony właśnie plik, jest zbiorem tekstowym,
który możemy skonfigurować za pomocą programu Help Workshop. Po
prawidłowym utworzeniu pliku będziemy mogli skompilować projekt.
UWAGA
Mimo iż pliki ze spisem treści oraz projektem są zbiorami tekstowymi, które
można tworzyć dowolnym edytorem, to lepiej tego nie robić. Help Menager jest
wyspecjalizowanym narzędziem do zarządzania plikami pomocy i przetwarzanie
inaczej utworzonych zbiorów sprawia czasem problemy. Program ostrzega przed
używaniem zbiorów tworzonych obcymi edytorami.
Wybieramy opcję
File\New
i dwukrotnie klikamy na pozycji
Help Project
. Pierwszą
reakcją programu będzie zachęta do wprowadzenia nazwy projektu. Zmieniamy
katalog na główną kartotekę systemu RENTMAN, wpisujemy
rentman
jako
nazwę pliku i wciskamy przycisk
Save
.
Help Workshop
doda do nazwy zbioru
rozszerzenie
HPJ
.
Dodawanie do projektu plików RTF i CNT
Wciskamy przycisk
Option
, wyznaczamy
Contents
jako domyślny temat pomocy
(
Default topic
) oraz RENTMAN System jako tytuł pomocy, następnie klikamy na
przycisku
Compression
i wybieramy opcję
Maximum
. Kolejno wciskamy przycisk
Files
i w okienku
Rich
Format
Text
(RTF) files wpisujemy
rentman.rtf
,
a w polu
Contents file
wstawiamy
rentman.cnt
. Ostatnią czynnością jest
zamknięcie okna dialogowego przyciskiem
OK
.
Dodawanie do projektu przycisku „Przeglądaj”
Zaczynamy od wciśnięcia przycisku
Windows
, a po wyświetleniu się okna
dialogowego klikamy na przycisku
Add
i wpisujemy
main
w okienku
New
Window
Type
. Nowy typ okna zapisujemy, wciskając klawisz
OK
. Po powrocie do
okienka
Windows Properties
wciskamy przycisk
Buttons
i zaznaczamy przycisk
przełącznika
Browse Buttons
. Dzięki temu, po otwarciu naszego zbioru system
pomocy Windows uaktywni przycisk
Browse
, umożliwiający nawigację po pliku
pomocy zgodnie z ustaloną sekwencją przeglądania. Jeśli teraz wciśniemy przycisk
Macros
, przekonamy się, że Help Workshop dodał makrodefinicję
BrowseButtons()
do listy makr globalnych projektu pomocy. Wciskając
klawisz
OK
zachowujemy zmiany w pliku.
Rozdział 13 Ostateczne poprawki
421
Przyporządkowanie numerów pomocy kontekstowej do identyfikatorów
tematów
Po powrocie do głównego okna
Help WorkShop
klikamy na przycisku
Map
.
Następnie wybieramy
Add
, wpisujemy
Contents
do okienka
Topic ID
oraz
0
w polu numerycznym
Mapped
. Dzięki temu wywołanie pomocy kontekstowej dla
obiektów, którym nie przewidziano obsługi, spowoduje wyświetlenie spisu treści
pomocy. Zapisujemy zmiany wciskając przycisk
OK
.
Aby przyporządkować numer tematowi Log a Call, należy ponownie wcisnąć
przycisk
Add
, dodać identyfikator LogCall pod numerem
100
. Pozostawianie
rozsądnych odstępów między kolejnymi numerami ma za zadanie bezproblemowe
przyporządkowanie pośrednich liczb ewentualnym nowym identyfikatorom.
Powtarzamy procedurę przypisując tematowi Property numer
200
, a Work Order
Print liczbę
300
. Użyte numery są liczbami, które należy wykorzystać w aplikacji
do połączenia odpowiednich obiektów z
systemem pomocy. Numery
wprowadzimy jako wartości własności
HelpContext
odpowiednich
komponentów.
Po zdefiniowaniu, przyporządkowaniu i zapisaniu zmian, jesteśmy gotowi do
skompilowania i przetestowania projektu. Aby skompilować projekt, wciskamy
przycisk
Save and Compile
, znajdujący się w lewym dolnym narożniku ekranu.
Po kompilacji można zająć się testowaniem utworzonego systemu pomocy.
Testowanie pliku pomocy
Działanie pomocy można łatwo skontrolować, nie opuszczając programu Help
WorkShop. W tym celu należy wybrać opcję
File\Run WinHelp
(lub wcisnąć
przycisk ze znakiem zapytania w pasku narzędziowym). Powinno ukazać się okno
dialogowe
View Help File
. Na liście rozwijalnej
Mapped Topic ID
wybieramy
pozycję
Contents
i wciskamy klawisz
OK
. Lista zawierająca identyfikatory
zagadnień, którym przyporządkowano numery pomocy kontekstowej, służy do
symulacji wywołania pomocy kontekstowej do odpowiednich elementów
programu. Należy sprawdzić kolejno wszystkie tematy.
Aby sprawdzić działanie pomocy, należy wybrać opcję
View Help
i otworzyć nowo
utworzony zbiór. Na ekranie powinien ukazać się spis treści (Rysunek 13.9). Jeśli
wybierzemy temat Log a Call, to zobaczymy treść właściwego zagadnienia (por.
rysunek 13.10). Sprawdzamy przechodzenie między tematami, wracając do spisu
treści i wybierając zagadnienie Work Order Print (por. rysunek 13.11). Na koniec
wciskamy przycisk
Contents
, aby zobaczyć, jak sprawdza się w działaniu świeżo
utworzony plik spisu treści.
422
Część II
Rysunek 13.9.
Strona ze spisem
treści nowo
utworzonego pliku
pomocy.
Rysunek 13.10.
Na ekranie treść
zagadnienia Log
a Call.
Rozdział 13 Ostateczne poprawki
423
Połączenie pliku pomocy z aplikacją
Ostatnim i rozstrzygającym o sukcesie krokiem do integracji systemu pomocy
z aplikacją jest połączenie pliku pomocy z programem i odpowiednie ustawienie
działania pomocy kontekstowej.
Opuszczamy Help Workshop i wracamy do Delphi. Przed opuszczeniem programu
możemy wyłączyć konfigurację Help Author. Po przejściu do Delphi i wyborze
przycisku
Application
opcji
Project\Option
zauważymy, że miejsce na nazwę pliku
pomocy jest puste. Wpisujemy
rentman.hlp
i wciskamy OK.
Do wizualnego projektanta formularzy wczytujemy
fmRSYSMAN0
i uruchamiamy
narzędzie do tworzenia menu, dwukrotnie klikając komponent
MainMenu
.
Z menu File wybieramy opcję
Log a Call
i wciskamy klawisz F11, celem przejścia
do inspektora obiektów. Aby przyporządkować opcji przeznaczone jej
zagadnienie, wpisujemy liczbę
100
- jako wartość właściwości
HelpContext
.
Powtarzamy procedurę dla zagadnień Property i WorkOrderPrint, odpowiednio
przyporządkowując im numery
200
i
300
.
Następnie ustawiamy opcję
Contents menu Help
. W tym celu klikamy dwukrotnie
na komponencie
MainMenu
, a następnie, również dwukrotnie, na opcji
Contents
menu
Help
. Przy pomocy edytora kodu Delphi piszemy polecenie:
Application.HelpContext(0);
HelpContext jest metodą wbudowaną w obiekcie Application, odpowiedzialną za
wywołanie programu WinHelp z
tematem o
wskazanym identyfikatorze.
W naszym przypadku wpisaliśmy
0
, co odpowiada spisowi treści.
Rysunek 13.11.
Pomoc na temat
Work Order Print.
424
Część II
Na pasku narzędziowym aplikacji RENTMAN wybieramy przycisk
Help
i przy
pomocy klawisza F11 przełączamy się do inspektora obiektów. Przechodzimy do
strony
Events
i konfigurujemy zdarzenie
OnClick
, przyporządkowując mu
metodę
Contents1Click
zdarzenia
click
pozycji menu-
Contents
. Dzięki
temu wciśnięcie przycisku ze znakiem zapytania będzie skutkowało tak samo, jak
wybranie z menu opcji help.
Po zapisaniu na dysku zmian w projekcie zamykamy Delphi, uruchamiamy
aplikację i sprawdzamy współpracę z programem wszystkich elementów pomocy.
Dodawanie pomocy kontekstowej
Pomoc kontekstowa w Windows 95 dostępna jest poprzez nową ikonę ze znakiem
zapytania, pojawiająca się w paskach tytułu okien dialogowych aplikacji. Aby
dołączyć ten typ podpowiedzi do swojej aplikacji, należy uaktywnić opcję
biHelp
własności
BorderIcons
oraz utworzyć odpowiednie zagadnienia w
pliku pomocy.
Ponieważ mamy już całkowicie skompletowany plik pomocy, wykorzystamy go do
zilustrowania konfiguracji pomocy kontekstowej w aplikacjach Delphi.
Nie ma potrzeby tworzenia nowych zagadnień pomocy do zastosowania przez
pomoc kontekstową, jedyne czynności, jakie należy wykonać to:
Ustawić na
True
parametr
biHelp
własności
BorderIcon
jednego z
formularzy aplikacji.
Skonfigurować własność
HelpContxt
formularza, aby wskazywała
odpowiednie zagadnienie pliku pomocy.
Wykorzystamy przykładowo formularz tabelaryczny
fmRPROCGD0
tabeli
PROPERTY. Zaczniemy od otwarcia go w projektancie formularzy i przełączenia
opcji
biHelp
własności
BorderIcon
na
True
. Powinniśmy również wyłączyć
przyciski
biMinimize
oraz
biMaximize
paska tytułu. Następnie klikamy na
komponencie
DBCtrlGrid
i nadajemy jego własności
HelpContext
wartość
200
, przyporządkowaną zagadnieniu PROPERTY. W ten sposób można wywołać
podpowiedź do wszystkich komponentów formularza. Elementy, dla których
parametr
HelpContext
ma wartość
0
, dziedziczą wartość tego parametru od
swoich rodziców.
Po skonfigurowaniu pomocy kontekstowej, uruchamiamy aplikację i sprawdzamy
wyniki swojej pracy. Po wywołaniu właściwego formularza, klikamy na obrazku
ze znakiem zapytania i wybieramy dowolny komponent. W pojawiającym się
wówczas okienku powinna ukazać się treść tematu Property z pliku pomocy (por.
rysunek 13.12).
Rozdział 13 Ostateczne poprawki
425
UWAGA
Konieczność wyłączenia elementów
biMinimize
i
biMaximize
jest podyktowana
ograniczeniami Windows, a nie Delphi. Oznacza to, że pomoc kontekstowa
w Windows została zaprojektowana dla okien modalnych, które normalnie nie
posiadają przycisków „do ikony” i „pełny ekran”.
Dodawanie podpowiedzi w dymkach
Aby dołączyć do formularza dymki z podpowiedziami, wystarcza wykonać dwie
czynności:
Ustawić na
True
własność
ShowHint
formularza, która domyślnie ma
wartość
False
.
Określić treść podpowiedzi, które powinny pokazywać się w dymkach przy
określonych komponentach.
Wracamy do Delphi, w projektancie formularzy otwieramy główne okno aplikacji,
fmRSYSMAN0
i przełączamy jego właściwość
ShowHint
na
True
. Następnie
opisujemy odpowiednim tekstem własności
Hint
przycisków na pasku
narzędziowym. Na przykład, w dymku do przycisku
sbLogCall
powinno
znajdować się zdanie: „Wciśnij ten przycisk, aby zobaczyć ostatnie zlecenie
konserwacji”.
Po skonfigurowaniu podpowiedzi do przycisków, zamykamy Delphi
i uruchamiamy aplikację. Po umieszczeniu kursora myszy nad dowolnym
przyciskiem powinniśmy ujrzeć „dymek” wraz z odpowiednim komentarzem.
Istnieje możliwość zmiany sposobu wyświetlania podpowiedzi. Możemy na
przykład spowodować, aby pojawiały się one w linii statusu. W tym celu trzeba
napisać procedurę użytkownika do obsługi podpowiedzi, a następnie przypisać ją
do wbudowanego w obiekcie aplikacji zdarzenia
onShowHint
. Procedura
powinna mieć postać:
procedure(var HintStr:string; var CanShow: Boolean;
➥
var HintInfo: THintInfo) of object;
Rysunek 13.12.
Treść zagadnień
pomocy
wywołanych jako
pomoc
kontekstowa
pojawia się
w oknie
wyskakującym.
426
Część II
Oto prosty przykład procedury, która przeadresowuje miejsce wyświetlania
podpowiedzi do linii statusu:
procedure TfmRSYSMAN0.RMShowHintProc (var HintStr:string;
➥
var CanShow: Boolean; var HintInfo: THintInfo);
begin
stRENTMAN.Panels.Items[0].Text:=HintStr;
CanShow:=False;
end;
Procedurę należy zgłosić w części publicznej klasy
TfmRSYSMAN0
, na przykład:
public
{ Public declarations }
procedure RMShowHintProc (var HintStr:string;
➥
var CanShow: Boolean; var HintInfo: THintInfo);
Ostatnią czynnością jest przypisanie procedury zdarzeniu FormCreate klasy
TfmRSYSMAN0
:
procedure TfmRSYSMAN0.FormCreate( Sender: TObject);
begin
Inherited;
Application.OnShowHint:=RMShowHintProc;
end;
Jest kilka powodów, dla których raczej należy unikać opisanych tu zmian miejsca
wyświetlania podpowiedzi. Aby takie rozwiązanie naprawdę zdało egzamin, trzeba
by uwzględnić inne elementy. Przykładowo: co zrobić z podpowiedzią, gdy nie jest
już potrzebna?
Uaktywnienie paska Statusu
W pierwszej fazie projektowania formularza
fmRSYSMAN0
dodaliśmy do niego
pasek statusu i jak dotąd jeszcze się nim nie zajęliśmy. Powinien wyświetlać trzy
elementy: informację, czym zajmuje się aplikacja, nazwę aktualnego użytkownika
i wersję wykorzystywanego oprogramowania. Wyświetlanie tych trzech
komunikatów na ekranie jest bardzo przydatne (łatwiej jest ustalić wersję
programu, sprawdzić nazwę użytkownika zastosowaną do rejestracji w systemie).
Pierwszy element nie wymaga namysłu. Aby wyświetlić komunikaty statusu,
wystarczy uaktualnić pasek przed i po właściwym zdarzeniu w czasie działania
programu. Aby, na przykład, odświeżyć zawartość linii statusu w związku ze
kliknięciem na pozycji
Log a Call
menu
File
, należy w opisany poniżej sposób
zmodyfikować odpowiednią procedurę. Przed zmianą ma ona postać:
Rozdział 13 Ostateczne poprawki
427
procedure TfmRSYSMAN0.Logacall1Click(Sender: Tobject);
begin
Inherited;
dmRENTMAN
.taCALL.Insert;
fmRCALEDT0.Show;
end;
Ponieważ wcześniej wyznaczyliśmy miejsce interesującego nas teraz komunikatu
po lewej stronie paska, zmieniamy procedurę nadając jej kształt:
procedure TfmRSYSMAN0.Logacall1Click(Sender: Tobject);
begin
Inherited;
try
stRENTMAN.Panels.Items[0].Text:=
’Add
➥
a maintenance call’;
dmRENTMAN
.taCALL.Insert;
fmRCALEDT0.Show;
finally
stRENTMAN.Panels.Items[0].Text:=
’’;
end;
end;
Dodanie identyfikatora aktualnego użytkownika jest równie proste. Wystarczy
pobrać z Windows odpowiednią informację, używając do tego jednego zapytania
API. Aby zmodyfikować program, należy przejść do inspektora obiektów,
dwukrotnie kliknąć na zdarzeniu
OnShow
formularza i przy pomocy edytora kodu
wpisać następujące polecenia :
MaxUserName:=30;
SetLength(UserName,MaxUserName);
GetUserName(Pchar(UserName),
MaxUserName);
SetLength(UserName,Pred(MaxUserName);
stRENTMAN.Panels.Items[1].Text:= ’User: ’+’UserName’;
Należy się upewnić, że w nagłówku modułu RSYSMAN0 znajdują się deklaracje
zmiennych:
UserName: String;
MaxUserName: Integer;
Procedura wykorzystuje funkcję Windows
GetUserName
do pobrania nazwy
aktualnego użytkownika. Zwracany przez funkcję łańcuch zostanie wyświetlony
w odpowiednim miejscu paska statusu.
Trzecim i ostatnim elementem paska statusu jest numer wersji programu. Delphi
jest wyposażony w specjalne narzędzie, umożliwiające współpracę tworzonego
programu z
VERSIONINFO
. Z
poziomu Delphi możemy skonfigurować
informacje o numerze wersji, jaka będzie raportowana przez naszą aplikację. Jak
428
Część II
widać na rysunku 13.13. przy pomocy okna dialogowego Delphi-
Project Option
możemy określić różnorodne elementy zbioru
VERSIONINFO
.
Dodamy do aplikacji kod, który umożliwia wydobycie tych informacji,
i wyświetlenie ich w pasku statusu. Musimy najpierw zlokalizować w inspektorze
obiektów zdarzenie
onCreate
formularza
fmRSYSMAN0
i dwukrotnie na nim
kliknąć. Powinniśmy zobaczyć wprowadzone wcześniej oprogramowanie,
powodujące wyświetlenie komunikatu o nazwie użytkownika, należy do niego
dopisać kod zawarty w listingu 13.2.
Listing 13.2. Kod potrzebny do wydobycia informacji
o aktualnej wersji programu.
VersionSize:=GetFileVersionInfoSize(PChar(Application.ExeName
➥
),Dummy);
If (VersionSize<>0) then begin
SetLength(VersionBuffer,VersionSize);
SetLength(Version,VersionSize);
If (GetFileVersionInfo(PChar(Application.ExeName),
➥
Dummy, VersionSize, PChar(VersionBuffer))) and
(VerQueryValue(PChar(VersionBuffer),'\StringFileInfo\04
➥
0904E4\ProductVersion',Pointer(Version),
➥
VersionSize)) then
stRENTMAN.Panels.Items[2].Text:='Version:
'+Version;
end;
Aby projekt został prawidłowo skompilowany, musimy siê upewniæ, ¿e
w nagłówku metody FormCreate znajduj¹ siê nastêpuj¹ce deklaracje:
var
VersionBuffer, Version : String;
VersionSize : Integer;
Dummy : Integer;
Rysunek 13.13.
Delphi jest
wyposażona
w specjalne
narzędzie
umożliwiające
współpracę
tworzonego
programu
VERSIONINFO.
Rozdział 13 Ostateczne poprawki
429
W celu udostępnienia informacji o wersji programu, kod zawarty w listingu
wykorzystuje trzy funkcje Windows API-
GetFileVersionSize
,
GetFileVersionInfo
i
QuerryValue
-. Po uaktualnieniu dane zostają
wyświetlone w pasku statusu.
UWAGA
Funkcje
GetFileVersionSize
,
GetFileVersionInfo
i
QuerryValue
mają szczególne wymagania: wartość
Pchar
przekazywana do procedury nie
może wskazywać na blok pamięci read-only. Próba przekazywania wartości przez
stałą - kończy się błędem niedozwolonego dostępu (stałe łańcuchowe są
przechowywane w sekcji read-only kodu wykonywalnego). Widocznie funkcje
zmieniają dane wejściowe podczas pobierania wskazanych zasobów.
Aby zobaczyć, jak programy zewnętrzne wykorzystują informacje o naszej
aplikacji zawarte w zbiorze VERSIONINFO, zamykamy program i uruchamiamy
Windows Explorer. Wyszukujemy katalog RENTMAN, prawym klawiszem myszy
klikamy na zbiorze
RENTMAN.EXE
i w menu wybieramy opcję
Property
. Jak
zauważymy, oprócz przycisku
Ogólne
, dostępnego dla wszystkich plików, pojawi
się przycisk
Wersja
. Po jego wciśnięciu można zapoznać się informacjami
o programie wprowadzonymi w Delphi.
Możliwość tworzenia zbioru VERSIONINFO z poziomu IDE jest jeszcze jednym
przykładem, jak głęboko Delphi współpracuje z Windows API. Nie można znaleźć
żadnego elementu Windows API, którego Delphi nie kontroluje.
Dodawanie okna „O programie”
Kolejnym zadaniem z naszej listy życzeń jest dodanie okna „O programie”. Takie
okienko posiada każda szanująca się aplikacja Windows. Służy do dostarczania
takich informacji, jak: nazwiska autorów programu, numer jego wersji, numery
telefoniczne pomocy technicznej itp. Czasami figlarni programiści wciskają do
niego ukryte informacje lub rysunki (powszechnie zwane „jajkami
wielkanocnymi” - formularz „O programie” Delphi 1.0 zawiera ukryty obrazek
Andersa Hejlsberga- głównego architekta Delphi).
WSKAZÓWKA
Aby zobaczyć „pisanki” ukryte w
Delphi, należy wcisnąć klawisz ALT
i wprowadzić tajne hasło: developers team quality. Na ekranie powinna pojawić
się lista z nazwiskami.
430
Część II
Wracamy do Delphi i tworzymy nowy formularz, dziedziczący właściwości
formularza About ze składnicy obiektów (Object Repository). Nadajemy mu
nazwę
fmRABTBOX0
i nagłówek „O programie RENTMAN”. Dwukrotnie
klikamy na formularzu i wpisujemy do procedury obsługi zdarzenia
FormCreate
kod zawarty w listingu 13.3.
Listing 13.3. Obsługa zdarzenia FomCreate formularza „O
programie” wyznacza wartości jego najważniejszych
komponentów.
Procedure TfmRABTBOX0.FormCreate(Sender: Tobject);
var
VersionBuffer, VersionNoText, ProductNameText,
LegalCopyrightText,
CompanyText : String;
VersionSize : Integer;
Dummy : Integer;
begin
inherited;
VersionSize:=GetFileVersionInfoSize(PChar(Application.ExeName),
➥
Dummy);
If (VersionSize<>0) then begin
SetLenght(VersionBuffer,VersionSize);
SetLenght(VersionNoText,VersionSize);
SetLenght(VersionNameText,VersionSize);
SetLenght(LegalCopyrightText,VersionSize);
SetLenght(CompanyText,VersionSize);
If (GetFileVersionInfo(PChar(Application.ExeName), Dummy,
➥
VersionSize,PChar(VersionBuffer))) and
(VerQuerryValue(PChar(VersionBuffer),’\StringFileInfo\
➥
04090E4\ProductVersion’,Pointer(VersionNoText),
➥
VersionSize)) and
VerQuerryValue(PChar(VersionBuffer),’\StringFileInfo\
➥
04090E4\ProductName’,Pointer(ProductNameText),
➥
VersionSize)) and
VerQuerryValue(PChar(VersionBuffer),’\StringFileInfo\
➥
04090E4\LegalCopyright’,Pointer(LegalCopyrightText),
➥
VersionSize)) and
VerQuerryValue(PChar(VersionBuffer),’\StringFileInfo\
➥
04090E4\ProductVersion’,Pointer(CompanyText),
➥
VersionSize)) then begin
Version.Caption:=VersionNoText;
ProductNameCaption:=ProductNameText;
Copyright.Caption:=LegalCopyrightText;
Comments.Caption:=CompanyText;
end;
end;
end;
Rozdział 13 Ostateczne poprawki
431
Podobnie jak oprogramowanie do wyświetlania w pasku statusu informacji
o wersji programu, powyższy kod wykorzystuje do aktualizacji informacji
o specyficznych własnościach aplikacji i wyświetlania ich w oknie „O programie”
zdefiniowany wcześniej zbiór VERSIONINFO
Aby połączyć nowy formularz z głównym oknem aplikacji, wpisujemy następujący
kod do opcji
About
w menu
Help
okienka dialogowego
fmRSYSMAN0.
fmRABTBOX0.ShowModal;
Na koniec wybieramy opcję
File\Use Unit
i w bloku deklaracji
Uses
dodajemy
zapowiedź modułu
RABTBOX0
. Po uruchomieniu aplikacji i wybraniu opcji
About
powinniśmy móc zobaczyć okno „O programie” (por. rysunek 13.14).
Dodawanie przycisku do drukowania formularzy.
Praca będzie przebiegała sprawniej dzięki zawartym w Delphi mechanizmom
dziedziczenia. Zaczniemy od otwarcia w projektancie Delphi protoplasty klasy
formularzy-
fmDataBaseForm
. Umieszczamy na nim komponent
BitBtn
około centymetra po prawej stronie elementu
DBNawigator
. Niech obiekt
nazywa się
bbPrintForm
, a jego nagłówek brzmi Print Form. Kojarzymy
z przyciskiem ikonkę, wpisując do własności
Glyph
adres mapy bitowej
Print.bmp
, która znajduje się podkatalogu ..
\Delphi\Images\Buttons
.
Następnie klikamy dwukrotnie na przycisku i wpisujemy linię kodu:
Print;
Rysunek 13.14.
Nowe okno „O
programie”
wykorzystuje
wcześniej
wprowadzone
informacje o wersji
aplikacji.
432
Część II
Po tym do projektanta wczytujemy formularz
fmRWORMDE0
. Ma on teraz dwa
przyciski drukowania: pierwszy, oznaczony nagłówkiem
, i drugi, z etykietą
Form
. Ponieważ nie potrzebujemy dwóch obiektów spełniających tę samą
funkcję, jeden z nich wyłączymy. Klikamy na przycisku
Form
i ustawiamy
semafor
visible
na
False
. Chociaż nie jesteśmy w
stanie usunąć
dziedziczonego obiektu, to możemy uczynić go niewidzialnym.
Po uruchomieniu aplikacji na wszystkich formularzach powinien znajdować się
przycisk umożliwiający drukowanie.
Dodawanie okien dialogowych do potwierdzania decyzji
o drukowaniu raportów
Ostatnim elementem jest dodanie okien dialogowych do potwierdzania decyzji
o drukowaniu raportów. Jeśli ich nie ma, wybranie raportu z menu lub wciśnięcie
przycisku szybkiego dostępu powoduje uruchomienie procesu tworzenia raportu
bez możliwości wycofania się z decyzji. Profesjonalnie napisane aplikacje nie
mogą tak działać. Każda czynność zabierająca więcej czasu lub mogąca
spowodować trwałe zmiany (potencjalnie destrukcyjna), powinna wymagać
potwierdzenia.
Dodanie okien dialogowych potwierdzających decyzję nie jest skomplikowane. Do
projektanta formularzy wczytujemy
fmRSYSMAN0
i w menu
Report
wybieramy
pozycję
Task List.
W edytorze kodu powinna pojawić się procedura obsługi
zdarzenia
OnClick
. Musimy znaleźć początek procedury i wpisać następujące
polecenie:
If (MessageDlg(
’Czy drukować raport Task List?’,
mtConfirmation, mbYesNoCancel, 0)<>mrYes) then
Exit;
Polecenie wywołuje wbudowaną funkcję
MessageDlg
i pyta, czy raport ma być
wydrukowany. Pierwszy parametr zawiera treść pytania wyświetlanego w oknie,
drugie określa rodzaj wyświetlanego okienka( w tym przypadku typowe żądanie
potwierdzenia decyzji). Trzeci element określa przyciski wyświetlane w okienku,
w tym przypadku
Yes
,
No
i
Cancel
. Ostatni parametr to numer przyporządkowanej
pomocy kontekstowej, tu: spisu treści pomocy.
Zachowujemy aplikację i uruchamiamy program.
Tą samą metodą możemy kontrolować drukowanie wszystkich raportów.
Wystarczy dołączyć podobną linię kodu na początku każdej procedury
OnClick
odpowiedniej pozycji menu, nie zapominając o zmianie treści opisu zapytania.