SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   Delphi 7 dla ka¿dego
           KATALOG KSI¥¯EK
                                         Autorzy: Andrzej Gra¿yñski, Zbigniew Zarzycki
                      KATALOG ONLINE     ISBN: 83-7361-091-X
                                         Format: B5, stron: 830
       ZAMÓW DRUKOWANY KATALOG           Zawiera CD-ROM


              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     Dawno ju¿ minê³y czasy, gdy podstawowym sposobem tworzenia programów by³o
                                         mozolne „wklepywanie” kodu. Forma przekazywanej komputerowi i uzyskiwanej
                                         za jego pomoc¹ informacji sta³a siê nie mniej wa¿na od tre ci. W takim w³a nie
         CENNIK I INFORMACJE             kontek cie zrodzi³y siê narzêdzia do b³yskawicznego tworzenia aplikacji (RAD),
                                         w ród których jednym z najpopularniejszych jest Delphi. Oparte na jêzyku ObjectPascal
                   ZAMÓW INFORMACJE      ma za sob¹ d³ug¹ tradycji, ukaza³a siê ju¿ 7 edycja tego narzêdzia.
                     O NOWO CIACH        To, ¿e Delphi jest wizualnym rodowiskiem programistycznym, w którym wiele dzia³añ
                                         wykonuje siê ³atwiej ni¿ w tradycyjnych rodowiskach opartych na tek cie, nie oznacza,
                       ZAMÓW CENNIK      ¿e jego u¿ytkownik mo¿e obej æ siê bez podrêcznika. Taki podrêcznik trzymasz w³a nie
                                         w rêku. Zosta³ on napisany w sposób fachowy i przystêpny. Dziêki „Delphi 7. Dla
                                         ka¿dego” poznasz Delphi i nauczysz siê pisaæ w nim programy, nawet je li nie jeste
                 CZYTELNIA               informatykiem.
                                         Ksi¹¿ka opisuje:
          FRAGMENTY KSI¥¯EK ONLINE
                                            • Typy danych i operatory w Delphi
                                            • Instrukcje, tworzenie w³asnych procedur i funkcji
                                            • Programowanie zorientowane obiektowo: klasy, metaklasy, interfejsy
                                            • Tworzenie bibliotek DLL w Delphi
                                            • rodowisko zintegrowane (IDE) Delphi
                                            • Tworzenie atrakcyjnego interfejsu u¿ytkownika
                                            • ledzenie wykonania programu i usuwanie z niego b³êdów
                                            • Obs³ugê baz danych w Delphi
                                         Dziêki narzêdziom takim jak Delphi nawet osoby, które wcze niej nie programowa³y,
                                         mog¹ pisaæ z³o¿one aplikacje o atrakcyjnym interfejsie. Przy okazji naucz¹ siê podstaw
                                         programowania, a zdobyt¹ w ten sposób wiedzê ³atwo przenios¹ do innych rodowisk
Wydawnictwo Helion                       i systemów.
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
Rozdział 1. Wprowadzenie ................................................................................... 9
                Trochę zabawy .......................................................................................................11
Rozdział 2. Kompendium języka Delphi............................................................... 19
                Moduły aplikacji w Delphi.......................................................................................19
                Struktury danych w językach programowania............................................................28
                Typy danych w Delphi ............................................................................................29
                    Typy proste ......................................................................................................30
                    Typy łańcuchowe..............................................................................................37
                    Typy strukturalne..............................................................................................42
                    Typy wariantowe ..............................................................................................75
                    Typy wskaźnikowe ...........................................................................................88
                    Definiowane obsady typów wariantowych...........................................................98
                Deklarowanie typów ............................................................................................. 162
                Reprezentacje danych w kodzie źródłowym ............................................................ 164
                    Literały .......................................................................................................... 165
                    Stałe synonimiczne.......................................................................................... 166
                    Stałe typowane ............................................................................................... 167
                    Zmienne......................................................................................................... 171
                Operatory............................................................................................................. 178
                    Operatory arytmetyczne .................................................................................. 179
                    Operatory porównania ..................................................................................... 181
                    Operatory logiczne (boolowskie) ...................................................................... 182
                    Operatory bitowe ............................................................................................ 182
                    Operatory zbiorowe......................................................................................... 188
                    Operator konkatenacji łańcuchów ..................................................................... 188
                    Operator referencji .......................................................................................... 189
                Pierwszeństwo operatorów .................................................................................... 189
                Zgodność typów danych........................................................................................ 191
                    Identyczność typów ........................................................................................ 191
                    Kompatybilność typów.................................................................................... 192
                    Zgodność typów w sensie przypisania (przypisywalność) ................................... 193
                Rzutowanie i konwersja typów............................................................................... 195
                Instrukcje............................................................................................................. 199
                    Instrukcje proste ............................................................................................. 200
                    Instrukcje strukturalne ..................................................................................... 202
                Procedury i funkcje............................................................................................... 215
                    Przekazywanie parametrów do procedur i funkcji .............................................. 219
                    Parametry amorficzne...................................................................................... 224
4                                                                                                       Delphi 7 dla każdego


                 Tablice otwarte ............................................................................................... 227
                 Przecią anie procedur i funkcji......................................................................... 232
                 Parametry domyślne procedur i funkcji ............................................................. 236
                 Zagnie d one definicje procedur i funkcji oraz zasięg deklaracji ......................... 239
                 Deklaracje zapowiadające (forward) ................................................................. 240
             Typy proceduralne ................................................................................................ 241
             Obiekty, klasy i programowanie zorientowane obiektowo......................................... 248
                 Definiowanie klas ........................................................................................... 250
                 Tworzenie i unicestwianie zmiennych obiektowych ........................................... 260
                 Zgodność typów obiektowych a polimorfizm..................................................... 263
                 Przecią anie metod ......................................................................................... 269
             Metaklasy ............................................................................................................ 272
                 Metaklasy a metody wirtualne .......................................................................... 277
                 Metaklasy a wirtualne konstruktory .................................................................. 280
                 Operatory klasowe .......................................................................................... 285
                 Uniwersalne metody metaklasowe .................................................................... 288
             Interfejsy ............................................................................................................. 289
                 Deklarowanie interfejsów ................................................................................ 290
                 Implementowanie interfejsów........................................................................... 291
             Deklaracje zapowiadające klas i interfejsów ............................................................ 302
             Pocztówka z przeszłości — obiekty Turbo Pascala................................................... 303
             Strukturalna obsługa wyjątków .............................................................................. 304
                 try...finally, czyli gwarancja ............................................................................. 305
                 try...except, czyli naprawa................................................................................ 310
                 Wyjątki jako klasy Delphi................................................................................ 317
                 Hierarchia obsługi wyjątków i wyjątki nieobsłu one .......................................... 324
                 Generowanie wyjątków ................................................................................... 328
                 Ponawianie wyjątków...................................................................................... 332
Rozdział 3. Opcje kompilacji i kompilacja warunkowa....................................... 337
             Opcje związane z nowościami Delphi ..................................................................... 338
                $H ($LONGSTRINGS) — długie łańcuchy....................................................... 338
                $REALCOMPATIBILITY — tradycyjny typ zmiennoprzecinkowy .................... 339
                $J ($WRITEABLECONST) — stałe czy zmienne? ............................................ 339
             Opcje testowe....................................................................................................... 341
                $R ($RANGECHECKS) — kontrola zakresu .................................................... 342
                $I ($IOCHECKS) — kontrola poprawności operacji wejścia-wyjścia .................. 342
                $Q ($OVERFLOWCHECKS) — kontrola nadmiaru stałoprzecinkowego ............ 342
                $C ($ASSERTIONS) — honorowanie albo ignorowanie asercji .......................... 343
             Tradycyjne opcje pascalowe .................................................................................. 343
                $X ($EXTENDEDSYNTAX) — rozszerzona składnia....................................... 344
                $V ($VARSTRINGCHECKS) — kontrola zgodności parametrów łańcuchowych... 344
                $P ($OPENSTRINGS) — domyślne łańcuchy otwarte ....................................... 346
             Opcje interpretacyjne ............................................................................................ 346
                $B ($BOOLEVAL) — obliczanie wyra eń boolowskich .................................... 346
                $T ($TYPEDADDRESS) — kontrola referencji ................................................ 348
             Opcje generacyjne ................................................................................................ 349
                $O ($OPTIMIZATION) — optymalizowanie generowanego kodu ...................... 349
                $W ($STACKFRAMES) — generowanie ramek stosu ....................................... 349
                $A ($ALIGN) — wyrównywanie pól rekordów i klas......................................... 350
                $Z ($MINENUMSIZE) — minimalny rozmiar zmiennej typu wyliczeniowego .... 350
                $U ($SAFEDIVIDE)....................................................................................... 351
             Opcje sterujące informacją dodatkową.................................................................... 351
                $D ($DEBUGINFO) — generowanie informacji dla debuggera .......................... 352
                $L ($LOCALSYMBOLS) — generowanie informacji o symbolach lokalnych ..... 352
Spis treści                                                                                                                         5


                   $Y ($REFERENCEINFO i $DEFINITIONINFO)
                     — generowanie informacji o symbolach i odwołaniach do nich......................... 352
                   $M ($TYPEINFO) — generowanie informacji RTTI ......................................... 353
                Opcje związane z komunikatami kompilatora.......................................................... 353
                   $HINTS......................................................................................................... 353
                   $WARNINGS ................................................................................................ 353
                   $WARN......................................................................................................... 354
                   Dyrektywa $MESSAGE .................................................................................. 355
                Opcje parametryczne ............................................................................................ 355
                   $M ($MINSTACKSIZE, $MAXSTACKSIZE)
                     — ustalenie wielkości stosu dla programu ....................................................... 355
                   $IMAGEBASE — bazowy obszar ładowania biblioteki DLL.............................. 356
                   $APPTYPE — typ aplikacji ............................................................................. 357
                   $D ($DESCRIPTION) — opis aplikacji ............................................................ 357
                   $E ($EXTENSION) — rozszerzenie generowanego pliku wykonywalnego .......... 357
                Opcje integracyjne ................................................................................................ 357
                   $I ($INCLUDE) — dołączanie fragmentów kodu źródłowego............................. 357
                   $L ($LINK) — dołączanie skompilowanych modułów ....................................... 363
                   $R ($RESOURCE) — dołączanie plików zasobowych ....................................... 363
                Kompilacja warunkowa......................................................................................... 363
                   Symbole kompilacji warunkowej...................................................................... 364
                   Wyra enia kompilacji warunkowej ................................................................... 374
                Opcje kompilacji i kompilacja warunkowa aktualność modułów wynikowych............ 377
Rozdział 4. Biblioteki DLL ................................................................................ 379
                Biblioteki DLL a środowisko zintegrowane Delphi .................................................. 380
                Tworzenie bibliotek DLL w Delphi ........................................................................ 382
                    Klauzule resident, export i local........................................................................ 389
                Statyczne łączenie bibliotek DLL ........................................................................... 393
                    Moduły importowe bibliotek DLL .................................................................... 397
                Dynamiczne łączenie bibliotek DLL....................................................................... 403
                Procedura inicjująco-kończąca biblioteki DLL ........................................................ 406
                Bazowy adres ładowania biblioteki DLL................................................................. 409
                Klasy i obiekty w bibliotekach DLL ....................................................................... 411
                    Importowanie obiektu na podstawie deklaracji klasy .......................................... 411
                    Implementowanie interfejsów przez obiekt znajdujący się w bibliotece DLL........ 419
Rozdział 5. Środowisko zintegrowane Delphi 7 ................................................. 429
                Projekty w środowisku IDE ................................................................................... 430
                    Domyślne opcje projektu ................................................................................. 436
                Opcje menu głównego i paski narzędzi ................................................................... 448
                Formularze i paleta komponentów.......................................................................... 449
                Podstawowe właściwości i zdarzenia formularzy ..................................................... 450
                    Modalne i niemodalne wyświetlanie formularza................................................. 461
                    Wa niejsze metody formularzy ........................................................................ 470
                    Wielokrotne wykorzystywanie formularzy za pośrednictwem repozytorium ......... 473
                    Siatka formularza ............................................................................................ 477
                    Zaznaczanie komponentów .............................................................................. 478
                    Przesuwanie komponentów.............................................................................. 482
                    Zmiana rozmiarów komponentów..................................................................... 483
                    Skalowanie poło enia i rozmiarów komponentów
                     za pomocą okna dialogowego skalowania ....................................................... 484
                    Wyrównywanie i dopasowywanie poło enia komponentów ................................ 485
                    Właściwości komponentów odpowiedzialne za ich rozmiary i uło enie................ 488
