background image

 

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. 

background image

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. 

background image

 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. 

background image

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. 

background image

 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 

background image

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 

background image

 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. 

background image

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” 

background image

 Rozdział 13 Ostateczne poprawki 

415

 

Wybierając tę opcję wywołasz formularz do wprowadzania 

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. 

background image

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 

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. 

background image

 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. 

background image

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. 

background image

 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 

background image

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. 

background image

 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. 

background image

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. 

background image

 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. 

background image

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).  

background image

 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. 

background image

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ć: 

background image

 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 

background image

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. 

background image

 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. 

background image

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; 

background image

 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. 

background image

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 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.