Rozdział 11.
Narzędzia i opcje Delphi
W skład Delphi wchodzi kilka narzędzi, które mają wspomóc Cię w procesie projektowania aplikacji. W tym rozdziale poznasz kilka z tych narzędzi, w szczególności:
Edytor Graficzny (Image Editor)
Komunikaty i system komunikatów Windows
WinSight
Edytor Kolekcji Pakietów (Package Collection Editor)
Konfigurowanie menu Tools
Ustawienia środowiska Delphi (Delphi Environment Options)
Na początku przyjrzysz się w/w narzędziom w sposób ogólny, by następnie przekonać się, w jaki sposób można dodawać własne narzędzia do menu Tools. Na końcu rozdziału przyjdzie pora, by zapoznać się z oknem dialogowym ustawień środowiska.
|
Oprócz narzędzi wyżej wymienionych Delphi oferuje również mnóstwo narzędzi, związanych z tworzeniem baz danych - takich jak Database Desktop, BDE Administrator, SQL Builder i SQL Explorer. Dyskusja na temat tych narzędzi zajęłaby zbyt dużo miejsca, jak na możliwości tego rozdziału. |
Edytor Graficzny
Edytor Graficzny Delphi umożliwia tworzenie i edytowanie bitmap (.bmp), ikon (.ico) i kursorów (.cur). Oprócz tego można również tworzyć projekty zasobów, składające się z wielu bitmap, ikon i kursorów przechowywanych w pojedynczym pliku (.res). Plik taki może być następnie dodany do projektu Delphi, umożliwiając wykorzystanie zapisanych w nim zasobów. Na rysunku 11.1 przedstawiony został Edytor Graficzny z otwartą bitmapą.
Rysunek 11.1. Edytor Graficzny z przykładową bitmapą |
|
|
Wszystkie rysunki w Windows są bitmapami niezależnie od tego, czy są one rzeczywistymi plikami bitmap (.bmp), czy też ikonami lub kursorami. W niniejszym rozdziale wszystkie rysunki będą dla uproszczenia nazywane bitmapami. Edytor Graficzny obsługuje jedynie pliki bitmap w stylu Windows; inne formaty plików, takie jak PCX, TIFF, JPEG i GIF nie są rozpoznawane. |
Edytor Graficzny jest uruchamiany przez podwójne kliknięcie na jego ikonie w katalogu Delphi lub wybranie polecenia menu ToolsImage Editor. Jest on jest samodzielnym narzędziem - można go uruchomić niezależnie od środowiska IDE.
Kolory obiektów i tła
Edytor Graficzny umożliwia tworzenie rysunków dwu- i czterokolorowych, a w przypadku plików bitmap również 256-kolorowych. Podczas rysowania można wybrać dowolny kolor spośród dostępnych. W lewym dolnym rogu edytora znajdują się dwa okienka zawierające bieżący kolor obiektów i tła. (Kolor obiektów reprezentowany jest przez lewe okienko.)
Podczas korzystania z paska narzędzi graficznych można rysować zarówno kolorem obiektów jak i kolorem tła. Do rysowania kolorem obiektów należy stosować lewy przycisk myszy - narysowany w ten sposób np. prostokąt wypełniony będzie kolorem obiektów; narysowanie go przy użyciu prawego przycisku spowoduje wypełnienie go kolorem tła. Zasada ta obowiązuje w przypadku większości narzędzi graficznych.
|
Tekst wypisywany za pomocą narzędzia Text posiada kolor obiektów - nie można nadać mu koloru tła. Jeżeli jednak zajdzie taka potrzeba, należy zmienić kolor obiektów na kolor tła i dopiero wtedy zastosować to narzędzie. |
Zmiana koloru obiektów wymaga kliknięcia lewym przyciskiem myszy na dowolnym kolorze występującym w palecie. (Paleta kolorów biegnie wzdłuż dolnej krawędzi Edytora Graficznego). Po wybraniu nowego koloru obiektów reprezentujące go okienko zostanie uaktualnione, wskazując nowy odcień. Aby zmienić kolor tła, wystarczy kliknąć prawym przyciskiem myszy na wybranym kolorze palety.
|
W przypadku edycji rysunku 256-kolorwego paleta kolorów będzie zaopatrzona po obu stronach w przyciski przewijania, umożliwiające dotarcie do wszystkich oferowanych barw. |
W przypadku załadowania istniejącego pliku bitmapy kolory palety zostaną z góry przez nią zdeterminowane. Podczas tworzenia nowego 256-kolorowego rysunku stosowana jest domyślna paleta kolorów. Do ustalenia koloru tła i obiektów można posłużyć się narzędziem zakraplacza. Narzędzie to pozwala ustawić kolor przez pobranie próbki z miejsca jego użycia w rysunku.
Aby ustawić kolor obiektów wybierz z palety narzędzie zakraplacza, umieść jego końcówkę nad porcją obrazu zawierającą interesujący Cię kolor i kliknij lewym przyciskiem myszy. Aktywny kolor dla obiektów zostanie zastąpiony kolorem wskazanym przez zakraplacz. W celu ustawienia koloru tła, należy zamiast lewego przycisku posłużyć się prawym. Narzędzie zakraplacza jest nieocenione, kiedy potrzebne jest dokładne dopasowanie koloru bieżącego do koloru stosowanego uprzednio.
|
Działanie kolorów tła i obiektów w Edytorze Graficznym może odbiegać od innych edytorów bitmap, z którymi miałeś do czynienia. Dla przykładu, w niektórych programach graficznych krawędź wypełnionej figury jest rysowana kolorem obiektu, a jej wnętrze wypełniane jest kolorem tła. W przypadku Edytora Graficznego krawędź jest pod tym względem nieodróżnialna od wnętrza figury - figura jako całość posiada bądź to kolor obiektów, bądź to kolor tła. |
Kolor przezroczysty i kolor odwrócony
W przypadku ikon i kursorów możliwe jest zastosowanie koloru przezroczystego (ang. transparent - słowo kolor jest tu pojęciem umownym). Narysowanie piksela w „kolorze przezroczystym” równoważne jest z … brakiem jego narysowania (podobnie, jak niezauważalne jest naklejenie na rysunek fragmentu przezroczystej folii); dzięki temu możliwe jest „prześwitywanie” spod ikony (lub kursora) fragmentów tła, na którym aktualnie się ona (on) znajduje. Niemal każda ikona i każdy kursor korzysta z koloru przezroczystego.
Innym przykładem koloru umownego jest kolor odwrócony (ang. inverted) - „narysowanie” w danym miejscu piksela w kolorze odwróconym jest równoważne odwróceniu (do koloru dopełniającego) piksela aktualnie znajdującego się w tym miejscu.
Koloru odwróconego używa się znacznie częściej niż koloru przezroczystego. W trakcie edycji kursora lub ikony oba te kolory widoczne są obok palety kolorów w postaci dwóch pól z zakrzywioną linią biegnącą przez ich środek.
|
Standardowo, nowy kursor i nowa ikona posiadają tło wypełnione kolorem przezroczystym. |
Narzędzia rysunkowe Edytora Graficznego
Narzędzia rysunkowe Edytora Graficznego są podobne do stosowanych w innych programach tego typu. Ponieważ są to narzędzia w miarę popularne, nie będą one tutaj szczegółowo opisywane.
Piętnaście minut eksperymentów z Edytorem Graficznym przyniesie Ci więcej korzyści od czegokolwiek, co można by było napisać tutaj na ten temat. Uruchom edytor i pobaw się nim przez chwilę, ja zaczekam.
Na samej górze palety Edytora Graficznego znajdują się dwa narzędzia: markiza (Marquee) i lasso (Lasso). Ich działanie jest bardzo podobne, dlatego zostaną omówione razem. Oba umożliwiają zaznaczenie określonego obszaru bieżącego rysunku. Markiza zaznacza obszar prostokątny. Po jego wybraniu należy narysować (przeciągając myszą) prostokątny obszar ograniczający. Kiedy klawisz myszy zostanie zwolniony, zaznaczony obszar zostanie obrysowany. Lasso działa w podobny sposób, ale umożliwia zdefiniowanie obszaru o dowolnym kształcie. Obszar zaznaczony lassem jest identyfikowany przez pulsujący wzór.
|
Korzystając z lassa nie trzeba zamykać obszaru. Po zwolnieniu przycisku myszy edytor automatycznie domknie obszar rysując linię łączącą punkt początkowy i końcowy. |
Po zdefiniowaniu obszaru, fragment rysunku zawarty w jego wnętrzu może zostać skopiowany, wycięty i wklejony w dowolnym miejscu tego samego lub innego rysunku (jednocześnie może być otwartych kilka bitmap). Kiedy wybierzesz polecenie menu EditPaste zaznaczony fragment rysunku zostanie umieszczony w lewym górnym rogu bitmapy i obrysowany. Teraz wklejony fragment można przeciągnąć na swoją właściwą pozycję.
Kursor znajdujący się nad wklejonym fragmentem przyjmuje kształt dłoni. Oznacza to, że można chwycić fragment bitmapy, przeciągnąć go w inne miejsce i upuścić. Czynność tę można powtarzać wielokrotnie, aż do uzyskania pożądanego efektu. Kiedy wklejony fragment znajdzie się na właściwej pozycji wystarczy kliknąć kursorem poza jego obszarem, a zostanie on włączony do istniejącego rysunku.
|
Edytor Graficzny udostępnia szybką metodę wycinania i wklejania. Stwórz obszar przy pomocy lassa lub markizy, następnie umieść kursor w jego wnętrzu i przeciągnij go. Zaznaczony fragment rysunku będzie się przemieszczał zgodnie z ruchem kursora myszy. |
Po wycięciu fragmentu rysunku lub przemieszczeniu go metodą drag-and-drop, zajmowany przez niego obszar zostanie wypełniony bieżącym kolorem tła.
|
Używając poleceń Copy i Paste można kopiować fragmenty jednej bitmapy do drugiej. Najpierw otwórz oba rysunki w Edytorze Graficznym. Zaznacz fragment oryginalnego rysunku, który chcesz skopiować, a następnie wybierz polecenie menu EditCopy. Przejdź do drugiego rysunku i wklej skopiowany fragment poleceniem EditPaste. W miarę potrzeby, przemieść wklejony rysunek na swoją pozycję. |
|
Jeżeli w chwili wykonywania operacji wklejania na rysunku zaznaczony jest dowolny obszar, wklejany rysunek zostanie pomniejszony lub powiększony tak, aby pasował do rozmiaru zaznaczonego obszaru. |
Narzędzie gumki (Eraser), w przeciwieństwie do pozostałych narzędzi, wykorzystuje przyciski myszki w sposób odwrotny. Podczas gumowania lewym przyciskiem myszy wykorzystywany jest kolor tła, natomiast prawy przycisk gumuje kolorem obiektów.
Narzędzie tekstu (Text) umożliwia umieszczanie tekstu na rysunku. Rodzaj tekstu zależy od bieżących ustawień, modyfikowanych poleceniem menu Text. Dzięki niemu można zmienić sposób wyrównywania (do lewej, do prawej lub centralnie), a także rodzaj czcionki i jej atrybuty (podkreślenie, pogrubienie, kursywa). Aby zmienić rodzaj czcionki użyj polecenia menu TextFont. Pozostałe narzędzia jednoznacznie wskazują na swoje przeznaczenie. Jak już wspomniałem wcześniej, odrobina czasu spędzona z Edytorem Graficznym nauczy Cię wszystkiego, co musisz wiedzieć o tych narzędziach.
|
Rysując prostokąt, można wymusić powstanie kwadratu przez wciśnięcie i przytrzymanie klawisza Shift. Podobnie korzystając z narzędzia elipsy (Ellipse lub Filled Ellipse) można stworzyć idealny okrąg (lub koło). Użycie klawisza Shift umożliwia również tworzenie idealnych linii (pionowych, poziomych lub pod kątem 45 stopni). |
Powiększanie
Edytor Graficzny umożliwia operowanie na bitmapie przy jej maksymalnym powiększeniu. Powiększenia można dokonać narzędziem palety (Zoom) lub poprzez menu View. Aby przybliżyć określony fragment obrazu narzędziem powiększenia, najpierw należy wybrać go z palety, a następnie zaznaczyć obszar na rysunku, który ma ulec powiększeniu. Powiększenie będzie się zmieniać w zależności od rozmiaru prostokątnego obszaru, jaki stworzyłeś przez przeciąganie. Po powiększeniu możliwe jest dokonywanie zmian w najmniejszych detalach rysunku.
Aby powiększyć obraz z poziomu menu, wybierz polecenie ViewZoom In lub naciśnij kombinację klawiszy Ctrl+I. Polecenie menu powiększa obraz predefiniowaną liczbę razy. Do ponownego zmniejszenia służy polecenie menu ViewZoom Out (Ctrl+U) lub ViewActual Size (Ctrl+Q).
Podczas tworzenia kursora lub ikony Edytor Graficzny dzieli widok na dwie części (rysunek 11.2).
Rysunek 11.2. Edycja ikony |
|
Chociaż możliwe jest powiększenie dowolnej strony podzielonego okna, zazwyczaj powiększa się jego lewą część, podczas gdy rysunek w prawej części zachowuje rozmiar rzeczywisty, tak jak zostało to przedstawione na rysunku 11.2.
Paleta grubości linii
Paleta grubości linii jest wyświetlana bezpośrednio pod paletą narzędzi. W zależności od wybranego narzędzia paleta prezentuje linie różnej grubości (jak na rysunku 11.2) lub kształty pędzli (jak np. na rysunku 11.1). Aby wybrać grubość linii, należy kliknąć na jednej z pięciu widocznych pozycji. Od tego momentu, podczas wszelkich operacji, stosowana będzie nowa grubość linii, aż do chwili jej ponownej zmiany. W podobny sposób odbywa się zmiana pędzla.
Praca z plikami bitmap
Można rozpocząć tworzenie bitmapy od początku lub załadować bitmapę istniejącą i na niej dokonać modyfikacji. Do otwarcia pliku bitmapy służy polecenie menu FileOpen (pliki bitmap mają rozszerzenie .BMP). Aby utworzyć plik nowej bitmapy, należy wybrać polecenie FileNewBitmap File. Efektem będzie otwarcie okna właściwości bitmapy (Bitmap Properties - rysunek 11.3).
Rysunek 11.3. Okno dialogowe opcji bitmapy |
|
W oknie tym można określić początkowy rozmiar bitmapy (w pikselach), a także liczbę jej kolorów. Możliwe jest stworzenie bitmapy 2-kolorowej, 16-kolorowej lub 256-kolorowej.
|
Edytor Graficzny nie obsługuje bitmap składających się z więcej niż 256 kolorów. |
Wybierz rozmiar i ilość kolorów, a następnie kliknij na przycisku OK. W edytorze wyświetlone zostanie puste okno. Teraz można przystąpić do tworzenia rysunku. Po zakończeniu edycji wybierz jedno z poleceń menu FileSave lub FileSave As, aby zapisać plik bitmapy na dysk.
Podczas pracy nad plikiem bitmapy Edytor Graficzny zawiera w swoim menu element o nazwie Bitmap. Menu to składa się tylko z jednego polecenia - Image Properties (właściwości rysunku). Jego wybranie powoduje wyświetlenie okna identycznego z tym, jakie pojawia się podczas tworzenia nowego pliku bitmapy. Tym razem okno to służy do zmiany rozmiaru i ilości kolorów edytowanej bitmapy.
|
Istnieje jedna różnica między oknem właściwości bitmapy otwieranym w chwili tworzenia nowego pliku, a oknem otwieranym dla istniejącego pliku bitmapy. Okno wyświetlane dla istniejącej bitmapy zawiera dodatkowe pole wyboru o nazwie Stretch. Pole to znajduje zastosowanie podczas zmiany rozmiaru bitmapy: przy wyłączonej opcji Stretch bitmapa nie będzie rozciągana (w żadną ze stron) po zmianie jej rozmiaru; przy włączonej opcji bitmapa zostanie rozciągnięta tak, aby dopasować się do nowego rozmiaru. Rozciąganie bitmapy odbywa się z konieczności w sposób przybliżony, dlatego wynikowa bitmapa może być znacznie niższej jakości niż oryginał. |
Chociaż Edytor Graficzny jest doskonałym narzędziem w przypadku prostych bitmap, prawdopodobnie nie uznasz go za narzędzie odpowiednie do tworzenia skomplikowanych grafik. Jeżeli wymagasz bitmap wysokiej jakości, godna rozważenia może okazać się opcja zakupienia profesjonalnego pakietu graficznego lub zatrudnienia artysty grafika, który zajmie się tworzeniem bitmap.
|
Nie zapomnij przejrzeć zasobów sieci dotyczących artystów grafików komputerowych. Ludzie ci znają się na swoim fachu znacznie lepiej od wszystkich, z wyjątkiem utalentowanych programistów, a dodatkowo zazwyczaj cenią swoje usługi na rozsądnym poziomie. Powtórz dziesięć razy: „Jestem programistą, nie artystą” (Ewentualnie mogę przyznać, że niektórzy z was są utalentowani podwójnie). |
Praca z ikonami
Tworzenie ikon jest również formą sztuki, ale mimo wszystko nie tak wymagającą, jak tworzenie wielokolorowych bitmap. W większości przypadków można samodzielnie tworzyć ikony, chociaż te doskonale wyglądające wymagają jednak pewnych umiejętności. Jeżeli wrócisz na chwilę do rysunku 11.2, zobaczysz w jaki sposób ikona jest wyświetlana w Edytorze Graficznym.
|
Otwieraj ikony z wszelkich dostępnych źródeł i przyglądaj im się w powiększeniu - w ten sposób dowiesz się, jak tworzone są te najlepiej wyglądające. Tworzenie ikon trójwymiarowych wymaga praktyki (i jest czymś, z czym nigdy nie potrafię dojść do ładu). |
Ikona w 32-bitowym Windows to tak naprawdę dwie ikony w jednej. Duża ikona o rozmiarze 32×32 piksele może być umieszczana w oknie dialogowym, takim jak np. okno informacji o programie (About). Jest to również ikona, z której Windows korzysta przy tworzeniu skrótu do aplikacji. Jest ona także stosowana przez Eksploratora Windows, kiedy opcja wyświetlania plików jest ustawiona właśnie na duże ikony.
Mała ikona ma rozmiar 16×16 pikseli i jest stosowana przez Windows na pasku tytułu aplikacji, na pasku zadań, w oknie otwierania pliku i Eksploratorze Windows, gdy aktywną opcją wyświetlania są małe ikony. Zarówno duża, jak i mała ikona pamiętane są w jednym pliku ikony noszącym rozszerzenie (.ico).
|
Nie ma obowiązku tworzenia obydwu ikon. Jeżeli dostarczysz tylko dużą ikonę, Windows w razie potrzeby wyprodukuje na jej bazie małą ikonę, dokonując stosownego zmniejszenia. Wiąże się to jednak najczęściej z pogorszeniem jakości, lepiej więc stworzyć explicite również i małą ikonę, zyskując w ten sposób kontrolę nad wyglądem aplikacji. |
Tworzenie nowej ikony
Aby stworzyć nową ikonę, wybierz polecenie menu FileNewIcon. Po utworzeniu nowej ikony wyświetlone zostanie okno właściwości (Icon Properties), pokazane na rysunku 11.4.
Rysunek 11.4. Okno dialogowe właściwości ikony |
|
Okno to umożliwia wybór rozmiaru tworzonej ikony (duża/mała) i ilości stosowanych w niej kolorów. Domyślnie zakłada się, że tworzona będzie ikona standardowa (o dużym rozmiarze), przy wykorzystaniu 16 kolorów. (W rzeczywistość ikony dwukolorowe rzadko są stosowane.)
|
Nawet jeśli chcesz stworzyć obydwie ikony - dużą i małą - pracę musisz rozpocząć od jednej z nich. Przykładowo, jeżeli tworzysz nową ikonę, powinieneś zacząć od ikony dużej, a po jej skończeniu utworzyć małą. |
Podczas edycji ikony na pasku menu Edytora Graficznego widoczna jest kategoria o nazwie Icon. W skład tego menu wchodzą polecenia New, Delete i Test. Polecenie New umożliwia stworzenie nowej (dużej lub małej) ikony. Przykładowo, jeżeli ukończyłeś już ikonę dużą, możesz wybrać polecenie menu IconNew i rozpocząć tworzenie ikony małej.
|
Okno edycji ikony (rysunek 11.2) posiada przycisk New który również tworzy nową ikonę, a jego działanie jest szybsze od polecenia menu. |
Po wybraniu polecenia New, tak jak poprzednio, otwierane jest okno właściwości ikony. Jeżeli duża ikona została już utworzona, domyślnie wybrana jest ikona mała, wystarczy więc kliknąć na przycisku OK. W oknie edytora wyświetlony zostanie nowa, pusta ikona. Edytor Graficzny nie pozwoli na utworzenie ikony, która istnieje już w pliku .ico.
|
Kiedy obecne są obie ikony, do przełączania się między nimi można wykorzystać pole listy rozwijalnej, widoczne w górnej części okna edytora. |
Opcje dostępne w trakcie edycji ikony
Polecenie Delete (menu Icon) umożliwia usunięcie dużej lub małej ikony z pliku. Niemożliwe jest usunięcie ostatniego elementu przebywającego w pliku zasobów ikony.
Polecenie Test wyświetla okno testu ikony (Icon Tester) pozwalające ocenić, jak w rzeczywistości ikona będzie wyglądać. Okno testu ikony w działaniu zostało przedstawione na rysunku 11.5.
Rysunek 11.5. Okno testu ikony |
|
Okno testu umożliwia zmiany koloru tła i badanie ich wpływu na wygląd ikony. Rodzaj ikony (duża lub mała) wyświetlanej w oknie testu zależy od tego, która z nich jest aktualnie edytowana.
Praca z kursorami
Praca nad kursorem nie różni się zbytnio od pracy nad ikoną. Kursor składa się jedynie z dwóch kolorów: białego i czarnego. (Edytor Graficzny nie umożliwia tworzenia kursorów wielokolorowych i animowanych.)
|
Cechą szczególną edytora kursorów jest to, że kolor przezroczysty jest w nim reprezentowany przez kolor tła Windows, zamiast (jak miało to miejsce w przypadku edytora ikon) koloru ciemno zielonego. Jeżeli w swoim systemie Windows ustawiłeś tło na bardzo jasny kolor, rozróżnienie elementów białych od przezroczystych może okazać się trudnym zadaniem. Jeżeli masz problem z odróżnieniem koloru tła od koloru białego, zmień kolor tła Windows na ciemniejszy (np. ciemnozielony). |
Podobnie jak w poprzednich przypadkach, podczas edycji kursora menu Edytora Graficznego zawiera specyficzną dla tej operacji kategorię o nazwie Cursor. Menu to składa się z dwóch elementów: Set Hot Spot i Test.
Polecenie Set Hot Spot umożliwia określenie tzw. „gorącego” punktu kursora (ang. hot spot). Jest to wyróżniony piksel kursora, używany przez Windows do określania bieżącej pozycji myszy. I tak np. gorącym punktem kursora krzyżowego jest punkt przecięcia tworzących go linii, natomiast gorącym punktem kursora w kształcie strzałki jest czubek tej strzałki. Aby ustawić gorący punkt dla kursora, należy wybrać polecenie menu CursorSet Hot Spot. Wyświetlone zostanie okno dialogowe, w które należy wpisać współrzędne (x,y) gorącego punktu.
|
Wprowadzane współrzędne gorącego punktu muszą być dokładne. Aby ułatwić sobie zadanie, przed ustawieniem gorącego punktu umieść kursor nad punktem, który chcesz uczynić gorącym. Współrzędne punktu wskazywanego przez kursor wyświetlone zostaną na pasku stanu Edytora Graficznego. Zanotuj współrzędne, z których skorzystasz później podczas ustawiania gorącego punktu. |
Polecenie Cursor|Test daje możliwość wypróbowania nowego kursora. Jego wybór powoduje otwarcie okna testu kursora (Cursor Tester - rysunek 11.6).
Rysunek 11.6. Testowanie kursora |
|
Przytrzymując lewy lub prawy przycisk myszy, można rysować w obszarze okna testu. Jeżeli nie ustawiłeś jeszcze gorącego punktu, kursor będzie korzystał z punktu domyślnego znajdującego się w lewym górnym rogu kursora. Gorący punkt powinien być zawsze umieszczany w takim punkcie kursora, aby jego użycie było logiczne dla użytkowników.
Menu kontekstowe Edytora Graficznego
Edytor Graficzny posiada menu kontekstowe dla każdego z trybów edycji (bitmapy, kursora i ikony). Jak pewnie sobie przypominasz, prawy przycisk myszy służy do rysowania, dlatego kiedy kursor znajduje się nad rysunkiem, nie ma możliwości przywołania nim menu kontekstowego. Żeby wywołać menu kontekstowe, należy kliknąć prawym przyciskiem myszy w obszarze okna edytora, ale poza obszarem rysunku. Menu kontekstowe składa się z tych samych poleceń, jakie znaleźć można w menu głównym, omawianych w poprzednich sekcjach.
Projekty zasobów
Edytor Graficzny umożliwia utworzenie pliku projektu zasobów, w którym przechowywane mogą być bitmapy, ikony i kursory. W celu utworzenia projektu zasobów należy wybrać polecenie menu FileNewResource File. Polecenie to spowoduje wyświetlenie okna projektu, zawierającego kontrolkę drzewa pokazującą bitmapy, ikony i kursory należące do projektu. Na rysunku 11.7 przedstawiono okno projektu z przykładowymi elementami.
Rysunek 11.7. Okno projektu w Edytorze Graficznym |
|
Okno projektu posiada własne menu kontekstowe, umożliwiające usuwanie, edycję, zmianę nazwy i tworzenie nowych zasobów. Polecenia menu kontekstowego można również znaleźć w menu głównym (kategoria Resource).
Przy zapisywaniu projektu zasobów Edytor Graficzny kompiluje go do postaci binarnego pliku zasobów (.res). Plik tej postaci można następnie dodać do projektu Delphi.
Tworzenie nowych zasobów
Aby stworzyć nowy zasób w projekcie, wybierz polecenie New menu kontekstowego lub polecenie ResourceNew menu głównego. Podobnie, jak w przypadku indywidualnego pliku zasobów, możesz wybrać pomiędzy utworzeniem nowej bitmapy, ikony lub kursora. Po dokonaniu wyboru wyświetlone zostanie okno edytora, wraz ze wszystkimi narzędziami niezbędnymi do tworzenia wybranego zasobu.
Edycja zasobów
Czasami, po utworzeniu zasobu, zajdzie potrzeba jego modyfikacji. Aby przejść do edycji zasobu, trzeba zlokalizować go w drzewie zasobów projektu i kliknąć dwukrotnie na jego nazwie. Po tej operacji otwarte zostanie okno edytora zasobów, w którym można dokonać niezbędnych modyfikacji.
Zmiana nazwy zasobów
Zmianę nazwy zasobu można wykonać przez jej bezpośrednią edycję w obszarze drzewa. Żeby dokonać zmiany nazwy elementu wystarczy wybrać go pojedynczym kliknięciem, a następnie kliknąć na nim ponownie, aby przejść do edycji. Bezpośrednią edycję nazwy można również rozpocząć poleceniem menu kontekstowego Rename. Po wpisaniu nowej nazwy trzeba wcisnąć klawisz Enter lub kliknąć myszą na innym elemencie widoku drzewa, aby utrwalić wprowadzone zmiany.
Usuwanie zasobów
Aby usunąć zasób z projektu wystarczy zaznaczyć go kliknięciem w drzewie projektu, a następnie wybrać polecenie menu kontekstowego Delete. Przed usunięciem wybranego elementu z projektu wyświetlone zostanie okno potwierdzenia operacji. Po usunięciu zasobu nie ma możliwości cofnięcia wykonanego polecenia, dlatego zanim zdecydujesz się pozbyć jakiegokolwiek zasobu, upewnij się, że nie jest on już dłużej potrzebny.
Dodawanie zasobów z innych plików zasobów
Niestety, nie istnieje żaden prosty sposób na dodanie do projektu zasobów elementu, pochodzącego z oddzielnego pliku. Można jednak otworzyć plik projektu i plik bitmapy, ikony lub kursora, którego pojedynczy zasób chcemy dodać do swojego projektu. Następnie przejść do indywidualnego pliku i zaznaczyć rezydującym w nim zasób poleceniem EditSelect All; wybrany obiekt kopiujemy do schowka (polecenie EditCopy). Tworzymy nowy zasób w projekcie i po otwarciu okna edytora wklejamy do niego zawartość schowka (EditPaste).
|
Jeżeli obiektem, który dodajesz do swojego projektu, jest bitmapa, sprawdź jej rozmiar (wysokość i szerokość), a także liczbę kolorów z jakiej korzysta. Będziesz potrzebował tych danych podczas tworzenia nowej bitmapy w projekcie zasobów. |
Edytor Graficzny nie jest narzędziem wysokiej klasy, ale mimo to jest wystarczająco dobry dla wielu zadań twórczych. Jest łatwy w użyciu i dostatecznie precyzyjny do tworzenia większości kursorów i ikon.
WinSight: Podglądanie okien
WinSight jest narzędziem umożliwiającym swoiste „szpiegowanie” Windows. Jest on w stanie pokazać każdą pracującą aplikację i każde otwarte okno w tym systemie. (Pamiętaj, że wszystkie kontrolki są również oknami.) WinSight pokazuje każdy komunikat wygenerowany przez Windows (tzn. każdy komunikat, który został wysłany do okna).
Możliwy jest pogląd wszystkich komunikatów lub tylko wybranych, wysyłanych do określonych okien. Aby uruchomić program WinSight, należy zlokalizować i uruchomić plik WS32.EXE (domyślnie plik ten znajduje się w katalogu Delphi 4\Bin). Podobnie jak Edytor Graficzny, WinSight jest samodzielnym programem mogącym pracować poza środowiskiem IDE Delphi. Na rysunku 11.8 widoczny jest WinSight w trakcie „szpiegowania” Eksploratora Windows.
Rysunek 11.8. WinSight w działaniu
|
|
Jak widać, okno programu WinSight jest podzielone na dwa obszary. W górnym obszarze znajduje się lista aktywnych okien, w dolnym wyświetlane są komunikaty wysyłane do określonego okna (lub do wszystkich okien). Rozmiar obszarów można dowolnie regulować przez przeciąganie rozdzielającego je paska. Domyślnie okna podzielone są w poziomie, ale istnieje możliwość zmiany podziału na pionowy. Do zmiany ułożenia okien służą dwa polecenia menu View: Split Horizontal (podział poziomy) i Split Vertical (podział pionowy).
Niedługo zajmiemy się dokładniej tymi oknami, ale wpierw zatrzymajmy się przy komunikatach Windows.
System komunikatów Windows
Szpiegowanie Windows nie przyniesie żadnych korzyści, jeżeli nie będziesz nic z tego rozumiał. Prawda jest taka, że musisz spędzić dużo czasu programując w Windows, zanim będziesz w stanie zrozumieć wszystkie informacje prezentowane przez program WinSight.
Delphi jest oczywiście doskonałym narzędziem umożliwiającym tworzenie samodzielnych aplikacji Windows, w możliwie najkrótszym czasie. Jednakże ceną płaconą za korzystanie z tego typu narzędzi jest odizolowanie programisty od mechanizmów sprawiających, że program napisany dla Windows rzeczywiście działa.
To właśnie komunikaty stanowią siłę napędową Windows. Komunikatów tych jest całe mnóstwo. Windows wysyła komunikat do okna, aby nakazać mu wykonanie jakiejś czynności lub poinformować je o zaistnieniu określonego zdarzenia. Przykładowo, kiedy okno wymaga odświeżenia (przerysowania), Windows wysyła mu komunikat WM_PAINT. Komunikat ten nakazuje oknu przerysowanie samego siebie.
Podczas zmiany rozmiaru okna, jest do niego wysyłany komunikat WM_WINDOWPOSCHANGING informujący, iż rozmiar i/lub pozycja okna zmieniły się. Kiedy rozmiar okna zostanie ostatecznie ustalony wysyłane są kolejne dwa komunikaty WM_WINDOWPOSCHANGED i WM_SIZE. W przeciętnym środowisku Windows w ciągu jednej sekundy wysyłane są dziesiątki lub nawet setki komunikatów.
Istnieje ponad sto różnych komunikatów, jakie Windows jest w stanie wysyłać do swych aplikacji. Wspominałem o tym trochę w rozdziale piątym „Model komponentów wizualnych” omawiając zdarzenia zachodzące w bibliotece VCL. U podłoża wielu zdarzeń, na które reaguje program pisany w środowisku Delphi, leżą właśnie komunikaty Windows. Zdarzenie OnCreate jest generowane w odpowiedzi na komunikat WM_CREATE, zdarzenie OnSize jest odpowiedzią na komunikat WM_SIZE, a zdarzenie OnMouseDown odpowiada komunikatom WM_LBUTTONDOWN i WM_RBUTTONDOWN. Lista ta jest o wiele dłuższa. Delphi umożliwia obsługiwanie komunikatów na wyższym poziomie, dając programiście możliwość zajęcia się ważniejszymi częściami aplikacji.
Kiedyś jednak nadejdzie taki czas, że zapragniesz dowiedzieć się więcej na temat mechanizmów wprawiających w ruch system Windows. Zastosowanie Delphi daje tę zaletę, że przy jego pomocy można szybko tworzyć aplikacje, a w międzyczasie stopniowo zdobywać wiedzę związaną z niższymi poziomami programowania.
|
Zgodnie z argumentami niektórych doświadczonych programistów środowiska Windows, powinieneś zacząć naukę od pisania programów dla Windows w języku C, jak miało to miejsce za starych dobrych czasów. Przynajmniej w teorii tego typu fundament jest niezbędny programistom Windows do osiągnięcia efektywności w dowolnym środowisku programistycznym. Chociaż zgadzam się ze stwierdzeniem, że taki scenariusz nauki byłby optymalny, mam również świadomość iż obecnie niewielu programistów znalazłoby czas na taki wariant procesu nauczania. |
Po tej krótkiej premierze systemu komunikatów Windows, powróćmy do omawiania zasad działania programu WinSight.
Drzewo okien
Górna część programu WinSight nazywana jest drzewem okien (Window Tree). Drzewo to prezentuje wszystkie okna, otwarte w danej chwili, a także podaje pewne szczegóły dotyczące klasy okna. Szczegóły te wyglądają mniej więcej tak jak przedstawiono to poniżej (z tą różnicą, że na ekranie wyświetlane są one w jednej linii):
Overlapped 00000D74 {ExploreWClass}
EXPLORER.EXE (730,14)-(935,460) 'Exploring - aTemplate'
Pierwszy element linii informuje o stylu okna. W tym przypadku jest to okno nakładające się (WS_OVERLAPPED). Inne możliwości to styl okna potomnego i okna rozwijalnego. (Istnieją jeszcze inne style, ale nakładający, potomny i rozwijalny są najbardziej popularne). Druga kolumna wskazuje uchwyt okna (HWND), którego odpowiednikiem w okienkowych komponentach VCL jest właściwość Handle.
Następnym elementem jest nazwa klasy okna, ujęta w nawiasy klamrowe. Jest to nazwa klasy, której aplikacja użyła do zarejestrowania okna w Windows. Okna często korzystają z tej samej klasy - przykładowo, obiekt zwykłego przycisku jest klasy Button. W różnych aplikacjach mogą istnieć dziesiątki takich przycisków, ale wszystkie one wywodzą się z tej samej klasy okna. W przypadku aplikacji Delphi, dla formularzy i komponentów wyświetlana jest klasa VCL reprezentująca określony komponent. Dla przycisku WinSight wyświetli nazwę klasy TButton.
|
W trakcie prac nad Delphi 1, przyjętą nazwą kodową projektu był właśnie Delphi. Niemniej jednak, planowaną nazwą dla produktu był AppBuilder. Nazwa Delphi zakorzeniła się i została uznana za oficjalną nazwę produktu. Jeżeli zaczniesz szpiegować środowisko IDE Delphi przy pomocy programu WinSight odkryjesz, że nazwa głównego okna Delphi to TappBuilder, przez co wiarygodność powyższej opowiastki zostanie potwierdzona. |
Za nazwą klasy występuje nazwa modułu procesu, który utworzył dane okno. Zwykle modułem tym jest plik programu wykonywalnego. W powyższym przykładzie moduł ten nosi nazwę EXPLORER.EXE. Za nazwą modułu widoczny jest rozmiar i pozycja okna. Na końcu znajduje się tekst okna. Dla okien nakładanych jest to zazwyczaj tekst pojawiający się na pasku tytułowym. W innych przypadkach znaczenie tego tekstu zależne jest od typu okna. Przykładowo, dla przycisku będzie to jego etykieta (tekst widoczny na przycisku).
|
Praktyką często stosowaną w komercyjnych aplikacjach jest tworzenie okien ukrytych, wykonujących określone zadania w aplikacji. Dla okien ukrytych wyświetlany jest tekst (hidden), bezpośrednio za nazwą modułu. Ponieważ okno jest ukryte, nie posiada rozmiaru i pozycji, a także własnego tekstu. |
Drzewo okien posiada budowę hierarchiczną. Na jego szczycie znajduje się Pulpit Windows. Poniżej pojawiają się wszelkie okna-potomkowie Pulpitu. Potomkiem, który pojawi się pod węzłem Pulpitu może być na przykład plik wykonywalny. Dane okno może posiadać kolejnych potomków pod sobą. Linie drzewa łączą rodziców z potomkami, łączą one również okna równorzędne.
Przyglądając się rysunkowi 11.8 zauważysz, że każdy element drzewa jest reprezentowany przez ikonę w kształcie rombu. Jeżeli okno jest potomkiem, w środku rombu znajduje się znak plusa lub minusa. Znak plusa oznacza, że węzeł jest zredukowany i może być rozwinięty, ukazując swoich potomków. Jeżeli w rombie znajduje się znak minusa oznacza to, że węzeł został już rozwinięty. Żeby rozwinąć lub zredukować węzeł wystarczy kliknąć gdziekolwiek na lewo od elementu. Romb pusty wskazuje okno nie posiadające potomków.
|
Jeżeli dane okno jest widoczne w drzewie, reprezentujący je romb rozbłyskuje za każdym razem kiedy okno to otrzyma komunikat od Windows. |
Okno śledzenia komunikatów
Okno śledzenia komunikatów (Message Trace) wyświetla każdy indywidualny komunikat, który wygenerowany został przez Windows. Typowy element śledzenia komunikatów wygląda następująco:
000684:00000854 {TMemo} WM_KEYDOWN Dispatched 48h 72d VK_H Scan 23h Down
Nie opłaca się szczegółowo analizować elementów tego wiersza, ponieważ są one niezwykle zróżnicowane w zależności od typu komunikatu. W tym przypadku komponent Memo otrzymał komunikat WM_KEYDOWN z parametrem VK_H. Innymi słowy, użytkownik nacisnął na klawiaturze klawisz h, podczas gdy kursor znajdował się we wnętrzu obiektu Memo. Jak widać, niektóre informacje wyświetlane w tym oknie są powtórzeniem informacji wyświetlanych w oknie drzewa -- np. uchwyt okna i nazwa klasy.
Proces śledzenia komunikatów rozpoczyna się po wybraniu przycisku Start! W oknie zaczną pojawiać się nowe komunikaty w miarę ich przybywania do wybranego okna (lub okien). Zatrzymanie śledzenia komunikatów następuje po kliknięciu na przycisku Stop!.
|
Przyciski Start! i Stop! znajdują się w tym samym miejscu menu. Jeżeli śledzenie komunikatów jest wyłączone, menu wyświetla przycisk Start! Po rozpoczęciu śledzenia komunikatów w menu pojawia się przycisk Stop! |
W miarę nadchodzenia nowych komunikatów, są one przewijane w górę okna śledzenia.
Zawsze istnieje możliwość zatrzymania procesu, przewinięcia listy wstecz i przejrzenia komunikatów, które uciekły z pola widzenia. Inną możliwością jest przekierowanie danych do pliku. Opcje programu WinSight są omawiane dokładniej w dalszej części rozdziału, w sekcji zatytułowanej „Opcje śledzenia komunikatów”.
„Szpiegowanie” okien
WinSight umożliwia wyświetlanie wszelkich komunikatów, wysyłanych do wszystkich okien lub tylko do okna ściśle określonego. W celu wyświetlenia wszystkich komunikatów należy wybrać polecenie menu MessagesAll Windows. Mimo, że istnieje opcja umożliwiająca podgląd wszystkich komunikatów (dla wszystkich okien), jej wykorzystanie jest zwykle mało wydajne. Generowanych jest tak wiele komunikatów, że niemożliwym staje się wyłowienie z pośród nich tego jednego, którego szukamy.
Efektywniejszą metodą jest wybranie jednego okna i obserwowanie komunikatów związanych tylko z nim. Rozwiązanie to pozwala utrzymać stopień „zaśmiecenia” okna śledzenia na poziomie możliwym do opanowania. Aby móc podglądać komunikaty przeznaczone dla określonego okna, należy zlokalizować je w drzewie, zaznaczyć kliknięciem i wybrać polecenie menu MessagesSelected Windows. Po kliknięciu na przycisku Start! w oknie śledzenia będą pojawiać się wszelkie komunikaty przeznaczone tylko dla wyspecyfikowanego okna.
|
Przed przystąpieniem do pracy z programem WinSight najlepiej jest ściśle określić cel swoich poszukiwań. Ponieważ do pojedynczego okna wysyłana jest duża liczba komunikatów, ten jeden szukany może bardzo szybko zniknąć z ekranu. Aby zwiększyć efektywność programu WinSight do maksimum, wybierz okno, którego komunikatom chcesz się przyjrzeć, rozpocznij śledzenie, przeprowadź wszelkie niezbędne operacje w oknie, a następnie przerwij proces śledzenia. |
Opcje śledzenia komunikatów
Okno opcji śledzenia komunikatów (Message Trace Options - rysunek 11.9) umożliwia określenie rodzaju komunikatów wyświetlanych w trakcie procesu śledzenia. Można również zmienić sposób wyświetlania informacji o komunikacie. Okno opcji śledzenia komunikatów otwierane jest poleceniem menu MessagesOptions.
Rysunek 11.9. Okno opcji śledzenia komunikatów |
|
Większość okna zajmuje sekcja Messages to Trace, na którą składa się kilka grup komunikatów (po lewej) oraz obszar listy wyświetlający wszystkie komunikaty Windows (po prawej). W miarę aktywacji lub dezaktywacji grup, odpowiadające im komunikaty będą zaznaczane lub odznaczane w polu listy.
|
Standardowe komunikaty Windows pisane są w całości wielkimi literami, podczas gdy małymi literami oznaczane są wszelkie komunikaty nieudokumentowane. Nieudokumentowane komunikaty stosowane są zazwyczaj na wewnętrzny użytek Windows, z zasady nie są jednak przeznaczone dla użytkowników. |
Aktywny stan pola All Messages wymusza na programie WinSight śledzenie wszystkich komunikatów Windows. Aby dokładniej zdefiniować interesujące Cię komunikaty, a przez to zredukować rozgardiasz panujący w oknie śledzenia, możesz wybrać śledzenie tylko pewnych grup komunikatów. Przykładowo, jeżeli chcesz przeglądać jedynie komunikaty związane z myszą, powinieneś odznaczyć pole wyboru All Messages i zaznaczyć pole Mouse. Jeszcze dokładniejsze określenie swoich wymagań można osiągnąć przez wyłączenie wszystkich pól opcji i wybranie tylko jednego, specyficznego komunikatu z listy po prawej stronie okna. Na przykład, aby móc obserwować wyłącznie komunikat WM_LBUTTONDOWN, trzeba wyłączyć wszystkie opcje grup, a następnie zaznaczyć na liście komunikat WM_LBUTTONDOWN. Takie ustawienie sprawi, że w oknie śledzenia komunikatów wyświetlany będzie jedynie ten komunikat.
Kolejna grupa opcji wpływa na sposób wyświetlania komunikatów w oknie śledzenia. Pole Interpret Values nakazuje WinSightowi rozbicie parametrów każdego komunikatu na bardziej czytelny format. Przykładowo, wystąpienie komunikatu WM_KEYDOWN zostanie zasygnalizowane łańcuchem w postaci:
0000309:00000474 {TMemo} WM_KEYDOWN Dispatched
lub
0000309:00000474 {TMemo} WM_KEYDOWN Dispatched 44h 68d VK_D Scan 20h Repeat
W większości sytuacji wolę widzieć więcej szczegółów, dlatego generalnie pozostawiam to pole zaznaczone.
Opcja Hex Values wymusza wyświetlanie wartości w formacie szesnastkowym. W niektórych sytuacjach taka postać danych może okazać się użyteczna, ale tylko wtedy, gdy masz już pewne doświadczenie w programowaniu. Trzecia opcja (Show Times) wyświetlająca czas systemowy znajduje ograniczone zastosowanie ze względu na małe znaczenie tego typu informacji.
Opcja Log File umożliwia skierowanie danych wyjściowych procesu śledzenia do pliku na dysku; po jej włączeniu informacje o komunikatach są nadal wyświetlane w oknie. Opcja ta znajduje szczególne zastosowanie w sytuacji, gdy generowana jest ogromna ilość komunikatów.
|
Plik dziennika komunikatów ma jeszcze jedną zaletę - po jego utworzeniu można otworzyć go w dowolnym edytorze tekstowym i skorzystać z funkcji poszukiwania do odnalezienia określonego komunikatu bądź parametru. |
Inne cechy programu WinSight
WinSight posiada również inne cechy, które ułatwiają odszukiwanie i analizowanie okien.
Wyświetlanie szczegółów okna
Cecha ta umożliwia wyświetlenie wszystkich szczegółów dotyczących określonego okna. W celu wyświetlenia szczegółów okna trzeba najpierw zaznaczyć je w drzewie, a następnie wybrać polecenie menu SpyOpen Detail. Tę samą operację można wykonać klikając dwukrotnie na wybranym oknie lub naciskając klawisz Enter. Na rysunku 11.10 przedstawione zostały szczegóły okna Eksploratora Windows.
Rysunek 11.10. Okno szczegółów programu WinSight |
|
Jak widać, okno szczegółów wyświetla ogromną ilość informacji dotyczących analizowanego okna (być może nawet większą, niż chcesz w danej chwili poznać!).
Podążanie za aktywnością
Opcja ta umożliwia uaktywnienie określonego okna występującego w drzewie, przez wybranie go w aplikacji. Drzewo zazwyczaj zawiera dziesiątki okien, co często utrudnia odnalezienie tego jednego, które nas interesuje. W takiej sytuacji z odsieczą przychodzi opcja podążania za aktywnością (Follow Focus).
Aby skorzystać z tej cechy, wybierz polecenie menu SpyFollow Focus. Następnie przejdź do aplikacji zawierającej okno, którego komunikaty chcesz wyświetlić i (w miarę potrzeby) kliknij na specyficznym obiekcie kontrolnym (jeżeli to jego komunikaty mają być przechwytywane). Żeby rozpocząć śledzenie komunikatów wskazanego okna, wystarczy już tylko kliknąć na przycisku Start!
|
Opcja podążania za aktywnością pozostaje aktywna tak długo, aż nie zostanie wyłączona w sposób ręczny. Powinieneś wyłączyć ją kiedy tylko wtedy, gdy zlokalizujesz interesujące Cię okno chyba, że oprócz niego będziesz chciał również przyjrzeć się komunikatom innych okien i obiektów kontrolnych swojej aplikacji. |
Odnajdywanie okna
Ta cecha programu WinSight jest przeciwieństwem opcji podążania za aktywnością. Po wyspecyfikowaniu interesującego nas okna w drzewie okien i wybraniu polecenia menu Spy Find Window, WinSight umieści wokół tego okna grubą ramkę i wywoła jej błysk.
Ramka pozostanie wokół okna, dopóki nie klikniesz na jego obszarze lub nie wybierzesz innego okna w drzewie. Ramka jest rysowana na wierzchu wszystkich okien, dlatego odnalezienie wskazanego okna nie będzie trudne nawet jeśli będzie ono zasłonięte. Okno zlokalizowane w ten sposób nie jest umieszczane na wierzchu i nie otrzymuje aktywności; jest jedynie identyfikowane dla użytkownika.
|
Polecenie Find Window nie potrafi zlokalizować okien ukrytych i zminimalizowanych. |
Tryb odnajdywania okna przestaje działać, kiedy tylko stan aktywności opuści okno Window Tree. Dlatego, aby go wyłączyć, wystarczy kliknąć na obszarze dowolnej aplikacji lub gdziekolwiek indziej w programie WinSight.
Przejście do innego okna
Opcja Switch To umożliwia przejście do określonego okna w dowolnej aplikacji. Wystarczy wskazać to okno w drzewie, a następnie wybrać polecenie menu SpySwitch To. Wybrane w ten sposób okno zostanie przywołane na pierwszy plan i uaktywnione. Jeżeli znajdowało się ono w stanie zminimalizowanym, zostanie przywołane do poprzedniej pozycji. Polecenie Switch To nie działa w przypadku okien ukrytych.
Minie trochę czasu, zanim pracując z programem WinSight zaczniesz pojmować każdy z komunikatów i jego znaczenie. Jednak z czasem „załapiesz” o co chodzi.
TDUMP
Zadaniem programu TDUMP jest informowanie o strukturze pliku .exe lub .dll (i nie tylko). Program wywoływany jest z linii poleceń, a jego dane kierowane są na standardowe wyjście - domyślnie pojawiają się więc na ekranie, lecz istnieje możliwość przekierowania ich do pliku:
tdump MojaApp.exe > appinfo.txt
Informacja produkowana przez program TDUMP obejmuje strukturę wyspecyfikowanego pliku, nazwy wykorzystywanych przez niego bibliotek DLL, nazwy wywoływanych funkcji bibliotecznych - i wiele innych elementów. Poniżej przedstawione zostały fragmenty pliku wygenerowanego przez TDUMP dla przykładowego programu stworzonego w Delphi:
Portable Executable (PE) File
Header base: 0000020
CPU type 80386
Flags 818E [ executable 32bit]
DLL flags 0000 [ ]
Linker Version 2.19
Time stamp 00000000
O/S Version 1.0
Subsystem Version 4.0
Subsystem 0002 [ Windows GUI ]
Object count 00000008
Symbols offset 00000000
Symbols count 00000000
Optional header size 00E0
Magic # 10B
Code size 0003C000
Init Data size 00009000
Uninit Data size 00001000
..... (inne informacje).........
Imports from OLEAUT32.dll
SysAllocStringLen
SysStringLen
VariantChangeTypeEx
VariantClear
VariantCopyInd
Imports from MPR.dll
WNetGetConnectionA
Imports from USER32.dll
AdjustWindowRectEx
BeginPaint
CallNextHookEx
CallWindowProcA
CharLowerA
....(pozostałe zaimportowane biblioteki DLL).....
|
Program TDUMP służy głównie do uzyskiwania listy procedur i funkcji importowanych z bibliotek DLL. |
Edytor Kolekcji Pakietów
Edytor Kolekcji Pakietów (Package Collection Editor) umożliwia dystrybucję kilku pakietów przeznaczonych do współpracy ze sobą. Jest on wywoływany poleceniem menu ToolsPackage Collection Editor.
Edytor Kolekcji Pakietów przeznaczony jest głównie dla osób zajmujących się dostarczaniem na rynek komponentów, które często składają się całych grup pakietów. Narzędzie to przeszło pewne zmiany w Delphi 4 i przez to stało się bardziej użyteczne od swojego odpowiednika w wersji Delphi 3. Żeby przekonać się, przyda się ono w Twojej pracy, musisz z nim trochę poeksperymentować; nie jest wykluczone, że uznasz je za nieodpowiednie do potrzeb długofalowej dystrybucji komercyjnych komponentów.
Więcej informacji na temat wykorzystania Edytora Kolekcji Pakietów możesz znaleźć w systemie pomocy.
Konfigurowanie menu Tools
Menu narzędzi (Tools) jest modyfikowalne. Standardowo znajdują się w nim jedynie polecenia związane z Edytorem Graficznym (Image Editor) i narzędziem tworzenia baz danych (Database Desktop), można jednak dodawać do tego zestawu własne narzędzia, narzędzia Delphi lub inne często wykorzystywane programy. Można również zmieniać uporządkowanie elementów menu, a nawet usuwać je.
Okno konfiguracji narzędzi
Niemal każda aplikacja, z której w miarę często korzystasz, może być dodana do menu narzędzi. Po umieszczeniu w nim własnych elementów można później szybko wywoływać dowolne programy, wykorzystywane w procesie tworzenia aplikacji. Dodanie nowego elementu do menu Tools jest zadaniem prostym i zajmuje tylko kilka chwil. Do dodawania, usuwania i przemieszczania elementów menu służy okno opcji narzędzi (Tool Options), wywoływane poleceniem menu ToolsConfigure Tools (rysunek 11.11).
Rysunek 11.11. Okno opcji narzędzi |
|
Obszar listy zatytułowany Tools wyświetla narzędzia aktualnie figurujące w menu narzędzi. Ich uporządkowanie odpowiada kolejności występowania w menu. Aby zmienić kolejność wystarczy wybrać dowolny element listy i przemieścić go w górę lub w dół za pomocą przycisków ze strzałkami; usunięcie narzędzia wymaga wybrania go na liście i liknięcia na przycisku Delete.
Dodawanie narzędzi do menu
Aby dodać nowe narzędzie, należy kliknąć na przycisku Add. Otwarte zostanie okno właściwości (Tool Options), w które należy wpisać cechy identyfikujące dodawane narzędzie. Na rysunku 11.12 widoczne jest okno właściwości narzędzia wypełnione danymi programu Eksplorator Windows.
Rysunek 11.12. Okno właściwości narzędzi |
|
Łańcuch wpisany w pole Title będzie reprezentował narzędzie w menu Tools. W nazwie umieścić znak ampersanda `&' poprzedzający literę skrótu klawiszowego. W pole Program należy wpisać ścieżkę dostępu i nazwę pliku programu. Wpisanie pełnej ścieżki dostępu da pewność, że program zawsze zostanie znaleziony. Jeżeli nie pamiętasz dokładnej ścieżki, możesz skorzystać z przycisku Browse i odszukać niezbędny plik. Pole Working dir służy do określenia katalogu roboczego dla narzędzia. Jeżeli do odnalezienia narzędzia posłużyłeś się przyciskiem Browse, katalog roboczy zostanie automatycznie ustawiony na katalog w którym znajduje się dane narzędzie.
Pewnego wyjaśnienia wymaga pole Parameters. Mówiąc najprościej, pole to służy do określenia parametrów narzędzia przekazywanych mu w wierszu poleceń. Należy tutaj umieścić wszelkie parametry niezbędne do pracy programu. W polu Parameters można również skorzystać z predefiniowanych makropoleceń Delphi. Lista dostępnych makropoleceń ukryta jest pod przyciskiem Macros.
Nazwę makra można wpisać z klawiatury lub wybrać na liście i kliknąć na przycisku Insert. Okno właściwości narzędzia z wyświetloną listą makropoleceń przedstawione zostało na rysunku 11.13.
Rysunek 11.13. Okno właściwości narzędzia z wyświetloną listą makropoleceń |
|
Makro $EXENAME zwraca pełną ścieżkę dostępu do wykonywalnego pliku projektu. Na przykład, jeśli projekt nosi nazwę MojaApp i jest przechowywany w katalogu Projekty, parametr przekazanym do programu przez makro $EXENAME będzie miał postać c:\Projekty\MoajApp.exe. Niektóre makropolecenia wymagają parametrów. Aby otrzymać samą ścieżkę dostępu do projektu (bez nazwy pliku), należałoby posłużyć się parametrem $PATH($EXENAME). Parametr taki w powyższym ćwiczeniu zaowocowałby wartością c:\Projekty\. Kompletną listę dostępnych makropoleceń znajdziesz w systemie pomocy Delphi.
Modyfikacja ustawień menu narzędzi
Przejście do edycji dowolnego elementu menu narzędzi umożliwia przycisk Edit. Jego wybór powoduje wyświetlenie okna właściwości narzędzia, umożliwiającego wprowadzenie zmian w dowolnych polach.
Po zakończeniu prac nad wyglądem menu Tools należy kliknąć na przycisku Close, aby Delphi odwzorowało wszelkie wprowadzone zamiany.
Ustawienia środowiska Delphi
Okno ustawień środowiska Delphi (Environment Options) umożliwia modyfikowanie środowiska IDE na poziomie globalnym. (Okno właściwości projektu kontroluje ustawienia na poziomie projektu.) Okno ustawień środowiska jest wywoływane poleceniem menu ToolsEnvironment Options. Okno ustawień składa się z dziewięciu zakładek. W rozdziale dziewiątym, podczas omawiana narzędzi Edytora i Eksploratora Kodu, opisane zostały strony Editor, Display, Color, Code Insight, Explorer. Obecnie zajmiemy się stronami Preferences, Library i Palette.
|
Okno ustawień środowiska zawiera również stronę ustawień przeglądarki (Browser). Strona ta wymaga więcej wyjaśnień, niż jest w stanie pomieścić ten rozdział, dlatego też nie będzie tutaj omawiana. |
Strona Preferences
Na stronie tej ustawia się ogólne preferencje Delphi: sposób sprawowania kontroli nad kompilacją przez środowisko IDE, automatyczny zapis oraz wygląd Projektanta Formularzy. Tutaj również można ustawić preferencje Projektanta Formularzy (rysunek 11.14).
Sekcja Desktop contents określa, które elementy pulpitu Delphi będą zachowywane pomiędzy kolejnymi sesjami.
Rysunek 11.14. Strona Preferences w oknie ustawień środowiska |
|
Sekcja Autosave options określa, czy podczas każdorazowego uruchomienia programu w sposób automatyczny zapisywane mają być pliki edytora i/lub pulpit. Osobiście nie lubię, kiedy pliki edytora są automatycznie zapisywane; wolę mieć możliwość opuszczenia bieżącego procesu edycji w miarę potrzeby. Niemniej jednak znam inne, osoby którym bardzo odpowiada ta cecha środowiska i nie byłyby one w stanie bez niej pracować.
Jedna z zalet automatycznego zapisywania jest taka, że w przypadku zawieszenia Delphi lub Windows przez źle funkcjonującą aplikację masz pewność, że wszelkie modyfikacje kodu zostaną zachowane.
Opcja Desktop odpowiada za zapisanie bieżącego rozmiaru i pozycji Edytora Kodu, wszystkich formularzy, palety wyrównywania, Inspektora Obiektów itp.
W sekcji Form designer opcja Display grid wyświetla lub ukrywa siatkę Projektanta Formularzy. Opcja ta ma wpływ tylko na widzialność siatki, nie określa natomiast, czy obiekty będą do niej przyciągane. Opcja Snap to grid określa czy umieszczane i przesuwane obiekty będą przyciągane przez punkty siatki. Pola Grid Size X i Grid Size Y umożliwiają określenie rozmiaru siatki. Domyślnie ustawienie wynosi 8 pikseli. Opcja Show component captions odnosi się do komponentów niewidocznych umieszczanych w formularzach. Kiedy opcja ta jest włączona, Projektant Formularzy wyświetla właściwość Name komponentu niewidocznego poniżej reprezentującej go ikony.
Sekcja Compiling and Running posiada cztery następujące opcje:
Opcja Show compiler progress określa czy, Delphi będzie wyświetlał okno postępu kompilatora w trakcie kompilacji projektu. W większości wypadków nie warto włączać tego okna, ponieważ duża szybkość kompilatora eliminuje realną potrzebę obserwowania jego postępów.
Opcja Warn on package rebuild odpowiada za ostrzeżenia przed ponownym zbudowaniem pakietu aktualnie załadowanego do Palety Komponentów.
Opcja Hide designers on run powoduje ukrycie Projektanta Formularzy, Inspektora Obiektów, a także okien wspomagających Projektanta Formularzy, w trakcie pracy programu. Widoczne pozostają jednak główne okno Delphi i dytor Kodu.
Opcja Minimize on run jest podobna do opcji Hide designers on run. Po jej uaktywnieniu całe środowisko IDE zostaje zminimalizowane w chwili uruchomienia programu z jego wnętrza.
|
Przy włączonej opcji Minimize on run każda akcja, która wymaga ingerencji debuggera (wyjątki, punkty przerwań, itp.) spowoduje ponowne wyświetlenie środowiska IDE Delphi. |
Sekcja Shared Repository umożliwia określenie katalogu, w którym zapisywana jest zawartość Repozytorium. Jest to dobre rozwiązanie, jeżeli elementy Repozytorium wykorzystywane są przez grupę osób pracujących nad wspólnym projektem. Wystarczy wtedy wskazać jako ścieżkę dostępu wybrany katalog sieciowy, a wszystkie obiekty dodawane będą przez użytkowników do (i pobierane przez nich ze) wspólnego Repozytorium.
Strona Library
Strona Library składa się tylko z trzech pól. Library Field służy do określenia ścieżki dostępu do plików bibliotek stosowanych przez Delphi w Palecie Komponentów. Zwykle nie ma potrzeby zmiany tej ścieżki. Pola BPL output directory i DCP output directory określają katalogi, do których zapisywane będą wygenerowane pliki pakietów. Przykładowo, możesz chcieć zapisywać własne pliki pakietów (.bpl) w katalogu Windows\System lub WinNT\System32 (pliki pakietów muszą być umieszczone w ścieżce systemowej).
Strona Palette
Strona Palette (rysunek 11.15) umożliwia ustawienie Palety Komponentów według własnych potrzeb.
Można tutaj zmienić porządek występowania pakietów w Palecie Komponentów. W obszarze listy (Pages) po lewej stronie okna wyświetlane są wszystkie strony znajdujące się aktualnie w Palecie Komponentów. W zależności od wersji Delphi którą posiadasz, oglądana przez Ciebie lista stron może się różnić od tej przedstawionej na rysunku 11.15 (przykładowo, strona Midas jest dostępna jedynie w wersji Client/Server). Element [All], widoczny u dołu listy, wyświetla wszystkie zainstalowane komponenty występujące na wszystkich stronach Palety Komponentów. Na liście Components wyświetlane są wszystkie komponenty należące do aktualnie wybranej strony na liście Pages.
Rysunek 11.15. Strona Palette w oknie ustawień środowiska |
|
Zmianę uporządkowania stron można osiągnąć przez przeciąganie ich, w ramach listy Pages, na pozycje, które mają one zajmować w Palecie Komponentów. Przykładowo, jeżeli chcesz, aby strona Samples pojawiła się w Palecie Komponentów jako pierwsza, możesz przeciągnąć ją na szczyt listy Pages i tam upuścić. Dowolną stronę po jej zaznaczeniu można również przemieścić przyciskami Move Up (przesuwanie w górę) i ove Down (przesuwanie w dół).
Istnieje możliwość dodawania, usuwania i zmiany nazwy stron, a operacje te działają dokładnie tak jak należałoby się tego spodziewać. Aby dodać stronę, kliknij na przycisku Add. Zostaniesz poproszony o wpisanie nazwy strony, po czym strona ta zostanie fizycznie utworzona. Powodem do utworzenia nowej strony może być chęć przechowywania własnoręcznie stworzonych komponentów na odrębnej stronie Palety Komponentów. W elu przyspieszenia pewnych operacji można utworzyć nową stronę i przenieść na nią wszystkie najczęściej stosowane komponenty VCL.
|
Możliwe jest przenoszenie (ale nie kopiowanie) komponentów pomiędzy stronami. Możliwe jest jednak dodawanie wszelkich zainstalowanych komponentów do dowolnych stron Palety Komponentów. Na liście Pages wybierz element [All], a następnie przeciągnij komponent z listy Components do dowolnego okna figurującego na liście Pages. |
Zmiana nazwy i usuwanie stron są prostymi operacjami. Tak jak to miało miejsce w rzypadku Repozytorium, usunięcie strony jest możliwe dopiero po usunięciu z niej wszystkich komponentów.
Podobnie jak strony, również komponenty mogą ulegać przemieszczeniom na liście. Aby przesunąć komponent na liście, wystarczy przeciągnąć go na nową pozycję lub skorzystać z przycisków Move Up i Move Down. Przesunięcie komponentu na nową stronę wymaga przeciągnięcia go i upuszczenia na nazwie strony w liście Pages, na której ma się pojawić. Do usunięcia wybranego obiektu służy przycisk Delete.
Podsumowanie
Teraz wiesz już znacznie więcej na temat narzędzi wchodzących w skład pakietu Delphi. Niektóre z nich można z łatwością przeoczyć, dlatego pomocny okazuje się przegląd możliwości, jakimi dysponuje programista. Być może z niektórych narzędzi nie zaczniesz korzystać od razu, ale w przyszłości będziesz mógł ponownie przyjrzeć się temu, co oferuje Delphi. Pod koniec rozdziału wspomniałem o oknie ustawień środowiska (Environment Options). W większości przypadków ustawienia tam zawarte mogą pozostać niezmienione. Jeżeli jednak zechcesz dostosować środowisko IDE do własnych potrzeb, będziesz lepiej rozumiał przeznaczenie każdej indywidualnej opcji tego okna.
Warsztat
Warsztat składa się z pytań kontrolnych oraz ćwiczeń utrwalających i pogłębiających zdobytą wiedzę. Odpowiedzi do pytań możesz znaleźć w dodatku A.
Pytania i odpowiedzi
Tworzę ikonę i próbuję narysować elipsę z czarną krawędzią i żółtym środkiem. Ustawiłem kolor obiektów na czarny, a kolor tła na żółty, a mimo to figura po narysowaniu jest cała czarna. Co muszę zrobić, aby uzyskać pożądany efekt?
Edytor Graficzny działa nieco odmiennie od innych programów tego typu. Aby uzyskać efekt, którego oczekujesz, musisz najpierw narysować czarną elipsę bez wypełnienia, a następnie wypełnić ją kolorem żółtym.
W jaki sposób w Edytorze Graficznym można rysować idealne koła i proste linie?
W takcie rysowania koła lub linii przytrzymaj wciśnięty klawisz Shift. Podobna zasada obowiązuje podczas rysowania kwadratów.
Stworzyłem swój własny kursor w kształcie strzałki, ale kiedy nim klikam, odnoszę wrażenie, że kliknięcie nie odbywa się końcem strzałki. W czym tkwi problem?
Musisz ustawić tzw. gorący punkt kursora. Domyślnie, punkt ten znajduje się w ewym górnym rogu kursora. Otwórz kursor w Edytorze Graficznym i zmień gorący punkt na piksel będący końcem strzałki.
Czy tworząc ikonę jestem zobowiązany do wykonania zarówno jej dużej, jak i małej wersji.
Niekoniecznie. Jeżeli stworzysz tylko dużą ikonę, Windows pomniejszy ją w iarę potrzeby. Jeżeli jednak sposób przedstawiania Twojej ikony przez Windows nie odpowiada Ci, razem z dużą ikoną możesz również stworzyć małą. Windows korzysta z małej ikony, o ile takowa istnieje.
W jaki sposób mogę skopiować część istniejącej bitmapy do nowej bitmapy?
Otwórz istniejącą bitmapę w jednym oknie Edytora Graficznego i nową bitmapę w drugim oknie. Zaznacz fragment oryginalnej mapy, którą chcesz skopiować i ybierz polecenie menu EditCopy. Przejdź do nowej bitmapy i wybierz EditPaste. Fragment bitmapy przechowywany w Schowku zostanie wklejony do nowej bitmapy.
Chcę, aby niektóre komponenty Palety Komponentów pojawiały się nie tylko w swoim oryginalnym położeniu, ale również na nowej, stworzonej przeze mnie stronie. Czy jest to możliwe?
Tak. Przejdź do strony Palette okna ustawień środowiska. Kliknij element [All] na liście Pages. Teraz wystarczy przeciągnąć komponent z listy Components na dowolną stronę listy Pages.
Quiz
Jaki efekt daje zastosowanie przezroczystego koloru podczas rysowania ikon i ursorów?
W jaki sposób wybiera się kolor w Edytorze Graficznym?
Jak zaznacza się obszar bitmapy przeznaczony do skopiowania lub wycięcia?
Jaka maksymalna liczba kolorów jest dozwolona dla bitmapy w Edytorze Graficznym?
Czym jest gorący punkt kursora?
Czy WinSight jest w stanie śledzić ukryte okna?
Jak najszybciej można zlokalizować okno w drzewie okien programu WinSight?
W jaki sposób zmusić edytor do automatycznego zapisywania plików za każdym razem, gdy program jest uruchamiany pod kontrolą debuggera?
Co trzeba zrobić, aby zmienić uporządkowanie komponentów w Palecie Komponentów?
Ćwiczenia
Korzystając z Edytora Graficznego stwórz bitmapę, która może być wykorzystana jako wizytówka firmy lub aplikacji.
Przy pomocy Edytora Graficznego stwórz ikonę z przezroczystym tłem, składającą się z obu wersji: dużej i małej.
Stwórz kursor w Edytorze Graficznym. Ustaw gorący punkt kursora, a następnie przetestuj go w oknie testowym (Cursor Tester).
Utwórz nowy plik zasobów, a następnie umieść w nim dwie bitmapy i kursor. Zapisz nowy plik.
Korzystając z pliku zasobów, stworzonego w ćwiczeniu 4, stwórz nowy zasób w postaci ikony i skopiuj do niego ikonę utworzoną w ćwiczeniu drugim.
Otwórz okno ustawień środowiska (Environment Options) i przejdź na stronę Palette. Stwórz nową stronę Palety Komponentów i nazwij ją MojeRzeczy. Do nowo utworzonej strony skopiuj komponenty Label, Image i OpenDialog. Zamknij okno ustawień, przetestuj nowy układ Palety Komponentów. Na końcu swoich ćwiczeń usuń stronę MojeRzeczy.
Załaduj dowolny projekt Delphi. Otwórz okno ustawień środowiska, na stronie Preferences zaznacz opcję Minimize on Run. Uruchom program i zaobserwuj zachowanie się środowiska IDE.
Historia powstania nazwy „Delphi” opisana jest we wstępie do książki „Delphi 4 Vademecum Profesjonalisty” wyd. HELION 1999 (przyp. red.)
472 Część II
472 C:\Dokumenty\Roboczy\Delphi 4 dla kazdego\11.doc
C:\Dokumenty\Roboczy\Delphi 4 dla kazdego\11.doc 443
Rozdzia³ 11. ♦ Narzędzia i opcje Delphi 471