Zgryźliwość kojarzy mi się z radością, która źle skończyła.
Rozdział 13.
Zagadnienia nieco bardziej skomplikowane
C:\Dokumenty\Roboczy\Delphi 4 dla kazdego\13.doc 513
Rozdzia³ 13. ¨ Zagadnienia nieco bardziej skomplikowane 555
W rozdziale tym omówione zostaną zagadnienia, które pozwolą jeszcze bardziej udoskonalić tworzone aplikacje – między innymi:
u Dekoracje okna: paski narzędzi i paski stanu
u Udostępnianie poleceń
u Drukowanie w aplikacjach Delphi
u Użytkowanie kursorów
Rozważania te są kontynuowane w następnym rozdziale, w którym omawiane jest wykorzystanie zaawansowanych cech programowania dla Windows w aplikacjach Delphi.
Tworzenie dekoracji oknaNie chodzi tu bynajmniej o ozdobne światełka wokół frontowego okna domu, lecz o takie elementy jak paski narzędzi i paski stanu, nazywane często dekoracjami okna. Sekcja ta dotyczy właśnie takich dekoracji, a także sposobów implementowania ich w aplikacjach.
Paski narzędziObecnie paski narzędzi (zwane również paskami sterującymi lub paskami przyśpieszającymi(ang. speedbars) ) są niemal standardowym wyposażeniem programów przeznaczonych dla Windows. Użytkownicy oczekują określonych ułatwień i pasek narzędzi jest właśnie jednym z nich. Wysokiej jakości pasek narzędzi powinien posiadać następujące cechy i możliwości:
u Przyciski reprezentujące określone zadania, które można również wywołać z menu aplikacji.
u Możliwość uaktywniania i dezaktywowania przycisków w miarę potrzeb.
u Podpowiedzi opisujące funkcje przycisków.
u Dodatkowe teksty pomocy wyświetlane na pasku stanu aplikacji.
u Możliwość dokowania.
u Inne kontrolki, takie jak listy rozwijalne lub przyciski rozwijalnych menu.
Niektóre z tych cech są opcjonalne i nie muszą występować na każdym pasku. W przypadku Delphi zaimplementowanie powyższych elementów jest operacją łatwą do przeprowadzenia. Nieco później w tym rozdziale omówione zostaną zasady udostępniania poleceń (sekcja „Udostępnianie poleceń”); dyskusję na temat udostępniania przycisków paska narzędzi również odłożę do tego momentu.
Za dobrą praktykę uważa się umieszczanie na pasku narzędzi tylko takich przycisków, które posiadają odpowiadające im opcje w menu. Pasek narzędzi pomyślany jest jako alternatywa dla opcji menu, nie powinien więc zawierać elementów w tym menu nieobecnych.
W rozdziale 8. „Tworzenie aplikacji w Delphi” padło stwierdzenie, iż najprostszym sposobem skonstruowania paska narzędzi jest użycie Kreatora Aplikacji. Jego użycie jest możliwe nawet wtedy, gdy aplikacja zostanie już częściowo napisana. Wystarczy wygenerować nową aplikację, skopiować panel z paskiem narzędzi do Schowka, otworzyć aplikację nad którą pracujemy (nie ma potrzeby zapisywania stworzonej przed chwilą aplikacji) i wkleić do niej pasek przechowywany w Schowku. Zręcznie i prosto.
Niemniej jednak Kreator Aplikacji nie zapewnia wszystkich elementów, których obecności należałoby się spodziewać na pasku. Korzysta on ze starej metody tworzenia pasków narzędzi – zawierających przyciski przełączające i przyśpieszające. Bardziej polecaną metodą tworzenia pasków narzędzi jest użycie komponentów ToolBar i CoolBar (rezydujących na stronie Win32 Palety Komponentów). Komponentom tym przyjrzymy się już za chwilę.
Komponenty CoolBar i ToolBar wymagają pliku biblioteki COMCTL32.DLL w wersji 4.72.2106.4 lub nowszej, która to biblioteka powinna zostać dołączona w ramach instalacji Delphi. Jeżeli jednak nie dysponujesz najnowszą wersją tej biblioteki, możesz znaleźć ją na stronie WWW firmy Microsoft (http://www.microsoft.com). W przypadku rozpowszechniania aplikacji korzystających z tych komponentów należy instalować bibliotekę COMCTL32.DLL w wersji 4.70 lub nowszej. Do instalacji najlepiej użyć dobrego programu instalacyjnego, aby podczas instalacji swojej aplikacji nie dopuścić do zastąpienia nowej wersji biblioteki wersją starszą.
Komponent CoolBarKomponent CoolBar jest odpowiednikiem kontrolki Win32 o nazwie cool bar. Jest to specjalna kontrolka-pojemnik. W większości przypadków CoolBar służy jako pojemnik dla pasków narzędzi, ale jego użycie nie jest ściśle ograniczone do tego typu obiektów.
Wstęgi komponentu CoolBarCoolBar składa się z tzw. wstęg (ang. bands), które mogą być przesuwane i skalowane w trakcie pracy aplikacji. Po lewej stronie każdej wstęgi znajduje się uchwyt dający użytkownikowi wizualną wskazówkę co do możliwości jej przesuwania i skalowania. Wstęgi reprezentowane są przez klasę TCoolBand. Wstęga może zawierać w sobie tylko jeden komponent, którym zazwyczaj jest pasek narzędzi, ale może to być również lista rozwijalna lub dowolny inny komponent. Żeby lepiej zrozumieć zasady działania komponentu CoolBar wykonaj proste ćwiczenie:
1. Rozpocznij nową aplikację, w jej formularzu umieść komponent CoolBar.
2. W komponencie CoolBar umieść komponent ComboBox. W wyniku tej operacji Delphi stworzy nową wstęgę i w niej umieści obiekt listy; zauważ, że lista zajmuje całą szerokość wstęgi.
3. Umieść kolejny komponent ComboBox w obszarze komponentu CoolBar. Utworzona zostanie kolejna wstęga, w której wnętrzu znajdzie się drugi obiekt listy.
4. Umieść kursor między uchwytem skalowania, a obiektem listy w drugiej wstędze. Kursor zmieni swój kształt informując w ten sposób o możliwości przemieszczenia panelu. (Do przesunięcia panelu można również użyć uchwytu skalowania.) Przeciągnij wstęgę w kierunku tej znajdującej się bezpośrednio nad nią. W trakcie przesuwania pierwsza wstęga zmniejszy się, aby zrobić miejsce dla tej aktualnie przemieszczanej. Puść ją mniej więcej w środku komponentu CoolBar. Teraz można zmienić rozmiar dowolnej ze wstęg, chwytając jej uchwyt skalowania.
5. Umieść w komponencie CoolBar komponent Panel. Ponownie utworzona zostanie nowa wstęga, w której znajdzie się nowo dodany panel.
6. Wybierz komponent CoolBar i zmień właściwość AutoSize na wartość True.
7. Umieść w formularzu (poniżej komponentu CoolBar) komponent Memo, a następnie ustaw jego właściwość Align na wartość alClient.
W tej chwili formularz powinien wyglądać tak, jak przedstawia to rysunek 13.1.
Uruchom teraz swoją aplikację. Poeksperymentuj ze wstęgami przesuwając je w górę i w dół lub zmieniając ich rozmiar. Zauważ że w miarę poruszania wstęg CoolBar zmienia swój rozmiar dopasowując się w miarę potrzeb, a obiekt Memo zawsze wypełnia pozostałą przestrzeń obszaru użytkownika.
Rysunek 13.1.
Formularz zawierający komponent CoolBar i trzy wstęgi
Dostęp do wstęg umożliwia właściwość Bands. Jest to obiekt klasy TCoolBands będący listą komponentów TCoolBand. Poniższa instrukcja ukrywa drugą wstęgę:
CoolBar.Bands[1].Visible:=False;
Istnieją dwa sposoby dodawania wstęg. Pierwszy, przedstawiony przed chwilą, polega na umieszczeniu dowolnego komponentu we wnętrzu komponentu CoolBar. Drugi sposób opiera się o Edytor Wstęg. Wywołanie tego edytora wymaga dwukrotnego kliknięcia na komponencie CoolBar lub kliknięcia na przycisku z wielokropkiem, umieszczonym obok właściwości Bands w oknie Inspektora Obiektów. Przycisk Add służy do dodawania nowych wstęg, a przycisk Delete – do ich usuwania. Przyciski Move Up i Move Down umożliwiają zmianę kolejności wstęg.
Kiedy właściwość AutoSize jest ustawiona na wartość True, trzeba ją tymczasowo wyłączyć, jeżeli chcemy dodawać nowe wstęgi metodą upuszczania obiektów nad komponentem CoolBar. Ustaw właściwość AutoSize na False, powiększ komponent CoolBar, umieść w nim wybrany komponent, a następnie ponownie nadaj wartość True właściwości AutoSize.
Po wybraniu wstęgi w oknie Edytora Wstęg jej właściwości wyświetlane zostają w oknie Inspektora Obiektów (rysunek 13.2).
Właściwość Bitmap określa tło wstęgi. Do ustawienia rysunku, który pojawi się po lewej stronie wstęgi, służy właściwość ImageIndex. ImageIndex wymaga, aby właściwość ImageList komponentu CoolBar była ustawiona na poprawny obiekt klasy TImageList. Do ustawienia minimalnej wysokości i szerokości służą pola – odpowiednio – MinHeight i MinWidth. Po ustawieniu właściwości FixedSize na wartość True wstęga staje się nieruchoma.
Rysunek 13.2.
Edytor Wstęg
Inne właściwości komponentu CoolBar
CoolBar może przyjmować położenie pionowe albo poziome. Decyduje o tym właściwość Align – jej domyślną wartością jest alTop, co odpowiada ułożeniu poziomemu; żeby uczynić CoolBar paskiem pionowym, trzeba zmienić tę wartość na alRight lub alLeft. Niektóre komponenty po umieszczeniu w obszarze CoolBar, automatycznie dopasowują się do jego aktualnej orientacji.
Innym sposobem zmiany orientacji komponentu Coolbar jest nadanie właściwości Vertical wartości True.
Do ustawienia tła komponentu CoolBar służy właściwość Bitmap. Wybrana bitmapa zostanie powielona tak, aby wypełnić cały obszar tła komponentu. Zauważ, że chodzi tu tło obiektu CoolBar, a nie jakiejkolwiek indywidualnej wstęgi w nim umieszczonej (jak miało to miejsce w poprzedniej sekcji). Właściwość ImageList służy do ustawienia listy rysunków, z której to listy korzystają wstęgi przy wyświetlaniu rysunków (poczynając od lewej strony) – o ile dana wstęga ma ustawioną właściwość ImageIndex.
Właściwość AutoSize określa, czy komponent CoolBar będzie miał prawo rozszerzać się w trakcie przemieszczania wstęg. Efekt działania właściwości AutoSize był widoczny w poprzednim ćwiczeniu.
Wypróbuj komponent TControlBar umieszczony na stronie Additional Palety Komponentów. TControlBar jest rodzimym komponentem biblioteki VCL i przypomina swym który działaniem komponent TcoolBar, w odróżnieniu od niego nie jest jednak zależny od biblioteki COMCTL32. DLL, co czyni go mniej podatnym na kaprysy firmy Microsoft.
Komponent ToolBar
Komponent ToolBar odpowiada kontrolce Win32 o tej samej nazwie. Komponent ToolBar automatycznie dopasowuje rozmiar umieszczanych w nim kontrolek, dzięki czemu wszystkie one mają jednakową wysokość. ToolBar może być stosowany razem z komponentem CoolBar lub bez niego. Jeżeli dysponujesz tylko jednym paskiem narzędzi, stosuj wyłącznie komponent ToolBar. Jeżeli posiadasz kilka pasków narzędzi i chcesz dać użytkownikowi możliwość ich przemieszczania, użyj komponentu CoolBar umieszczając te paski w jego wnętrzu.
Utworzenie paska narzędzi i dodanie do niego przycisków jest operacją prostą. Jeżeli na przyciskach budowanego p...