iOS-Tutorials: iOS-Anwendungsentwicklung mit Delphi
Transcription
iOS-Tutorials: iOS-Anwendungsentwicklung mit Delphi
Product Documentation RAD Studio iOS-Tutorials: iOS-Anwendungsentwicklung mit Delphi Version XE4 © 2013 Embarcadero Technologies, Inc. Embarcadero, the Embarcadero Technologies logos, and all other Embarcadero Technologies product or service names are trademarks or registered trademarks of Embarcadero Technologies, Inc. All other trademarks are property of their respective owners. Embarcadero Technologies, Inc. is a leading provider of award-winning tools for application developers and database professionals so they can design systems right, build them faster and run them better, regardless of their platform or programming language. Ninety of the Fortune 100 and an active community of more than three million users worldwide rely on Embarcadero products to increase productivity, reduce costs, simplify change management and compliance and accelerate innovation. The company's flagship tools include: Embarcadero® Change Manager™, CodeGear™ RAD Studio, DBArtisan®, Delphi®, ER/Studio®, JBuilder® and Rapid SQL®. Founded in 1993, Embarcadero is headquartered in San Francisco, with offices located around the world. Embarcadero is online at www.embarcadero.com. April, 2013 Embarcadero Technologies 2 Contents iOS-Tutorials: iOS-Anwendungsentwicklung mit Delphi ............................................... 8 Einrichten ........................................................................................................................ 8 Verwenden von grundlegenden Elementen der Benutzeroberfläche ................ 8 Verwenden von Gerätefunktionen ............................................................................ 9 Zugreifen auf Datenbanken ...................................................................................... 10 Siehe auch ................................................................................................................... 10 iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Mac ................. 11 Voraussetzungen auf dem Mac ............................................................................... 11 Schritte zum Konfigurieren des Mac für die Ausführung einer iOS-Anwendung auf dem iOS-Simulator ................................................................................................ 11 Schritt 1: Installieren des "Platform Assistant" ....................................................... 12 Schritt 2: Ausführen des "Platform Assistant" ........................................................ 13 Schritt 3: Installieren von Xcode auf dem Mac................................................... 14 Nächste Schritte....................................................................................................... 14 Weitere Schritte zum Konfigurieren des Mac für die Ausführung einer iOSAnwendung auf dem iOS-Simulator ........................................................................ 15 Schritt 1: Installieren der Xcode-Befehlszeilen-Tools auf einem Mac ............... 15 Schritt 2: Anmelden für ein Entwicklerkonto ........................................................ 16 Schritt 3: Anfordern, Herunterladen und Installieren Ihres Entwicklungszertifikats ............................................................................................. 16 Schritt 4: Registrieren Ihres Geräts für die Bereitstellung .................................... 18 Siehe auch ................................................................................................................... 20 iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Windows-PC ... 21 Konfigurieren der RAD Studio-Umgebung............................................................... 22 Erstellen eines Verbindungsprofils für den Mac .................................................. 22 Hinzufügen eines SDK zu dem Entwicklungssystem für das an den Mac angeschlossene iOS-Gerät .................................................................................... 24 Siehe auch ................................................................................................................... 25 iOS-Tutorial: Erstellen einer FireMonkey iOS-Anwendung ......................................... 26 Vorbereitungen ........................................................................................................... 26 Schritt 1: Erstellen einer neuen FireMonkey-HD-Anwendung für iOS ................... 26 Schritt 2: Platzieren von Komponenten auf dem FireMonkey-iOS-Formular ...... 27 Schritt 3: Schreiben einer Delphi-Ereignisbehandlungsroutine für einen Klick auf die Schaltfläche durch den Benutzer ...................................................................... 31 Schritt 4: Testen der iOS-Anwendung auf dem Mac (iOS-Simulator) .................. 32 Schritt 5: Testen der iOS-Anwendung auf einem angeschlossenen iOS-Gerät . 33 Siehe auch ................................................................................................................... 34 iOS-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen in iOS-Anwendungen ........................................................................................... 35 Schaltflächen in FireMonkey-Anwendungen für iOS ............................................. 35 Definieren des Aussehens und Verhaltens von Schaltflächen-Komponenten . 36 Embarcadero Technologies 3 Erstellen von segmentierten Steuerelementen mit Schaltflächen-Komponenten ........................................................................................................................................ 37 Erstellen einer Bereichsleiste (Scope Bar) auf einer Symbolleisten-Komponente ........................................................................................................................................ 39 Siehe auch ................................................................................................................... 39 iOS-Tutorial: Verwenden von Kalender-Komponenten zur Datumsauswahl in iOSAnwendungen ................................................................................................................ 40 Kalender in FireMonkey-iOS-Anwendungen ........................................................... 40 Implementieren einer Ereignisbehandlungsroutine für Datumsänderungen durch den Benutzer .................................................................................................... 41 Siehe auch ................................................................................................................... 42 iOS-Tutorial: Verwenden von Kombinationsfeld-Komponenten zur Auswahl von Einträgen in iOS-Anwendungen ................................................................................... 43 Implementieren einer Auswahlkomponente in FireMonkey-iOS-Anwendungen ........................................................................................................................................ 43 Erstellen einer Eintragsliste im Code ......................................................................... 45 Anzeigen eines bestimmten Eintrags ....................................................................... 46 Implementieren einer Ereignisbehandlungsroutine für die Auswahl des Benutzers ....................................................................................................................... 46 Siehe auch ................................................................................................................... 47 iOS-Tutorial: Verwenden von Webbrowser-Komponenten in iOS-Anwendungen48 Verwenden von Webbrowser-Komponenten in FireMonkey-iOS-Anwendungen ........................................................................................................................................ 48 Schritt 1: Entwerfen der Benutzeroberfläche .......................................................... 48 Schritt 2: Schreiben einer Ereignisbehandlungsroutine zum Öffnen einer Webseite, wenn der Benutzer den URL im Eingabe-Steuerelement ändert ...... 50 Implementieren einer allgemeinen Methode zum Öffnen einer Webseite ... 51 Implementieren einer Ereignisbehandlungsroutine für das Ereignis "OnChange" ............................................................................................................. 52 Implementieren einer Ereignisbehandlungsroutine zur Unterstützung der Eingabetaste ............................................................................................................ 53 Implementieren einer Ereignisbehandlungsroutine für die "Zurück"Schaltfläche ............................................................................................................. 53 Schritt 3: Auswählen der geeigneten Tastatur für die Webbrowser-Anwendung ........................................................................................................................................ 53 Siehe auch ................................................................................................................... 54 iOS-Tutorial: Verwenden von Registerkarten-Komponenten zur Anzeige von Seiten in iOS-Anwendungen ......................................................................................... 55 Register in FireMonkey-Anwendungen für iOS ....................................................... 55 Entwerfen von Registerkarten im Formular-Designer ............................................. 55 Verwenden von benutzerdefinierten Symbolen für Register ............................... 59 Definieren von Steuerelementen in einem TabControl ........................................ 62 Wechseln der Seite zur Laufzeit ................................................................................. 64 Durch Tippen auf das Register .............................................................................. 64 Embarcadero Technologies 4 Durch Aktionen und eine Aktionsliste ................................................................... 64 Durch Quellcode ..................................................................................................... 67 Siehe auch ................................................................................................................... 68 iOS-Tutorial: Verwenden von Listenfeld-Komponenten zur Anzeige von Tabellenansichten in iOS-Anwendungen.................................................................... 69 Erstellen von Elementen für die ListBox-Komponente ............................................ 69 Hinzufügen einer Kopfzeile......................................................................................... 71 Hinzufügen einer Gruppenkopfzeile/-fußzeile zu der Liste .................................... 73 Anzeigen von Listeneinträgen als eigene gruppierte Einträge............................ 74 Hinzufügen eines Kontrollkästchens oder eines anderen Elements zu einem ListBox-Eintrag............................................................................................................... 75 Hinzufügen eines Symbols zu einem ListBox-Eintrag ............................................... 75 Hinzufügen von Detailinformationen zu einem Eintrag ......................................... 76 Programmseitiges Hinzufügen von Einträgen zu einer ListBox .............................. 77 Hinzufügen eines Suchfeldes ..................................................................................... 78 Siehe auch ................................................................................................................... 79 iOS-Tutorial: Verwenden von Layouts zur Ausrichtung unterschiedlicher Formulargrößen in iOS-Anwendungen ........................................................................ 80 Jede FireMonkey-Komponente kann einen Besitzer, ein übergeordnetes Objekt und untergeordnete Objekte haben ......................................................... 80 Verwenden von allgemeinen layoutbezogenen Eigenschaften einer FireMonkey-Komponente .......................................................................................... 81 Verwenden der Eigenschaft "Align" ..................................................................... 81 Verwenden der Eigenschaft "Margins" ................................................................ 82 Verwenden der Eigenschaft "Padding" ............................................................... 82 Verwenden der Eigenschaft "Anchors" ................................................................ 83 Verwenden der Komponente "TLayout" .................................................................. 84 Arbeiten mit vollen Benutzeroberflächen: Verwenden von TVertScrollBoxKomponenten .............................................................................................................. 85 Siehe auch ................................................................................................................... 86 iOS-Tutorial: Aufnehmen und Teilen von Bildern in iOS-Anwendungen ................. 87 Erstellen der Benutzeroberfläche für die Anwendung .......................................... 88 Aufnehmen eines Fotos mit der iOS-Gerätekamera ............................................. 89 Verwenden eines Fotos aus der Fotobibliothek des iOS-Geräts .......................... 90 Teilen oder Drucken eines Fotos ............................................................................... 91 Siehe auch ................................................................................................................... 92 iOS-Tutorial: Verwenden von Positionssensoren auf iOS-Geräten ........................... 93 Entwerfen der Benutzeroberfläche .......................................................................... 94 Der Positionssensor ...................................................................................................... 95 Abrufen der Positionsinformationen (geografische Breite und Länge) von der LocationSensor-Komponente ................................................................................... 95 Anzeigen der aktuellen Position mit Google Maps über eine TWebBrowserKomponente ................................................................................................................ 97 Verwenden der Rückwärts-Georeferenzierung ..................................................... 97 Embarcadero Technologies 5 Anzeigen einer lesbaren Adresse in der ListBox-Komponente ........................... 100 Siehe auch ................................................................................................................. 100 iOS-Tutorial: Verwenden der Mitteilungszentrale auf iOS-Geräten ....................... 101 Drei grundlegende Mitteilungs- oder Hinweisstile ................................................ 101 Kennzeichen auf dem Anwendungssymbol ..................................................... 101 Mitteilungsbanner auf dem iPad ........................................................................ 101 Mitteilungshinweis .................................................................................................. 101 Mitteilungszentrale auf dem iPad ....................................................................... 101 Zugreifen auf den Mitteilungsdienst ....................................................................... 102 Festlegen der Zahl auf dem Kennzeichensymbol im Code ............................... 103 Planen von Mitteilungen .......................................................................................... 104 Aktualisieren oder Abbrechen von geplanten Mitteilungen ............................. 105 Sofortiges Anzeigen der Mitteilung ......................................................................... 106 Mitteilungsbanner oder Mitteilungshinweis ........................................................... 107 Hinzufügen von Aktionen zu Hinweisen ................................................................. 108 Siehe auch ................................................................................................................. 108 iOS-Tutorial: Verwenden von InterBase ToGo in iOS-Anwendungen .................... 109 Herstellen einer Verbindung zu der Datenbank mit dbExpress.......................... 110 Entwerfen und Einrichten der Benutzeroberfläche .............................................. 110 Herstellen der Verbindung zu den Daten .............................................................. 111 Bereitstellen der Anwendung auf iOS .................................................................... 114 Bereitstellen von InterBase ToGo, des dbExpress-Treibers und der Datenbankdatei auf iOS ...................................................................................... 114 Ändern des Codes für die Verbindung zu einer lokalen Datenbankdatei auf iOS ............................................................................................................................ 116 Ausführen der Anwendung auf dem iOS-Simulator oder auf einem iOS-Gerät ...................................................................................................................................... 117 Fehlerbehebung ........................................................................................................ 118 InterBase-Lizenzprobleme .................................................................................... 118 Exception-Behandlungsprobleme ...................................................................... 118 Typische Fehler und Lösungen ............................................................................ 119 Siehe auch ................................................................................................................. 119 iOS-Tutorial: Verwenden von SQLite in iOS-Anwendungen ................................... 120 Herstellen einer Verbindung zu der Datenbank mit dbExpress.......................... 121 Erstellen der Datenbank in der Windows-Umgebung für Entwicklungszwecke ...................................................................................................................................... 121 Erstellen der Datenbank im Daten-Explorer ...................................................... 121 Erstellen einer Tabelle im Daten-Explorer ........................................................... 123 Entwerfen und Einrichten der Benutzeroberfläche .............................................. 124 Herstellen der Verbindung zu den Daten .............................................................. 125 Erstellen einer Ereignisbehandlungsroutine zur Anzeige der Schaltfläche "Delete" bei Auswahl eines Eintrags aus der Liste durch den Benutzer ............ 126 Erstellen einer Ereignisbehandlungsroutine für die Schaltfläche "Add" zum Hinzufügen eines Eintrags zu der Liste .................................................................... 127 Embarcadero Technologies 6 Erstellen einer Ereignisbehandlungsroutine für die Schaltfläche "Delete" zum Entfernen eines Eintrags aus der Liste .................................................................... 129 Ändern des Codes für die Verbindung zu einer lokalen Datenbankdatei unter iOS ................................................................................................................................ 130 Festlegen des Speicherorts der SQLite-Datenbank auf dem iOS-Gerät ...... 130 Erstellen einer Tabelle, falls keine vorhanden ist ............................................... 131 Ausführen der Anwendung auf dem iOS-Simulator oder auf einem iOS-Gerät ...................................................................................................................................... 132 Siehe auch ................................................................................................................. 132 iOS-Tutorial: Herstellen einer Verbindung zu Unternehmensdatenbanken von iOSClient-Anwendungen aus ........................................................................................... 133 Erstellen der Mittelschicht: ein DataSnap-Server .................................................. 134 Erstellen einer DataSnap-Server-VCL-Anwendung .......................................... 134 Definieren einer Datenmenge für den DataSnap-Server ............................... 136 Bereitstellen der Datenmenge vom DataSnap-Server .................................... 138 Ausführen des DataSnap-Servers ........................................................................ 138 Erstellen einer iOS-Anwendung für die Verbindung zum DataSnap-Server ..... 139 Bereitstellen der MIDAS-Bibliothek auf dem iOS-Simulator ................................. 143 Ausführen der Anwendung auf dem iOS-Simulator oder auf einem iOS-Gerät ...................................................................................................................................... 144 Siehe auch ................................................................................................................. 144 Embarcadero Technologies 7 IOS-TUTORIALS: IOSANWENDUNGSENTWICKLUNG MIT DELPHI Diese Tutorials führen Sie durch die zur Erstellung von iOS-Anwendungen mit RAD Studio erforderlichen Schritte: Nach dem ersten Tutorial zur Einrichtung der Umgebung wird in jedem Tutorial das Erstellen einer iOS-Anwendung mit FireMonkey-Tools gezeigt. In den Tutorials werden die zum Erzielen eines nativen Erscheinungsbildes und Verhaltens von iOS-Anwendungen empfohlenen FireMonkeyKomponenten verwendet. EINRICHTEN Konfigurieren der Entwicklungsumgebung auf dem Mac Konfigurieren der Entwicklungsumgebung auf dem Windows-PC VERWENDEN VON GRUNDLEGENDEN ELEMENTEN DER BENUTZEROBERFLÄCHE Embarcadero Technologies Erstellen einer FireMonkey iOS-Anwendung Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen in iOS-Anwendungen 8 Verwenden von Kalender-Komponenten zur Datumsauswahl in iOS-Anwendungen Verwenden von Kombinationsfeld-Komponenten zur Auswahl von Einträgen in iOS-Anwendungen Verwenden von Webbrowser-Komponenten in iOSAnwendungen Verwenden von Registerkarten-Komponenten zur Anzeige von Seiten in iOS-Anwendungen Verwenden von Listenfeld-Komponenten zur Anzeige von Tabellenansichten in iOS-Anwendungen Verwenden von Layouts zur Ausrichtung unterschiedlicher Formulargrößen in iOSAnwendungen VERWENDEN VON GERÄTEFUNKTIONEN Embarcadero Technologies Aufnehmen und Teilen von Bildern in iOSAnwendungen 9 Verwenden von Positionssensoren auf iOS-Geräten Verwenden der Mitteilungszentrale auf iOS-Geräten ZUGREIFEN AUF DATENBANKEN Verwenden von InterBase ToGo in iOS-Anwendungen Verwenden von SQLite in iOS-Anwendungen Herstellen einer Verbindung zu Unternehmensdatenbanken von iOS-ClientAnwendungen aus SIEHE AUCH FireMonkey Quick Start Erstellen einer FireMonkey iOS-App FireMonkey-Anwendungsdesign iOS-Codefragmente Mobile iOS-Anwendungsentwicklung Embarcadero Technologies 10 IOS-TUTORIAL: KONFIGURIEREN DER ENTWICKLUNGSUMGEBUNG AUF DEM MAC FireMonkey-Anwendungen für die iOS-Zielplattform werden zuerst mit dem iOSSimulator auf dem Mac getestet. Im zweiten Teil des Tests wird die Zielplattform iOS-Gerät verwendet, für die ein Test-iOS-Gerät am Mac angeschlossen sein muss. Im ersten Teil dieses Tutorials werden die Schritte beschrieben, die zur Ausführung einer iOS-Anwendung auf dem iOS-Simulator auf dem Mac erforderlich sind. Im zweiten Teil dieses Tutorials werden weitere Schritte beschrieben, die Sie zur Ausführung einer iOS-Anwendung auf Ihrem iOS-Gerät durchführen müssen. VORAUSSETZUNGEN AUF DEM MAC OS X 10.7 Lion oder 10.8 Mountain Lion (Diese beiden Betriebssysteme werden nicht auf alten PowerPC- und 680x0-basierten Macintosh-Systemen unterstützt. Alle Macs seit 2007 sind Intel-basiert; alle seit 2008 verwenden 64 Bit, was für Lion erforderlich ist.) iOS 5.1 und höher Neueste Version von Xcode mit installiertem iOS-SDK und den XcodeBefehlszeilen-Tools o Dazu ist die Mitgliedschaft bei einem Apple-Entwicklerprogramm (Apple Developer Program) erforderlich. Die AppleEntwicklerprogramme werden in diesem Thema unter Anmelden für ein Entwicklerkonto behandelt. An den Mac über einen USB-Anschluss angeschlossenes iOS-Gerät (erforderlich zum Testen und Ausführen der iOS-App auf dem Gerät) SCHRITTE ZUM KONFIGURIEREN DES MAC FÜR DIE AUSFÜHRUNG EINER IOS-ANWENDUNG AUF DEM IOSSIMULATOR Um eine iOS-Anwendung an den iOS-Simulator auf dem Mac weiterzugeben, müssen Sie die folgenden Tools auf dem Mac installieren: Platform Assistant (PAServer) Embarcadero Technologies 11 Zum Debuggen und Testen verwendet RAD Studio den Platform Assistant, eine Anwendung, die Sie auf dem Mac installieren und ausführen müssen. Xcode Xcode, die Entwicklungs- und Debug-Umgebung auf dem Mac, stellt die für die Entwicklung erforderlichen Dateien für Mac OS X- und iOSAnwendungen bereit. SCHRITT 1: INSTALLIEREN DES "PLATFORM ASSISTANT" Wie oben erwähnt, muss der "Platform Assistant" auf dem Mac ausgeführt werden, wenn Sie eine iOS-App vom PC an den iOS-Simulator oder ein iOSGerät weitergeben. Das Mac OS X-Installationsprogramm für den "Platform Assistant" heißt RADPAServerXE4.pkg und befindet sich an zwei Orten: Im Ordner PAServer im RAD Studio-Installationsverzeichnis. Zum Beispiel: C:\Programme\Embarcadero\RAD Studio\n.n\PAServer\RADPAServerXE4.pkg. Im Web zum Herunterladen auf den Mac: http://installers.codegear.com/release/radstudio/11.0/PAServer/RADPASer verXE4.pkg Embarcadero Technologies 12 Weitere Einzelheiten finden Sie unter Installieren des Platform Assistant auf dem Mac. SCHRITT 2: AUSFÜHREN DES "PLATFORM ASSISTANT" Aktivieren Sie auf dem Mac im Finder die .app-Datei (RAD PAServer XE4.app) wie folgt: 1. Navigieren Sie zum obersten Applications-Ordner. 2. Doppelklicken Sie auf RAD PAServer XE4.app, um den "Platform Assistant" zu starten. Das Terminal-Fenster wird mit dem "Platform Assistant"-Banner und der Passworteingabeaufforderung angezeigt: Remote-Profil-Passwort <Eingabetaste für kein Passwort>: Embarcadero Technologies 13 3. Als Nächstes werden Sie aufgefordert, Ihr Mac-Benutzerpasswort einzugeben, damit der "Platform Assistant" Ihre Anwendung debuggen (die Steuerung eines anderen Prozesses übernehmen) kann. Geben Sie Ihr Passwort ein, und wählen Sie Take Control. Weitere Einzelheiten zum Ausführen des "Platform Assistant" finden Sie unter Ausführen des Platform Assistant auf dem Mac. SCHRITT 3: INSTALLIEREN VON XCODE AUF DEM MAC Xcode, die Entwicklungs- und Debug-Umgebung auf dem Mac, stellt die erforderlichen Entwicklungsdateien für Mac OS X- und iOS-Anwendungen bereit. Xcode kann von einer der folgenden Quellen installiert werden: Doppelklicken Sie zum Installieren von Xcode auf Ihrem System auf der Mac OS X-Installations-DVD unter dem Verzeichnis für optionale Installationen auf Xcode.mpkg. Laden Sie Xcode kostenlos aus dem Mac App Store herunter. Als registrierter Apple-Entwickler können Sie die kostenlose Version von Xcode als Paket (.dmg) herunterladen. So registrieren Sie sich und laden Xcode herunter: 1. Registrieren Sie sich (kostenlos) als Apple-Entwickler unter http://developer.apple.com/programs/register/. 2. Laden Sie Xcode als Paket von https://developer.apple.com/downloads herunter. NÄCHSTE SCHRITTE Sie haben Ihren Mac für die Ausführung einer iOS-Anwendung auf dem iOSSimulator konfiguriert. Embarcadero Technologies 14 Unter iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Windows-PC finden Sie Informationen zum Ausführen einer iOSAnwendung auf dem iOS-Simulator und zum Fertigstellen der Konfiguration in der RAD Studio-IDE. Führen Sie die folgenden Schritte aus, um die iOS-Anwendung auf Ihrem iOS-Gerät auszuführen und die Konfiguration auf dem Mac fertigzustellen. Sie können diese Schritte nach dem Testen der Anwendung auf dem iOSSimulator ausführen. WEITERE SCHRITTE ZUM KONFIGURIEREN DES MAC FÜR DIE AUSFÜHRUNG EINER IOS-ANWENDUNG AUF DEM IOSSIMULATOR Anhand der folgenden Schritte können Sie eine iOS-Anwendung auf Ihrem iOSGerät ausführen. SCHRITT 1: INSTALLIEREN DER XCODE-BEFEHLSZEILEN-TOOLS AUF EINEM MAC So installieren Sie die erforderlichen Xcode-Tools über Xcode auf dem Mac: 1. Starten Sie Xcode auf dem Mac. 2. Wählen Sie im Xcode-Menü Preferences aus. Embarcadero Technologies 15 3. Klicken Sie im Bereich General auf Downloads. 4. Aktivieren Sie im Fenster Downloads die Registerkarte Components. 5. Klicken Sie neben Command Line Tools auf die Schaltfläche Install. Während der Installation werden Sie nach Ihren Apple-EntwicklerAnmeldedaten gefragt. Weitere Einzelheiten finden Sie unter Xcode-Befehlszeilen-Tools. SCHRITT 2: ANMELDEN FÜR EIN ENTWICKLERKONTO Für das Erzeugen, Ausführen, Debuggen und Bereitstellen von Anwendungen für iOS müssen Sie Mitglied bei einem der iOS-Entwicklerprogramme sein. Für die Mitgliedschaft bei einem Entwicklerprogramm stehen folgende Möglichkeiten zur Verfügung: Als Einzelentwickler. Als Mitglied (oder Leiter) eines Teams in einem Unternehmens- oder Universitätsprogramm. Weitere Einzelheiten finden Sie unter Beitreten zu einem iOSEntwicklerprogramm. SCHRITT 3: ANFORDERN, HERUNTERLADEN UND INSTALLIEREN IHRES ENTWICKLUNGSZERTIFIKATS Anwendungen, die auf dem Gerät (oder auf dem iOS-Simulator) bereitgestellt werden, müssen vor deren Ausführung verschlüsselt signiert werden. Das Entwicklungszertifikat enthält die für die Signierung von Anwendungen erforderlichen Informationen. Jede Einzelperson (ein einzelner Entwickler oder Embarcadero Technologies 16 ein Teammitglied) muss über ein eindeutiges Entwicklungszertifikat verfügen, das für mehrere Anwendungen verwendet werden kann. Für Entwicklungsteams müssen Entwicklungszertifikate von jedem Teammitglied angefordert werden, und diese Anforderungen müssen von einem Teamadministrator genehmigt werden. Anfordern, Herunterladen und Installieren Ihres Zertifikats 1. Wählen Sie in der Anwendung Schlüsselbundverwaltung auf dem Mac aus dem Menü Schlüsselbundverwaltung: Zertifikatsassistent > Zertifikat einer Zertifizierungsinstanz anfordern aus. Speichern Sie die Zertifikatsanforderung als Datei, und senden Sie diese Datei dann an Ihre Zertifizierungsinstanz durch Hochladen an das Apple iOS provisioning portal (iOS-Bereitstellungsportal). Wenn Sie Mitglied eines Entwicklungsteams für ein Unternehmens/Organisationsprogramm sind, muss Ihr Teamadministrator Ihre Anforderung genehmigen. Nach der Genehmigung durch den Teamadministrator können Sie das Zertifikat herunterladen. o Wenn Sie Einzelentwickler sind, sollte kurz nach Ihrer Anforderung eine Option zum Herunterladen Ihres Zertifikats angezeigt werden. Einzelheiten dazu finden Sie in der Apple-Dokumentation unter: Creating signing certificates (Erstellen von Signierungszertifikaten). 2. Wechseln Sie zum iOS Provisioning Portal (iOS-Bereitstellungsportal). Wenn sich der Status von Submitted in Issued geändert hat, können Sie das Entwicklungszertifikat herunterladen. o Embarcadero Technologies 17 3. Rufen Sie das Entwicklungszertifikat durch einen Doppelklick ab. Es wird automatisch in der Anwendung Schlüsselbundverwaltung geladen. SCHRITT 4: REGISTRIEREN IHRES GERÄTS FÜR DIE BEREITSTELLUNG Bevor auf einem Gerät Benutzeranwendungen ausgeführt werden können, muss es im Apple Provisioning Portal (Apple-Bereitstellungsportal) registriert werden. Geräte werden anhand der eindeutigen Geräte-ID (Unique Device ID, UDID) registriert. Die UDID wird mit Xcode wie folgt ermittelt: 1. 2. 3. 4. Schließen Sie Ihr iOS-Gerät an Ihren Mac-Computer an. Öffnen Sie Xcode und dann den Organizer (Fenster > Organizer). Klicken Sie auf der Registerkarte Geräte auf Ihr Gerät. Neben der Beschriftung Bezeichner befindet sich eine Zeichenfolge: Diese Zeichenfolge ist die UDID Ihres Geräts. o o Wenn Sie Einzelentwickler sind, registrieren Sie Ihr Gerät, indem Sie die UDID auf der Registerkarte "Devices" im Apple Provisioning Portal (Apple-Bereitstellungsportal) angeben. Wenn Sie Teil eines Unternehmens/Organisationsteams sind, bitten Sie Ihren Teamadministrator, Ihr Gerät zu registrieren. Embarcadero Technologies 18 Schritt 5: Erstellen und Installieren eines Bereitstellungsprofils Über Bereitstellungsprofile werden Entwickler und Geräte mit einem Entwicklungsteam verknüpft. Dieses Bereitstellungsprofil ist zum Ausführen von Anwendungen auf einem iOS-Gerät erforderlich. Wenn Sie Einzelentwickler sind, müssen Sie ein Bereitstellungsprofil erstellen. Genaue Informationen dazu finden Sie unter: Creating and Downloading a Distribution Provisioning Profile (Erstellen und Herunterladen eines Bereitstellungsprofils für die Weitergabe). Wenn Sie Teil eines Unternehmens/Organisationsteams sind, müssen Ihre Teamadministratoren ein Bereitstellungsprofil erstellen, das Sie verwenden können. Das erstellte Bereitstellungsprofil muss wie folgt in Xcode installiert werden: 1. Öffnen Sie Xcode und dann den Organizer (Fenster > Organizer) auf dem Mac. 2. Wählen Sie im Abschnitt Library den Eintrag Provisioning Profiles aus, und klicken Sie auf Refresh. 3. Xcode fordert Sie zur Eingabe Ihrer Apple-ID auf. Geben Sie Ihre Anmeldeinformationen ein, und wählen Sie Log in. Die für Sie verfügbaren Bereitstellungsprofile werden in Ihr Xcode installiert: 4. Wählen Sie ein gültiges iOS-Bereitstellungsprofil aus, und ziehen Sie es in die Bereitstellungsprofile für Ihr Testgerät. Sie haben Ihren Mac für die Ausführung der iOS-Anwendung auf Ihrem iOSGerät konfiguriert. Embarcadero Technologies 19 Informationen zum Ausführen der iOS-Anwendung und Fertigstellen der Konfiguration in der RAD Studio-IDE finden Sie unter iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Windows-PC. Wenn Sie Ihren PC zur Ausführung der Anwendung auf dem iOS-Simulator konfiguriert haben, können Sie diesen Schritt überspringen. SIEHE AUCH iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem WindowsPC Paserver: Die Platform Assistant Server-Anwendung Apple Developer Program (Apple-Entwicklerprogramm) iOS Developer Program (iOS-Entwicklerprogramm) Creating and Configuring App IDs (Erstellen und Konfigurieren von AppIDs) Creating signing certificates (Erstellen von Signierungszertifikaten) iOS Provisioning Portal (iOS-Bereitstellungsportal) Devices tab of the Apple Provisioning Portal (Apple-Bereitstellungsportal) Create an Apple ID (Erstellen einer Apple-ID) Creating and Downloading a Distribution Provisioning Profile (Erstellen und Herunterladen eines Bereitstellungsprofils für die Weitergabe) Installieren des Platform Assistant auf dem Mac Ausführen des Platform Assistant auf dem Mac Embarcadero Technologies 20 IOS-TUTORIAL: KONFIGURIEREN DER ENTWICKLUNGSUMGEBUNG AUF DEM WINDOWS-PC Bevor Sie mit diesem Tutorial beginnen, sollten Sie das folgende Tutorial durcharbeiten: iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Mac FireMonkey-Anwendungen für die iOS-Zielplattform werden anfänglich mit dem iOS-Simulator auf dem Mac getestet. Im zweiten Teil des Tests wird die Zielplattform iOS-Gerät verwendet, für die ein iOS-Gerät am Mac angeschlossen sein muss. Für die Bereitstellung einer iOS-Anwendung auf Ihrem Gerät zum Debuggen und Testen verwendet RAD Studio den Platform Assistant, den Sie auf dem Mac installieren und ausführen müssen. In diesem Abschnitt werden die Schritte zum Einrichten der Entwicklungsumgebung nach der Konfiguration der Umgebung auf dem Mac beschrieben. Embarcadero Technologies 21 KONFIGURIEREN DER RAD STUDIO-UMGEBUNG Anhand der folgenden Konfigurationsschritte können Sie die iOS-Entwicklung mit RAD Studio beschleunigen. ERSTELLEN EINES VERBINDUNGSPROFILS FÜR DEN MAC 1. Öffnen Sie Tools > Optionen > Umgebungsoptionen > VerbindungsprofilManager. 2. Wählen Sie Hinzufügen: 3. Der Experte Verbindungsprofil erstellen wird angezeigt. Legen Sie einen Namen für das Verbindungsprofil, z.B. "Mein Mac", fest. Wählen Sie als Plattform OS X aus, und klicken Sie dann auf Weiter: Embarcadero Technologies 22 4. Geben Sie auf der Seite "Host-Computer-Information" den Namen oder die IP-Adresse des Host-Macs, eine Port-Nummer (der Standard-Port 64211 funktioniert in der Regel) und ein optionales Passwort (wenn Sie eins verwenden möchten) an. 5. Klicken Sie auf Verbindung testen, und überprüfen Sie, ob das Verbindungsprofil ohne Fehler ausgeführt wird (die Meldung "Verbindung zu <Hostname> auf Port <Portnummer> erfolgreich ausgeführt" sollte angezeigt werden): Embarcadero Technologies 23 HINZUFÜGEN EINES SDK ZU DEM ENTWICKLUNGSSYSTEM FÜR DAS AN DEN MAC ANGESCHLOSSENE IOS-GERÄT 1. Öffnen Sie Tools > Optionen > Umgebungsoptionen > SDK-Manager. 2. Wählen Sie Hinzufügen. 3. Wählen Sie im Dialogfeld Neues SDK hinzufügen als Plattform iOS-Gerät aus. 4. Wählen Sie eine Plattform für die Verbindung aus (z.B. "iOS-Gerät"). 5. Nach Auswahl der Plattform füllt die IDE ein Profil (z.B. "Mein Mac") und das Kombinationsfeld SDK-Version auswählen mit der Liste der SDK-Versionen, Embarcadero Technologies 24 die auf dem Computer verfügbar sind, auf dem der Platform Assistant Server ausgeführt wird: Klicken Sie auf OK, um das Dialogfeld zu schließen. SIEHE AUCH iOS-Tutorial: Erstellen einer FireMonkey iOS-Anwendung Arbeiten mit einem Mac und einem PC Ausführen von iOS-Anwendungen auf einem iOS-Gerät Ausführen von Anwendungen auf dem iOS-Simulator Plattformvoraussetzungen für FireMonkey Erstellen einer FireMonkey iOS-App Mac OS X-Anwendungsentwicklung Erstellen einer FireMonkey-Anwendung Seiten auf "Apple developer.apple.com" o iOS Developer Library o iOS Developer Library: Getting Started o iOS Dev Center o Provisioning an iOS Device o Preparing Your iOS App for Distribution in the App Store o iAd Network Embarcadero Technologies 25 IOS-TUTORIAL: ERSTELLEN EINER FIREMONKEY IOS-ANWENDUNG In diesem Thema wird das Erstellen einer "Hello World"-FireMonkey-Anwendung für die iOS-Zielplattform beschrieben. VORBEREITUNGEN Um iOS-Anwendungen mit RAD Studio zu erstellen, müssen Sie einige wichtige Konfigurationsschritte ausführen. In diesem Tutorial wird davon ausgegangen, dass Sie bereits alle erforderlichen Konfigurationsschritte ausgeführt haben. Einzelheiten finden Sie unter: iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Mac iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Windows-PC SCHRITT 1: ERSTELLEN EINER NEUEN FIREMONKEY-HDANWENDUNG FÜR IOS 1. Wählen Sie Datei > Neu >Mobile FireMonkey-Anwendung - Delphi: 2. Wählen Sie Leere Anwendung. Embarcadero Technologies 26 Im Designer für mobile FireMonkey-Formulare wird ein neues Formular für eine iOS-Anwendung angezeigt. SCHRITT 2: PLATZIEREN VON KOMPONENTEN AUF DEM FIREMONKEY-IOS-FORMULAR Der erste Schritt beim Erstellen einer FireMonkey-iOS-Anwendung besteht, genau wie bei Desktop-Anwendungen, aus dem Entwerfen der Benutzeroberfläche. In der IDE stehen viele wiederverwendbare Komponenten zum Erstellen von Benutzeroberflächen zur Verfügung. 1. Erweitern Sie in der Tool-Palette mit der Maus die Kategorie Standard durch Klicken auf das Plus-Zeichen (+) neben dem Kategorienamen. 2. Wählen Sie die Komponente TEdit aus, und legen Sie sie im FormularDesigner ab. Eine Instanz der TEdit-Komponente wird im Formular angezeigt: Embarcadero Technologies 27 Wiederholen Sie diese Schritte, aber fügen Sie jetzt dem Formular eine TLabelund eine TButton-Komponente hinzu. Wählen Sie die Schaltfläche aus, und ändern Sie im Objektinspektor die Eigenschaft Text in "Say Hello". Jetzt sollten die drei Komponenten im Formular-Designer angezeigt werden: Nach dem Ablegen dieser Komponenten im Formular-Designer werden deren Namen automatisch von der IDE festgelegt. Um den Namen einer Komponente anzuzeigen oder zu ändern, klicken Sie im Formular-Designer auf die entsprechende Komponente, und suchen Sie im Objektinspektor und in der Strukturansicht deren Eigenschaft Name: Embarcadero Technologies 28 Für TButton-Komponenten wird der Komponentenname standardmäßig auf Button1 gesetzt (oder auf Button2, Button3, je nachdem, wie viele TButtons Sie in dieser Anwendung erstellt haben). Auch das Formular, auf dem sich diese Komponenten befinden, hat einen Namen. Klicken Sie auf den Hintergrund des Designers für mobile FireMonkeyFormulare, und wählen Sie im Objektinspektor die Eigenschaft Name aus. Der Name des Formulars Form1 (oder Form2, Form3,...) wird angezeigt. In der Strukturansicht können Sie den Namen des Formulars auch schnell finden: Sie können durch Klicken auf die Registerkarte Code im unteren Bereich des Formular-Designers oder durch Drücken der Taste F12 schnell zum Quellcode wechseln. Sie können jederzeit zwischen dem Formular-Designer und dem Quelltext-Editor wechseln: Embarcadero Technologies 29 Im Quelltext-Editor wird der Quellcode angezeigt, den die IDE erzeugt hat. Es sollten die drei festgelegten Komponenten (Edit1, Label1 und Button1) vorhanden sein: Embarcadero Technologies 30 SCHRITT 3: SCHREIBEN EINER DELPHIEREIGNISBEHANDLUNGSROUTINE FÜR EINEN KLICK AUF DIE SCHALTFLÄCHE DURCH DEN BENUTZER Im nächsten Schritt wird eine Ereignisbehandlungsroutine für die TButtonKomponente erstellt. Ereignisbehandlungsroutinen können für FireMonkey-iOSAnwendungen auf die gleiche Weise wie für Desktop-Anwendungen definiert werden. Das typische Ereignis für TButton-Komponenten ist das Klicken auf die Schaltfläche. Doppelklicken Sie im Formular-Designer auf die Schaltfläche, und RAD Studio erstellt den Skeleton-Code, den Sie zum Implementieren einer Ereignisbehandlungsroutine für das Klickereignis der Schaltfläche verwenden können: Nun können Sie zwischen den Anweisungen begin und end der Methode Button1Click Reaktionen implementieren. Das folgende Codefragment implementiert eine Reaktion, die ein kleines Dialogfeld mit dem Text "Hello + <in das Eingabefeld eingegebener Name>" anzeigt: Label1.Text := 'Hello ' + Edit1.Text + ' !'; In Delphi müssen die Anführungszeichen um String-Literale einfache gerade Anführungszeichen sein (z.B. 'string'). Mit dem Pluszeichen (+) können Strings verkettet werden. Wenn Sie in einem String ein einfaches Anführungszeichen benötigen, können Sie zwei aufeinanderfolgende einfache Anführungszeichen verwenden, was ein einzelnes Anführungszeichen ergibt. Während Sie den Code eingeben, werden Kurzhinweise zur Art der Parameter, die Sie angeben müssen, angezeigt. In den Kurzhinweisen wird auch die Art der Member angezeigt, die in einer gegebenen Klasse unterstützt werden. Embarcadero Technologies 31 SCHRITT 4: TESTEN DER IOS-ANWENDUNG AUF DEM MAC (IOS-SIMULATOR) Die Implementierung dieser Anwendung ist abgeschlossen, und Sie können sie jetzt ausführen. Klicken Sie dazu in der IDE auf die Schaltfläche Start ( ), oder drücken Sie F9, oder wählen Sie im Hauptmenü von RAD Studio Start > Start. Standardmäßig werden FireMonkey-iOS-Anwendungen auf der iOS-SimulatorZielplattform ausgeführt. Sie können in der Projektverwaltung die Zielplattform bestätigen: Wenn Sie die Anwendung ausführen, wird sie auf dem Mac und dann für den iOS-Simulator auf dem Mac bereitgestellt. Für dieses Beispiel wird ein Formular mit einem Eingabefeld und einer Schaltfläche angezeigt. Geben Sie in das Eingabefeld Text ein, und klicken Sie auf die Schaltfläche Say Hello: Embarcadero Technologies 32 SCHRITT 5: TESTEN DER IOS-ANWENDUNG AUF EINEM ANGESCHLOSSENEN IOS-GERÄT Wenn Sie vor dem Erstellen des neuen Projekts die in iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Mac und iOS-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Windows-PC beschriebenen Schritte ausgeführt haben, können Sie jetzt die iOS-App auf einem iOS-Gerät testen, das über ein USB-Kabel an den Mac angeschlossen ist. Wählen Sie zum Ausführen der iOS-App auf einem angeschlossenen iOS-Gerät zuerst die Zielplattform iOS-Gerät aus, damit der "Platform Assistant" die Anwendung für das angeschlossene iOS-Gerät bereitstellt: Embarcadero Technologies 33 Nach Auswahl der iOS-Gerät-Zielplattform führen Sie die iOS-App durch Klicken auf die Schaltfläche Start in der IDE, durch Drücken von F9 oder Auswahl von Start > Start aus. Auf Ihrem Mac erscheint möglicherweise ein Dialogfeld, in dem Sie die Codesignierung Ihrer iOS-App bestätigen müssen. Wählen Sie entweder "Always Allow" oder "Allow", um Ihre App zu signieren. Nehmen Sie dann Ihr iOS-Gerät zur Hand, und warten Sie bis die FireMonkey-iOSApp angezeigt wird. Das FireMonkey-Startbild (aus $(BDS)\bin\Artwork\iOS) wird angezeigt: SIEHE AUCH iOS-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen in iOS-Anwendungen Mobile iOS-Anwendungsentwicklung Mac OS X-Anwendungsentwicklung Embarcadero Technologies 34 IOS-TUTORIAL: VERWENDEN VON SCHALTFLÄCHEN-KOMPONENTEN MIT UNTERSCHIEDLICHEN STILEN IN IOSANWENDUNGEN SCHALTFLÄCHEN IN FIREMONKEY-ANWENDUNGEN FÜR IOS FireMonkey definiert verschiedene Schaltflächentypen, und Sie können alle diese verschiedenen Typen mit den hier beschriebenen Schritten verwenden. Zu den FireMonkey-Schaltflächen zählen TButton und TSpeedButton. Im Folgenden sind einige Beispiele verschiedener Stile für SchaltflächenKomponenten in unterschiedlichen Benutzeroberflächen dargestellt. Schaltflächen im Formular: o o Schaltflächen in der Navigationsleiste (Symbolleiste): o o o o o o Embarcadero Technologies 35 DEFINIEREN DES AUSSEHENS UND VERHALTENS VON SCHALTFLÄCHEN-KOMPONENTEN Nach dem Platzieren einer neuen Schaltfläche im Designer für mobile FireMonkey-Formulare können Sie im Objektinspektor einige wichtige Eigenschaften für eine ausgewählte Komponente festlegen. Wählen Sie eine Komponente (in diesem Fall: eine Schaltfläche) aus, und suchen Sie dann bestimmte Eigenschaften, und ändern Sie deren Wert folgendermaßen: Ändern Sie den Text, der auf der Schaltflächenoberfläche angezeigt wird, indem Sie den Wert der Eigenschaft Text aktualisieren. Ändern Sie den Wert der Eigenschaften Position.X und Position.Y (oder ziehen Sie die Komponente mit der Maus). Ändern Sie den Wert der Eigenschaften Height und/oder Width (oder ziehen Sie mit der Maus am Rand die Komponente). Klicken Sie in der Eigenschaft StyleLookup auf den nach unten weisenden Pfeil. In der Dropdown-Liste StyleLookup können Sie einen vordefinierten Stil auf Basis der Verwendung der Komponente auswählen: Embarcadero Technologies 36 ERSTELLEN VON SEGMENTIERTEN STEUERELEMENTEN MIT SCHALTFLÄCHEN-KOMPONENTEN FireMonkey verwendet zum Definieren eines segmentierten Steuerelements die Schaltflächen-Komponente. Mit segmentierten Steuerelementen können Benutzer einen Wert aus mehreren Optionen auswählen. Führen Sie folgende Schritte durch, um ein segmentiertes Steuerelement zu definieren: Embarcadero Technologies 37 1. Platzieren Sie drei TSpeedButton-Komponenten aus der Tool-Palette auf dem Formular. Ordnen Sie die TSpeedButton-Komponenten mit der Maus nebeneinander an: 2. Wählen Sie die erste Komponente aus, und ändern Sie deren Eigenschaft StyleLookup in segmentedbuttonleft: 3. Wählen Sie die zweite Komponente aus, und ändern Sie deren Eigenschaft StyleLookup in segmentedbuttonmiddle: 4. Wählen Sie die dritte Komponente aus, und ändern Sie deren Eigenschaft StyleLookup in segmentedbuttonright: Alle drei Schaltflächen sehen nun wie ein segmentiertes Steuerelement aus: 5. Wählen Sie jede Komponente aus, und ändern Sie die Eigenschaft Text beliebig: 6. Klicken und ziehen Sie den Mauszeiger über die drei Schaltflächen, um diese Komponenten auszuwählen: 7. Setzen Sie die Eigenschaft GroupName auf einen eindeutigen Namen, wie z.B. LocationSegments: Embarcadero Technologies 38 8. Setzen Sie die Eigenschaft IsPressed einer Komponente auf True, um eine dieser Komponenten standardmäßig als Gedrückt festzulegen: ERSTELLEN EINER BEREICHSLEISTE (SCOPE BAR) AUF EINER SYMBOLLEISTEN-KOMPONENTE Sie können ein segmentiertes Steuerelement auf einer Symbolleiste erstellen; ein solches Steuerelement wird auch Scope Bar (Bereichsleiste) genannt, mit der der Suchbereich gesteuert werden kann. Verwenden Sie dieselben TSpeedButton-Steuerelemente wie in den vorhergehenden Schritten, aber mit den folgenden Werten für die Eigenschaft StyleLookup. toolbuttonleft toolbuttonmiddle toolbuttonright SIEHE AUCH iOS-Tutorial: Erstellen einer FireMonkey iOS-Anwendung FMX.StdCtrls.TButton FMX.Controls.TStyledControl.StyleLookup FMX.StdCtrls.TToolBar Embarcadero Technologies 39 IOS-TUTORIAL: VERWENDEN VON KALENDERKOMPONENTEN ZUR DATUMSAUSWAHL IN IOSANWENDUNGEN KALENDER IN FIREMONKEY-IOS-ANWENDUNGEN FireMonkey kapselt mit der Komponente TCalenderEdit Kalender-Komponenten oder Datumsauswahlfelder für die iOS-Zielplattform: Anhand der folgenden einfachen Schritte können Sie die Komponente TCalenderEdit schnell einsetzen: 1. Wählen Sie in der Tool-Palette die Komponente TCalenderEdit aus, und legen Sie sie im Designer für mobile FireMonkey-Formulare ab. Geben Sie in das Suchfeld ( ) der Tool-Palette die ersten Zeichen ("Cale") ein, um die Komponente schnell zu finden: Nach dem Ablegen der TCalenderEdit-Komponente wird sie im Designer für mobile FireMonkey-Formulare angezeigt. Embarcadero Technologies 40 2. Im Grunde ist das alles. Führen Sie die Anwendung entweder auf dem iOSSimulator oder auf dem angeschlossenen iOS-Gerät aus. Wenn Sie auf TCalenderEdit tippen, wird das Kalender-Steuerelement angezeigt, und Sie können ein Datum auswählen. IMPLEMENTIEREN EINER EREIGNISBEHANDLUNGSROUTINE FÜR DATUMSÄNDERUNGEN DURCH DEN BENUTZER Nach dem Ändern des Datums durch den Benutzer wird das Ereignis OnChange ausgelöst. Sie können eine Ereignisbehandlungsroutine für das Ereignis OnChange implementieren, um auf die Benutzeraktion zu reagieren. So implementieren Sie eine OnChange-Ereignisbehandlungsroutine: 1. Wählen Sie die Komponente TCalenderEdit aus. 2. Öffnen Sie im Objektinspektor die Seite Ereignisse, und doppelklicken Sie auf den leeren Bereich neben OnChange. 3. Schreiben Sie folgenden Code: procedure TForm25.CalendarEdit1Change(Sender: TObject); begin ShowMessage(FormatDateTime('dddddd', CalendarEdit1.Date)); end; Dieser Code zeigt das Meldungsdialogfeld mit dem ausgewählten Datum an. Die Funktion FormatDateTime wandelt das ausgewählte Datum in ein bestimmtes Format um (in diesem Fall in das lange Datumsformat dddddd): Embarcadero Technologies 41 SIEHE AUCH iOS-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen in iOS-Anwendungen iOS-Tutorial: Verwenden von Kombinationsfeld-Komponenten zur Auswahl von Einträgen in iOS-Anwendungen Unterstützung für Datum und Uhrzeit Routinen für die Typumwandlung Embarcadero Technologies 42 IOS-TUTORIAL: VERWENDEN VON KOMBINATIONSFELD-KOMPONENTEN ZUR AUSWAHL VON EINTRÄGEN IN IOSANWENDUNGEN IMPLEMENTIEREN EINER AUSWAHLKOMPONENTE IN FIREMONKEY-IOS-ANWENDUNGEN FireMonkey kapselt auf der iOS-Plattform Auswahlkomponenten mit der Komponente TComboBox: So legen Sie eine Auswahlkomponente und die Listeneinträge fest: 1. Wählen Sie Datei > Neu > Mobile FireMonkey-Anwendung - Delphi > Mobile HD-FireMonkey-Anwendung. 2. Wählen Sie in der Tool-Palette die Komponente TComboBox aus, und ziehen Sie sie in den Designer für mobile FireMonkey-Formulare. Geben Sie in das Suchfeld der Tool-Palette die ersten Zeichen ("Com") ein, um TComboBox schnell zu finden: Embarcadero Technologies 43 3. Nach dem Ablegen der TComboBox-Komponente wird sie im FormularDesigner angezeigt. Klicken Sie mit der rechten Maustaste auf die TComboBox-Komponente, und wählen Sie Eintrags-Editor...: 4. Klicken Sie mehrmals auf Eintrag hinzufügen, um Einträge hinzuzufügen. 5. Wählen Sie in der Strukturansicht den Eintrag ListBoxItem1 (den ersten Eintrag in der Liste) aus. 6. Bearbeiten Sie im Objektinspektor die Eigenschaft Text für ListBoxItem1. In diesem Beispiel (die 50 Staaten der USA) ist der erste Eintrag in der Liste "Alabama". Embarcadero Technologies 44 7. Bearbeiten Sie auch die anderen Einträge, z.B. Alaska, Arizona, Arkansas, California, Colorado usw. 8. Führen Sie die Anwendung entweder auf dem iOS-Simulator oder auf der iOS-Gerätezielplattform aus. Wenn Sie auf TComboBox tippen, wird die Auswahlkomponente angezeigt, und Sie können einen Eintrag auswählen. ERSTELLEN EINER EINTRAGSLISTE IM CODE Zum Erstellen einer Eintragsliste im Code können Sie die Methode Add wie folgt verwenden: procedure TForm27.FormCreate(Sender: TObject); begin ComboBox1.Items.Add('Alabama'); ComboBox1.Items.Add('Alaska'); ComboBox1.Items.Add('Arizona'); ComboBox1.Items.Add('Arkansas'); ComboBox1.Items.Add('California'); // Other states can be listed here ComboBox1.Items.Add('Virginia'); ComboBox1.Items.Add('Washington'); ComboBox1.Items.Add('West Virginia'); ComboBox1.Items.Add('Wisconsin'); ComboBox1.Items.Add('Wyoming'); end; Embarcadero Technologies 45 ANZEIGEN EINES BESTIMMTEN EINTRAGS Der aktuell ausgewählte Eintrag wird von der Eigenschaft ItemIndex festgelegt. ItemIndex ist ein Integerwert, der einen nullbasierten Index (d.h., das erste Element hat den Index 0) angibt. Zum Anzeigen der Liste, in der der fünfte Eintrag ("California" im folgenden Beispielcode) ausgewählt ist, geben Sie ItemIndex wie folgt an: procedure TForm27.FormCreate(Sender: TObject); begin ComboBox1.Items.Add('Alabama'); ComboBox1.Items.Add('Alaska'); ComboBox1.Items.Add('Arizona'); ComboBox1.Items.Add('Arkansas'); ComboBox1.Items.Add('California'); // Other states can be listed here // Index of 5th item is "4" ComboBox1.ItemIndex := 4; end; Wenn Sie den Indexwert nicht kennen, können Sie den Wert mit der Methode IndexOf folgendermaßen ermitteln: procedure TForm27.FormCreate(Sender: TObject); begin ComboBox1.Items.Add('Alabama'); ComboBox1.Items.Add('Alaska'); ComboBox1.Items.Add('Arizona'); ComboBox1.Items.Add('Arkansas'); ComboBox1.Items.Add('California'); // Other states can be listed here ComboBox1.ItemIndex := ComboBox1.Items.IndexOf('California'); end; IMPLEMENTIEREN EINER EREIGNISBEHANDLUNGSROUTINE FÜR DIE AUSWAHL DES BENUTZERS Wenn der Benutzer einen Eintrag ausgewählt hat, wird das Ereignis OnChange ausgelöst. Um auf die Benutzeraktion zu reagieren, können Sie eine Ereignisbehandlungsroutine für das Ereignis OnChange implementieren. So implementieren Sie eine OnChange-Ereignisbehandlungsroutine: Embarcadero Technologies 46 1. Wählen Sie die Komponente TComboBox aus. 2. Öffnen Sie im Objektinspektor die Seite Ereignisse, und doppelklicken Sie auf den leeren Bereich neben OnClick. 3. Der Quelltext-Editor wird angezeigt. Schreiben Sie folgenden Code: procedure TForm27.CalendarEdit1Change(Sender: TObject); begin ShowMessage(Format('Item %s at Index %d was selected. ', [ComboBox1.Selected.Text, ComboBox1.ItemIndex])); end; Diese Ereignisbehandlungsroutine zeigt ein Meldungsdialogfeld an, in dem der ausgewählte Eintrag angegeben ist. Die Funktion Format gibt einen formatierten String zurück, der sich aus einem Format-String und einem Array mit Argumenten zusammensetzt: SIEHE AUCH iOS-Tutorial: Verwenden von Kalender-Komponenten zur Datumsauswahl in iOS-Anwendungen iOS-Tutorial: Verwenden von Registerkarten-Komponenten zur Anzeige von Seiten in iOS-Anwendungen Mobile iOS-Anwendungsentwicklung Mac OS X-Anwendungsentwicklung Embarcadero Technologies 47 IOS-TUTORIAL: VERWENDEN VON WEBBROWSER-KOMPONENTEN IN IOSANWENDUNGEN VERWENDEN VON WEBBROWSER-KOMPONENTEN IN FIREMONKEY-IOS-ANWENDUNGEN Auf der iOS-Plattform kapselt FireMonkey die Webbrowser-Komponente als TWebBrowser-Komponente: In diesem Thema wird das Erstellen einer einfachen FireMonkey-WebbrowserAnwendung für iOS beschrieben. SCHRITT 1: ENTWERFEN DER BENUTZEROBERFLÄCHE 1. Wählen Sie Datei > Neu > Mobile FireMonkey-Anwendung - Delphi > Mobile HD-FireMonkey-Anwendung. 2. Wählen Sie in der Tool-Palette die Komponente TToolBar aus, und ziehen Sie sie in den Designer für mobile FireMonkey-Formulare. Geben Sie in das Embarcadero Technologies 48 Suchfeld der Tool-Palette einige Buchstaben (z.B. "tool") ein, um TToolBar schnell zu finden: 3. Nach dem Ablegen der Komponente wird die TToolBar-Komponente oben im Designer für mobile Formulare angezeigt: 4. Wählen Sie in der Tool-Palette die Komponente TButton aus, und legen Sie sie auf der TToolBar-Komponente ab. 5. Wählen Sie im Designer für mobile Formulare die SchaltflächenKomponente aus, und wählen Sie dann im Objektinspektor in der Eigenschaft StyleLookup den Eintrag priortoolbuttonbordered aus. Mit dem Wert priortoolbuttonbordered von StyleLookup für TButton wird eine "Zurück"-Schaltfläche im iOS-Stil hinzugefügt: Weitere Einzelheiten zum Auswählen eines Stils in FireMonkey-iOSAnwendungen finden Sie unter iOS-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen in iOSAnwendungen. 6. Wählen Sie in der Tool-Palette die Komponente TEdit aus, und legen Sie sie auf der TToolBar-Komponente ab. Passen Sie die Größe des TEditSteuerelements so an, dass es die gesamte Breite von ToolBar ausfüllt: Embarcadero Technologies 49 7. Wählen Sie in der Tool-Palette die Komponente TWebBrowser aus, und legen Sie sie auf dem Formular ab. 8. Wählen Sie die TWebBrowser-Komponente im Designer für mobile Formulare aus, und wählen Sie im Objektinspektor für die Eigenschaft Align den Wert alClient aus. Wenn Sie diese Schritte ausgeführt haben, sollte das Formular etwa folgendermaßen aussehen: SCHRITT 2: SCHREIBEN EINER EREIGNISBEHANDLUNGSROUTINE ZUM ÖFFNEN EINER WEBSEITE, WENN DER BENUTZER DEN URL IM EINGABESTEUERELEMENT ÄNDERT Im Unterschied zur Desktop-Plattform verwenden mobile Geräte die virtuelle Tastatur zur Eingabe von Text (siehe die folgende Abbildung). Der Benutzer kann die Aktion durch Klicken auf "Fertig" oder "Return" abschließen. Embarcadero Technologies 50 In FireMonkey sind viele Arten von Ereignisbehandlungsroutinen verfügbar, die die meisten Benutzeraktionen abdecken. Nach Auswahl der Schaltfläche "Fertig" sendet das FireMonkey-Framework ein OnChange-Ereignis an das TEditSteuerelement. Für die Schaltfläche "Return" gibt es kein bestimmtes Ereignis. In diesem Abschnitt werden Ereignisbehandlungsroutinen für beide Szenarien implementiert. IMPLEMENTIEREN EINER ALLGEMEINEN METHODE ZUM ÖFFNEN EINER WEBSEITE Implementieren Sie vor der Implementierung von Ereignisbehandlungsroutinen zuerst eine allgemeine Methode zum Öffnen einer Webseite auf Basis der Eigenschaft Text des TEdit-Steuerelements. 1. Erstellen Sie im Quelltext-Editor die folgende neue Zeile: procedure OpenURL; Embarcadero Technologies nach { Private-Deklarationen } 51 2. Drücken Sie STRG+UMSCHALT+C, um einen Platzhalter am Ende der Datei einzufügen: 3. Implementieren Sie die Methode OpenURL wie in dem folgenden Codefragment: IMPLEMENTIEREN EINER EREIGNISBEHANDLUNGSROUTINE FÜR DAS EREIGNIS "ONCHANGE" 1. Wählen Sie im Designer für mobile Formulare die Eingabe-Komponente aus, und doppelklicken Sie dann im Objektinspektor (Registerkarte Ereignisse) auf eine freie Stellen neben dem Ereignis OnChange, um die Ereignisbehandlungsroutine zu erstellen. Der Objektinspektor erstellt eine neue Ereignisbehandlungsroutine mit dem Namen Edit1Change: 2. Stellen Sie die Ereignisbehandlungsroutine fertig, indem Sie den folgenden Code hinzufügen: Embarcadero Technologies 52 IMPLEMENTIEREN EINER EREIGNISBEHANDLUNGSROUTINE ZUR UNTERSTÜTZUNG DER EINGABETASTE Für die Eingabetaste ist kein bestimmtes Ereignis definiert. Sie können aber solche Ereignisse mit dem Ereignis OnKeyDown überwachen. OnKeyDown stellt Informationen über die gedrückte Klasse durch mehrere Parameter in seiner Ereignisbehandlungsroutine bereit. Sie können dieses Ereignis folgendermaßen implementieren: IMPLEMENTIEREN EINER EREIGNISBEHANDLUNGSROUTINE FÜR DIE "ZURÜCK"SCHALTFLÄCHE Zum Implementieren einer Zurück-Schaltfläche für Ihren Webbrowser können Sie einfach die Methode GoBack für die Webbrowser-Komponente aufrufen: Das grundlegende Verhalten ist für diese Webbrowser-Anwendung jetzt implementiert. Führen Sie die Anwendung entweder auf dem iOS-Simulator oder auf einem iOS-Gerät aus. SCHRITT 3: AUSWÄHLEN DER GEEIGNETEN TASTATUR FÜR DIE WEBBROWSER-ANWENDUNG Nach dem ersten Ausführen Ihrer Webbrowser-Anwendung stellen Sie möglicherweise fest, dass die virtuelle Tastatur nicht optimal ist. iOS stellt die folgenden virtuellen Tastaturen bereit: Embarcadero Technologies 53 vktAlphabet vktDefault vktEmailAddress vktNamePhonePad vktNumberPad vktNumbersAnd Punctuation vktPhonePad vktURL Wählen Sie vktURL in der Eigenschaft KeyboardType als virtuelle Tastatur für das Eingabe-Steuerelement aus: SIEHE AUCH iOS-Tutorial: Verwenden von Kombinationsfeld-Komponenten zur Auswahl von Einträgen in iOS-Anwendungen TWebBrowser TToolBar TButton TEdit KeyboardType StyleLookup Embarcadero Technologies 54 IOS-TUTORIAL: VERWENDEN VON REGISTERKARTEN-KOMPONENTEN ZUR ANZEIGE VON SEITEN IN IOS-ANWENDUNGEN REGISTER IN FIREMONKEY-ANWENDUNGEN FÜR IOS Register werden von FMX.TabControl.TTabControl definiert. TTabControl ist ein Container zur Aufnahme von mehreren Registerkarten: Jede Registerkarte kann beliebige Steuerelemente als UI-Elemente enthalten. Sie können das Register für diese Seiten ausblenden und Seiten ohne Anzeige der Register ändern. Für jedes Register können Sie vordefinierte Symbole sowie benutzerdefinierte Symbole und einen Beschriftungstext festlegen. Register können am oberen oder unteren Rand des Steuerelements platziert werden. ENTWERFEN VON REGISTERKARTEN IM FORMULAR-DESIGNER Führen Sie mit der Komponente TTabControl die folgenden Schritte aus, um Registerkarten in einer Anwendung zu erstellen: 1. Erstellen Sie eine mobile FireMonkey-Anwendung. Wählen Sie beispielsweise Datei > Neu > Mobile FireMonkey-Anwendung - Delphi > Mobile HD-FireMonkey-Anwendung. Verwenden Sie die StandardZielplattform für iPhone (iOS-Simulator). 2. Wählen Sie in der Tool-Palette die Komponente TTabControl aus: Embarcadero Technologies 55 3. Nach dem Ablegen der TTabControl-Komponente wird im Designer für mobile FireMonkey-Formulare ein leeres TabControl angezeigt: 4. Normalerweise wird für Anwendungen mit TabControl-Steuerelementen zum Anzeigen der Seiten der Vollbildmodus verwendet. Dazu müssen Sie die Standardausrichtung von TabControl ändern. Ändern Sie im Objektinspektor die Eigenschaft Align von TabControl in alClient: Embarcadero Technologies 56 5. Klicken Sie mit der rechten Maustaste auf das TabControl-Steuerelement, und wählen Sie im Kontextmenü Eintrags-Editor.... 6. Klicken Sie dreimal auf Eintrag hinzufügen, damit drei Instanzen von TabItem erstellt werden. Schließen Sie das Dialogfeld. 7. Wählen Sie im Designer für mobile FireMonkey-Formulare das erste TabItem aus, und ändern Sie dessen Eigenschaft StyleLookup in tabitembookmarks: Embarcadero Technologies 57 8. Sie können auf jeder Seite beliebige Komponenten platzieren. Um im Formular-Designer zu einer anderen Seite zu wechseln, klicken Sie einfach auf entsprechende Register, oder ändern Sie im Objektinspektor die Eigenschaft ActiveTab: 9. Um die Position von Registern zu ändern, wählen Sie die Eigenschaft TabPosition der TabControls-Komponente aus. Sie können im Objektinspektor für jedes Register einen der folgenden Werte der Eigenschaft TabPosition auswählen: Embarcadero Technologies 58 tpTop Register werden oben angezeigt. tpBottom Register werden unten angezeigt. tpDots tpNone Es werden keine Register angezeigt. Punkte oder die Ellipse ([...]) werden angezeigt, um anzugeben, dass weitere Seiten vorhanden sind. Es werden zur Laufzeit keine Register oder Punkte angezeigt, obwohl sie zur Entwurfszeit angezeigt werden. Seiten können nur durch Code oder eine Aktion geändert werden. VERWENDEN VON BENUTZERDEFINIERTEN SYMBOLEN FÜR REGISTER Sie können benutzerdefinierte Symbole sowie benutzerdefinierten Text für Registerkarten anhand der folgenden Schritte verwenden: Embarcadero Technologies 59 1. Platzieren Sie eine TabControl-Komponente auf dem Formular, legen Sie deren Ausrichtung fest (Eigenschaft Align), und erstellen Sie mehrere Register: 2. Wählen Sie ein Register aus, und klicken Sie im Objektinspektor im Feld "Bitmap" der Eigenschaft CustomIcon von TTabItem auf die EllipsenSchaltfläche [...]: 3. Wählen Sie im Dropdown-Menü Bearbeiten...: 4. Klicken Sie im Bitmap-Editor auf die Schaltfläche Laden..., und wählen Sie eine PNG-Datei aus. Die empfohlene Größe beträgt für die normale Auflösung 30x30 Pixel und für die hohe Auflösung 60x60 Pixel (das Symbol BitmapHiRes wird im nächsten Schritt festgelegt): Embarcadero Technologies 60 5. Schließen Sie den Bitmap-Editor, und wählen Sie im Objektinspektor das Symbol aus, das Sie für das Feld BitmapHiRes (hohe Auflösung) von CustomIcon verwenden möchten. 6. Wählen Sie im Objektinspektor für die Eigenschaft StyleLookup den Eintrag tabitemcustom aus. 7. Ändern Sie in der Eigenschaft Text den Text des Registers. Embarcadero Technologies 61 Die in diesem Tutorial verwendeten benutzerdefinierten Glyphen finden Sie im Verzeichnis $(BDS)\Images\GlyFX. Nach Festlegung eines benutzerdefinierten Symbols erzeugt das FireMonkeyFramework anhand der angegebenen PNG-Datei ein Bild für den ausgewählten Zustand und ein Bild für den nicht ausgewählten (abgedunkelten) Zustand. Diese Transformation wird mit dem Alphakanal der Bitmap-Daten durchgeführt. Zum Beispiel: Originalbild Ausgewähltes Bild Nicht ausgewähltes Bild DEFINIEREN VON STEUERELEMENTEN IN EINEM TABCONTROL Wie bereits erwähnt, kann jede Registerkarte eine beliebige Anzahl von Steuerelementen, einschließlich eines weiteren TabControl, enthalten. In solchen Fällen können Sie in der Strukturansicht verschiedene Registerkarten schnell durchsuchen und verwalten: Embarcadero Technologies 62 Embarcadero Technologies 63 WECHSELN DER SEITE ZUR LAUFZEIT DURCH TIPPEN AUF DAS REGISTER Wenn Register angezeigt werden (wenn die Eigenschaft TabPosition nicht auf tpNone gesetzt ist), können Endbenutzer einfach auf die Register tippen, um zwischen Seiten zu wechseln. DURCH AKTIONEN UND EINE AKTIONSLISTE Aktionen sind einem oder mehreren Elementen der Benutzeroberfläche zugeordnet, z.B. Menübefehlen, Schaltflächen und Symbolleisten. Aktionen dienen zwei Zwecken: Aktionen stellen allgemeine Eigenschaften für Benutzeroberflächenelemente dar, z.B. ob ein Steuerelement oder ein Kontrollkästchen aktiviert ist. Aktionen reagieren auf das Auslösen eines Steuerelements, beispielsweise wenn der Anwendungsbenutzer auf eine Schaltfläche klickt oder einen Menüeintrag auswählt. Mit den folgenden Schritten ermöglichen Sie, dass Benutzer durch Klicken auf eine Schaltfläche zu anderen Registerkarten wechseln können: 1. Platzieren Sie in einer mobilen FireMonkey-Anwendung ein TabControl, und fügen Sie mehrere Registerelemente hinzu (TabItem1, TabItem2 und TabItem3). 2. Fügen Sie aus der Tool-Palette dem Formular ein TButton-Steuerelement und dann eine ActionList-Komponente hinzu: Embarcadero Technologies 64 3. Wählen Sie im Objektinspektor die Schaltflächen-Komponente und im Dropdown-Menü Aktion > Neue Standardaktion > Registerkarte > TChangeTabAction aus. Wenn der Benutzer auf diese Schaltfläche drückt, wird die definierte Aktion ausgeführt (die Registerkarte wird gewechselt): Embarcadero Technologies 65 4. Wählen Sie in der Strukturansicht die Aktion ChangeTabAction1 und dann für die Eigenschaft Tab im Objektinspektor TabItem2 aus. Durch Verknüpfen von TabItem2 kann mit dieser Aktion die Seite in TabItem2 geändert werden: 5. Bei dem vorherigen Schritt wird die Beschriftung (die Eigenschaft Text) der Schaltfläche automatisch in "Gehe zu Security" geändert, weil der Titel von TabItem2 in diesem Beispiel "Security" ist. Ändern Sie die Größe der Schaltfläche, damit die neue Beschriftung Platz hat, oder ändern Sie die Eigenschaft CustomText der Komponente ChangeTabAction1 wie im Folgenden gezeigt: Embarcadero Technologies 66 6. ChangeTabAction unterstützt auch die Slide-Animation zur Darstellung eines Wechsels von Seiten. Setzen Sie dazu die Eigenschaft Transition auf ttSlide: DURCH QUELLCODE Zum Ändern der aktiven Registerkarte im Quellcode können Sie eine der folgenden drei Möglichkeiten verwenden: Weisen Sie der Eigenschaft ActiveTab eine Instanz von TTabItem zu: TabControl1.ActiveTab := TabItem1; Setzen Sie die Eigenschaft TabIndex auf einen anderen Wert. Die Eigenschaft TabIndex ist ein nullbasierter Integerwert (Sie können jede Zahl zwischen 0 und TabControl1.TabCount - 1 angeben). TabControl1.TabIndex := 1; Wenn ChangeTabAction definiert ist, können Sie auch aus dem Quellcode ein Aktion ausführen: // You can set the target at run time if it is not defined yet. ChangeTabAction1.Tab := TabItem2; // Call the action ChangeTabAction1.Execute; Embarcadero Technologies 67 SIEHE AUCH iOS-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen in iOS-Anwendungen iOS-Tutorial: Verwenden von Webbrowser-Komponenten in iOSAnwendungen iOS-Tutorial: Verwenden von Listenfeld-Komponenten zur Anzeige von Tabellenansichten in iOS-Anwendungen Embarcadero Technologies 68 IOS-TUTORIAL: VERWENDEN VON LISTENFELDKOMPONENTEN ZUR ANZEIGE VON TABELLENANSICHTEN IN IOS-ANWENDUNGEN Auf der iOS-Plattform verwendet FireMonkey die Komponente FMX.ListBox.TListBox zur Anzeige einer Tabellenansicht im iOS-Stil, wie diese Listenfelder: In diesem Tutorial werden die grundlegenden Schritte zum Erstellen von Elementen für eine Tabellenansicht in einer FireMonkey-iOS-Anwendung beschrieben. ERSTELLEN VON ELEMENTEN FÜR DIE LISTBOX-KOMPONENTE 1. Wählen Sie Datei > Neu > Mobile FireMonkey-Anwendung - Delphi. 2. Wählen Sie in der Tool-Palette die Komponente TListBox aus, und ziehen Sie sie in den Designer für mobile FireMonkey-Formulare. Geben Sie in das Suchfeld der Tool-Palette einige Buchstaben (z.B. "tlist") ein, um TListBox schnell zu finden: Embarcadero Technologies 69 3. Wählen Sie die TListBox-Komponente im Designer für mobile Formulare aus, und wählen Sie im Objektinspektor für die Eigenschaft Align den Wert alClient aus: 4. Klicken Sie im Designer für mobile FireMonkey-Formulare mit der rechten Maustaste auf die TListBox-Komponente, und wählen Sie Eintrags-Editor: Embarcadero Technologies 70 5. Klicken Sie im Eintrags-Designer mehrmals auf die Schaltfläche Eintrag hinzufügen, um der ListBox mehrere Einträge hinzuzufügen: 6. Schließen Sie den Eintrags-Designer. Die hinzugefügten ListBox-Einträge werden nun in der TListBox-Komponente angezeigt. Zum Beispiel: HINZUFÜGEN EINER KOPFZEILE Embarcadero Technologies 71 Mit den folgenden Schritten können Sie der TListBox-Komponente eine Kopfzeile hinzufügen: 1. Klicken Sie im Designer für mobile FireMonkey-Formulare mit der rechten Maustaste auf die TListBox-Komponente, und wählen Sie Eintrag hinzufügen > TListBoxHeader: 2. Wählen Sie in der Tool Palette die TLabel-Komponente aus, und ziehen Sie sie auf die gerade hinzugefügte TListBoxHeader-Komponente: 3. Ändern Sie im Objektinspektor die Eigenschaften der TLabel-Komponente folgendermaßen: Eigenschaft Align Wert alClient StyleLookup toollabel TextAlign taCenter Text (Beliebiger Textwert) Embarcadero Technologies 72 HINZUFÜGEN EINER GRUPPENKOPFZEILE/-FUßZEILE ZU DER LISTE Sie können eine Gruppenkopfzeile und eine Gruppenfußzeile für Einträge in der TListBox wie folgt hinzufügen: 1. Klicken Sie im Designer für mobile FireMonkey-Formulare mit der rechten Maustaste auf die TListBox-Komponente, und wählen Sie Eintrags-Editor. 2. Wählen Sie im Eintrags-Designer aus der Dropdown-Liste TListBoxGroupHeader aus, und wählen Sie dann Eintrag hinzufügen: 3. Wählen Sie aus der Dropdown-Liste TListBoxGroupFooter aus, und wählen Sie dann Eintrag hinzufügen. 4. Wählen Sie in der Liste mit den Einträgen ListBoxGroupHeader1 aus, und klicken Sie mehrmals auf die Schaltfläche Nach oben, bis dieser Eintrag ganz oben in der Liste steht: Embarcadero Technologies 73 5. Schließen Sie das Dialogfeld. Die TListBox-Komponente enthält jetzt eine Gruppenkopfzeile und eine Gruppenfußzeile. ANZEIGEN VON LISTENEINTRÄGEN ALS EIGENE GRUPPIERTE EINTRÄGE Einträge in einer ListBox können entweder als lineare Liste oder als gruppierte Liste angezeigt werden. Diese Auswahlmöglichkeit wird von den Eigenschaften GroupingKind und StyleLookup, wie in der folgenden Abbildung gezeigt, gesteuert: Anzeigen von Einträgen als lineare Liste Anzeigen von Einträgen als gruppierte Liste gsPlain = GroupingKind Eigenschaftswert gsGrouped = GroupingKind Eigenschaftswert listboxstyle = StyleLookup Eigenschaftswert transparentlistboxstyle = StyleLookup Eigenschaftswert Sie können im Objektinspektor für die TListBox-Komponente einen beliebigen Stil auswählen. Embarcadero Technologies 74 HINZUFÜGEN EINES KONTROLLKÄSTCHENS ODER EINES ANDEREN ELEMENTS ZU EINEM LISTBOX-EINTRAG Jedem Eintrag in einer TListBox können mit der Eigenschaft ItemData.Accessory Elemente, wie z.B. ein Häkchen, hinzugefügt werden. Die folgende Abbildung zeigt die Werte, die Sie ItemData.Accessory und dem zugehörigen Element zuweisen können: Wenn der ListBox-Eintrag im Formular-Designer ausgewählt ist, können Sie im Objektinspektor die Eigenschaft Accessory auswählen. HINZUFÜGEN EINES SYMBOLS ZU EINEM LISTBOX-EINTRAG Jedem Eintrag in einer ListBox-Komponente können mit der Eigenschaft ItemData.Bitmap Bitmap-Daten als Symbol hinzugefügt werden: Embarcadero Technologies 75 Wenn der ListBox-Eintrag im Formular-Designer ausgewählt ist, können Sie im Objektinspektor die Eigenschaft Bitmap auswählen. HINZUFÜGEN VON DETAILINFORMATIONEN ZU EINEM EINTRAG Sie können jedem Eintrag in der ListBox-Komponente zusätzliche Textinformationen hinzufügen. Geben Sie zusätzlichen Text in der Eigenschaft ItemData.Detail an, und legen Sie die Position des Detailtextes in der Eigenschaft StyleLookup, wie in der folgenden Tabelle gezeigt, fest: Eigenschaft "StyleLookup" Darstellung listboxitemnodetail listboxitembottomdetail listboxitemrightdetail listboxitemleftdetail Embarcadero Technologies 76 PROGRAMMSEITIGES HINZUFÜGEN VON EINTRÄGEN ZU EINER LISTBOX Zum Hinzufügen von Standardeinträgen zu einer ListBox können Sie einfach die Methode Items.Add wie im folgenden Code aufrufen: ListBox1.Items.Add('Text to add'); Wenn Sie andere Einträge als Standardeinträge hinzufügen oder andere Eigenschaften steuern möchten, können Sie zuerst eine Instanz von dem Eintrag erstellen und ihn dann der Liste hinzufügen. Der folgende Code fügt einer ListBox die in der Abbildung gezeigten Einträge hinzu: Embarcadero Technologies 77 procedure TForm40.FormCreate(Sender: TObject); var c: Char; i: Integer; Buffer: String; ListBoxItem : TListBoxItem; ListBoxGroupHeader : TListBoxGroupHeader; begin ListBox1.BeginUpdate; for c := 'a' to 'z' do begin // Add header ('A' to 'Z') to the List ListBoxGroupHeader := TListBoxGroupHeader.Create(ListBox1); ListBoxGroupHeader.Text := UpperCase(c); ListBox1.AddObject(ListBoxGroupHeader); // Add items ('a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'c', ...) to the list for i := 1 to 3 do begin // StringOfChar returns a string with a specified number of repeating characters. Buffer := StringOfChar(c, i); // Simply add item // ListBox1.Items.Add(Buffer); // or, you can add items by creating an instance of TListBoxItem by yourself ListBoxItem := TListBoxItem.Create(ListBox1); ListBoxItem.Text := Buffer; // (aNone=0, aMore=1, aDetail=2, aCheckmark=3) ListBoxItem.ItemData.Accessory := TListBoxItemData.TAccessory(i); ListBox1.AddObject(ListBoxItem); end; end; ListBox1.EndUpdate; end; HINZUFÜGEN EINES SUCHFELDES Sie können einer ListBox ein Suchfeld hinzufügen. Mit Suchfeldern können Benutzer schnell eine Auswahl in einer langen Liste treffen (siehe die folgenden Abbildungen): Embarcadero Technologies 78 Klicken Sie zum Hinzufügen eines Suchfeldes mit der rechten Maustaste auf die TListBox-Komponente, und wählen Sie im Kontextmenü einfach Eintrag hinzufügen > TSearchBox aus: SIEHE AUCH FMX.ListBox.TListBox iOS-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen in iOS-Anwendungen iOS-Tutorial: Verwenden von Webbrowser-Komponenten in iOSAnwendungen iOS-Tutorial: Verwenden von Registerkarten-Komponenten zur Anzeige von Seiten in iOS-Anwendungen Embarcadero Technologies 79 IOS-TUTORIAL: VERWENDEN VON LAYOUTS ZUR AUSRICHTUNG UNTERSCHIEDLICHER FORMULARGRÖßEN IN IOS-ANWENDUNGEN In diesem Tutorial wird eine allgemeine Strategie für die Verwendung eines gemeinsamen Formulars für verschiedene Standards (wie iPhone und iPad) beschrieben. Unterschiedliche Formulare für verschiedene Standards werden dafür nicht benötigt. Im Designer für mobile FireMonkey-Formulare können Sie die Benutzeroberfläche in der Vorschau anzeigen, ohne dafür die Anwendung auf einem Gerät ausführen zu müssen – ändern Sie einfach in der Dropdown-Liste in der rechten oberen Ecke das Gerät oder die Ausrichtung: JEDE FIREMONKEY-KOMPONENTE KANN EINEN BESITZER, EIN ÜBERGEORDNETES OBJEKT UND UNTERGEORDNETE OBJEKTE HABEN Jede FireMonkey-Komponente beinhaltet das Konzept von Besitzer, übergeordnetem Objekt und untergeordneten Objekten. Wenn Sie eine Komponente auf einem Formular platzieren, wird das Formular zum Besitzer und zum übergeordneten Objekt der Komponente. Wenn Sie einer Komponente (z.B. einer Symbolleiste) Komponenten (z.B. eine Schaltfläche, eine Beschriftung usw.) hinzufügen, ist die Symbolleiste (ToolBar) gleichzeitig übergeordnetes Objekt und Besitzer der Schaltfläche, der Beschriftung usw. Diese Über-/Untergeordnet-Beziehung wird grafisch in der Baumansicht in der Strukturansicht dargestellt. Das Layout eines untergeordneten Objekts ist als Wert relativ zum übergeordneten Objekt definiert. In der folgenden Abbildung ist Label1 Toolbar1 untergeordnet, und das Layout von Label1 ist relativ zu Toolbar1. Embarcadero Technologies 80 VERWENDEN VON ALLGEMEINEN LAYOUTBEZOGENEN EIGENSCHAFTEN EINER FIREMONKEY-KOMPONENTE VERWENDEN DER EIGENSCHAFT "ALIGN" Die Eigenschaft Align eines Steuerelements bestimmt, ob es automatisch entlang der vier Seiten oder in der Mitte des übergeordneten Objekts neu positioniert wird und/oder dessen Größe geändert wird, sowohl als Ausgangseinstellung als auch bei Größenänderungen des übergeordneten Objekts. Der Vorgabewert für die Eigenschaft Align ist alNone, d.h., dass keine automatischen Berechnungen durchgeführt werden: das Steuerelement verbleibt an seiner Position. Typische Werte für die Eigenschaft Align sind folgende (Azurblau gibt den Bereich für das untergeordnete Objekt an): alNone alTop alBottom alLeft alRight alCenter alClient Wenn Sie für eine Komponente einen Align-Wert von alTop, alBottom, alLeft oder alRight festlegen, verwenden die Align-Eigenschaften der anderen Komponenten den verbleibenden Bereich. Die Größe und Form des verbleibenden Bereichs (alClient) werden auch auf Basis der Geräteausrichtung und des Standards (iPhone oder iPad) geändert. Die folgenden Abbildungen zeigen das Layout im Querformat (horizontal) und im Hochformat (vertikal) für drei Komponenten, wobei für zwei die Ausrichtung alTop und für die dritte alClient festgelegt ist. Embarcadero Technologies 81 VERWENDEN DER EIGENSCHAFT "MARGINS" Der Außenabstand (Margins) sorgt für die Trennung zwischen automatisch von einem übergeordneten Objekt positionierten Steuerelementen. In der folgenden Abbildung ist für die rechte Seite der Komponente (alClient) die Eigenschaft Margins festgelegt, damit um die Komponente Platz frei bleibt. VERWENDEN DER EIGENSCHAFT "PADDING" Der Innenabstand (Padding) spart Platz innerhalb der Inhaltsbox des übergeordneten Objekts aus. Im Objektinspektor können Sie Werte (in Pixel) für Padding festlegen: Links Rechts Unten Oben In der folgenden Abbildung ist für die übergeordnete Komponente (die zwei Bereiche enthält) die Eigenschaft Padding festgelegt, damit innerhalb der übergeordneten Komponente Platz frei bleibt: Embarcadero Technologies 82 VERWENDEN DER EIGENSCHAFT "ANCHORS" Anker (Anchors) werden benötigt, wenn ein Steuerelement seine Position in einem bestimmten Abstand zu den Rändern des übergeordneten Steuerelements beibehalten muss oder vergrößert werden muss und trotzdem der ursprüngliche Abstand zwischen seinen Rändern und denjenigen des übergeordneten Steuerelements beibehalten werden muss. Verankerte Steuerelemente "kleben" an den Seiten des Containers und werden auch vergrößert, falls angegeben. Eigenschaft "Anchors" für Eingabe-Steuerelemente Angenommen, für ein Eingabe-Steuerelement auf einer Symbolleiste (ToolBar) soll ein fester Abstand zwischen dem rechten Rand des Eingabe-Steuerelements und dem Formularrand (ToolBar) beibehalten werden. Mit Ankern können Sie festlegen, dass ein Steuerelement in Bezug auf die Seiten seines übergeordneten Objekts unveränderlich bleiben soll. Wenn Sie möchten, dass das Eingabe-Steuerelement in Bezug auf ToolBar (das übergeordnete Objekt) dieselbe relative Position beibehalten soll, können Sie die Eigenschaft Anchors auf akLeft, akTop, akRight setzen. Wenn die Größe von ToolBar geändert wird, wird auch die Größe des Eingabe-Steuerelements entsprechend den Anchors-Einstellungen geändert: Eigenschaft "Anchors" für Schaltflächen-Steuerelemente Angenommen, für ein Schaltflächen-Steuerelement, das sich am rechten Ende der Symbolleiste (ToolBar) befindet, soll derselbe Abstand zwischen dem rechten Rand des Schaltflächen-Steuerelements und dem Rand des Formulars Embarcadero Technologies 83 beibehalten werden. Es soll aber nicht derselbe Abstand zwischen dem linken Rand des Schaltflächen-Steuerelements und dem linken Rand des Formulars beibehalten werden. In diesem Fall können Sie die Eigenschaft Anchors auf akTop, akRight setzen (wählen Sie akLeft nicht aus), sodass das SchaltflächenSteuerelement für Top und Right denselben Abstand zu ToolBar (übergeordnet) beibehält. VERWENDEN DER KOMPONENTE "TLAYOUT" Mit der Komponente TLayout, die zur Laufzeit nicht sichtbar ist, können untergeordnete Steuerelemente für die gemeinsame Bearbeitung gruppiert werden. Sie können beispielsweise die Sichtbarkeit einer Gruppe von Steuerelementen gleichzeitig festlegen, indem Sie nur die Eigenschaft Visible des Layouts setzen. TLayout legt keine der Eigenschaften der untergeordneten Steuerelemente automatisch fest. In der Strukturansicht können Sie ausgewählte Steuerelemente als TLayout untergeordnet festlegen. Markieren Sie die Steuerelemente, die Sie verschieben möchten. Ziehen Sie dann die Gruppe der Steuerelemente auf das Steuerelement, das das übergeordnete Objekt sein soll, und legen Sie die Steuerelemente dort ab. In der Strukturansicht ist die Gruppe der Steuerelemente jetzt dem neuen übergeordneten Objekt untergeordnet: 1. Anfangsstatus Embarcadero Technologies 2. Zu verschiebende Steuerelemente markieren 3. Auf das übergeordnete Objekt ziehen 84 Mit den TLayout-Eigenschaften Align, Padding, Margins, Anchors und anderen können Sie das Layout für einen bestimmten Bereich festlegen. Die TLayoutKomponente kann genauso wie das DIV-Tag in HTML verwendet werden. ARBEITEN MIT VOLLEN BENUTZEROBERFLÄCHEN: VERWENDEN VON TVERTSCROLLBOX-KOMPONENTEN Im Allgemeinen sollten Formulare nicht zu viele Elemente enthalten, damit Benutzer nicht zum Verschieben des Bildschirminhalts gezwungen sind. In vielen Fällen können Sie mit einer TabControl-Komponente mit mehreren Seiten das Verschieben des Bildschirminhalts vermeiden. Wenn Sie aber viele Elemente auf einem Formular platzieren müssen, können Sie mit einer TVertScrollBox-Komponente einen Verschiebe-Bereich wie folgt definieren: 1. Wählen Sie im Designer für mobile FireMonkey-Formulare die Option Benutzerdefiniertes Gerät aus. 2. Ändern Sie die Größe des benutzerdefinierten Geräts, indem Sie den Rand des Designers bis zur gewünschten Form und Größe aufziehen. 3. Legen Sie eine TVertScrollBox-Komponente auf dem Formular ab, und setzen Sie deren Eigenschaft Align auf alClient. Dies bewirkt, dass die TVertScrollBox den gesamten Client-Bereich ausfüllt. 4. Legen Sie Komponenten auf der TVertScrollBox-Komponente ab: Embarcadero Technologies 85 Der Inhalt dieses Formulars kann zur Laufzeit durch Streifen über die Benutzeroberfläche verschoben werden. SIEHE AUCH iOS-Tutorial: Verwenden von Listenfeld-Komponenten zur Anzeige von Tabellenansichten in iOS-Anwendungen iOS-Tutorial: Verwenden von Positionssensoren auf iOS-Geräten Tutorial: Verwenden von FireMonkey-Layouts Strategien für FireMonkey-Layouts Anordnen von FireMonkey-Steuerelementen Gesten in FireMonkey Embarcadero Technologies 86 IOS-TUTORIAL: AUFNEHMEN UND TEILEN VON BILDERN IN IOS-ANWENDUNGEN Bevor Sie mit diesem Tutorial beginnen, sollten Sie das folgende Tutorial durcharbeiten: iOS-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen in iOS-Anwendungen In diesem Tutorial werden die folgenden typischen Aufgaben für die Verwendung von Fotos in iOS-Anwendungen behandelt: Aufnehmen eines Fotos mit der iOS-Gerätekamera Verwenden eines Fotos aus der Fotobibliothek des iOS-Geräts Teilen oder Drucken eines Fotos Diese Funktionen werden als Aktionen bereitgestellt, und Sie müssen für jede Aufgabe nur eine Codezeile schreiben. Aktionen sind einem oder mehreren Elementen der Benutzeroberfläche zugeordnet, z.B. Menübefehlen, Schaltflächen und Symbolleisten. Aktionen dienen zwei Zwecken: Eine Aktion kann allgemeine Eigenschaften für Benutzeroberflächenelemente darstellen, z.B. ob ein Steuerelement oder ein Kontrollkästchen aktiviert ist. Embarcadero Technologies 87 Eine Aktion kann auf das Auslösen eines Steuerelements reagieren, beispielsweise wenn der Benutzer auf eine Schaltfläche klickt oder einen Menüeintrag auswählt. In diesem Tutorial wird gezeigt, wie Sie Benutzeroberflächenelementen (z.B. einer Schaltfläche) Aktionen für jede Funktion, die Sie unterstützen möchten, zuweisen. ERSTELLEN DER BENUTZEROBERFLÄCHE FÜR DIE ANWENDUNG Die Benutzeroberfläche dieser Beispielanwendung ist sehr einfach (siehe die folgende Abbildung): Legen Sie im Formular-Designer die folgenden Komponenten ab: TToolBar o Drei TButton-Komponenten. Jede Schaltfläche verwendet andere Symbole. o Setzen Sie die Eigenschaft StyleLookup der drei Schaltflächen auf cameratoolbuttonbordered, searchtoolbuttonbordered, bzw. actiontoolbuttonbordered. TImage o Setzen Sie die Eigenschaft Align auf alClient. TActionList Embarcadero Technologies 88 AUFNEHMEN EINES FOTOS MIT DER IOS-GERÄTEKAMERA Sie können eine Aktion zum Aufnehmen eines Fotos mit der Kamera auf dem iOS-Gerät mit den folgenden Schritten festlegen: 1. Wählen Sie im Formular-Designer die Schaltfläche (zum Aufnehmen eines Fotos) aus. 2. Öffnen Sie im Objektinspektor die Dropdown-Liste der Eigenschaft Action. 3. Wählen Sie Neue Standardaktion | Medienbibliothek | TTakePhotoFromCameraAction: 4. Erweitern Sie auf der Registerkarte Ereignisse den Knoten Action, und doppelklicken Sie auf das Ereignis OnDidFinishTaking. 5. Fügen Sie der OnDidFinishTaking-Ereignisbehandlungsroutine den folgenden Code hinzu: procedure TForm1.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap); begin Image1.Bitmap.Assign(Image); end; Mit diesem Code wird ein mit der iOS-Gerätekamera aufgenommenes Fotos der Eigenschaft Bitmap der Komponente TImage zugewiesen. Embarcadero Technologies 89 VERWENDEN EINES FOTOS AUS DER FOTOBIBLIOTHEK DES IOS-GERÄTS Sie können eine Aktion für die Verwendung eines Fotos aus der Fotobibliothek mit den folgenden Schritten festlegen: 1. Wählen Sie im Formular-Designer die Schaltfläche aus, die für das Auswählen eines Fotos verwendet werden soll. 2. Klicken Sie im Objektinspektor auf die Dropdown-Liste für die Eigenschaft Action, und wählen Sie Neue Standardaktion | Medienbibliothek | TTakePhotoFromLibraryAction. 3. Erweitern Sie auf der Registerkarte Ereignisse den Knoten Action, und doppelklicken Sie auf das Ereignis OnDidFinishTaking. 4. Fügen Sie der OnDidFinishTaking-Ereignisbehandlungsroutine den folgenden Code hinzu: procedure TForm1.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap); begin Image1.Bitmap.Assign(Image); end; Mit diesem Code wird ein aus der Fotobibliothek übernommenes Foto der Eigenschaft Bitmap der Komponente TImage zugewiesen. Embarcadero Technologies 90 TEILEN ODER DRUCKEN EINES FOTOS Von einer iOS-App aus können Sie Fotos auf sozialen Netzwerksites (wie Facebook und Twitter) teilen, Fotos an einen Drucker senden, Fotos als Anlage für E-Mails verwenden, Fotos Kontakten zuordnen usw. Dieser Dienst für das vielfache Teilen wird als "Teilfelder"-Funktionalität bezeichnet, und Sie können diese Funktionalität mit den folgenden Schritten implementieren: 1. Wählen Sie im Formular-Designer eine Schaltfläche (zum Teilen eines Fotos) aus. 2. Klicken Sie im Objektinspektor auf die Dropdown-Liste für die Eigenschaft Action, und wählen Sie Neue Standardaktion | Medienbibliothek | ShowShareSheetAction. 3. Erweitern Sie auf der Registerkarte Ereignisse den Knoten Action, und doppelklicken Sie auf das Ereignis OnBeforeExecute. 4. Fügen Sie der OnBeforeExecute-Ereignisbehandlungsroutine den folgenden Code hinzu: procedure TForm1.ShowShareSheetAction1BeforeExecute(Sender: TObject); begin ShowShareSheetAction1.Bitmap.Assign(Image1.Bitmap); end; Embarcadero Technologies 91 Mit dem obigen Code wird ein Foto auf der TImage-Komponente der "'Teilfelder'-Funktionalität" zugewiesen. Nach Auswahl von Facebook aus der Liste der Dienste können Sie das Foto auf Facebook mit Ihrem Kommentar posten: SIEHE AUCH iOS-Tutorial: Verwenden von Positionssensoren auf iOS-Geräten iOS-Tutorial: Verwenden der Mitteilungszentrale auf iOS-Geräten FireMonkey-Aktionen FMX.StdCtrls.TButton FMX.Objects.TImage FMX.MediaLibrary http://appleinsider.com/articles/12/02/16/share_sheets_twitter_integration _to_make_mountain_lion_more_social/ Embarcadero Technologies 92 IOS-TUTORIAL: VERWENDEN VON POSITIONSSENSOREN AUF IOS-GERÄTEN Bevor Sie mit diesem Tutorial beginnen, sollten Sie die folgenden Tutorials durcharbeiten: iOS-Tutorial: Verwenden von Listenfeld-Komponenten zur Anzeige von Tabellenansichten in iOS-Anwendungen iOS-Tutorial: Verwenden von Webbrowser-Komponenten in iOSAnwendungen iOS-Tutorial: Verwenden von Layouts zur Ausrichtung unterschiedlicher Formulargrößen in iOS-Anwendungen In diesem Tutorial sind die grundlegenden Schritte zum Lokalisieren Ihres iOSGerätes (anhand der geografischen Breite und Länge) und zum Verwenden der Rückwärts-Georeferenzierung für die Umwandlung dieser Daten in eine lesbare Adresse beschrieben, wie in der folgenden Abbildung dargestellt: Embarcadero Technologies 93 ENTWERFEN DER BENUTZEROBERFLÄCHE Diese Demo-Anwendung enthält zwei Hauptkomponenten: eine TListBox (auf der linken Seite) und einen TWebBrowser. Setzen Sie für die TListBox die Eigenschaft Align auf alLeft, um die linke Seite der UI für die Komponente zu reservieren. Erstellen Sie anschließend die folgenden Unterkomponenten für die ListBox: o eine TListBoxHeader-Komponente mit den folgenden Unterkomponenten: eine TLabel-Komponente zum Anzeigen des Titels "Location Demo" eine Switch-Komponente (Switch1) zum Ein- und Ausschalten von TLocationSensor o eine TListBoxGroupHeader-Komponente mit dem Text "Your Location" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemLatitude" und dem Text "Latitude" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemLongitude" und dem Text "Longitude" o eine TListBoxGroupHeader-Komponente mit dem Text "Current Address" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemAdminArea" und dem Text "AdminArea" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemCountryCode" und dem Text "CountryCode" Embarcadero Technologies 94 eine TListBoxItem-Komponente mit dem Namen "ListBoxItemCountryName" und dem Text "CountryName" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemFeatureName" und dem Text "FeatureName" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemLocality" und dem Text "Locality" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemPostalCode" und dem Text "PostalCode" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemSubAdminArea" und dem Text "SubAdminArea" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemSubLocality" und dem Text "SubLocality" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemSubThoroughfare" und dem Text "SubThoroughfare" o eine TListBoxItem-Komponente mit dem Namen "ListBoxItemThoroughfare" und dem Text "Thoroughfare" eine TWebBrowser-Komponente (WebBrowser1) zum Anzeigen der Webseite (Google Maps). Setzen Sie die Eigenschaft Align auf alClient. o Wählen Sie anschließend alle TListBoxItem-Elemente aus, und wählen Sie in der Eigenschaft StyleLookup den Wert listboxitemleftdetail aus. Damit legen Sie fest, dass in TListBoxItem eine Beschriftung und detaillierter Text angezeigt werden kann. DER POSITIONSSENSOR Der Positionssensor ist in der Komponente TLocationSensor gekapselt. TLocationSensor löst ein OnLocationChanged-Ereignis aus, wenn das Gerät eine Bewegung erkennt. Die Empfindlichkeit von TLocationSensor können Sie mit der Eigenschaft Distance einstellen. Wenn Sie "Distance" auf "10" setzen, löst TLocationSensor ein OnLocationChanged-Ereignis aus, wenn Sie sich 10 Meter von der aktuellen Position weg bewegen. ABRUFEN DER POSITIONSINFORMATIONEN (GEOGRAFISCHE BREITE UND LÄNGE) VON DER LOCATIONSENSORKOMPONENTE Zuerst müssen Sie die TLocationSensor-Komponente aktivieren. Sie können TLocationSensor auf Basis Ihrer Eingabe, wie z.B. einer TSwitch-Komponente, oder anderer Anwendungsereignisse ein- und ausschalten. Embarcadero Technologies 95 Im folgenden Codefragment wird TLocationSensor aufgrund der Änderung des Wertes in der Komponente TSwitch gesteuert: procedure TForm44.Switch1Switch(Sender: TObject); begin LocationSensor1.Active := Switch1.IsChecked; end; Wie bereits weiter oben erwähnt, löst TLocationSensor ein OnLocationChangedEreignis aus, wenn das iOS-Gerät bewegt wird. Sie können die aktuelle Position (geografische Breite und Länge) mithilfe von Parametern für diese Ereignisbehandlungsroutine wie folgt anzeigen: procedure TForm44.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D); begin // Show current location ListBoxItemLatitude.ItemData.Detail := NewLocation.Latitude.ToString; ListBoxItemLongitude.ItemData.Detail := NewLocation.Longitude.ToString; end; Embarcadero Technologies 96 ANZEIGEN DER AKTUELLEN POSITION MIT GOOGLE MAPS ÜBER EINE TWEBBROWSER-KOMPONENTE Wie im iOS-Tutorial: Verwenden von Webbrowser-Komponenten in iOSAnwendungen erläutert, kapselt die TWebBrowser-Komponente einen Webbrowser für iOS. Sie können Google Maps aus der TWebBrowser-Komponente mit den folgenden URL-Parametern aufrufen: https://maps.google.com/maps?q=(Latitudevalue),(Longitude-value)&output=embed Diesen URL können Sie der zuvor erstellten OnLocationChangedEreignisbehandlungsroutine wie folgt hinzufügen: procedure TForm44.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D); var URLString: String; begin // code for previous step goes here // Show Map using Google Maps URLString := Format( 'https://maps.google.com/maps?q=%s,%s&output=embed', [NewLocation.Latitude.ToString, NewLocation.Longitude.ToString]); WebBrowser1.Navigate(URLString); end; VERWENDEN DER RÜCKWÄRTS-GEOREFERENZIERUNG TGeocoder ist ein Objekt, das den Georeferenzierungsdienst (oder den Rückwärts-Georeferenzierungsdienst) kapselt. Georeferenzierung ist der Vorgang des Umwandelns von geografischen Daten, wie Adresse und Postleitzahl, in geografische Koordinaten. RückwärtsGeoreferenzierung ist der Vorgang des Umwandelns von geografischen Koordinaten in andere geografische Daten, wie eine Adresse. In diesem Beispiel wird mit TGeocoder die Position (geografische Breite und Länge) per "Rückwärts-Georeferenzierung" in lesbare Adressdaten umgewandelt. Dafür wird für TGeocoder der folgende grundlegende Aktionsablauf durchgeführt: Embarcadero Technologies 97 1. Erstellen einer Instanz von TGeocoder 2. Definieren eines OnGeocodeReverse-Ereignisses, damit das Ereignis später empfangen werden kann. 3. Festlegen von Daten für die Ausführung der "RückwärtsGeoreferenzierung". 4. TGeocoder greift auf den Dienst im Netzwerk zu, um die Adressinformationen aufzulösen. 5. TGeocoder löst ein OnGeocodeReverse-Ereignis aus. 6. Die iOS-App empfängt die Adressinformationen über die Parameter im OnGeocodeReverse-Ereignis und aktualisiert die Benutzeroberfläche. Weil TGeocoder keine Komponente (sondern nur eine Klasse) ist, müssen Sie diese Schritte im Code festlegen (Sie können auf dem Formular weder eine Komponente ablegen, noch im Objektinspektor eine Ereignisbehandlungsroutine zuweisen). Zuerst definieren Sie im private-Abschnitt des Formulars ein neues Feld "FGeocoder: TGeocoder". Sie können auch eine "OnGeocodeReverseEvent"Prozedur wie im folgenden Codefragment definieren. type TForm44 = class(TForm) // IDE defines visible (or non-visual) components here automatically private { Private declarations } FGeocoder: TGeocoder; procedure OnGeocodeReverseEvent(const Address: TCivicAddress); public { Public declarations } end; Wechseln Sie anschließend in die Zeile von <wikibold>OnGeocodeReverseEvent</wiki-bold>, und drücken Sie <code>STRG+UMSCHALT+C</code>. Dadurch wird die folgende Prozedur (die später verwendet wird) im Code angelegt: procedure TForm44.OnGeocodeReverseEvent(const Address: TCivicAddress); begin end; Jetzt können Sie eine Instanz von TGeocoder erstellen, und sie mit dem folgenden Code mit Daten einrichten. Embarcadero Technologies 98 TGeocoder.Current gibt den Typ der Klasse an, die den Georeferenzierungsdienst implementiert. Der Code in TGeocoder.Current.Create ruft den Konstruktor (Create) für den angegebenen Typ auf, und speichert ihn im Feld FGeocoder. Sie sollten auch eine Ereignisbehandlungsroutine festlegen, die ausgelöst wird, wenn TGeocoder die Rückwärts-Georeferenzierung ausgeführt hat. Weisen Sie OnGeocodeReverseEvent (im vorherigen Schritt definiert) zu FGeocoder.OnGeocodeReverse zu. Wenn Sie erfolgreich eine Instanz von TGeocoder erstellt haben und TGeocoder nicht ausgeführt wird, rufen Sie TGeocoder.GeocodeReverse mit den Positionsinformationen auf. Wenn TGeocoder Daten empfängt, wird das Ereignis OnGeocodeReverseEvent ausgelöst. procedure TForm44.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D); begin // code for previous steps goes here // Setup an instance of TGeocoder if not Assigned(FGeocoder) then begin if Assigned(TGeocoder.Current) then FGeocoder := TGeocoder.Current.Create; if Assigned(FGeocoder) then FGeocoder.OnGeocodeReverse := OnGeocodeReverseEvent; end; // Translate location to address if Assigned(FGeocoder) and not FGeocoder.Geocoding then FGeocoder.GeocodeReverse(NewLocation); end; Embarcadero Technologies 99 ANZEIGEN EINER LESBAREN ADRESSE IN DER LISTBOXKOMPONENTE Wie weiter oben beschrieben, wird ein OnGeocodeReverseEvent-Ereignis ausgelöst, nachdem die Rückwärts-Georeferenzierung abgeschlossen ist. Als Nächstes weisen Sie im Adressparameter TCivicAddress Eigenschaften zu, um lesbare Adressdaten in den Feldern des Listenfeldes anzuzeigen: procedure TForm44.OnGeocodeReverseEvent(const Address: TCivicAddress); begin ListBoxItemAdminArea.ItemData.Detail := Address.AdminArea; ListBoxItemCountryCode.ItemData.Detail := Address.CountryCode; ListBoxItemCountryName.ItemData.Detail := Address.CountryName; ListBoxItemFeatureName.ItemData.Detail := Address.FeatureName; ListBoxItemLocality.ItemData.Detail := Address.Locality; ListBoxItemPostalCode.ItemData.Detail := Address.PostalCode; ListBoxItemSubAdminArea.ItemData.Detail := Address.SubAdminArea; ListBoxItemSubLocality.ItemData.Detail := Address.SubLocality; ListBoxItemSubThoroughfare.ItemData.Detail := Address.SubThoroughfare; ListBoxItemThoroughfare.ItemData.Detail := Address.Thoroughfare; end; SIEHE AUCH iOS-Tutorial: Verwenden von Layouts zur Ausrichtung unterschiedlicher Formulargrößen in iOS-Anwendungen iOS-Tutorial: Verwenden der Mitteilungszentrale auf iOS-Geräten System.Sensors.TGeocoder FMX.Sensors.TLocationSensor Embarcadero Technologies 100 IOS-TUTORIAL: VERWENDEN DER MITTEILUNGSZENTRALE AUF IOS-GERÄTEN In diesem Tutorial werden die grundlegenden Schritte zur Verwendung der Mitteilungszentrale für iOS-Geräte beschrieben. DREI GRUNDLEGENDE MITTEILUNGS- ODER HINWEISSTILE Wenn Benutzer Mitteilungen für Apps auf ihren iOS-Geräten festlegen, können diese von Apps in den hier dargestellten drei grundlegenden Stilen angezeigt werden. Das Banner erscheint kurz, aber Hinweise erfordern eine Benutzeraktion. KENNZEICHEN AUF DEM ANWENDUNGSSYMBOL MITTEILUNGSBANNER AUF DEM IPAD MITTEILUNGSHINWEIS MITTEILUNGSZENTRALE AUF DEM IPAD Die folgende Abbildung zeigt die iPad-Mitteilungszentrale. Benutzer können die Liste mit den neuesten Mitteilungen vom oberen Bildschirmrand "herunterziehen": Embarcadero Technologies 101 ZUGREIFEN AUF DEN MITTEILUNGSDIENST Das Mitteilungsdienst-Interface (IFMXNotificationCenter) ist als FireMonkeyPlattformdienst (TPlatformServices) definiert. Um auf den Mitteilungsdienst zuzugreifen, müssen Sie Folgendes ausführen: Fügen Sie der uses-Klausel die folgenden zwei Units hinzu, sofern sie nicht bereits vorhanden sind: uses FMX.Platform, FMX.Notification; Führen Sie mit folgendem Code eine Abfrage der FireMonkeyMitteilungsdienste aus: var NotificationService: IFMXNotificationCenter; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; // Use the Notification Service end; Das Interface IFMXNotificationCenter stellt grundlegende Dienste für die Verwendung der Zahl auf dem Kennzeichensymbol sowie für die Mitteilung selbst bereit. Embarcadero Technologies 102 FESTLEGEN DER ZAHL AUF DEM KENNZEICHENSYMBOL IM CODE IFMXNotificationCenter legt mit der Methode SetIconBadgeNumber die Zahl auf dem Kennzeichensymbol fest: procedure TForm1.SerIconBadgeNumber; var NotificationService: IFMXNotificationCenter; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; // Reset Icon Badge Number if Assigned(NotificationService) then NotificationService.SetIconBadgeNumber(18); end; Nachdem Setzen der Zahl auf dem Kennzeichensymbol auf 18 wird sie auf dem iOS-Startbildschirm angezeigt. Mit der Methode ResetIconBadgeNumber können Sie die Zahl auf dem Kennzeichensymbol zurücksetzen: procedure TForm1.ResetIconBadgeNumber; var NotificationService: IFMXNotificationCenter; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; // Set Icon Badge Number if Assigned(NotificationService) then NotificationService.ResetIconBadgeNumber; end; Embarcadero Technologies 103 PLANEN VON MITTEILUNGEN Mit der Methode ScheduleNotification können Sie Mitteilungen planen. Um eine Mittelung anzuzeigen, müssen Sie eine Instanz der Klasse TNotification erstellen und dann den Namen (Bezeichner) und die Mitteilung festlegen: procedure TForm1.ScheduleNotification; var NotificationService: IFMXNotificationCenter; Notification: TNotification; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; if Assigned(NotificationService) then begin Notification := TNotification.Create; try Notification.Name := 'MyNotification'; Notification.AlertBody := 'Delphi for iOS is here!'; // Fired in 10 second Notification.FireDate := Now + EncodeTime(0,0,10,0); // Send notification in Notification Center NotificationService.ScheduleNotification(Notification); finally Notification.Free; end; end end; Nachdem Festlegen der Mitteilung wird sie oben auf dem iOS-Startbildschirm angezeigt. Embarcadero Technologies 104 AKTUALISIEREN ODER ABBRECHEN VON GEPLANTEN MITTEILUNGEN Jede geplante Mitteilung ist durch die Eigenschaft Name des TNotificationObjekts eindeutig festgelegt. Um eine geplante Mitteilung zu aktualisieren, rufen Sie einfach erneut ScheduleNotification mit einer Instanz von TNotification auf, die denselben Namen hat (Eigenschaft "Name"). Um eine geplante Mitteilung abzubrechen, rufen Sie die Methode CancelNotification mit dem verwendeten Bezeichner auf: procedure TForm1.CancelNotification; var NotificationService: IFMXNotificationCenter; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; if Assigned(NotificationService) then NotificationService.CancelNotification('MyNotification'); end; Embarcadero Technologies 105 SOFORTIGES ANZEIGEN DER MITTEILUNG Sie können eine Mitteilung sofort mit der Methode PresentNotification anzeigen. Um eine Mittelung anzuzeigen, müssen Sie ein Instanz der Klasse TNotification erstellen und dann den Namen (Bezeichner) und die Mitteilung festlegen: procedure TForm1.PresentNotification; var NotificationService: IFMXNotificationCenter; Notification: TNotification; begin if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter; if Assigned(NotificationService) then begin Notification := TNotification.Create; try Notification.Name := 'MyNotification'; Notification.AlertBody := 'Delphi for iOS is here!'; // Set Icon Badge Number as well Notification.ApplicationIconBadgeNumber := 18; // Show Notification Message NotificationService.PresentNotification(Notification); finally Notification.Free; end; end; end; Embarcadero Technologies 106 MITTEILUNGSBANNER ODER MITTEILUNGSHINWEIS Standardmäßig zeigt Ihre Anwendung das Mitteilungsbanner an: Mitteilungsbanner auf dem iPad Mitteilungshinweis Um einen Mitteilungshinweis anstelle eines Mitteilungsbanners zu verwenden, muss der Endbenutzer den Hinweisstil auf der Konfigurationsseite der Mitteilungszentrale ändern: Embarcadero Technologies 107 HINZUFÜGEN VON AKTIONEN ZU HINWEISEN Sie können einen Hinweis durch Hinzufügen einer Aktions-Schaltfläche anpassen. Zum Anpassen einer Hinweisaktion müssen Sie die Aktion in der Eigenschaft AlertAction festlegen und dann die Eigenschaft HasAction wie folgt auf True setzen: Notification := TNotification.Create; try Notification.Name := 'MyNotification'; Notification.AlertBody := 'Delphi for iOS is here!'; Notification.AlertAction := 'Code Now!'; Notification.HasAction := True; // Fired in 10 seconds Notification.FireDate := Now + EncodeTime(0,0,10,0); // Show Notification Message NotificationService.ScheduleNotification(Notification); finally Notification.Free; end; SIEHE AUCH iOS-Tutorial: Aufnehmen und Teilen von Bildern in iOS-Anwendungen iOS-Tutorial: Verwenden von Positionssensoren auf iOS-Geräten FMX.Notification.IFMXNotificationCenter Embarcadero Technologies 108 IOS-TUTORIAL: VERWENDEN VON INTERBASE TOGO IN IOS-ANWENDUNGEN Bevor Sie mit diesem Tutorial beginnen, sollten Sie das folgende Tutorial durcharbeiten: iOS-Tutorial: Verwenden von Listenfeld-Komponenten zur Anzeige von Tabellenansichten in iOS-Anwendungen In diesem Tutorial werden die grundlegenden Schritte zum Durchsuchen der von InterBase ToGo verwalteten Daten auf Ihrem iOS-Gerät mithilfe des dbExpressFrameworks beschrieben. Embarcadero Technologies 109 HERSTELLEN EINER VERBINDUNG ZU DER DATENBANK MIT DBEXPRESS dbExpress ist ein sehr schnelles, in Delphi geschriebenes Framework für den Datenbankzugriff. RAD Studio enthält Treiber für die wichtigsten Datenbanken, wie InterBase, Oracle, DB2, SQL Server, MySQL, Firebird, SQLite und ODBC. Sie können auf diese Datenbanken mit denselben hier beschriebenen Schritten zugreifen. Für die iOS-Plattform unterstützt dbExpress InterBase ToGo sowie SQLite. Diese Datenbankprodukte können auf iOS-Geräten ausgeführt werden. Für andere Datenbanken, wie z.B. Oracle, benötigen Sie zumindest eine Client-Bibliothek. Auf Windows-Plattformen wird die Client-Bibliothek für die Verbindung als DLL bereitgestellt. Deshalb müssen Sie Anwendungen mit Mittelschichttechnologien, wie DataSnap, entwickeln, um von iOSGeräten eine Verbindung zu diesen Datenbankprodukten herzustellen. Wie eine Verbindung zu einer Unternehmensdatenbank ohne eine ClientBibliothek auf dem iOS-Gerät hergestellt wird, ist im iOS-Tutorial: Herstellen einer Verbindung zu Unternehmensdatenbanken von iOS-Client-Anwendungen aus beschrieben. ENTWERFEN UND EINRICHTEN DER BENUTZEROBERFLÄCHE In diesem Tutorial wird eine TListBox-Komponente als UI-Element verwendet. Führen Sie die folgenden Schritte aus, um eine ListBox-Komponente einzurichten: 1. Um eine Mobile HD-FireMonkey-Anwendung zu erstellen, wählen Sie Datei > Neu > Mobile FireMonkey-Anwendung - Delphi > Leere Anwendung aus. 2. Legen Sie eine TListBox-Komponente auf dem Formular ab. 3. Legen Sie im Objektinspektor die folgenden Eigenschaften für die ListBoxKomponente fest: o Setzen Sie die Eigenschaft Align auf alClient, damit die ListBoxKomponente das gesamte Formular verwendet. o Setzen Sie die Eigenschaft DefaultItemStyles.ItemStyle auf listboxitembottomdetail. 4. Klicken Sie entweder im Designer oder im Editor mit der rechten Maustaste auf die TListBox-Komponente, wählen Sie Eintrag hinzufügen, und fügen Sie die folgenden Komponenten hinzu: o TListBoxHeader o TSearchBox Embarcadero Technologies 110 5. Schließen Sie den Eintrags-Designer. 6. Fügen Sie dem TListBoxHeader die Komponente TLabel hinzu, und setzen Sie im Objektinspektor die folgenden Eigenschaften: o Setzen Sie die Eigenschaft Align für die TLabel-Komponente auf alClient. o Setzen Sie die Eigenschaft StyleLookup auf toollabel. o Setzen Sie die Eigenschaft TextAlign auf taCenter. o Setzen Sie die Eigenschaft Text auf DB DEMO. HERSTELLEN DER VERBINDUNG ZU DEN DATEN Mit den folgenden grundlegenden Schritten stellen Sie eine Verbindung zu den Daten in einer Datenbank über dbExpress her: 1. Doppelklicken Sie in der Tool-Palette auf die Komponente TSQLConnection. 2. Setzen Sie im Objektinspektor folgende Eigenschaften für TSQLConnection: 1. Diese App verwendet InterBase ToGo, setzen Sie daher die Eigenschaft Driver auf IBLite/ToGo. Embarcadero Technologies 111 2. Setzen Sie die Eigenschaft LoginPrompt auf False, damit der Benutzer nicht zur Eingabe von Anmeldedaten aufgefordert wird. 3. Klicken Sie bei der Eigenschaft Params auf die Ellipsen-Schaltfläche [...], und setzen Sie den Wert Database auf C:\Benutzer\Öffentlich\Öffentliche Dokumente\RAD Studio\11.0\Samples\Data\dbdemos.gdb (Speicherort der Datenbank); schließen Sie dann das Dialogfeld: 4. Setzen Sie die Eigenschaft Connected auf True. Hinweis: Wenn in der Entwicklungsumgebung eine Fehlermeldung ("Datenbank nicht verfügbar") angezeigt wird, bedeutet dies, dass Sie über keine aktuelle Lizenz für InterBase verfügen. Einige Editionen des Produkts beinhalten die Lizenz für InterBase Developer Edition. Weitere Informationen finden Sie unter Fehlerbehebung. Embarcadero Technologies 112 3. Fügen Sie dem Formular eine TSQLDataSet-Komponente hinzu, und setzen Sie die folgenden Eigenschaften: 1. Setzen Sie die Eigenschaft SQLConnection auf SQLConnection1 (die Sie im vorherigen Schritt hinzugefügt haben). 2. Setzen Sie die Eigenschaft CommandText auf select COMMON_NAME, SPECIES_NAME from BIOLIFE order by COMMON_NAME. 3. Setzen Sie die Eigenschaft Active auf True. 4. Öffnen Sie den LiveBindings-Designer, und verbinden Sie die Daten und die Benutzeroberfläche folgendermaßen: 1. Klicken Sie in BindSourceDB1 auf COMMON_NAME, und ziehen Sie den Mauszeiger auf Item.Text in ListBox1. 2. Klicken Sie in BindSourceDB1 auf SPECIES_NAME, und ziehen Sie den Mauszeiger auf Item.Detail in ListBox1. Embarcadero Technologies 113 BEREITSTELLEN DER ANWENDUNG AUF IOS Bis jetzt haben Sie InterBase auf dem Desktop verwendet. Das bedeutet, dass sich die eigentliche Datenbank auf Ihrer lokalen Festplatte (z.B. C:\Benutzer\Öffentlich\Öffentlich Dokumente\RAD Studio\11.0\Samples\Data\dbdemos.gdb) befindet. Auf dem iOS-Gerät wird die Anwendung in einer Sandbox ausgeführt, und daher können Sie Daten im Ordner Dokumente unter dem Anwendungsordner weder lesen noch schreiben. Führen Sie die folgenden Schritte aus, um eine Verbindung zu einer lokalen Datenbank auf iOS herzustellen: Stellen Sie die Datenbank auf dem iOS-Gerät bereit. Ändern Sie die Konfiguration (für die Verbindung zu der Datenbankdatei) in eine lokale Datei unter dem Ordner Dokumente. BEREITSTELLEN VON INTERBASE TOGO, DES DBEXPRESS-TREIBERS UND DER DATENBANKDATEI AUF IOS Damit Ihre Anwendung unter iOS ausgeführt werden kann, müssen Sie die folgenden Dateien bereitstellen: Interbase ToGo dbExpress-Treiber für InterBase Die Datenbankdatei (dbdemos.gdb) 1. Öffnen Sie den Bereitstellungs-Manager durch Auswahl von Projekt > Bereitstellung. 2. Wählen Sie in der Dropdown-Liste mit den Zielplattformen oben im Bereitstellungs-Manager Alle Konfigurationen - iOS-Simulator-Plattform aus. 3. Wählen Sie Weitere Dateien hinzufügen ( ): 4. Wählen Sie die folgenden Datenbankmodule aus, und klicken Sie dann auf OK, um das Dialogfeld Weitere Dateien zu schließen: o InterBase ToGo. Sie müssen die Lizenz auswählen, die beim Bereitstellen einer Anwendung auf dem Gerät verwendet werden soll. Die verfügbaren Lizenzdateien sind im Dialogfeld Weitere Dateien unter dem folgenden Namensmuster aufgeführt: reg_*.slip. Embarcadero Technologies 114 o Wie in der folgenden Abbildung gezeigt, werden beide Lizenzdateien IBToGo und IBLite für dieses Tutorial ausgewählt. DBExpress InterBase-Treiber 5. Wählen Sie Dateien hinzufügen, und wählen Sie die Datenbankdatei (z.B. C:\Benutzer\Öffentlich\Öffentliche Dokumente\RAD Studio\11.0\Samples\Data\dbdemos.gdb) aus. 6. Wählen Sie dbdemos.gdb, und ändern Sie Externer Pfad in StartUp\Documents\. 7. Markieren Sie die Spalte Plattformen (doppelklicken Sie auf die EllipsenSchaltfläche [...] in der Zeile für dbdemos.gdb): 1. Überprüfen Sie, ob iOS-Simulator und iOS-Gerät für dbdemos.gdb vorhanden sind. 2. Entfernen Sie Win32 aus der Liste, sofern es vorhanden ist (Sie müssen keine Datenbankdateien auf die Win32-Plattform kopieren). 8. Wählen Sie die Plattform Alle Konfigurationen - iOS-Gerät aus, und stellen Sie sicher, dass für dbdemos.gdb die Weitergabeeinstellung auf StartUp\Documents\ gesetzt ist. Wie bereits weiter oben konfiguriert, wird die Datenbankdatei (dbdemos.gdb) in den Ordner Dokumente im Sandbox-Bereich Ihrer iOS-App kopiert. Embarcadero Technologies 115 ÄNDERN DES CODES FÜR DIE VERBINDUNG ZU EINER LOKALEN DATENBANKDATEI AUF IOS Wie im vorherigen Schritt beschrieben, wird die TSQLConnection-Komponente mit einer Datenbank auf dem lokalen Dateisystem mit einem absoluten Pfad verbunden. Deshalb müssen Sie den Speicherort der Datei vor dem Herstellen einer Verbindung zu der Datenbank wie folgt ändern: 1. Wählen Sie im Formular-Designer die SQLConnection1-Komponente aus. 2. Doppelklicken Sie im Objektinspektor in das Wertefeld des Ereignisses BeforeConnect. 3. Fügen Sie den folgenden Code für diese Ereignisbehandlungsroutine hinzu: procedure TForm1.SQLConnection1BeforeConnect(Sender: TObject); begin {$IFDEF IOS} SQLConnection1.Params.Values['Database'] := GetHomePath + PathDelim + 'Documents' + PathDelim + 'dbdemos.gdb'; {$ENDIF} end; Mit der Funktion GetHomePath können Sie den tatsächlichen Speicherort einer iOS-App ermitteln. Verwenden Sie die Konstante PathDelim, weil PathDelim explizit das Pfadtrennzeichen der Zielplattform (anstatt des hart-codierten Trennzeichens, wie \ oder /) verwendet. Embarcadero Technologies 116 AUSFÜHREN DER ANWENDUNG AUF DEM IOS-SIMULATOR ODER AUF EINEM IOS-GERÄT Ihre Anwendung kann nun ausgeführt werden. Sie sollten genau wie in der IDE die Daten durchsuchen können. Die Liste kann auch mithilfe des Suchfeldes eingegrenzt werden, wie in der zweiten Abbildung gezeigt: Embarcadero Technologies 117 FEHLERBEHEBUNG INTERBASE-LIZENZPROBLEME Wenn in der Entwicklungsumgebung beim Verbinden zu einer Datenbank eine Fehlermeldung ("Datenbank nicht verfügbar") angezeigt wird, bedeutet das, dass Sie über keine aktuelle Lizenz für InterBase verfügen. Einige Editionen des Produkts beinhalten eine Lizenz für InterBase Developer Edition. Um die Lizenz für InterBase Developer Edition für eine registrierte RAD Studio-Installation zu aktivieren, wechseln Sie zum Embarcadero Produktlizenz-Manager (klicken Sie auf Start | Alle Programme | Embarcadero InterBase XE3). EXCEPTION-BEHANDLUNGSPROBLEME Wenn die Anwendung eine Exception auslöst, ohne dass entsprechender Exception-Behandlungscode vorhanden ist, stürzt die iOS-App einfach zur Laufzeit ab (verschwindet). In diesem Fall sollten Sie für die Fehlerbehebung mit den folgenden Schritten manuell eine Verbindung zu der Datenbank herstellen: 1. Wählen Sie die Komponente SQLConnection1 aus, und ändern Sie die Eigenschaft Connected in False. 2. Legen Sie auf dem Formular eine Schaltfläche ab, und erstellen Sie die folgende Ereignisbehandlungsroutine, um manuell eine Verbindung zu der Datenbank herzustellen: procedure TForm1.Button1Click(Sender: TObject); begin try SQLConnection1.Connected := True; SQLDataSet1.Active := True; except on e: Exception do begin ShowMessage(e.Message); end; end; end; Embarcadero Technologies 118 TYPISCHE FEHLER UND LÖSUNGEN Im Folgenden finden Sie typische Fehler, die bei der Verbindung zu der Datenbank auftreten könnten, und entsprechende Lösungsvorschläge: Fehler auf iOS Vorschlag Überprüfen Sie, ob die Datenbankdatei (dbdemos.gdb) in "StartUp\Documents\" vorhanden ist. Überprüfen Sie, ob die Lizenzdatei für InterBase ToGo vorhanden ist. Überprüfen Sie, ob Sie auf die lokale Datei zeigen (fügen Sie eine Ereignisbehandlungsroutine für das Ereignis OnBeforeConnect der Komponente SQLConnection1 hinzu). SIEHE AUCH InterBase ToGo mit dbExpress http://www.embarcadero.com/products/interbase/product-editions iOS-Tutorial: Verwenden von SQLite in iOS-Anwendungen iOS-Tutorial: Herstellen einer Verbindung zu Unternehmensdatenbanken von iOS-Client-Anwendungen aus Embarcadero Technologies 119 IOS-TUTORIAL: VERWENDEN VON SQLITE IN IOS-ANWENDUNGEN Bevor Sie mit diesem Tutorial beginnen, sollten Sie das folgende Tutorial durcharbeiten: iOS-Tutorial: Verwenden von Listenfeld-Komponenten zur Anzeige von Tabellenansichten in iOS-Anwendungen In diesem Tutorial werden die grundlegenden Schritte zum Verwenden von SQLite als lokalen Datenspeicher auf Ihrem iOS-Gerät mit dem dbExpressFramework beschrieben. Embarcadero Technologies 120 HERSTELLEN EINER VERBINDUNG ZU DER DATENBANK MIT DBEXPRESS dbExpress ist ein sehr schnelles, in Delphi geschriebenes Framework für den Datenbankzugriff. RAD Studio enthält Treiber für die wichtigsten Datenbanken, wie InterBase, Oracle, DB2, SQL Server, MySQL, Firebird, SQLite und ODBC. Sie können auf diese Datenbanken mit denselben hier beschriebenen Schritten zugreifen. Für die iOS-Plattform unterstützt dbExpress InterBase ToGo sowie SQLite. Diese Datenbankprodukte können auf iOS-Geräten ausgeführt werden. Für andere Datenbanken, wie z.B. Oracle, benötigen Sie zumindest eine Client-Bibliothek. Auf Windows-Plattformen wird die Client-Bibliothek für die Verbindung als DLL bereitgestellt. Deshalb müssen Sie Anwendungen mit Mittelschichttechnologien, wie DataSnap, entwickeln, um von iOSGeräten eine Verbindung zu diesen Datenbankprodukten herzustellen. Wie eine Verbindung zu einer Unternehmensdatenbank ohne eine ClientBibliothek auf dem iOS-Gerät hergestellt wird, ist im iOS-Tutorial: Herstellen einer Verbindung zu Unternehmensdatenbanken von iOS-Client-Anwendungen aus beschrieben. ERSTELLEN DER DATENBANK IN DER WINDOWS-UMGEBUNG FÜR ENTWICKLUNGSZWECKE Zuerst müssen Sie eine SQLite-Datenbankdatei auf Ihrer WindowsEntwicklungsplattform erstellen. Befolgen Sie die folgenden Schritte, um mit dem Designer für mobile Formulare die Benutzeroberfläche Ihrer iOS-App zu entwerfen. ERSTELLEN DER DATENBANK IM DATEN-EXPLORER 1. Wechseln Sie zum Daten-Explorer, klicken Sie mit der rechten Maustaste auf den Knoten SQLite, und wählen Sie Neue Verbindung hinzufügen: 2. Legen Sie den Namen der Verbindung, z.B. ShoppingList, fest. Embarcadero Technologies 121 3. Geben Sie den Speicherort für die Datenbankdatei an: 4. Klicken Sie auf die Schaltfläche Erweitert, um das Dialogfeld Erweiterte Eigenschaften zu öffnen. 5. Ändern Sie die Eigenschaft FailIfMissing in False, und schließen Sie das Dialogfeld: Hinweis: Durch Setzen von FailIfMissing auf False wird der Daten-Explorer angewiesen, eine neue Datenbankdatei zu erstellen, falls die Datei nicht verfügbar ist. 6. Klicken Sie auf die Schaltfläche Verbindung testen. Durch diese Operation wird die neue Datenbankdatei erstellt, falls die Datei nicht vorhanden ist: Embarcadero Technologies 122 ERSTELLEN EINER TABELLE IM DATEN-EXPLORER 1. Wählen Sie im Daten-Explorer im Abschnitt SQLite den Knoten ShoppingList aus, und wählen Sie dann im Kontextmenü Neue Tabelle. 2. Legen Sie eine Spalte mit dem Titel ShopItem und dem Datentyp TEXT fest. 3. Klicken Sie auf die Schaltfläche Speichern, und geben Sie einen Tabellennamen (z.B. Item) an. Embarcadero Technologies 123 ENTWERFEN UND EINRICHTEN DER BENUTZEROBERFLÄCHE In diesem Tutorial wird eine TListBox-Komponente als UI-Element verwendet. Führen Sie die folgenden Schritte aus, um eine ListBox-Komponente und andere UI-Komponenten einzurichten: 1. Erstellen Sie mit Datei > Neu > Mobile FireMonkey-Anwendung - Delphi eine mobile FireMonkey-Anwendung. 2. Legen Sie eine TToolBar-Komponente auf dem Formular ab. 3. Legen Sie eine TButton-Komponente auf der ToolBar-Komponente ab. 4. Setzen Sie im Objektinspektor die folgenden Eigenschaften: o Setzen Sie die Eigenschaft Name auf ButtonAdd. o Setzen Sie die Eigenschaft StyleLookup auf addtoolbuttonbordered. 5. Legen Sie eine TButton-Komponente auf der ToolBar-Komponente ab. 6. Setzen Sie im Objektinspektor die folgenden Eigenschaften: o Setzen Sie die Eigenschaft Name auf ButtonDelete. o Setzen Sie die Eigenschaft StyleLookup auf deletetoolbutton. o Setzen Sie die Eigenschaft Text auf Delete. o Setzen Sie die Eigenschaft Visible auf False. 7. Legen Sie eine TLabel-Komponente auf der ToolBar-Komponente ab. 8. Setzen Sie im Objektinspektor die folgenden Eigenschaften: o Setzen Sie die Eigenschaft Align auf alClient. o Setzen Sie die Eigenschaft StyleLookup auf toollabel. Embarcadero Technologies 124 Setzen Sie die Eigenschaft Text auf Shopping List. Setzen Sie die Eigenschaft TextAlign auf taCenter. 9. Legen Sie eine TListBox-Komponente auf dem Formular ab. 10. Setzen Sie im Objektinspektor die folgenden Eigenschaften: o Setzen Sie die Eigenschaft Align auf alClient, damit die ListBoxKomponente das gesamte Formular verwendet. o o HERSTELLEN DER VERBINDUNG ZU DEN DATEN Führen Sie die folgenden grundlegenden Schritte aus, um eine Verbindung zu den Daten in einer Datenbank herzustellen, die bereits im Daten-Explorer definiert ist: 1. Wählen Sie im Daten-Explorer die Tabelle Item aus, und ziehen Sie sie in den Formular-Designer. Hinweis: Damit werden zwei Komponenten (ShoppingList: TSQLConnection und Item: TSQLDataSet) auf dem Formular erstellt. 2. Wählen Sie im Formular die Komponente ShoppingList aus, und ändern Sie die Eigenschaft Connected in True. 3. Wählen Sie im Formular die Komponente Item aus, und ändern Sie die Eigenschaft Active in True. 4. Wählen Sie Ansicht > LiveBindings-Designer. Der LiveBindings-Designer wird geöffnet. 5. Wählen Sie ShopItem in der Komponente Item aus, und ziehen Sie ShopItem auf ListBox1. Embarcadero Technologies 125 Durch diese Schritte wird die Benutzeroberfläche der App mit den Daten in der SQLite-Datenbank verbunden. Wenn Sie für dieses Tutorial eine Tabelle mit Daten verwendet haben, werden die Daten jetzt im Formular-Designer angezeigt. ERSTELLEN EINER EREIGNISBEHANDLUNGSROUTINE ZUR ANZEIGE DER SCHALTFLÄCHE "DELETE" BEI AUSWAHL EINES EINTRAGS AUS DER LISTE DURCH DEN BENUTZER Die Eigenschaft Visible für die Schaltfläche Delete ist auf False gesetzt. Deshalb ist diese Schaltfläche für den Benutzer standardmäßig nicht sichtbar. Sie können die Schaltfläche folgendermaßen anzeigen, wenn der Benutzer einen Eintrag in der Liste auswählt: Wählen Sie ListBox1 aus, und definieren Sie die folgende Ereignisbehandlungsroutine für das Ereignis OnItemClick. procedure TForm1.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin ButtonDelete.Visible := ListBox1.Selected <> nil; end; Embarcadero Technologies 126 ERSTELLEN EINER EREIGNISBEHANDLUNGSROUTINE FÜR DIE SCHALTFLÄCHE "ADD" ZUM HINZUFÜGEN EINES EINTRAGS ZU DER LISTE Im nächsten Schritt wird diese Anwendung durch eine Funktion zum Hinzufügen von Einträgen zu der Einkaufsliste erweitert. 1. Legen Sie eine TSQLQuery-Komponente auf dem Formular ab. 2. Setzen Sie im Objektinspektor die folgenden Eigenschaften: o Setzen Sie die Eigenschaft Name auf SQLQueryInsert. o Setzen Sie die Eigenschaft SQLConnection auf ShoppingList. o Setzen Sie die SQL-Eigenschaft wie folgt: INSERT INTO ITEM (ShopItem) VALUES (:ShopItem) o o Klicken Sie bei der Eigenschaft Params auf die Schaltfläche Einblenden (...). Wählen Sie den Parameter ShopItem aus, und setzen Sie DataType auf ftString: Embarcadero Technologies 127 3. Doppelklicken Sie im Formular-Designer auf die Komponente AddButton. Fügen Sie den folgenden Code für diese Ereignisbehandlungsroutine hinzu: procedure TForm1.ButtonAddClick(Sender: TObject); var TaskName: String; begin try if InputQuery('Enter New Item', 'Name', TaskName) and (TaskName.Trim <> '') then begin SQLQueryInsert.ParamByName('ShopItem').AsString := TaskName; SQLQueryInsert.ExecSQL(); Item.Refresh; ButtonDelete.Visible := ListBox1.Selected <> nil; end; except on e: Exception do begin ShowMessage(e.Message); end; end; end; Die Funktion InputQuery zeigt ein Dialogfeld an, in dem der Benutzer aufgefordert wird, Text einzugeben. Die Funktion gibt True zurück, wenn der Benutzer OK auswählt, damit der Datenbank nur Daten hinzugefügt werden, wenn der Benutzer OK wählt, und der Text nicht leer ist. Embarcadero Technologies 128 ERSTELLEN EINER EREIGNISBEHANDLUNGSROUTINE FÜR DIE SCHALTFLÄCHE "DELETE" ZUM ENTFERNEN EINES EINTRAGS AUS DER LISTE Im nächsten Schritt wird diese Anwendung durch eine Funktion zum Entfernen von Einträgen aus der Einkaufsliste erweitert: 1. Legen Sie eine TSQLQuery-Komponente auf dem Formular ab. 2. Setzen Sie im Objektinspektor die folgenden Eigenschaften: o Setzen Sie die Eigenschaft Name auf SQLQueryDelete. o Setzen Sie die Eigenschaft SQLConnection auf ShoppingList. o Setzen Sie die SQL-Eigenschaft wie folgt: delete from Item where ShopItem = :ShopItem Klicken Sie bei der Eigenschaft Params auf die Schaltfläche Einblenden (...). o Wählen Sie den Parameter ShopItem aus, und setzen Sie DataType auf ftString. 3. Doppelklicken Sie im Formular-Designer auf die Komponente DeleteButton. Fügen Sie den folgenden Code für diese Ereignisbehandlungsroutine hinzu. o Embarcadero Technologies 129 procedure TForm1.ButtonDeleteClick(Sender: TObject); var TaskName: String; begin TaskName := ListBox1.Selected.Text; try SQLQueryDelete.ParamByName('ShopItem').AsString := TaskName; SQLQueryDelete.ExecSQL(); Item.Refresh; ButtonDelete.Visible := ListBox1.Selected <> nil; except on e: Exception do begin SHowMessage(e.Message); end; end; end; ÄNDERN DES CODES FÜR DIE VERBINDUNG ZU EINER LOKALEN DATENBANKDATEI UNTER IOS Die Hauptfunktionen für diese Anwendung sind nun implementiert. Im DatenExplorer haben Sie zuvor eine Datenbankdatei für Windows erstellt. Die Datenbankdatei steht erst für Ihr iOS-Gerät zur Verfügung, wenn Sie sie auf das iOS-Gerät kopieren oder ad-hoc erstellen. Mit den folgenden Schritten können Sie eine SQLite-Datenbank und -Tabelle erstellen: FESTLEGEN DES SPEICHERORTS DER SQLITE-DATENBANK AUF DEM IOS-GERÄT 1. Wählen Sie im Formular-Designer die Komponente ShoppingList aus. 2. Doppelklicken Sie im Objektinspektor auf das Ereignis BeforeConnect. 3. Fügen Sie den folgenden Code für diese Ereignisbehandlungsroutine hinzu: procedure TForm1.SQLConnectionSQLiteBeforeConnect(Sender: TObject); begin {$IFDEF IOS} ShoppingList.Params.Values['Database'] := GetHomePath + PathDelim + 'Documents' + PathDelim + 'shoplist.s3db'; {$ENDIF} end; Embarcadero Technologies 130 Mit der Funktion GetHomePath können Sie den tatsächlichen Speicherort einer iOS-App ermitteln. Verwenden Sie die Konstante System.SysUtils.PathDelim, weil PathDelim explizit das Pfadtrennzeichen der Zielplattform (anstatt des hartcodierten Trennzeichens, wie \ oder /) verwendet. ERSTELLEN EINER TABELLE, FALLS KEINE VORHANDEN IST Mit SQLite können Sie mit der Anweisung CREATE TABLE IF NOT EXISTS eine Tabelle erstellen, wenn noch keine Tabelle vorhanden ist. Eine Tabelle sollte angelegt werden, nachdem die TSQLConnection-Komponente eine Verbindung zu der Datenbank hergestellt hat und bevor die TSQLDataSet-Komponente eine Verbindung zu der Tabelle herstellt. Gehen Sie dazu folgendermaßen vor: 1. Wählen Sie im Formular-Designer die Komponente ShoppingList aus. 2. Doppelklicken Sie im Objektinspektor auf das Ereignis AfterConnect. 3. Fügen Sie den folgenden Code für diese Ereignisbehandlungsroutine hinzu: procedure TForm1.ShoppingListAfterConnect(Sender: TObject); begin ShoppingList.ExecuteDirect('CREATE TABLE IF NOT EXISTS Item (ShopItem NULL)'); end; Embarcadero Technologies TEXT NOT 131 AUSFÜHREN DER ANWENDUNG AUF DEM IOS-SIMULATOR ODER AUF EINEM IOS-GERÄT Ihre Anwendung kann nun ausgeführt werden (wählen Sie Start > Start). Falls bei der Ausführung der Anwendung Probleme auftreten, führen Sie die Schritte unter Fehlerbehebung aus. SIEHE AUCH iOS-Tutorial: Verwenden von InterBase ToGo in iOS-Anwendungen iOS-Tutorial: Herstellen einer Verbindung zu Unternehmensdatenbanken von iOS-Client-Anwendungen aus Unterstützung von SQLite in XE3 Embarcadero Technologies 132 IOS-TUTORIAL: HERSTELLEN EINER VERBINDUNG ZU UNTERNEHMENSDATENBANKEN VON IOSCLIENT-ANWENDUNGEN AUS Bevor Sie mit diesem Tutorial beginnen, sollten Sie das folgende Tutorial durcharbeiten: iOS-Tutorial: Verwenden von Listenfeld-Komponenten zur Anzeige von Tabellenansichten in iOS-Anwendungen iOS-Tutorial: Verwenden von InterBase ToGo in iOS-Anwendungen In diesem Tutorial wird beschrieben, wie Sie von einer iOS-Client-Anwendung aus eine Verbindung zu einer Unternehmensdatenbank herstellen. Für die Verbindung zu einer Unternehmensdatenbank benötigen Sie eine ClientBibliothek. Meistens wird die Client-Bibliothek vom Hersteller der Datenbank als DLL bereitgestellt. Für iOS-Geräte ist dieses Vorgehen nicht angebracht, weil keine Client-Bibliothek verfügbar ist. Zur Lösung dieses Problems können Sie eine Mittelschicht für die Verbindung zu einer Unternehmensdatenbank entwickeln, und Ihre iOS-Anwendung kann mit der Mittelschicht interagieren. RAD Studio stellt das DataSnap-Framework bereit, mit dem Sie die Mittelschicht, fast ohne zu programmieren, entwickeln (und darauf zugreifen) können. In diesem Tutorial werden die Schritte zum Entwickeln der Mittelschicht und des iOS-Clients beschrieben. Embarcadero Technologies 133 ERSTELLEN DER MITTELSCHICHT: EIN DATASNAP-SERVER Erstellen Sie zunächst einen DataSnap-Server, der eine Tabelle von einem Datenbankserver bereitstellt. In diesem Tutorial wird als DataSnap-Server eine DataSnap-Server-VCL-Formularanwendung verwendet. Hinweis: In diesem Tutorial dient der DataSnap-Server (VCL-Anwendung) als Mittelschicht in einer mehrschichtigen Datenbankanwendung. Sie können eine Instanz eines DataSnap-Servers einfach erstellen und später wieder löschen. Wenn Ihnen die grundlegenden Schritte klar sind, können Sie die Mittelschicht in eine Windows-Dienstanwendung umwandeln. ERSTELLEN EINER DATASNAP-SERVER-VCL-ANWENDUNG 1. Erstellen Sie ein neues Projekt. Wählen Sie Datei > Neu > Weitere, und im Dialogfeld Objektgalerie wählen Sie Delphi-Projekte > DataSnap-Server > DataSnap-Server, um ein neues Delphi-Projekt zu erstellen. 2. Der Experte Neuer DataSnap-Server wird angezeigt, und Sie müssen die Schritte befolgen, ohne allzu viele Parameter zu verändern. Embarcadero Technologies 134 3. Im Experten Neuer DataSnap-Server: 1. Wählen Sie als ersten Schritt VCL-Formularanwendung als Anwendungstyp aus. 2. Wählen Sie als zweiten Schritt das Protokoll TCP/IP, die Servermethodenklasse und Beispielmethoden aus der Liste aus. 3. Belassen Sie im dritten Schritt die Einstellung des Standard-TCP/IP Kommunikations-Ports auf 211. Damit wird sichergestellt, dass die Kommunikation zwischen dem Client und dem Server über den Standard-DataSnap-Port ausgeführt wird. 4. Wählen Sie als vierten und letzten Schritt TDSServerModule als Vorfahre für die Servermethoden aus. 4. Speichern Sie die neue Formular-Unit unter DataSnapServerUnit.pas. 5. Wechseln Sie zu DataSnapServerUnit, und ändern Sie die Eigenschaft Name des Formulars in DSServerForm. 6. Speichern Sie die Servermethoden-Unit (vom Experten standardmäßig als ServerMethodsUnit1 erstellt) unter dem Namen ServerModuleUnit.pas. 7. Speichern Sie die Servercontainer-Unit (vom Experten standardmäßig als ServerContainerUnit1 erstellt) unter dem Namen ServerContainerUnit.pas. 8. Speichern Sie das neue Projekt unter DataSnapServerProject.droj. Embarcadero Technologies 135 9. Wählen Sie in der Projektverwaltung ProjectGroup1, und speichern Sie das Projekt unter DataSnapTutorialProjectGroup.groupproj. DEFINIEREN EINER DATENMENGE FÜR DEN DATASNAP-SERVER 1. Wechseln Sie zur Datei ServerContainerUnit.pas, und ersetzen Sie die usesKlausel in der implementation-Abschnitt durch uses Winapi.Windows, ServerModuleUnit; 2. Wechseln Sie zur Datei ServerModuleUnit.pas. 3. Ändern Sie im Formular-Designer die Eigenschaft Name des Servermoduls in DSServerModule_EMPLOYEE. 4. Konfigurieren Sie die folgenden Komponenten für das Servermodul: o Legen Sie eine TSQLConnection-Komponente auf dem Servermodul ab, und setzen Sie die folgenden Eigenschaften: TSQLConnection kapselt die dbExpress-Verbindung zu einem Datenbankserver. Setzen Sie die Eigenschaft Name auf SQLConnection_EMPLOYEE. Setzen Sie die Eigenschaft LoginPrompt auf False. Setzen Sie Driver auf InterBase. Erweitern Sie den Knoten Driver, und setzen Sie die Eigenschaft DataBase auf C:\Benutzer\Öffentlich\Öffentliche Dokumente\RAD Studio\11.0\Samples\Data\EMPLOYEE.GDB. Ändern Sie die Eigenschaft Connected in True. Falls Sie eine Fehlermeldung erhalten, überprüfen Sie die DriverEigenschaften: Embarcadero Technologies 136 o Legen Sie eine TSQLDataSet-Komponente auf dem Servermodul ab, und setzen Sie die folgenden Eigenschaften: TSQLDataSet stellt die Daten dar, die mit dbExpress abgerufen wurden. Setzen Sie die Eigenschaft Name auf SQLDataSet_EMPLOYEE. Setzen Sie die Eigenschaft SQLConnection auf SQLConnection_EMPLOYEE. Setzen Sie die Eigenschaft CommandType auf ctTable. Setzen Sie die Eigenschaft CommandText auf EMPLOYEE. Ändern Sie die Eigenschaft Active in True. Falls Sie eine Fehlermeldung erhalten, überprüfen Sie die Eigenschaften, die Sie gerade konfiguriert haben. Legen Sie eine TDataSetProvider-Komponente auf dem Servermodul ab, und setzen Sie die folgenden Eigenschaften: o Die Komponente TDataSetProvider packt Daten aus einer Datenmenge und übergibt ein oder mehrere übertragbare Datenpakete an den DataSnap-Client. Setzen Sie die Eigenschaft Name auf DataSetProvider_EMPLOYEE. Setzen Sie die Eigenschaft DataSet auf SQLDataSet_EMPLOYEE. Embarcadero Technologies 137 Hinweis: In diesem Tutorial wird InterBase verwendet. Sie können aber mit denselben Schritten eine Verbindung zu jedem beliebigen Datenbankserver herstellen. Wählen Sie für die Verbindung den entsprechenden Treiber und andere Eigenschaften für die jeweilige Datenbank aus. BEREITSTELLEN DER DATENMENGE VOM DATASNAP-SERVER Sie haben gerade ein neues Servermodul mit einer DataSet-Komponente und einer DataSetProvider-Komponente erstellt, die Daten in die nächste Schicht packt. Als Nächstes muss das Servermodul für den DataSnap-Client bereitgestellt werden. 1. Öffnen Sie im Formular-Designer ServerContainerUnit. 2. Wählen Sie DSServerClass1, und aktualisieren Sie die vorhandene Ereignisbehandlungsroutine für das Ereignis OnGetClass. Fügen Sie der Ereignisbehandlungsroutine DSServerClass1 den folgenden Code hinzu: procedure TServerContainer1.DSServerClass1GetClass(DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass); begin PersistentClass := TDSServerModule_EMPLOYEE; end; Mit dieser Ereignisbehandlungsroutine stellt der DataSnap-Server Provider und public-Methoden in dieser Klasse für einen DataSnap-Client bereit. Ausgehend von den Schritten im vorherigen Abschnitt wird nun die Komponente DataSetProvider_EMPLOYEE DataSetProvider für den DataSnap-Client bereitgestellt. AUSFÜHREN DES DATASNAP-SERVERS Die Implementierung des DataSnap-Servers ist abgeschlossen. Klicken Sie mit der rechten Maustaste auf DataSnapServerProject.exe, und wählen Sie Ohne Debugger ausführen. Embarcadero Technologies 138 . Der DataSnap-Server wird nun auf Ihrem Windows-Computer ausgeführt. Da dieser DataSnap-Server keine UI-Elemente hat, sieht er wie ein leeres Formular aus, und das ist hier genau das erwartete Verhalten. ERSTELLEN EINER IOS-ANWENDUNG FÜR DIE VERBINDUNG ZUM DATASNAP-SERVER Als Nächstes wird die iOS-Client-Anwendung erstellt. 1. Klicken Sie in der Projektverwaltung mit der rechten Maustaste auf DataSnapTutorialProjectGroup, und wählen Sie Neues Projekt hinzufügen.... 2. Wählen Sie auf der Seite Delphi-Projekte den Eintrag Mobile FireMonkeyAnwendung aus: Embarcadero Technologies 139 3. Speichern Sie die neue Unit unter DataSnapClientUnit.pas. 4. Speichern Sie das neue Projekt unter DataSnapClientProject.droj. 5. Öffnen Sie DataSnapClientUnit, und ändern Sie die Eigenschaft Name des Formulars in DSClientForm. 6. Ziehen Sie die folgenden Komponenten in den Designer für mobile FireMonkey-Formulare: o TSQLConnection (SQLConnection1) TSQLConnection kapselt die dbExpress-Verbindung zu einem Datenbankserver. Außerdem unterstützt die Komponente den DataSnapServer. Setzen Sie die Eigenschaft Driver auf DataSnap. Erweitern Sie die Eigenschaft Driver, und setzen Sie die Eigenschaft HostName auf den Host-Namen des DataSnapServers. Setzen Sie die Eigenschaft LoginPrompt auf False. Setzen Sie die Eigenschaft Connected auf True. Wenn Sie eine Feherlmeldung erhalten, überprüfen Sie die gerade festgelegten Eigenschaften nochmals. o TDSProviderConnection (DSProviderConnection1) Die Komponente TDSProviderConnection stellt die Konnektivität zum DataSnap-Server über dbExpress her. Setzen Sie die Eigenschaft SQLConnection auf SQLConnection1. Embarcadero Technologies 140 Setzen Sie ServerClassName auf TDSServerModule_EMPLOYEE. Dieser Name muss mit dem Namen der Klasse des Servermoduls des DataSnap-Servers übereinstimmen. Setzen Sie die Eigenschaft Connected auf True. TClientDataSet (ClientDataSet1) o TClientDataSet implementiert eine datenbankunabhängige Datenmenge, die als lokaler Speicherpuffer der Datensätze aus einer anderen Datenmenge verwendet werden kann. Setzen Sie die Eigenschaft RemoteServer auf DSProviderConnection1. Setzen Sie die Eigenschaft ProviderName auf DataSetProvider_EMPLOYEE. Dieser Name muss mit dem Namen des Providers für den DataSnap-Server übereinstimmen. Setzen Sie die Eigenschaft Active auf True. TListBox Setzen Sie Align auf alClient. o 7. Öffnen Sie den LiveBindings-Designer, und verbinden Sie die Daten und die Benutzeroberfläche folgendermaßen: 1. Klicken Sie in BindSourceDB1 auf FULL_NAME, und ziehen Sie den Mauszeiger auf Item.Text in ListBox1: Embarcadero Technologies 141 2. Nun haben Sie den DataSnap-Client unter iOS erstellt und konfiguriert. Die Daten vom DataSnap-Server sollten nun in der IDE angezeigt werden: Embarcadero Technologies 142 BEREITSTELLEN DER MIDAS-BIBLIOTHEK AUF DEM IOSSIMULATOR Damit Ihre Anwendung auf dem iOS-Simulator ausgeführt werden kann, müssen Sie die folgenden Dateien bereitstellen: MIDAS-Bibliothek 1. Öffnen Sie den Bereitstellungs-Manager durch Auswahl von Projekt > Bereitstellung. 2. Wählen Sie Weitere Dateien hinzufügen ( ): 3. Wählen Sie das folgende Modul aus, und klicken Sie dann auf OK, um den Bereitstellungs-Manager zu schließen: o MIDAS-Bibliothek Embarcadero Technologies 143 AUSFÜHREN DER ANWENDUNG AUF DEM IOS-SIMULATOR ODER AUF EINEM IOS-GERÄT Ihre Anwendung kann nun ausgeführt werden. Wählen Sie in der Projektverwaltung entweder die Zielplattform iOS-Simulator oder iOS-Gerät, und führen Sie Ihre Anwendung aus. Sie sollten genau wie in der IDE durch die Daten blättern können. SIEHE AUCH iOS-Tutorial: Verwenden von InterBase ToGo in iOS-Anwendungen iOS-Tutorial: Verwenden von SQLite in iOS-Anwendungen DataSnap-Anwendungen entwickeln Grundlagen der mehrschichtigen Datenbank-Anwendungen Datasnap.DSServer.TDSServer Embarcadero Technologies 144