6                                                                                                      Delphi 7 dla każdego


                   Ochrona poło enia i rozmiarów komponentów .................................................. 491
                   Wycinanie, kopiowanie i wklejanie komponentów ............................................. 491
                   Warstwowy układ komponentów...................................................................... 493
                   Cykl Tab........................................................................................................ 494
               Inspektor obiektów ............................................................................................... 495
               System menu aplikacji i projektant menu ................................................................ 498
               Zachowywanie układu pulpitu................................................................................ 518
               Edytor kodu Delphi............................................................................................... 520
                   Otwieranie i zapisywanie plików ...................................................................... 521
                   Praca z blokami tekstu..................................................................................... 522
                   Cofanie i ponawianie poleceń (Undo) ............................................................... 527
                   Wyszukiwanie i zamiana fragmentów tekstu...................................................... 527
                   Szablony kodu ................................................................................................ 531
                   Uzupełnianie i parametryzowanie kodu............................................................. 533
                   Podpowiedzi kontekstowe związane z elementami kodu ..................................... 535
                   Uzupełnianie klas............................................................................................ 536
                   Nawigowanie po implementacji klasy ............................................................... 538
                   „Parowanie” nawiasów.................................................................................... 538
                   Menu kontekstowe edytora kodu ...................................................................... 538
                   Diagramy powiązań......................................................................................... 538
                   Konfigurowanie edytora kodu .......................................................................... 541
               Eksplorator kodu .................................................................................................. 549
                   Ustawienia związane z eksploratorem kodu ....................................................... 550
               Przeglądarka projektu............................................................................................ 551
Rozdział 6. Śledzenie programu........................................................................ 553
               Przygotowanie aplikacji do śledzenia zintegrowanego.............................................. 554
               Elementy śledzenia zintegrowanego ....................................................................... 554
                   Praca krokowa................................................................................................ 554
                   Punkty przerwań............................................................................................. 557
                   Podgląd wyra eń i modyfikowanie zmiennych programu.................................... 563
               Inspektor śledzenia................................................................................................ 569
               Śledzenie kodu biblioteki DLL............................................................................... 571
               Dziennik zdarzeń .................................................................................................. 572
               Ustawienia związane ze zintegrowanym debuggerem............................................... 573
                   Strona General................................................................................................ 573
                   Strona Event Log ............................................................................................ 574
                   Strona Language Exceptions ............................................................................ 574
                   Strona OS Exceptions...................................................................................... 575
               Turbo Debugger — TD32.EXE ............................................................................. 576
Rozdział 7. Komponenty Delphi........................................................................ 579
               Zdarzenia komponentów ....................................................................................... 581
               Hierarchia komponentów....................................................................................... 587
                   Komponenty wizualne ..................................................................................... 589
               Właściwości komponentów oraz ich obsługa za pomocą inspektora obiektów ............ 594
                   Właściwości proste ......................................................................................... 594
                   Właściwości wyliczeniowe .............................................................................. 594
                   Właściwości zbiorowe ..................................................................................... 594
                   Właściwości obiektowe ................................................................................... 595
                   Właściwości tablicowe .................................................................................... 596
                   Strumieniowanie komponentów i domyślna wartość właściwości ........................ 598
                   Współdzielenie metod dostępowych — właściwości indeksowane....................... 603
Spis treści                                                                                                                             7


               Przegląd komponentów ......................................................................................... 605
                   Etykiety — TLabel i TStaticText...................................................................... 606
                   Komponenty edycyjne — TEdit, TMaskEdit, TMemo i TRichEdit ...................... 607
                   Przyciski ........................................................................................................ 616
                   Komponenty selekcyjne — TListBox, TListCheckBox i TComboBox ................. 627
                   Komponent zegarowy — TTimer ..................................................................... 631
                   Komponenty standardowych okien dialogowych................................................ 632
               Tworzenie nowego komponentu............................................................................. 644
Rozdział 8. Technologia COM .......................................................................... 655
Rozdział 9. Obsługa baz danych w Delphi ......................................................... 667
               Wstęp .................................................................................................................. 667
                   Lokalne bazy danych....................................................................................... 669
                   Bazy danych typu klient-serwer........................................................................ 669
                   Wielowarstwowa architektura baz danych ......................................................... 670
               Przegląd technologii.............................................................................................. 671
                   ClientDataSet ................................................................................................. 672
                   Borland Database Engine (BDE) ...................................................................... 672
                   InterBase Express ........................................................................................... 673
                   dbExpress....................................................................................................... 674
                   DbGo (ADOExpress) ...................................................................................... 674
                   DataSnap ....................................................................................................... 675
               Wybór technologii dostępu do danych .................................................................... 675
                   Podejście prototypowe .................................................................................... 675
                   Planowanie „cyklu yciowego” ........................................................................ 676
                   Połączenie z bazami danych w środowisku Delphi ............................................. 676
                   Tworzenie prostego formularza bazy danych ..................................................... 678
                   Dodawanie kolejnych kontrolek bazodanowych................................................. 682
                   Relacja ogół-szczegóły .................................................................................... 685
               Obsługa pól rekordów ........................................................................................... 687
                   Właściwości pól i komponent TField ................................................................ 687
                   Edytor właściwości pól.................................................................................... 689
                   Modyfikowanie właściwości pola ..................................................................... 691
                   Formatowanie pól przy u yciu masek edycyjnych.............................................. 692
                   Dostęp do wartości kolumny ............................................................................ 694
                   Pola wyliczane................................................................................................ 696
                   Pola przeglądowe ............................................................................................ 698
                   Weryfikacja danych wejściowych..................................................................... 700
               Zbiory danych ...................................................................................................... 702
                   Kontrolowanie wskaźnika bie ącego rekordu .................................................... 704
                   Edycja danych ................................................................................................ 706
                   Ograniczanie zbiorów danych .......................................................................... 707
                   Wyszukiwanie rekordów ................................................................................. 709
                   Oznaczanie rekordów za pomocą zakładek........................................................ 711
                   Definiowanie wartości domyślnych pól ............................................................. 712
                   Podstawowe właściwości, metody i zdarzenia zbiorów danych............................ 713
               Współpraca z serwerami........................................................................................ 713
                   Autoryzacja klienta ......................................................................................... 715
                   Transakcje ..................................................................................................... 719
               Komponent ClientDataSet ..................................................................................... 721
               Borland Database Engine....................................................................................... 729
                   Administrator BDE ......................................................................................... 729
                   Instalacja BDE................................................................................................ 736
8                                                                                          Delphi 7 dla każdego


        Kreator formularzy baz danych ........................................................................ 736
        Komponenty BDE .......................................................................................... 741
        Funkcje BDE API........................................................................................... 751
    ActiveX Database Objects ..................................................................................... 753
        ADO w Delphi................................................................................................ 754
        Standardowe sterowniki ADO .......................................................................... 757
        Argumenty połączenia ..................................................................................... 757
        TADOConnetion............................................................................................. 759
        TADODataSet ................................................................................................ 761
        Excel jako baza danych ................................................................................... 762
    Dostęp do danych za pomocą technologii dbExpress ................................................ 766
        Komponenty interfejsu dbExpress .................................................................... 767
        Jak to działa w praktyce? ................................................................................. 768
        Uzgadnianie błędów serwera............................................................................ 771
        Rozpowszechnianie aplikacji z interfejsem dbExpress ........................................ 772
    InterBase Express ................................................................................................. 774
        Przegląd komponentów InterBase Express ........................................................ 775
    Technologia DataSnap .......................................................................................... 780
        Architektura wielowarstwowa .......................................................................... 781
        MIDAS i DataSnap ......................................................................................... 783
    Podsumowanie .............................................................................. 791
    Skorowidz...................................................................................... 793
Typy danych w Delphi
   Ile wagonów potrzeba do przewiezienia 14 obrabiarek, je eli w jednym wagonie
   mieszczą się cztery obrabiarki? Wynikająca z prostego dzielenia odpowiedź — 3,5 —
   jest w oczywisty sposób bezsensowna, nie mo na bowiem podzielić wagonu na pół
   (na upartego mo na, lecz wtedy nie będzie nadawał się do przewiezienia czegokolwiek).

   Jaka jest ró nica między liczbami 6,30 a 2,45 — jaki jest odstęp czasowy między godziną
   6:30 a 2:45? Argumenty odejmowania niby te same, lecz wyniki ró ne (3,85 i 3:45).

   Te banalne przykłady pokazują, i w wielu obliczeniach musimy ograniczyć się tylko
   do pewnej kategorii danych (tu liczb całkowitych), a sposób wykonywania podstawo-
   wych działań często zale y od charakteru danych (inaczej odejmuje się ułamki dzie-
   siętne, inaczej wskazania zegara).

   Gdy przyjrzeć się operacjom wykonywanym przez współczesne procesory, mo na
   zauwa yć podobną tendencję: zupełnie ró ne reguły rządzą podstawowymi operacjami
   matematycznymi wykonywanymi na liczbach całkowitych, liczbach zmiennoprzecin-
   kowych i liczbach dziesiętnych, mimo kodowania ich w tej samej postaci — wzorców
   bitowych. Ta cecha koncepcyjna (i konstrukcyjna) komputerów zawa yła w głównej
   mierze na konstrukcji samych języków programowania: okazało się mianowicie, e
   tworzenie języków programowania będzie łatwiejsze (same zaś języki — bardziej
   efektywne), je eli równie na ich gruncie odzwierciedlone zostanie owo zró nicowanie
   danych. I tak zostało do dziś, choć gwoli sprawiedliwości wspomnieć nale y o dwóch
   istotnych faktach. Otó po pierwsze, ju w latach sześćdziesiątych twórcy języka Algol
   60 zamierzali stworzyć język umo liwiający posługiwanie się liczbami bez koniecz-
   ności ich ró nicowania (choć z mo liwością ró nicowania na ądanie), lecz w sytu-
   acji, gdy pamięć typowego komputera miała pojemność co najwy ej kilku tysięcy
   słów, tak ambitne zamierzenia musiały pozostać w sferze marzeń. Po drugie nato-
   miast — rozwijające się techniki wymiany danych i oprogramowania pomiędzy kom-
   puterami doprowadziły do sytuacji, w której w pewnych zastosowaniach opisanego
   ró nicowania utrzymać się nie da, wymianie podlega bowiem informacja o wysoce
   zró nicowanym charakterze. Na potrzeby obsługi tego typu informacji wprowadzono
   do języków programowania tzw. zmienne wariantowe, którymi zajmiemy się w dal-
   szym ciągu rozdziału.

   Zbiór wartości o określonym charakterze i zdefiniowanych działaniach nazywamy
   w języku programowania typem danych. Język Delphi ma wiele typów predefiniowa-
   nych, z których programista mo e korzystać bez ich deklarowania. U ytkownik ma
   jednak nieograniczoną praktycznie mo liwość definiowania własnych typów, stosow-
   nie do charakteru rzeczywistych danych, odzwierciedlanych (w zało eniu mo liwie
   jak najwierniej) w tworzonym programie. Nie jest niczym niezwykłym fakt, i reper-
   tuar tych typów jest nieporównywalnie bogatszy w porównaniu do „gołego” kompu-
   tera — na tym w końcu polega rola języków wysokiego poziomu.

   Hierarchiczne zestawienie typów dostępnych w Delphi przedstawiamy na rysunku
   2.1. Ograniczony zakres niniejszej ksią ki nie pozwala na ich wyczerpujące omówie-
   nie, skoncentrujemy się więc na ich najwa niejszych cechach.
30                                                                            Delphi 7 dla każdego




Rysunek 2.1. Zestawienie typów Delphi


