Inhaltsverzeichnis | 6 |
Vorwort des Herausgebers | 16 |
Die VCL und CLX | 18 |
1.1 Ein Euro-Umrechner | 18 |
1.1.1 Umrechnungskurse und -regeln | 19 |
1.1.2 Logik und Oberfläche trennen | 21 |
1.1.3 Die Umrechnung implementieren | 22 |
1.1.4 Control-Gruppen wiederverwenden mit Frames | 24 |
1.1.5 Bilder aus Ressourcen laden | 29 |
1.1.6 Komponenten im Quelltext erzeugen | 32 |
1.1.7 Exkurs: Frames visuell bearbeiten | 35 |
1.1.8 Umgerechnete Beträge anzeigen | 36 |
1.1.9 Bessere Tastaturbedienung | 38 |
1.2 Portierung nach Linux | 39 |
Laufwerke, Verzeichnisse und Dateien | 42 |
2.1 Standarddialoge | 44 |
2.1.1 Der Standarddialog zum Öffnen von Dateien | 44 |
2.1.2 Der nächste Standarddialog – Dateien speichern unter | 51 |
2.1.3 TOpenPictureDialog, TSavePictureDialog | 52 |
2.2 Datei- und Laufwerkskomponenten (File, Directory, Drive, Filter) | 52 |
2.2.1 TDriveComboBox | 53 |
2.2.2 TDirectoryListBox | 57 |
2.2.3 TFileListBox | 62 |
2.2.4 TFilterComboBox | 63 |
2.3 Funktionen zum Bearbeiten und Verwalten von Laufwerken, Verzeichnissen und Dateien | 71 |
2.3.1 Laufwerke | 71 |
2.3.2 Verzeichnisse | 76 |
2.3.3 Dateien | 76 |
2.3.4 Arbeiten mit den Inhalten einer Datei | 88 |
2.3.5 Fehlerbehandlung | 107 |
2.3.6 Routinen für Textdateien | 108 |
2.4 Dateihandles und Dateivariablen | 109 |
2.5 Direkte API-Aufrufe | 112 |
2.6 Suchen von Dateien mit API-Funktionen – Vergleich mit den Delphi-Funktionen | 115 |
2.7 Rekursives Suchen im Dateibaum | 118 |
2.7.1 Rekursive Dateibearbeitung – Ein etwas aufwendigeres Beispielprojekt | 122 |
2.8 Diskussion der unterschiedlichen Funktionsgruppen | 133 |
2.9 Shell-Programmierung | 135 |
2.10 Des Rätsels Lösung | 136 |
Docking | 138 |
3.1 Die erstenVersuche | 139 |
3.2 Docking Manager | 140 |
3.3 Andocken unerwünscht | 143 |
3.4 Ein Konzept mit Schwachstellen | 144 |
TApplication, die etwas andere Komponente | 146 |
4.1 Das Fundament im Bauwerk | 147 |
4.2 Wozu TApplication? | 148 |
4.3 Die Eigenschaften | 151 |
4.3.1 Die wichtigsten Eigenschaften im Überblick | 152 |
4.4 Die Methoden | 155 |
4.4.1 Die wichtigsten Methoden im Überblick | 156 |
4.5 Ereignisse | 159 |
4.5.1 Die wichtigsten Ereignisse im Überblick | 160 |
4.6 TApplication im Griff | 161 |
4.7 Angriffsziel Projektdatei | 162 |
4.8 Das unsichtbare Programm | 163 |
4.9 Ein Programm für die Taskleiste | 164 |
4.10 Botschaften auf Irrwegen | 165 |
4.11 Läuft sie schon? | 168 |
4.12 Schongang | 170 |
4.13 Freiräume | 173 |
Exception Handling – Ausnahmebehandlung | 176 |
5.1 Syntax des Exception Handling in Delphi | 177 |
5.1.1 Der Stoff, aus dem die Ausnahmen gemacht sind | 181 |
5.1.2 Die Reihenfolge der Bearbeitung | 184 |
5.2 Spezifische Informationen über die Instanz der Ausnahme | 187 |
5.2.1 Die »Stapelabwicklung« | 188 |
5.2.2 Exit, Break, Continue | 190 |
5.2.3 »At« – eine Rarität | 196 |
5.3 Hilfsroutinen | 201 |
5.3.1 Assertions | 202 |
Ressourcen | 204 |
6.1 Der Resource Workshop | 206 |
6.1.1 Benutzerdefinierte Ressourcen | 208 |
6.2 Mehrsprachige Programme | 209 |
Die Registry | 212 |
7.1 Vor- und Nachteile | 213 |
7.2 Der Registrierungseditor | 215 |
7.2.1 Struktur der Registry | 216 |
7.2.2 Datentypen der Schlüsseleinträge | 222 |
7.2.3 Die Dateien »System.dat« und »User.dat« | 223 |
7.3 Registry-Funktionen in Win32 | 224 |
7.3.1 Unicode- und ANSI-Format | 224 |
7.3.2 Verwendete Datenstrukturen | 225 |
7.3.3 Einige wichtige Win32-Funktionen | 226 |
7.4 Anwendungen und Beispiele | 230 |
7.4.1 Durchzuführende Eintragungen | 230 |
7.4.2 Dateinamenerweiterungen (Dateiextension) | 232 |
7.4.3 DDE-Verknüpfung mit dem Explorer | 238 |
7.4.4 Anwendungsverzeichnis | 243 |
7.4.5 Automatischer Programmstart | 244 |
7.5 Die Bibliothek »Registry.pas« | 246 |
7.5.1 Verfügbare Klassen | 246 |
7.5.2 Datenstrukturen | 246 |
7.5.3 Ausnahmebehandlung | 248 |
7.5.4 Die Klasse TRegistry | 249 |
7.5.5 Die Klasse TRegIniFile | 258 |
7.5.6 Die Klasse TRegistryIniFile | 260 |
Hooks | 266 |
8.1 Dynamic Link Libraries (DLLs) | 267 |
8.1.1 Statisches und dynamisches Einbinden | 268 |
8.1.2 Wohin mit der DLL? | 270 |
8.1.3 Fehlersuche in DLLs | 272 |
8.1.4 Erstellen von DLLs | 275 |
8.1.5 Fenster in DLLs | 278 |
8.1.6 Datenaustausch zwischen Anwendungen über DLLs | 281 |
8.2 Eingehakt : Hooks | 286 |
8.2.1 Die Parameter hmod und dwThreadId | 288 |
8.2.2 Die Callback-Funktion | 290 |
8.2.3 Auswerten der Parameter | 291 |
8.3 Endspurt | 293 |
Einführung in das Open ools API | 296 |
9.1 Hello World! | 299 |
9.2 Verwendung von Services | 302 |
9.3 Den Editor beeinflussen | 305 |
9.4 Notifiers | 309 |
9.5 Über die Experten hinaus... | 311 |
9.6 Übersicht: IOTAMessageServices | 312 |
9.7 Übersicht: IOTAActionServices | 315 |
9.8 Übersicht: IOTAPackageServices | 315 |
9.9 Übersicht: IOTAToDoServices | 316 |
9.10 Übersicht: IOTAWizardServices | 317 |
9.11 Übersicht: IOTAEditorServices | 318 |
9.12 Übersicht: IOTADebuggerServices | 319 |
9.12.1 Referenzen, Quellen und weitere nützliche Ressourcen | 320 |
Prozeßverwaltung | 322 |
10.1 Prozesse | 322 |
10.1.1 Kernel-Objekte | 325 |
10.1.2 Prozeßerzeugung | 326 |
10.1.3 Prozeßverwaltung | 332 |
10.2 Threads | 333 |
10.2.1 Threaderzeugung | 336 |
10.2.2 Threadverwaltung | 338 |
10.2.3 Stack eines Threads | 340 |
10.2.4 Deadlocks | 342 |
10.2.5 Prioritäten | 345 |
10.3 Synchronisation | 349 |
10.3.1 Kritische Bereiche | 354 |
10.3.2 Mutexe | 357 |
10.3.3 Semaphoren | 359 |
10.3.4 Ereignisse | 363 |
10.3.5 Named Pipes | 366 |
10.3.6 Verzögerung von Threads | 373 |
10.3.7 Synchrone Zähler | 375 |
10.3.8 Synchronisation in verteilten Anwendungen | 377 |
10.3.9 Beeinflussung anderer Prozesse | 377 |
10.4 Die Klasse TThread | 381 |
10.4.1 Eigenschaften (Properties) | 383 |
10.4.2 Methoden | 385 |
10.5 Synchronisation | 387 |
10.5.1 Die Klasse TCriticalSection | 387 |
10.5.2 Die Klasse TEvent | 387 |
10.5.3 Klasse TMultiReadExclusiveWriteSynchronizer | 388 |
10.5.4 Anmerkungen | 389 |
10.6 Entwurfsmuster | 389 |
10.7 Beispiele | 391 |
10.7.1 Beispiel 1: Lagersimulation | 391 |
10.8 Beispiel 2: Producer/Consumer | 393 |
10.9 Beispiel 3: Lagersimulation | 395 |
10.10 Beispiel 4: Interlocked-Zähler | 398 |
10.11 Beispiel 5: Supermarkt | 400 |
Drucken | 406 |
11.1 Die Unit Printers | 406 |
11.2 Dialoge für den Anwender | 412 |
11.3 Drucken mit Hindernissen | 414 |
11.4 Der Weg zur Unabhängigkeit | 415 |
11.5 Bis zum Äußersten | 417 |
11.6 Eine Komponente für die Druckerausgabe | 419 |
11.7 XPrint in der Praxis | 428 |
11.8 Offene Wünsche | 443 |
Die serielle Schnittstelle | 444 |
12.1 Der Anschluß, das Kabel | 444 |
12.2 Technische Betrachtungen | 450 |
12.3 Handshake | 453 |
12.4 Die Schnittstellen im PC | 454 |
12.5 Serielle Datenkommunikation mit dem Windows-API | 455 |
12.6 Ein Konfigurationsdialog | 470 |
12.7 Die serielle Schnittstelle als I/O-Port | 472 |
12.8 Praktische Beispiele | 474 |
12.9 Mit Komponenten wird alles einfach | 475 |
12.10 Ohne Zukunft? | 491 |
Multimedia | 492 |
13.1 MIDI-Sounds | 492 |
13.1.1 Aufbau der MIDI-Datei | 493 |
13.1.2 Die Channel-Events | 495 |
13.1.3 Die Krux mit der Zeitdifferenz | 495 |
13.1.4 Verfolgen des Abspielvorgangs | 499 |
13.1.5 Praxis | 500 |
13.1.6 Abspielung, Note für Note | 506 |
13.1.7 MIDI-Sequenzen aufnehmen, abspielen, speichern | 507 |
13.1.8 Der Datenstrom | 510 |
13.1.9 Normale Channel-Messages | 513 |
13.1.10 Daten als MIDI-Datei abspeichern | 517 |
13.2 Mit Wave-Dateien arbeiten | 524 |
13.2.1 Die Formate | 525 |
13.2.2 Wave-Dateien einlesen | 526 |
13.2.3 Gepackte Formate einlesen | 530 |
13.2.4 Wave-Aufnahmen abspeichern | 533 |
13.2.5 Sounds aufzeichnen | 538 |
13.2.6 Aufnehmen von CD-Audiotracks | 542 |
13.2.7 Sound gemixt | 546 |
13.2.8 Darstellung | 556 |
13.3 DirectX | 561 |
13.3.1 DirectSound | 561 |
13.3.2 DirectMusic | 603 |
13.4 DirectDraw | 636 |
13.4.1 Bilder im Fenstermodus | 637 |
13.4.2 Bilder im Vollbildmodus | 642 |
13.4.3 Direkt in das Video-RAM schreiben | 645 |
13.4.4 Frei schwebend: Overlays | 649 |
13.4.5 Aktion auf den Oberflächen | 655 |
13.5 Transformieren mit DirectX Media | 658 |
13.5.1 Transform-Units erzeugen | 660 |
13.5.2 Das leidige Release | 663 |
13.5.3 Was Sie brauchen... | 664 |
13.5.4 Die Fabrik | 666 |
13.5.5 Clippen | 671 |
13.5.6 Eigenschaften ändern | 673 |
13.5.7 Mehr Effekte | 674 |
13.5.8 Was braucht der Effekt? | 676 |
13.5.9 Hinter den Kulissen | 677 |
13.6 3D-Programmierung mit Delphi und DirectX 8 | 682 |
13.6.1 Werkzeuge | 683 |
Internet-Programmierung | 708 |
14.1 Die Komponentenseite »Internet« | 708 |
14.1.1 Allgemeines | 708 |
14.1.2 Das Intranet | 711 |
14.1.3 Computernetzwerke | 713 |
14.1.4 IP-Adressen und Domain-Namen | 718 |
14.1.5 Die Internetkomponenten | 720 |
14.1.6 Verteilte Anwendungen | 722 |
14.1.7 Webserver-Anwendungen | 722 |
14.1.8 CGI-Webserver-Anwendungen | 739 |
14.1.9 Antwortbotschaften generieren | 744 |
14.1.10 Einbindung von Datenbank-Informationen | 752 |
14.1.11 Socket-Anwendungen | 757 |
14.2 Die Indy-Komponenten | 771 |
14.2.1 Die drei Indy-Registerkarten: Clients, Server und Vermischtes | 771 |
14.2.2 Erste Schritte mit Indy | 780 |
14.2.3 TCP-Programmieren à la Indy | 785 |
14.2.4 Netzwerk-Diagnose mit Hilfe von Servern (Projekte: IndyDiagServer, IndyEchoClient) | 802 |
14.2.5 Weitere Diagnose-Instrumente: Ping, Traceroute, Finger und Whois | 804 |
14.2.6 File Transfer Protocol (FTP) | 813 |
14.2.7 Post im Internet (Projekt: IndyMail) | 820 |
14.2.8 Hypertext Transfer Protocol (HTTP) | 830 |
14.2.9 Komponenten für spezielle Bedürfnisse | 843 |
Seifenoper – SOAP | 852 |
15.1 Was ist WSDL? | 854 |
15.2 Web Services in Delphi 6 | 855 |
15.3 Erzeugen eines SOAP-Clients | 855 |
15.4 Entwickeln von SOAP-Servern | 860 |
15.4.1 Das Interface des SOAP-Servers | 862 |
15.4.2 Ein SOAP-Session-Manager-Client | 868 |
15.5 Zusammenfassung | 871 |
15.6 Quellen | 872 |
Installation eigener Programme | 874 |
16.1 InstallShield | 874 |
16.1.1 Die »Demo« | 876 |
16.1.2 Die Bedienung von InstallShield | 877 |
16.2 Nützliche Verpackungen | 879 |
16.2.1 Magnetisch, optisch, virtuell | 879 |
16.2.2 »Zip« und Konsorten | 880 |
16.2.3 Schrumpfen mit »UPX« | 881 |
16.2.4 Installations-Martyrium | 881 |
16.2.5 Schnippchen schlagen | 882 |
16.2.6 Die Installation der Installation | 884 |
16.2.7 Die dicke Ressource | 885 |
16.2.8 »OneFile« muß konfiguriert werden | 888 |
16.2.9 Der erste Versuch | 889 |
16.2.10 »OneFile« im Detail | 890 |
16.2.11 »Resource Workshop« eingebaut? | 891 |
16.2.12 Möglichkeiten | 892 |
Die Windows-Hilfe | 894 |
17.1 Einführung | 895 |
17.1.1 Steuercodes | 898 |
17.1.2 Kunst in der Hilfe – Bitmaps verwenden | 900 |
17.1.3 Heiße Punkte in der Bitmap – Die Hotspots | 901 |
Stichwortverzeichnis | 908 |