Spis treści Tematyka książki...i...i...25 Część I...7...7...27 Rozdział 1. Wstęp do programowania...i...i...29 Historia informatyki...f...f. 29 Czym jest programowanie?...f... 30 Języki programowania...f... 31 Asembler...f...f... 33 Fortran...f...f...3 C...f...f....34 C++...f...f... 34 Perl...f...f....34 PHP...f...f... 35 Turbo Pascal...f...f... 35 Java...f...f...35 C#...f...f...36 Kilka słów o kompilatorach...f... 36 Działanie kompilatorów...f... 37 Który kompilator wybrać?...f... 38 Dzień programisty...f...f... 39 Delphi...f...f... 39 Object Pascal...f...f... 40 Delphi czy warto?...f... 40 Co będzie potrzebne w trakcie nauki?...f... 41 Instalacja Delphi...f...f...41 Wersje Delphi...f...f... 42 Cennik...f...f... 42 Wymagania Delphi...f... 43 Instalacja...f...f... 43 Jak się uczyć?...f...f....44
6 Delphi 2005. Kompendium programisty Podstawowe okna Delphi...f... 45 Welcome Page...f...f... 46 Okno główne...f...f... 47 Projektant formularzy...f... 48 Paleta narzędzi...f...f... 48 Inspektor obiektów...f... 49 Menedżer projektu...f... 51 Edytor kodu...f...f... 52 Ukrywanie okna...f...f. 54 Pierwszy projekt...f...f... 54 Tworzenie projektu...f... 54 Zapisywanie projektu...f... 55 Uruchamianie programu...f... 55 Zamykanie programu...f... 56 Otwieranie projektu...f... 56 Kompilacja projektu...f...f. 57 Pliki projektu...f...f... 57 Przydatne odnośniki...f...f. 58 Test...f...f... 59... 60 Podsumowanie...f...f... 62 Rozdział 2. Rozdział 3. Wprowadzenie do.net...i...63 Interfejs programistyczny...f... 64 API systemu Windows...f... 64 Wizja.NET...f...f....65 Składniki platformy.net...f... 66 Konkluzja...f...f... 69 Delphi a.net...f...f... 69 Rodzaje aplikacji...f...f... 70 Aplikacje konsolowe...f... 70 Windows Forms...f...f. 70 VCL...f...f... 70 VCL.NET...f...f... 71 Windows Forms vs VCL.NET...f... 72 Formularze Web Forms...f... 73 Składniki.NET Framework...f... 74 Usługi sieciowe...f...f... 74 Niezależność...f...f... 75 Uniwersalność...f...f... 75 Test...f...f... 76... 77 Podsumowanie...f...f... 78 Język Delphi...i...i...79 Aplikacje konsolowe...f...f 80 Zapisywanie projektu...f... 80 Po kompilacji...f...f. 81 Najprostszy program...f...f 81 Podstawowa składnia...f... 82 Czytanie kodu...f...f... 82 Wielkość liter...f...f... 82
Spis treści 7 Pamiętaj o średniku!...f... 83 Bloki begin i end...f...f 83 Dyrektywa program...f... 84 Komentarze...f...f...84 Umiejętne komentowanie...f... 86 Wypisywanie tekstu...f...f. 86 Położenie instrukcji...f... 88 Instrukcja Writeln...f... 88 Zmienne...f...f... 89 Deklaracja zmiennych...f... 89 Typy danych...f...f... 90 Deklaracja kilku zmiennych...f... 91 Przydział danych...f...f 92 Deklaracja zakresu danych...f... 94 Restrykcje w nazewnictwie...f... 94 Stałe...f...f... 95 Domyślne typy stałych...f... 95 Używanie zmiennych w programie...f... 97 Łączenie danych...f...f. 97 Tablice danych...f...f...9 Tablice jako stałe...f... 100 Tablice wielowymiarowe...f... 101 Tablice dynamiczne...f... 102 Polecenia Low i High...f... 103 Operatory...f...f... 104 Operatory przypisania...f... 104 Operatory porównania...f... 105 Operatory logiczne...f... 105 Operatory arytmetyczne...f... 106 Operatory bitowe...f... 108 Pozostałe operatory...f... 109 Instrukcje warunkowe...f... 109 Instrukcja if..then...f... 109 Instrukcja case..of...f... 112 Instrukcja else...f...f.. 115 Programowanie proceduralne...f... 118 Procedury i funkcje...f...f 118 Procedury...f...f... 118 Funkcje...f...f... 121 Zmienne lokalne...f... 122 Parametry procedur i funkcji...f... 123 Parametry domyślne...f... 125 Przeciążanie funkcji i procedur...f... 126 Przekazywanie parametrów do procedur i funkcji... 127 Procedury zagnieżdżone...f... 129 Wplatanie funkcji i procedur...f... 129 Własne typy danych...f... 130 Tablice jako nowy typ...f... 130 Aliasy typów...f...f... 131 Rekordy...f...f... 132 Przekazywanie rekordów jako parametrów procedury... 132 Deklarowanie rekordu jako zmiennej...f... 133 Instrukcja packed...f... 134
8 Delphi 2005. Kompendium programisty Deklarowanie tablic rekordowych...f... 134 Deklarowanie dynamicznych tablic rekordowych... 135 Instrukcja wiążąca with...f... 135 Programowanie strukturalne...f... 136 Moduły...f...f... 136 Tworzenie nowego modułu...f... 137 Budowa modułu...f... 137 Włączanie modułu...f... 139 Funkcje wbudowane...f... 139 Sekcje Initialization oraz Finalization...f... 139 Dyrektywa forward...f... 140 Konwersja typów...f...f... 142 Rzutowanie...f...f... 144 Parametry nieokreślone...f... 144 Pętle...f...f... 145 Pętla for..do...f...f... 145 Pętla while..do...f...f.. 148 Pętla repeat..until...f... 149 Pętla for-in...f...f... 149 Polecenie Continue...f... 151 Polecenie Break...f...f 152 Zbiory...f...f... 153 Przypisywanie elementów zbioru...f... 154 Odczytywanie elementów ze zbioru...f... 154 Dodawanie i odejmowanie elementów zbioru...f... 156 Typy wariantowe...f...f... 156 VarType, VarTypeAsText...f... 157 VarToStr...f...f... 157 VarIs*...f...f... 158 Pliki dołączane...f...f... 158 Etykiety...f...f... 159 Dyrektywy ostrzegawcze...f... 160 Wstęp do algorytmiki...f... 161 Schematy blokowe...f... 161 Przykład obliczanie silni...f... 163 Efektywny kod...f...f... 166 Instrukcje warunkowe...f... 166 Typ Boolean w tablicach...f... 167 Zbiory...f...f... 169 Łączenie znaków w ciągach...f... 169 Test...f...f... 170 171 Podsumowanie...f...f... 173 Rozdział 4. IDE Delphi...i...i.....175 Podstawowe paski narzędzi...f... 175 Pasek Standard...f...f. 176 Pasek View...f...f... 176 Pasek Debug...f...f... 177 Pasek Desktop...f...f.. 177 Pasek Custom...f...f... 178 Pozostałe paski narzędzi...f... 178
Spis treści 9 Repozytorium obiektów...f... 178 Dodawanie projektu do repozytorium...f... 179 Ustawienia repozytorium...f... 180 Praca z paletą narzędzi...f... 181 Umieszczanie komponentów na formularzu...f... 182 Umieszczanie kilku komponentów naraz...f... 182 Przycisk Categories...f... 183 Szukanie obiektu...f... 183 Przemieszczanie ikon...f... 183 Menu palety narzędzi...f... 183 Praca z komponentami...f... 185.NET...f...f... 187 Komponent...f...f... 187 Sterowanie komponentem...f... 188 Praca z inspektorem obiektów...f... 188 Edycja właściwości...f... 189 Zdarzenia...f...f... 191 Menu inspektora obiektów...f... 191 Opcje inspektora obiektów...f... 191 Projektant formularzy...f... 192 Siatka pomocnicza...f... 192 Usuwanie, kopiowanie i wklejanie...f... 194 Zaznaczanie wielu komponentów...f... 194 Menu projektanta formularzy...f... 195 Pasek narzędziowy Align...f... 196 Pasek narzędziowy Spacing...f... 197 Pasek narzędziowy Position...f... 198 Opcje projektanta formularzy...f... 198 Projekty...f...f... 199 Opcje projektu...f...f.. 200 Edytor WYSIWYG...f...f 205 Projektant strony WWW...f... 206 Inspektor obiektów...f... 207 Dodatkowe paski narzędzi...f... 207 Edycja pozostałych plików...f... 208 Opcje HTML w Delphi...f... 209 Projektowanie interfejsu...f... 210 Paski narzędziowe...f... 210 Ikony dla paska narzędzi...f... 211 Menu główne...f...f... 213 Menu podręczne...f... 214 Pozostałe elementy interfejsu...f... 215 Kilka wersji językowych programu...f... 218 Tworzenie angielskiej wersji językowej...f... 219 Tłumaczenie projektu...f... 220 Kompilacja projektu...f... 221 Opcje Translation Manager...f... 222 Opcje środowiska...f...f... 223 Test...f...f... 224 224 Podsumowanie...f...f... 226
10 Delphi 2005. Kompendium programisty Rozdział 5. Przegląd.NET Framework...i...i.....227 Środowisko CLR...f...f... 227 Kod pośredni IL...f... 228 Kod zarządzany i niezarządzany...f... 229 Moduł zarządzany...f... 229 Podzespoły...f...f... 230 Działanie CLR...f...f.. 230 System CTS...f...f... 231 Specyfikacja CLS...f...f... 232 Biblioteka klas...f...f... 233 Moduły i przestrzenie nazw...f... 233 Wieloznaczność...f... 234 Główne przestrzenie nazw...f... 235 Tworzenie przestrzeni nazw...f... 237 Test...f...f... 237 238 Podsumowanie...f...f... 238 Rozdział 6. Praca z kodem źródłowym...i... 239 Na czym polega programowanie obiektowe?...f... 239 Biblioteki wizualne...f...f.. 240 Podstawowy kod formularza...f... 241 Formularz w VCL.NET...f... 243 Sekcja uses...f...f... 243 Klasa...f...f... 244 Zmienna wskazująca na klasę...f... 244 Plik *.nfm...f...f... 244 Generowanie kodu...f... 245 Nazwy komponentów...f... 245 Programowanie zdarzeniowe...f... 246 Generowanie zdarzeń...f... 246 Lista zdarzeń w inspektorze obiektów...f... 249 Jedno zdarzenie dla kilku obiektów...f... 250 Edytor kodu...f...f... 251 Ukrywanie kodu...f... 252 Makra...f...f... 252 Code Insight...f...f... 252 Code Completion...f... 253 Help Insight...f...f... 254 Wyróżnianie błędów...f... 254 Menu podręczne edytora kodu...f... 255 Opcje edytora kodu...f... 256 Skrawki kodu...f...f... 262 To-Do List...f...f...263 Generowanie komentarza TODO...f... 263 Menu podręczne okna...f... 264 Szablony kodu...f...f... 265 Refaktoryzacja...f...f... 26 Deklaracja zmiennych...f... 266 Deklaracja pól...f...f.. 267 Wyodrębnianie metod...f... 267 Wyodrębnianie łańcucha zasobów...f... 267
Spis treści 11 Zmiana nazwy...f...f.. 268 Szukanie modułu...f... 269 Synchroniczna edycja...f... 269 Wyszukiwanie odwołań...f... 270 Menedżer projektu...f...f.. 271 Model View...f...f... 272 Data Explorer...f...f... 272 Menedżer historii...f...f... 272 Test...f...f... 274 275 Podsumowanie...f...f... 275 Rozdział 7. Programowanie obiektowe...i...277 Klasy...f...f... 277 Składnia klasy...f...f.. 278 Do czego służą klasy?...f... 278 Hermetyzacja...f...f... 279 Dziedziczenie...f...f... 280 Polimorfizm...f...f... 280 Instancja klasy...f...f.. 280 Konstruktor...f...f... 281 Destruktor...f...f... 281 Pola...f...f... 281 Metody...f...f... 282 Tworzenie konstruktorów i destruktorów...f... 283 Destruktory w.net...f... 286 Poziomy dostępu do klasy...f... 290 Dziedziczenie...f...f... 292 Przeciążanie metod...f... 293 Typy metod...f...f... 293 Przedefiniowanie metod...f... 295 Typy zagnieżdżone...f... 299 Parametr Self...f...f... 300 Brak konstruktora...f... 301 Brak instancji klasy...f... 302 Class helpers...f...f... 304 Klasy zaplombowane...f... 305 Słowo kluczowe static...f... 305 Właściwości...f...f... 306 Parametr Sender procedury zdarzeniowej...f... 309 Przechwytywanie informacji o naciśniętym klawiszu... 310 Obsługa parametru Sender...f... 312 Operatory is i as...f...f... 313 Metody w rekordach...f... 314 Interfejsy...f...f... 315 Przeładowanie operatorów...f... 316 Jakie operatory można przeładować?...f... 317 Deklaracja operatorów...f... 317 Binary i Unary...f...f.. 319 Wyjątki...f...f... 319 Słowo kluczowe try..except...f... 320 Słowo kluczowe try..finally...f... 321
12 Delphi 2005. Kompendium programisty Słowo kluczowe raise...f... 322 Klasa Exception...f... 322 Selektywna obsługa wyjątków...f... 323 Zdarzenie OnException...f... 324 Identyfikatory...f...f... 326 Boksowanie typów...f...f. 327 Przykład wykorzystania klas...f... 328 Zasady gry...f...f... 328 Specyfikacja klasy...f... 329 Zarys klasy...f...f... 330 Sprawdzenie wygranej...f... 333 Interfejs aplikacji...f... 337 Tworzenie interfejsu graficznego...f... 340 Gra Kółko i krzyżyk...f... 341 Biblioteka VCL/VCL.NET...f... 352 Klasa TApplication...f... 353 Właściwości...f...f... 356 Zdarzenia...f...f... 361 Programowanie w.net...f... 365 Wspólny model programowania...f... 366 Klasa System.Object...f... 366 Test...f...f... 368 369 Podsumowanie...f...f... 370 Rozdział 8. Podzespoły.NET...i...i......371 Czym jest COM?...f...f... 371 Kontrolka w rozumieniu COM...f... 372 Odrobinę historii...f... 372 ActiveX...f...f... 372 DCOM...f...f... 373 Podstawowe podzespoły...f... 373 Słowo o funkcji ShellExecute...f... 375 Deasembler.NET...f... 376 Obiektowość.NET...f...f. 378 Transformacja modułu...f... 380 Komponenty.NET...f...f. 381 Przygotowanie komponentu w Delphi...f... 382 Przygotowanie komponentu C#...f... 383 Włączenie podzespołu w Delphi...f... 385 Atrybuty podzespołu...f... 385 Korzystanie z programu Reflection...f... 388 Mechanizm reflection...f... 389 Metadane...f...f... 389 Funkcja GetType...f... 389 Klasa System.Type...f... 390 Ładowanie podzespołu...f... 391 Przykład własny program Reflection...f... 392 Własne atrybuty...f... 398 Aplikacje.NET Framework SDK...f... 401 Global Assembly Cache Tool...f... 402 WinCV...f...f... 404
Spis treści 13 Narzędzie konfiguracji.net Framework...f... 404 PEVerify narzędzie weryfikacji...f... 405 Test...f...f... 405 406 Podsumowanie...f...f... 406 Rozdział 9. Wykrywanie błędów w aplikacjach...i...407 Rodzaje błędów...f...f... 408 Opcje kompilatora...f...f.. 409 Częste błędy programisty...f... 411 Niezainicjalizowane zmienne obiektowe...f... 411 Zwalnianie obiektów...f... 412 Tablice...f...f... 412 Wskaźniki...f...f...413 Rejestry...f...f... 414 Stos...f...f... 414 Sterta...f...f... 415 Do czego służą wskaźniki?...f... 415 Tworzenie wskaźnika...f... 415 Przydział danych do wskaźników...f... 417 Tworzenie wskaźników na struktury...f... 418 Przydział i zwalnianie pamięci...f... 419 Wartość pusta...f...f... 420 Debuger Delphi...f...f... 420 Interfejs Debug...f...f. 420 Opcje projektu...f...f.. 421 Punkty przerwań...f... 423 Polecenie Run to Cursor...f... 428 Podgląd zmiennych...f... 429 Inspektor śledzenia...f... 431 Evaluate/Modify...f... 432 Okno Call Stack...f... 434 Okno Local Variables...f... 434 Okno Thread Status...f... 435 Okno Event Log...f... 436 Okno modułów...f...f. 437 Okno deasemblacji...f... 438 Polecenie Go to Address...f... 438 Okno Message View...f... 439 Praca krokowa...f...f... 440 Ikony na gutterze...f... 440 Przekraczanie i wkraczanie...f... 441 Opcje debugera...f...f... 442 Strona Borland Debuggers...f... 443 Zakładka Language Exceptions...f... 444 Zakładka Native OS Exceptions...f... 444 Zakładka Event Log...f... 444 Menu związane z debugerem...f... 445 Test...f...f... 446 447 Podsumowanie...f...f... 448
14 Delphi 2005. Kompendium programisty Rozdział 10. Praca z plikami...i...449 Definicja pliku...f...f... 450 Pliki tekstowe...f...f... 450 Inicjalizacja...f...f... 450 Tworzenie nowego pliku...f... 451 Otwieranie istniejącego pliku...f... 451 Odczyt plików tekstowych...f... 452 Zapis nowych danych w pliku...f... 453 Zapis danych na końcu pliku...f... 454 Pliki amorficzne...f...f... 455 Otwieranie i zamykanie plików...f... 455 Tryb otwarcia pliku...f... 456 Zapis i odczyt danych...f... 456 Przykład działania kopiowanie plików...f... 457 Inne funkcje operujące na plikach...f... 460 Funkcje operujące na katalogach...f... 462 Pliki typowane...f...f... 463 Deklaracja...f...f... 463 Tworzenie pliku i dodawanie danych...f... 464 Odczyt rekordu z pliku...f... 465 Przykład działania książka adresowa...f... 465 Kopiowanie i przenoszenie plików...f... 472 Kopiowanie...f...f... 472 Przenoszenie pliku...f... 472 Struktura TSHFileOpStruct...f... 473 Strumienie...f...f...475 Podział strumieni...f... 475 Prosty przykład na początek...f... 476 Konstruktor klasy TFileStream...f... 477 Pozostałe metody i właściwości klasy TStream...f.. 478 Właściwości...f...f... 478 Metody...f...f... 479 Praktyczny przykład...f... 480 Wyszukiwanie...f...f... 486 Rekord TSearchRec...f... 487 Jak zrealizować wyszukiwanie?...f... 487 Rekurencja...f...f... 488 Praktyczny przykład...f... 489 Informacja o dyskach...f... 493 Pobieranie listy dysków...f... 493 Pobieranie informacji o rozmiarze dysku...f... 494 Pobieranie dodatkowych informacji...f... 494 Obsługa plików w.net...f... 497 Klasy przestrzeni nazw System.IO...f... 497 Praca z plikami...f...f. 498 Praca z katalogami...f... 500 Strumienie...f...f... 502 Praca z plikami...f...f. 502 Test...f...f... 504 505 Podsumowanie...f...f... 507
Spis treści 15 Rozdział 11. Migracja do.net...i... 509 Czy warto przechodzić do.net?...f... 510 Ewolucja platform programistycznych...f... 510 WinFX...f...f... 511 Brakujące komponenty...f... 512 Zmiany we właściwościach...f... 512 Elementy języka...f...f... 512 Wszystko jest klasą!...f... 512 Przestrzenie nazw...f... 513 Kompilacja warunkowa...f... 513 Brakujące elementy...f... 515 Ciągi znakowe w Delphi...f... 523 Komunikaty...f...f... 531 Destruktory...f...f... 531 WinForms...f...f... 532 Brak pliku *.dfm/*.nfm...f... 533 VCL i WinForms...f... 537 Platform Invoke...f...f... 538 Wywołanie standardowe...f... 539 Użycie atrybutu DLLImport...f... 540 Parametry wyjściowe...f... 541 Dane wskaźnikowe...f... 543 Pobieranie danych z bufora...f... 544 Kod zarządzany i niezarządzany...f... 545 Używanie funkcji Win32...f... 545 Marshaling...f...f... 546 Wady PInvoke...f...f.. 558.NET a obiekty COM...f... 558 Terminologia COM...f... 559 Mechanizm COM Callable Wrappers...f... 560 Przykładowy podzespół...f... 561 Utworzenie biblioteki typu...f... 564 Użycie biblioteki typu...f... 564 Korzystanie z klasy COM...f... 565 Kontrolki COM w aplikacjach.net...f... 569 Aplikacje sieciowe...f...f. 570 Test...f...f... 570 571 Podsumowanie...f...f... 572 Rozdział 12. Co nowego w Delphi 2005?...i...573 Trzy osobowości...f...f... 573 IDE Delphi...f...f... 574 Strona powitalna...f... 574 Historia i kopie zapasowe...f... 574 Okno struktury...f...f. 575 Synchroniczna edycja...f... 575 Help Insight...f...f... 576 Wyróżnianie błędów...f... 577 Paleta narzędzi...f...f. 577 Wyszukiwanie...f...f.. 577 Pozostałe...f...f... 578
16 Delphi 2005. Kompendium programisty Debuger...f...f... 578 HTML...f...f...579 Bazy danych...f...f... 579 dbgo for ADO...f...f. 579 dbexpress...f...f... 579 BDP.NET...f...f... 579 Pozostałe...f...f... 580 Refaktoryzacja...f...f... 580 Zmiany w języku Delphi...f... 580 Wplatanie funkcji i procedur...f... 580 Pętla for-in...f...f... 581 Kodowanie Unicode...f... 583 Podsumowanie...f...f... 583 Część II...7...7...585 Rozdział 13. Architektura bazodanowa Delphi...i... 587 Czym jest baza danych?...f... 587 Działanie baz danych...f... 588 Rozwiązania alternatywne...f... 589 Baza danych a własny mechanizm...f... 590 Rodzaje baz danych...f...f 591 Bazy proste...f...f... 591 Relacyjne bazy danych...f... 591 Bazy danych typu klient-serwer...f... 592 Wielowarstwowa architektura baz danych...f... 593 Borland Database Engine...f... 593 Sterowniki bazy danych...f... 593 Zbiory danych...f...f.. 594 Komponenty bazodanowe...f... 595 Praca z komponentami...f... 599 Otwieranie i zamykanie zbioru danych...f... 599 Nawigowanie wśród rekordów...f... 600 Modyfikacja zawartości...f... 602 Pola rekordu bazy danych...f... 603 Edytor pól...f...f... 607 Pola obliczeniowe...f... 608 Pola przeglądowe...f... 609 SQL Explorer...f...f... 610 Tworzenie aliasu...f... 610 Praca z tabelami...f...f... 611 Tworzenie tabel...f...f 612 Tworzenie kolumn w kodzie programu...f... 612 Filtrowanie danych...f...f. 614 Wykorzystanie właściwości Filter...f... 615 Zdarzenie OnFilterRecord...f... 616 Wyszukiwanie rekordów...f... 617 Metoda Locate...f...f... 618 Metoda FindKey...f...f 619 Przykładowa aplikacja...f... 619 Założenia...f...f... 620 Tworzenie interfejsu...f... 621
Spis treści 17 Kod źródłowy aplikacji...f... 625 Ćwiczenia dodatkowe...f... 636 Zakładki...f...f... 636 Pozostałe komponenty bazodanowe...f... 637 Komponent TDbGrid...f... 637 Komponent TDbNavigator...f... 637 Komponent TDbText...f... 638 Komponent TDbEdit...f... 639 Komponent TDbMemo...f... 639 Komponent TDbRichEdit...f... 639 Komponent TDbImage...f... 639 Komponent TDbCheckBox...f... 639 Test...f...f... 640 640 Podsumowanie...f...f... 642 Rozdział 14. dbexpress...i...i.....643 Architektura klient-serwer...f... 643 Klient...f...f... 644 Serwer...f...f... 644 Klient-serwer oraz bazy lokalne...f... 645 Język SQL...f...f... 646 Baza MySQL...f...f... 646 InterBase...f...f... 647 Schemat tworzenia aplikacji klient-serwer...f... 647 Analiza...f...f... 647 Projekt...f...f... 648 Budowa...f...f... 648 Programowanie w SQL...f... 648 Klient MySQL...f...f.. 649 Tworzenie bazy danych...f... 651 Tworzenie tabel...f...f 651 Zmiana struktury tabeli...f... 657 Indeksy...f...f... 659 Dodawanie rekordów...f... 663 Wyświetlanie informacji...f... 664 Uaktualnianie zawartości...f... 670 Usuwanie danych z tabeli...f... 671 Eksport i import bazy...f... 671 Aplikacja zarządzająca MySQL...f... 672 Praca z programem MySQL Control Center...f... 673 Praca z tabelami...f... 674 InterBase...f...f... 676 Uruchomienie...f...f... 677 Program IBConsole...f... 678 MySQL a InterBase...f... 681 Tworzenie tabel InterBase...f... 690 dbexpress...f...f...692 dbexpress a BDE...f... 692 Połączenie z bazą danych...f... 692 Komponent TSQLDataSet...f... 698 Komponent TSQLMonitor...f... 703
18 Delphi 2005. Kompendium programisty Pozostałe komponenty dbexpress...f... 705 Dystrybucja aplikacji dbexpress...f... 705 Okno Data Explorer...f... 705 Wprowadzanie zmian w tabeli...f... 707 Edytor połączeń...f...f. 707 Test...f...f... 708 709 Podsumowanie...f...f... 709 Rozdział 15. Rozdział 16. Rozdział 17. IBX...i...i...i.711 Dlaczego IBX?...f...f... 711 Zalety IBX...f...f... 712 Komponenty IBX...f...f... 713 Komponent TIBDatabase...f... 713 Komponent TIBDataSet...f... 716 Komponenty reprezentujące dane...f... 719 TIBSQLMonitor...f...f 720 Komponenty administracyjne...f... 720 Łączenie ze zdalnym serwerem...f... 720 Przykład wykorzystania IBX...f... 721 Tworzenie bazy danych...f... 722 Piszemy aplikację Helion DB!...f... 729 Test...f...f... 732 732 Podsumowanie...f...f... 733 Przegląd ADO.NET...i...735 Czym jest ADO?...f...f... 735 Terminologia...f...f... 736 Warstwy dostępu...f...f... 737 Architektura baz danych...f... 738 ADO.NET...f...f... 739 Architektura ADO.NET...f... 739 Źródło danych...f...f.. 739 Dostawca danych...f... 740 Zbiory danych...f...f.. 740 ADO.NET w praktyce...f... 741 Łączenie ze źródłem ODBC...f... 741 Łączenie ze źródłem OleDB...f... 742 Wysyłanie zapytań (MS Access)...f... 743 Sterowniki zarządzane...f... 746 Test...f...f... 747 748 Podsumowanie...f...f... 749 BDP.NET...i...i......751 BDP.NET...f...f... 751 Łączenie z bazą InterBase...f... 752 Komponent BDPConnection...f... 754 Komponent BdpCommand...f... 754 Komponent BdpDataAdapter...f... 755 Wyświetlanie zwartości tabeli...f... 758
Spis treści 19 Praca z danymi...f...f... 759 Zapytania SQL...f...f. 760 Dystrybucja aplikacji BDP.NET...f... 760 MySQL w ADO.NET...f... 761 Korzystanie ze sterownika MySQL...f... 762 Komponenty wizualne...f... 768 Test...f...f... 770 770 Podsumowanie...f...f... 771 Część III...7...7...773 Rozdział 18. XML...i...i... 775 Niezależność XML...f...f. 776 XHTML...f...f...76 Budowa dokumentu...f...f 776 Prolog...f...f... 777 Znaczniki...f...f... 778 Atrybuty...f...f... 780 Podstawowa terminologia...f... 780 Węzeł główny...f...f.. 781 Komentarze...f...f... 781 Przestrzenie nazw...f... 781 Składnia przestrzeni nazw...f... 782 Przestrzenie nazw i atrybuty...f... 782 DTD...f...f... 783 Deklaracja elementu...f... 784 Deklaracja atrybutu...f... 784 DTD w osobnym pliku...f... 786 Encje tekstowe...f...f... 787 XSD...f...f... 788 Nagłówek XSD...f...f 789 Elementy XSD...f...f. 789 Typy danych...f...f... 790 Typy proste...f...f... 790 XML a bazy danych...f... 793 XSL...f...f... 793 DOM...f...f... 794 SAX...f...f... 795 Korzystanie z System.XML...f... 795 Ładowanie pliku XML...f... 795 Odczyt dowolnego elementu...f... 796 Odczyt wartości atrybutów...f... 798 Tworzenie pliku XML...f... 801 Eksport danych do postaci XML...f... 806 Modyfikacja plików...f... 808 Test...f...f... 811 812 Podsumowanie...f...f... 813
20 Delphi 2005. Kompendium programisty Rozdział 19. Rozdział 20. IntraWeb...i...i...815 Czym właściwie jest IntraWeb?...f... 815 Dynamiczne strony WWW...f... 816 CGI, ISAPI, NSAPI...f... 816 PHP...f...f... 818 Tworzenie projektu IntraWeb...f... 819 Praca z komponentami...f... 820 Praca z kodem...f...f.. 820 Uruchamianie programu...f... 821 Serwer IntraWeb...f...f... 821 Obsługa serwera...f... 822 Generowanie zdarzeń...f... 822 Zdarzenia zastępcze...f... 823 Kilka formularzy w jednym projekcie...f... 825 Funkcja ShowMessage w IntraWeb...f... 826 Elementy HTML i JavaScript...f... 827 Wysyłanie plików...f...f... 828 IntraWeb jako rozszerzenie ISAPI...f... 828 Konwertowanie aplikacji do ISAPI...f... 829 Test...f...f... 831 831 Podsumowanie...f...f... 831 ASP.NET...i...i...833 Dynamiczne strony WWW...f... 833 ASP...f...f... 834 ASP.NET...f...f... 834 ASP i ASP.NET...f...f... 835 Zmiany w kodzie...f... 835 Kompilacja kodu...f... 835 Migracja do ASP.NET...f... 835 Zgodność ze standardem XHTML...f... 838 Narzędzia...f...f... 839 Edytor...f...f... 839 Serwer...f...f... 840 Instalacja ASP.NET...f... 841 Co trzeba umieć?...f... 842 ASP.NET w Delphi...f...f 842 Elementy interfejsu...f... 843 Pierwszy projekt...f... 844 Opcje ASP.NET...f... 845 Web Forms...f...f... 845 Przestrzeń nazw System.Web.UI...f... 845 Praca z ASP.NET...f...f... 846 Kontrolki działające po stronie serwera...f... 847 Zdarzenia komponentów...f... 848 Kontrolki Web Forms...f... 851 Code Behind...f...f... 856 Kontrolki użytkownika...f... 858 Tworzenie kontrolek w Delphi...f... 860 Komponenty.NET w ASP.NET...f... 864 Konfiguracja stron ASP.NET...f... 872
Spis treści 21 Sesje...f...f... 875 Wysyłanie wiadomości e-mail...f... 880 Monitorowanie stron ASP.NET...f... 881 Pamięć podręczna...f... 881 Bazy danych w ASP.NET...f... 883 Łączenie się z bazą...f... 883 Kontrolki bazodanowe...f... 885 Technologie internetowe...f... 887 Komponenty HTML Producer...f... 888 WebBroker...f...f... 888 Internet Express...f...f... 888 WebSnap...f...f... 888 IntraWeb...f...f... 889 ASP.NET...f...f... 889 Test...f...f... 889 890 Podsumowanie...f...f... 891 Rozdział 21. Usługi sieciowe...i... 893 Czym są usługi sieciowe?...f... 893 Działanie usług sieciowych...f... 895 HTTP...f...f... 895 XML...f...f... 895 Infrastruktura usług sieciowych...f... 895 Użycie usług sieciowych...f... 898 Wyszukiwarka google.com...f... 898 Interfejs aplikacji...f... 900 Ładowanie usługi sieciowej...f... 900 Korzystanie z usługi Web...f... 902 Usługi sieciowe w Delphi...f... 908 Tworzenie usługi sieciowej...f... 909 Podgląd usługi sieciowej...f... 911 Usługa Web na stronie ASP.NET...f... 915 Plik źródłowy *.asmx...f... 917 Bezpieczeństwo usług sieciowych...f... 917 Bazy danych...f...f... 919 Projektowanie usługi...f... 920 Sprawdzanie usługi sieciowej...f... 927 Usługa sieciowa w aplikacji ASP.NET...f... 927 Test...f...f... 930 930 Podsumowanie...f...f... 931 Rozdział 22. Odpowiedzi...i...i.... 933 Rozdział 1....f...f... 933 Rozdział 2....f...f... 934 Rozdział 3....f...f... 934 Rozdział 4....f...f... 935 Rozdział 5....f...f... 935 Rozdział 6....f...f... 935 Rozdział 7....f...f... 936 Rozdział 8....f...f... 936
22 Delphi 2005. Kompendium programisty Rozdział 9....f...f... 937 Rozdział 10....f...f...937 Rozdział 11....f...f...937 Rozdział 13....f...f...938 Rozdział 14...f...f...938 Rozdział 15...f...f...938 Rozdział 16...f...f...939 Rozdział 17...f...f...939 Rozdział 18...f...f...939 Rozdział 19...f...f...940 Rozdział 20...f...f...940 Rozdział 21...f...f...940 Dodatki...7...7... 941 Dodatek A Podstawy języka C#...i...943 C# w Delphi...f...f... 943 Biblioteka klas...f...f... 944 Podstawowa składnia...f... 944 C# jako język obiektowy...f... 945 Metoda Main()...f...f. 946 Zmienne...f...f... 948 Deklaracja kilku zmiennych...f... 949 Przydział danych...f... 950 Stałe...f...f... 950 Tablice...f...f... 951 Tablice wielowymiarowe...f... 952 Operatory...f...f... 952 Operatory inkrementacji...f... 954 Operatory przypisania...f... 955 Operator rzutowania...f... 955 Instrukcje warunkowe...f... 956 Instrukcja if...f...f... 956 Instrukcja switch...f... 956 Operator trójoperandowy...f... 957 Funkcje w C#...f...f... 958 Parametry funkcji...f... 958 Przekazywanie parametrów...f... 959 Pętle...f...f... 960 Pętla for...f...f... 960 Pętla foreach...f...f... 961 Pętla while...f...f... 962 Pętla do..while...f...f.. 962 Klasy...f...f... 963 Tworzenie instancji klasy...f... 963 Metody...f...f... 964 Pola...f...f... 964 Konstruktor...f...f... 965 Właściwości...f...f... 965 Struktury...f...f... 967 Podsumowanie...f...f... 967
Spis treści 23 Dodatek B Dodatek C Dodatek D Akronimy...i...i...969 Spis przestrzeni nazw.net...i...971 Słowniczek...i...i...977 Dodatek E Zasady pisania kodu...i... 993 Stosowanie wcięć...f...f... 994 Instrukcje begin i end...f... 994 Styl,,wielbłądzi w nazwach procedur...f... 995 Stosuj wielkie litery...f...f 995 Parametry procedur...f...f 996 Instrukcja if...f...f... 996 Instrukcja case...f...f...96 Obsługa wyjątków...f...f.. 997 Klasy...f...f... 997 Komentarze...f...f... 997 Pliki i nazwy formularzy...f... 998 Notacja węgierska...f...f.. 998 Czy warto?...f...f...98 Skorowidz...i...i...1001
5. Przegląd.NET Framework W rozdziale 2. omówiłem podstawowe aspekty platformy.net. Czytelnik powinien już znać podstawowe pojęcia związane z tą technologią, a także umieć pisać proste aplikacje w Delphi. Jak dotąd jednak przykłady prezentowane przeze mnie w rozdziale 3. były oparte na programowaniu dla Win32. W tym rozdziale zajmiemy się tylko i wyłącznie programowaniem dla platformy.net oraz dokładniej omówimy technologie związane z tą platformą. Środowisko.NET Framework obejmuje swym zakresem wszystkie warstwy tworzenia oprogramowania: od systemu operacyjnego po bibliotekę klas (jak np. Windows Forms). W tym rozdziale: przedstawię szczegóły działania środowiska CLR, omówię nowe pojęcia: kod zarządzany i niezarządzany, opiszę, czym jest CLS i CTS. Środowisko CLR Wspólne środowisko uruchomieniowe (CLR) stanowi podstawowy element platformy.net Framework. W momencie uruchomienia aplikacji.net, CLR odpowiada za jej sprawne wykonanie (załadowanie do pamięci), przydział pamięci, obsługę błędów itp. W standardowym modelu programowania Win32, za tego typu czynności odpowiadał zwyczajnie system operacyjny (Windows). Po zainstalowaniu na komputerze środowiska.net Framework, odpowiednie biblioteki systemu pozwalają na rozpoznanie, czy dany program jest aplikacją Win32, czy też
228 Część I.NET. Jeżeli jest to aplikacja.net, uruchomione zostaje środowisko CLR, pod kontrolą którego działa program. To, co dzieje się w tle nas nie interesuje, nie trzeba się tym przejmować. W jaki jednak sposób system operacyjny rozpoznaje, która aplikacja jest aplikacją.net? Dzieje się tak dlatego, że aplikacja wykonywalna.net (plik.exe) jest inaczej zbudowana niż standardowe programy Win32. Tę kwestię postaram się wyjaśnić w paru kolejnych podrozdziałach. Kod pośredni IL Kompilatory działające pod kontrolą systemu Windows kompilują kody źródłowe do postaci 32-bitowego kodu maszynowego. W efekcie otrzymujemy aplikacje.exe czy biblioteki.dll. Taki sposób uniemożliwia przeniesienie aplikacji na urządzenia czy systemy, które działają pod kontrolą innych procesorów. Może także stwarzać problemy z innymi wersjami systemu operacyjnego (w tym wypadku Windows). Wszystko dlatego, że aplikacje wykonywalne komunikują się z API, które może różnić się w poszczególnych wersjach systemu. Rozwiązaniem tego problemu jest kompilacja programu do kodu pośredniego, nazywanego Common Language Infrastructure (z ang. architektura wspólnego języka, CLI). Wskazówka CLI na platformie.net jest często nazywany MSIL (Microsoft Intermediate Language) lub po prostu IL. Kod pośredni IL przypomina kod języka Asembler: