14 Rozdział 13


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.
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.
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
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 znalezć
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.
Rysunek 13.2.
Dodanie rysunku
do głównego okna
aplikacji poprawia
jej wygląd.
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.
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 Wyznacza skok do innego tematu (hotspot).
podkreślenie
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 wskaznik 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.
Rysunek 13.5.
Skompletowane
zagadnienie
pomocy  Log
a Call
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
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.
Aą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
Rysunek 13.6.
Skompletowany
temat pomocy
Property.
Ostatnim zagadnieniem pomocy do naszego programu jest Work Orders, który
będzie komentarzem do menu Reports. Wprowadzmy następujący tekst:
Work Order Print
Opcja umożliwia wybór oraz drukowanie wykazu prac. Wykaz prac
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.
Rozdział 13 Ostateczne poprawki 417
Rysunek 13.7.
Skompletowany
temat pomocy
Work Order Print.
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
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 wskaznik 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.
Rysunek 13.8.
Skompletowany
spis treści pomocy.
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.
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 znalezć 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
Rysunek 13.11.
Pomoc na temat
Work Order Print.
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.
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ć
podpowiedz 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 .
Rysunek 13.12.
Treść zagadnień
pomocy
wywołanych jako
pomoc
kontekstowa
pojawia się
w oknie
wyskakującym.
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;
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.
Rysunek 13.13.
Delphi jest
wyposażona
w specjalne
narzędzie
umożliwiające
współpracę
tworzonego
programu
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;
Rozdział 13 Ostateczne poprawki 429
W celu udostępnienia informacji o wersji programu, kod zawarty w listingu
wykorzystuje trzy funkcje Windows API- GetFileVersionSize,
GetFileVersionInfo iQuerryValue-. 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 znalezć
ż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
zapowiedz modułu RABTBOX0. Po uruchomieniu aplikacji i wybraniu opcji About
powinniśmy móc zobaczyć okno  O programie (por. rysunek 13.14).
Rysunek 13.14.
Nowe okno  O
programie
wykorzystuje
wcześniej
wprowadzone
informacje o wersji
aplikacji.
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;
432 Część II
Po tym do projektanta wczytujemy formularz fmRWORMDE0. Ma on teraz dwa
przyciski drukowania: pierwszy, oznaczony nagłówkiem Print, i drugi, z etykietą
Print Form. Ponieważ nie potrzebujemy dwóch obiektów spełniających tę samą
funkcję, jeden z nich wyłączymy. Klikamy na przycisku Print 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 znalezć 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.


Wyszukiwarka

Podobne podstrony:
14 rozdział 13 uglpozcs747q2fnc6u3do3dklryyvv37ige54ma
Rozdział 13
Rozdział 13 (tł Kath)
15 Rozdzial 13
Wings of the wicked rozdział 13
rozdzial$ (13)
pętle 2 wym zad 1 14 05 13
Siderek12 Tom I Część III Rozdział 13
pętle 2 wym zad 3 zmienione na ujemne 14 05 13
ROZDZIAŁ 13 Nerwiakowłókniakowatość
15 Rozdzial 13
14 Rozdzial 12

więcej podobnych podstron