Typy proste
          Wielkość typu prostego (zwanego równie typem skalarnym) zawiera pojedynczą
          wartość. Wielkością skalarną jest więc liczba całkowita, liczba rzeczywista, numer
          miesiąca czy nawet odpowiedź tak-nie na kategorycznie sformułowane pytanie; nie
          nale ą do wielkości skalarnych liczby zespolone (dwie wartości), wektory, macierze,
          ciągi itp. Pascal nie zalicza równie do typów skalarnych napisów, poniewa ka dy
          z nich rozpatrywany mo e być jako ciąg wielu znaków.

          Typ skalarny mo e mieć własność przeliczalności — określenie to oznacza, e wszyst-
          kie jego wartości mo na ustawić w ciąg, a dla ka dej wartości istnieje ściśle określo-
          ny następnik i poprzednik (jednak z zastrze eniem skończoności — patrz ni ej).
          W naturze własność tę mają np. liczby całkowite. Nie są przeliczalne liczby rzeczywi-
          ste — przeprowadzenie dowodu tego faktu (tzw. metodą przekątniową Cantora) jest
          przedmiotem elementarnego kursu arytmetyki i wykracza poza ramy niniejszej ksią -
          ki. Typ skalarny posiadający własność przeliczalności nazywamy typem porządko-
          wym (ordinal type).

          Języki programowania ze zrozumiałych względów stanowią jedynie przybli ony opis
          świata rzeczywistego. Jednym z aspektów owego przybli enia jest skończoność —
          i tak, na przykład, ka dy typ całkowitoliczbowy posiada wartość najmniejszą i naj-
          większą, a liczby zmiennoprzecinkowe mogą być reprezentowane jedynie ze skoń-
          czoną dokładnością. Jako e wartości typów zmiennoprzecinkowych reprezentowane
          są przy wykorzystaniu skończonej liczby bitów, liczba mo liwych do zapisania war-
          tości jest skończona i mo na by pokusić się o sztuczne wprowadzanie przeliczalności
          tych typów; posunięcie takie byłoby jednak ściśle związane z konkretną architekturą
          komputera i raczej mało przydatne. Z tego względu typy zmiennoprzecinkowe nie są
          w Pascalu zaliczane do typów porządkowych.




30 (03-05-16)                                                C:AndrzejPDFDelphi 7 dla ka dego29-37.doc
Rozdział 2. ♦ Kompendium języka Delphi                                                                  31


Typy porządkowe
           Ka dy typ porządkowy reprezentuje w Pascalu skończony, jednoznacznie uporząd-
           kowany 1 zbiór wartości. Dla ka dego typu porządkowego mo na określić wartość naj-
           mniejszą i największą, zaś dla ka dej jego wartości mo na określić wartość następną
           i poprzednią (z oczywistym ograniczeniem w odniesieniu do wartości najmniejszej
           i największej). W Delphi rozró nia się pięć rodzajów typów porządkowych:
                 całkowitoliczbowe — reprezentujące określone przedziały liczb całkowitych,
                 znakowe — reprezentujące zestawy znaków z określonych alfabetów,
                 logiczne (boolowskie) — reprezentujące wartości prawda i fałsz
                 w określonych reprezentacjach,
                 wyliczeniowe — reprezentujące podane explicite zbiory wartości definiowane
                 przez u ytkownika,
                 okrojone — stanowiące określone przedziały innych typów porządkowych.

           Dla ka dego typu porządkowego określone są następujące funkcje:
                 .QY — zwraca najmniejszą wartość reprezentowaną przez dany typ,
                 *KIJ — zwraca największą wartość reprezentowaną przez dany typ.

           Dla ka dej wartości typu porządkowego dodatkowo określone są następujące funkcje:
                 1TF — zwraca numer kolejny wartości w ramach wartości reprezentowanych
                 przez dany typ 2; najmniejsza reprezentowana wartość ma numer 0,
                 2TGF — zwraca poprzednią wartość w ramach typu (nie dotyczy najmniejszej
                 wielkości reprezentowanej przez dany typ),
                 5WEE — zwraca następną wartość w ramach typu (nie dotyczy największej
                 wielkości reprezentowanej przez dany typ).

           Dla wygody operowania danymi typów porządkowych zdefiniowano równie w Pas-
           calu dwie następujące procedury:
                 +PE — zwiększa (inkrementuje) wartość argumentu (+PE
: równowa ne
                 jest :  5WEE
:),
                 GE — zmniejsza (dekrementuje) wartość argumentu (GE
: równowa ne
                 jest :  2TGF
:).



1
    Słowo jednoznacznie jest tu istotne; w przeciwieństwie bowiem do skończonego zbioru, np. ułamków
    zwykłych, który to zbiór uporządkować mo na według ró nych kryteriów, ka dy typ porządkowy
    posiada jedno i tylko jedno uporządkowanie.
2
    Funkcja 1TF
 nie ma zastosowania do typu +PV z prostego powodu: rodzimą arytmetyką Delphi
    jest arytmetyka 32-bitowa i wartość zwracana przez funkcję 1TF
 musi zmieścić się na 32 bitach.
    Typ +PV — jako reprezentowany na 64 bitach — jest więc pewnym wyjątkiem wśród typów
    porządkowych.




C:AndrzejPDFDelphi 7 dla ka dego29-37.doc                                              (03-05-16)   31
32                                                                                Delphi 7 dla każdego


              Typy całkowitoliczbowe
              Typ całkowitoliczbowy reprezentuje (zgodnie z nazwą) przedział liczb całkowitych. Ze-
              staw typów całkowitoliczbowych zdefiniowanych w Delphi przedstawiamy w tabeli 2.1.

Tabela 2.1. Typy całkowitoliczbowe Delphi
    Typ                 Zakres                           Reprezentacja maszynowa
    +PVGIGT                        słowo (32 bity) ze znakiem
    %CTFKPCN                                słowo (32 bity) bez znaku
    5JQTVKPV                                     bajt (8 bitów) ze znakiem
    $[VG                                           bajt (8 bitów) bez znaku
    5OCNNKPV                                 półsłowo (16 bitów) ze znakiem
    9QTF                                         półsłowo (16 bitów) bez znaku
    .QPIKPV                        słowo (32 bity) ze znakiem
    .QPIYQTF                                słowo (32 bity) bez znaku
    +PV                                       dwusłowo (64 bity) ze znakiem

              Zwróć uwagę, e typy 32-bitowe (zarówno ze znakiem, jak i bez) posiadają podwójną
              reprezentację. Wynika to z przyjętej w Delphi filozofii, zgodnie z którą typy +PVGIGT
              i %CTFKPCN zawsze cechują się najbardziej optymalną implementacją dla danej wersji
              Delphi i z tej racji określane są mianem typów rodzimych (generic); ich reprezentacja
              zale na jest od konkretnej wersji Delphi. Pozostałe typy całkowitoliczbowe, określane
              mianem typów fundamentalnych, mają reprezentację uniwersalną3, która w przy-
              szłych wersjach Delphi pozostanie niezmieniona.

              Nale y zachować pewną ostro ność w operowaniu danymi typu +PV. Przekracza on
              granice domyślnej dla Delphi, 32-bitowej arytmetyki, co ma swe konsekwencje, mię-
              dzy innymi, w stosunku do niektórych funkcji i procedur, obcinających argumenty do
              32 bitów. Ograniczenie to nie dotyczy jednak funkcji (procedur) standardowych (po-
              dajemy za dokumentacją Delphi 7) *KIJ, .QY, 5WEE, 2TGF, +PE, GE, +PV6Q5VT i +PV6Q*GZ.

              Ponadto w sytuacji, gdy wyniki pośrednie obliczeń na liczbach całkowitych przekra-
              czają granice 32 bitów, końcowe wyniki mogą być niepoprawne. W poni szym przy-
              kładzie:
                  K L .QPIKPV
                  M +PV

                  

                  K  
                  L  

                  M  K 
 L

3
    Pewnym wyłomem w tej uniwersalności jest typ %CTFKPCN, który w Delphi 3 ograniczony był
    do nieujemnej połówki typu .QPIKPV 
   Począwszy od Delphi 4 jest on pełnoprawną
    32-bitową liczbą bez znaku.




32 (03-05-16)                                                    C:AndrzejPDFDelphi 7 dla ka dego29-37.doc
Rozdział 2. ♦ Kompendium języka Delphi                                                          33


           wartością zmiennej M po wykonaniu obliczeń jest nie , jak mo na by ocze-
           kiwać, lecz  — wszystko wskutek obcięcia do 32 bitów. By uniknąć tej
           niespodzianki, nale ałoby wymusić (na kompilatorze) u ycie arytmetyki 64-bitowej,
           na przykład przez rzutowanie jednego z argumentów dodawania na typ +PV:
              M  +PV
K 
 L

           Mo esz się o tym przekonać, uruchamiając projekt #TKVJ znajdujący się na dołą-
           czonym do ksią ki CD-ROM-ie.

           Typy logiczne (boolowskie)
           Wielkość typu boolowskiego reprezentuje jedną z wartości prawda albo fałsz, ozna-
           czonych stałymi symbolicznymi (odpowiednio) 647' i (#.5'. W Delphi istnieją cztery
           typy boolowskie (patrz tabela 2.2):

Tabela 2.2. Typy boolowskie boolowskie Delphi
 Typ                      Wielkość               Reprezentacja           Reprezentacja
                                                 wartości FALSE          wartości TRUE
 $QQNGCP                  bajt (8 bitów)                                
 $[VG$QQN                 bajt (8 bitów)                                dowolna wartość
                                                                         niezerowa
 9QTF$QQN                 półsłowo (16 bitów)                           dowolna wartość
                                                                         niezerowa
 .QPI$QQN                 słowo (32 bity)                               dowolna wartość
                                                                         niezerowa

           Typ $QQNGCP jest rodzimym typem pascalowym i jako taki zalecany jest do wykorzy-
           stywania w tworzonych aplikacjach. Pozostałe typy boolowskie istnieją przez zgod-
           ność z innymi językami (m.in. Visual Basiciem) i bibliotekami oprogramowania.

           Zwróć uwagę, i typ $QQNGCP cechuje się pewną niedookreślonością: reprezentacją
           (#.5' jest , reprezentacją 647' jest . A co z pozostałymi wartościami, od  do ?

           Je eli : jest zmienną typu $QQNGCP, warunek:
              KH
:

           jest równowa ny warunkowi:
              KH 
1TF
:        

           czyli wspomniany przedział zaliczany jest do reprezentacji wartości 647'. Jednak e
           ju porównanie:
              KH 
:  647'

           interpretowane jest dosłownie, czyli równowa ne jest porównaniu:
              KH 
1TF
:  

           a więc wspomniany przedział zaliczany jest na poczet reprezentacji wartości (#.5'.




C:AndrzejPDFDelphi 7 dla ka dego29-37.doc                                      (03-05-16)   33
34                                                                                 Delphi 7 dla każdego


           Typy $[VG$QQN, 9QTF$QQN i .QPI$QQN wolne są od tej niekonsekwencji — w odniesie-
           niu do nich porównania:
                KH 
:  647'

           oraz:
                KH 
:

           są równowa ne.

           Je eli chodzi o skrajne wartości typów boolowskich, sprawa przedstawia się dosyć
           ciekawie (tabela 2.3):

Tabela 2.3. Zakres typów boolowskich
 Typ                                 Ord(Low(typ))                     Ord(High(typ))
 $QQNGCP                                                              
 $[VG$QQN                                                             
 9QTF$QQN                                                             
 .QPI$QQN                                                    

           Zatem dla typu .QPI$QQN (i tylko dla niego) mo liwa jest sytuacja, w której spełnione
           są jednocześnie trzy warunki: :(#.5', ;647' i 1TF
: 1TF
; — wówczas (w pew-
           nym sensie) (#.5'  647'.

           O prawdziwości powy szych wywodów mo esz się o tym przekonać, uruchamiając
           projekt $QQN5RGE znajdujący się na dołączonym do ksią ki CD-ROM-ie.

           Typy wyliczeniowe
           Typ wyliczeniowy (enumerated type) stanowi reprezentację zdefiniowanego ad hoc
           zbioru elementów posiadających wspólną pewną cechę; poszczególne elementy identy-
           fikowane są przez unikalne nazwy nie mające poza tym adnego innego znaczenia
           merytorycznego. Oto przykłady typów wyliczeniowych:
                 UVCP QMPC
                65VCP1MPC  
0QTOCNPG OKPKOCNKQYCPG OCMU[OCNKQYCPG

                 UVTQP[ YKCVC
                6-KGTWPGM  
YUEJQF RQNWFPKG CEJQF RQNPQE

                 MQNQT[ MCTEKCPG
                6-QNQT-CTV[  
VTGHN MCTQ MKGT RKM

           Ka da z wartości typu wyliczeniowego jest stałą tego typu — zgodnie z powy szymi
           definicjami nazwa MCTQ jest stałą typu 6-QNQT-CTV[.

           Funkcja 1TF zastosowana do elementu typu wyliczeniowego zwraca numer kolejny
           tego elementu w definicji typu począwszy od zera — tak więc 1TF
VTGHN  ,
           1TF
CEJQF   itd. Funkcje .QY i *KIJ zwracają (odpowiednio) pierwszy i ostatni
           element w definicji typu. A zatem, na przykład, .QY
65VCP1MPC  0QTOCNPG, a *KIJ
           
6-QNQT-CTV[  RKM.




34 (03-05-16)                                                     C:AndrzejPDFDelphi 7 dla ka dego29-37.doc
Rozdział 2. ♦ Kompendium języka Delphi                                                               35


           Począwszy od Delphi 6, mo na w sposób jawny przypisywać poszczególnym ele-
           mentom (wszystkim lub tylko niektórym) wartość, którą ma dla nich zwrócić funkcja
           1TF. Oto przykład:
              61FRQYKGF  
0KG  0KG9KGO6CM

           Funkcje .QY i *KIJ zwracają wówczas te elementy, którym przypisano (odpowiednio)
           najmniejszą i największą wartość.

           Elementy, którym nie przypisano wartości w sposób jawny, otrzymują kolejne warto-
           ści większe od poprzedników. Je eli nie przypisano wartości pierwszemu elementowi,
           otrzymuje on wartość . Zgodnie z poni szą definicją:
              62CTVKCN'PWO  
PQ 0KUMQ 2QKQO -TQM 9[GL )QTC 5E[V

           zachodzą następujące równości:
              1TF
PQ           
              1TF
0KUMQ         
              1TF
2QKQO        
              1TF
-TQM          
              1TF
9[GL         
              1TF
)QTC          
              1TF
5E[V        

           Typy znakowe
           Wielkość typu znakowego reprezentuje pojedynczy znak alfabetyczny. Aktualnie
           w Delphi zdefiniowane są dwa fundamentalne typy znakowe:
                 #PUK%JCT — reprezentuje zbiór znaków określony normą ANSI, poszerzony
                 jednak o specyficzne znaki narodowe dla poszczególnych wersji. Wartość
                 tego typu zajmuje jeden bajt, a więc liczba reprezentowanych znaków nie
                 przekracza 256.
                 9KFG%JCT — reprezentuje znaki wielobajtowe. Aktualnie zmienna typu 9KFG%JCT
                 zajmuje dwa bajty, sam zaś typ odpowiada zbiorowi znaków UNICODE.
                 Pierwsze 256 wartości typu 9KFG%JCT są identyczne z typem #PUK%JCT.

           Rodzimym typem znakowym Pascala jest typ %JCT, w dotychczasowych wersjach Delphi
           równowa ny typowi #PUK%JCT (sytuacja ta mo e się zmienić w przyszłych wersjach).

           Typy okrojone
           Typ okrojony (subrange type) stanowi ciągły podzbiór innego typu porządkowego
           zwanego typem bazowym. Oto przykłady definicji typów okrojonych:
              6.KVGT[  #            V[R DCQY[    %JCT
              6%[HT[               V[R DCQY[    +PVGIGT
              6$TCM6CM  0KG  0KG9KGO  V[R DCQY[    61FRQYKGF

           Typy okrojone dziedziczą z typu bazowego wartości funkcji 1TF dla swych elementów,
           co skądinąd jest całkiem zrozumiałe — 1TF
 #  równe jest  niezale nie od tego,
           czy znak # postrzegamy jako wartość typu %JCT czy te typu 6.KVGT[.




C:AndrzejPDFDelphi 7 dla ka dego29-37.doc                                           (03-05-16)   35
36                                                                                 Delphi 7 dla każdego


Typy zmiennoprzecinkowe
          Typy zmiennoprzecinkowe (floating point types) reprezentują podzbiory liczb rze-
          czywistych ze zró nicowaną dokładnością. Delphi definiuje 6 fundamentalnych typów
          zmiennoprzecinkowych zgodnych z normą ANSI/IEEE 754. Ich charakterystyka przed-
          stawiona jest w tabeli 2.4.

Tabela 2.4. Fundamentalne typy zmiennoprzecinkowe Delphi
 Typ            Zakres                                        Liczba          Dokładność        Rozmiar
                                                              dziesiętnych    (liczba
                                                              cyfr            bitów
                                                              znaczących      mantysy)
 5KPING           ×     ×  (moduł)                                           4 bajty
 QWDNG           ×     ×  (moduł)                                      8 bajtów
 'ZVGPFGF         ×     ×  (moduł)                                    10 bajtów
 %QOR             
                                                             8 bajtów
 %WTTGPE[                                       8 bajtów
 4GCN           ×     ×                                                 6 bajtów

          %QOR jest w tym zestawieniu o tyle nietypowy, i został on zaliczony do zmiennoprze-
          cinkowych jedynie ze względów historycznych — w Turbo Pascalu wszystko, co
          miało związek z koprocesorem, zaliczane było do arytmetyki zmiennoprzecinkowej.
          Pod względem fizycznym wartość typu %QOR jest ośmiobajtową liczbą całkowitą ze
          znakiem, o czym mo na się przekonać, wykonując poni szą sekwencję:
                8CT
                  ' 'ZVGPFGF
                  % %QOR

                  

                  '  
                  %  '
                  '  %

          Po zakończeniu zmienna ' zawiera wartość , a nie . Mimo takiego zachowania typ
          %QOR nie mo e być traktowany na równi z liczbami całkowitymi — przede wszystkim
          dlatego, e nie jest typem porządkowym. Wraz z pojawieniem się (w Delphi 4) typu
          +PV typ %QOR stracił praktycznie swoje znaczenie i zachowany został tylko ze wzglę-
          dów zachowania kompatybilności.

          Typ %WTTGPE[ u ywany jest głównie do reprezentowania danych finansowych (stąd
          nazwa). Mimo i zaliczono go do typów zmiennoprzecinkowych, jest on tak naprawdę
          liczbą stałoprzecinkową o ustalonej (równej ) liczbie miejsc dziesiętnych. Podobnie
          jak typ %QOR, jest on reprezentowany w postaci 64-bitowej liczby całkowitej ze zna-
          kiem, przy czym zapisywana wartość jest 10 000 razy większa od wartości faktycznie
          reprezentowanej (stąd właśnie cztery miejsca po przecinku).




36 (03-05-16)                                                   C:AndrzejPDFDelphi 7 dla ka dego29-37.doc
Rozdział 2. ♦ Kompendium języka Delphi                                                           37


           Typ 4GCN to dziedzictwo wczesnych wersji Turbo Pascala, w których był jedynym
           typem u ywanym do obliczeń zmiennoprzecinkowych (nosił wówczas nazwę 4GCN).
           Zajmuje 6 bajtów (= 48 bitów, stąd nazwa 4GCN), format jego reprezentacji binarnej
           jest całkowicie odmienny od pozostałych typów, zaś wszelkie operacje z jego udzia-
           łem odbywają się wyłącznie w sposób programowy, bez jakiegokolwiek wsparcia
           sprzętowego, co decyduje o niskiej efektywności obliczeń. Został zachowany jedynie
           ze względów kompatybilności wstecz.

           Rodzimy typ zmiennoprzecinkowy Delphi nosi nazwę 4GCN. Jeszcze w Delphi 3 był on
           równowa ny temu, co dzisiaj kryje się pod nazwą 4GCN. Począwszy od Delphi 4 stał
           się on równowa ny typowi QWDNG, zaś spadkowy typ 4GCN przechrzczony został na
           4GCN. W przypadku uzasadnionej nostalgii mo na przywrócić typowi 4GCN dawne
           znaczenie, u ywając dyrektywy kompilacji ] 4'#.%1/2#6+$+.+6; 10_.

           Oprócz konkretnych wartości liczbowych w ramach typów zmiennoprzecinkowych
           (z wyjątkiem typu Real48) przechowywać mo na wartości oznaczające brak konkret-
           nej liczby (tzw. nieliczby — ang. 0C0 = Not A Number) jak równie symbol oznacza-
           jący nieskończoność. Szczegóły dotyczące wewnętrznej reprezentacji typów zmien-
           noprzecinkowych dostępne są w systemie pomocy Delphi 7 pod hasłem Real types.

              Jak widać z tabeli 2.4, największą dokładność obliczeń zapewnia typ 'ZVGPFGF —
              jest to dokładność, z jaką przechowywane są przez procesor pośrednie wyniki wy-
              konywanych przez niego obliczeń. Niektóre programy mogą jednak sztucznie „ob-
              niżyć” tę domyślną dokładność, głównie ze względów zgodności ze starszymi sys-
              temami obliczeń zmiennoprzecinkowych. I tak na przykład niektóre procedury
              Win32 API przełączają procesor w tryb dokładności 53-bitowej, charakterystycznej
              dla typu QWDNG. Z tego względu zalecanym typem dla obliczeń zmiennoprzecinko-
              wych w aplikacjach Win32 jest typ QWDNG — i nieprzypadkowo to on właśnie jest
              rodzimym typem zmiennoprzecinkowym, kryjącym się pod synonimem 4GCN.




C:AndrzejPDFDelphi 7 dla ka dego29-37.doc                                       (03-05-16)   37

Contenu connexe

Tendances

Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyWydawnictwo Helion
 
J2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie IIJ2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie IIWydawnictwo Helion
 
Delphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychDelphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychWydawnictwo Helion
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIWydawnictwo Helion
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programistyWydawnictwo Helion
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyWydawnictwo Helion
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programistyWydawnictwo Helion
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wydawnictwo Helion
 
Adobe Premiere 6.5. Podręcznik montażysty
Adobe Premiere 6.5. Podręcznik montażystyAdobe Premiere 6.5. Podręcznik montażysty
Adobe Premiere 6.5. Podręcznik montażystyWydawnictwo Helion
 
C++Builder Borland Developer Studio 2006. Kompendium programisty
C++Builder Borland Developer Studio 2006. Kompendium programistyC++Builder Borland Developer Studio 2006. Kompendium programisty
C++Builder Borland Developer Studio 2006. Kompendium programistyWydawnictwo Helion
 
RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...
RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...
RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...Wydawnictwo Helion
 
Adobe Premiere Pro. Oficjalny podręcznik
Adobe Premiere Pro. Oficjalny podręcznikAdobe Premiere Pro. Oficjalny podręcznik
Adobe Premiere Pro. Oficjalny podręcznikWydawnictwo Helion
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyWydawnictwo Helion
 

Tendances (19)

Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programisty
 
ABC Delphi 7
ABC Delphi 7ABC Delphi 7
ABC Delphi 7
 
J2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie IIJ2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie II
 
Delphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychDelphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danych
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie II
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 
Java. Wprowadzenie
Java. WprowadzenieJava. Wprowadzenie
Java. Wprowadzenie
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programisty
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
 
ABC Delphi 6
ABC Delphi 6ABC Delphi 6
ABC Delphi 6
 
Adobe Premiere 6.5. Podręcznik montażysty
Adobe Premiere 6.5. Podręcznik montażystyAdobe Premiere 6.5. Podręcznik montażysty
Adobe Premiere 6.5. Podręcznik montażysty
 
C++Builder Borland Developer Studio 2006. Kompendium programisty
C++Builder Borland Developer Studio 2006. Kompendium programistyC++Builder Borland Developer Studio 2006. Kompendium programisty
C++Builder Borland Developer Studio 2006. Kompendium programisty
 
RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...
RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...
RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...
 
Java. Kompendium programisty
Java. Kompendium programistyJava. Kompendium programisty
Java. Kompendium programisty
 
Adobe Premiere Pro. Oficjalny podręcznik
Adobe Premiere Pro. Oficjalny podręcznikAdobe Premiere Pro. Oficjalny podręcznik
Adobe Premiere Pro. Oficjalny podręcznik
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
 
Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
 

En vedette

śRodki prawne ograniczające nadużycia władzy w jednostkach samorządu terytori...
śRodki prawne ograniczające nadużycia władzy w jednostkach samorządu terytori...śRodki prawne ograniczające nadużycia władzy w jednostkach samorządu terytori...
śRodki prawne ograniczające nadużycia władzy w jednostkach samorządu terytori...e-booksweb.pl
 
Media 25.05.2012
Media 25.05.2012Media 25.05.2012
Media 25.05.2012infokosz
 
Analiza Tresci
Analiza TresciAnaliza Tresci
Analiza Trescikiwinska
 
Nowoczesne Zarządzanie Comarch 1 HQ 2014
Nowoczesne Zarządzanie Comarch 1 HQ 2014Nowoczesne Zarządzanie Comarch 1 HQ 2014
Nowoczesne Zarządzanie Comarch 1 HQ 2014Konrad Mroczek
 
Krajowy program operacyjny efs 2014 2020
Krajowy program operacyjny efs 2014 2020Krajowy program operacyjny efs 2014 2020
Krajowy program operacyjny efs 2014 2020Fundacja "Merkury"
 
System CAM inventorcam dla Autodesk inventor
System CAM inventorcam dla Autodesk inventorSystem CAM inventorcam dla Autodesk inventor
System CAM inventorcam dla Autodesk inventorPremium Solutions Polska
 
Technik.logistyk 342[04] z2.02_u
Technik.logistyk 342[04] z2.02_uTechnik.logistyk 342[04] z2.02_u
Technik.logistyk 342[04] z2.02_uKasia Stachura
 
Advenced molecular techniques in molecular medical genetics laboratory
Advenced molecular techniques in molecular medical genetics laboratoryAdvenced molecular techniques in molecular medical genetics laboratory
Advenced molecular techniques in molecular medical genetics laboratoryPeyman Ghoraishizadeh
 
Co to jest metoda?
Co to jest metoda?Co to jest metoda?
Co to jest metoda?Sabina Cisek
 
M. Łobocki - ABC wychowania
M. Łobocki - ABC wychowaniaM. Łobocki - ABC wychowania
M. Łobocki - ABC wychowaniaknbb_mat
 
Fallout 3 Poradnik
Fallout 3 PoradnikFallout 3 Poradnik
Fallout 3 Poradnikfdhdf
 

En vedette (20)

śRodki prawne ograniczające nadużycia władzy w jednostkach samorządu terytori...
śRodki prawne ograniczające nadużycia władzy w jednostkach samorządu terytori...śRodki prawne ograniczające nadużycia władzy w jednostkach samorządu terytori...
śRodki prawne ograniczające nadużycia władzy w jednostkach samorządu terytori...
 
Media 25.05.2012
Media 25.05.2012Media 25.05.2012
Media 25.05.2012
 
Biznes Plan Tərtibatı
Biznes Plan TərtibatıBiznes Plan Tərtibatı
Biznes Plan Tərtibatı
 
Z2.01
Z2.01Z2.01
Z2.01
 
Analiza Tresci
Analiza TresciAnaliza Tresci
Analiza Tresci
 
Nowoczesne Zarządzanie Comarch 1 HQ 2014
Nowoczesne Zarządzanie Comarch 1 HQ 2014Nowoczesne Zarządzanie Comarch 1 HQ 2014
Nowoczesne Zarządzanie Comarch 1 HQ 2014
 
Krajowy program operacyjny efs 2014 2020
Krajowy program operacyjny efs 2014 2020Krajowy program operacyjny efs 2014 2020
Krajowy program operacyjny efs 2014 2020
 
Przemysl drzewny nr 4 2013
Przemysl drzewny nr 4 2013Przemysl drzewny nr 4 2013
Przemysl drzewny nr 4 2013
 
System CAM inventorcam dla Autodesk inventor
System CAM inventorcam dla Autodesk inventorSystem CAM inventorcam dla Autodesk inventor
System CAM inventorcam dla Autodesk inventor
 
Zarzadzanie innowacjami w przemysle spotkan
Zarzadzanie innowacjami w przemysle spotkanZarzadzanie innowacjami w przemysle spotkan
Zarzadzanie innowacjami w przemysle spotkan
 
System CAD/CAM SolidWorks i SolidCAM
System CAD/CAM SolidWorks i SolidCAMSystem CAD/CAM SolidWorks i SolidCAM
System CAD/CAM SolidWorks i SolidCAM
 
Technik.logistyk 342[04] z2.02_u
Technik.logistyk 342[04] z2.02_uTechnik.logistyk 342[04] z2.02_u
Technik.logistyk 342[04] z2.02_u
 
Advenced molecular techniques in molecular medical genetics laboratory
Advenced molecular techniques in molecular medical genetics laboratoryAdvenced molecular techniques in molecular medical genetics laboratory
Advenced molecular techniques in molecular medical genetics laboratory
 
Przedszkole
PrzedszkolePrzedszkole
Przedszkole
 
24 4.1 opg_tresc
24 4.1 opg_tresc24 4.1 opg_tresc
24 4.1 opg_tresc
 
Co to jest metoda?
Co to jest metoda?Co to jest metoda?
Co to jest metoda?
 
KultPM
KultPMKultPM
KultPM
 
M. Łobocki - ABC wychowania
M. Łobocki - ABC wychowaniaM. Łobocki - ABC wychowania
M. Łobocki - ABC wychowania
 
Metodologia badań
Metodologia badańMetodologia badań
Metodologia badań
 
Fallout 3 Poradnik
Fallout 3 PoradnikFallout 3 Poradnik
Fallout 3 Poradnik
 

Similaire à Delphi 7 dla każdego

Similaire à Delphi 7 dla każdego (14)

Praktyczny kurs Delphi
Praktyczny kurs DelphiPraktyczny kurs Delphi
Praktyczny kurs Delphi
 
Delphi 7 i bazy danych
Delphi 7 i bazy danychDelphi 7 i bazy danych
Delphi 7 i bazy danych
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowane
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
 
Visual C# .NET. Encyklopedia
Visual C# .NET. EncyklopediaVisual C# .NET. Encyklopedia
Visual C# .NET. Encyklopedia
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
 
Delphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetoweDelphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetowe
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
Spring. Zapiski programisty
Spring. Zapiski programistySpring. Zapiski programisty
Spring. Zapiski programisty
 
Perl. Zaawansowane programowanie
Perl. Zaawansowane programowaniePerl. Zaawansowane programowanie
Perl. Zaawansowane programowanie
 
Praktyczny kurs asemblera
Praktyczny kurs asembleraPraktyczny kurs asemblera
Praktyczny kurs asemblera
 
Perl
PerlPerl
Perl
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
 

Plus de Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

Plus de Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Delphi 7 dla każdego

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Delphi 7 dla ka¿dego KATALOG KSI¥¯EK Autorzy: Andrzej Gra¿yñski, Zbigniew Zarzycki KATALOG ONLINE ISBN: 83-7361-091-X Format: B5, stron: 830 ZAMÓW DRUKOWANY KATALOG Zawiera CD-ROM TWÓJ KOSZYK DODAJ DO KOSZYKA Dawno ju¿ minê³y czasy, gdy podstawowym sposobem tworzenia programów by³o mozolne „wklepywanie” kodu. Forma przekazywanej komputerowi i uzyskiwanej za jego pomoc¹ informacji sta³a siê nie mniej wa¿na od tre ci. W takim w³a nie CENNIK I INFORMACJE kontek cie zrodzi³y siê narzêdzia do b³yskawicznego tworzenia aplikacji (RAD), w ród których jednym z najpopularniejszych jest Delphi. Oparte na jêzyku ObjectPascal ZAMÓW INFORMACJE ma za sob¹ d³ug¹ tradycji, ukaza³a siê ju¿ 7 edycja tego narzêdzia. O NOWO CIACH To, ¿e Delphi jest wizualnym rodowiskiem programistycznym, w którym wiele dzia³añ wykonuje siê ³atwiej ni¿ w tradycyjnych rodowiskach opartych na tek cie, nie oznacza, ZAMÓW CENNIK ¿e jego u¿ytkownik mo¿e obej æ siê bez podrêcznika. Taki podrêcznik trzymasz w³a nie w rêku. Zosta³ on napisany w sposób fachowy i przystêpny. Dziêki „Delphi 7. Dla ka¿dego” poznasz Delphi i nauczysz siê pisaæ w nim programy, nawet je li nie jeste CZYTELNIA informatykiem. Ksi¹¿ka opisuje: FRAGMENTY KSI¥¯EK ONLINE • Typy danych i operatory w Delphi • Instrukcje, tworzenie w³asnych procedur i funkcji • Programowanie zorientowane obiektowo: klasy, metaklasy, interfejsy • Tworzenie bibliotek DLL w Delphi • rodowisko zintegrowane (IDE) Delphi • Tworzenie atrakcyjnego interfejsu u¿ytkownika • ledzenie wykonania programu i usuwanie z niego b³êdów • Obs³ugê baz danych w Delphi Dziêki narzêdziom takim jak Delphi nawet osoby, które wcze niej nie programowa³y, mog¹ pisaæ z³o¿one aplikacje o atrakcyjnym interfejsie. Przy okazji naucz¹ siê podstaw programowania, a zdobyt¹ w ten sposób wiedzê ³atwo przenios¹ do innych rodowisk Wydawnictwo Helion i systemów. ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Rozdział 1. Wprowadzenie ................................................................................... 9 Trochę zabawy .......................................................................................................11 Rozdział 2. Kompendium języka Delphi............................................................... 19 Moduły aplikacji w Delphi.......................................................................................19 Struktury danych w językach programowania............................................................28 Typy danych w Delphi ............................................................................................29 Typy proste ......................................................................................................30 Typy łańcuchowe..............................................................................................37 Typy strukturalne..............................................................................................42 Typy wariantowe ..............................................................................................75 Typy wskaźnikowe ...........................................................................................88 Definiowane obsady typów wariantowych...........................................................98 Deklarowanie typów ............................................................................................. 162 Reprezentacje danych w kodzie źródłowym ............................................................ 164 Literały .......................................................................................................... 165 Stałe synonimiczne.......................................................................................... 166 Stałe typowane ............................................................................................... 167 Zmienne......................................................................................................... 171 Operatory............................................................................................................. 178 Operatory arytmetyczne .................................................................................. 179 Operatory porównania ..................................................................................... 181 Operatory logiczne (boolowskie) ...................................................................... 182 Operatory bitowe ............................................................................................ 182 Operatory zbiorowe......................................................................................... 188 Operator konkatenacji łańcuchów ..................................................................... 188 Operator referencji .......................................................................................... 189 Pierwszeństwo operatorów .................................................................................... 189 Zgodność typów danych........................................................................................ 191 Identyczność typów ........................................................................................ 191 Kompatybilność typów.................................................................................... 192 Zgodność typów w sensie przypisania (przypisywalność) ................................... 193 Rzutowanie i konwersja typów............................................................................... 195 Instrukcje............................................................................................................. 199 Instrukcje proste ............................................................................................. 200 Instrukcje strukturalne ..................................................................................... 202 Procedury i funkcje............................................................................................... 215 Przekazywanie parametrów do procedur i funkcji .............................................. 219 Parametry amorficzne...................................................................................... 224
  • 3. 4 Delphi 7 dla każdego Tablice otwarte ............................................................................................... 227 Przecią anie procedur i funkcji......................................................................... 232 Parametry domyślne procedur i funkcji ............................................................. 236 Zagnie d one definicje procedur i funkcji oraz zasięg deklaracji ......................... 239 Deklaracje zapowiadające (forward) ................................................................. 240 Typy proceduralne ................................................................................................ 241 Obiekty, klasy i programowanie zorientowane obiektowo......................................... 248 Definiowanie klas ........................................................................................... 250 Tworzenie i unicestwianie zmiennych obiektowych ........................................... 260 Zgodność typów obiektowych a polimorfizm..................................................... 263 Przecią anie metod ......................................................................................... 269 Metaklasy ............................................................................................................ 272 Metaklasy a metody wirtualne .......................................................................... 277 Metaklasy a wirtualne konstruktory .................................................................. 280 Operatory klasowe .......................................................................................... 285 Uniwersalne metody metaklasowe .................................................................... 288 Interfejsy ............................................................................................................. 289 Deklarowanie interfejsów ................................................................................ 290 Implementowanie interfejsów........................................................................... 291 Deklaracje zapowiadające klas i interfejsów ............................................................ 302 Pocztówka z przeszłości — obiekty Turbo Pascala................................................... 303 Strukturalna obsługa wyjątków .............................................................................. 304 try...finally, czyli gwarancja ............................................................................. 305 try...except, czyli naprawa................................................................................ 310 Wyjątki jako klasy Delphi................................................................................ 317 Hierarchia obsługi wyjątków i wyjątki nieobsłu one .......................................... 324 Generowanie wyjątków ................................................................................... 328 Ponawianie wyjątków...................................................................................... 332 Rozdział 3. Opcje kompilacji i kompilacja warunkowa....................................... 337 Opcje związane z nowościami Delphi ..................................................................... 338 $H ($LONGSTRINGS) — długie łańcuchy....................................................... 338 $REALCOMPATIBILITY — tradycyjny typ zmiennoprzecinkowy .................... 339 $J ($WRITEABLECONST) — stałe czy zmienne? ............................................ 339 Opcje testowe....................................................................................................... 341 $R ($RANGECHECKS) — kontrola zakresu .................................................... 342 $I ($IOCHECKS) — kontrola poprawności operacji wejścia-wyjścia .................. 342 $Q ($OVERFLOWCHECKS) — kontrola nadmiaru stałoprzecinkowego ............ 342 $C ($ASSERTIONS) — honorowanie albo ignorowanie asercji .......................... 343 Tradycyjne opcje pascalowe .................................................................................. 343 $X ($EXTENDEDSYNTAX) — rozszerzona składnia....................................... 344 $V ($VARSTRINGCHECKS) — kontrola zgodności parametrów łańcuchowych... 344 $P ($OPENSTRINGS) — domyślne łańcuchy otwarte ....................................... 346 Opcje interpretacyjne ............................................................................................ 346 $B ($BOOLEVAL) — obliczanie wyra eń boolowskich .................................... 346 $T ($TYPEDADDRESS) — kontrola referencji ................................................ 348 Opcje generacyjne ................................................................................................ 349 $O ($OPTIMIZATION) — optymalizowanie generowanego kodu ...................... 349 $W ($STACKFRAMES) — generowanie ramek stosu ....................................... 349 $A ($ALIGN) — wyrównywanie pól rekordów i klas......................................... 350 $Z ($MINENUMSIZE) — minimalny rozmiar zmiennej typu wyliczeniowego .... 350 $U ($SAFEDIVIDE)....................................................................................... 351 Opcje sterujące informacją dodatkową.................................................................... 351 $D ($DEBUGINFO) — generowanie informacji dla debuggera .......................... 352 $L ($LOCALSYMBOLS) — generowanie informacji o symbolach lokalnych ..... 352
  • 4. Spis treści 5 $Y ($REFERENCEINFO i $DEFINITIONINFO) — generowanie informacji o symbolach i odwołaniach do nich......................... 352 $M ($TYPEINFO) — generowanie informacji RTTI ......................................... 353 Opcje związane z komunikatami kompilatora.......................................................... 353 $HINTS......................................................................................................... 353 $WARNINGS ................................................................................................ 353 $WARN......................................................................................................... 354 Dyrektywa $MESSAGE .................................................................................. 355 Opcje parametryczne ............................................................................................ 355 $M ($MINSTACKSIZE, $MAXSTACKSIZE) — ustalenie wielkości stosu dla programu ....................................................... 355 $IMAGEBASE — bazowy obszar ładowania biblioteki DLL.............................. 356 $APPTYPE — typ aplikacji ............................................................................. 357 $D ($DESCRIPTION) — opis aplikacji ............................................................ 357 $E ($EXTENSION) — rozszerzenie generowanego pliku wykonywalnego .......... 357 Opcje integracyjne ................................................................................................ 357 $I ($INCLUDE) — dołączanie fragmentów kodu źródłowego............................. 357 $L ($LINK) — dołączanie skompilowanych modułów ....................................... 363 $R ($RESOURCE) — dołączanie plików zasobowych ....................................... 363 Kompilacja warunkowa......................................................................................... 363 Symbole kompilacji warunkowej...................................................................... 364 Wyra enia kompilacji warunkowej ................................................................... 374 Opcje kompilacji i kompilacja warunkowa aktualność modułów wynikowych............ 377 Rozdział 4. Biblioteki DLL ................................................................................ 379 Biblioteki DLL a środowisko zintegrowane Delphi .................................................. 380 Tworzenie bibliotek DLL w Delphi ........................................................................ 382 Klauzule resident, export i local........................................................................ 389 Statyczne łączenie bibliotek DLL ........................................................................... 393 Moduły importowe bibliotek DLL .................................................................... 397 Dynamiczne łączenie bibliotek DLL....................................................................... 403 Procedura inicjująco-kończąca biblioteki DLL ........................................................ 406 Bazowy adres ładowania biblioteki DLL................................................................. 409 Klasy i obiekty w bibliotekach DLL ....................................................................... 411 Importowanie obiektu na podstawie deklaracji klasy .......................................... 411 Implementowanie interfejsów przez obiekt znajdujący się w bibliotece DLL........ 419 Rozdział 5. Środowisko zintegrowane Delphi 7 ................................................. 429 Projekty w środowisku IDE ................................................................................... 430 Domyślne opcje projektu ................................................................................. 436 Opcje menu głównego i paski narzędzi ................................................................... 448 Formularze i paleta komponentów.......................................................................... 449 Podstawowe właściwości i zdarzenia formularzy ..................................................... 450 Modalne i niemodalne wyświetlanie formularza................................................. 461 Wa niejsze metody formularzy ........................................................................ 470 Wielokrotne wykorzystywanie formularzy za pośrednictwem repozytorium ......... 473 Siatka formularza ............................................................................................ 477 Zaznaczanie komponentów .............................................................................. 478 Przesuwanie komponentów.............................................................................. 482 Zmiana rozmiarów komponentów..................................................................... 483 Skalowanie poło enia i rozmiarów komponentów za pomocą okna dialogowego skalowania ....................................................... 484 Wyrównywanie i dopasowywanie poło enia komponentów ................................ 485 Właściwości komponentów odpowiedzialne za ich rozmiary i uło enie................ 488
  • 5. 6 Delphi 7 dla każdego Ochrona poło enia i rozmiarów komponentów .................................................. 491 Wycinanie, kopiowanie i wklejanie komponentów ............................................. 491 Warstwowy układ komponentów...................................................................... 493 Cykl Tab........................................................................................................ 494 Inspektor obiektów ............................................................................................... 495 System menu aplikacji i projektant menu ................................................................ 498 Zachowywanie układu pulpitu................................................................................ 518 Edytor kodu Delphi............................................................................................... 520 Otwieranie i zapisywanie plików ...................................................................... 521 Praca z blokami tekstu..................................................................................... 522 Cofanie i ponawianie poleceń (Undo) ............................................................... 527 Wyszukiwanie i zamiana fragmentów tekstu...................................................... 527 Szablony kodu ................................................................................................ 531 Uzupełnianie i parametryzowanie kodu............................................................. 533 Podpowiedzi kontekstowe związane z elementami kodu ..................................... 535 Uzupełnianie klas............................................................................................ 536 Nawigowanie po implementacji klasy ............................................................... 538 „Parowanie” nawiasów.................................................................................... 538 Menu kontekstowe edytora kodu ...................................................................... 538 Diagramy powiązań......................................................................................... 538 Konfigurowanie edytora kodu .......................................................................... 541 Eksplorator kodu .................................................................................................. 549 Ustawienia związane z eksploratorem kodu ....................................................... 550 Przeglądarka projektu............................................................................................ 551 Rozdział 6. Śledzenie programu........................................................................ 553 Przygotowanie aplikacji do śledzenia zintegrowanego.............................................. 554 Elementy śledzenia zintegrowanego ....................................................................... 554 Praca krokowa................................................................................................ 554 Punkty przerwań............................................................................................. 557 Podgląd wyra eń i modyfikowanie zmiennych programu.................................... 563 Inspektor śledzenia................................................................................................ 569 Śledzenie kodu biblioteki DLL............................................................................... 571 Dziennik zdarzeń .................................................................................................. 572 Ustawienia związane ze zintegrowanym debuggerem............................................... 573 Strona General................................................................................................ 573 Strona Event Log ............................................................................................ 574 Strona Language Exceptions ............................................................................ 574 Strona OS Exceptions...................................................................................... 575 Turbo Debugger — TD32.EXE ............................................................................. 576 Rozdział 7. Komponenty Delphi........................................................................ 579 Zdarzenia komponentów ....................................................................................... 581 Hierarchia komponentów....................................................................................... 587 Komponenty wizualne ..................................................................................... 589 Właściwości komponentów oraz ich obsługa za pomocą inspektora obiektów ............ 594 Właściwości proste ......................................................................................... 594 Właściwości wyliczeniowe .............................................................................. 594 Właściwości zbiorowe ..................................................................................... 594 Właściwości obiektowe ................................................................................... 595 Właściwości tablicowe .................................................................................... 596 Strumieniowanie komponentów i domyślna wartość właściwości ........................ 598 Współdzielenie metod dostępowych — właściwości indeksowane....................... 603
  • 6. Spis treści 7 Przegląd komponentów ......................................................................................... 605 Etykiety — TLabel i TStaticText...................................................................... 606 Komponenty edycyjne — TEdit, TMaskEdit, TMemo i TRichEdit ...................... 607 Przyciski ........................................................................................................ 616 Komponenty selekcyjne — TListBox, TListCheckBox i TComboBox ................. 627 Komponent zegarowy — TTimer ..................................................................... 631 Komponenty standardowych okien dialogowych................................................ 632 Tworzenie nowego komponentu............................................................................. 644 Rozdział 8. Technologia COM .......................................................................... 655 Rozdział 9. Obsługa baz danych w Delphi ......................................................... 667 Wstęp .................................................................................................................. 667 Lokalne bazy danych....................................................................................... 669 Bazy danych typu klient-serwer........................................................................ 669 Wielowarstwowa architektura baz danych ......................................................... 670 Przegląd technologii.............................................................................................. 671 ClientDataSet ................................................................................................. 672 Borland Database Engine (BDE) ...................................................................... 672 InterBase Express ........................................................................................... 673 dbExpress....................................................................................................... 674 DbGo (ADOExpress) ...................................................................................... 674 DataSnap ....................................................................................................... 675 Wybór technologii dostępu do danych .................................................................... 675 Podejście prototypowe .................................................................................... 675 Planowanie „cyklu yciowego” ........................................................................ 676 Połączenie z bazami danych w środowisku Delphi ............................................. 676 Tworzenie prostego formularza bazy danych ..................................................... 678 Dodawanie kolejnych kontrolek bazodanowych................................................. 682 Relacja ogół-szczegóły .................................................................................... 685 Obsługa pól rekordów ........................................................................................... 687 Właściwości pól i komponent TField ................................................................ 687 Edytor właściwości pól.................................................................................... 689 Modyfikowanie właściwości pola ..................................................................... 691 Formatowanie pól przy u yciu masek edycyjnych.............................................. 692 Dostęp do wartości kolumny ............................................................................ 694 Pola wyliczane................................................................................................ 696 Pola przeglądowe ............................................................................................ 698 Weryfikacja danych wejściowych..................................................................... 700 Zbiory danych ...................................................................................................... 702 Kontrolowanie wskaźnika bie ącego rekordu .................................................... 704 Edycja danych ................................................................................................ 706 Ograniczanie zbiorów danych .......................................................................... 707 Wyszukiwanie rekordów ................................................................................. 709 Oznaczanie rekordów za pomocą zakładek........................................................ 711 Definiowanie wartości domyślnych pól ............................................................. 712 Podstawowe właściwości, metody i zdarzenia zbiorów danych............................ 713 Współpraca z serwerami........................................................................................ 713 Autoryzacja klienta ......................................................................................... 715 Transakcje ..................................................................................................... 719 Komponent ClientDataSet ..................................................................................... 721 Borland Database Engine....................................................................................... 729 Administrator BDE ......................................................................................... 729 Instalacja BDE................................................................................................ 736
  • 7. 8 Delphi 7 dla każdego Kreator formularzy baz danych ........................................................................ 736 Komponenty BDE .......................................................................................... 741 Funkcje BDE API........................................................................................... 751 ActiveX Database Objects ..................................................................................... 753 ADO w Delphi................................................................................................ 754 Standardowe sterowniki ADO .......................................................................... 757 Argumenty połączenia ..................................................................................... 757 TADOConnetion............................................................................................. 759 TADODataSet ................................................................................................ 761 Excel jako baza danych ................................................................................... 762 Dostęp do danych za pomocą technologii dbExpress ................................................ 766 Komponenty interfejsu dbExpress .................................................................... 767 Jak to działa w praktyce? ................................................................................. 768 Uzgadnianie błędów serwera............................................................................ 771 Rozpowszechnianie aplikacji z interfejsem dbExpress ........................................ 772 InterBase Express ................................................................................................. 774 Przegląd komponentów InterBase Express ........................................................ 775 Technologia DataSnap .......................................................................................... 780 Architektura wielowarstwowa .......................................................................... 781 MIDAS i DataSnap ......................................................................................... 783 Podsumowanie .............................................................................. 791 Skorowidz...................................................................................... 793
  • 8. Typy danych w Delphi Ile wagonów potrzeba do przewiezienia 14 obrabiarek, je eli w jednym wagonie mieszczą się cztery obrabiarki? Wynikająca z prostego dzielenia odpowiedź — 3,5 — jest w oczywisty sposób bezsensowna, nie mo na bowiem podzielić wagonu na pół (na upartego mo na, lecz wtedy nie będzie nadawał się do przewiezienia czegokolwiek). Jaka jest ró nica między liczbami 6,30 a 2,45 — jaki jest odstęp czasowy między godziną 6:30 a 2:45? Argumenty odejmowania niby te same, lecz wyniki ró ne (3,85 i 3:45). Te banalne przykłady pokazują, i w wielu obliczeniach musimy ograniczyć się tylko do pewnej kategorii danych (tu liczb całkowitych), a sposób wykonywania podstawo- wych działań często zale y od charakteru danych (inaczej odejmuje się ułamki dzie- siętne, inaczej wskazania zegara). Gdy przyjrzeć się operacjom wykonywanym przez współczesne procesory, mo na zauwa yć podobną tendencję: zupełnie ró ne reguły rządzą podstawowymi operacjami matematycznymi wykonywanymi na liczbach całkowitych, liczbach zmiennoprzecin- kowych i liczbach dziesiętnych, mimo kodowania ich w tej samej postaci — wzorców bitowych. Ta cecha koncepcyjna (i konstrukcyjna) komputerów zawa yła w głównej mierze na konstrukcji samych języków programowania: okazało się mianowicie, e tworzenie języków programowania będzie łatwiejsze (same zaś języki — bardziej efektywne), je eli równie na ich gruncie odzwierciedlone zostanie owo zró nicowanie danych. I tak zostało do dziś, choć gwoli sprawiedliwości wspomnieć nale y o dwóch istotnych faktach. Otó po pierwsze, ju w latach sześćdziesiątych twórcy języka Algol 60 zamierzali stworzyć język umo liwiający posługiwanie się liczbami bez koniecz- ności ich ró nicowania (choć z mo liwością ró nicowania na ądanie), lecz w sytu- acji, gdy pamięć typowego komputera miała pojemność co najwy ej kilku tysięcy słów, tak ambitne zamierzenia musiały pozostać w sferze marzeń. Po drugie nato- miast — rozwijające się techniki wymiany danych i oprogramowania pomiędzy kom- puterami doprowadziły do sytuacji, w której w pewnych zastosowaniach opisanego ró nicowania utrzymać się nie da, wymianie podlega bowiem informacja o wysoce zró nicowanym charakterze. Na potrzeby obsługi tego typu informacji wprowadzono do języków programowania tzw. zmienne wariantowe, którymi zajmiemy się w dal- szym ciągu rozdziału. Zbiór wartości o określonym charakterze i zdefiniowanych działaniach nazywamy w języku programowania typem danych. Język Delphi ma wiele typów predefiniowa- nych, z których programista mo e korzystać bez ich deklarowania. U ytkownik ma jednak nieograniczoną praktycznie mo liwość definiowania własnych typów, stosow- nie do charakteru rzeczywistych danych, odzwierciedlanych (w zało eniu mo liwie jak najwierniej) w tworzonym programie. Nie jest niczym niezwykłym fakt, i reper- tuar tych typów jest nieporównywalnie bogatszy w porównaniu do „gołego” kompu- tera — na tym w końcu polega rola języków wysokiego poziomu. Hierarchiczne zestawienie typów dostępnych w Delphi przedstawiamy na rysunku 2.1. Ograniczony zakres niniejszej ksią ki nie pozwala na ich wyczerpujące omówie- nie, skoncentrujemy się więc na ich najwa niejszych cechach.
  • 9. 30 Delphi 7 dla każdego Rysunek 2.1. Zestawienie typów Delphi Typy proste Wielkość typu prostego (zwanego równie typem skalarnym) zawiera pojedynczą wartość. Wielkością skalarną jest więc liczba całkowita, liczba rzeczywista, numer miesiąca czy nawet odpowiedź tak-nie na kategorycznie sformułowane pytanie; nie nale ą do wielkości skalarnych liczby zespolone (dwie wartości), wektory, macierze, ciągi itp. Pascal nie zalicza równie do typów skalarnych napisów, poniewa ka dy z nich rozpatrywany mo e być jako ciąg wielu znaków. Typ skalarny mo e mieć własność przeliczalności — określenie to oznacza, e wszyst- kie jego wartości mo na ustawić w ciąg, a dla ka dej wartości istnieje ściśle określo- ny następnik i poprzednik (jednak z zastrze eniem skończoności — patrz ni ej). W naturze własność tę mają np. liczby całkowite. Nie są przeliczalne liczby rzeczywi- ste — przeprowadzenie dowodu tego faktu (tzw. metodą przekątniową Cantora) jest przedmiotem elementarnego kursu arytmetyki i wykracza poza ramy niniejszej ksią - ki. Typ skalarny posiadający własność przeliczalności nazywamy typem porządko- wym (ordinal type). Języki programowania ze zrozumiałych względów stanowią jedynie przybli ony opis świata rzeczywistego. Jednym z aspektów owego przybli enia jest skończoność — i tak, na przykład, ka dy typ całkowitoliczbowy posiada wartość najmniejszą i naj- większą, a liczby zmiennoprzecinkowe mogą być reprezentowane jedynie ze skoń- czoną dokładnością. Jako e wartości typów zmiennoprzecinkowych reprezentowane są przy wykorzystaniu skończonej liczby bitów, liczba mo liwych do zapisania war- tości jest skończona i mo na by pokusić się o sztuczne wprowadzanie przeliczalności tych typów; posunięcie takie byłoby jednak ściśle związane z konkretną architekturą komputera i raczej mało przydatne. Z tego względu typy zmiennoprzecinkowe nie są w Pascalu zaliczane do typów porządkowych. 30 (03-05-16) C:AndrzejPDFDelphi 7 dla ka dego29-37.doc
  • 10. Rozdział 2. ♦ Kompendium języka Delphi 31 Typy porządkowe Ka dy typ porządkowy reprezentuje w Pascalu skończony, jednoznacznie uporząd- kowany 1 zbiór wartości. Dla ka dego typu porządkowego mo na określić wartość naj- mniejszą i największą, zaś dla ka dej jego wartości mo na określić wartość następną i poprzednią (z oczywistym ograniczeniem w odniesieniu do wartości najmniejszej i największej). W Delphi rozró nia się pięć rodzajów typów porządkowych: całkowitoliczbowe — reprezentujące określone przedziały liczb całkowitych, znakowe — reprezentujące zestawy znaków z określonych alfabetów, logiczne (boolowskie) — reprezentujące wartości prawda i fałsz w określonych reprezentacjach, wyliczeniowe — reprezentujące podane explicite zbiory wartości definiowane przez u ytkownika, okrojone — stanowiące określone przedziały innych typów porządkowych. Dla ka dego typu porządkowego określone są następujące funkcje: .QY — zwraca najmniejszą wartość reprezentowaną przez dany typ, *KIJ — zwraca największą wartość reprezentowaną przez dany typ. Dla ka dej wartości typu porządkowego dodatkowo określone są następujące funkcje: 1TF — zwraca numer kolejny wartości w ramach wartości reprezentowanych przez dany typ 2; najmniejsza reprezentowana wartość ma numer 0, 2TGF — zwraca poprzednią wartość w ramach typu (nie dotyczy najmniejszej wielkości reprezentowanej przez dany typ), 5WEE — zwraca następną wartość w ramach typu (nie dotyczy największej wielkości reprezentowanej przez dany typ). Dla wygody operowania danymi typów porządkowych zdefiniowano równie w Pas- calu dwie następujące procedury: +PE — zwiększa (inkrementuje) wartość argumentu (+PE : równowa ne jest : 5WEE :), GE — zmniejsza (dekrementuje) wartość argumentu (GE : równowa ne jest : 2TGF :). 1 Słowo jednoznacznie jest tu istotne; w przeciwieństwie bowiem do skończonego zbioru, np. ułamków zwykłych, który to zbiór uporządkować mo na według ró nych kryteriów, ka dy typ porządkowy posiada jedno i tylko jedno uporządkowanie. 2 Funkcja 1TF nie ma zastosowania do typu +PV z prostego powodu: rodzimą arytmetyką Delphi jest arytmetyka 32-bitowa i wartość zwracana przez funkcję 1TF musi zmieścić się na 32 bitach. Typ +PV — jako reprezentowany na 64 bitach — jest więc pewnym wyjątkiem wśród typów porządkowych. C:AndrzejPDFDelphi 7 dla ka dego29-37.doc (03-05-16) 31
  • 11. 32 Delphi 7 dla każdego Typy całkowitoliczbowe Typ całkowitoliczbowy reprezentuje (zgodnie z nazwą) przedział liczb całkowitych. Ze- staw typów całkowitoliczbowych zdefiniowanych w Delphi przedstawiamy w tabeli 2.1. Tabela 2.1. Typy całkowitoliczbowe Delphi Typ Zakres Reprezentacja maszynowa +PVGIGT słowo (32 bity) ze znakiem %CTFKPCN słowo (32 bity) bez znaku 5JQTVKPV bajt (8 bitów) ze znakiem $[VG bajt (8 bitów) bez znaku 5OCNNKPV półsłowo (16 bitów) ze znakiem 9QTF półsłowo (16 bitów) bez znaku .QPIKPV słowo (32 bity) ze znakiem .QPIYQTF słowo (32 bity) bez znaku +PV dwusłowo (64 bity) ze znakiem Zwróć uwagę, e typy 32-bitowe (zarówno ze znakiem, jak i bez) posiadają podwójną reprezentację. Wynika to z przyjętej w Delphi filozofii, zgodnie z którą typy +PVGIGT i %CTFKPCN zawsze cechują się najbardziej optymalną implementacją dla danej wersji Delphi i z tej racji określane są mianem typów rodzimych (generic); ich reprezentacja zale na jest od konkretnej wersji Delphi. Pozostałe typy całkowitoliczbowe, określane mianem typów fundamentalnych, mają reprezentację uniwersalną3, która w przy- szłych wersjach Delphi pozostanie niezmieniona. Nale y zachować pewną ostro ność w operowaniu danymi typu +PV. Przekracza on granice domyślnej dla Delphi, 32-bitowej arytmetyki, co ma swe konsekwencje, mię- dzy innymi, w stosunku do niektórych funkcji i procedur, obcinających argumenty do 32 bitów. Ograniczenie to nie dotyczy jednak funkcji (procedur) standardowych (po- dajemy za dokumentacją Delphi 7) *KIJ, .QY, 5WEE, 2TGF, +PE, GE, +PV6Q5VT i +PV6Q*GZ. Ponadto w sytuacji, gdy wyniki pośrednie obliczeń na liczbach całkowitych przekra- czają granice 32 bitów, końcowe wyniki mogą być niepoprawne. W poni szym przy- kładzie: K L .QPIKPV M +PV K L M K L 3 Pewnym wyłomem w tej uniwersalności jest typ %CTFKPCN, który w Delphi 3 ograniczony był do nieujemnej połówki typu .QPIKPV Począwszy od Delphi 4 jest on pełnoprawną 32-bitową liczbą bez znaku. 32 (03-05-16) C:AndrzejPDFDelphi 7 dla ka dego29-37.doc
  • 12. Rozdział 2. ♦ Kompendium języka Delphi 33 wartością zmiennej M po wykonaniu obliczeń jest nie , jak mo na by ocze- kiwać, lecz — wszystko wskutek obcięcia do 32 bitów. By uniknąć tej niespodzianki, nale ałoby wymusić (na kompilatorze) u ycie arytmetyki 64-bitowej, na przykład przez rzutowanie jednego z argumentów dodawania na typ +PV: M +PV K L Mo esz się o tym przekonać, uruchamiając projekt #TKVJ znajdujący się na dołą- czonym do ksią ki CD-ROM-ie. Typy logiczne (boolowskie) Wielkość typu boolowskiego reprezentuje jedną z wartości prawda albo fałsz, ozna- czonych stałymi symbolicznymi (odpowiednio) 647' i (#.5'. W Delphi istnieją cztery typy boolowskie (patrz tabela 2.2): Tabela 2.2. Typy boolowskie boolowskie Delphi Typ Wielkość Reprezentacja Reprezentacja wartości FALSE wartości TRUE $QQNGCP bajt (8 bitów) $[VG$QQN bajt (8 bitów) dowolna wartość niezerowa 9QTF$QQN półsłowo (16 bitów) dowolna wartość niezerowa .QPI$QQN słowo (32 bity) dowolna wartość niezerowa Typ $QQNGCP jest rodzimym typem pascalowym i jako taki zalecany jest do wykorzy- stywania w tworzonych aplikacjach. Pozostałe typy boolowskie istnieją przez zgod- ność z innymi językami (m.in. Visual Basiciem) i bibliotekami oprogramowania. Zwróć uwagę, i typ $QQNGCP cechuje się pewną niedookreślonością: reprezentacją (#.5' jest , reprezentacją 647' jest . A co z pozostałymi wartościami, od do ? Je eli : jest zmienną typu $QQNGCP, warunek: KH : jest równowa ny warunkowi: KH 1TF : czyli wspomniany przedział zaliczany jest do reprezentacji wartości 647'. Jednak e ju porównanie: KH : 647' interpretowane jest dosłownie, czyli równowa ne jest porównaniu: KH 1TF : a więc wspomniany przedział zaliczany jest na poczet reprezentacji wartości (#.5'. C:AndrzejPDFDelphi 7 dla ka dego29-37.doc (03-05-16) 33
  • 13. 34 Delphi 7 dla każdego Typy $[VG$QQN, 9QTF$QQN i .QPI$QQN wolne są od tej niekonsekwencji — w odniesie- niu do nich porównania: KH : 647' oraz: KH : są równowa ne. Je eli chodzi o skrajne wartości typów boolowskich, sprawa przedstawia się dosyć ciekawie (tabela 2.3): Tabela 2.3. Zakres typów boolowskich Typ Ord(Low(typ)) Ord(High(typ)) $QQNGCP $[VG$QQN 9QTF$QQN .QPI$QQN Zatem dla typu .QPI$QQN (i tylko dla niego) mo liwa jest sytuacja, w której spełnione są jednocześnie trzy warunki: :(#.5', ;647' i 1TF : 1TF ; — wówczas (w pew- nym sensie) (#.5' 647'. O prawdziwości powy szych wywodów mo esz się o tym przekonać, uruchamiając projekt $QQN5RGE znajdujący się na dołączonym do ksią ki CD-ROM-ie. Typy wyliczeniowe Typ wyliczeniowy (enumerated type) stanowi reprezentację zdefiniowanego ad hoc zbioru elementów posiadających wspólną pewną cechę; poszczególne elementy identy- fikowane są przez unikalne nazwy nie mające poza tym adnego innego znaczenia merytorycznego. Oto przykłady typów wyliczeniowych: UVCP QMPC 65VCP1MPC 0QTOCNPG OKPKOCNKQYCPG OCMU[OCNKQYCPG UVTQP[ YKCVC 6-KGTWPGM YUEJQF RQNWFPKG CEJQF RQNPQE MQNQT[ MCTEKCPG 6-QNQT-CTV[ VTGHN MCTQ MKGT RKM Ka da z wartości typu wyliczeniowego jest stałą tego typu — zgodnie z powy szymi definicjami nazwa MCTQ jest stałą typu 6-QNQT-CTV[. Funkcja 1TF zastosowana do elementu typu wyliczeniowego zwraca numer kolejny tego elementu w definicji typu począwszy od zera — tak więc 1TF VTGHN , 1TF CEJQF itd. Funkcje .QY i *KIJ zwracają (odpowiednio) pierwszy i ostatni element w definicji typu. A zatem, na przykład, .QY 65VCP1MPC 0QTOCNPG, a *KIJ 6-QNQT-CTV[ RKM. 34 (03-05-16) C:AndrzejPDFDelphi 7 dla ka dego29-37.doc
  • 14. Rozdział 2. ♦ Kompendium języka Delphi 35 Począwszy od Delphi 6, mo na w sposób jawny przypisywać poszczególnym ele- mentom (wszystkim lub tylko niektórym) wartość, którą ma dla nich zwrócić funkcja 1TF. Oto przykład: 61FRQYKGF 0KG 0KG9KGO6CM Funkcje .QY i *KIJ zwracają wówczas te elementy, którym przypisano (odpowiednio) najmniejszą i największą wartość. Elementy, którym nie przypisano wartości w sposób jawny, otrzymują kolejne warto- ści większe od poprzedników. Je eli nie przypisano wartości pierwszemu elementowi, otrzymuje on wartość . Zgodnie z poni szą definicją: 62CTVKCN'PWO PQ 0KUMQ 2QKQO -TQM 9[GL )QTC 5E[V zachodzą następujące równości: 1TF PQ 1TF 0KUMQ 1TF 2QKQO 1TF -TQM 1TF 9[GL 1TF )QTC 1TF 5E[V Typy znakowe Wielkość typu znakowego reprezentuje pojedynczy znak alfabetyczny. Aktualnie w Delphi zdefiniowane są dwa fundamentalne typy znakowe: #PUK%JCT — reprezentuje zbiór znaków określony normą ANSI, poszerzony jednak o specyficzne znaki narodowe dla poszczególnych wersji. Wartość tego typu zajmuje jeden bajt, a więc liczba reprezentowanych znaków nie przekracza 256. 9KFG%JCT — reprezentuje znaki wielobajtowe. Aktualnie zmienna typu 9KFG%JCT zajmuje dwa bajty, sam zaś typ odpowiada zbiorowi znaków UNICODE. Pierwsze 256 wartości typu 9KFG%JCT są identyczne z typem #PUK%JCT. Rodzimym typem znakowym Pascala jest typ %JCT, w dotychczasowych wersjach Delphi równowa ny typowi #PUK%JCT (sytuacja ta mo e się zmienić w przyszłych wersjach). Typy okrojone Typ okrojony (subrange type) stanowi ciągły podzbiór innego typu porządkowego zwanego typem bazowym. Oto przykłady definicji typów okrojonych: 6.KVGT[ # V[R DCQY[ %JCT 6%[HT[ V[R DCQY[ +PVGIGT 6$TCM6CM 0KG 0KG9KGO V[R DCQY[ 61FRQYKGF Typy okrojone dziedziczą z typu bazowego wartości funkcji 1TF dla swych elementów, co skądinąd jest całkiem zrozumiałe — 1TF # równe jest niezale nie od tego, czy znak # postrzegamy jako wartość typu %JCT czy te typu 6.KVGT[. C:AndrzejPDFDelphi 7 dla ka dego29-37.doc (03-05-16) 35
  • 15. 36 Delphi 7 dla każdego Typy zmiennoprzecinkowe Typy zmiennoprzecinkowe (floating point types) reprezentują podzbiory liczb rze- czywistych ze zró nicowaną dokładnością. Delphi definiuje 6 fundamentalnych typów zmiennoprzecinkowych zgodnych z normą ANSI/IEEE 754. Ich charakterystyka przed- stawiona jest w tabeli 2.4. Tabela 2.4. Fundamentalne typy zmiennoprzecinkowe Delphi Typ Zakres Liczba Dokładność Rozmiar dziesiętnych (liczba cyfr bitów znaczących mantysy) 5KPING × × (moduł) 4 bajty QWDNG × × (moduł) 8 bajtów 'ZVGPFGF × × (moduł) 10 bajtów %QOR 8 bajtów %WTTGPE[ 8 bajtów 4GCN × × 6 bajtów %QOR jest w tym zestawieniu o tyle nietypowy, i został on zaliczony do zmiennoprze- cinkowych jedynie ze względów historycznych — w Turbo Pascalu wszystko, co miało związek z koprocesorem, zaliczane było do arytmetyki zmiennoprzecinkowej. Pod względem fizycznym wartość typu %QOR jest ośmiobajtową liczbą całkowitą ze znakiem, o czym mo na się przekonać, wykonując poni szą sekwencję: 8CT ' 'ZVGPFGF % %QOR ' % ' ' % Po zakończeniu zmienna ' zawiera wartość , a nie . Mimo takiego zachowania typ %QOR nie mo e być traktowany na równi z liczbami całkowitymi — przede wszystkim dlatego, e nie jest typem porządkowym. Wraz z pojawieniem się (w Delphi 4) typu +PV typ %QOR stracił praktycznie swoje znaczenie i zachowany został tylko ze wzglę- dów zachowania kompatybilności. Typ %WTTGPE[ u ywany jest głównie do reprezentowania danych finansowych (stąd nazwa). Mimo i zaliczono go do typów zmiennoprzecinkowych, jest on tak naprawdę liczbą stałoprzecinkową o ustalonej (równej ) liczbie miejsc dziesiętnych. Podobnie jak typ %QOR, jest on reprezentowany w postaci 64-bitowej liczby całkowitej ze zna- kiem, przy czym zapisywana wartość jest 10 000 razy większa od wartości faktycznie reprezentowanej (stąd właśnie cztery miejsca po przecinku). 36 (03-05-16) C:AndrzejPDFDelphi 7 dla ka dego29-37.doc
  • 16. Rozdział 2. ♦ Kompendium języka Delphi 37 Typ 4GCN to dziedzictwo wczesnych wersji Turbo Pascala, w których był jedynym typem u ywanym do obliczeń zmiennoprzecinkowych (nosił wówczas nazwę 4GCN). Zajmuje 6 bajtów (= 48 bitów, stąd nazwa 4GCN), format jego reprezentacji binarnej jest całkowicie odmienny od pozostałych typów, zaś wszelkie operacje z jego udzia- łem odbywają się wyłącznie w sposób programowy, bez jakiegokolwiek wsparcia sprzętowego, co decyduje o niskiej efektywności obliczeń. Został zachowany jedynie ze względów kompatybilności wstecz. Rodzimy typ zmiennoprzecinkowy Delphi nosi nazwę 4GCN. Jeszcze w Delphi 3 był on równowa ny temu, co dzisiaj kryje się pod nazwą 4GCN. Począwszy od Delphi 4 stał się on równowa ny typowi QWDNG, zaś spadkowy typ 4GCN przechrzczony został na 4GCN. W przypadku uzasadnionej nostalgii mo na przywrócić typowi 4GCN dawne znaczenie, u ywając dyrektywy kompilacji ] 4'#.%1/2#6+$+.+6; 10_. Oprócz konkretnych wartości liczbowych w ramach typów zmiennoprzecinkowych (z wyjątkiem typu Real48) przechowywać mo na wartości oznaczające brak konkret- nej liczby (tzw. nieliczby — ang. 0C0 = Not A Number) jak równie symbol oznacza- jący nieskończoność. Szczegóły dotyczące wewnętrznej reprezentacji typów zmien- noprzecinkowych dostępne są w systemie pomocy Delphi 7 pod hasłem Real types. Jak widać z tabeli 2.4, największą dokładność obliczeń zapewnia typ 'ZVGPFGF — jest to dokładność, z jaką przechowywane są przez procesor pośrednie wyniki wy- konywanych przez niego obliczeń. Niektóre programy mogą jednak sztucznie „ob- niżyć” tę domyślną dokładność, głównie ze względów zgodności ze starszymi sys- temami obliczeń zmiennoprzecinkowych. I tak na przykład niektóre procedury Win32 API przełączają procesor w tryb dokładności 53-bitowej, charakterystycznej dla typu QWDNG. Z tego względu zalecanym typem dla obliczeń zmiennoprzecinko- wych w aplikacjach Win32 jest typ QWDNG — i nieprzypadkowo to on właśnie jest rodzimym typem zmiennoprzecinkowym, kryjącym się pod synonimem 4GCN. C:AndrzejPDFDelphi 7 dla ka dego29-37.doc (03-05-16) 37