<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Esabatell</id>
	<title>RAD Studio - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Esabatell"/>
	<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/de/Spezial:Beitr%C3%A4ge/Esabatell"/>
	<updated>2026-08-30T03:24:12Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Ausf%C3%BCllen_der_Bereitstellungsseite&amp;diff=210498</id>
		<title>Ausfüllen der Bereitstellungsseite</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Ausf%C3%BCllen_der_Bereitstellungsseite&amp;diff=210498"/>
		<updated>2016-07-26T10:42:31Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22918&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Schritte bei der Entwicklung von geräteübergreifenden Anwendungen}}&lt;br /&gt;
&lt;br /&gt;
Das Ausfüllen des &#039;&#039;&#039;Bereitstellungsprofils&#039;&#039;&#039; auf der Seite &#039;&#039;&#039;[[Bereitstellungsseite|Bereitstellung]]&#039;&#039;&#039; ist ein erforderlicher, vorbereitender Schritt bei: &lt;br /&gt;
&lt;br /&gt;
* Der Weitergabe von Anwendungen für die Zielpattformen &#039;&#039;&#039;OS X&#039;&#039;&#039; und &#039;&#039;&#039;Android&#039;&#039;&#039;.&lt;br /&gt;
* Der Ausführung und der Weitergabe von Anwendungen für die Zielplattformen &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039; und &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die erforderlichen Schritte hängen, wie in den folgenden Anleitungen gezeigt, vom Build-Typ ab, der eine Kombination einer [[Unterstützte Zielplattformen|Zielplattform]] und einer [[Übersicht über Zielplattformen#Verwenden des Konfigurationsknotens|Plattformkonfiguration]] ist.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie können die Seite &#039;&#039;&#039;Bereitstellung&#039;&#039;&#039; entweder im Dialogfeld {{Menu|Tools-Optionen}} oder im Dialogfeld {{Menu|Projektoptionen}} öffnen:&lt;br /&gt;
:* In den {{Menu|Tools-Optionen}} können Sie die Werte festlegen, die {{Product}} verwendet, wenn Sie keinen Wert in den {{Menu|Projektoptionen}} angegeben haben.&lt;br /&gt;
:* Im Dialogfeld {{Menu|Projektoptionen}} können Sie Werte für das &#039;&#039;&#039;aktuelle Projekt&#039;&#039;&#039; festlegen.&lt;br /&gt;
&lt;br /&gt;
==Erforderliche Schritte für bestimmte Build-Typen==&lt;br /&gt;
&lt;br /&gt;
===OS X-Plattform===&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie die Seite &#039;&#039;&#039;[[Bereitstellungsseite|Bereitstellung]]&#039;&#039;&#039; im Dialogfeld &amp;quot;Tools-Optionen&amp;quot; oder im Dialogfeld &amp;quot;Projektoptionen&amp;quot;.&lt;br /&gt;
#: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Beim Konfigurieren der Seite &#039;&#039;&#039;Bereitstellung&#039;&#039;&#039; im Dialogfeld &amp;quot;Projektoptionen&amp;quot; müssen Sie in der Dropdown-Liste &#039;&#039;&#039;Ziel&#039;&#039;&#039; die Plattform &#039;&#039;&#039;OS X&#039;&#039;&#039; auswählen.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;OS X - Anwendungs-Store&#039;&#039;&#039; in der Dropdown-Liste &#039;&#039;&#039;Build-Typ&#039;&#039;&#039; aus.&lt;br /&gt;
# Geben Sie in das Feld &#039;&#039;&#039;Mac-Entwicklerzertifikat für Fremdhersteller&#039;&#039;&#039; den [[Bereitstellungsseite#Entwicklerzertifikat|Namen Ihres Mac-Entwickleranwendungszertifikats für Fremdhersteller]]. Zum Beispiel: &amp;lt;code&amp;gt; Mac-Entwickleranwendung für Fremdhersteller: Embarcadero Technologies...&amp;lt;/code&amp;gt;&lt;br /&gt;
# Geben Sie in das Feld &#039;&#039;&#039;Mac-Installationszertifikat für Fremdhersteller&#039;&#039;&#039; den [[Bereitstellungsseite#Entwicklerzertifikat|Namen Ihres Mac-Entwicklerinstallationszertifikats für Fremdhersteller]]. Zum Beispiel: &amp;lt;code&amp;gt;Mac-Entwicklerinstallationsprogramm für Fremdhersteller: Embarcadero Technologies...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===iOS-Geräteplattform (Entwicklung)===&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie die Seite &#039;&#039;&#039;[[Bereitstellungsseite|Bereitstellung]]&#039;&#039;&#039; entweder im Dialogfeld {{Menu|Tools-Optionen}} oder im Dialogfeld {{Menu|Projektoptionen}}.&lt;br /&gt;
#: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Beim Konfigurieren der Seite &#039;&#039;&#039;Bereitstellung&#039;&#039;&#039; im Dialogfeld {{Menu|Projektoptionen}} müssen Sie in der Dropdown-Liste &#039;&#039;&#039;Ziel&#039;&#039;&#039; die Plattform &#039;&#039;&#039;iOS-Gerät&#039;&#039;&#039; auswählen.&lt;br /&gt;
# Wählen Sie in der Dropdown-Liste &#039;&#039;&#039;Build-Typ&#039;&#039;&#039; entweder &#039;&#039;&#039;iOS-Gerät - 32 Bit - Entwicklung&#039;&#039;&#039; oder &#039;&#039;&#039;iOS-Gerät - 64 Bit - Entwicklung&#039;&#039;&#039; aus.&lt;br /&gt;
# Wählen Sie im Feld &#039;&#039;&#039;Bereitstellungsprofil&#039;&#039;&#039; &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; oder einen gültigen [[Bereitstellungsseite#Bereitstellungsprofil|Namen des Bereitstellungsprofils]] aus. &lt;br /&gt;
# Wählen Sie im Feld &#039;&#039;&#039;Entwicklerzertifikat&#039;&#039;&#039; &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; oder einen gültigen [[Bereitstellungsseite#Entwicklerzertifikat|Namen des Entwicklerzertifikats]] an. &lt;br /&gt;
&lt;br /&gt;
===iOS-Geräteplattform (Ad-hoc)===&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie die Seite &#039;&#039;&#039;[[Bereitstellungsseite|Bereitstellung]]&#039;&#039;&#039; entweder im Dialogfeld {{Menu|Projektoptionen}} oder im Dialogfeld {{Menu|Tools-Optionen}}.&lt;br /&gt;
#: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Beim Konfigurieren der Seite &#039;&#039;&#039;Bereitstellung&#039;&#039;&#039; im Dialogfeld {{Menu|Projektoptionen}} müssen Sie in der Dropdown-Liste &#039;&#039;&#039;Ziel&#039;&#039;&#039; die Plattform &#039;&#039;&#039;iOS-Gerät&#039;&#039;&#039; auswählen.&lt;br /&gt;
# Wählen Sie in der Dropdown-Liste &#039;&#039;&#039;Build-Typ&#039;&#039;&#039; entweder &#039;&#039;&#039;iOS-Gerät - 32 Bit - Ad-hoc&#039;&#039;&#039; oder &#039;&#039;&#039;iOS-Gerät - 64 Bit - Ad-hoc&#039;&#039;&#039; aus.&lt;br /&gt;
# Wählen Sie im Feld &#039;&#039;&#039;Bereitstellungsprofil&#039;&#039;&#039; &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; oder einen gültigen [[Bereitstellungsseite#Bereitstellungsprofil|Namen des Bereitstellungsprofils]] aus.&lt;br /&gt;
#  Wählen Sie im Feld &#039;&#039;&#039;Entwicklerzertifikat&#039;&#039;&#039; &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; oder einen gültigen [[Bereitstellungsseite#Entwicklerzertifikat|Namen des Distributionszertifikats]] aus. &lt;br /&gt;
&lt;br /&gt;
===iOS-Geräteplattform (Anwendungs-Store)===&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der App Store akzeptiert nur Anwendungsarchivdateien, die 64-Bit-iOS-Geräte unterstützen. Wenn Sie auch 32-Bit-iOS-Geräte unterstützen möchten, müssen Sie eine Anwendungsarchivdatei erzeugen, die 32-Bit- und 64-Bit-iOS-Geräte unterstützt. Siehe [[Bereitstellen von iOS-Anwendungen für die Übermittlung an den App Store#Unterstützen von 32-Bit-iOS-Geräten|Bereitstellen von iOS-Anwendungen für die Übermittlung an den App Store, Unterstützen von 32-Bit-iOS-Geräten]].&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie die Seite &#039;&#039;&#039;[[Bereitstellungsseite|Bereitstellung]]&#039;&#039;&#039; entweder im Dialogfeld {{Menu|Tools-Optionen}} oder im Dialogfeld {{Menu|Projektoptionen}}.&lt;br /&gt;
#: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Beim Konfigurieren der Seite &#039;&#039;&#039;Bereitstellung&#039;&#039;&#039; im Dialogfeld {{Menu|Projektoptionen}} müssen Sie in der Dropdown-Liste &#039;&#039;&#039;Ziel&#039;&#039;&#039; die Plattform &#039;&#039;&#039;iOS-Gerät&#039;&#039;&#039; auswählen.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;iOS-Gerät - 64 Bit - Anwendungs-Store&#039;&#039;&#039; in der Dropdown-Liste &#039;&#039;&#039;Build-Typ&#039;&#039;&#039; aus.&lt;br /&gt;
# Wählen Sie im Feld &#039;&#039;&#039;Bereitstellungsprofil&#039;&#039;&#039; &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; oder einen gültigen [[Bereitstellungsseite#Bereitstellungsprofil|Namen des Bereitstellungsprofils]] aus.&lt;br /&gt;
# Wählen Sie im Feld &#039;&#039;&#039;Entwicklerzertifikat&#039;&#039;&#039; &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; oder einen gültigen [[Bereitstellungsseite#Entwicklerzertifikat|Namen des Distributionszertifikats]] aus.&lt;br /&gt;
&lt;br /&gt;
===Android-Plattform (Anwendungs-Store)===&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie die Seite &#039;&#039;&#039;[[Bereitstellungsseite|Bereitstellung]]&#039;&#039;&#039; entweder im Dialogfeld {{Menu|Projektoptionen}} oder im Dialogfeld {{Menu|Tools-Optionen}}.&lt;br /&gt;
#: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Beim Konfigurieren der Seite &#039;&#039;&#039;Bereitstellung&#039;&#039;&#039; im Dialogfeld {{Menu|Projektoptionen}} müssen Sie in der Dropdown-Liste &#039;&#039;&#039;Ziel&#039;&#039;&#039; die Plattform &#039;&#039;&#039;Android&#039;&#039;&#039; auswählen.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Android - Anwendungs-Store&#039;&#039;&#039; in der Dropdown-Liste &#039;&#039;&#039;Build-Typ&#039;&#039;&#039; aus.&lt;br /&gt;
# Klicken Sie unter &#039;&#039;&#039;Keystore&#039;&#039;&#039; im Feld &#039;&#039;&#039;Datei&#039;&#039;&#039; auf &#039;&#039;&#039;...&#039;&#039;&#039;, und wählen Sie dann eine vorhandene Keystore-Datei aus. Wenn Sie keine Keystore-Datei haben, klicken Sie auf &#039;&#039;&#039;Neuer Keystore&#039;&#039;&#039;, um den Experten [[Neuen Keystore/Alias erstellen|Neuen Keystore/Alias erstellen]] zu öffnen und [[Erstellen einer KeyStore-Datei|eine Keystore-Datei zum Signieren zu erstellen]].&lt;br /&gt;
# Geben Sie das Passwort für die angegebene Keystore-Datei in das Feld &#039;&#039;&#039;Passwort&#039;&#039;&#039; ein.&lt;br /&gt;
# Wählen Sie im Feld &#039;&#039;&#039;Alias im Keystore&#039;&#039;&#039; den Alias aus der angegebenen Keystore-Datei aus, die Sie zum Signieren verwenden möchten.&lt;br /&gt;
# Geben Sie in das Feld &#039;&#039;&#039;Aliaspasswort&#039;&#039;&#039; das Passwort für den angegebenen Alias ein.&lt;br /&gt;
&lt;br /&gt;
==Themen==&lt;br /&gt;
&lt;br /&gt;
* [[Erstellen einer KeyStore-Datei|Erstellen einer KeyStore-Datei]]&lt;br /&gt;
* [[Hinzufügen eines Zertifikats zu einer Keystore-Datei|Hinzufügen eines Zertifikats zu einer Keystore-Datei]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bereitstellen von iOS-Anwendungen|Bereitstellen von iOS-Anwendungen]]&lt;br /&gt;
* [[Bereitstellungsseite|Bereitstellungsseite]]&lt;br /&gt;
* [[OS X-Anwendungsentwicklung|OS X-Anwendungsentwicklung]]&lt;br /&gt;
* [[Mobile iOS-Anwendungsentwicklung|Mobile iOS-Anwendungsentwicklung]]&lt;br /&gt;
* [[Vorbereiten von Android-Anwendungen für die Bereitstellung|Vorbereiten von Android-Anwendungen für die Bereitstellung]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Ausfullen der Bereitstellungsseite}}&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
[[Category:Geräteübergreifend]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Completing the Provisioning Page]]&lt;br /&gt;
[[fr:Compléter la page Approvisionnement]]&lt;br /&gt;
[[ja:［プロビジョニング］ページに必要な情報をすべて入力する]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Teilen_von_Daten_mit_Remote-Anwendungen_mithilfe_von_App-Tethering&amp;diff=209036</id>
		<title>Teilen von Daten mit Remote-Anwendungen mithilfe von App-Tethering</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Teilen_von_Daten_mit_Remote-Anwendungen_mithilfe_von_App-Tethering&amp;diff=209036"/>
		<updated>2016-07-22T09:41:18Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: 1 Version: Internal review. LOC-22647&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Verwenden von App-Tethering}}&lt;br /&gt;
&lt;br /&gt;
Die App-Tethering-Implementierung der [[RTL|RTL]] stellt die Unterstützung für das Teilen von Daten zwischen verbundenen Anwendungen bereit.&lt;br /&gt;
&lt;br /&gt;
==Senden von Daten an verbundene Anwendungen==&lt;br /&gt;
&lt;br /&gt;
Sie können mit den folgenden Verfahren Daten mithilfe von App-Tethering senden:&lt;br /&gt;
&lt;br /&gt;
* [[#Teilen von Ressourcen|Definieren von geteilten Ressourcen]]. Ein Ressource enthält einen Wert. Verbundene Anwendungen können den Wert einer geteilten Ressource lesen und eine geteilte Ressource abonnieren, um bei Änderungen des Werts der geteilten Ressource Aktualisierungen zu erhalten.&lt;br /&gt;
* [[#Senden von Daten als temporäre Ressource|Senden von Daten als temporäre Ressource]]. Sie können zur Laufzeit Strings und Streams senden, die verbundene Anwendungen als temporäre Ressourcen empfangen. Verbundene Anwendungen können keine temporären Ressourcen für Aktualisierungen empfangen, weil Ihre Anwendung temporäre Ressourcen nur einmal sendet.&lt;br /&gt;
&lt;br /&gt;
===Teilen von Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Eine [[lib_de:System.Tether.AppProfile.TLocalResource|TLocalResource]] ist ein Wrapper für einen Standarddatentyp ([[lib_de:System.Boolean|Boolean]], [[lib_de:System.Integer|Integer]], [[lib_de:System.Int64|Int64]], [[lib_de:System.Single|Single]], [[lib_de:System.Double|Double]], [[lib_de:System.String|String]]) oder einen [[lib_de:System.Classes.TStream|TStream]]. Sie können Ressourcen mit verbundenen Anwendungen mithilfe von App-Tethering teilen.&lt;br /&gt;
&lt;br /&gt;
So erstellen und teilen Sie eine Ressource:&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie im &#039;&#039;&#039;[[Formular-Designer|Formular-Designer]]&#039;&#039;&#039; Ihre [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente aus, und doppelklicken Sie im &#039;&#039;&#039;[[Objektinspektor|Objektinspektor]]&#039;&#039;&#039; auf die Eigenschaft [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.Resources|Resources]].&lt;br /&gt;
#  Klicken Sie im angezeigten [[Aktionslisten-Editor|Listen-Editor]] auf [[File:New.png|Neu]], um der Liste eine neue TLocalResource hinzuzufügen.&lt;br /&gt;
# Wählen Sie im Listen-Editor Ihre neue TLocalResource aus, und geben Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; für deren Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Name|Name]] einen eindeutigen Namen an.&lt;br /&gt;
&lt;br /&gt;
:[[Image:TLocalResource Editing.png]] &lt;br /&gt;
&lt;br /&gt;
Ihre Ressource wird jetzt per App-Tethering geteilt. Verbundene Anwendungen können den Wert dieser Ressource lesen und die Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts in Ihren Anwendungen verbundene Anwendungen über die Änderung benachrichtigt werden und den neuen Wert lesen können.&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie Ihre Ressource beim Entwurf definiert haben, müssen Sie ihr zur Laufzeit einen Wert zuweisen:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In {{Delphi}}:&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1.Resources.FindByName(&#039;ResourceName&#039;).Value := &#039;SomeValue&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1.Resources.Items[ResourceNumber].Value := &#039;SomeValue&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In C++: &lt;br /&gt;
**&amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1-&amp;gt;Resources-&amp;gt;FindByName(&amp;quot;ResourceName&amp;quot;)-&amp;gt;Value = &amp;quot;SomeValue&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1-&amp;gt;Resources-&amp;gt;Items[ResourceNumber]-&amp;gt;Value = &amp;quot;SomeValue&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Beschreibung:&lt;br /&gt;
:* {{Code|ResourceName}} ist der Name, den Sie in die Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Name|Name]] der Ressource eingeben, wenn Sie sie zur Laufzeit erstellen.&lt;br /&gt;
:* {{Code|SomeValue}} ist der Wert, den Sie für die Ressource festlegen möchten. Dieser Wert kann einen der oben aufgeführten Standarddatentypen haben.&lt;br /&gt;
:* {{Code|ResourceNumber}} ist die Anzahl der Einträge in der Eigenschaft [[lib_de:System.Tether.AppProfile.TResourceCollection.Items|Items]] der [[lib_de:System.Tether.AppProfile.TResourceCollection|TResourceCollection]], wenn Sie sie in Entwurfszeit erstellen.&lt;br /&gt;
&lt;br /&gt;
Verbundene Anwendungen können jederzeit den Wert Ihrer geteilten Ressource anfordern und die geteilte Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts die abonnierten Remote-Anwendungsprofile die aktualisierte Ressource erhalten.&lt;br /&gt;
&lt;br /&gt;
===Senden von Daten als temporäre Ressource===&lt;br /&gt;
&lt;br /&gt;
Anstatt Ressourcen zu teilen, können Sie mit den Methoden [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SendString|SendString]] und [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SendStream|SendStream]] der [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente Strings oder Streams an verbundene Anwendungen senden.&lt;br /&gt;
&lt;br /&gt;
Remote-Anwendungsprofile empfangen den Wert, der in einer temporären Ressource enthalten ist. Eine temporäre Ressource wird von Ihrem Anwendungsprofil nur einmal an verbundene Anwendungen gesendet. Diese temporäre Ressource wird anschließend gelöscht; verbundene Anwendungen können diese Ressource nicht abonnieren, um Aktualisierungen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Diese Methode erwartet die folgenden Parameter:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|AProfile}} ist ein Remote-Anwendungsprofil als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]]. Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] der [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem gewünschten Remote-Anwendungsprofil durchsuchen.&lt;br /&gt;
* {{Arg|Description}} ist ein String, der den Inhalt des gesendeten Wertes beschreibt.&lt;br /&gt;
* {{Arg|AString}} oder {{Arg|AStream}} ist der Wert, der gesendet werden soll.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit temporären Ressourcen andere Standarddatentypen als String senden möchten, müssen Sie diese Datentypen vor dem Senden in Strings konvertieren und dann in der verbundenen Anwendung, die den String empfängt, wieder zurück in ihren Originaltyp konvertieren. Siehe [[JSON|JSON]].&lt;br /&gt;
&lt;br /&gt;
==Empfangen von Daten von verbundenen Anwendungen==&lt;br /&gt;
&lt;br /&gt;
Ihre Anwendung kann eine Ressource erhalten, entweder weil das [[#Senden von Daten an verbundene Anwendungen|Remote-Anwendungsprofil es sendet]], oder weil Sie [[#Anfordern von Remote-Ressourcen|es anfordern]]. Sie können [[#Verarbeiten von eingehenden Remote-Ressourcen|jede eingehende Remote-Ressource mit Ihrer TTetheringAppProfile-Komponente verarbeiten]].&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus können Sie [[#Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten|eine Remote-Ressource abonnieren, um Aktualisierungen zu erhalten]]. Wenn sich der Wert der Remote-Ressource ändert, wird Ihre Anwendung über die Änderung informiert und empfängt den neuen Wert der Remote-Ressource. Wenn Sie [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering#Verbinden von Anwendungen über Gruppen|die Verbindung zu Remote-Anwendungen über Gruppen herstellen]], können Sie alternativ [[#Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen|mit lokalen Ressourcen Remote-Ressourcen abonnieren]] und separate Methoden definieren, um Aktualisierungen jeder einzelnen der abonnierten Remote-Ressourcen zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
===Anfordern von Remote-Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Die [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente stellt eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteResourceValue|GetRemoteResourceValue]], bereit, mit der Sie Remote-Ressourcen anfordern können.&lt;br /&gt;
&lt;br /&gt;
Sie können eine Remote-Ressource für die Anforderung mit einer der folgenden Parametergruppen festlegen:&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]] und den Namen der Remote-Ressource enthält.&lt;br /&gt;
&lt;br /&gt;
: Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] Ihrer [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie eine Instanz von [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]] bereit.&lt;br /&gt;
&lt;br /&gt;
: Die TTetheringAppProfile-Komponente enthält eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteProfileResources|GetRemoteProfileResources]], die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.&lt;br /&gt;
&lt;br /&gt;
===Verarbeiten von eingehenden Remote-Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Die TTetheringAppProfile-Komponente kann Remote-Ressourcen aus einem der folgenden Gründe erhalten:&lt;br /&gt;
&lt;br /&gt;
* Ein Remote-Anwendungsprofil sendet eine temporäre Ressource.&lt;br /&gt;
* Sie fordern eine Remote-Ressource an.&lt;br /&gt;
&lt;br /&gt;
Wenn die TTetheringAppProfile-Komponente eine Ressource empfängt, werden zwei Ereignisse der TTetheringAppProfile-Komponente in der folgenden Reihenfolge ausgelöst: OnAcceptResource und OnResourceReceived. Zur Verarbeitung von eingehenden Ressourcen müssen Sie diese Ereignisse behandeln.&lt;br /&gt;
&lt;br /&gt;
:[[Image:OnAcceptResource Image.png]]&lt;br /&gt;
&lt;br /&gt;
====Annehmen oder Ablehnen einer eingehenden Remote-Ressource====&lt;br /&gt;
&lt;br /&gt;
Sie können [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnAcceptResource|OnAcceptResource]] behandeln, um festzulegen, ob Sie eine eingehende Ressource akzeptieren oder nicht. Dieses Ereignis stellt die folgenden Parameter bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|Sender}} ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.&lt;br /&gt;
* {{Arg|AProfileId}} ist der [[lib_de:System.Tether.Manager.TTetheringProfileInfo.ProfileIdentifier|ProfileIdentifier]] des Remote-Anwendungsprofils, das die Ressource sendet. Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] der [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem mit der angegebenen Profil-ID übereinstimmenden Remote-Anwendungsprofil durchsuchen.&lt;br /&gt;
* {{Arg|AResource}} ist eine Instanz von [[lib_de:System.Tether.AppProfile.TCustomRemoteItem|TCustomRemoteItem]], die Eigenschaften enthält, die Sie lesen können, um festzulegen, ob Sie die eingehende Remote-Ressource annehmen oder nicht, z.&amp;amp;nbsp;B. den [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Name|Namen]] der Ressource oder einen [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Hint|Hinweis]], der deren Inhalt beschreibt.&lt;br /&gt;
* {{Arg|AcceptResource}} ist ein boolescher Wert, der standardmäßig auf {{True}} gesetzt ist. Sie können diesen Wert in {{False}} ändern, wenn Sie die eingehende Ressource nicht empfangen möchten.&lt;br /&gt;
&lt;br /&gt;
====Lesen einer eingehenden Remote-Ressource====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das Ereignis OnAcceptResource nicht behandeln oder in Ihrer Ereignisbehandlungsroutine den Wert von {{Arg|AcceptResource}} nicht in {{False}} ändern, wird das Ereignis [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnResourceReceived|OnResourceReceived]] ausgelöst. Sie können dieses Ereignis behandeln, um die Daten aus der Ressource zu lesen. Dieses Ereignis stellt die folgenden Parameter bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|Sender}} ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.&lt;br /&gt;
* {{Arg|AResource}} ist eine Instanz von [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]]. TRemoteResource erweitert TCustomRemoteItem um zwei Eigenschaften, über die Sie auf den tatsächlichen Wert der Ressource zugreifen können:&lt;br /&gt;
** [[lib_de:System.Tether.AppProfile.TRemoteResource.ResType|TRemoteResource.ResType]] gibt an, ob die Ressource einen Standarddatentyp (TRemoteResourceType.Data) oder einen TStream (TRemoteResourceType.Stream) enthält.&lt;br /&gt;
** Mit [[lib_de:System.Tether.AppProfile.TRemoteResource.Value|TRemoteResource.Value]] können Sie auf den Wert zugreifen. So rufen Sie den Wert ab:&lt;br /&gt;
*** Wenn der Wert ein Standarddatentyp ist, überprüfen Sie [[lib_de:System.Tether.AppProfile.TResourceValue.DataType|TRemoteResource.Value.DataType]], um den Typ der Daten zu ermitteln, und lesen Sie die entsprechende TRemoteResource.Value-Eigenschaft: AsBoolean, AsInteger, AsInt64, AsSingle, AsDouble, AsString.&lt;br /&gt;
*** Wenn der Wert ein Stream ist, lesen Sie den Stream aus TRemoteResource.Value.AsStream.&lt;br /&gt;
&lt;br /&gt;
===Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten===&lt;br /&gt;
&lt;br /&gt;
Wenn Ihre Anwendung mit einer Anwendung verbunden ist, die Ressourcen teilt, können Sie diese geteilten Ressourcen abonnieren, um Aktualisierungen zu erhalten, sodass Ihre Anwendung diese geteilten Ressourcen erhält, sobald sich deren Wert in der verbundenen Anwendung ändert.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering#Verbinden von Anwendungen über Gruppen|mit Gruppen Verbindungen zu anderen Anwendungen herstellen]], können Sie [[#Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen|beim Entwurf die Remote-Ressourcen zu lokalen Ressourcen zuordnen]]. Diese lokalen Ressourcen verfügen ein Ereignis, mit dem Sie die Änderungen des Wertes der Remote-Ressource behandeln können.&lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie [[#Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem|die Remote-Ressourcen zur Laufzeit über ihren Ressourcennamen abonnieren]].&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie dürfen eine Remote-Ressource nicht gleichzeitig mit einer lokalen Ressource und SubscribeToRemoteItem abonnieren. Verwenden Sie für jede Remote-Ressource nur eine dieser Abonnementmethoden.&lt;br /&gt;
&lt;br /&gt;
====Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen====&lt;br /&gt;
&lt;br /&gt;
So ordnen Sie beim Entwurf eine lokale Ressource einer Remote-Ressource zu:&lt;br /&gt;
&lt;br /&gt;
# Befolgen Sie die obigen Schritte, um eine Ressource zu erstellen und mithilfe von App-Tethering zu teilen.&lt;br /&gt;
# Wählen Sie im Ressourcenlisten-Editor Ihre neue [[lib_de:System.Tether.AppProfile.TLocalResource|TLocalResource]] aus, und ändern Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; deren Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Kind|Kind]] in [[lib_de:System.Tether.AppProfile.TTetheringRemoteKind|Mirror]].&lt;br /&gt;
&lt;br /&gt;
:[[Image: TLocalResource Kind Property.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Eigenschaft Kind Ihrer TLocalResource in Mirror ändern, wird Ihre TLocalResource nicht mit Remote-Anwendungen geteilt. Sondern bei jeder Änderung des Wertes einer Remote-Ressource mit demselben [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Name|Namen]] wie der Name, den Sie in Ihrer TLocalResource angegeben haben, wird der Wert Ihrer lokalen Ressource aktualisiert und das Ereignis [[lib_de:System.Tether.AppProfile.TLocalResource.OnResourceReceived|TLocalResource.OnResourceReceived]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
====Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem====&lt;br /&gt;
&lt;br /&gt;
Die TTetheringAppProfile-Komponente stellt eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SubscribeToRemoteItem|SubscribeToRemoteItem]], bereit, mit der Sie Remote-Ressourcen abonnieren können, um Aktualisierungen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Sie können eine Remote-Ressource zum Abonnieren mit einer der folgenden Parametergruppen festlegen:&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]] und den Namen der Remote-Ressource enthält.&lt;br /&gt;
&lt;br /&gt;
: Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] Ihrer [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von TTetheringProfileInfo und eine Instanz von [[lib_de:System.Tether.AppProfile.TCustomRemoteItem|TCustomRemoteItem]] enthält.&lt;br /&gt;
&lt;br /&gt;
: Die [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente enthält eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteProfileActions|GetRemoteProfileActions]], die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.&lt;br /&gt;
&lt;br /&gt;
Ändert sich der Wert einer Remote-Ressource mit demselben Namen wie die Instanz von TCustomRemoteItem, die Sie abonniert haben, wird der Wert der abonnierten Instanz von TCustomRemoteItem aktualisiert und das Ereignis [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnResourceUpdated|OnResourceUpdated]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
:* Um den Wert der abonnierten Instanz von TCustomRemoteItem zu lesen, müssen Sie den Typ dieser Instanz in [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]] umwandeln und deren Daten lesen. Siehe [[#Lesen einer eingehenden Remote-Ressource|Lesen einer eingehenden Remote-Ressource]].&lt;br /&gt;
:* Ändert sich eine Remote-Ressource, die einen Stream enthält, wird das Ereignis OnResourceUpdated ausgelöst, aber der Wert der abonnierten Instanz von TCustomRemoteItem wird nicht aktualisiert. Sie müssen den neuen Ressourcenwert manuell anfordern. Siehe [[#Anfordern von Remote-Ressourcen|Anfordern von Remote-Ressourcen]].&lt;br /&gt;
:* Das Ereignis OnResourceUpdated wird nicht ausgelöst, wenn Sie dieselbe Remote-Ressource mit einer lokalen Ressource abonnieren.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Hinzufügen von App-Tethering zu Anwendungen|Hinzufügen von App-Tethering zu Anwendungen]]&lt;br /&gt;
* [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering|Verbinden zu Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
* [[Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering|Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]	&lt;br /&gt;
* [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]&lt;br /&gt;
* [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Classes.TStream|TStream]]&lt;br /&gt;
* [[lib_de:System.String|String]]&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:RTL.BDShoppingList Sample|BDShoppingList]] (Beispiel)&lt;br /&gt;
* [[samp_en:RTL.DesktopCast Sample|DesktopCast]] (Beispiel)	&lt;br /&gt;
* [[samp_en:RTL.MediaPlayer Sample|MediaPlayer]] (Beispiel)	&lt;br /&gt;
* [[samp_en:RTL.PhotoWall Sample|PhotoWall]] (Beispiel)&lt;br /&gt;
&lt;br /&gt;
[[Category:XE6]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Teilen_von_Daten_mit_Remote-Anwendungen_mithilfe_von_App-Tethering&amp;diff=209035</id>
		<title>Teilen von Daten mit Remote-Anwendungen mithilfe von App-Tethering</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Teilen_von_Daten_mit_Remote-Anwendungen_mithilfe_von_App-Tethering&amp;diff=209035"/>
		<updated>2016-07-22T09:41:15Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Internal review. LOC-22647&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Verwenden von App-Tethering}}&lt;br /&gt;
&lt;br /&gt;
Die App-Tethering-Implementierung der [[RTL|RTL]] stellt die Unterstützung für das Teilen von Daten zwischen verbundenen Anwendungen bereit.&lt;br /&gt;
&lt;br /&gt;
==Senden von Daten an verbundene Anwendungen==&lt;br /&gt;
&lt;br /&gt;
Sie können mit den folgenden Verfahren Daten mithilfe von App-Tethering senden:&lt;br /&gt;
&lt;br /&gt;
* [[#Teilen von Ressourcen|Definieren von geteilten Ressourcen]]. Ein Ressource enthält einen Wert. Verbundene Anwendungen können den Wert einer geteilten Ressource lesen und eine geteilte Ressource abonnieren, um bei Änderungen des Werts der geteilten Ressource Aktualisierungen zu erhalten.&lt;br /&gt;
* [[#Senden von Daten als temporäre Ressource|Senden von Daten als temporäre Ressource]]. Sie können zur Laufzeit Strings und Streams senden, die verbundene Anwendungen als temporäre Ressourcen empfangen. Verbundene Anwendungen können keine temporären Ressourcen für Aktualisierungen empfangen, weil Ihre Anwendung temporäre Ressourcen nur einmal sendet.&lt;br /&gt;
&lt;br /&gt;
===Teilen von Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Eine [[lib_de:System.Tether.AppProfile.TLocalResource|TLocalResource]] ist ein Wrapper für einen Standarddatentyp ([[lib_de:System.Boolean|Boolean]], [[lib_de:System.Integer|Integer]], [[lib_de:System.Int64|Int64]], [[lib_de:System.Single|Single]], [[lib_de:System.Double|Double]], [[lib_de:System.String|String]]) oder einen [[lib_de:System.Classes.TStream|TStream]]. Sie können Ressourcen mit verbundenen Anwendungen mithilfe von App-Tethering teilen.&lt;br /&gt;
&lt;br /&gt;
So erstellen und teilen Sie eine Ressource:&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie im &#039;&#039;&#039;[[Formular-Designer|Formular-Designer]]&#039;&#039;&#039; Ihre [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente aus, und doppelklicken Sie im &#039;&#039;&#039;[[Objektinspektor|Objektinspektor]]&#039;&#039;&#039; auf die Eigenschaft [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.Resources|Resources]].&lt;br /&gt;
#  Klicken Sie im angezeigten [[Aktionslisten-Editor|Listen-Editor]] auf [[File:New.png|Neu]], um der Liste eine neue TLocalResource hinzuzufügen.&lt;br /&gt;
# Wählen Sie im Listen-Editor Ihre neue TLocalResource aus, und geben Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; für deren Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Name|Name]] einen eindeutigen Namen an.&lt;br /&gt;
&lt;br /&gt;
:[[Image:TLocalResource Editing.png]] &lt;br /&gt;
&lt;br /&gt;
Ihre Ressource wird jetzt per App-Tethering geteilt. Verbundene Anwendungen können den Wert dieser Ressource lesen und die Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts in Ihren Anwendungen verbundene Anwendungen über die Änderung benachrichtigt werden und den neuen Wert lesen können.&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie Ihre Ressource beim Entwurf definiert haben, müssen Sie ihr zur Laufzeit einen Wert zuweisen:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In {{Delphi}}:&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1.Resources.FindByName(&#039;ResourceName&#039;).Value := &#039;SomeValue&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1.Resources.Items[ResourceNumber].Value := &#039;SomeValue&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In C++: &lt;br /&gt;
**&amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1-&amp;gt;Resources-&amp;gt;FindByName(&amp;quot;ResourceName&amp;quot;)-&amp;gt;Value = &amp;quot;SomeValue&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1-&amp;gt;Resources-&amp;gt;Items[ResourceNumber]-&amp;gt;Value = &amp;quot;SomeValue&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Beschreibung:&lt;br /&gt;
:* {{Code|ResourceName}} ist der Name, den Sie in die Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Name|Name]] der Ressource eingeben, wenn Sie sie zur Laufzeit erstellen.&lt;br /&gt;
:* {{Code|SomeValue}} ist der Wert, den Sie für die Ressource festlegen möchten. Dieser Wert kann einen der oben aufgeführten Standarddatentypen haben.&lt;br /&gt;
:* {{Code|ResourceNumber}} ist die Anzahl der Einträge in der Eigenschaft [[lib_de:System.Tether.AppProfile.TResourceCollection.Items|Items]] der [[lib_de:System.Tether.AppProfile.TResourceCollection|TResourceCollection]], wenn Sie sie in Entwurfszeit erstellen.&lt;br /&gt;
&lt;br /&gt;
Verbundene Anwendungen können jederzeit den Wert Ihrer geteilten Ressource anfordern und die geteilte Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts die abonnierten Remote-Anwendungsprofile die aktualisierte Ressource erhalten.&lt;br /&gt;
&lt;br /&gt;
===Senden von Daten als temporäre Ressource===&lt;br /&gt;
&lt;br /&gt;
Anstatt Ressourcen zu teilen, können Sie mit den Methoden [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SendString|SendString]] und [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SendStream|SendStream]] der [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente Strings oder Streams an verbundene Anwendungen senden.&lt;br /&gt;
&lt;br /&gt;
Remote-Anwendungsprofile empfangen den Wert, der in einer temporären Ressource enthalten ist. Eine temporäre Ressource wird von Ihrem Anwendungsprofil nur einmal an verbundene Anwendungen gesendet. Diese temporäre Ressource wird anschließend gelöscht; verbundene Anwendungen können diese Ressource nicht abonnieren, um Aktualisierungen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Diese Methode erwartet die folgenden Parameter:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|AProfile}} ist ein Remote-Anwendungsprofil als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]]. Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] der [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem gewünschten Remote-Anwendungsprofil durchsuchen.&lt;br /&gt;
* {{Arg|Description}} ist ein String, der den Inhalt des gesendeten Wertes beschreibt.&lt;br /&gt;
* {{Arg|AString}} oder {{Arg|AStream}} ist der Wert, der gesendet werden soll.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit temporären Ressourcen andere Standarddatentypen als String senden möchten, müssen Sie diese Datentypen vor dem Senden in Strings konvertieren und dann in der verbundenen Anwendung, die den String empfängt, wieder zurück in ihren Originaltyp konvertieren. Siehe [[JSON|JSON]].&lt;br /&gt;
&lt;br /&gt;
==Empfangen von Daten von verbundenen Anwendungen==&lt;br /&gt;
&lt;br /&gt;
Ihre Anwendung kann eine Ressource erhalten, entweder weil das [[#Senden von Daten an verbundene Anwendungen|Remote-Anwendungsprofil es sendet]], oder weil Sie [[#Anfordern von Remote-Ressourcen|es anfordern]]. Sie können [[#Verarbeiten von eingehenden Remote-Ressourcen|jede eingehende Remote-Ressource mit Ihrer TTetheringAppProfile-Komponente verarbeiten]].&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus können Sie [[#Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten|eine Remote-Ressource abonnieren, um Aktualisierungen zu erhalten]]. Wenn sich der Wert der Remote-Ressource ändert, wird Ihre Anwendung über die Änderung informiert und empfängt den neuen Wert der Remote-Ressource. Wenn Sie [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering#Verbinden von Anwendungen über Gruppen|die Verbindung zu Remote-Anwendungen über Gruppen herstellen]], können Sie alternativ [[#Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen|mit lokalen Ressourcen Remote-Ressourcen abonnieren]] und separate Methoden definieren, um Aktualisierungen jeder einzelnen der abonnierten Remote-Ressourcen zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
===Anfordern von Remote-Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Die [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente stellt eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteResourceValue|GetRemoteResourceValue]], bereit, mit der Sie Remote-Ressourcen anfordern können.&lt;br /&gt;
&lt;br /&gt;
Sie können eine Remote-Ressource für die Anforderung mit einer der folgenden Parametergruppen festlegen:&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]] und den Namen der Remote-Ressource enthält.&lt;br /&gt;
&lt;br /&gt;
: Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] Ihrer [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie eine Instanz von [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]] bereit.&lt;br /&gt;
&lt;br /&gt;
: Die TTetheringAppProfile-Komponente enthält eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteProfileResources|GetRemoteProfileResources]], die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.&lt;br /&gt;
&lt;br /&gt;
===Verarbeiten von eingehenden Remote-Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Die TTetheringAppProfile-Komponente kann Remote-Ressourcen aus einem der folgenden Gründe erhalten:&lt;br /&gt;
&lt;br /&gt;
* Ein Remote-Anwendungsprofil sendet eine temporäre Ressource.&lt;br /&gt;
* Sie fordern eine Remote-Ressource an.&lt;br /&gt;
&lt;br /&gt;
Wenn die TTetheringAppProfile-Komponente eine Ressource empfängt, werden zwei Ereignisse der TTetheringAppProfile-Komponente in der folgenden Reihenfolge ausgelöst: OnAcceptResource und OnResourceReceived. Zur Verarbeitung von eingehenden Ressourcen müssen Sie diese Ereignisse behandeln.&lt;br /&gt;
&lt;br /&gt;
:[[Image:OnAcceptResource Image.png]]&lt;br /&gt;
&lt;br /&gt;
====Annehmen oder Ablehnen einer eingehenden Remote-Ressource====&lt;br /&gt;
&lt;br /&gt;
Sie können [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnAcceptResource|OnAcceptResource]] behandeln, um festzulegen, ob Sie eine eingehende Ressource akzeptieren oder nicht. Dieses Ereignis stellt die folgenden Parameter bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|Sender}} ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.&lt;br /&gt;
* {{Arg|AProfileId}} ist der [[lib_de:System.Tether.Manager.TTetheringProfileInfo.ProfileIdentifier|ProfileIdentifier]] des Remote-Anwendungsprofils, das die Ressource sendet. Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] der [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem mit der angegebenen Profil-ID übereinstimmenden Remote-Anwendungsprofil durchsuchen.&lt;br /&gt;
* {{Arg|AResource}} ist eine Instanz von [[lib_de:System.Tether.AppProfile.TCustomRemoteItem|TCustomRemoteItem]], die Eigenschaften enthält, die Sie lesen können, um festzulegen, ob Sie die eingehende Remote-Ressource annehmen oder nicht, z.&amp;amp;nbsp;B. den [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Name|Namen]] der Ressource oder einen [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Hint|Hinweis]], der deren Inhalt beschreibt.&lt;br /&gt;
* {{Arg|AcceptResource}} ist ein boolescher Wert, der standardmäßig auf {{True}} gesetzt ist. Sie können diesen Wert in {{False}} ändern, wenn Sie die eingehende Ressource nicht empfangen möchten.&lt;br /&gt;
&lt;br /&gt;
====Lesen einer eingehenden Remote-Ressource====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das Ereignis OnAcceptResource nicht behandeln oder in Ihrer Ereignisbehandlungsroutine den Wert von {{Arg|AcceptResource}} nicht in {{False}} ändern, wird das Ereignis [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnResourceReceived|OnResourceReceived]] ausgelöst. Sie können dieses Ereignis behandeln, um die Daten aus der Ressource zu lesen. Dieses Ereignis stellt die folgenden Parameter bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|Sender}} ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.&lt;br /&gt;
* {{Arg|AResource}} ist eine Instanz von [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]]. TRemoteResource erweitert TCustomRemoteItem um zwei Eigenschaften, über die Sie auf den tatsächlichen Wert der Ressource zugreifen können:&lt;br /&gt;
** [[lib_de:System.Tether.AppProfile.TRemoteResource.ResType|TRemoteResource.ResType]] gibt an, ob die Ressource einen Standarddatentyp (TRemoteResourceType.Data) oder einen TStream (TRemoteResourceType.Stream) enthält.&lt;br /&gt;
** Mit [[lib_de:System.Tether.AppProfile.TRemoteResource.Value|TRemoteResource.Value]] können Sie auf den Wert zugreifen. So rufen Sie den Wert ab:&lt;br /&gt;
*** Wenn der Wert ein Standarddatentyp ist, überprüfen Sie [[lib_de:System.Tether.AppProfile.TResourceValue.DataType|TRemoteResource.Value.DataType]], um den Typ der Daten zu ermitteln, und lesen Sie die entsprechende TRemoteResource.Value-Eigenschaft: AsBoolean, AsInteger, AsInt64, AsSingle, AsDouble, AsString.&lt;br /&gt;
*** Wenn der Wert ein Stream ist, lesen Sie den Stream aus TRemoteResource.Value.AsStream.&lt;br /&gt;
&lt;br /&gt;
===Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten===&lt;br /&gt;
&lt;br /&gt;
Wenn Ihre Anwendung mit einer Anwendung verbunden ist, die Ressourcen teilt, können Sie diese geteilten Ressourcen abonnieren, um Aktualisierungen zu erhalten, sodass Ihre Anwendung diese geteilten Ressourcen erhält, sobald sich deren Wert in der verbundenen Anwendung ändert.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering#Verbinden von Anwendungen über Gruppen|mit Gruppen Verbindungen zu anderen Anwendungen herstellen]], können Sie [[#Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen|beim Entwurf die Remote-Ressourcen zu lokalen Ressourcen zuordnen]]. Diese lokalen Ressourcen verfügen ein Ereignis, mit dem Sie die Änderungen des Wertes der Remote-Ressource behandeln können.&lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie [[#Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem|die Remote-Ressourcen zur Laufzeit über ihren Ressourcennamen abonnieren]].&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie dürfen eine Remote-Ressource nicht gleichzeitig mit einer lokalen Ressource und SubscribeToRemoteItem abonnieren. Verwenden Sie für jede Remote-Ressource nur eine dieser Abonnementmethoden.&lt;br /&gt;
&lt;br /&gt;
====Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen====&lt;br /&gt;
&lt;br /&gt;
So ordnen Sie beim Entwurf eine lokale Ressource einer Remote-Ressource zu:&lt;br /&gt;
&lt;br /&gt;
# Befolgen Sie die obigen Schritte, um eine Ressource zu erstellen und mithilfe von App-Tethering zu teilen.&lt;br /&gt;
# Wählen Sie im Ressourcenlisten-Editor Ihre neue [[lib_de:System.Tether.AppProfile.TLocalResource|TLocalResource]] aus, und ändern Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; deren Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Kind|Kind]] in [[lib_de:System.Tether.AppProfile.TTetheringRemoteKind|Mirror]].&lt;br /&gt;
&lt;br /&gt;
:[[Image: TLocalResource Kind Property.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Eigenschaft Kind Ihrer TLocalResource in Mirror ändern, wird Ihre TLocalResource nicht mit Remote-Anwendungen geteilt. Sondern bei jeder Änderung des Wertes einer Remote-Ressource mit demselben [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Name|Namen]] wie der Name, den Sie in Ihrer TLocalResource angegeben haben, wird der Wert Ihrer lokalen Ressource aktualisiert und das Ereignis [[lib_de:System.Tether.AppProfile.TLocalResource.OnResourceReceived|TLocalResource.OnResourceReceived]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
====Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem====&lt;br /&gt;
&lt;br /&gt;
Die TTetheringAppProfile-Komponente stellt eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SubscribeToRemoteItem|SubscribeToRemoteItem]], bereit, mit der Sie Remote-Ressourcen abonnieren können, um Aktualisierungen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Sie können eine Remote-Ressource zum Abonnieren mit einer der folgenden Parametergruppen festlegen:&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]] und den Namen der Remote-Ressource enthält.&lt;br /&gt;
&lt;br /&gt;
: Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] Ihrer [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von TTetheringProfileInfo und eine Instanz von [[lib_de:System.Tether.AppProfile.TCustomRemoteItem|TCustomRemoteItem]] enthält.&lt;br /&gt;
&lt;br /&gt;
: Die [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente enthält eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteProfileActions|GetRemoteProfileActions]], die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.&lt;br /&gt;
&lt;br /&gt;
Ändert sich der Wert einer Remote-Ressource mit demselben Namen wie die Instanz von TCustomRemoteItem, die Sie abonniert haben, wird der Wert der abonnierten Instanz von TCustomRemoteItem aktualisiert und das Ereignis [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnResourceUpdated|OnResourceUpdated]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
:* Um den Wert der abonnierten Instanz von TCustomRemoteItem zu lesen, müssen Sie den Typ dieser Instanz in [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]] umwandeln und deren Daten lesen. Siehe [[#Lesen einer eingehenden Remote-Ressource|Lesen einer eingehenden Remote-Ressource]].&lt;br /&gt;
:* Ändert sich eine Remote-Ressource, die einen Stream enthält, wird das Ereignis OnResourceUpdated ausgelöst, aber der Wert der abonnierten Instanz von TCustomRemoteItem wird nicht aktualisiert. Sie müssen den neuen Ressourcenwert manuell anfordern. Siehe [[#Anfordern von Remote-Ressourcen|Anfordern von Remote-Ressourcen]].&lt;br /&gt;
:* Das Ereignis OnResourceUpdated wird nicht ausgelöst, wenn Sie dieselbe Remote-Ressource mit einer lokalen Ressource abonnieren.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Hinzufügen von App-Tethering zu Anwendungen|Hinzufügen von App-Tethering zu Anwendungen]]&lt;br /&gt;
* [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering|Verbinden zu Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
* [[Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering|Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]	&lt;br /&gt;
* [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]&lt;br /&gt;
* [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Classes.TStream|TStream]]&lt;br /&gt;
* [[lib_de:System.String|String]]&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:RTL.BDShoppingList Sample|BDShoppingList]] (Beispiel)&lt;br /&gt;
* [[samp_en:RTL.DesktopCast Sample|DesktopCast]] (Beispiel)	&lt;br /&gt;
* [[samp_en:RTL.MediaPlayer Sample|MediaPlayer]] (Beispiel)	&lt;br /&gt;
* [[samp_en:RTL.PhotoWall Sample|PhotoWall]] (Beispiel)&lt;br /&gt;
&lt;br /&gt;
[[Category:XE6]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Manuelles_Sandboxing_der_Mac_OS_X-Anwendung&amp;diff=209034</id>
		<title>Manuelles Sandboxing der Mac OS X-Anwendung</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Manuelles_Sandboxing_der_Mac_OS_X-Anwendung&amp;diff=209034"/>
		<updated>2016-07-22T09:28:23Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Esabatell verschob die Seite Manuelles Sandboxing der Mac OS X-Anwendung nach Manuelles Sandboxing der OS X-Anwendung: Renamed in English&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Manuelles Sandboxing der OS X-Anwendung]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Manuelles_Sandboxing_der_macOS-Anwendung&amp;diff=209033</id>
		<title>Manuelles Sandboxing der macOS-Anwendung</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Manuelles_Sandboxing_der_macOS-Anwendung&amp;diff=209033"/>
		<updated>2016-07-22T09:28:23Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Esabatell verschob die Seite Manuelles Sandboxing der Mac OS X-Anwendung nach Manuelles Sandboxing der OS X-Anwendung: Renamed in English&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|OS X-Anwendungsentwicklung}}&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; [[Sandboxing der OS X-Anwendung|Die Verwendung der IDE]] wird für das Sandboxing empfohlen. Manuelle Schritte sind viel komplexer als die Verwendung der IDE und werden hier nur für diejenigen kurz umrissen, die außerhalb der IDE arbeiten müssen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nicht mit der {{Product}}-IDE ein Sandbox-Anwendungspaket einer OS X-Anwendung erstellen, können Sie die erforderlichen Schritte auf Ihrem Mac ausführen. Dieser Abschnitt enthält eine grundlegende Einführung in diesen Vorgang, die Details finden Sie in der [https://developer.apple.com/library/mac/documentation/Security/Conceptual/AppSandboxDesignGuide/AboutAppSandbox/AboutAppSandbox.html Apple-Dokumentation] (siehe die entsprechenden Links).&lt;br /&gt;
&lt;br /&gt;
Auf dem Mac müssen Sie eine [[Apple-Anwendungsberechtigungsdatei (*.entitlements)|{{Placeholder|Projekt}}.entitlements]]-Datei erstellen und diese in das Anwendungspaket platzieren, das Paket mit einer Codesignatur versehen, es komprimieren und bei Apple einreichen.&lt;br /&gt;
&lt;br /&gt;
==Anforderungen von Apple==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden sind die erforderlichen Elemente und die relevanten Informationen von Apple aufgeführt:&lt;br /&gt;
&lt;br /&gt;
* Die zugehörige [[Apple-Anwendungsberechtigungsdatei (*.entitlements)|{{Placeholder|Projekt}}.entitlements]]-Datei.&lt;br /&gt;
* Befehl &amp;quot;codesign&amp;quot;:&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/codesign.1.html man page for code-sign command (EN)]&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html Code Signing Guide]&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/OSXWorkflowGuide/CodeSigning/CodeSigning.html#//apple_ref/doc/uid/TP40011201-CH7-SW1 Code Signing Your App]&lt;br /&gt;
** Beispiel:&lt;br /&gt;
**:&amp;lt;code&amp;gt;codesign -s&amp;quot;Name des Zertifikats&amp;quot; -f &amp;quot;Name des Anwendungspakets&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
* Befehl &amp;quot;productbuild&amp;quot;&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/productbuild.1.html man page for productbuild command (EN)]&lt;br /&gt;
** [https://developer.apple.com/library/mac/#releasenotes/General/SubmittingToMacAppStore/_index.html Submitting Your Application Using Application Loader]&lt;br /&gt;
* Befehl &amp;quot;installer&amp;quot; (zum Testen der Installation Ihrer Anwendung)&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/installer.8.html man page for installer command (EN)]&lt;br /&gt;
&lt;br /&gt;
==Manuelles Signieren des Codes und Erzeugen einer OS X-Anwendung auf dem Mac==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Ihre Anwendung im Mac App Store bereitstellen möchten, ist eine Codesignatur und eine Bereitstellung der Voraussetzungen erforderlich. Sie können diese Schritte entweder in der IDE (weiter oben beschrieben) oder manuell (indem Sie die folgenden allgemeinen Anleitungen befolgen) durchführen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:* Sie müssen zum Bereitstellen von Apps im Mac App Store [[Bereitstellen von OS X-Anwendungen|ein Distributionszertifikat anfordern]].&lt;br /&gt;
:* Für das Mac-Sandboxing ist eine [[Apple-Anwendungsberechtigungsdatei (*.entitlements)|{{Placeholder|Projekt}}.entitlements]]-Datei erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So signieren Sie Ihren Code und erzeugen ein Produktinstallationsprogramm für Ihre OS X-Anwendung manuell:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Erzeugen Sie die Anwendung in der IDE, und stellen Sie sie in OS X bereit.&lt;br /&gt;
# Öffnen Sie auf dem Mac ein Terminalfenster.&lt;br /&gt;
# Wechseln Sie in das Verzeichnis &amp;quot;scratch-dir&amp;quot; von PAServer:&lt;br /&gt;
#: {{Path|Applications/{{Company}}/PAServer/{{VersionNumber}}/scratch-dir/machinename-remoteprofilename/}}&lt;br /&gt;
# Führen Sie die folgenden Befehle aus:&lt;br /&gt;
#*Codesignatur für die Anwendung:&lt;br /&gt;
#*: {{Code|sudo codesign -f -v -s &amp;quot;Mac-Entwickler: Vorname Nachname&amp;quot; &amp;quot;App-Name.app&amp;quot;}}&lt;br /&gt;
#* Führen Sie &amp;quot;productbuild&amp;quot; aus, um ein Installationspaket zu erstellen:&lt;br /&gt;
#*: {{Code|sudo productbuild --component &amp;quot;App-Name.app&amp;quot; /Applications --sign &amp;quot;Mac-Entwickler: Vorname Nachname&amp;quot; --product &amp;quot;App-Name.app/Contents/info.plist&amp;quot; AppName.pkg}}&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Sandboxing der OS X-Anwendung|Sandboxing einer OS X-Anwendung]] mit {{Product}}&lt;br /&gt;
* [https://developer.apple.com/library/mac/#referencelibrary/GettingStarted/RoadMapOSX/books/RM_PrepareForAppStore_Mac/PrepareForAppStore/PrepareForAppStore.html OS X Roadmap for Mac App Store]&lt;br /&gt;
&lt;br /&gt;
[[Category:OS X]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Sandboxing Your OS X Application Manually]]&lt;br /&gt;
[[fr:Sandboxing manuel de votre application OS X]]&lt;br /&gt;
[[ja:Mac OS X アプリケーションの手動でのサンドボックス化]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Standardbehandlung_von_F1-Hilfe_in_VCL-Anwendungen&amp;diff=209026</id>
		<title>Standardbehandlung von F1-Hilfe in VCL-Anwendungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Standardbehandlung_von_F1-Hilfe_in_VCL-Anwendungen&amp;diff=209026"/>
		<updated>2016-07-19T14:49:54Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Aufrufen von HTML-Hilfe aus Anwendungen}}&lt;br /&gt;
__TOC__&lt;br /&gt;
Das Drücken von F1 ist das Standardvorgehen zum Aktivieren von Hilfe in Anwendungen. Die IDE von {{Variables|Product}} unterstützt Optionen zur Definition von Hilfeparametern für die automatische Erzeugung von Code zur Aktivierung der Hilfe beim Drücken von F1. In diesem Fall erzeugt {{Variables|Product}} automatisch den Standardcode, der zum Ausführen eines entsprechenden Aufrufs der Hilfebehandlungsfunktion beim Drücken von F1 in VCL-Anwendungen erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
In diesem Thema wird die Definition von Parametern für Aufrufe der Hilfebehandlungsfunktionen und die Ausführung dieser Aufrufe beschrieben. Die folgenden Erläuterungen beziehen sich ausschließlich auf VCL-GUI-Anwendungen. &lt;br /&gt;
&lt;br /&gt;
==Erforderliche Hilfeparameter==&lt;br /&gt;
&lt;br /&gt;
Beim Drücken von F1 wird in dem Formular, das den Fokus hat, das Ereignis &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm.OnHelp|OnHelp]]&#039;&#039;&#039; ausgelöst. Die Anwendung führt als Ergebnis die Standard-Ereignisbehandlungsroutine des Ereignisses &#039;&#039;&#039;OnHelp&#039;&#039;&#039; aus. Die IDE erzeugt die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Ereignisbehandlungsroutine mit den angegebenen Hilfeparametern. Sie können in der IDE die Hilfeparameter &#039;&#039;&#039;HelpFile&#039;&#039;&#039;, &#039;&#039;&#039;HelpType&#039;&#039;&#039;, &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; festlegen. Diese Parameter werden in den folgenden Abschnitten beschrieben.&lt;br /&gt;
&lt;br /&gt;
===HelpFile===&lt;br /&gt;
&lt;br /&gt;
Zunächst müssen Sie die Hilfedateien festlegen, die die Hilfethemen für Ihre Anwendung enthalten. Sie können eine oder mehrere Hilfedateien angeben. Die Haupthilfedatei für eine Anwendung kann mit der Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpFile|TApplication.HelpFile]]&#039;&#039;&#039; des globalen &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication|Application]]&#039;&#039;&#039;-Objekts und individuelle Hilfedateien für einzelne Formulare können mit der Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm.HelpFile|TForm.HelpFile]]&#039;&#039;&#039; des zugehörigen &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm|Form]]&#039;&#039;&#039;-Objekts festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Diese &#039;&#039;&#039;HelpFile&#039;&#039;&#039;-Dateien können beim Entwurf als entsprechende IDE-Eigenschaften für die programmseitige Definition der &#039;&#039;&#039;HelpFile&#039;&#039;&#039;-Eigenschaften des zugehörigen Objekts angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Normalerweise wird einer Anwendung die Haupthilfedatei über die Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpFile|HelpFile]]&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts zugewiesen.&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie das Dialogfeld &#039;&#039;&#039;Projektoptionen&#039;&#039;&#039; (&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; Optionen&#039;&#039;&#039;&amp;lt;/font&amp;gt;), und wählen Sie die Seite &#039;&#039;&#039;Erscheinungsbild&#039;&#039;&#039; (unter &#039;&#039;&#039;Anwendung&#039;&#039;&#039;) aus. Geben Sie in das Feld &#039;&#039;&#039;Hilfedatei&#039;&#039;&#039; die Hilfedatei ein. Klicken Sie auf &#039;&#039;&#039;Durchsuchen&#039;&#039;&#039;. Das Dialogfeld &#039;&#039;&#039;Hilfedatei der Anwendung&#039;&#039;&#039; zeigt per Vorgabe nur die Dateien mit der Erweiterung .hlp an. Zum Festlegen von anderen Hilfedateitypen wählen Sie im Steuerelement &#039;&#039;&#039;Dateitypen&#039;&#039;&#039; den Typ &amp;lt;code&amp;gt;Alle Dateien (*.*)&amp;lt;/code&amp;gt; aus. Anschließend können Sie Hilfedateien der Typen .CHM, .HTML und andere auswählen.)&lt;br /&gt;
&lt;br /&gt;
Diese Option setzt die Eigenschaft &#039;&#039;&#039;Application.HelpFile&#039;&#039;&#039;. Diese Eigenschaft definiert die Haupthilfedatei für die Anwendung. Wenn die Anwendung einen Hilfebehandlungsbefehl empfängt, führt sie standardmäßig den Hilfebefehl mit dieser Hilfedatei aus.&lt;br /&gt;
&lt;br /&gt;
Eine einzelne Hilfedatei für ein bestimmtes Formular können Sie mit der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; dieses Formulars festlegen.&lt;br /&gt;
&lt;br /&gt;
Wählen Sie im Formular-Designer das Formular aus; im Objektinspektor werden die Eigenschaften dieses Formulars (siehe die folgende Abbildung) angezeigt:&lt;br /&gt;
&lt;br /&gt;
[[Image:Help HelpFile.PNG|HelpFile]]&lt;br /&gt;
&lt;br /&gt;
Geben Sie in der rechten Spalte der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; den Namen &amp;lt;code&amp;gt;Form1.chm&amp;lt;/code&amp;gt; ein. Damit wird die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039; des Objekts &#039;&#039;&#039;Form1&#039;&#039;&#039; definiert. Diese Eigenschaft setzt die Hilfedatei &amp;lt;code&amp;gt;Form1.chm&amp;lt;/code&amp;gt; für das Formular &#039;&#039;&#039;Form1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Anwendung sucht in der Regel die Hilfedatei in dem Verzeichnis, aus dem die ausführbare Datei der Anwendung ausgeführt wird. Wenn die angegebene Hilfedatei sich in einem anderen Verzeichnis befindet, sollten Sie daher den relativer Pfad zu dieser Datei angeben. Sie könnten beispielsweise &amp;lt;code&amp;gt;.\Help\Form1.chm&amp;lt;/code&amp;gt; angeben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Standard-Ereignisbehandlungsroutine verwendet die in der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des Formulars mit dem Fokus angegebene Hilfedatei. Wenn die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039; einen leeren String enthält, dann verwendet die Ereignisbehandlungsroutine die in der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts angegebene Hilfedatei.&lt;br /&gt;
&lt;br /&gt;
===HelpType, HelpContext und HelpKeyword===&lt;br /&gt;
&lt;br /&gt;
Zum Erzeugen des Codes für die Standard-Ereignisbehandlungsroutine des Ereignisses &#039;&#039;&#039;OnHelp&#039;&#039;&#039; muss die IDE über das anzuzeigende Hilfethema informiert sein. Die Werte der Eigenschaften &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; können definieren, welches Thema angezeigt werden soll. Die Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039; definiert, welche dieser beiden Eigenschaften verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie im Objektinspektor für das Formular mit der rechten Maustaste in die rechte Spalte der Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039;. Wenn Sie den Wert &amp;lt;code&amp;gt;htContext&amp;lt;/code&amp;gt; auswählen, dann wird der in der Eigenschaft &#039;&#039;&#039;HelpContext&#039;&#039;&#039; angegebene Wert verwendet. Bei dem Wert &amp;lt;code&amp;gt;htKeyword&amp;lt;/code&amp;gt; wird der in der Eigenschaft &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; angegebene Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
==Ergänzen des erzeugten Codes==&lt;br /&gt;
&lt;br /&gt;
Mit {{Variables|Product}} entwickelte Anwendungen verwenden zur Anzeige verschiedener Typen von Hilfedateien externe Hilfe-Viewer. Sie müssen Ihrer Anwendung mitteilen, welcher externe Hilfe-Viewer verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
===Wrapper von externen Hilfe-Viewern===&lt;br /&gt;
&lt;br /&gt;
Die VCL ist unabhängig von externen Hilfe-Viewer. Alle von den Standard-Ereignisbehandlungsroutinen der Hilfe verwendeten Hilfefunktionen sind in Interfaces der Unit &#039;&#039;&#039;[[lib_de:System.HelpIntfs|System.HelpIntfs]]&#039;&#039;&#039; deklariert. Die VCL stellt Packages mit Klassen bereit, die diese Interfaces mit einem bestimmten externen Hilfe-Viewer (für den speziellen Typ der Hilfedatei) implementieren. Beispielweise implementiert die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; für die Viewer von &#039;&#039;&#039;CHM&#039;&#039;&#039;-Hilfedateien (Microsoft HTML Help) einen Wrapper für die &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039;-API.&lt;br /&gt;
&lt;br /&gt;
Diese Unabhängigkeit (von externen Hilfe-Viewern) bedeutet, dass Sie nur in der &#039;&#039;&#039;uses&#039;&#039;&#039;-Klausel die geeignete Unit angeben müssen, die die Implementierung der &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039;-Interfaces für einen bestimmten externen Hilfe-Viewer bereitstellt. Sie können beispielsweise die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039;&#039; zur Anzeige von &#039;&#039;&#039;CHM&#039;&#039;&#039;-Hilfedateien angeben.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Eigenschaften &#039;&#039;&#039;HelpFile&#039;&#039;&#039;, &#039;&#039;&#039;HelpType&#039;&#039;&#039;, &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; definiert haben, kann die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Standard-Ereignisbehandlungsroutine die Hilfebehandlungsfunktion folgendermaßen verwenden:&lt;br /&gt;
&lt;br /&gt;
 IHelpSystem.ShowContextHelp(Form1.HelpContext, Form1.HelpFile);&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;HelpType = htContext&amp;lt;/code&amp;gt; wie folgt:&lt;br /&gt;
&lt;br /&gt;
 IHelpSystem.ShowHelp(Form1.HelpKeyword, Form1.HelpFile);&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;HelpType = htKeyword&amp;lt;/code&amp;gt;. Hier ist &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039; das in der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; deklariert Interface.&lt;br /&gt;
&lt;br /&gt;
===Zugreifen auf externe Hilfe-Viewer===&lt;br /&gt;
&lt;br /&gt;
In den folgenden Abschnitten wird die Implementierung von &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039; und anderen in der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; deklarierten Interfaces durch Klassen in einer Unit erläutert, die einen Wrapper für einen externen Hilfe-Viewer bereitstellt. Die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; enthält beispielsweise einen Wrapper für die &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039;-Funktions-API. Die Unit &#039;&#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; implementiert die Klasse &#039;&#039;&#039;THTMLHelpViewer&#039;&#039;&#039;, die eine Implementierung für Interfaces aus der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; bereitstellt. Die Klasse &#039;&#039;&#039;THTMLHelpViewer&#039;&#039;&#039; ist aber im &#039;&#039;&#039;implementation&#039;&#039;&#039;-Abschnitt der Unit deklariert. Deshalb müssen Sie wissen, wie auf Member dieser Klasse von außerhalb der Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Die Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; enthält zwei globale Funktionen: &#039;&#039;&#039;[[lib_de:System.HelpIntfs.RegisterViewer|RegisterViewer]]&#039;&#039;&#039; und &#039;&#039;&#039;[[lib_de:System.HelpIntfs.GetHelpSystem|GetHelpSystem]]&#039;&#039;&#039;. Diese Funktionen haben die folgenden Deklarationen:&lt;br /&gt;
&lt;br /&gt;
 function RegisterViewer(const newViewer: ICustomHelpViewer; out Manager: IHelpManager): Integer;&lt;br /&gt;
 function GetHelpSystem(out System: IHelpSystem): Boolean;&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;initialization&#039;&#039;&#039;-Abschnitt der Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; werden die folgenden Aufrufe ausgeführt:&lt;br /&gt;
&lt;br /&gt;
 HelpViewer := THtmlHelpViewer.Create;&lt;br /&gt;
 HelpIntfs.RegisterViewer(HelpViewerIntf, HelpViewer.FHelpManager);&lt;br /&gt;
&lt;br /&gt;
Diese Aufrufe erstellen ein Objekt vom Typ &#039;&#039;&#039;THtmlHelpViewer&#039;&#039;&#039; und registrieren das gekapselte externe Hilfe-Viewer-Objekt als ein Hilfesystem-Managerobjekt (&#039;&#039;HelpViewer.FHelpManager&#039;&#039;) vom Typ &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpManager|IHelpManager]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Zum Aufrufen des registrierten externen Hilfe-Viewers kann im Code die Funktion &#039;&#039;&#039;HelpIntfs.GetHelpSystem&#039;&#039;&#039; aufgerufen werden, die auf das im &#039;&#039;&#039;HelpViewer.FHelpManager&#039;&#039;&#039; gespeicherte Objekt zugreift und dann ein &#039;&#039;&#039;IHelpManager&#039;&#039;&#039;-Typobjekt im Typobjekt &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem|IHelpSystem]]&#039;&#039;&#039; zurückgibt. &#039;&#039;&#039;TApplication&#039;&#039;&#039;  hat die Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpSystem|HelpSystem]]&#039;&#039;&#039;, die auch den Zugriff auf dieses &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039;-Typobjekt ermöglicht, über das &#039;&#039;&#039;TApplication&#039;&#039;&#039;-Methoden die Hilfe-Viewer-Funktionen aufrufen. &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039;-Typobjekte stellen unter anderem die Hilfefunktionen &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem.ShowContextHelp|IHelpSystem.ShowContextHelp]]&#039;&#039;&#039; und &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem.ShowHelp|IHelpSystem.ShowHelp]]&#039;&#039;&#039; bereit. Diese Funktionen können von der Standard-Ereignisbehandlungsroutine &#039;&#039;&#039;OnHelp&#039;&#039;&#039; und dem Benutzercode aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
==Schritte für die Anzeige der F1-Hilfe==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie F1 drücken, aktiviert die Anwendung die Standard-Ereignisbehandlungsroutine für das Ereignis &#039;&#039;&#039;OnHelp&#039;&#039;&#039; des Formulars mit dem Fokus. In den vorherigen Abschnitten dieses Themas wurden die theoretischen Aspekte des Setzens der Hilfeeigenschaften im Objektinspektor und das Hinzufügen des zur ordnungsgemäßen Aktivierung der Hilfeseite erforderlichen Codes behandelt.&lt;br /&gt;
&lt;br /&gt;
Befolgen Sie zum Umsetzen dieser theoretischen Aspekte in die Praxis die folgenden Schritte.&lt;br /&gt;
&lt;br /&gt;
===So zeigen Sie die F1-Hilfe an:===&lt;br /&gt;
&lt;br /&gt;
# Setzen Sie die Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts (die Eigenschaft &#039;&#039;&#039;TApplication.HelpFile&#039;&#039;&#039;) oder eines bestimmten Formulars (die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039;). Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpFile = Form1.chm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;li&amp;gt;Wählen Sie für ein bestimmtes Formular die Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039; aus, und setzen Sie &amp;lt;code&amp;gt;htContext&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;htKeyword&amp;lt;/code&amp;gt;. Zum Beispiel:&lt;br /&gt;
 &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpType = htContext&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: Setzen Sie dann in der Eigenschaft &#039;&#039;&#039;TForm.HelpContext&#039;&#039;&#039; den entsprechenden &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;-Wert. &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt; sollte ein Integerwert sein, der ein Thema in der in &#039;&#039;&#039;HelpFile&#039;&#039;&#039; angegebenen Hilfedatei festlegt. Bei CHM-Hilfedateien müssen Sie beispielsweise im &#039;&#039;&#039;[MAP]&#039;&#039;&#039;-Abschnitt Ihrer Projektdatei (.hhp) symbolische Kontext-IDs von Hilfethemen zu numerischen &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;-Werten zuordnen. Zum Beispiel:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpContext = 714&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Durch Drücken von F1 wird nun das Thema mit der &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;714&amp;lt;/code&amp;gt; aus einer in &#039;&#039;&#039;HelpFile&#039;&#039;&#039; angegebenen CHM-Hilfedatei angezeigt.&lt;br /&gt;
:: Oder:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpType = htKeyword&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Setzen Sie dann in der Eigenschaft &#039;&#039;&#039;TForm.HelpKeyword&#039;&#039;&#039; den entsprechenden &amp;lt;code&amp;gt;Keyword&amp;lt;/code&amp;gt;-Wert. Durch Drücken von F1 wird nun das Thema angezeigt, dessen &amp;lt;code&amp;gt;Alink&amp;lt;/code&amp;gt;-Tag-Wert mit dem angegebenen &amp;lt;code&amp;gt;Keyword&amp;lt;/code&amp;gt;-Wert übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;li&amp;gt;In {{Delphi}}-Anwendungen fügen Sie der &#039;&#039;&#039;uses&#039;&#039;&#039;-Klausel des Hauptmoduls Ihrer Anwendung die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; hinzu. &amp;lt;br /&amp;gt; &lt;br /&gt;
In C++-Anwendungen fügen Sie die Direktive &amp;lt;code&amp;gt;#include Vcl.HtmlHelpViewer.hpp&amp;lt;/code&amp;gt; hinzu.&lt;br /&gt;
&amp;lt;br /&amp;gt;Fügen Sie &amp;lt;code&amp;gt;#pragma package(smart_init)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;#pragma link &amp;quot;Vcl.HtmlHelpViewer&amp;quot;&amp;lt;/code&amp;gt; hinzu.&amp;lt;br /&amp;gt;&lt;br /&gt;
Damit wird definiert, dass Ihre Anwendung die API der Funktion &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039; verwendet, die die CHM-Hilfedateien anzeigt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wählen Sie den Befehl &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Start &amp;amp;gt; Start&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Ihre Anwendung wird geöffnet.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wählen Sie das Formular Form1 aus. Drücken Sie F1. Die automatisch erzeugte Standard-Ereignisbehandlungsroutine &#039;&#039;&#039;OnHelp&#039;&#039;&#039; zeigt das im &#039;&#039;&#039;HelpContext&#039;&#039;&#039;- (oder &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039;-)Wert in der festgelegten .CHM-Hilfedatei angegebene Thema an.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei war keine manuelle Programmierung erforderlich. Die gesamte Behandlung für das Drücken von F1 wurde automatisch implementiert. Sie müssen nur die passenden Hilfeparameter im Objektinspektor eingeben. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
*[[Aufrufen von HTML-Hilfe aus Anwendungen|Aufrufen von HTML-Hilfe aus Anwendungen]]&lt;br /&gt;
**[[HTML-Hilfetypen|HTML-Hilfetypen]]&lt;br /&gt;
**[[Anpassen der F1-Hilfe in VCL-Anwendungen|Anpassen der F1-Hilfe in VCL-Anwendungen]]&lt;br /&gt;
**[[Anzeigen von Hilfe mit Hilfe-Schaltflächen|Anzeigen von Hilfe mit Hilfe-Schaltflächen]]&lt;br /&gt;
**[[Zuordnen von Hilfe zu Menübefehlen|Zuordnen von Hilfe zu Menübefehlen]]&lt;br /&gt;
**[[Anzeigen von Hilfe zu ausgewählten Menübefehlen|Anzeigen von Hilfe zu ausgewählten Menübefehlen]]&lt;br /&gt;
**[[Anzeigen von Kontexthilfe zu Bildschirmobjekten mit der Eigenschaft Hint|Anzeigen von Kontexthilfe zu Bildschirmobjekten mit der Eigenschaft Hint]]&lt;br /&gt;
* [[Hilfesystem-Interfaces|Hilfesystem-Interfaces]]&lt;br /&gt;
* [[Hilfe in einer VCL-Anwendung verwenden|Hilfe in einer VCL-Anwendung verwenden]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Windows-Entwicklerhandbuch]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Standardbehandlung_von_F1-Hilfe_in_VCL-Anwendungen&amp;diff=209025</id>
		<title>Standardbehandlung von F1-Hilfe in VCL-Anwendungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Standardbehandlung_von_F1-Hilfe_in_VCL-Anwendungen&amp;diff=209025"/>
		<updated>2016-07-19T14:46:59Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: 1 Version: Internal review. LOC-22582&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Aufrufen von HTML-Hilfe aus Anwendungen}}&lt;br /&gt;
__TOC__&lt;br /&gt;
Das Drücken von F1 ist das Standardvorgehen zum Aktivieren von Hilfe in Anwendungen. Die IDE von {{Variables|Product}} unterstützt Optionen zur Definition von Hilfeparametern für die automatische Erzeugung von Code zur Aktivierung der Hilfe beim Drücken von F1. In diesem Fall erzeugt {{Variables|Product}} automatisch den Standardcode, der zum Ausführen eines entsprechenden Aufrufs der Hilfebehandlungsfunktion beim Drücken von F1 in VCL-Anwendungen erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
In diesem Thema wird die Definition von Parametern für Aufrufe der Hilfebehandlungsfunktionen und die Ausführung dieser Aufrufe beschrieben. Die folgenden Erläuterungen beziehen sich ausschließlich auf VCL-GUI-Anwendungen. &lt;br /&gt;
&lt;br /&gt;
==Erforderliche Hilfeparameter==&lt;br /&gt;
&lt;br /&gt;
Beim Drücken von F1 wird in dem Formular, das den Fokus hat, das Ereignis &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm.OnHelp|OnHelp]]&#039;&#039;&#039; ausgelöst. Die Anwendung führt als Ergebnis die Standard-Ereignisbehandlungsroutine des Ereignisses &#039;&#039;&#039;OnHelp&#039;&#039;&#039; aus. Die IDE erzeugt die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Ereignisbehandlungsroutine mit den angegebenen Hilfeparametern. Sie können in der IDE die Hilfeparameter &#039;&#039;&#039;HelpFile&#039;&#039;&#039;, &#039;&#039;&#039;HelpType&#039;&#039;&#039;, &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; festlegen. Diese Parameter werden in den folgenden Abschnitten beschrieben.&lt;br /&gt;
&lt;br /&gt;
===HelpFile===&lt;br /&gt;
&lt;br /&gt;
Zunächst müssen Sie die Hilfedateien festlegen, die die Hilfethemen für Ihre Anwendung enthalten. Sie können eine oder mehrere Hilfedateien angeben. Die Haupthilfedatei für eine Anwendung kann mit der Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpFile|TApplication.HelpFile]]&#039;&#039;&#039; des globalen &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication|Application]]&#039;&#039;&#039;-Objekts und individuelle Hilfedateien für einzelne Formulare können mit der Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm.HelpFile|TForm.HelpFile]]&#039;&#039;&#039; des zugehörigen &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm|Form]]&#039;&#039;&#039;-Objekts festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Diese &#039;&#039;&#039;HelpFile&#039;&#039;&#039;-Dateien können beim Entwurf als entsprechende IDE-Eigenschaften für die programmseitige Definition der &#039;&#039;&#039;HelpFile&#039;&#039;&#039;-Eigenschaften des zugehörigen Objekts angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Normalerweise wird einer Anwendung die Haupthilfedatei über die Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpFile|HelpFile]]&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts zugewiesen.&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie das Dialogfeld &#039;&#039;&#039;Projektoptionen&#039;&#039;&#039; (&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; Optionen&#039;&#039;&#039;&amp;lt;/font&amp;gt;), und wählen Sie die Seite &#039;&#039;&#039;Erscheinungsbild&#039;&#039;&#039; (unter &#039;&#039;&#039;Anwendung&#039;&#039;&#039;) aus. Geben Sie in das Feld &#039;&#039;&#039;Hilfedatei&#039;&#039;&#039; die Hilfedatei ein. Klicken Sie auf &#039;&#039;&#039;Durchsuchen&#039;&#039;&#039;. Das Dialogfeld &#039;&#039;&#039;Hilfedatei der Anwendung&#039;&#039;&#039; zeigt per Vorgabe nur die Dateien mit der Erweiterung .hlp an. Zum Festlegen von anderen Hilfedateitypen wählen Sie im Steuerelement &#039;&#039;&#039;Dateitypen&#039;&#039;&#039; den Typ &amp;lt;code&amp;gt;Alle Dateien (*.*)&amp;lt;/code&amp;gt; aus. Anschließend können Sie Hilfedateien der Typen .CHM, .HTML und andere auswählen.)&lt;br /&gt;
&lt;br /&gt;
Diese Option setzt die Eigenschaft &#039;&#039;&#039;Application.HelpFile&#039;&#039;&#039;. Diese Eigenschaft definiert die Haupthilfedatei für die Anwendung. Wenn die Anwendung einen Hilfebehandlungsbefehl empfängt, führt sie standardmäßig den Hilfebefehl mit dieser Hilfedatei aus.&lt;br /&gt;
&lt;br /&gt;
Eine einzelne Hilfedatei für ein bestimmtes Formular können Sie mit der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; dieses Formulars festlegen.&lt;br /&gt;
&lt;br /&gt;
Wählen Sie im Formular-Designer das Formular aus; im Objektinspektor werden die Eigenschaften dieses Formulars (siehe die folgende Abbildung) angezeigt:&lt;br /&gt;
&lt;br /&gt;
[[Image:Help HelpFile.PNG|HelpFile]]&lt;br /&gt;
&lt;br /&gt;
Geben Sie in der rechten Spalte der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; den Namen &amp;lt;code&amp;gt;Form1.chm&amp;lt;/code&amp;gt; ein. Damit wird die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039; des Objekts &#039;&#039;&#039;Form1&#039;&#039;&#039; definiert. Diese Eigenschaft setzt die Hilfedatei &amp;lt;code&amp;gt;Form1.chm&amp;lt;/code&amp;gt; für das Formular &#039;&#039;&#039;Form1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Anwendung sucht in der Regel die Hilfedatei in dem Verzeichnis, aus dem die ausführbare Datei der Anwendung ausgeführt wird. Wenn die angegebene Hilfedatei sich in einem anderen Verzeichnis befindet, sollten Sie daher den relativer Pfad zu dieser Datei angeben. Sie könnten beispielsweise &amp;lt;code&amp;gt;.\Help\Form1.chm&amp;lt;/code&amp;gt; angeben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Standard-Ereignisbehandlungsroutine verwendet die in der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des Formulars mit dem Fokus angegebene Hilfedatei. Wenn die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039; einen leeren String enthält, dann verwendet die Ereignisbehandlungsroutine die in der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts angegebene Hilfedatei.&lt;br /&gt;
&lt;br /&gt;
===HelpType, HelpContext und HelpKeyword===&lt;br /&gt;
&lt;br /&gt;
Zum Erzeugen des Codes für die Standard-Ereignisbehandlungsroutine des Ereignisses &#039;&#039;&#039;OnHelp&#039;&#039;&#039; muss die IDE über das anzuzeigende Hilfethema informiert sein. Die Werte der Eigenschaften &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; können definieren, welches Thema angezeigt werden soll. Die Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039; definiert, welche dieser beiden Eigenschaften verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie im Objektinspektor für das Formular mit der rechten Maustaste in die rechte Spalte der Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039;. Wenn Sie den Wert &amp;lt;code&amp;gt;htContext&amp;lt;/code&amp;gt; auswählen, dann wird der in der Eigenschaft &#039;&#039;&#039;HelpContext&#039;&#039;&#039; angegebene Wert verwendet. Bei dem Wert &amp;lt;code&amp;gt;htKeyword&amp;lt;/code&amp;gt; wird der in der Eigenschaft &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; angegebene Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
==Ergänzen des erzeugten Codes==&lt;br /&gt;
&lt;br /&gt;
Mit {{Variables|Product}} entwickelte Anwendungen verwenden zur Anzeige verschiedener Typen von Hilfedateien externe Hilfe-Viewer. Sie müssen Ihrer Anwendung mitteilen, welcher externe Hilfe-Viewer verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
===Wrapper von externen Hilfe-Viewern===&lt;br /&gt;
&lt;br /&gt;
Die VCL ist unabhängig von externen Hilfe-Viewer. Alle von den Standard-Ereignisbehandlungsroutinen der Hilfe verwendeten Hilfefunktionen sind in Interfaces der Unit &#039;&#039;&#039;[[lib_de:System.HelpIntfs|System.HelpIntfs]]&#039;&#039;&#039; deklariert. Die VCL stellt Packages mit Klassen bereit, die diese Interfaces mit einem bestimmten externen Hilfe-Viewer (für den speziellen Typ der Hilfedatei) implementieren. Beispielweise implementiert die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; für die Viewer von &#039;&#039;&#039;CHM&#039;&#039;&#039;-Hilfedateien (Microsoft HTML Help) einen Wrapper für die &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039;-API.&lt;br /&gt;
&lt;br /&gt;
Diese Unabhängigkeit (von externen Hilfe-Viewern) bedeutet, dass Sie nur in der &#039;&#039;&#039;uses&#039;&#039;&#039;-Klausel die geeignete Unit angeben müssen, die die Implementierung der &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039;-Interfaces für einen bestimmten externen Hilfe-Viewer bereitstellt. Sie können beispielsweise die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039;&#039; zur Anzeige von &#039;&#039;&#039;CHM&#039;&#039;&#039;-Hilfedateien angeben.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Eigenschaften &#039;&#039;&#039;HelpFile&#039;&#039;&#039;, &#039;&#039;&#039;HelpType&#039;&#039;&#039;, &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; definiert haben, kann die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Standard-Ereignisbehandlungsroutine die Hilfebehandlungsfunktion folgendermaßen verwenden:&lt;br /&gt;
&lt;br /&gt;
 IHelpSystem.ShowContextHelp(Form1.HelpContext, Form1.HelpFile);&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;HelpType = htContext&amp;lt;/code&amp;gt; wie folgt:&lt;br /&gt;
&lt;br /&gt;
 IHelpSystem.ShowHelp(Form1.HelpKeyword, Form1.HelpFile);&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;HelpType = htKeyword&amp;lt;/code&amp;gt;. Hier ist &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039; das in der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; deklariert Interface.&lt;br /&gt;
&lt;br /&gt;
===Zugreifen auf externe Hilfe-Viewer===&lt;br /&gt;
&lt;br /&gt;
In den folgenden Abschnitten wird die Implementierung von &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039; und anderen in der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; deklarierten Interfaces durch Klassen in einer Unit erläutert, die einen Wrapper für einen externen Hilfe-Viewer bereitstellt. Die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; enthält beispielsweise einen Wrapper für die &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039;-Funktions-API. Die Unit &#039;&#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; implementiert die Klasse &#039;&#039;&#039;THTMLHelpViewer&#039;&#039;&#039;, die eine Implementierung für Interfaces aus der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; bereitstellt. Die Klasse &#039;&#039;&#039;THTMLHelpViewer&#039;&#039;&#039; ist aber im &#039;&#039;&#039;implementation&#039;&#039;&#039;-Abschnitt der Unit deklariert. Deshalb müssen Sie wissen, wie auf Member dieser Klasse von außerhalb der Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Die Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; enthält zwei globale Funktionen: &#039;&#039;&#039;[[lib_de:System.HelpIntfs.RegisterViewer|RegisterViewer]]&#039;&#039;&#039; und &#039;&#039;&#039;[[lib_de:System.HelpIntfs.GetHelpSystem|GetHelpSystem]]&#039;&#039;&#039;. Diese Funktionen haben die folgenden Deklarationen:&lt;br /&gt;
&lt;br /&gt;
 function RegisterViewer(const newViewer: ICustomHelpViewer; out Manager: IHelpManager): Integer;&lt;br /&gt;
 function GetHelpSystem(out System: IHelpSystem): Boolean;&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;initialization&#039;&#039;&#039;-Abschnitt der Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; werden die folgenden Aufrufe ausgeführt:&lt;br /&gt;
&lt;br /&gt;
 HelpViewer := THtmlHelpViewer.Create;&lt;br /&gt;
 HelpIntfs.RegisterViewer(HelpViewerIntf, HelpViewer.FHelpManager);&lt;br /&gt;
&lt;br /&gt;
Diese Aufrufe erstellen ein Objekt vom Typ &#039;&#039;&#039;THtmlHelpViewer&#039;&#039;&#039; und registrieren das gekapselte externe Hilfe-Viewer-Objekt als ein Hilfesystem-Managerobjekt (&#039;&#039;HelpViewer.FHelpManager&#039;&#039;) vom Typ &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpManager|IHelpManager]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Zum Aufrufen des registrierten externen Hilfe-Viewers kann im Code die Funktion &#039;&#039;&#039;HelpIntfs.GetHelpSystem&#039;&#039;&#039; aufgerufen werden, die auf das im &#039;&#039;&#039;HelpViewer.FHelpManager&#039;&#039;&#039; gespeicherte Objekt zugreift und dann ein &#039;&#039;&#039;IHelpManager&#039;&#039;&#039;-Typobjekt im Typobjekt &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem|IHelpSystem]]&#039;&#039;&#039; zurückgibt. &#039;&#039;&#039;TApplication&#039;&#039;&#039;  hat die Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpSystem|HelpSystem]]&#039;&#039;&#039;, die auch den Zugriff auf dieses &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039;-Typobjekt ermöglicht, über das &#039;&#039;&#039;TApplication&#039;&#039;&#039;-Methoden die Hilfe-Viewer-Funktionen aufrufen. &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039;-Typobjekte stellen unter anderem die Hilfefunktionen &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem.ShowContextHelp|IHelpSystem.ShowContextHelp]]&#039;&#039;&#039; und &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem.ShowHelp|IHelpSystem.ShowHelp]]&#039;&#039;&#039; bereit. Diese Funktionen können von der Standard-Ereignisbehandlungsroutine &#039;&#039;&#039;OnHelp&#039;&#039;&#039; und dem Benutzercode aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
==Schritte für die Anzeige der F1-Hilfe==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie F1 drücken, aktiviert die Anwendung die Standard-Ereignisbehandlungsroutine für das Ereignis &#039;&#039;&#039;OnHelp&#039;&#039;&#039; des Formulars mit dem Fokus. In den vorherigen Abschnitten dieses Themas wurden die theoretischen Aspekte des Setzens der Hilfeeigenschaften im Objektinspektor und das Hinzufügen des zur ordnungsgemäßen Aktivierung der Hilfeseite erforderlichen Codes behandelt.&lt;br /&gt;
&lt;br /&gt;
Befolgen Sie zum Umsetzen dieser theoretischen Aspekte in die Praxis die folgenden Schritte.&lt;br /&gt;
&lt;br /&gt;
===So zeigen Sie die F1-Hilfe an:===&lt;br /&gt;
&lt;br /&gt;
# Setzen Sie die Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts (die Eigenschaft &#039;&#039;&#039;TApplication.HelpFile&#039;&#039;&#039;) oder eines bestimmten Formulars (die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039;). Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpFile = Form1.chm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;li&amp;gt;Wählen Sie für ein bestimmtes Formular die Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039; aus, und setzen Sie &amp;lt;code&amp;gt;htContext&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;htKeyword&amp;lt;/code&amp;gt;. Zum Beispiel:&lt;br /&gt;
 &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpType = htContext&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: Setzen Sie dann in der Eigenschaft &#039;&#039;&#039;TForm.HelpContext&#039;&#039;&#039; den entsprechenden &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;-Wert. &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt; sollte ein Integerwert sein, der ein Thema in der in &#039;&#039;&#039;HelpFile&#039;&#039;&#039; angegebenen Hilfedatei festlegt. Bei CHM-Hilfedateien müssen Sie beispielsweise im &#039;&#039;&#039;[MAP]&#039;&#039;&#039;-Abschnitt Ihrer Projektdatei (.hhp) symbolische Kontext-IDs von Hilfethemen zu numerischen &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;-Werten zuordnen. Zum Beispiel:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpContext = 714&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Durch Drücken von F1 wird nun das Thema mit der &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;714&amp;lt;/code&amp;gt; aus einer in &#039;&#039;&#039;HelpFile&#039;&#039;&#039; angegebenen CHM-Hilfedatei angezeigt.&lt;br /&gt;
:: Oder:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpType = htKeyword&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Setzen Sie dann in der Eigenschaft &#039;&#039;&#039;TForm.HelpKeyword&#039;&#039;&#039; den entsprechenden &amp;lt;code&amp;gt;Keyword&amp;lt;/code&amp;gt;-Wert. Durch Drücken von F1 wird nun das Thema angezeigt, dessen &amp;lt;code&amp;gt;Alink&amp;lt;/code&amp;gt;-Tag-Wert mit dem angegebenen &amp;lt;code&amp;gt;Keyword&amp;lt;/code&amp;gt;-Wert übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;li&amp;gt;In {{Delphi}}-Anwendungen fügen Sie der &#039;&#039;&#039;uses&#039;&#039;&#039;-Klausel des Hauptmoduls Ihrer Anwendung die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; hinzu. &amp;lt;br /&amp;gt; &lt;br /&gt;
In C++-Anwendungen fügen Sie die Direktive &amp;lt;code&amp;gt;#include Vcl.HtmlHelpViewer.hpp&amp;lt;/code&amp;gt; hinzu.&lt;br /&gt;
&amp;lt;br /&amp;gt;Fügen Sie &amp;lt;code&amp;gt;#pragma package(smart_init)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;#pragma link &amp;quot;Vcl.HtmlHelpViewer&amp;quot;&amp;lt;/code&amp;gt; hinzu.&amp;lt;br /&amp;gt;&lt;br /&gt;
Damit wird definiert, dass Ihre Anwendung die API der Funktion &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039; verwendet, die die CHM-Hilfedateien anzeigt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wählen Sie den Befehl &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Start &amp;amp;gt; Start&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Ihre Anwendung wird geöffnet.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wählen Sie das Formular Form1 aus. Drücken Sie F1. Die automatisch erzeugte Standard-Ereignisbehandlungsroutine &#039;&#039;&#039;OnHelp&#039;&#039;&#039; zeigt das im &#039;&#039;&#039;HelpContext&#039;&#039;&#039;- (oder &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039;-)Wert in der festgelegten .CHM-Hilfedatei angegebene Thema an.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei war keine manuelle Programmierung erforderlich. Die gesamte Behandlung für das Drücken von F1 wurde automatisch implementiert. Sie müssen nur die passenden Hilfeparameter im Objektinspektor eingeben. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
*[[Aufrufen von HTML-Hilfe aus Anwendungen|Aufrufen von HTML-Hilfe aus Anwendungen]]&lt;br /&gt;
**[[HTML-Hilfetypen|HTML-Hilfetypen]]&lt;br /&gt;
**[[Anpassen der F1-Hilfe in VCL-Anwendungen|Anpassen der F1-Hilfe in VCL-Anwendungen]]&lt;br /&gt;
**[[Anzeigen von Hilfe mit Hilfe-Schaltflächen|Anzeigen von Hilfe mit Hilfe-Schaltflächen]]&lt;br /&gt;
**[[Zuordnen von Hilfe zu Menübefehlen|Zuordnen von Hilfe zu Menübefehlen]]&lt;br /&gt;
**[[Anzeigen von Hilfe zu ausgewählten Menübefehlen|Anzeigen von Hilfe zu ausgewählten Menübefehlen]]&lt;br /&gt;
**[[Anzeigen von Kontexthilfe zu Bildschirmobjekten mit der Eigenschaft Hint|Anzeigen von Kontexthilfe zu Bildschirmobjekten mit der Eigenschaft Hint]]&lt;br /&gt;
* [[Hilfesystem-Interfaces|Hilfesystem-Interfaces]]&lt;br /&gt;
* [[Hilfe in einer VCL-Anwendung verwenden|Hilfe in einer VCL-Anwendung verwenden]][[en:Default Handling of F1 Help in VCL Applications|en:Default Handling of F1 Help in VCL Applications]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Windows-Entwicklerhandbuch]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Standardbehandlung_von_F1-Hilfe_in_VCL-Anwendungen&amp;diff=209024</id>
		<title>Standardbehandlung von F1-Hilfe in VCL-Anwendungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Standardbehandlung_von_F1-Hilfe_in_VCL-Anwendungen&amp;diff=209024"/>
		<updated>2016-07-19T14:46:55Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Internal review. LOC-22582&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Aufrufen von HTML-Hilfe aus Anwendungen}}&lt;br /&gt;
__TOC__&lt;br /&gt;
Das Drücken von F1 ist das Standardvorgehen zum Aktivieren von Hilfe in Anwendungen. Die IDE von {{Variables|Product}} unterstützt Optionen zur Definition von Hilfeparametern für die automatische Erzeugung von Code zur Aktivierung der Hilfe beim Drücken von F1. In diesem Fall erzeugt {{Variables|Product}} automatisch den Standardcode, der zum Ausführen eines entsprechenden Aufrufs der Hilfebehandlungsfunktion beim Drücken von F1 in VCL-Anwendungen erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
In diesem Thema wird die Definition von Parametern für Aufrufe der Hilfebehandlungsfunktionen und die Ausführung dieser Aufrufe beschrieben. Die folgenden Erläuterungen beziehen sich ausschließlich auf VCL-GUI-Anwendungen. &lt;br /&gt;
&lt;br /&gt;
==Erforderliche Hilfeparameter==&lt;br /&gt;
&lt;br /&gt;
Beim Drücken von F1 wird in dem Formular, das den Fokus hat, das Ereignis &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm.OnHelp|OnHelp]]&#039;&#039;&#039; ausgelöst. Die Anwendung führt als Ergebnis die Standard-Ereignisbehandlungsroutine des Ereignisses &#039;&#039;&#039;OnHelp&#039;&#039;&#039; aus. Die IDE erzeugt die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Ereignisbehandlungsroutine mit den angegebenen Hilfeparametern. Sie können in der IDE die Hilfeparameter &#039;&#039;&#039;HelpFile&#039;&#039;&#039;, &#039;&#039;&#039;HelpType&#039;&#039;&#039;, &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; festlegen. Diese Parameter werden in den folgenden Abschnitten beschrieben.&lt;br /&gt;
&lt;br /&gt;
===HelpFile===&lt;br /&gt;
&lt;br /&gt;
Zunächst müssen Sie die Hilfedateien festlegen, die die Hilfethemen für Ihre Anwendung enthalten. Sie können eine oder mehrere Hilfedateien angeben. Die Haupthilfedatei für eine Anwendung kann mit der Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpFile|TApplication.HelpFile]]&#039;&#039;&#039; des globalen &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication|Application]]&#039;&#039;&#039;-Objekts und individuelle Hilfedateien für einzelne Formulare können mit der Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm.HelpFile|TForm.HelpFile]]&#039;&#039;&#039; des zugehörigen &#039;&#039;&#039;[[lib_de:Vcl.Forms.TForm|Form]]&#039;&#039;&#039;-Objekts festgelegt werden.&lt;br /&gt;
&lt;br /&gt;
Diese &#039;&#039;&#039;HelpFile&#039;&#039;&#039;-Dateien können beim Entwurf als entsprechende IDE-Eigenschaften für die programmseitige Definition der &#039;&#039;&#039;HelpFile&#039;&#039;&#039;-Eigenschaften des zugehörigen Objekts angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Normalerweise wird einer Anwendung die Haupthilfedatei über die Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpFile|HelpFile]]&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts zugewiesen.&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie das Dialogfeld &#039;&#039;&#039;Projektoptionen&#039;&#039;&#039; (&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; Optionen&#039;&#039;&#039;&amp;lt;/font&amp;gt;), und wählen Sie die Seite &#039;&#039;&#039;Erscheinungsbild&#039;&#039;&#039; (unter &#039;&#039;&#039;Anwendung&#039;&#039;&#039;) aus. Geben Sie in das Feld &#039;&#039;&#039;Hilfedatei&#039;&#039;&#039; die Hilfedatei ein. Klicken Sie auf &#039;&#039;&#039;Durchsuchen&#039;&#039;&#039;. Das Dialogfeld &#039;&#039;&#039;Hilfedatei der Anwendung&#039;&#039;&#039; zeigt per Vorgabe nur die Dateien mit der Erweiterung .hlp an. Zum Festlegen von anderen Hilfedateitypen wählen Sie im Steuerelement &#039;&#039;&#039;Dateitypen&#039;&#039;&#039; den Typ &amp;lt;code&amp;gt;Alle Dateien (*.*)&amp;lt;/code&amp;gt; aus. Anschließend können Sie Hilfedateien der Typen .CHM, .HTML und andere auswählen.)&lt;br /&gt;
&lt;br /&gt;
Diese Option setzt die Eigenschaft &#039;&#039;&#039;Application.HelpFile&#039;&#039;&#039;. Diese Eigenschaft definiert die Haupthilfedatei für die Anwendung. Wenn die Anwendung einen Hilfebehandlungsbefehl empfängt, führt sie standardmäßig den Hilfebefehl mit dieser Hilfedatei aus.&lt;br /&gt;
&lt;br /&gt;
Eine einzelne Hilfedatei für ein bestimmtes Formular können Sie mit der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; dieses Formulars festlegen.&lt;br /&gt;
&lt;br /&gt;
Wählen Sie im Formular-Designer das Formular aus; im Objektinspektor werden die Eigenschaften dieses Formulars (siehe die folgende Abbildung) angezeigt:&lt;br /&gt;
&lt;br /&gt;
[[Image:Help HelpFile.PNG|HelpFile]]&lt;br /&gt;
&lt;br /&gt;
Geben Sie in der rechten Spalte der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; den Namen &amp;lt;code&amp;gt;Form1.chm&amp;lt;/code&amp;gt; ein. Damit wird die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039; des Objekts &#039;&#039;&#039;Form1&#039;&#039;&#039; definiert. Diese Eigenschaft setzt die Hilfedatei &amp;lt;code&amp;gt;Form1.chm&amp;lt;/code&amp;gt; für das Formular &#039;&#039;&#039;Form1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Anwendung sucht in der Regel die Hilfedatei in dem Verzeichnis, aus dem die ausführbare Datei der Anwendung ausgeführt wird. Wenn die angegebene Hilfedatei sich in einem anderen Verzeichnis befindet, sollten Sie daher den relativer Pfad zu dieser Datei angeben. Sie könnten beispielsweise &amp;lt;code&amp;gt;.\Help\Form1.chm&amp;lt;/code&amp;gt; angeben.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Standard-Ereignisbehandlungsroutine verwendet die in der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des Formulars mit dem Fokus angegebene Hilfedatei. Wenn die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039; einen leeren String enthält, dann verwendet die Ereignisbehandlungsroutine die in der Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts angegebene Hilfedatei.&lt;br /&gt;
&lt;br /&gt;
===HelpType, HelpContext und HelpKeyword===&lt;br /&gt;
&lt;br /&gt;
Zum Erzeugen des Codes für die Standard-Ereignisbehandlungsroutine des Ereignisses &#039;&#039;&#039;OnHelp&#039;&#039;&#039; muss die IDE über das anzuzeigende Hilfethema informiert sein. Die Werte der Eigenschaften &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; können definieren, welches Thema angezeigt werden soll. Die Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039; definiert, welche dieser beiden Eigenschaften verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie im Objektinspektor für das Formular mit der rechten Maustaste in die rechte Spalte der Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039;. Wenn Sie den Wert &amp;lt;code&amp;gt;htContext&amp;lt;/code&amp;gt; auswählen, dann wird der in der Eigenschaft &#039;&#039;&#039;HelpContext&#039;&#039;&#039; angegebene Wert verwendet. Bei dem Wert &amp;lt;code&amp;gt;htKeyword&amp;lt;/code&amp;gt; wird der in der Eigenschaft &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; angegebene Wert verwendet.&lt;br /&gt;
&lt;br /&gt;
==Ergänzen des erzeugten Codes==&lt;br /&gt;
&lt;br /&gt;
Mit {{Variables|Product}} entwickelte Anwendungen verwenden zur Anzeige verschiedener Typen von Hilfedateien externe Hilfe-Viewer. Sie müssen Ihrer Anwendung mitteilen, welcher externe Hilfe-Viewer verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
===Wrapper von externen Hilfe-Viewern===&lt;br /&gt;
&lt;br /&gt;
Die VCL ist unabhängig von externen Hilfe-Viewer. Alle von den Standard-Ereignisbehandlungsroutinen der Hilfe verwendeten Hilfefunktionen sind in Interfaces der Unit &#039;&#039;&#039;[[lib_de:System.HelpIntfs|System.HelpIntfs]]&#039;&#039;&#039; deklariert. Die VCL stellt Packages mit Klassen bereit, die diese Interfaces mit einem bestimmten externen Hilfe-Viewer (für den speziellen Typ der Hilfedatei) implementieren. Beispielweise implementiert die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; für die Viewer von &#039;&#039;&#039;CHM&#039;&#039;&#039;-Hilfedateien (Microsoft HTML Help) einen Wrapper für die &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039;-API.&lt;br /&gt;
&lt;br /&gt;
Diese Unabhängigkeit (von externen Hilfe-Viewern) bedeutet, dass Sie nur in der &#039;&#039;&#039;uses&#039;&#039;&#039;-Klausel die geeignete Unit angeben müssen, die die Implementierung der &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039;-Interfaces für einen bestimmten externen Hilfe-Viewer bereitstellt. Sie können beispielsweise die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039;&#039; zur Anzeige von &#039;&#039;&#039;CHM&#039;&#039;&#039;-Hilfedateien angeben.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Eigenschaften &#039;&#039;&#039;HelpFile&#039;&#039;&#039;, &#039;&#039;&#039;HelpType&#039;&#039;&#039;, &#039;&#039;&#039;HelpContext&#039;&#039;&#039; und &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039; definiert haben, kann die &#039;&#039;&#039;OnHelp&#039;&#039;&#039;-Standard-Ereignisbehandlungsroutine die Hilfebehandlungsfunktion folgendermaßen verwenden:&lt;br /&gt;
&lt;br /&gt;
 IHelpSystem.ShowContextHelp(Form1.HelpContext, Form1.HelpFile);&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;HelpType = htContext&amp;lt;/code&amp;gt; wie folgt:&lt;br /&gt;
&lt;br /&gt;
 IHelpSystem.ShowHelp(Form1.HelpKeyword, Form1.HelpFile);&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;HelpType = htKeyword&amp;lt;/code&amp;gt;. Hier ist &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039; das in der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; deklariert Interface.&lt;br /&gt;
&lt;br /&gt;
===Zugreifen auf externe Hilfe-Viewer===&lt;br /&gt;
&lt;br /&gt;
In den folgenden Abschnitten wird die Implementierung von &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039; und anderen in der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; deklarierten Interfaces durch Klassen in einer Unit erläutert, die einen Wrapper für einen externen Hilfe-Viewer bereitstellt. Die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; enthält beispielsweise einen Wrapper für die &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039;-Funktions-API. Die Unit &#039;&#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; implementiert die Klasse &#039;&#039;&#039;THTMLHelpViewer&#039;&#039;&#039;, die eine Implementierung für Interfaces aus der Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; bereitstellt. Die Klasse &#039;&#039;&#039;THTMLHelpViewer&#039;&#039;&#039; ist aber im &#039;&#039;&#039;implementation&#039;&#039;&#039;-Abschnitt der Unit deklariert. Deshalb müssen Sie wissen, wie auf Member dieser Klasse von außerhalb der Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Die Unit &#039;&#039;&#039;HelpIntfs&#039;&#039;&#039; enthält zwei globale Funktionen: &#039;&#039;&#039;[[lib_de:System.HelpIntfs.RegisterViewer|RegisterViewer]]&#039;&#039;&#039; und &#039;&#039;&#039;[[lib_de:System.HelpIntfs.GetHelpSystem|GetHelpSystem]]&#039;&#039;&#039;. Diese Funktionen haben die folgenden Deklarationen:&lt;br /&gt;
&lt;br /&gt;
 function RegisterViewer(const newViewer: ICustomHelpViewer; out Manager: IHelpManager): Integer;&lt;br /&gt;
 function GetHelpSystem(out System: IHelpSystem): Boolean;&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;initialization&#039;&#039;&#039;-Abschnitt der Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; werden die folgenden Aufrufe ausgeführt:&lt;br /&gt;
&lt;br /&gt;
 HelpViewer := THtmlHelpViewer.Create;&lt;br /&gt;
 HelpIntfs.RegisterViewer(HelpViewerIntf, HelpViewer.FHelpManager);&lt;br /&gt;
&lt;br /&gt;
Diese Aufrufe erstellen ein Objekt vom Typ &#039;&#039;&#039;THtmlHelpViewer&#039;&#039;&#039; und registrieren das gekapselte externe Hilfe-Viewer-Objekt als ein Hilfesystem-Managerobjekt (&#039;&#039;HelpViewer.FHelpManager&#039;&#039;) vom Typ &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpManager|IHelpManager]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Zum Aufrufen des registrierten externen Hilfe-Viewers kann im Code die Funktion &#039;&#039;&#039;HelpIntfs.GetHelpSystem&#039;&#039;&#039; aufgerufen werden, die auf das im &#039;&#039;&#039;HelpViewer.FHelpManager&#039;&#039;&#039; gespeicherte Objekt zugreift und dann ein &#039;&#039;&#039;IHelpManager&#039;&#039;&#039;-Typobjekt im Typobjekt &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem|IHelpSystem]]&#039;&#039;&#039; zurückgibt. &#039;&#039;&#039;TApplication&#039;&#039;&#039;  hat die Eigenschaft &#039;&#039;&#039;[[lib_de:Vcl.Forms.TApplication.HelpSystem|HelpSystem]]&#039;&#039;&#039;, die auch den Zugriff auf dieses &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039;-Typobjekt ermöglicht, über das &#039;&#039;&#039;TApplication&#039;&#039;&#039;-Methoden die Hilfe-Viewer-Funktionen aufrufen. &#039;&#039;&#039;IHelpSystem&#039;&#039;&#039;-Typobjekte stellen unter anderem die Hilfefunktionen &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem.ShowContextHelp|IHelpSystem.ShowContextHelp]]&#039;&#039;&#039; und &#039;&#039;&#039;[[lib_de:System.HelpIntfs.IHelpSystem.ShowHelp|IHelpSystem.ShowHelp]]&#039;&#039;&#039; bereit. Diese Funktionen können von der Standard-Ereignisbehandlungsroutine &#039;&#039;&#039;OnHelp&#039;&#039;&#039; und dem Benutzercode aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
==Schritte für die Anzeige der F1-Hilfe==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie F1 drücken, aktiviert die Anwendung die Standard-Ereignisbehandlungsroutine für das Ereignis &#039;&#039;&#039;OnHelp&#039;&#039;&#039; des Formulars mit dem Fokus. In den vorherigen Abschnitten dieses Themas wurden die theoretischen Aspekte des Setzens der Hilfeeigenschaften im Objektinspektor und das Hinzufügen des zur ordnungsgemäßen Aktivierung der Hilfeseite erforderlichen Codes behandelt.&lt;br /&gt;
&lt;br /&gt;
Befolgen Sie zum Umsetzen dieser theoretischen Aspekte in die Praxis die folgenden Schritte.&lt;br /&gt;
&lt;br /&gt;
===So zeigen Sie die F1-Hilfe an:===&lt;br /&gt;
&lt;br /&gt;
# Setzen Sie die Eigenschaft &#039;&#039;&#039;HelpFile&#039;&#039;&#039; des globalen &#039;&#039;&#039;Application&#039;&#039;&#039;-Objekts (die Eigenschaft &#039;&#039;&#039;TApplication.HelpFile&#039;&#039;&#039;) oder eines bestimmten Formulars (die Eigenschaft &#039;&#039;&#039;TForm.HelpFile&#039;&#039;&#039;). Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpFile = Form1.chm&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;li&amp;gt;Wählen Sie für ein bestimmtes Formular die Eigenschaft &#039;&#039;&#039;HelpType&#039;&#039;&#039; aus, und setzen Sie &amp;lt;code&amp;gt;htContext&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;htKeyword&amp;lt;/code&amp;gt;. Zum Beispiel:&lt;br /&gt;
 &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpType = htContext&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: Setzen Sie dann in der Eigenschaft &#039;&#039;&#039;TForm.HelpContext&#039;&#039;&#039; den entsprechenden &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;-Wert. &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt; sollte ein Integerwert sein, der ein Thema in der in &#039;&#039;&#039;HelpFile&#039;&#039;&#039; angegebenen Hilfedatei festlegt. Bei CHM-Hilfedateien müssen Sie beispielsweise im &#039;&#039;&#039;[MAP]&#039;&#039;&#039;-Abschnitt Ihrer Projektdatei (.hhp) symbolische Kontext-IDs von Hilfethemen zu numerischen &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;-Werten zuordnen. Zum Beispiel:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpContext = 714&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Durch Drücken von F1 wird nun das Thema mit der &amp;lt;code&amp;gt;ContextID&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;714&amp;lt;/code&amp;gt; aus einer in &#039;&#039;&#039;HelpFile&#039;&#039;&#039; angegebenen CHM-Hilfedatei angezeigt.&lt;br /&gt;
:: Oder:&lt;br /&gt;
:: &amp;lt;code&amp;gt;TForm.HelpType = htKeyword&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Setzen Sie dann in der Eigenschaft &#039;&#039;&#039;TForm.HelpKeyword&#039;&#039;&#039; den entsprechenden &amp;lt;code&amp;gt;Keyword&amp;lt;/code&amp;gt;-Wert. Durch Drücken von F1 wird nun das Thema angezeigt, dessen &amp;lt;code&amp;gt;Alink&amp;lt;/code&amp;gt;-Tag-Wert mit dem angegebenen &amp;lt;code&amp;gt;Keyword&amp;lt;/code&amp;gt;-Wert übereinstimmt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;li&amp;gt;In {{Delphi}}-Anwendungen fügen Sie der &#039;&#039;&#039;uses&#039;&#039;&#039;-Klausel des Hauptmoduls Ihrer Anwendung die Unit &#039;&#039;&#039;Vcl.HtmlHelpViewer&#039;&#039;&#039; hinzu. &amp;lt;br /&amp;gt; &lt;br /&gt;
In C++-Anwendungen fügen Sie die Direktive &amp;lt;code&amp;gt;#include Vcl.HtmlHelpViewer.hpp&amp;lt;/code&amp;gt; hinzu.&lt;br /&gt;
&amp;lt;br /&amp;gt;Fügen Sie &amp;lt;code&amp;gt;#pragma package(smart_init)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;#pragma link &amp;quot;Vcl.HtmlHelpViewer&amp;quot;&amp;lt;/code&amp;gt; hinzu.&amp;lt;br /&amp;gt;&lt;br /&gt;
Damit wird definiert, dass Ihre Anwendung die API der Funktion &#039;&#039;&#039;HTMLHelp&#039;&#039;&#039; verwendet, die die CHM-Hilfedateien anzeigt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wählen Sie den Befehl &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Start &amp;amp;gt; Start&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Ihre Anwendung wird geöffnet.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wählen Sie das Formular Form1 aus. Drücken Sie F1. Die automatisch erzeugte Standard-Ereignisbehandlungsroutine &#039;&#039;&#039;OnHelp&#039;&#039;&#039; zeigt das im &#039;&#039;&#039;HelpContext&#039;&#039;&#039;- (oder &#039;&#039;&#039;HelpKeyword&#039;&#039;&#039;-)Wert in der festgelegten .CHM-Hilfedatei angegebene Thema an.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei war keine manuelle Programmierung erforderlich. Die gesamte Behandlung für das Drücken von F1 wurde automatisch implementiert. Sie müssen nur die passenden Hilfeparameter im Objektinspektor eingeben. &lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
*[[Aufrufen von HTML-Hilfe aus Anwendungen|Aufrufen von HTML-Hilfe aus Anwendungen]]&lt;br /&gt;
**[[HTML-Hilfetypen|HTML-Hilfetypen]]&lt;br /&gt;
**[[Anpassen der F1-Hilfe in VCL-Anwendungen|Anpassen der F1-Hilfe in VCL-Anwendungen]]&lt;br /&gt;
**[[Anzeigen von Hilfe mit Hilfe-Schaltflächen|Anzeigen von Hilfe mit Hilfe-Schaltflächen]]&lt;br /&gt;
**[[Zuordnen von Hilfe zu Menübefehlen|Zuordnen von Hilfe zu Menübefehlen]]&lt;br /&gt;
**[[Anzeigen von Hilfe zu ausgewählten Menübefehlen|Anzeigen von Hilfe zu ausgewählten Menübefehlen]]&lt;br /&gt;
**[[Anzeigen von Kontexthilfe zu Bildschirmobjekten mit der Eigenschaft Hint|Anzeigen von Kontexthilfe zu Bildschirmobjekten mit der Eigenschaft Hint]]&lt;br /&gt;
* [[Hilfesystem-Interfaces|Hilfesystem-Interfaces]]&lt;br /&gt;
* [[Hilfe in einer VCL-Anwendung verwenden|Hilfe in einer VCL-Anwendung verwenden]][[en:Default Handling of F1 Help in VCL Applications|en:Default Handling of F1 Help in VCL Applications]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Windows-Entwicklerhandbuch]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=C%2B%2B-Compiler_Erweitert&amp;diff=208968</id>
		<title>C++-Compiler Erweitert</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=C%2B%2B-Compiler_Erweitert&amp;diff=208968"/>
		<updated>2016-07-04T09:04:10Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: 1 Version: Internal review. LOC-21921&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|C++-Compiler}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; C++-Compiler &amp;amp;gt; Erweitert}}&lt;br /&gt;
&lt;br /&gt;
In diesem Dialogfeld legen Sie erweiterte Optionen für den C++-Compiler fest.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Optionen&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Ziel, Übernehmen, Speichern&lt;br /&gt;
|&lt;br /&gt;
Siehe [[Optionen für das Ziel|Optionen für das Ziel]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Gemeinsame Elemente&lt;br /&gt;
|&lt;br /&gt;
Siehe [[Gemeinsame Elemente auf den Projektoptionsseiten|Gemeinsame Elemente auf den Projektoptionsseiten]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assembler-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Assembler-Optionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! bcc32&lt;br /&gt;
! bcc32c&lt;br /&gt;
! bcc64&lt;br /&gt;
! bccosx&lt;br /&gt;
! bcciosarm&lt;br /&gt;
! bcciosarm64&lt;br /&gt;
! bccaarm&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Assembler-Optionen&lt;br /&gt;
|&lt;br /&gt;
Geben Sie zusätzliche Assembler-Optionen (wie z. B. {{Code|-TX}} oder {{Code|-T}}) ein, die für das aktuelle Projekt verwendet werden sollen. Übergibt die angegebenen Optionen an den Assembler, der mit der Option &#039;&#039;&#039;Zu verwendenden Assembler festlegen&#039;&#039;&#039; festgelegt wurde, oder an den Standard-Assembler (TASM32 in 32-Bit-Windows).&lt;br /&gt;
&lt;br /&gt;
32-Bit-Compiler, die durch Clang erweitert wurden, erstellen keine Assembly-Dateien, die mit TASM32 assembliert werden können.&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd|N/A}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
In .ASM compilieren, dann in .OBJ zusammenstellen&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Veranlasst, dass der Compiler zunächst aus dem C++-Quelltext (oder C-Quelltext) eine .ASM-Datei (entspricht der Befehlszeilenoption -S) erzeugt.|Veranlasst, dass der Compiler zunächst aus dem C++-Quelltext (oder C-Quelltext) eine .ASM-Datei erzeugt.}} Dann ruft der Compiler TASM32 (oder den mit der Option &#039;&#039;&#039;Zu verwendenden Assembler festlegen&#039;&#039;&#039; angegebenen Assembler) auf, um eine .OBJ-Datei aus der .ASM-Datei zu erstellen. Die .ASM-Datei wird anschließend gelöscht.&lt;br /&gt;
&lt;br /&gt;
Das Programm kann nicht mit der Option -B compiliert werden, wenn im C- oder C++-Quelltext statische globale Variablen deklariert werden, die Schlüsselwörter in der Assembler-Sprache sind. Der Compiler stellt nämlich statischen globalen Variablen keinen Unterstrich voran (wie bei anderen Variablen), und die Assembler-Schlüsselwörter erzeugen Fehler, wenn der Code zusammengestellt wird. Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|&#039;&#039;&#039;In .ASM compilieren&#039;&#039;&#039; &amp;lt;br /&amp;gt;-S&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;In .OBJ zusammenstellen&#039;&#039;&#039; &amp;lt;br /&amp;gt;-B|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Zu verwendenden Assembler festlegen&lt;br /&gt;
|&lt;br /&gt;
Stellt Anweisungen zusammen und verwendet dabei den angegebenen Dateinamen als Assembler. Der 32-Bit-Windows-Compiler verwendet TASM32 als Standard-Assembler. Die [[Image:ProjectOptionsEllipsis.jpg|Ellipse]]-Popup-Schaltfläche ist unter [[Gemeinsame Elemente auf den Projektoptionsseiten|Gemeinsame Elemente auf den Projektoptionsseiten]] beschrieben.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-E|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gleitkomma-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Gleitkomma-Optionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32c&amp;amp;nbsp;&amp;amp;nbsp; &lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccosx&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccaarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
FDIV-Fehler korrigieren&lt;br /&gt;
|&lt;br /&gt;
Einige Pentium-Prozessoren der ersten Serie führen bestimmte Gleitkommadivisionen nicht mit voller Genauigkeit aus. Auch wenn die Chancen gering sind, dass dieses Problem heute noch auftaucht, kann mit dieser Option Code eingefügt werden, der eine Gleitkommaoperation so emuliert, dass sicher das richtige Ergebnis geliefert wird. Die Geschwindigkeit der Ausführung des Prozessorbefehls FDIV sinkt dann allerdings. Diese Option korrigiert FDIV-Befehle nur in Modulen, die Sie compilieren. Die Laufzeitbibliothek enthält ebenfalls FDIV-Befehle, die von dieser Option nicht verändert werden. Wenn Sie das Problem auch in den Laufzeitbibliotheken beheben möchten, müssen Sie sie mit dieser Einstellung neu compilieren.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Funktionen verwenden FDIV-Befehle der Assembler-Sprache und werden von dieser Option nicht korrigiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;acos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;acosl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;acos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;asin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;asinl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atan2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atan2l&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atanl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cosh&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;coshl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cosl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;expl&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;fmod&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fmodl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pow&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pow10&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;pow10l&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;powl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sinh&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;sinhl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sinl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tanh&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;tanhl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tanl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktionen, die eine Gleitkommazahl in einen String konvertieren oder umgekehrt (z. B. &#039;&#039;&#039;printf&#039;&#039;&#039; oder &#039;&#039;&#039;scanf&#039;&#039;&#039;), werden von dieser Option ebenfalls nicht korrigiert. &amp;lt;br /&amp;gt;Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fp|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fp|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Schnelles Gleitkomma&lt;br /&gt;
|&lt;br /&gt;
Gleitkommaoperationen können ohne Berücksichtigung expliziter oder impliziter Typkonvertierungen optimiert werden. Berechnungen werden dann schneller als im ANSI-Modus durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Diese Option dient dazu, bestimmte Optimierungen zu ermöglichen, die auf technischer Ebene keiner korrekten C-Semantik entsprechen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
double x; x = (float) (3.5*x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Um dies korrekt ausführen zu können, wird x mit 3,5 multipliziert. Das daraus resultierende Double wird entsprechend der Gleitkommagenauigkeit gekürzt und dann als Double in x gespeichert. Bei der schnellen Gleitkommaoperation wird das lange Double-Produkt direkt in ein Double konvertiert. Da nur wenige Programme auf diese hohe Genauigkeit angewiesen sind, ist das schnelle Gleitkomma die Standardeinstellung. &lt;br /&gt;
&lt;br /&gt;
Wenn diese Option deaktiviert ist {{f|cmd|(-ff-)}}, folgt der Compiler strikt den ANSI-Regeln zur Gleitkommakonvertierung. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Vorgabewert ist True.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-ff|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-ff|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Stille Gleitkommavergleiche&lt;br /&gt;
|&lt;br /&gt;
Verwendet die stille Gleitkommaanweisung (FUCOMP). &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgabewert ist True.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fq|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fq|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Benötigte mathematische Funktionen zur Angabe von Fehlern&lt;br /&gt;
|&lt;br /&gt;
Diese Option gibt dem Compiler an, dass Programme {{code|errno}} verlässlich testen können, nachdem mathematische Standard-Bibliotheksfunktionen aufgerufen wurden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der Vorgabewert ist True.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Weitere Optionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Weitere Optionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcc32&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcc32c&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcc64&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bccosx&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcciosarm&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcciosarm64&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bccaarm&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Weitere Optionen für die Übergabe an den Compiler&lt;br /&gt;
|&lt;br /&gt;
Geben Sie weitere Compiler-Optionen ein, die für das aktuelle Projekt hinzugefügt werden sollen.&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Codeseite&lt;br /&gt;
|&lt;br /&gt;
Legt den &#039;&#039;&#039;Standardzeichensatz für Text&#039;&#039;&#039; fest, der im ANSI-Quellcode verwendet wird, wenn der Quellcode kein BOM (Byte Order Mark) enthält.&lt;br /&gt;
&lt;br /&gt;
Bietet Unterstützung für benutzerdefinierte Codeseiten. Damit wird dem Compiler mitgeteilt, wie Multibyte-Zeichensätze (MBCS) analysiert und konvertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Im Eingabefeld können Sie Folgendes angeben:&lt;br /&gt;
* Die tatsächliche [http://msdn.microsoft.com/en-us/library/dd317756%28v=vs.85%29.aspx Codeseitennummer (EN)]. Zum Beispiel:&lt;br /&gt;
** 1250 für europäisch&lt;br /&gt;
** 932 für japanisch&lt;br /&gt;
* Textbezeichner für die Codeseitencodierungen, wie [http://www.unicodetools.com/unicode/codepage-utf8.php UTF8 (EN)], UTF32 oder SJIS (für Shift-JIS für japanisch)&lt;br /&gt;
&lt;br /&gt;
Wenn Sie beispielsweise 65001 oder UTF8 für die Option -CP angeben, unterstützt der Compiler die UTF8-Codierung für Quellcode ohne BOM.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei wesentliche Bereiche, wo Codeseiten eine Rolle spielen:&lt;br /&gt;
* String-Konstanten, Kommentare, #error- und #pragma-Direktiven&lt;br /&gt;
:Für MBCS-Strings, die zu dieser Gruppe gehören, müssen Sie die korrekte Codeseite mit einem Aufruf der Windows-API-Funktion &#039;&#039;&#039;IsDBCSLeadByteEx&#039;&#039;&#039; angeben. Mit dieser Funktion geben Sie die Codeseite an, um die MBCS-Strings für eine bestimmte Gebietseinstellung korrekt zu analysieren (z. B. kann der Compiler damit Backslashes in nachgestellten MBCS-Bytes korrekt analysieren).&lt;br /&gt;
* Wide-Zeichen-String-Konstanten {{f|cmd|(wie [[BCC32.EXE: Der C++-32-Bit-Befehlszeilen-Compiler#Verzeichnisse für Befehlszeilenoptionen|durch L]]&#039;&amp;amp;lt;MBCS string&amp;amp;gt;&#039;) angegeben}}&lt;br /&gt;
:Für MBCS-Strings, die zu dieser Gruppe gehören (Wide-Zeichen-String-Konstanten), geben Sie die korrekte Codeseite an, um die MBCS-Strings mit der Windows-API-Funktion &#039;&#039;&#039;MultiByteToWideChar&#039;&#039;&#039; in Unicode-Strings umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
{{f|cmd|&lt;br /&gt;
&#039;&#039;&#039;Syntax&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Aktivieren Sie das Code-Paging mit der folgenden Befehlszeilenoption:&lt;br /&gt;
: {{Code|-CPnnnn}}&lt;br /&gt;
&lt;br /&gt;
In dieser Syntax ist &#039;&#039;nnnn&#039;&#039; der numerische Wert der Codeseite, die für eine bestimmte Gebietseinstellung verwendet werden soll.&lt;br /&gt;
&amp;lt;br /&amp;gt;}}&lt;br /&gt;
Es gelten folgende Regeln:&lt;br /&gt;
# Bei der Einstellung des Code-Paging müssen die numerischen Werte zu den Werten der Microsoft NLS Code Page ID passen. Zum Beispiel:&lt;br /&gt;
#* Verwenden Sie 437 für MS-DOS-Anwendungen aus den Vereinigten Staaten.&lt;br /&gt;
#* Verwenden Sie 932 für japanische.&lt;br /&gt;
# Der numerische Wert nnnn muss eine gültige Codeseite sein, die vom Betriebssystem unterstützt wird.&lt;br /&gt;
# Benutzer müssen eventuell die relevanten Windows NLS-Dateien installieren, um sicherzustellen, dass asiatische Gebietseinstellungen und Codeseiten zugänglich sind. Nähere Informationen hierzu finden Sie in der Dokumentation zu [http://msdn.microsoft.com/en-us/library/ee265892(v=bts.10).aspx Microsoft NLS Code Page (EN)].&lt;br /&gt;
# Wenn Sie keinen Codeseitenwert angeben, ruft der Compiler die Windows-API-Funktion &#039;&#039;&#039;GetACP&#039;&#039;&#039; auf, um die Standard-Codeseite des Systems zu ermitteln. Dieser Wert wird dann verwendet, wenn Strings wie oben dargestellt behandelt werden müssen.&lt;br /&gt;
&lt;br /&gt;
Die Vorgabe ist, keine Codeseite zu verwenden.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-CP|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|2=-finput-charset=0}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-CP|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Ausführungszeichensatz&lt;br /&gt;
|&lt;br /&gt;
Legt den &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; fest, der für ANSI-Strings in der ausführbaren Datei verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Die Option &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; ist für die Verwendung in geräteübergreifenden Anwendungen konzipiert.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Für den Windows-Host oder ein Windows-Ziel entspricht die Standardtextcodierung der ANSI-Codierung (der Option &#039;&#039;&#039;Codeseite&#039;&#039;&#039;) der Anwendung.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Bei geräteübergreifenden Anwendungen kann die ANSI-Codierung des Ziels von der ANSI-Codierung des Host abweichen.&amp;lt;br /&amp;gt;POSIX-Systeme (einschließlich OS X und das neueste Linux) verwenden z. B. UTF8 als Systemcodierung, daher muss der &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; &amp;quot;UTF8&amp;quot; sein.&lt;br /&gt;
Wenn Sie eine Anwendung mit &amp;quot;932&amp;quot; als &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; compilieren, werden alle String-Literale in der &amp;quot;932&amp;quot;-Codierung (japanisches SJIS) codiert, ungeachtet dessen, ob die Compilier-Umgebung &amp;quot;932&amp;quot; ist. Wide-String-Literale (z. B. L&amp;quot;Test&amp;quot;) sind von dieser Option nicht betroffen.&lt;br /&gt;
&lt;br /&gt;
In manchen Fällen wird der Wert der Option &#039;&#039;&#039;Codeseite&#039;&#039;&#039; für die Option &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; verwendet. Die folgende Matrix verdeutlicht die Beziehung zwischen den Optionen &#039;&#039;&#039;Codeseite&#039;&#039;&#039; und &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039;:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Ist die Option festgelegt?&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Beschreibung&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! Codeseite&lt;br /&gt;
! Ausführungszeichensatz&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Für Windows-Ziele verwendet der Compiler die Windows-Systemcodeseite ({{Code|CP_ACP}}) als Textzeichensatz und als Ausführungszeichensatz.&lt;br /&gt;
*Für Mac OS X-Ziele verwendet der Compiler die Windows-Systemcodeseite ({{Code|CP_ACP}}) als Textzeichensatz und UTF-8 als Ausführungszeichensatz auf Mac OS X.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Der Compiler verwendet den Wert der &#039;&#039;&#039;Codeseite&#039;&#039;&#039; als Textzeichensatz und als Ausführungszeichensatz.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
Der Compiler verwendet den Wert des &#039;&#039;&#039;Ausführungszeichensatzes&#039;&#039;&#039; als Ausführungszeichensatz und die Systemcodeseite ({{Code|CP_ACP}}) für ein Windows-Ziel oder eine plattformspezifische Codierung für ein plattformübergreifendes Ziel ({{Code|LC_CTYPE}} auf Mac OS X).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
Der Compiler verwendet den Wert der &#039;&#039;&#039;Codeseite&#039;&#039;&#039; als Textzeichensatz und den Wert des &#039;&#039;&#039;Ausführungszeichensatzes&#039;&#039;&#039; als Ausführungszeichensatz.&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-CE|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|2=-fexec-charset=0}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-CE|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Minimale fortlaufende Blockgröße für Speicherzuweisung&lt;br /&gt;
|&lt;br /&gt;
Gibt die minimale Größe an, die für die fortlaufende Speicherzuweisung verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Der Vorgabewert ist (no =nMB). Das bedeutet, dass der größtmögliche Block verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Diese Option können Sie beispielsweise zum Compilieren von großen Projekten ohne PCH oder für sehr große (evtl. vom Computer erzeugte) Quelldateien verwenden, solche, die umfangreichen Quelltext enthalten, der zu vielen Deklarationen pro Datei führt. &lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-savemem|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-savemem|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Vorzeichenloser char-Typ&lt;br /&gt;
|&lt;br /&gt;
Der Compiler behandelt die &#039;&#039;&#039;char&#039;&#039;&#039;-Deklarationen so, als würde es sich um einen &#039;&#039;&#039;unsigned char&#039;&#039;&#039;-Typ (vorzeichenloser Zeichentyp) handeln, der für die Kompatibilität mit anderen Compilern sorgt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Vorgabe = False (&#039;&#039;&#039;char&#039;&#039;&#039;-Typ mit Vorzeichen).&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-K|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-funsigned-char}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-K|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Universelle iOS-Binärdatei generieren (armv7 + arm64)&lt;br /&gt;
|&lt;br /&gt;
Der Compiler erstellt eine universelle Binärdatei für 32-Bit- und 64-Bit-iOS. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Vorgabe ist False (nur eine 64-Bit-Binärdatei wird erstellt).&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd||{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quelltextoptionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Quelltextoptionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32c&amp;amp;nbsp;&amp;amp;nbsp; &lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccosx&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccaarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Verschachtelte Kommentare aktivieren&lt;br /&gt;
|&lt;br /&gt;
Verschachtelt Kommentare in C- und C++-Quelltextdateien. Solche Kommentare sind in Standard-C-Implementierungen nicht zulässig, und sie sind auch nicht portierbar.&lt;br /&gt;
&amp;lt;br /&amp;gt;Der Vorgabewert ist False.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie können mit konditionalen Compilier-Direktiven große Codeblöcke, die Kommentare enthalten, in Kommentare umwandeln:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
 #if 0&lt;br /&gt;
 // ...&lt;br /&gt;
 /* ... */&lt;br /&gt;
 #endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-C|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-C|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Bezeichnerlänge&lt;br /&gt;
|&lt;br /&gt;
Gibt die Anzahl signifikanter Zeichen (jene, die vom Compiler erkannt werden) in einem Bezeichner an. Mit Ausnahme von C++, wo es für Bezeichner keine Längenbeschränkung gibt, werden Bezeichner nur dann als unterschiedlich angesehen, wenn sie sich in den signifikanten Zeichen unterscheiden. Dies betrifft Variablen, Namen von Präprozessor-Makros und Namen von Struktur-Membern.&lt;br /&gt;
&lt;br /&gt;
Gültige Werte für die Länge sind 0 und 8 bis 250, wobei 0 die Maximallänge von 250 Zeichen bedeutet. {{CBuilder}} unterscheidet standardmäßig 250 Zeichen pro Bezeichner. Andere Systeme (darunter auch einige UNIX-Compiler) ignorieren das neunte und alle folgenden Zeichen. Wenn Sie eine Anwendung auf andere Systeme portieren möchten, sollten Sie den Quelltext mit einer kleineren Anzahl signifikanter Zeichen compilieren. So können Sie Namenskonflikte in langen Bezeichnern aufspüren, die abgeschnitten wurden. Der Vorgabewert beträgt 250.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-i|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-i|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==String-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;String-Optionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32c&amp;amp;nbsp;&amp;amp;nbsp; &lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccosx&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccaarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Doppelte Strings zusammenführen&lt;br /&gt;
|&lt;br /&gt;
Verbindet zwei literale Strings, wenn einer mit dem anderen identisch ist. Daraus entstehen kleinere Programme, die jedoch etwas mehr Zeit zum Compilieren benötigen. Fehler können dann entstehen, wenn einer der Strings verändert wird. &amp;lt;br /&amp;gt;Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-d|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmerge-all-constants}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-d|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Schreibgeschützte Strings&lt;br /&gt;
|&lt;br /&gt;
Stellt für Strings zugewiesenen Speicher in das schreibgeschützte Datensegment. Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-dc|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fconst-strings}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-dc|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Schreibbare Strings&lt;br /&gt;
|&lt;br /&gt;
Stellt für Strings zugewiesenen Speicher in das beschreibbare Datensegment. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-dw|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fwritable-strings}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-dw|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[C++ (Gemeinsame Optionen)|C++ (Gemeinsame Optionen)]]&lt;br /&gt;
* [[BCC32C.EXE|BCC32C.EXE]]&lt;br /&gt;
* [[BCC32.EXE: Der C++-32-Bit-Befehlszeilen-Compiler|BCC32.EXE: Der C++-Compiler für 32-Bit-Windows]]&lt;br /&gt;
* [[BCC64.EXE: Der C++-Compiler für 64-Bit-Windows|BCC64.EXE: Der C++-Compiler für 64-Bit-Windows]]&lt;br /&gt;
* [[BCCOSX.EXE: Der C++-Compiler für OS X|BCCOSX.EXE: Der C++-Compiler für OS X]]&lt;br /&gt;
* [[BCCIOSARM.EXE: Der C++-Compiler für 32-Bit-iOS-Geräte|BCCIOSARM: Der C++-Compiler für 32-Bit-iOS-Geräte]]&lt;br /&gt;
* [[BCCIOSARM64.EXE: Der C++-Compiler für 64-Bit-iOS-Geräte|BCCIOSARM64: Der C++-Compiler für 64-Bit-iOS-Geräte]]&lt;br /&gt;
* [[BCCAARM.EXE: Der C++-Compiler für Android|BCCAARM.EXE: Der C++-Compiler für Android]]&lt;br /&gt;
&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:IDE-Referenz]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=C%2B%2B-Compiler_Erweitert&amp;diff=208967</id>
		<title>C++-Compiler Erweitert</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=C%2B%2B-Compiler_Erweitert&amp;diff=208967"/>
		<updated>2016-07-04T09:04:09Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Internal review. LOC-21921&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|C++-Compiler}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; C++-Compiler &amp;amp;gt; Erweitert}}&lt;br /&gt;
&lt;br /&gt;
In diesem Dialogfeld legen Sie erweiterte Optionen für den C++-Compiler fest.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Optionen&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Ziel, Übernehmen, Speichern&lt;br /&gt;
|&lt;br /&gt;
Siehe [[Optionen für das Ziel|Optionen für das Ziel]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Gemeinsame Elemente&lt;br /&gt;
|&lt;br /&gt;
Siehe [[Gemeinsame Elemente auf den Projektoptionsseiten|Gemeinsame Elemente auf den Projektoptionsseiten]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assembler-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Assembler-Optionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! bcc32&lt;br /&gt;
! bcc32c&lt;br /&gt;
! bcc64&lt;br /&gt;
! bccosx&lt;br /&gt;
! bcciosarm&lt;br /&gt;
! bcciosarm64&lt;br /&gt;
! bccaarm&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Assembler-Optionen&lt;br /&gt;
|&lt;br /&gt;
Geben Sie zusätzliche Assembler-Optionen (wie z. B. {{Code|-TX}} oder {{Code|-T}}) ein, die für das aktuelle Projekt verwendet werden sollen. Übergibt die angegebenen Optionen an den Assembler, der mit der Option &#039;&#039;&#039;Zu verwendenden Assembler festlegen&#039;&#039;&#039; festgelegt wurde, oder an den Standard-Assembler (TASM32 in 32-Bit-Windows).&lt;br /&gt;
&lt;br /&gt;
32-Bit-Compiler, die durch Clang erweitert wurden, erstellen keine Assembly-Dateien, die mit TASM32 assembliert werden können.&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd|N/A}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
| {{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
In .ASM compilieren, dann in .OBJ zusammenstellen&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Veranlasst, dass der Compiler zunächst aus dem C++-Quelltext (oder C-Quelltext) eine .ASM-Datei (entspricht der Befehlszeilenoption -S) erzeugt.|Veranlasst, dass der Compiler zunächst aus dem C++-Quelltext (oder C-Quelltext) eine .ASM-Datei erzeugt.}} Dann ruft der Compiler TASM32 (oder den mit der Option &#039;&#039;&#039;Zu verwendenden Assembler festlegen&#039;&#039;&#039; angegebenen Assembler) auf, um eine .OBJ-Datei aus der .ASM-Datei zu erstellen. Die .ASM-Datei wird anschließend gelöscht.&lt;br /&gt;
&lt;br /&gt;
Das Programm kann nicht mit der Option -B compiliert werden, wenn im C- oder C++-Quelltext statische globale Variablen deklariert werden, die Schlüsselwörter in der Assembler-Sprache sind. Der Compiler stellt nämlich statischen globalen Variablen keinen Unterstrich voran (wie bei anderen Variablen), und die Assembler-Schlüsselwörter erzeugen Fehler, wenn der Code zusammengestellt wird. Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|&#039;&#039;&#039;In .ASM compilieren&#039;&#039;&#039; &amp;lt;br /&amp;gt;-S&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;In .OBJ zusammenstellen&#039;&#039;&#039; &amp;lt;br /&amp;gt;-B|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Zu verwendenden Assembler festlegen&lt;br /&gt;
|&lt;br /&gt;
Stellt Anweisungen zusammen und verwendet dabei den angegebenen Dateinamen als Assembler. Der 32-Bit-Windows-Compiler verwendet TASM32 als Standard-Assembler. Die [[Image:ProjectOptionsEllipsis.jpg|Ellipse]]-Popup-Schaltfläche ist unter [[Gemeinsame Elemente auf den Projektoptionsseiten|Gemeinsame Elemente auf den Projektoptionsseiten]] beschrieben.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-E|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gleitkomma-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Gleitkomma-Optionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32c&amp;amp;nbsp;&amp;amp;nbsp; &lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccosx&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccaarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
FDIV-Fehler korrigieren&lt;br /&gt;
|&lt;br /&gt;
Einige Pentium-Prozessoren der ersten Serie führen bestimmte Gleitkommadivisionen nicht mit voller Genauigkeit aus. Auch wenn die Chancen gering sind, dass dieses Problem heute noch auftaucht, kann mit dieser Option Code eingefügt werden, der eine Gleitkommaoperation so emuliert, dass sicher das richtige Ergebnis geliefert wird. Die Geschwindigkeit der Ausführung des Prozessorbefehls FDIV sinkt dann allerdings. Diese Option korrigiert FDIV-Befehle nur in Modulen, die Sie compilieren. Die Laufzeitbibliothek enthält ebenfalls FDIV-Befehle, die von dieser Option nicht verändert werden. Wenn Sie das Problem auch in den Laufzeitbibliotheken beheben möchten, müssen Sie sie mit dieser Einstellung neu compilieren.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Funktionen verwenden FDIV-Befehle der Assembler-Sprache und werden von dieser Option nicht korrigiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;acos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;acosl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;acos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;asin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;asinl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atan2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atan2l&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atanl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cosh&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;coshl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cosl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;expl&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;fmod&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fmodl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pow&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pow10&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;pow10l&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;powl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sinh&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;sinhl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sinl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tanh&amp;lt;/code&amp;gt;,&lt;br /&gt;
&amp;lt;code&amp;gt;tanhl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tanl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktionen, die eine Gleitkommazahl in einen String konvertieren oder umgekehrt (z. B. &#039;&#039;&#039;printf&#039;&#039;&#039; oder &#039;&#039;&#039;scanf&#039;&#039;&#039;), werden von dieser Option ebenfalls nicht korrigiert. &amp;lt;br /&amp;gt;Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fp|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fp|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Schnelles Gleitkomma&lt;br /&gt;
|&lt;br /&gt;
Gleitkommaoperationen können ohne Berücksichtigung expliziter oder impliziter Typkonvertierungen optimiert werden. Berechnungen werden dann schneller als im ANSI-Modus durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Diese Option dient dazu, bestimmte Optimierungen zu ermöglichen, die auf technischer Ebene keiner korrekten C-Semantik entsprechen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
double x; x = (float) (3.5*x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Um dies korrekt ausführen zu können, wird x mit 3,5 multipliziert. Das daraus resultierende Double wird entsprechend der Gleitkommagenauigkeit gekürzt und dann als Double in x gespeichert. Bei der schnellen Gleitkommaoperation wird das lange Double-Produkt direkt in ein Double konvertiert. Da nur wenige Programme auf diese hohe Genauigkeit angewiesen sind, ist das schnelle Gleitkomma die Standardeinstellung. &lt;br /&gt;
&lt;br /&gt;
Wenn diese Option deaktiviert ist {{f|cmd|(-ff-)}}, folgt der Compiler strikt den ANSI-Regeln zur Gleitkommakonvertierung. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Vorgabewert ist True.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-ff|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-ff|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Stille Gleitkommavergleiche&lt;br /&gt;
|&lt;br /&gt;
Verwendet die stille Gleitkommaanweisung (FUCOMP). &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Vorgabewert ist True.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fq|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fq|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Benötigte mathematische Funktionen zur Angabe von Fehlern&lt;br /&gt;
|&lt;br /&gt;
Diese Option gibt dem Compiler an, dass Programme {{code|errno}} verlässlich testen können, nachdem mathematische Standard-Bibliotheksfunktionen aufgerufen wurden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der Vorgabewert ist True.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmath-errno|{{V}}}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Weitere Optionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Weitere Optionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcc32&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcc32c&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcc64&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bccosx&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcciosarm&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bcciosarm64&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;bccaarm&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Weitere Optionen für die Übergabe an den Compiler&lt;br /&gt;
|&lt;br /&gt;
Geben Sie weitere Compiler-Optionen ein, die für das aktuelle Projekt hinzugefügt werden sollen.&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
| {{f|cmd||{{V}}}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Codeseite&lt;br /&gt;
|&lt;br /&gt;
Legt den &#039;&#039;&#039;Standardzeichensatz für Text&#039;&#039;&#039; fest, der im ANSI-Quellcode verwendet wird, wenn der Quellcode kein BOM (Byte Order Mark) enthält.&lt;br /&gt;
&lt;br /&gt;
Bietet Unterstützung für benutzerdefinierte Codeseiten. Damit wird dem Compiler mitgeteilt, wie Multibyte-Zeichensätze (MBCS) analysiert und konvertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Im Eingabefeld können Sie Folgendes angeben:&lt;br /&gt;
* Die tatsächliche [http://msdn.microsoft.com/en-us/library/dd317756%28v=vs.85%29.aspx Codeseitennummer (EN)]. Zum Beispiel:&lt;br /&gt;
** 1250 für europäisch&lt;br /&gt;
** 932 für japanisch&lt;br /&gt;
* Textbezeichner für die Codeseitencodierungen, wie [http://www.unicodetools.com/unicode/codepage-utf8.php UTF8 (EN)], UTF32 oder SJIS (für Shift-JIS für japanisch)&lt;br /&gt;
&lt;br /&gt;
Wenn Sie beispielsweise 65001 oder UTF8 für die Option -CP angeben, unterstützt der Compiler die UTF8-Codierung für Quellcode ohne BOM.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei wesentliche Bereiche, wo Codeseiten eine Rolle spielen:&lt;br /&gt;
* String-Konstanten, Kommentare, #error- und #pragma-Direktiven&lt;br /&gt;
:Für MBCS-Strings, die zu dieser Gruppe gehören, müssen Sie die korrekte Codeseite mit einem Aufruf der Windows-API-Funktion &#039;&#039;&#039;IsDBCSLeadByteEx&#039;&#039;&#039; angeben. Mit dieser Funktion geben Sie die Codeseite an, um die MBCS-Strings für eine bestimmte Gebietseinstellung korrekt zu analysieren (z. B. kann der Compiler damit Backslashes in nachgestellten MBCS-Bytes korrekt analysieren).&lt;br /&gt;
* Wide-Zeichen-String-Konstanten {{f|cmd|(wie [[BCC32.EXE: Der C++-32-Bit-Befehlszeilen-Compiler#Verzeichnisse für Befehlszeilenoptionen|durch L]]&#039;&amp;amp;lt;MBCS string&amp;amp;gt;&#039;) angegeben}}&lt;br /&gt;
:Für MBCS-Strings, die zu dieser Gruppe gehören (Wide-Zeichen-String-Konstanten), geben Sie die korrekte Codeseite an, um die MBCS-Strings mit der Windows-API-Funktion &#039;&#039;&#039;MultiByteToWideChar&#039;&#039;&#039; in Unicode-Strings umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
{{f|cmd|&lt;br /&gt;
&#039;&#039;&#039;Syntax&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Aktivieren Sie das Code-Paging mit der folgenden Befehlszeilenoption:&lt;br /&gt;
: {{Code|-CPnnnn}}&lt;br /&gt;
&lt;br /&gt;
In dieser Syntax ist &#039;&#039;nnnn&#039;&#039; der numerische Wert der Codeseite, die für eine bestimmte Gebietseinstellung verwendet werden soll.&lt;br /&gt;
&amp;lt;br /&amp;gt;}}&lt;br /&gt;
Es gelten folgende Regeln:&lt;br /&gt;
# Bei der Einstellung des Code-Paging müssen die numerischen Werte zu den Werten der Microsoft NLS Code Page ID passen. Zum Beispiel:&lt;br /&gt;
#* Verwenden Sie 437 für MS-DOS-Anwendungen aus den Vereinigten Staaten.&lt;br /&gt;
#* Verwenden Sie 932 für japanische.&lt;br /&gt;
# Der numerische Wert nnnn muss eine gültige Codeseite sein, die vom Betriebssystem unterstützt wird.&lt;br /&gt;
# Benutzer müssen eventuell die relevanten Windows NLS-Dateien installieren, um sicherzustellen, dass asiatische Gebietseinstellungen und Codeseiten zugänglich sind. Nähere Informationen hierzu finden Sie in der Dokumentation zu [http://msdn.microsoft.com/en-us/library/ee265892(v=bts.10).aspx Microsoft NLS Code Page (EN)].&lt;br /&gt;
# Wenn Sie keinen Codeseitenwert angeben, ruft der Compiler die Windows-API-Funktion &#039;&#039;&#039;GetACP&#039;&#039;&#039; auf, um die Standard-Codeseite des Systems zu ermitteln. Dieser Wert wird dann verwendet, wenn Strings wie oben dargestellt behandelt werden müssen.&lt;br /&gt;
&lt;br /&gt;
Die Vorgabe ist, keine Codeseite zu verwenden.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-CP|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|2=-finput-charset=0}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-CP|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Ausführungszeichensatz&lt;br /&gt;
|&lt;br /&gt;
Legt den &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; fest, der für ANSI-Strings in der ausführbaren Datei verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Die Option &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; ist für die Verwendung in geräteübergreifenden Anwendungen konzipiert.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Für den Windows-Host oder ein Windows-Ziel entspricht die Standardtextcodierung der ANSI-Codierung (der Option &#039;&#039;&#039;Codeseite&#039;&#039;&#039;) der Anwendung.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Bei geräteübergreifenden Anwendungen kann die ANSI-Codierung des Ziels von der ANSI-Codierung des Host abweichen.&amp;lt;br /&amp;gt;POSIX-Systeme (einschließlich OS X und das neueste Linux) verwenden z. B. UTF8 als Systemcodierung, daher muss der &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; &amp;quot;UTF8&amp;quot; sein.&lt;br /&gt;
Wenn Sie eine Anwendung mit &amp;quot;932&amp;quot; als &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; compilieren, werden alle String-Literale in der &amp;quot;932&amp;quot;-Codierung (japanisches SJIS) codiert, ungeachtet dessen, ob die Compilier-Umgebung &amp;quot;932&amp;quot; ist. Wide-String-Literale (z. B. L&amp;quot;Test&amp;quot;) sind von dieser Option nicht betroffen.&lt;br /&gt;
&lt;br /&gt;
In manchen Fällen wird der Wert der Option &#039;&#039;&#039;Codeseite&#039;&#039;&#039; für die Option &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039; verwendet. Die folgende Matrix verdeutlicht die Beziehung zwischen den Optionen &#039;&#039;&#039;Codeseite&#039;&#039;&#039; und &#039;&#039;&#039;Ausführungszeichensatz&#039;&#039;&#039;:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Ist die Option festgelegt?&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Beschreibung&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! Codeseite&lt;br /&gt;
! Ausführungszeichensatz&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
*Für Windows-Ziele verwendet der Compiler die Windows-Systemcodeseite ({{Code|CP_ACP}}) als Textzeichensatz und als Ausführungszeichensatz.&lt;br /&gt;
*Für Mac OS X-Ziele verwendet der Compiler die Windows-Systemcodeseite ({{Code|CP_ACP}}) als Textzeichensatz und UTF-8 als Ausführungszeichensatz auf Mac OS X.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Der Compiler verwendet den Wert der &#039;&#039;&#039;Codeseite&#039;&#039;&#039; als Textzeichensatz und als Ausführungszeichensatz.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
Der Compiler verwendet den Wert des &#039;&#039;&#039;Ausführungszeichensatzes&#039;&#039;&#039; als Ausführungszeichensatz und die Systemcodeseite ({{Code|CP_ACP}}) für ein Windows-Ziel oder eine plattformspezifische Codierung für ein plattformübergreifendes Ziel ({{Code|LC_CTYPE}} auf Mac OS X).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
Der Compiler verwendet den Wert der &#039;&#039;&#039;Codeseite&#039;&#039;&#039; als Textzeichensatz und den Wert des &#039;&#039;&#039;Ausführungszeichensatzes&#039;&#039;&#039; als Ausführungszeichensatz.&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-CE|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|2=-fexec-charset=0}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-CE|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Minimale fortlaufende Blockgröße für Speicherzuweisung&lt;br /&gt;
|&lt;br /&gt;
Gibt die minimale Größe an, die für die fortlaufende Speicherzuweisung verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Der Vorgabewert ist (no =nMB). Das bedeutet, dass der größtmögliche Block verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Diese Option können Sie beispielsweise zum Compilieren von großen Projekten ohne PCH oder für sehr große (evtl. vom Computer erzeugte) Quelldateien verwenden, solche, die umfangreichen Quelltext enthalten, der zu vielen Deklarationen pro Datei führt. &lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-savemem|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-savemem|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Vorzeichenloser char-Typ&lt;br /&gt;
|&lt;br /&gt;
Der Compiler behandelt die &#039;&#039;&#039;char&#039;&#039;&#039;-Deklarationen so, als würde es sich um einen &#039;&#039;&#039;unsigned char&#039;&#039;&#039;-Typ (vorzeichenloser Zeichentyp) handeln, der für die Kompatibilität mit anderen Compilern sorgt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Vorgabe = False (&#039;&#039;&#039;char&#039;&#039;&#039;-Typ mit Vorzeichen).&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-K|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-funsigned-char}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-K|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Universelle iOS-Binärdatei generieren (armv7 + arm64)&lt;br /&gt;
|&lt;br /&gt;
Der Compiler erstellt eine universelle Binärdatei für 32-Bit- und 64-Bit-iOS. &amp;lt;br /&amp;gt;&lt;br /&gt;
Die Vorgabe ist False (nur eine 64-Bit-Binärdatei wird erstellt).&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd||{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quelltextoptionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Quelltextoptionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32c&amp;amp;nbsp;&amp;amp;nbsp; &lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccosx&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccaarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Verschachtelte Kommentare aktivieren&lt;br /&gt;
|&lt;br /&gt;
Verschachtelt Kommentare in C- und C++-Quelltextdateien. Solche Kommentare sind in Standard-C-Implementierungen nicht zulässig, und sie sind auch nicht portierbar.&lt;br /&gt;
&amp;lt;br /&amp;gt;Der Vorgabewert ist False.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie können mit konditionalen Compilier-Direktiven große Codeblöcke, die Kommentare enthalten, in Kommentare umwandeln:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
 #if 0&lt;br /&gt;
 // ...&lt;br /&gt;
 /* ... */&lt;br /&gt;
 #endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-C|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-C|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Bezeichnerlänge&lt;br /&gt;
|&lt;br /&gt;
Gibt die Anzahl signifikanter Zeichen (jene, die vom Compiler erkannt werden) in einem Bezeichner an. Mit Ausnahme von C++, wo es für Bezeichner keine Längenbeschränkung gibt, werden Bezeichner nur dann als unterschiedlich angesehen, wenn sie sich in den signifikanten Zeichen unterscheiden. Dies betrifft Variablen, Namen von Präprozessor-Makros und Namen von Struktur-Membern.&lt;br /&gt;
&lt;br /&gt;
Gültige Werte für die Länge sind 0 und 8 bis 250, wobei 0 die Maximallänge von 250 Zeichen bedeutet. {{CBuilder}} unterscheidet standardmäßig 250 Zeichen pro Bezeichner. Andere Systeme (darunter auch einige UNIX-Compiler) ignorieren das neunte und alle folgenden Zeichen. Wenn Sie eine Anwendung auf andere Systeme portieren möchten, sollten Sie den Quelltext mit einer kleineren Anzahl signifikanter Zeichen compilieren. So können Sie Namenskonflikte in langen Bezeichnern aufspüren, die abgeschnitten wurden. Der Vorgabewert beträgt 250.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-i|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-i|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|Plattform nicht unterstützt}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==String-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;cells&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;String-Optionen&#039;&#039;&#039;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | {{f|cmd|Compiler-Optionen|Compiler-Unterstützung}}&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc32c&amp;amp;nbsp;&amp;amp;nbsp; &lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcc64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccosx&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bcciosarm64&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;bccaarm&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Doppelte Strings zusammenführen&lt;br /&gt;
|&lt;br /&gt;
Verbindet zwei literale Strings, wenn einer mit dem anderen identisch ist. Daraus entstehen kleinere Programme, die jedoch etwas mehr Zeit zum Compilieren benötigen. Fehler können dann entstehen, wenn einer der Strings verändert wird. &amp;lt;br /&amp;gt;Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-d|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fmerge-all-constants}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-d|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Schreibgeschützte Strings&lt;br /&gt;
|&lt;br /&gt;
Stellt für Strings zugewiesenen Speicher in das schreibgeschützte Datensegment. Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-dc|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fconst-strings}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-dc|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Schreibbare Strings&lt;br /&gt;
|&lt;br /&gt;
Stellt für Strings zugewiesenen Speicher in das beschreibbare Datensegment. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Vorgabewert ist False.&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-dw|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-fwritable-strings}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|-dw|{{V}}}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|&lt;br /&gt;
{{f|cmd|N/A}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[C++ (Gemeinsame Optionen)|C++ (Gemeinsame Optionen)]]&lt;br /&gt;
* [[BCC32C.EXE|BCC32C.EXE]]&lt;br /&gt;
* [[BCC32.EXE: Der C++-32-Bit-Befehlszeilen-Compiler|BCC32.EXE: Der C++-Compiler für 32-Bit-Windows]]&lt;br /&gt;
* [[BCC64.EXE: Der C++-Compiler für 64-Bit-Windows|BCC64.EXE: Der C++-Compiler für 64-Bit-Windows]]&lt;br /&gt;
* [[BCCOSX.EXE: Der C++-Compiler für OS X|BCCOSX.EXE: Der C++-Compiler für OS X]]&lt;br /&gt;
* [[BCCIOSARM.EXE: Der C++-Compiler für 32-Bit-iOS-Geräte|BCCIOSARM: Der C++-Compiler für 32-Bit-iOS-Geräte]]&lt;br /&gt;
* [[BCCIOSARM64.EXE: Der C++-Compiler für 64-Bit-iOS-Geräte|BCCIOSARM64: Der C++-Compiler für 64-Bit-iOS-Geräte]]&lt;br /&gt;
* [[BCCAARM.EXE: Der C++-Compiler für Android|BCCAARM.EXE: Der C++-Compiler für Android]]&lt;br /&gt;
&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:IDE-Referenz]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Mobile-Tutorial:_Verwenden_einer_Landkarten-Komponente_f%C3%BCr_die_Arbeit_mit_Landkarten_(iOS_und_Android)&amp;diff=208966</id>
		<title>Mobile-Tutorial: Verwenden einer Landkarten-Komponente für die Arbeit mit Landkarten (iOS und Android)</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Mobile-Tutorial:_Verwenden_einer_Landkarten-Komponente_f%C3%BCr_die_Arbeit_mit_Landkarten_(iOS_und_Android)&amp;diff=208966"/>
		<updated>2016-07-04T09:01:47Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: 1 Version: Internal review. LOC-21921&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Mobile-Tutorials: Mobile Anwendungsentwicklung (iOS und Android)}}&lt;br /&gt;
&lt;br /&gt;
{{FM}} kapselt eine Landkarten-Komponente als &#039;&#039;&#039;[[lib_de:FMX.Maps.TMapView|TMapView]]&#039;&#039;&#039;. Mit dieser Komponente können Sie auf Landkarten-APIs zugreifen, die folgendermaßen von der Zielplattform abhängig sind:&lt;br /&gt;
&lt;br /&gt;
* Auf Android-Geräten: [https://developers.google.com/maps/documentation/android/ Google Maps Android API (EN)]&lt;br /&gt;
* Auf iOS-Geräten: [https://developer.apple.com/library/ios/documentation/MapKit/Reference/MapKit_Framework_Reference Map Kit Framework (EN)]&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial wird beschrieben, wie Sie eine einfache {{FM}}-Anwendung erstellen, in der die Komponente &#039;&#039;&#039;[[lib_de:FMX.Maps.TMapView|TMapView]]&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039; iOS&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Android&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
[[File:MapKit maps.png|300px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;iPad&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
[[File:Google maps.png|266px]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Android (LG - E612)&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Grundlegende Funktionen der TMapView-Komponente==&lt;br /&gt;
&lt;br /&gt;
Die [[lib_de:FMX.Maps.TMapView|TMapView]]-Komponente fügt mobilen Anwendungen interaktive Landkarten hinzu. Grundlegende Funktionen dieser Komponente:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vier Kartenarten&#039;&#039;&#039;: Normal, Satellit, Hybrid und (nur für Android) Terrain&lt;br /&gt;
* &#039;&#039;&#039;Gesten-Steuerelement&#039;&#039;&#039;: Gesten-Steuerelemente für intuitive Neigung, Drehen und Zoomen&lt;br /&gt;
* &#039;&#039;&#039;Steuerung der Kartenansicht&#039;&#039;&#039;: Möglichkeit, die Karteneigenschaften, wie Kartenmittelpunktkoordinaten, Kartenausrichtung usw., zu steuern&lt;br /&gt;
&lt;br /&gt;
==Erstellen einer Beispielanwendung==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt wird eine einfache Anwendung (für die Android- und iOS-Zielplattformen) erstellt, in der die Verwendung der [[lib_de:FMX.Maps.TMapView|TMapView]]-Komponente gezeigt wird. Die Anwendung demonstriert die folgenden Techniken:&lt;br /&gt;
&lt;br /&gt;
* Auswählen einer Kartenart&lt;br /&gt;
* Drehen der Karte&lt;br /&gt;
* Angeben der Koordinaten des Kartenmittelpunkts&lt;br /&gt;
* Hinzufügen von Markern zu der Karte&lt;br /&gt;
&lt;br /&gt;
===Konfigurieren von Android-Anwendungen für die Verwendung der TMapView-Komponente===&lt;br /&gt;
&lt;br /&gt;
Bevor Sie Google Maps verwenden können, benötigen Sie einen Key für &#039;&#039;&#039;Google Maps Android API v2&#039;&#039;&#039; (kostenlos erhältlich). Ohne diesen Key erzeugt Ihre App einen Laufzeitfehler.&lt;br /&gt;
&lt;br /&gt;
Außerdem müssen Sie einige [[Verwendet Berechtigungen|Berechtigungen]] und Projektoptionen für Ihre Anwendung konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Anleitung zum Konfigurieren Ihrer Anwendung finden Sie unter &#039;&#039;&#039;[[Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps|Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Entwerfen der Benutzeroberfläche===&lt;br /&gt;
&lt;br /&gt;
# Erstellen Sie eine neue [[Geräteübergreifende Anwendung|geräteübergreifende Anwendung]], indem Sie Folgendes auswählen:&lt;br /&gt;
#* &amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt; Für &#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;: {{Menu|Datei &amp;amp;gt; Neu &amp;amp;gt; Geräteübergreifende Anwendung - {{Delphi}} &amp;amp;gt; Leere Anwendung}}&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
#* &amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt; Für &#039;&#039;&#039;C++&#039;&#039;&#039;: {{Menu|Datei &amp;amp;gt; Neu &amp;amp;gt; Geräteübergreifende Anwendung - {{CBuilderUI}} &amp;amp;gt; Leere Anwendung}}&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
# Wählen Sie in der [[Tool-Palette|Tool-Palette]] zwei &#039;&#039;&#039;[[lib_de:FMX.StdCtrls.TToolBar|TToolBar]]&#039;&#039;&#039;-Komponenten aus, und ziehen Sie sie in den [[Formular-Designer|Formular-Designer]]. &lt;br /&gt;
# Wählen Sie in der [[Tool-Palette|Tool-Palette]] die Komponente &#039;&#039;&#039;[[lib_de:FMX.Maps.TMapView|TMapView]]&#039;&#039;&#039; aus, und ziehen Sie sie in den [[Formular-Designer|Formular-Designer]]. &lt;br /&gt;
# Setzen Sie im [[Objektinspektor|Objektinspektor]] die Eigenschaft &#039;&#039;&#039;Align&#039;&#039;&#039; von &#039;&#039;&#039;TMapView&#039;&#039;&#039; auf &amp;lt;code&amp;gt;Client&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Setzen Sie im [[Objektinspektor|Objektinspektor]] die Eigenschaften &#039;&#039;&#039;Align&#039;&#039;&#039; der beiden TToolBar-Komponenten auf &amp;lt;code&amp;gt;Top&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Bottom&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Entwerfen der Symbolleisten für die Anwendung====&lt;br /&gt;
&lt;br /&gt;
Setzen Sie alle Steuerelemente in die Symbolleisten. Die Anwendung verwendet zwei Symbolleisten (eine oben und eine unten). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So gestalten Sie die obere Symbolleiste:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wählen Sie in der [[Tool-Palette|Tool-Palette]] die folgenden Komponenten aus, und ziehen Sie sie auf die obere Symbolleiste:&lt;br /&gt;
** [[lib_de:FMX.StdCtrls.TTrackBar|TTrackBar]]: Zum Drehen der Karte.&lt;br /&gt;
** Zwei [[lib_de:FMX.Edit.TEdit|TEdit]]-Komponenten: Zum Festlegen der Koordinaten des Kartenmittelpunkts (Breiten- und Längengrad).&lt;br /&gt;
** [[lib_de:FMX.StdCtrls.TButton|TButton]]: Zum Aktualisieren der Karte anhand der aktuellen Koordinaten des Kartenmittelpunkts.&lt;br /&gt;
&lt;br /&gt;
Führen Sie die folgenden Schritte aus, um die entsprechenden Eigenschaften für die Steuerelemente festzulegen:&lt;br /&gt;
&lt;br /&gt;
# Im &#039;&#039;&#039;[[Formular-Designer|Formular-Designer]]&#039;&#039;&#039; wählen Sie &#039;&#039;&#039;TrackBar1&#039;&#039;&#039; aus und setzen Sie die Eigenschaft [[lib_de:FMX.StdCtrls.TCustomTrack.Max|Max]] auf {{Code|359}}.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Edit1&#039;&#039;&#039; aus, und setzen Sie die Eigenschaften &#039;&#039;&#039;Name&#039;&#039;&#039; und &#039;&#039;&#039;Text&#039;&#039;&#039; auf &amp;lt;code&amp;gt;edLat&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Edit2&#039;&#039;&#039; aus, und setzen Sie die Eigenschaften &#039;&#039;&#039;Name&#039;&#039;&#039; und &#039;&#039;&#039;Text&#039;&#039;&#039; auf &amp;lt;code&amp;gt;edLong&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Button1&#039;&#039;&#039; aus, und setzen Sie die Eigenschaft &#039;&#039;&#039;Text&#039;&#039;&#039; auf &amp;lt;code&amp;gt;Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So gestalten Sie die untere Symbolleiste:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie in der [[Tool-Palette|Tool-Palette]] die Komponente &#039;&#039;&#039;TLayout&#039;&#039;&#039; aus, und ziehen Sie sie auf die untere Symbolleiste.&lt;br /&gt;
# Legen Sie im [[Objektinspektor|Objektinspektor]] die folgenden Eigenschaften der &#039;&#039;&#039;Layout1&#039;&#039;&#039;-Komponente fest:&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;Align&#039;&#039;&#039; auf &amp;lt;code&amp;gt;Center&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;Width&#039;&#039;&#039; auf 241.&lt;br /&gt;
# Wählen Sie in der [[Tool-Palette|Tool-Palette]] drei &#039;&#039;&#039;TSpeedButton&#039;&#039;&#039;-Komponenten aus, und fügen Sie sie als untergeordnete Elemente von &#039;&#039;&#039;Layout1&#039;&#039;&#039; hinzu.&lt;br /&gt;
# Legen Sie im [[Objektinspektor|Objektinspektor]] die folgenden Eigenschaften dieser drei Schaltflächen fest:&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;Text&#039;&#039;&#039; der Schaltflächen auf &amp;lt;code&amp;gt;Normal&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Satellite&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Hybrid&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;GroupName&#039;&#039;&#039; aller drei Schaltflächen auf &amp;lt;code&amp;gt;Selector&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;StyleLookup&#039;&#039;&#039; auf &amp;lt;code&amp;gt;segmentedbuttonleft&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;segmentedbuttonmiddle&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;segmentedbuttonright&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach Abschluss der obigen Schritte sollte der [[Formular-Designer|Formular-Designer]] in etwa wie der folgende Screenshot aussehen:&lt;br /&gt;
&lt;br /&gt;
[[File:TMapView toolbar.png]]&lt;br /&gt;
&lt;br /&gt;
====Implementieren der Funktionalität der Steuerelemente====&lt;br /&gt;
&lt;br /&gt;
Um die Anwendungsentwicklung abzuschließen, müssen Sie Ereignisbehandlungsroutinen für alle Steuerelemente auf den Symbolleisten implementieren. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So implementieren Sie die OnClick-Ereignisbehandlungsroutinen für die Symbolschaltflächen: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Doppelklicken Sie im [[Formular-Designer|Formular-Designer]] auf eine Symbolschaltfläche (&#039;&#039;&#039;Normal&#039;&#039;&#039;, &#039;&#039;&#039;Satellite&#039;&#039;&#039; oder &#039;&#039;&#039;Hybrid&#039;&#039;&#039;).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fügen Sie im [[Quelltext-Editor|Quelltext-Editor]] den folgenden Code für die Ereignisbehandlungsroutinen jeder Schaltfläche hinzu:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//-------------------For Normal button -----------------------------------------&lt;br /&gt;
procedure TForm1.SpeedButton1Click(Sender:TObject) ;&lt;br /&gt;
begin&lt;br /&gt;
	MapView1.MapType := TMapType.Normal;&lt;br /&gt;
        TrackBar1.Value := 0.0;&lt;br /&gt;
end;&lt;br /&gt;
// -------------------For Satellite button---------------------------------------&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton2Click(Sender:TObject) ;&lt;br /&gt;
begin&lt;br /&gt;
	MapView1.MapType := TMapType.Satellite;&lt;br /&gt;
        TrackBar1.Value := 0.0;&lt;br /&gt;
end;&lt;br /&gt;
// --------------------For Hybrid button-----------------------------------------&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton3Click(Sender:TObject) ;&lt;br /&gt;
begin&lt;br /&gt;
	MapView1.MapType := TMapType.Hybrid;&lt;br /&gt;
        TrackBar1.Value := 0.0;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;{{CBuilder}}:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//-------------------For Normal button -----------------------------------------&lt;br /&gt;
void __fastcall TForm1::SpeedButton1Click(TObject *Sender) {&lt;br /&gt;
	MapView1-&amp;gt;MapType = TMapType::Normal;&lt;br /&gt;
       TrackBar1-&amp;gt;Value = 0.0;&lt;br /&gt;
}&lt;br /&gt;
// -------------------For Satellite button---------------------------------------&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::SpeedButton2Click(TObject *Sender) {&lt;br /&gt;
	MapView1-&amp;gt;MapType = TMapType::Satellite;&lt;br /&gt;
	TrackBar1-&amp;gt;Value = 0.0;&lt;br /&gt;
}&lt;br /&gt;
// --------------------For Hybrid button-----------------------------------------&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::SpeedButton3Click(TObject *Sender) {&lt;br /&gt;
	MapView1-&amp;gt;MapType = TMapType::Hybrid;&lt;br /&gt;
	TrackBar1-&amp;gt;Value = 0.0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So implementieren Sie die OnChange-Ereignisbehandlungsroutine für das Schieberegler-Element:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Wählen Sie im [[Formular-Designer|Formular-Designer]] TrackBar1 aus.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Öffnen Sie im [[Objektinspektor|Objektinspektor]] die Registerkarte &#039;&#039;&#039;Ereignisse&#039;&#039;&#039;, und doppelklicken Sie neben &#039;&#039;&#039;OnChange&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
Geben Sie den folgenden Code an:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.TrackBar1Change(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  MapView1.Bearing := TrackBar1.Value;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;{{CBuilder}}:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TForm1::TrackBar1Change(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
   MapView1-&amp;gt;Bearing = TrackBar1-&amp;gt;Value;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So implementieren Sie die OnClick-Ereignisbehandlungsroutine für die Go-Schaltfläche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Doppelklicken Sie im [[Formular-Designer|Formular-Designer]] auf die Schaltfläche &#039;&#039;&#039;Go&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Geben Sie im [[Quelltext-Editor|Quelltext-Editor]] den folgenden Code ein:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  mapCenter: TMapCoordinate;&lt;br /&gt;
begin&lt;br /&gt;
  mapCenter := TMapCoordinate.Create(StrToFloat(edLat.Text),&lt;br /&gt;
    StrToFloat(edLong.Text));&lt;br /&gt;
  MapView1.Location := mapCenter;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;{{CBuilder}}:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender) {&lt;br /&gt;
	TMapCoordinate mapCenter = TMapCoordinate::Create(StrToFloat(edLat-&amp;gt;Text),&lt;br /&gt;
		StrToFloat(edLong-&amp;gt;Text));&lt;br /&gt;
	MapView1-&amp;gt;Location = mapCenter;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Marker bezeichnen Positionen auf der Karte. Wenn Sie der Karte Marker hinzufügen möchten, können Sie die &#039;&#039;&#039;OnMapClick&#039;&#039;&#039;-Ereignisbehandlungsroutine für die Karte folgendermaßen hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So implementieren Sie die OnMapClick-Ereignisbehandlungsroutine für die Karte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;&lt;br /&gt;
Wählen Sie in der [[Strukturansicht|Strukturansicht]] &#039;&#039;&#039;MapView1&#039;&#039;&#039; aus.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Öffnen Sie im [[Objektinspektor|Objektinspektor]] die Registerkarte &#039;&#039;&#039;Ereignisse&#039;&#039;&#039;, und doppelklicken Sie neben &#039;&#039;&#039;OnMapClick&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Fügen Sie im [[Quelltext-Editor|Quelltext-Editor]] den folgenden Code für die Ereignisbehandlungsroutine hinzu:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.MapView1MapClick(const Position: TMapCoordinate);&lt;br /&gt;
var&lt;br /&gt;
  MyMarker: TMapMarkerDescriptor;&lt;br /&gt;
begin&lt;br /&gt;
  MyMarker := TMapMarkerDescriptor.Create(Position, &#039;MyMarker&#039;);&lt;br /&gt;
  // Make a marker draggable&lt;br /&gt;
  MyMarker.Draggable := True;&lt;br /&gt;
  // Make a marker visible&lt;br /&gt;
  MyMarker.Visible :=True;&lt;br /&gt;
  MapView1.AddMarker(MyMarker);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;{{CBuilder}}:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TForm1::MapView1MapClick(const TMapCoordinate &amp;amp;Position) {&lt;br /&gt;
	TMapMarkerDescriptor myMarker = TMapMarkerDescriptor::Create(Position, &amp;quot;MyMarker&amp;quot;);&lt;br /&gt;
	// Make a marker draggable&lt;br /&gt;
        myMarker.Draggable = true;&lt;br /&gt;
        // Make a marker visible&lt;br /&gt;
	myMarker.Visible = true;&lt;br /&gt;
	MapView1-&amp;gt;AddMarker(myMarker);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ausführen der Beispielanwendung==&lt;br /&gt;
&lt;br /&gt;
Gehen Sie folgendermaßen vor, um diese Anwendung auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt; Wählen Sie in der [[Projektverwaltung|Projektverwaltung]] die Zielplattform aus (Android und iOS werden unterstützt).&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Wichtig&#039;&#039;&#039;: Vor dem Ausführen dieser Anwendung auf Android-Geräten müssen Sie die Schritte unter [[Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps|Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps]] abgeschlossen haben.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Drücken Sie &amp;lt;code&amp;gt;Umschalt+Strg+F9&amp;lt;/code&amp;gt;, um die Anwendung ohne Debugger auszuführen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Szenario können Sie Ihre Anwendung testen:&lt;br /&gt;
&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Hybrid&#039;&#039;&#039;.&lt;br /&gt;
# Geben Sie den neuen Kartenmittelpunkt an (standardmäßig ist der Kartenmittelpunkt (0.0, 0.0)):&lt;br /&gt;
#* Legen Sie im linken Textfeld den Wert für den Breitengrad (z. B. 50 Grad) fest.&lt;br /&gt;
#* Legen Sie im rechten Textfeld den Wert für den Längengrad (z. B. 20 Grad) fest.&lt;br /&gt;
#* Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Go&#039;&#039;&#039;.&lt;br /&gt;
# Klicken Sie auf einen beliebigen Punkt auf der Karte, um einen Marker hinzuzufügen.&lt;br /&gt;
# Tippen Sie auf das Schieberegler-Element, und verschieben Sie den Regler an eine bestimmte Position. [&#039;&#039;Dadurch wird die Ausrichtung der Karte (Peilung) geändert. Die Kartenausrichtung ist die Richtung, in die eine vertikale Linie auf der Karte zeigt, gemessen in Grad im Uhrzeigersinn von Norden her.&#039;&#039;]  &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039; iOS&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Android&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
[[File:Maps iOS.png|300px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;iPad&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
[[File:Maps Android.png|266px]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Android (LG - E612)&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:FMX.Maps.TMapView|TMapView]]&lt;br /&gt;
* [[Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps|Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps]]&lt;br /&gt;
* [[Mobile-Tutorial: Verwenden von Positionssensoren (iOS und Android)|Mobile-Tutorial: Verwenden von Positionssensoren (iOS und Android)]]&lt;br /&gt;
&lt;br /&gt;
===Codebeispiele===&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:FMX.Tabbed Map Sample|Tabbed Map (Beispiel)]]&lt;br /&gt;
* [[samp_en:FMX.Map Sample|Map (Beispiel)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:FMX]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:IOS]]&lt;br /&gt;
[[Category:XE8]]&lt;br /&gt;
[[Category:Android]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Mobile-Tutorial:_Verwenden_einer_Landkarten-Komponente_f%C3%BCr_die_Arbeit_mit_Landkarten_(iOS_und_Android)&amp;diff=208965</id>
		<title>Mobile-Tutorial: Verwenden einer Landkarten-Komponente für die Arbeit mit Landkarten (iOS und Android)</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Mobile-Tutorial:_Verwenden_einer_Landkarten-Komponente_f%C3%BCr_die_Arbeit_mit_Landkarten_(iOS_und_Android)&amp;diff=208965"/>
		<updated>2016-07-04T09:01:41Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Internal review. LOC-21921&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Mobile-Tutorials: Mobile Anwendungsentwicklung (iOS und Android)}}&lt;br /&gt;
&lt;br /&gt;
{{FM}} kapselt eine Landkarten-Komponente als &#039;&#039;&#039;[[lib_de:FMX.Maps.TMapView|TMapView]]&#039;&#039;&#039;. Mit dieser Komponente können Sie auf Landkarten-APIs zugreifen, die folgendermaßen von der Zielplattform abhängig sind:&lt;br /&gt;
&lt;br /&gt;
* Auf Android-Geräten: [https://developers.google.com/maps/documentation/android/ Google Maps Android API (EN)]&lt;br /&gt;
* Auf iOS-Geräten: [https://developer.apple.com/library/ios/documentation/MapKit/Reference/MapKit_Framework_Reference Map Kit Framework (EN)]&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial wird beschrieben, wie Sie eine einfache {{FM}}-Anwendung erstellen, in der die Komponente &#039;&#039;&#039;[[lib_de:FMX.Maps.TMapView|TMapView]]&#039;&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039; iOS&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Android&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
[[File:MapKit maps.png|300px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;iPad&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
[[File:Google maps.png|266px]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Android (LG - E612)&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Grundlegende Funktionen der TMapView-Komponente==&lt;br /&gt;
&lt;br /&gt;
Die [[lib_de:FMX.Maps.TMapView|TMapView]]-Komponente fügt mobilen Anwendungen interaktive Landkarten hinzu. Grundlegende Funktionen dieser Komponente:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vier Kartenarten&#039;&#039;&#039;: Normal, Satellit, Hybrid und (nur für Android) Terrain&lt;br /&gt;
* &#039;&#039;&#039;Gesten-Steuerelement&#039;&#039;&#039;: Gesten-Steuerelemente für intuitive Neigung, Drehen und Zoomen&lt;br /&gt;
* &#039;&#039;&#039;Steuerung der Kartenansicht&#039;&#039;&#039;: Möglichkeit, die Karteneigenschaften, wie Kartenmittelpunktkoordinaten, Kartenausrichtung usw., zu steuern&lt;br /&gt;
&lt;br /&gt;
==Erstellen einer Beispielanwendung==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt wird eine einfache Anwendung (für die Android- und iOS-Zielplattformen) erstellt, in der die Verwendung der [[lib_de:FMX.Maps.TMapView|TMapView]]-Komponente gezeigt wird. Die Anwendung demonstriert die folgenden Techniken:&lt;br /&gt;
&lt;br /&gt;
* Auswählen einer Kartenart&lt;br /&gt;
* Drehen der Karte&lt;br /&gt;
* Angeben der Koordinaten des Kartenmittelpunkts&lt;br /&gt;
* Hinzufügen von Markern zu der Karte&lt;br /&gt;
&lt;br /&gt;
===Konfigurieren von Android-Anwendungen für die Verwendung der TMapView-Komponente===&lt;br /&gt;
&lt;br /&gt;
Bevor Sie Google Maps verwenden können, benötigen Sie einen Key für &#039;&#039;&#039;Google Maps Android API v2&#039;&#039;&#039; (kostenlos erhältlich). Ohne diesen Key erzeugt Ihre App einen Laufzeitfehler.&lt;br /&gt;
&lt;br /&gt;
Außerdem müssen Sie einige [[Verwendet Berechtigungen|Berechtigungen]] und Projektoptionen für Ihre Anwendung konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Anleitung zum Konfigurieren Ihrer Anwendung finden Sie unter &#039;&#039;&#039;[[Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps|Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Entwerfen der Benutzeroberfläche===&lt;br /&gt;
&lt;br /&gt;
# Erstellen Sie eine neue [[Geräteübergreifende Anwendung|geräteübergreifende Anwendung]], indem Sie Folgendes auswählen:&lt;br /&gt;
#* &amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt; Für &#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;: {{Menu|Datei &amp;amp;gt; Neu &amp;amp;gt; Geräteübergreifende Anwendung - {{Delphi}} &amp;amp;gt; Leere Anwendung}}&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
#* &amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt; Für &#039;&#039;&#039;C++&#039;&#039;&#039;: {{Menu|Datei &amp;amp;gt; Neu &amp;amp;gt; Geräteübergreifende Anwendung - {{CBuilderUI}} &amp;amp;gt; Leere Anwendung}}&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
# Wählen Sie in der [[Tool-Palette|Tool-Palette]] zwei &#039;&#039;&#039;[[lib_de:FMX.StdCtrls.TToolBar|TToolBar]]&#039;&#039;&#039;-Komponenten aus, und ziehen Sie sie in den [[Formular-Designer|Formular-Designer]]. &lt;br /&gt;
# Wählen Sie in der [[Tool-Palette|Tool-Palette]] die Komponente &#039;&#039;&#039;[[lib_de:FMX.Maps.TMapView|TMapView]]&#039;&#039;&#039; aus, und ziehen Sie sie in den [[Formular-Designer|Formular-Designer]]. &lt;br /&gt;
# Setzen Sie im [[Objektinspektor|Objektinspektor]] die Eigenschaft &#039;&#039;&#039;Align&#039;&#039;&#039; von &#039;&#039;&#039;TMapView&#039;&#039;&#039; auf &amp;lt;code&amp;gt;Client&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Setzen Sie im [[Objektinspektor|Objektinspektor]] die Eigenschaften &#039;&#039;&#039;Align&#039;&#039;&#039; der beiden TToolBar-Komponenten auf &amp;lt;code&amp;gt;Top&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Bottom&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Entwerfen der Symbolleisten für die Anwendung====&lt;br /&gt;
&lt;br /&gt;
Setzen Sie alle Steuerelemente in die Symbolleisten. Die Anwendung verwendet zwei Symbolleisten (eine oben und eine unten). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So gestalten Sie die obere Symbolleiste:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wählen Sie in der [[Tool-Palette|Tool-Palette]] die folgenden Komponenten aus, und ziehen Sie sie auf die obere Symbolleiste:&lt;br /&gt;
** [[lib_de:FMX.StdCtrls.TTrackBar|TTrackBar]]: Zum Drehen der Karte.&lt;br /&gt;
** Zwei [[lib_de:FMX.Edit.TEdit|TEdit]]-Komponenten: Zum Festlegen der Koordinaten des Kartenmittelpunkts (Breiten- und Längengrad).&lt;br /&gt;
** [[lib_de:FMX.StdCtrls.TButton|TButton]]: Zum Aktualisieren der Karte anhand der aktuellen Koordinaten des Kartenmittelpunkts.&lt;br /&gt;
&lt;br /&gt;
Führen Sie die folgenden Schritte aus, um die entsprechenden Eigenschaften für die Steuerelemente festzulegen:&lt;br /&gt;
&lt;br /&gt;
# Im &#039;&#039;&#039;[[Formular-Designer|Formular-Designer]]&#039;&#039;&#039; wählen Sie &#039;&#039;&#039;TrackBar1&#039;&#039;&#039; aus und setzen Sie die Eigenschaft [[lib_de:FMX.StdCtrls.TCustomTrack.Max|Max]] auf {{Code|359}}.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Edit1&#039;&#039;&#039; aus, und setzen Sie die Eigenschaften &#039;&#039;&#039;Name&#039;&#039;&#039; und &#039;&#039;&#039;Text&#039;&#039;&#039; auf &amp;lt;code&amp;gt;edLat&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Edit2&#039;&#039;&#039; aus, und setzen Sie die Eigenschaften &#039;&#039;&#039;Name&#039;&#039;&#039; und &#039;&#039;&#039;Text&#039;&#039;&#039; auf &amp;lt;code&amp;gt;edLong&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Button1&#039;&#039;&#039; aus, und setzen Sie die Eigenschaft &#039;&#039;&#039;Text&#039;&#039;&#039; auf &amp;lt;code&amp;gt;Go&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So gestalten Sie die untere Symbolleiste:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie in der [[Tool-Palette|Tool-Palette]] die Komponente &#039;&#039;&#039;TLayout&#039;&#039;&#039; aus, und ziehen Sie sie auf die untere Symbolleiste.&lt;br /&gt;
# Legen Sie im [[Objektinspektor|Objektinspektor]] die folgenden Eigenschaften der &#039;&#039;&#039;Layout1&#039;&#039;&#039;-Komponente fest:&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;Align&#039;&#039;&#039; auf &amp;lt;code&amp;gt;Center&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;Width&#039;&#039;&#039; auf 241.&lt;br /&gt;
# Wählen Sie in der [[Tool-Palette|Tool-Palette]] drei &#039;&#039;&#039;TSpeedButton&#039;&#039;&#039;-Komponenten aus, und fügen Sie sie als untergeordnete Elemente von &#039;&#039;&#039;Layout1&#039;&#039;&#039; hinzu.&lt;br /&gt;
# Legen Sie im [[Objektinspektor|Objektinspektor]] die folgenden Eigenschaften dieser drei Schaltflächen fest:&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;Text&#039;&#039;&#039; der Schaltflächen auf &amp;lt;code&amp;gt;Normal&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Satellite&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Hybrid&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;GroupName&#039;&#039;&#039; aller drei Schaltflächen auf &amp;lt;code&amp;gt;Selector&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Setzen Sie die Eigenschaft &#039;&#039;&#039;StyleLookup&#039;&#039;&#039; auf &amp;lt;code&amp;gt;segmentedbuttonleft&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;segmentedbuttonmiddle&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;segmentedbuttonright&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach Abschluss der obigen Schritte sollte der [[Formular-Designer|Formular-Designer]] in etwa wie der folgende Screenshot aussehen:&lt;br /&gt;
&lt;br /&gt;
[[File:TMapView toolbar.png]]&lt;br /&gt;
&lt;br /&gt;
====Implementieren der Funktionalität der Steuerelemente====&lt;br /&gt;
&lt;br /&gt;
Um die Anwendungsentwicklung abzuschließen, müssen Sie Ereignisbehandlungsroutinen für alle Steuerelemente auf den Symbolleisten implementieren. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So implementieren Sie die OnClick-Ereignisbehandlungsroutinen für die Symbolschaltflächen: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Doppelklicken Sie im [[Formular-Designer|Formular-Designer]] auf eine Symbolschaltfläche (&#039;&#039;&#039;Normal&#039;&#039;&#039;, &#039;&#039;&#039;Satellite&#039;&#039;&#039; oder &#039;&#039;&#039;Hybrid&#039;&#039;&#039;).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fügen Sie im [[Quelltext-Editor|Quelltext-Editor]] den folgenden Code für die Ereignisbehandlungsroutinen jeder Schaltfläche hinzu:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
//-------------------For Normal button -----------------------------------------&lt;br /&gt;
procedure TForm1.SpeedButton1Click(Sender:TObject) ;&lt;br /&gt;
begin&lt;br /&gt;
	MapView1.MapType := TMapType.Normal;&lt;br /&gt;
        TrackBar1.Value := 0.0;&lt;br /&gt;
end;&lt;br /&gt;
// -------------------For Satellite button---------------------------------------&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton2Click(Sender:TObject) ;&lt;br /&gt;
begin&lt;br /&gt;
	MapView1.MapType := TMapType.Satellite;&lt;br /&gt;
        TrackBar1.Value := 0.0;&lt;br /&gt;
end;&lt;br /&gt;
// --------------------For Hybrid button-----------------------------------------&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.SpeedButton3Click(Sender:TObject) ;&lt;br /&gt;
begin&lt;br /&gt;
	MapView1.MapType := TMapType.Hybrid;&lt;br /&gt;
        TrackBar1.Value := 0.0;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;{{CBuilder}}:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//-------------------For Normal button -----------------------------------------&lt;br /&gt;
void __fastcall TForm1::SpeedButton1Click(TObject *Sender) {&lt;br /&gt;
	MapView1-&amp;gt;MapType = TMapType::Normal;&lt;br /&gt;
       TrackBar1-&amp;gt;Value = 0.0;&lt;br /&gt;
}&lt;br /&gt;
// -------------------For Satellite button---------------------------------------&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::SpeedButton2Click(TObject *Sender) {&lt;br /&gt;
	MapView1-&amp;gt;MapType = TMapType::Satellite;&lt;br /&gt;
	TrackBar1-&amp;gt;Value = 0.0;&lt;br /&gt;
}&lt;br /&gt;
// --------------------For Hybrid button-----------------------------------------&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1::SpeedButton3Click(TObject *Sender) {&lt;br /&gt;
	MapView1-&amp;gt;MapType = TMapType::Hybrid;&lt;br /&gt;
	TrackBar1-&amp;gt;Value = 0.0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So implementieren Sie die OnChange-Ereignisbehandlungsroutine für das Schieberegler-Element:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Wählen Sie im [[Formular-Designer|Formular-Designer]] TrackBar1 aus.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Öffnen Sie im [[Objektinspektor|Objektinspektor]] die Registerkarte &#039;&#039;&#039;Ereignisse&#039;&#039;&#039;, und doppelklicken Sie neben &#039;&#039;&#039;OnChange&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
Geben Sie den folgenden Code an:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.TrackBar1Change(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  MapView1.Bearing := TrackBar1.Value;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;{{CBuilder}}:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TForm1::TrackBar1Change(TObject *Sender)&lt;br /&gt;
{&lt;br /&gt;
   MapView1-&amp;gt;Bearing = TrackBar1-&amp;gt;Value;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So implementieren Sie die OnClick-Ereignisbehandlungsroutine für die Go-Schaltfläche:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;Doppelklicken Sie im [[Formular-Designer|Formular-Designer]] auf die Schaltfläche &#039;&#039;&#039;Go&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Geben Sie im [[Quelltext-Editor|Quelltext-Editor]] den folgenden Code ein:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  mapCenter: TMapCoordinate;&lt;br /&gt;
begin&lt;br /&gt;
  mapCenter := TMapCoordinate.Create(StrToFloat(edLat.Text),&lt;br /&gt;
    StrToFloat(edLong.Text));&lt;br /&gt;
  MapView1.Location := mapCenter;&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;{{CBuilder}}:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TForm1::Button1Click(TObject *Sender) {&lt;br /&gt;
	TMapCoordinate mapCenter = TMapCoordinate::Create(StrToFloat(edLat-&amp;gt;Text),&lt;br /&gt;
		StrToFloat(edLong-&amp;gt;Text));&lt;br /&gt;
	MapView1-&amp;gt;Location = mapCenter;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Marker bezeichnen Positionen auf der Karte. Wenn Sie der Karte Marker hinzufügen möchten, können Sie die &#039;&#039;&#039;OnMapClick&#039;&#039;&#039;-Ereignisbehandlungsroutine für die Karte folgendermaßen hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So implementieren Sie die OnMapClick-Ereignisbehandlungsroutine für die Karte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;&lt;br /&gt;
Wählen Sie in der [[Strukturansicht|Strukturansicht]] &#039;&#039;&#039;MapView1&#039;&#039;&#039; aus.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Öffnen Sie im [[Objektinspektor|Objektinspektor]] die Registerkarte &#039;&#039;&#039;Ereignisse&#039;&#039;&#039;, und doppelklicken Sie neben &#039;&#039;&#039;OnMapClick&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Fügen Sie im [[Quelltext-Editor|Quelltext-Editor]] den folgenden Code für die Ereignisbehandlungsroutine hinzu:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}&#039;&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.MapView1MapClick(const Position: TMapCoordinate);&lt;br /&gt;
var&lt;br /&gt;
  MyMarker: TMapMarkerDescriptor;&lt;br /&gt;
begin&lt;br /&gt;
  MyMarker := TMapMarkerDescriptor.Create(Position, &#039;MyMarker&#039;);&lt;br /&gt;
  // Make a marker draggable&lt;br /&gt;
  MyMarker.Draggable := True;&lt;br /&gt;
  // Make a marker visible&lt;br /&gt;
  MyMarker.Visible :=True;&lt;br /&gt;
  MapView1.AddMarker(MyMarker);&lt;br /&gt;
end;&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;{{CBuilder}}:&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TForm1::MapView1MapClick(const TMapCoordinate &amp;amp;Position) {&lt;br /&gt;
	TMapMarkerDescriptor myMarker = TMapMarkerDescriptor::Create(Position, &amp;quot;MyMarker&amp;quot;);&lt;br /&gt;
	// Make a marker draggable&lt;br /&gt;
        myMarker.Draggable = true;&lt;br /&gt;
        // Make a marker visible&lt;br /&gt;
	myMarker.Visible = true;&lt;br /&gt;
	MapView1-&amp;gt;AddMarker(myMarker);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ausführen der Beispielanwendung==&lt;br /&gt;
&lt;br /&gt;
Gehen Sie folgendermaßen vor, um diese Anwendung auszuführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt; Wählen Sie in der [[Projektverwaltung|Projektverwaltung]] die Zielplattform aus (Android und iOS werden unterstützt).&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Wichtig&#039;&#039;&#039;: Vor dem Ausführen dieser Anwendung auf Android-Geräten müssen Sie die Schritte unter [[Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps|Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps]] abgeschlossen haben.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Drücken Sie &amp;lt;code&amp;gt;Umschalt+Strg+F9&amp;lt;/code&amp;gt;, um die Anwendung ohne Debugger auszuführen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Szenario können Sie Ihre Anwendung testen:&lt;br /&gt;
&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Hybrid&#039;&#039;&#039;.&lt;br /&gt;
# Geben Sie den neuen Kartenmittelpunkt an (standardmäßig ist der Kartenmittelpunkt (0.0, 0.0)):&lt;br /&gt;
#* Legen Sie im linken Textfeld den Wert für den Breitengrad (z. B. 50 Grad) fest.&lt;br /&gt;
#* Legen Sie im rechten Textfeld den Wert für den Längengrad (z. B. 20 Grad) fest.&lt;br /&gt;
#* Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Go&#039;&#039;&#039;.&lt;br /&gt;
# Klicken Sie auf einen beliebigen Punkt auf der Karte, um einen Marker hinzuzufügen.&lt;br /&gt;
# Tippen Sie auf das Schieberegler-Element, und verschieben Sie den Regler an eine bestimmte Position. [&#039;&#039;Dadurch wird die Ausrichtung der Karte (Peilung) geändert. Die Kartenausrichtung ist die Richtung, in die eine vertikale Linie auf der Karte zeigt, gemessen in Grad im Uhrzeigersinn von Norden her.&#039;&#039;]  &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039; iOS&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Android&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
[[File:Maps iOS.png|300px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;iPad&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
[[File:Maps Android.png|266px]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Android (LG - E612)&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:FMX.Maps.TMapView|TMapView]]&lt;br /&gt;
* [[Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps|Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps]]&lt;br /&gt;
* [[Mobile-Tutorial: Verwenden von Positionssensoren (iOS und Android)|Mobile-Tutorial: Verwenden von Positionssensoren (iOS und Android)]]&lt;br /&gt;
&lt;br /&gt;
===Codebeispiele===&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:FMX.Tabbed Map Sample|Tabbed Map (Beispiel)]]&lt;br /&gt;
* [[samp_en:FMX.Map Sample|Map (Beispiel)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:FMX]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:IOS]]&lt;br /&gt;
[[Category:XE8]]&lt;br /&gt;
[[Category:Android]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Teilen_von_Daten_mit_Remote-Anwendungen_mithilfe_von_App-Tethering&amp;diff=208945</id>
		<title>Teilen von Daten mit Remote-Anwendungen mithilfe von App-Tethering</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Teilen_von_Daten_mit_Remote-Anwendungen_mithilfe_von_App-Tethering&amp;diff=208945"/>
		<updated>2016-07-01T07:41:27Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: 1 Version: Internal review. LOC-22647&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Verwenden von App-Tethering}}&lt;br /&gt;
&lt;br /&gt;
Die App-Tethering-Implementierung der [[RTL|RTL]] stellt die Unterstützung für das Teilen von Daten zwischen verbundenen Anwendungen bereit.&lt;br /&gt;
&lt;br /&gt;
==Senden von Daten an verbundene Anwendungen==&lt;br /&gt;
&lt;br /&gt;
Sie können mit den folgenden Verfahren Daten mithilfe von App-Tethering senden:&lt;br /&gt;
&lt;br /&gt;
* [[#Teilen von Ressourcen|Definieren von geteilten Ressourcen]]. Ein Ressource enthält einen Wert. Verbundene Anwendungen können den Wert einer geteilten Ressource lesen und eine geteilte Ressource abonnieren, um bei Änderungen des Werts der geteilten Ressource Aktualisierungen zu erhalten.&lt;br /&gt;
* [[#Senden von Daten als temporäre Ressource|Senden von Daten als temporäre Ressource]]. Sie können zur Laufzeit Strings und Streams senden, die verbundene Anwendungen als temporäre Ressourcen empfangen. Verbundene Anwendungen können keine temporären Ressourcen für Aktualisierungen empfangen, weil Ihre Anwendung temporäre Ressourcen nur einmal sendet.&lt;br /&gt;
&lt;br /&gt;
===Teilen von Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Eine [[lib_de:System.Tether.AppProfile.TLocalResource|TLocalResource]] ist ein Wrapper für einen Standarddatentyp ([[lib_de:System.Boolean|Boolean]], [[lib_de:System.Integer|Integer]], [[lib_de:System.Int64|Int64]], [[lib_de:System.Single|Single]], [[lib_de:System.Double|Double]], [[lib_de:System.String|String]]) oder einen [[lib_de:System.Classes.TStream|TStream]]. Sie können Ressourcen mit verbundenen Anwendungen mithilfe von App-Tethering teilen.&lt;br /&gt;
&lt;br /&gt;
So erstellen und teilen Sie eine Ressource:&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie im &#039;&#039;&#039;[[Formular-Designer|Formular-Designer]]&#039;&#039;&#039; Ihre [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente aus, und doppelklicken Sie im &#039;&#039;&#039;[[Objektinspektor|Objektinspektor]]&#039;&#039;&#039; auf die Eigenschaft [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.Resources|Resources]].&lt;br /&gt;
#  Klicken Sie im angezeigten [[Aktionslisten-Editor|Listen-Editor]] auf [[File:New.png|Neu]], um der Liste eine neue TLocalResource hinzuzufügen.&lt;br /&gt;
# Wählen Sie im Listen-Editor Ihre neue TLocalResource aus, und geben Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; für deren Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Name|Name]] einen eindeutigen Namen an.&lt;br /&gt;
&lt;br /&gt;
:[[Image:TLocalResource Editing.png]] &lt;br /&gt;
&lt;br /&gt;
Ihre Ressource wird jetzt per App-Tethering geteilt. Verbundene Anwendungen können den Wert dieser Ressource lesen und die Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts in Ihren Anwendungen verbundene Anwendungen über die Änderung benachrichtigt werden und den neuen Wert lesen können.&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie Ihre Ressource beim Entwurf definiert haben, müssen Sie ihr zur Laufzeit einen Wert zuweisen:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In {{Delphi}}:&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1.Resources.FindByName(&#039;ResourceName&#039;).Value := &#039;SomeValue&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1.Resources.Items[ResourceNumber].Value := &#039;SomeValue&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In C++: &lt;br /&gt;
**&amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1-&amp;gt;Resources-&amp;gt;FindByName(&amp;quot;ResourceName&amp;quot;)-&amp;gt;Value = &amp;quot;SomeValue&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1-&amp;gt;Resources-&amp;gt;Items[ResourceNumber]-&amp;gt;Value = &amp;quot;SomeValue&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Beschreibung:&lt;br /&gt;
:* {{Code|ResourceName}} ist der Name, den Sie in die Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Name|Name]] der Ressource eingeben, wenn Sie sie zur Laufzeit erstellen.&lt;br /&gt;
:* {{Code|SomeValue}} ist der Wert, den Sie für die Ressource festlegen möchten. Dieser Wert kann einen der oben aufgeführten Standarddatentypen haben.&lt;br /&gt;
:* {{Code|ResourceNumber}} ist die Anzahl der Einträge in der Eigenschaft [[lib_de:System.Tether.AppProfile.TResourceCollection.Items|Items]] der [[lib_de:System.Tether.AppProfile.TResourceCollection|TResourceCollection]], wenn Sie sie in Entwurfszeit erstellen.&lt;br /&gt;
&lt;br /&gt;
Verbundene Anwendungen können jederzeit den Wert Ihrer geteilten Ressource anfordern und die geteilte Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts die abonnierten Remote-Anwendungsprofile die aktualisierte Ressource erhalten.&lt;br /&gt;
&lt;br /&gt;
===Senden von Daten als temporäre Ressource===&lt;br /&gt;
&lt;br /&gt;
Anstatt Ressourcen zu teilen, können Sie mit den Methoden [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SendString|SendString]] und [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SendStream|SendStream]] der [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente Strings oder Streams an verbundene Anwendungen senden.&lt;br /&gt;
&lt;br /&gt;
Remote-Anwendungsprofile empfangen den Wert, der in einer temporären Ressource enthalten ist. Eine temporäre Ressource wird von Ihrem Anwendungsprofil nur einmal an verbundene Anwendungen gesendet. Diese temporäre Ressource wird anschließend gelöscht; verbundene Anwendungen können diese Ressource nicht abonnieren, um Aktualisierungen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Diese Methode erwartet die folgenden Parameter:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|AProfile}} ist ein Remote-Anwendungsprofil als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]]. Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] der [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem gewünschten Remote-Anwendungsprofil durchsuchen.&lt;br /&gt;
* {{Arg|Description}} ist ein String, der den Inhalt des gesendeten Wertes beschreibt.&lt;br /&gt;
* {{Arg|AString}} oder {{Arg|AStream}} ist der Wert, der gesendet werden soll.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit temporären Ressourcen andere Standarddatentypen als String senden möchten, müssen Sie diese Datentypen vor dem Senden in Strings konvertieren und dann in der verbundenen Anwendung, die den String empfängt, wieder zurück in ihren Originaltyp konvertieren. Siehe [[JSON|JSON]].&lt;br /&gt;
&lt;br /&gt;
==Empfangen von Daten von verbundenen Anwendungen==&lt;br /&gt;
&lt;br /&gt;
Ihre Anwendung kann eine Ressource erhalten, enweder weil das [[#Senden von Daten an verbundene Anwendungen|Remote-Anwendungsprofil es sendet]], oder weil Sie [[#Anfordern von Remote-Ressourcen|es anfordern]]. Sie können [[#Verarbeiten von eingehenden Remote-Ressourcen|jede eingehende Remote-Ressource mit Ihrer TTetheringAppProfile-Komponente verarbeiten]].&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus können Sie [[#Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten|eine Remote-Ressource abonnieren, um Aktualisierungen zu erhalten]]. Wenn sich der Wert der Remote-Ressource ändert, wird Ihre Anwendung über die Änderung informiert und empfängt den neuen Wert der Remote-Ressource. Wenn Sie [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering#Verbinden von Anwendungen über Gruppen|die Verbindung zu Remote-Anwendungen über Gruppen herstellen]], können Sie alternativ [[#Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen|mit lokalen Ressourcen Remote-Ressourcen abonnieren]] und separate Methoden definieren, um Aktualisierungen jeder einzelnen der abonnierten Remote-Ressourcen zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
===Anfordern von Remote-Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Die [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente stellt eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteResourceValue|GetRemoteResourceValue]], bereit, mit der Sie Remote-Ressourcen anfordern können.&lt;br /&gt;
&lt;br /&gt;
Sie können eine Remote-Ressource für die Anforderung mit einer der folgenden Parametergruppen festlegen:&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]] und den Namen der Remote-Ressource enthält.&lt;br /&gt;
&lt;br /&gt;
: Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] Ihrer [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie eine Instanz von [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]] bereit.&lt;br /&gt;
&lt;br /&gt;
: Die TTetheringAppProfile-Komponente enthält eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteProfileResources|GetRemoteProfileResources]], die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.&lt;br /&gt;
&lt;br /&gt;
===Verarbeiten von eingehenden Remote-Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Die TTetheringAppProfile-Komponente kann Remote-Ressourcen aus einem der folgenden Gründe erhalten:&lt;br /&gt;
&lt;br /&gt;
* Ein Remote-Anwendungsprofil sendet eine temporäre Ressource.&lt;br /&gt;
* Sie fordern eine Remote-Ressource an.&lt;br /&gt;
&lt;br /&gt;
Wenn die TTetheringAppProfile-Komponente eine Ressource empfängt, werden zwei Ereignisse der TTetheringAppProfile-Komponente in der folgenden Reihenfolge ausgelöst: OnAcceptResource und OnResourceReceived. Zur Verarbeitung von eingehenden Ressourcen müssen Sie diese Ereignisse behandeln.&lt;br /&gt;
&lt;br /&gt;
:[[Image:OnAcceptResource Image.png]]&lt;br /&gt;
&lt;br /&gt;
====Annehmen oder Ablehnen einer eingehenden Remote-Ressource====&lt;br /&gt;
&lt;br /&gt;
Sie können [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnAcceptResource|OnAcceptResource]] behandeln, um festzulegen, ob Sie eine eingehende Ressource akzeptieren oder nicht. Dieses Ereignis stellt die folgenden Parameter bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|Sender}} ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.&lt;br /&gt;
* {{Arg|AProfileId}} ist der [[lib_de:System.Tether.Manager.TTetheringProfileInfo.ProfileIdentifier|ProfileIdentifier]] des Remote-Anwendungsprofils, das die Ressource sendet. Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] der [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem mit der angegebenen Profil-ID übereinstimmenden Remote-Anwendungsprofil durchsuchen.&lt;br /&gt;
* {{Arg|AResource}} ist eine Instanz von [[lib_de:System.Tether.AppProfile.TCustomRemoteItem|TCustomRemoteItem]], die Eigenschaften enthält, die Sie lesen können, um festzulegen, ob Sie die eingehende Remote-Ressource annehmen oder nicht, z.&amp;amp;nbsp;B. den [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Name|Namen]] der Ressource oder einen [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Hint|Hinweis]], der deren Inhalt beschreibt.&lt;br /&gt;
* {{Arg|AcceptResource}} ist ein boolescher Wert, der standardmäßig auf {{True}} gesetzt ist. Sie können diesen Wert in {{False}} ändern, wenn Sie die eingehende Ressource nicht empfangen möchten.&lt;br /&gt;
&lt;br /&gt;
====Lesen einer eingehenden Remote-Ressource====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das Ereignis OnAcceptResource nicht behandeln oder in Ihrer Ereignisbehandlungsroutine den Wert von {{Arg|AcceptResource}} nicht in {{False}} ändern, wird das Ereignis [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnResourceReceived|OnResourceReceived]] ausgelöst. Sie können dieses Ereignis behandeln, um die Daten aus der Ressource zu lesen. Dieses Ereignis stellt die folgenden Parameter bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|Sender}} ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.&lt;br /&gt;
* {{Arg|AResource}} ist eine Instanz von [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]]. TRemoteResource erweitert TCustomRemoteItem um zwei Eigenschaften, über die Sie auf den tatsächlichen Wert der Ressource zugreifen können:&lt;br /&gt;
** [[lib_de:System.Tether.AppProfile.TRemoteResource.ResType|TRemoteResource.ResType]] gibt an, ob die Ressource einen Standarddatentyp (TRemoteResourceType.Data) oder einen TStream (TRemoteResourceType.Stream) enthält.&lt;br /&gt;
** Mit [[lib_de:System.Tether.AppProfile.TRemoteResource.Value|TRemoteResource.Value]] können Sie auf den Wert zugreifen. So rufen Sie den Wert ab:&lt;br /&gt;
*** Wenn der Wert ein Standarddatentyp ist, überprüfen Sie [[lib_de:System.Tether.AppProfile.TResourceValue.DataType|TRemoteResource.Value.DataType]], um den Typ der Daten zu ermitteln, und lesen Sie die entsprechende TRemoteResource.Value-Eigenschaft: AsBoolean, AsInteger, AsInt64, AsSingle, AsDouble, AsString.&lt;br /&gt;
*** Wenn der Wert ein Stream ist, lesen Sie den Stream aus TRemoteResource.Value.AsStream.&lt;br /&gt;
&lt;br /&gt;
===Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten===&lt;br /&gt;
&lt;br /&gt;
Wenn Ihre Anwendung mit einer Anwendung verbunden ist, die Ressourcen teilt, können Sie diese geteilten Ressourcen abonnieren, um Aktualisierungen zu erhalten, sodass Ihre Anwendung diese geteilten Ressourcen erhält, sobald sich deren Wert in der verbundenen Anwendung ändert.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering#Verbinden von Anwendungen über Gruppen|mit Gruppen Verbindungen zu anderen Anwendungen herstellen]], können Sie [[#Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen|beim Entwurf die Remote-Ressourcen zu lokalen Ressourcen zuordnen]]. Diese lokalen Ressourcen verfügen ein Ereignis, mit dem Sie die Änderungen des Wertes der Remote-Ressource behandeln können.&lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie [[#Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem|die Remote-Ressourcen zur Laufzeit über ihren Ressourcennamen abonnieren]].&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie dürfen eine Remote-Ressource nicht gleichzeitig mit einer lokalen Ressource und SubscribeToRemoteItem abonnieren. Verwenden Sie für jede Remote-Ressource nur eine dieser Abonnementmethoden.&lt;br /&gt;
&lt;br /&gt;
====Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen====&lt;br /&gt;
&lt;br /&gt;
So ordnen Sie beim Entwurf eine lokale Ressource einer Remote-Ressource zu:&lt;br /&gt;
&lt;br /&gt;
# Befolgen Sie die obigen Schritte, um eine Ressource zu erstellen und mithilfe von App-Tethering zu teilen.&lt;br /&gt;
# Wählen Sie im Ressourcenlisten-Editor Ihre neue [[lib_de:System.Tether.AppProfile.TLocalResource|TLocalResource]] aus, und ändern Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; deren Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Kind|Kind]] in [[lib_de:System.Tether.AppProfile.TTetheringRemoteKind|Mirror]].&lt;br /&gt;
&lt;br /&gt;
:[[Image: TLocalResource Kind Property.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Eigenschaft Kind Ihrer TLocalResource in Mirror ändern, wird Ihre TLocalResource nicht mit Remote-Anwendungen geteilt. Sondern bei jeder Änderung des Wertes einer Remote-Ressource mit demselben [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Name|Namen]] wie der Name, den Sie in Ihrer TLocalResource angegeben haben, wird der Wert Ihrer lokalen Ressource aktualisiert und das Ereignis [[lib_de:System.Tether.AppProfile.TLocalResource.OnResourceReceived|TLocalResource.OnResourceReceived]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
====Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem====&lt;br /&gt;
&lt;br /&gt;
Die TTetheringAppProfile-Komponente stellt eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SubscribeToRemoteItem|SubscribeToRemoteItem]], bereit, mit der Sie Remote-Ressourcen abonnieren können, um Aktualisierungen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Sie können eine Remote-Ressource zum Abonnieren mit einer der folgenden Parametergruppen festlegen:&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]] und den Namen der Remote-Ressource enthält.&lt;br /&gt;
&lt;br /&gt;
: Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] Ihrer [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von TTetheringProfileInfo und eine Instanz von [[lib_de:System.Tether.AppProfile.TCustomRemoteItem|TCustomRemoteItem]] enthält.&lt;br /&gt;
&lt;br /&gt;
: Die [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente enthält eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteProfileActions|GetRemoteProfileActions]], die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.&lt;br /&gt;
&lt;br /&gt;
Ändert sich der Wert einer Remote-Ressource mit demselben Namen wie die Instanz von TCustomRemoteItem, die Sie abonniert haben, wird der Wert der abonnierten Instanz von TCustomRemoteItem aktualisiert und das Ereignis [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnResourceUpdated|OnResourceUpdated]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
:* Um den Wert der abonnierten Instanz von TCustomRemoteItem zu lesen, müssen Sie den Typ dieser Instanz in [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]] umwandeln und deren Daten lesen. Siehe [[#Lesen einer eingehenden Remote-Ressource|Lesen einer eingehenden Remote-Ressource]].&lt;br /&gt;
:* Ändert sich eine Remote-Ressource, die einen Stream enthält, wird das Ereignis OnResourceUpdated ausgelöst, aber der Wert der abonnierten Instanz von TCustomRemoteItem wird nicht aktualisiert. Sie müssen den neuen Ressourcenwert manuell anfordern. Siehe [[#Anfordern von Remote-Ressourcen|Anfordern von Remote-Ressourcen]].&lt;br /&gt;
:* Das Ereignis OnResourceUpdated wird nicht ausgelöst, wenn Sie dieselbe Remote-Ressource mit einer lokalen Ressource abonnieren.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Hinzufügen von App-Tethering zu Anwendungen|Hinzufügen von App-Tethering zu Anwendungen]]&lt;br /&gt;
* [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering|Verbinden zu Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
* [[Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering|Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]	&lt;br /&gt;
* [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]&lt;br /&gt;
* [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Classes.TStream|TStream]]&lt;br /&gt;
* [[lib_de:System.String|String]]&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:RTL.BDShoppingList Sample|BDShoppingList]] (Beispiel)&lt;br /&gt;
* [[samp_en:RTL.DesktopCast Sample|DesktopCast]] (Beispiel)	&lt;br /&gt;
* [[samp_en:RTL.MediaPlayer Sample|MediaPlayer]] (Beispiel)	&lt;br /&gt;
* [[samp_en:RTL.PhotoWall Sample|PhotoWall]] (Beispiel)&lt;br /&gt;
&lt;br /&gt;
[[Category:XE6]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Teilen_von_Daten_mit_Remote-Anwendungen_mithilfe_von_App-Tethering&amp;diff=208944</id>
		<title>Teilen von Daten mit Remote-Anwendungen mithilfe von App-Tethering</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Teilen_von_Daten_mit_Remote-Anwendungen_mithilfe_von_App-Tethering&amp;diff=208944"/>
		<updated>2016-07-01T07:41:25Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Internal review. LOC-22647&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Verwenden von App-Tethering}}&lt;br /&gt;
&lt;br /&gt;
Die App-Tethering-Implementierung der [[RTL|RTL]] stellt die Unterstützung für das Teilen von Daten zwischen verbundenen Anwendungen bereit.&lt;br /&gt;
&lt;br /&gt;
==Senden von Daten an verbundene Anwendungen==&lt;br /&gt;
&lt;br /&gt;
Sie können mit den folgenden Verfahren Daten mithilfe von App-Tethering senden:&lt;br /&gt;
&lt;br /&gt;
* [[#Teilen von Ressourcen|Definieren von geteilten Ressourcen]]. Ein Ressource enthält einen Wert. Verbundene Anwendungen können den Wert einer geteilten Ressource lesen und eine geteilte Ressource abonnieren, um bei Änderungen des Werts der geteilten Ressource Aktualisierungen zu erhalten.&lt;br /&gt;
* [[#Senden von Daten als temporäre Ressource|Senden von Daten als temporäre Ressource]]. Sie können zur Laufzeit Strings und Streams senden, die verbundene Anwendungen als temporäre Ressourcen empfangen. Verbundene Anwendungen können keine temporären Ressourcen für Aktualisierungen empfangen, weil Ihre Anwendung temporäre Ressourcen nur einmal sendet.&lt;br /&gt;
&lt;br /&gt;
===Teilen von Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Eine [[lib_de:System.Tether.AppProfile.TLocalResource|TLocalResource]] ist ein Wrapper für einen Standarddatentyp ([[lib_de:System.Boolean|Boolean]], [[lib_de:System.Integer|Integer]], [[lib_de:System.Int64|Int64]], [[lib_de:System.Single|Single]], [[lib_de:System.Double|Double]], [[lib_de:System.String|String]]) oder einen [[lib_de:System.Classes.TStream|TStream]]. Sie können Ressourcen mit verbundenen Anwendungen mithilfe von App-Tethering teilen.&lt;br /&gt;
&lt;br /&gt;
So erstellen und teilen Sie eine Ressource:&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie im &#039;&#039;&#039;[[Formular-Designer|Formular-Designer]]&#039;&#039;&#039; Ihre [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente aus, und doppelklicken Sie im &#039;&#039;&#039;[[Objektinspektor|Objektinspektor]]&#039;&#039;&#039; auf die Eigenschaft [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.Resources|Resources]].&lt;br /&gt;
#  Klicken Sie im angezeigten [[Aktionslisten-Editor|Listen-Editor]] auf [[File:New.png|Neu]], um der Liste eine neue TLocalResource hinzuzufügen.&lt;br /&gt;
# Wählen Sie im Listen-Editor Ihre neue TLocalResource aus, und geben Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; für deren Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Name|Name]] einen eindeutigen Namen an.&lt;br /&gt;
&lt;br /&gt;
:[[Image:TLocalResource Editing.png]] &lt;br /&gt;
&lt;br /&gt;
Ihre Ressource wird jetzt per App-Tethering geteilt. Verbundene Anwendungen können den Wert dieser Ressource lesen und die Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts in Ihren Anwendungen verbundene Anwendungen über die Änderung benachrichtigt werden und den neuen Wert lesen können.&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie Ihre Ressource beim Entwurf definiert haben, müssen Sie ihr zur Laufzeit einen Wert zuweisen:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In {{Delphi}}:&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1.Resources.FindByName(&#039;ResourceName&#039;).Value := &#039;SomeValue&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1.Resources.Items[ResourceNumber].Value := &#039;SomeValue&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In C++: &lt;br /&gt;
**&amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1-&amp;gt;Resources-&amp;gt;FindByName(&amp;quot;ResourceName&amp;quot;)-&amp;gt;Value = &amp;quot;SomeValue&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
**&amp;lt;source lang=&amp;quot;cpp&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;TetheringAppProfile1-&amp;gt;Resources-&amp;gt;Items[ResourceNumber]-&amp;gt;Value = &amp;quot;SomeValue&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Beschreibung:&lt;br /&gt;
:* {{Code|ResourceName}} ist der Name, den Sie in die Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Name|Name]] der Ressource eingeben, wenn Sie sie zur Laufzeit erstellen.&lt;br /&gt;
:* {{Code|SomeValue}} ist der Wert, den Sie für die Ressource festlegen möchten. Dieser Wert kann einen der oben aufgeführten Standarddatentypen haben.&lt;br /&gt;
:* {{Code|ResourceNumber}} ist die Anzahl der Einträge in der Eigenschaft [[lib_de:System.Tether.AppProfile.TResourceCollection.Items|Items]] der [[lib_de:System.Tether.AppProfile.TResourceCollection|TResourceCollection]], wenn Sie sie in Entwurfszeit erstellen.&lt;br /&gt;
&lt;br /&gt;
Verbundene Anwendungen können jederzeit den Wert Ihrer geteilten Ressource anfordern und die geteilte Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts die abonnierten Remote-Anwendungsprofile die aktualisierte Ressource erhalten.&lt;br /&gt;
&lt;br /&gt;
===Senden von Daten als temporäre Ressource===&lt;br /&gt;
&lt;br /&gt;
Anstatt Ressourcen zu teilen, können Sie mit den Methoden [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SendString|SendString]] und [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SendStream|SendStream]] der [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente Strings oder Streams an verbundene Anwendungen senden.&lt;br /&gt;
&lt;br /&gt;
Remote-Anwendungsprofile empfangen den Wert, der in einer temporären Ressource enthalten ist. Eine temporäre Ressource wird von Ihrem Anwendungsprofil nur einmal an verbundene Anwendungen gesendet. Diese temporäre Ressource wird anschließend gelöscht; verbundene Anwendungen können diese Ressource nicht abonnieren, um Aktualisierungen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Diese Methode erwartet die folgenden Parameter:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|AProfile}} ist ein Remote-Anwendungsprofil als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]]. Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] der [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem gewünschten Remote-Anwendungsprofil durchsuchen.&lt;br /&gt;
* {{Arg|Description}} ist ein String, der den Inhalt des gesendeten Wertes beschreibt.&lt;br /&gt;
* {{Arg|AString}} oder {{Arg|AStream}} ist der Wert, der gesendet werden soll.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit temporären Ressourcen andere Standarddatentypen als String senden möchten, müssen Sie diese Datentypen vor dem Senden in Strings konvertieren und dann in der verbundenen Anwendung, die den String empfängt, wieder zurück in ihren Originaltyp konvertieren. Siehe [[JSON|JSON]].&lt;br /&gt;
&lt;br /&gt;
==Empfangen von Daten von verbundenen Anwendungen==&lt;br /&gt;
&lt;br /&gt;
Ihre Anwendung kann eine Ressource erhalten, enweder weil das [[#Senden von Daten an verbundene Anwendungen|Remote-Anwendungsprofil es sendet]], oder weil Sie [[#Anfordern von Remote-Ressourcen|es anfordern]]. Sie können [[#Verarbeiten von eingehenden Remote-Ressourcen|jede eingehende Remote-Ressource mit Ihrer TTetheringAppProfile-Komponente verarbeiten]].&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus können Sie [[#Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten|eine Remote-Ressource abonnieren, um Aktualisierungen zu erhalten]]. Wenn sich der Wert der Remote-Ressource ändert, wird Ihre Anwendung über die Änderung informiert und empfängt den neuen Wert der Remote-Ressource. Wenn Sie [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering#Verbinden von Anwendungen über Gruppen|die Verbindung zu Remote-Anwendungen über Gruppen herstellen]], können Sie alternativ [[#Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen|mit lokalen Ressourcen Remote-Ressourcen abonnieren]] und separate Methoden definieren, um Aktualisierungen jeder einzelnen der abonnierten Remote-Ressourcen zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
===Anfordern von Remote-Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Die [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente stellt eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteResourceValue|GetRemoteResourceValue]], bereit, mit der Sie Remote-Ressourcen anfordern können.&lt;br /&gt;
&lt;br /&gt;
Sie können eine Remote-Ressource für die Anforderung mit einer der folgenden Parametergruppen festlegen:&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]] und den Namen der Remote-Ressource enthält.&lt;br /&gt;
&lt;br /&gt;
: Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] Ihrer [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie eine Instanz von [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]] bereit.&lt;br /&gt;
&lt;br /&gt;
: Die TTetheringAppProfile-Komponente enthält eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteProfileResources|GetRemoteProfileResources]], die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.&lt;br /&gt;
&lt;br /&gt;
===Verarbeiten von eingehenden Remote-Ressourcen===&lt;br /&gt;
&lt;br /&gt;
Die TTetheringAppProfile-Komponente kann Remote-Ressourcen aus einem der folgenden Gründe erhalten:&lt;br /&gt;
&lt;br /&gt;
* Ein Remote-Anwendungsprofil sendet eine temporäre Ressource.&lt;br /&gt;
* Sie fordern eine Remote-Ressource an.&lt;br /&gt;
&lt;br /&gt;
Wenn die TTetheringAppProfile-Komponente eine Ressource empfängt, werden zwei Ereignisse der TTetheringAppProfile-Komponente in der folgenden Reihenfolge ausgelöst: OnAcceptResource und OnResourceReceived. Zur Verarbeitung von eingehenden Ressourcen müssen Sie diese Ereignisse behandeln.&lt;br /&gt;
&lt;br /&gt;
:[[Image:OnAcceptResource Image.png]]&lt;br /&gt;
&lt;br /&gt;
====Annehmen oder Ablehnen einer eingehenden Remote-Ressource====&lt;br /&gt;
&lt;br /&gt;
Sie können [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnAcceptResource|OnAcceptResource]] behandeln, um festzulegen, ob Sie eine eingehende Ressource akzeptieren oder nicht. Dieses Ereignis stellt die folgenden Parameter bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|Sender}} ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.&lt;br /&gt;
* {{Arg|AProfileId}} ist der [[lib_de:System.Tether.Manager.TTetheringProfileInfo.ProfileIdentifier|ProfileIdentifier]] des Remote-Anwendungsprofils, das die Ressource sendet. Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] der [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem mit der angegebenen Profil-ID übereinstimmenden Remote-Anwendungsprofil durchsuchen.&lt;br /&gt;
* {{Arg|AResource}} ist eine Instanz von [[lib_de:System.Tether.AppProfile.TCustomRemoteItem|TCustomRemoteItem]], die Eigenschaften enthält, die Sie lesen können, um festzulegen, ob Sie die eingehende Remote-Ressource annehmen oder nicht, z.&amp;amp;nbsp;B. den [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Name|Namen]] der Ressource oder einen [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Hint|Hinweis]], der deren Inhalt beschreibt.&lt;br /&gt;
* {{Arg|AcceptResource}} ist ein boolescher Wert, der standardmäßig auf {{True}} gesetzt ist. Sie können diesen Wert in {{False}} ändern, wenn Sie die eingehende Ressource nicht empfangen möchten.&lt;br /&gt;
&lt;br /&gt;
====Lesen einer eingehenden Remote-Ressource====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das Ereignis OnAcceptResource nicht behandeln oder in Ihrer Ereignisbehandlungsroutine den Wert von {{Arg|AcceptResource}} nicht in {{False}} ändern, wird das Ereignis [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnResourceReceived|OnResourceReceived]] ausgelöst. Sie können dieses Ereignis behandeln, um die Daten aus der Ressource zu lesen. Dieses Ereignis stellt die folgenden Parameter bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Arg|Sender}} ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.&lt;br /&gt;
* {{Arg|AResource}} ist eine Instanz von [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]]. TRemoteResource erweitert TCustomRemoteItem um zwei Eigenschaften, über die Sie auf den tatsächlichen Wert der Ressource zugreifen können:&lt;br /&gt;
** [[lib_de:System.Tether.AppProfile.TRemoteResource.ResType|TRemoteResource.ResType]] gibt an, ob die Ressource einen Standarddatentyp (TRemoteResourceType.Data) oder einen TStream (TRemoteResourceType.Stream) enthält.&lt;br /&gt;
** Mit [[lib_de:System.Tether.AppProfile.TRemoteResource.Value|TRemoteResource.Value]] können Sie auf den Wert zugreifen. So rufen Sie den Wert ab:&lt;br /&gt;
*** Wenn der Wert ein Standarddatentyp ist, überprüfen Sie [[lib_de:System.Tether.AppProfile.TResourceValue.DataType|TRemoteResource.Value.DataType]], um den Typ der Daten zu ermitteln, und lesen Sie die entsprechende TRemoteResource.Value-Eigenschaft: AsBoolean, AsInteger, AsInt64, AsSingle, AsDouble, AsString.&lt;br /&gt;
*** Wenn der Wert ein Stream ist, lesen Sie den Stream aus TRemoteResource.Value.AsStream.&lt;br /&gt;
&lt;br /&gt;
===Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten===&lt;br /&gt;
&lt;br /&gt;
Wenn Ihre Anwendung mit einer Anwendung verbunden ist, die Ressourcen teilt, können Sie diese geteilten Ressourcen abonnieren, um Aktualisierungen zu erhalten, sodass Ihre Anwendung diese geteilten Ressourcen erhält, sobald sich deren Wert in der verbundenen Anwendung ändert.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering#Verbinden von Anwendungen über Gruppen|mit Gruppen Verbindungen zu anderen Anwendungen herstellen]], können Sie [[#Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen|beim Entwurf die Remote-Ressourcen zu lokalen Ressourcen zuordnen]]. Diese lokalen Ressourcen verfügen ein Ereignis, mit dem Sie die Änderungen des Wertes der Remote-Ressource behandeln können.&lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie [[#Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem|die Remote-Ressourcen zur Laufzeit über ihren Ressourcennamen abonnieren]].&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie dürfen eine Remote-Ressource nicht gleichzeitig mit einer lokalen Ressource und SubscribeToRemoteItem abonnieren. Verwenden Sie für jede Remote-Ressource nur eine dieser Abonnementmethoden.&lt;br /&gt;
&lt;br /&gt;
====Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen====&lt;br /&gt;
&lt;br /&gt;
So ordnen Sie beim Entwurf eine lokale Ressource einer Remote-Ressource zu:&lt;br /&gt;
&lt;br /&gt;
# Befolgen Sie die obigen Schritte, um eine Ressource zu erstellen und mithilfe von App-Tethering zu teilen.&lt;br /&gt;
# Wählen Sie im Ressourcenlisten-Editor Ihre neue [[lib_de:System.Tether.AppProfile.TLocalResource|TLocalResource]] aus, und ändern Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; deren Eigenschaft [[lib_de:System.Tether.AppProfile.TCustomLocalItem.Kind|Kind]] in [[lib_de:System.Tether.AppProfile.TTetheringRemoteKind|Mirror]].&lt;br /&gt;
&lt;br /&gt;
:[[Image: TLocalResource Kind Property.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Eigenschaft Kind Ihrer TLocalResource in Mirror ändern, wird Ihre TLocalResource nicht mit Remote-Anwendungen geteilt. Sondern bei jeder Änderung des Wertes einer Remote-Ressource mit demselben [[lib_de:System.Tether.AppProfile.TCustomRemoteItem.Name|Namen]] wie der Name, den Sie in Ihrer TLocalResource angegeben haben, wird der Wert Ihrer lokalen Ressource aktualisiert und das Ereignis [[lib_de:System.Tether.AppProfile.TLocalResource.OnResourceReceived|TLocalResource.OnResourceReceived]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
====Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem====&lt;br /&gt;
&lt;br /&gt;
Die TTetheringAppProfile-Komponente stellt eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.SubscribeToRemoteItem|SubscribeToRemoteItem]], bereit, mit der Sie Remote-Ressourcen abonnieren können, um Aktualisierungen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Sie können eine Remote-Ressource zum Abonnieren mit einer der folgenden Parametergruppen festlegen:&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]] und den Namen der Remote-Ressource enthält.&lt;br /&gt;
&lt;br /&gt;
: Die Eigenschaft [[lib_de:System.Tether.Manager.TTetheringManager.RemoteProfiles|RemoteProfiles]] Ihrer [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von TTetheringProfileInfo und eine Instanz von [[lib_de:System.Tether.AppProfile.TCustomRemoteItem|TCustomRemoteItem]] enthält.&lt;br /&gt;
&lt;br /&gt;
: Die [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]-Komponente enthält eine Methode, [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.GetRemoteProfileActions|GetRemoteProfileActions]], die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.&lt;br /&gt;
&lt;br /&gt;
Ändert sich der Wert einer Remote-Ressource mit demselben Namen wie die Instanz von TCustomRemoteItem, die Sie abonniert haben, wird der Wert der abonnierten Instanz von TCustomRemoteItem aktualisiert und das Ereignis [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.OnResourceUpdated|OnResourceUpdated]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
:* Um den Wert der abonnierten Instanz von TCustomRemoteItem zu lesen, müssen Sie den Typ dieser Instanz in [[lib_de:System.Tether.AppProfile.TRemoteResource|TRemoteResource]] umwandeln und deren Daten lesen. Siehe [[#Lesen einer eingehenden Remote-Ressource|Lesen einer eingehenden Remote-Ressource]].&lt;br /&gt;
:* Ändert sich eine Remote-Ressource, die einen Stream enthält, wird das Ereignis OnResourceUpdated ausgelöst, aber der Wert der abonnierten Instanz von TCustomRemoteItem wird nicht aktualisiert. Sie müssen den neuen Ressourcenwert manuell anfordern. Siehe [[#Anfordern von Remote-Ressourcen|Anfordern von Remote-Ressourcen]].&lt;br /&gt;
:* Das Ereignis OnResourceUpdated wird nicht ausgelöst, wenn Sie dieselbe Remote-Ressource mit einer lokalen Ressource abonnieren.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Hinzufügen von App-Tethering zu Anwendungen|Hinzufügen von App-Tethering zu Anwendungen]]&lt;br /&gt;
* [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering|Verbinden zu Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
* [[Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering|Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]]	&lt;br /&gt;
* [[lib_de:System.Tether.Manager.TTetheringManager|TTetheringManager]]&lt;br /&gt;
* [[lib_de:System.Tether.Manager.TTetheringProfileInfo|TTetheringProfileInfo]]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Classes.TStream|TStream]]&lt;br /&gt;
* [[lib_de:System.String|String]]&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:RTL.BDShoppingList Sample|BDShoppingList]] (Beispiel)&lt;br /&gt;
* [[samp_en:RTL.DesktopCast Sample|DesktopCast]] (Beispiel)	&lt;br /&gt;
* [[samp_en:RTL.MediaPlayer Sample|MediaPlayer]] (Beispiel)	&lt;br /&gt;
* [[samp_en:RTL.PhotoWall Sample|PhotoWall]] (Beispiel)&lt;br /&gt;
&lt;br /&gt;
[[Category:XE6]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Interne_Datenformate_(Delphi)&amp;diff=208941</id>
		<title>Interne Datenformate (Delphi)</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Interne_Datenformate_(Delphi)&amp;diff=208941"/>
		<updated>2016-06-30T08:02:41Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: 1 Version: Internal review. LOC-22606&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
{{Parent|Speicherverwaltung auf der Win32-Plattform - Index}}&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Integer&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Type&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;integer&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;type&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Shortint&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Byte&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Smallint&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Word&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Longint&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;LongWord&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Int64&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Char&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;AnsiChar&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Char&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;WideChar&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Boolean&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;WordBool&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;LongBool&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;ByteBool&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;{$Z1}&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;{$Z2}&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;{$Z4}&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;+&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;-&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Real&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Enumerated&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;/&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;+/-&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Real48&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Inf&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;NaN&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Extended&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Double&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Single&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Comp&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Currency&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Currency&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Pointer&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;ShortString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;LongString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;AnsiString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;WideString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;nil&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Set&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Min&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Max&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Static Array&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;System Array&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Dynamic Array&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Record&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;packed&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Ordinal&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Real&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Short&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Array&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;UserData&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;RecSize&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Private&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;BufPtr&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;BufSize&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;BufPos&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;BufEnd&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Openfunc&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;InOutFunc&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;FlushFunc&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;CloseFunc&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Procedural&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Class&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;System.MulticastDelegate&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;System.Reflection&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Pointer&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Class Reference&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Class-Reference&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Variant&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;System&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;TVarData&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;VType&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varTypeMask&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varArray&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varByRef&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Reserved1&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Reserved2&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Reserved3&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varOleStr&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
In den folgenden Themen werden die internen Datenformate von {{Delphi}}-Datentypen beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Integertypen==&lt;br /&gt;
&lt;br /&gt;
Integerwerte haben in {{Delphi}} die folgende interne Darstellung.&lt;br /&gt;
&lt;br /&gt;
===Plattformunabhängige vorzeichenlose Integertypen===&lt;br /&gt;
&lt;br /&gt;
Werte von plattformunabhängigen Integertypen belegen auf jeder Plattform dieselbe Bitanzahl. &lt;br /&gt;
&lt;br /&gt;
Werte von vorzeichenlosen Integertypen sind immer positiv und haben kein &#039;&#039;&#039;Vorzeichenbit&#039;&#039;&#039; wie Integertypen mit Vorzeichen. Alle Bits von vorzeichenlosen Integertypen belegen die Größe des Wertes und haben keine andere Bedeutung.&lt;br /&gt;
&lt;br /&gt;
====Byte, UInt8====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Byte|Byte]] und [[lib_de:System.UInt8|UInt8]] sind 1 Byte (8 Bit) große vorzeichenlose positive Integerzahlen. Die &#039;&#039;&#039;Größe&#039;&#039;&#039; belegt alle 8 Bit.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerUnsigned8.png|Integer, 8 Bit ohne Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====Word und UInt16====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Word|Word]] und [[lib_de:System.UInt16|UInt16]] sind 2 Byte (16 Bit) große vorzeichenlose Integerzahlen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerUnsigned16.png|Integer, 16 Bit ohne Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====FixedUInt, Cardinal und UInt32====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.FixedUInt|FixedUInt]], [[lib_de:System.Cardinal|Cardinal]] und [[lib_de:System.UInt32|UInt32]] sind 4 Byte (32 Bit) große vorzeichenlose Integerzahlen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerUnsigned32.png|Integer, 32 Bit ohne Vorzeichen]]&lt;br /&gt;
&lt;br /&gt;
====UInt64====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.UInt64|UInt64]] sind 8 Byte (64 Bit) große vorzeichenlose Integerzahlen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerUnsigned64.png|Integer, 64 Bit ohne Vorzeichen]]&lt;br /&gt;
&lt;br /&gt;
===Plattformunabhängige Integertypen mit Vorzeichen===&lt;br /&gt;
&lt;br /&gt;
Werte von Integertypen mit Vorzeichen stellen das Vorzeichen einer Zahl durch ein führendes &#039;&#039;Vorzeichenbit&#039;&#039; dar, ausgedrückt durch das höchstwertige Bit. Das Vorzeichenbit ist für positive Zahlen 0 und für negative Zahlen 1. Die anderen Bits in einer positiven Integerzahl mit Vorzeichen werden von der Größe belegt. In einer negativen Integerzahl mit Vorzeichen werden die anderen Bits durch die &#039;&#039;2er-Komplement&#039;&#039;-Darstellung der Größe des Wertes (absoluter Wert) belegt. &lt;br /&gt;
&lt;br /&gt;
So ermitteln Sie das 2er-Komplement für eine Größe:&lt;br /&gt;
&lt;br /&gt;
# Suchen Sie beginnend von rechts die erste &amp;quot;1&amp;quot;.&lt;br /&gt;
# Invertieren Sie alle Bits links davon.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Beispiel 1&lt;br /&gt;
! Beispiel 2&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Größe&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;01010&#039;&#039;&#039;1&#039;&#039;&#039;0&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;101010&#039;&#039;&#039;1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;2er-Komplement&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;&#039;10101&#039;&#039;&#039;10&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;&#039;010101&#039;&#039;&#039;1&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====ShortInt, Int8====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Shortint|Shortint]] und [[lib_de:System.Int8|Int8]] sind 1 Byte (8 Bit) große Integerzahlen mit Vorzeichen. Das &#039;&#039;&#039;Vorzeichenbit&#039;&#039;&#039; belegt das höchstwertige siebte Bit, die &#039;&#039;&#039;Größe&#039;&#039;&#039; oder das &#039;&#039;&#039;2er-Komplement&#039;&#039;&#039; belegt die anderen 7 Bit.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerSignPositive8.png|Integer, 8 Bit positiv mit Vorzeichen]] &lt;br /&gt;
: [[Image:IntegerSignNegative8.png|Integer, 8 Bit negativ mit Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====SmallInt und Int16====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Smallint|SmallInt]] und [[lib_de:System.Int16|Int16]] sind 2 Byte (16 Bit) große Integerzahlen mit Vorzeichen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerSignPositive16.png|Integer, 16 Bit positiv mit Vorzeichen]] &lt;br /&gt;
: [[Image:IntegerSignNegative16.png|Integer, 16 Bit negativ mit Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====FixedInt, Integer und Int32====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.FixedInt|FixedInt]], [[lib_de:System.Integer|Integer]] und [[lib_de:System.Int32|Int32]] sind 4 Byte (32 Bit) große Integerzahlen mit Vorzeichen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerSignPositive32.png|Integer, 32 Bit positiv mit Vorzeichen]] &lt;br /&gt;
: [[Image:IntegerSignNegative32.png|Integer, 32 Bit negativ mit Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====Int64====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Int64|Int64]] sind 8 Byte (64 Bit) große Integerzahlen mit Vorzeichen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerSignPositive64.png|Integer, 64 Bit positiv mit Vorzeichen]] &lt;br /&gt;
: [[Image:IntegerSignNegative64.png|Integer, 64 Bit negativ mit Vorzeichen]]&lt;br /&gt;
&lt;br /&gt;
===Plattformabhängige Integertypen===&lt;br /&gt;
&lt;br /&gt;
Die plattformabhängigen Integertypen werden konvertiert, damit sie zu der Bitgröße der aktuellen Zielplattform passen. Auf 64-Bit-Plattformen belegen Sie 64 Bit, auf 32-Bit-Plattformen 32 Bit (mit Ausnahme der Typen [[lib_de:System.Longint|LongInt]] und [[lib_de:System.LongWord|LongWord]]). &lt;br /&gt;
Wenn die Größe der Zielplattform und die Größe der CPU-Plattform identisch sind, dann stimmt eine plattformabhängige Integerzahl exakt mit der Größe der CPU-Register überein. Diese Typen werden häufig verwendet, wenn eine bestmögliche Leistung für einen bestimmten CPU-Typ und ein bestimmtes Betriebssystem erwünscht ist. &lt;br /&gt;
&lt;br /&gt;
====Vorzeichenloser NativeUInt-Integer====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.NativeUInt|NativeUInt]] ist der plattformabhängige vorzeichenlose Integertyp. Die Größe und interne Darstellung von [[lib_de:System.NativeUInt|NativeUInt]] hängen von der aktuellen Plattform ab. Auf 32-Bit-Plattformen entspricht [[lib_de:System.NativeUInt|NativeUInt]] dem Typ [[lib_de:System.Cardinal|Cardinal]]. Auf 64-Bit-Plattformen entspricht [[lib_de:System.NativeUInt|NativeUInt]] dem Typ [[lib_de:System.UInt64|UInt64]].&lt;br /&gt;
&lt;br /&gt;
====NativeInt-Integer mit Vorzeichen====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.NativeInt|NativeInt]] ist der plattformabhängige Integertyp mit Vorzeichen. Die Größe und interne Darstellung von [[lib_de:System.NativeInt|NativeInt]] hängen von der aktuellen Plattform ab. Auf 32-Bit-Plattformen entspricht [[lib_de:System.NativeInt|NativeInt]] dem Typ [[lib_de:System.Integer|Integer]]. Auf 64-Bit-Plattformen entspricht [[lib_de:System.NativeInt|NativeInt]] dem Typ [[lib_de:System.Int64|Int64]].&lt;br /&gt;
&lt;br /&gt;
====LongInt und LongWord====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Longint|LongInt]] definiert den Integertyp mit Vorzeichen und [[lib_de:System.LongWord|LongWord]] den Integertyp ohne Vorzeichen.&lt;br /&gt;
Die Größe der plattformabhängigen Integertypen [[lib_de:System.Longint|LongInt]] und [[lib_de:System.LongWord|LongWord]] ist auf jeder Plattform anders, mit Ausnahme von 64-Bit-Windows; hier bleibt die Größe unverändert (32 Bit).&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |Größe&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;32-Bit-Plattformen und 64-Bit-Windows-Plattformen&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;64-Bit-iOS-Plattformen&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;LongInt&#039;&#039;&#039;&lt;br /&gt;
|32 Bit (4 Byte)&lt;br /&gt;
|64 Bit (8 Byte)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;LongWord&#039;&#039;&#039;&lt;br /&gt;
|32 Bit (4 Byte)&lt;br /&gt;
|64 Bit (8 Byte)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
 Zu 32-Bit-Plattformen gehören in {{Product}} 32-Bit-Windows, OSX32, 32-Bit-iOS und Android.&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie auf &#039;&#039;&#039;64-Bit-iOS-Plattformen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:* &#039;&#039;&#039;[[lib_de:System.Integer|Integer]]&#039;&#039;&#039; oder &#039;&#039;&#039;[[lib_de:System.FixedInt|FixedInt]]&#039;&#039;&#039; statt [[lib_de:System.Longint|LongInt]], wenn Sie den 32-Bit-Integertyp mit Vorzeichen verwenden möchten.&lt;br /&gt;
:* &#039;&#039;&#039;[[lib_de:System.Cardinal|Cardinal]]&#039;&#039;&#039; oder &#039;&#039;&#039;[[lib_de:System.FixedUInt|FixedUInt]]&#039;&#039;&#039; statt [[lib_de:System.LongWord|LongWord]], wenn Sie den 32-Bit-Integertyp ohne Vorzeichen verwenden möchten.&lt;br /&gt;
&lt;br /&gt;
==Integer-Teilbereichstypen==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit Integerkonstanten die Ober- und Unterbereichsgrenzen von [[Einfache Typen#Teilbereichstypen|Teilbereichstypen]] festlegen, definieren Sie einen &#039;&#039;Integer-Teilbereichstyp&#039;&#039;. Ein Integer-Teilbereich ist eine Untermenge der Werte eines anderen Integertyps (des sogenannten &#039;&#039;Basistyps&#039;&#039;).  Der Basistyp ist der kleinste Integertyp, der den angegebenen Bereich enthält (enthält die Ober- und Unterbereichsgrenzen). &lt;br /&gt;
&lt;br /&gt;
Das interne Datenformat, in dem eine Variable eines Integer-Teilbereichstyps dargestellt werden kann, hängt von den Bereichsgrenzen ab:&lt;br /&gt;
&lt;br /&gt;
* Liegen beide Grenzen im Bereich -128..127 ([[lib_de:System.Shortint|ShortInt]]), wird die Variable als ein Byte mit Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich 0..255 ([[lib_de:System.Byte|Byte]]), wird die Variable als ein Byte ohne Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich -32768..32767 ([[lib_de:System.Smallint|SmallInt]]), wird die Variable als ein Word mit Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich 0..65535 ([[lib_de:System.Word|Word]]), wird die Variable als ein Word ohne Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich -2147483648..2147483647 ([[lib_de:System.FixedInt|FixedInt]] und [[lib_de:System.Longint|LongInt]] auf 32-Bit-Plattformen und 64-Bit-Windows-Plattformen), wird die Variable als ein Double Word mit Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich 0..4294967295 ([[lib_de:System.FixedUInt|FixedUInt]] und [[lib_de:System.LongWord|LongWord]] auf 32-Bit-Plattformen und 64-Bit-Windows-Plattformen), wird die Variable als ein Double Word ohne Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich -2^63..2^63-1 ([[lib_de:System.Int64|Int64]] und [[lib_de:System.Longint|LongInt]] auf 64-Bit-iOS-Plattformen), wird die Variable als Quadruple Word mit Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich 0..2^64-1 ([[lib_de:System.UInt64|UInt64]] und [[lib_de:System.LongWord|LongWord]] auf 64-Bit-iOS-Plattformen), wird die Variable als Quadruple Word ohne Vorzeichen gespeichert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Ein &amp;quot;Word&amp;quot; belegt zwei Byte.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zeichentypen==&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit- und 64-Bit-Plattformen:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Char|Char]] und [[lib_de:System.WideChar|WideChar]] werden als Word-Variable ohne Vorzeichen in der Regel in der Codierung UTF-16 oder Unicode gespeichert.  &lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.AnsiChar|AnsiChar]] wird als Byte ohne Vorzeichen gespeichert. In {{Delphi}} 2007 und früher wurde &#039;&#039;&#039;Char&#039;&#039;&#039; als ein &#039;&#039;&#039;AnsiChar&#039;&#039;&#039; dargestellt. Der Zeichentyp für [[lib_de:System.ShortString|kurze Strings]] ist immer [[lib_de:System.AnsiChar|AnsiChar]]. Er wird in vorzeichenlosen Byte-Werten gespeichert. &lt;br /&gt;
&lt;br /&gt;
* Der Standardtyp für lange Strings (string) ist jetzt [[lib_de:System.UnicodeString|UnicodeString]], dessen Referenzzählung der von [[lib_de:System.AnsiString|AnsiString]] entspricht. AnsiString war früher der Standardtyp für lange Strings. Um die Kompatibilität mit älterem Quelltext aufrechtzuerhalten, könnte die Verwendung des Typs [[lib_de:System.AnsiString|AnsiString]] erforderlich sein. &lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.WideString|WideString]] setzt sich aus [[lib_de:System.WideChar|WideChars]] wie [[lib_de:System.UnicodeString|UnicodeString]] zusammen, verfügt aber über keine Referenzzählung.&lt;br /&gt;
&lt;br /&gt;
==Boolesche Typen==&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Boolean&#039;&#039;&#039;-Typ wird als ein &#039;&#039;&#039;Byte&#039;&#039;&#039;, ein &#039;&#039;&#039;ByteBool&#039;&#039;&#039;-Typ wird als ein &#039;&#039;&#039;Byte&#039;&#039;&#039;, ein &#039;&#039;&#039;WordBool&#039;&#039;&#039;-Typ wird als ein &#039;&#039;&#039;Word&#039;&#039;&#039; und ein &#039;&#039;&#039;LongBool&#039;&#039;&#039;-Typ wird als ein &#039;&#039;&#039;Longint&#039;&#039;&#039; gespeichert.&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Boolean&#039;&#039;&#039;-Typ kann die Werte 0 (&#039;&#039;&#039;False&#039;&#039;&#039;) und 1 (&#039;&#039;&#039;True&#039;&#039;&#039;) annehmen. Die Typen &#039;&#039;&#039;ByteBool&#039;&#039;&#039;, &#039;&#039;&#039;WordBool&#039;&#039;&#039; und &#039;&#039;&#039;LongBool&#039;&#039;&#039; können die Werte 0 (&#039;&#039;&#039;False&#039;&#039;&#039;) oder ungleich 0 (&#039;&#039;&#039;True&#039;&#039;&#039;) annehmen.&lt;br /&gt;
&lt;br /&gt;
==Aufzählungstypen==&lt;br /&gt;
&lt;br /&gt;
Ein Aufzählungstyp wird als ein Byte ohne Vorzeichen gespeichert, wenn die Aufzählung nicht mehr als 256 Werte umfasst und der Typ im Status &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;{$Z1}&amp;lt;/span&amp;gt; (Voreinstellung) deklariert wurde. Enthält der Aufzählungstyp mehr als 256 Werte oder wurde er im Status &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;{$Z2}&amp;lt;/span&amp;gt; deklariert, wird er als ein Word ohne Vorzeichen gespeichert. Wird ein Aufzählungstyp im Status &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;{$Z4}&amp;lt;/span&amp;gt; deklariert, wird er als ein Double Word ohne Vorzeichen gespeichert.&lt;br /&gt;
&lt;br /&gt;
==Reelle Typen==&lt;br /&gt;
&lt;br /&gt;
Reelle Typen speichern die binäre Entsprechung des Vorzeichens (&amp;lt;code&amp;gt;&#039;&#039;&#039;+&#039;&#039;&#039;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;/code&amp;gt;), eines Exponenten und einer &amp;lt;code&amp;gt;&#039;&#039;Mantisse&#039;&#039;&amp;lt;/code&amp;gt;. Ein reeller Wert wird in der folgenden Form dargestellt:&lt;br /&gt;
&lt;br /&gt;
 +/- &#039;&#039;significand&#039;&#039; * 2^&#039;&#039;exponent&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dabei wird für die &amp;lt;code&amp;gt;&#039;&#039;Mantisse&#039;&#039;&amp;lt;/code&amp;gt; links vom binären Dezimalpunkt ein einziges Bit verwendet (das heißt, &amp;lt;code&amp;gt;0 &amp;amp;lt;= &#039;&#039;Mantisse&#039;&#039; &amp;amp;lt; 2&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
In den folgenden Abbildungen befindet sich das höchstwertige Bit immer auf der linken Seite, das niedrigstwertige Bit immer auf der rechten Seite. Die Zahlen am oberen Rand geben die Breite jedes Feldes in Bit an. Die Elemente ganz links werden an den höchsten Adressen gespeichert. Bei einem &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039;-Wert wird beispielsweise &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; im ersten Byte, &amp;lt;code&amp;gt;&#039;&#039;f&#039;&#039;&amp;lt;/code&amp;gt; in den nächsten fünf Byte und &amp;lt;code&amp;gt;&#039;&#039;s&#039;&#039;&amp;lt;/code&amp;gt; im höchstwertigen Bit des letzten Byte gespeichert.&lt;br /&gt;
&lt;br /&gt;
===Der Typ Real48===&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit- und 64-Bit-Plattform wird eine &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039;-Zahl mit 6 Byte (48 Bit) in drei Felder unterteilt:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #000;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
39&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
8&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn gilt &amp;lt;code&amp;gt;0 &amp;amp;lt; &#039;&#039;e&#039;&#039; &amp;amp;lt;= 255&amp;lt;/code&amp;gt;, ergibt sich der Wert &amp;lt;code&amp;gt;&#039;&#039;v&#039;&#039;&amp;lt;/code&amp;gt; der Zahl folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;v&#039;&#039; = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(e-129)&amp;lt;/sup&amp;gt; * (1.f)&lt;br /&gt;
&lt;br /&gt;
Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt;, ist &amp;lt;code&amp;gt;v = 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der Typ &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039; eignet sich nicht zum Speichern von denormalisierten Werten, NaN-Werten (Not a Number = keine Zahl) und unendlichen Werten. Denormalisierte Zahlen werden zu null, wenn sie als &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039; gespeichert werden, und das Speichern von NaN- und unendlichen Werten in &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039;-Variablen führt zu einem Überlauffehler.&lt;br /&gt;
&lt;br /&gt;
===Der Typ Single===&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit- und 64-Bit-Plattform wird eine &#039;&#039;&#039;[[lib_de:System.Single|Single]]&#039;&#039;&#039;-Zahl mit 4 Byte (32 Bit) in drei Felder unterteilt: &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #000;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1 &lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
8&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
23&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;  &lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;        &lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wert &amp;lt;code&amp;gt;&#039;&#039;v&#039;&#039;&amp;lt;/code&amp;gt; der Zahl ergibt sich folgendermaßen: &lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt; 0 &amp;amp;lt; e &amp;amp;lt; 255&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(e-127)&amp;lt;/sup&amp;gt; * (1.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(-126)&amp;lt;/sup&amp;gt; * (0.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 255&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * Inf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 255&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt; ein NaN-Wert&lt;br /&gt;
&lt;br /&gt;
===Der Typ Double===&lt;br /&gt;
&lt;br /&gt;
Der generische Typ &#039;&#039;&#039;[[lib_de:System.Real|Real]]&#039;&#039;&#039; entspricht in seiner aktuellen Implementierung dem Typ &#039;&#039;&#039;[[lib_de:System.Double|Double]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit- und 64-Bit-Plattform wird eine &#039;&#039;&#039;[[lib_de:System.Double|Double]]&#039;&#039;&#039;-Zahl mit 8 Byte (64 Bit) in drei Felder unterteilt:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #000;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
11&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
52&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wert &amp;lt;code&amp;gt;&#039;&#039;v&#039;&#039;&amp;lt;/code&amp;gt; der Zahl ergibt sich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt; 0 &amp;amp;lt; e &amp;amp;lt; 2047&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(e-1023)&amp;lt;/sup&amp;gt; * (1.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(-1022)&amp;lt;/sup&amp;gt; * (0.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 2047&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * Inf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 2047&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt; ein NaN-Wert&lt;br /&gt;
&lt;br /&gt;
===Der Typ Extended===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039; bietet eine höhere Präzision auf 32-Bit Intel-Plattformen an als andere reelle Typen, ist aber weniger portierbar. Seien Sie vorsichtig, wenn Sie &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039; verwenden, wenn Sie gemeinsame und plattformübergreifende Datendateien erstellen. Beachten Sie, dass:&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Intel-Plattformen wird eine &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039;-Zahl mit 10 Byte (80 Bit) dargestellt. Eine &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039;-Zahl ist in vier Felder unterteilt.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #000;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
15&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
63&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Wert &amp;lt;code&amp;gt;&#039;&#039;v&#039;&#039;&amp;lt;/code&amp;gt; der Zahl ergibt sich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;0 &amp;amp;lt;= e &amp;amp;lt; 32767&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(e-16383)&amp;lt;/sup&amp;gt; * (i.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 32767&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * Inf&amp;lt;/code&amp;gt;&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 32767&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt; ein NaN-Wert&lt;br /&gt;
&lt;br /&gt;
Auf der 64-Bit Intel-Plattform und ARM-Plattform ist der &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039;-Typ jedoch ein Alias für &#039;&#039;&#039;[[lib_de:System.Double|Double]]&#039;&#039;&#039;, das nur 8 Bytes hat. Dieser Unterschied kann sich auf numerische Prezision in Gelitkomma-Operationen auswirken. Weitere Informationen finden Sie unter [[Gesichtspunkte für geräteübergreifende Delphi-Anwendungen|Gesichtspunkte für geräteübergreifende Delphi-Anwendungen]]. Auf MAC OS X-Systemen ist die Größe von &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039; 16 Bytes, um mit [[BCCOSX|BCCOSX]] kompatibel zu sein.&lt;br /&gt;
&lt;br /&gt;
===Der Typ Comp===&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;[[lib_de:System.Comp|Comp]]&#039;&#039;&#039;-Zahl mit 8 Byte (64 Bit) wird als 64-Bit-Integer mit Vorzeichen gespeichert.&lt;br /&gt;
&lt;br /&gt;
===Der Typ Currency===&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;[[lib_de:System.Currency|Currency]]&#039;&#039;&#039;-Zahl mit 8 Byte (64 Bit) wird als skalierter 64-Bit-Integer mit Vorzeichen gespeichert. Dabei stehen die 4 niedrigstwertigen Ziffern implizit für 4 Dezimalstellen.&lt;br /&gt;
&lt;br /&gt;
==Zeigertypen==&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit-Plattformen wird ein [[Zeiger und Zeigertypen (Delphi)|Zeigertyp]] in 4 Byte als 32-Bit-Adresse gespeichert.&lt;br /&gt;
&lt;br /&gt;
Auf [[64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen|64-Bit-Plattformen]] wird ein [[Zeiger und Zeigertypen (Delphi)|Zeigertyp]] in 8 Byte als 64-Bit-Adresse gespeichert. &lt;br /&gt;
&lt;br /&gt;
Der Zeigerwert &#039;&#039;&#039;nil&#039;&#039;&#039; wird als null gespeichert.&lt;br /&gt;
&lt;br /&gt;
==[[String-Typen (Delphi)#Kurze String-Typen|Kurze String]]-Typen==&lt;br /&gt;
&lt;br /&gt;
Die Anzahl der Bytes eines [[lib_de:System.ShortString|ShortString]]-Strings ergibt sich aus seiner maximalen Länge + 1. Das erste Byte enthält die aktuelle dynamische Länge des Strings, die folgenden Bytes seine Zeichen.&lt;br /&gt;
&lt;br /&gt;
Das Längenbyte und die Zeichen werden als Werte ohne Vorzeichen betrachtet. Die maximale Länge eines Strings beträgt 255 Zeichen plus ein Längenbyte (&amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;string[255]&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Lange String-Typen==&lt;br /&gt;
&lt;br /&gt;
Eine String-Variable vom Typ &#039;&#039;&#039;[[lib_de:System.UnicodeString|UnicodeString]]&#039;&#039;&#039; oder &#039;&#039;&#039;[[lib_de:System.AnsiString|AnsiString]]&#039;&#039;&#039; belegt auf 32-Bit-Plattformen 4 Byte (und auf 64-Bit 8 Byte) im Arbeitsspeicher, die einen Zeiger auf einen dynamisch zugewiesenen String enthalten. Wenn eine String-Variable leer ist (also einen String der Länge 0 enthält), ist der String-Zeiger &#039;&#039;&#039;nil&#039;&#039;&#039;, und der String-Variable wird kein dynamischer Speicher zugewiesen. Andernfalls referenziert der String-Zeiger einen dynamisch zugewiesenen Speicherblock, der neben dem String-Wert Informationen zur Beschreibung des Strings enthält. Die nachfolgenden Tabellen zeigen den Aufbau eines Speicherblocks für einen langen String.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format des Datentyps [[lib_de:System.UnicodeString|UnicodeString]] (32 Bit und 64 Bit)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feld&lt;br /&gt;
! &#039;&#039;&#039;Codeseite&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Elementgröße&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Referenzzählung &#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Länge &#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;String-Daten&amp;lt;br /&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(Elementgröße)&lt;br /&gt;
! &#039;&#039;&#039; Nullterminiert&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039;Offset&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-12&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-10&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-8&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-4&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;0..(Länge - 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;Länge * Elementgröße&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Inhalt &#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
16-Bit-Codeseite der String-Daten&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
16-Bit-Elementgröße der String-Daten&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
32-Bit-Referenzzählung&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Länge in Zeichen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeichen-String mit Daten nach Größe der Elemente&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
NULL-Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Zahlen in der Zeile &#039;&#039;&#039;Offset&#039;&#039;&#039; stellen die Offsets der Felder dar, welche den String-Inhalt ab dem String-Zeiger beschreiben, der auf das Feld &#039;&#039;&#039;String-Daten&#039;&#039;&#039; zeigt (&amp;lt;code&amp;gt;Offset = 0&amp;lt;/code&amp;gt;), das einen Speicherblock mit den tatsächlichen String-Werten enthält. &lt;br /&gt;
&lt;br /&gt;
Das NULL-Zeichen am Ende des Speicherblocks eines Strings wird vom Compiler und den integrierten String-Routinen automatisch verwaltet. Durch das NULL-Zeichen kann ein String direkt in einen nullterminierten String umgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[Unicode in RAD Studio#Neuer String-Typ: UnicodeString|Neuer String-Typ: UnicodeString]].&lt;br /&gt;
&lt;br /&gt;
Für String-Literale erzeugt der Compiler einen Speicherblock mit demselben Aufbau wie bei einem dynamisch zugewiesenen String, aber mit einem Referenzzähler von -1. String-Konstanten werden genauso behandelt, der einzige Unterschied zu Literalen ist, dass eine String-Konstante ein Zeiger auf einen -1-Referenzzählerblock ist.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Zeiger auf eine String-Struktur (&#039;&#039;&#039;Quelle&#039;&#039;&#039;) einer String-Variable (&#039;&#039;&#039;Ziel&#039;&#039;&#039;) zugewiesen wird, schreibt der Referenzzähler vor, wie dies ausgeführt wird. Normalerweise wird der Referenzzähler für das Ziel erhöht und für die Quelle verringert, da beide Zeiger (Quelle und Ziel) nach der Zuweisung auf denselben Speicherblock zeigen.&lt;br /&gt;
&lt;br /&gt;
Wenn der Referenzzähler der Quelle -1 (String-Konstante) ist, wird eine neue Struktur mit einem Referenzzähler von 1 erstellt. Wenn das Ziel nicht &#039;&#039;&#039;nil&#039;&#039;&#039; ist, wird der Referenzzähler verringert. Wenn er 0 erreicht, wird die Struktur aus dem Speicher freigegeben. Wenn das Ziel &#039;&#039;&#039;nil&#039;&#039;&#039; ist, werden keine weiteren Aktionen dafür ausgeführt.&lt;br /&gt;
Das Ziel zeigt dann auf die neue Struktur. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
 destination : String;&lt;br /&gt;
 source : String;&lt;br /&gt;
...&lt;br /&gt;
destination := &#039;qwerty&#039;;  // reference count for the newly-created block of memory (containing the &#039;qwerty&#039; string) pointed at by the &amp;quot;destination&amp;quot; variable is now 1&lt;br /&gt;
...&lt;br /&gt;
source := &#039;asdfgh&#039;; // reference count for the newly-created block of memory (containing the &#039;asdfgh&#039; string) pointed at by the &amp;quot;destination&amp;quot; variable is now 1&lt;br /&gt;
destination := source; // reference count for the memory block containing the &#039;asdfgh&#039; string is now 2, and since reference count for the block of memory containing the &#039;qwerty&#039; string is now 0, the memory block is deallocated. &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn der Referenzzähler für die Quelle nicht -1 ist, wird er nicht erhöht, und das Ziel zeigt darauf.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  destination, destination2, destination3: String;&lt;br /&gt;
  destination := &#039;Sample String&#039;; //reference count for the newly-created block of memory containing &#039;Sample string&#039; is 1.&lt;br /&gt;
  destination2 := destination; //reference count for the block of memory containing &#039;Sample string&#039; is now 2.&lt;br /&gt;
  destination3 := destination; //reference count for the block of memory containing &#039;Sample string&#039; is now 3.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; String-Variablen können nicht auf eine Struktur mit einer Referenzzählung von 0 zeigen. Strukturen werden immer freigegeben, wenn sie die Referenzzählung 0 erreichen, und sie können nicht geändert werden, wenn ihre Referenzzählung -1 ist.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==WideString-Typen==&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit-Plattformen belegt eine WideString-Variable 4 Byte (und auf 64-Bit-Plattformen 8 Byte), die einen Zeiger auf einen dynamisch zugewiesenen String enthalten. Wenn eine WideString-Variable leer ist (also einen String der Länge 0 enthält), ist der String-Zeiger &#039;&#039;&#039;nil&#039;&#039;&#039;, und der Variable wird kein dynamischer Speicher zugewiesen. Andernfalls referenziert der String-Zeiger einen dynamisch zugewiesenen Speicherblock, der neben dem String-Wert eine Längenangabe von 32 Bit enthält. Die nachstehende Tabelle zeigt den Aufbau eines Speicherblocks für einen WideString in Windows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Aufbau des Speichers für einen WideString (32 Bit und 64 Bit) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Offset &#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-4&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;0..(Länge - 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;Länge&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Inhalt &#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
32-Bit-Längenindikator&amp;lt;br /&amp;gt; (in Byte)&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeichen-String&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
NULL-Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Länge des Strings ergibt sich aus der Anzahl der Bytes und ist damit doppelt so groß wie die Anzahl der Wide-Zeichen, die er enthält.&lt;br /&gt;
&lt;br /&gt;
Das NULL-Zeichen am Ende des Speicherblocks eines WideStrings wird vom Compiler und den integrierten String-Routinen automatisch verwaltet. Durch das NULL-Zeichen kann ein WideString direkt in einen nullterminierten String umgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
==Mengentypen==&lt;br /&gt;
&lt;br /&gt;
Eine Menge ist ein Array von Bits. Jedes Bit zeigt an, ob ein Element in der Menge enthalten ist oder nicht. Da die maximale Anzahl der Elemente einer Menge 256 beträgt, belegt eine Menge nie mehr als 32 Byte. Die Anzahl der Bytes, die eine bestimmte Menge belegt, ergibt sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
 (&#039;&#039;Max&#039;&#039; div 8) - (&#039;&#039;Min&#039;&#039; div 8) + 1&lt;br /&gt;
&lt;br /&gt;
wobei &amp;lt;code&amp;gt;&#039;&#039;Max&#039;&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;&#039;Min&#039;&#039;&amp;lt;/code&amp;gt; die obere und die untere Grenze des Basistyps der Menge sind. Die Byte-Anzahl eines bestimmten Elements &#039;&#039;E&#039;&#039; ergibt sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
 (&#039;&#039;E&#039;&#039; div 8) - (&#039;&#039;Min&#039;&#039; div 8)&lt;br /&gt;
&lt;br /&gt;
und die Bitanzahl in diesem Byte ergibt sich aus&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;E&#039;&#039; mod 8&lt;br /&gt;
&lt;br /&gt;
wobei &amp;lt;code&amp;gt;&#039;&#039;E&#039;&#039;&amp;lt;/code&amp;gt; der ordinale Wert des Elements ist. Der Compiler speichert Mengen nach Möglichkeit in CPU-Registern. Eine Menge bleibt jedoch immer im Speicher, wenn sie größer als der plattformabhängige Integertyp ist oder im Quelltext des Programms auf die Adresse der Menge zugegriffen wird.&lt;br /&gt;
&lt;br /&gt;
==Statische Array-Typen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform belegt eine statische Array-Variable 4 Byte im Speicher (und 8 Byte auf der 64-Bit-Plattform), die einen Zeiger auf ein statisch zugewiesenes Array enthalten. Ein statisches Array wird als fortlaufende Folge von Variablen des Komponententyps des Arrays gespeichert. Die Komponenten mit den niedrigsten Indizes werden an der niedrigsten Speicheradresse abgelegt. Bei einem mehrdimensionalen Array liegt die äußerste rechte Dimension an der Basis des belegten Speicherblocks.&lt;br /&gt;
&lt;br /&gt;
==Dynamische Array-Typen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform belegt eine dynamische Array-Variable 4 Byte im Speicher (und 8 Byte auf der 64-Bit-Plattform), die einen Zeiger auf ein dynamisch zugewiesenes Array enthalten. Ist eine Variable leer (also nicht initialisiert), ist der Zeiger &#039;&#039;&#039;nil&#039;&#039;&#039;, und der Variable wird kein dynamischer Speicher zugewiesen. Andernfalls referenziert die Variable einen dynamisch zugewiesenen Speicherblock, der neben dem Array eine Längenangabe von 32 Bit (unter Win64 von 64 Bit) und einen Referenzzähler von 32 Bit enthält. Die nachstehende Tabelle zeigt den Aufbau eines Speicherblocks für ein dynamisches Array.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Aufbau des Speichers für ein dynamisches Array (32 Bit und 64 Bit) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Offset 32 Bit&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-8&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-4&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;0..(Länge * Größe_des_Elements - 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Offset 64 Bit&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-12&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-8&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;0..(Länge * Größe_des_Elements - 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Inhalt &#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
32-Bit-Referenzzählung&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
32 Bit oder 64 Bit auf 64-Bit-Plattformen&amp;lt;br /&amp;gt;Längenindikator&amp;lt;br /&amp;gt; (Anzahl der Elemente)&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
Array-Elemente&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Record-Typen==&lt;br /&gt;
&lt;br /&gt;
Wenn ein Record-Typ mit dem Status &amp;lt;code&amp;gt;{$A+}&amp;lt;/code&amp;gt; (Vorgabe) deklariert wird und die Deklaration nicht den Modifizierer &#039;&#039;&#039;packed&#039;&#039;&#039; enthält, handelt es sich um einen ungepackten Record-Typ. Die Felder des Records werden so ausgerichtet, dass die CPU entsprechend der jeweiligen Plattform möglichst effizient darauf zugreifen kann. Die Ausrichtung wird vom Typ des jeweiligen Feldes gesteuert. Jeder Datentyp besitzt eine implizite Ausrichtungsmaske, die vom Compiler automatisch berechnet wird. Sie kann die Werte 1, 2, 4 oder 8 haben und entspricht dem Byte-Raster, in dem ein Wert dieses Typs für den optimalen Zugriff im Speicher angeordnet werden muss. Die folgende Tabelle enthält die Ausrichtungsmasken für alle Datentypen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Ausrichtungsmasken für Typen (nur 32 Bit) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039; Typ &#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Ausrichtung &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Ordinale Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Größe des Typs (1, 2, 4 oder 8)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Reelle Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
2 für &#039;&#039;Real48&#039;&#039;, 4 für &#039;&#039;Single&#039;&#039;, 8 für &#039;&#039;Double&#039;&#039; und &#039;&#039;Extended&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Kurze String-Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Array-Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Entspricht dem Typ der Array-Elemente&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Record-Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Die größte Ausrichtungsmaske der Felder im Record&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Mengentypen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Größe des Typs bei 1, 2 oder 4, andernfalls 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Alle anderen Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Werden von der $A-Direktive festgelegt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die korrekte Ausrichtung der Felder in einem ungepackten Record-Typ zu gewährleisten, fügt der Compiler vor den Feldern mit der Ausrichtungsmaske 2 ein leeres Byte ein. Bei Feldern mit der Ausrichtungsmaske 4 werden nach Bedarf bis zu 3 leere Byte eingefügt. Schließlich erweitert der Compiler die gesamte Größe des Records bis zu der Byte-Grenze, die sich aus der größten Ausrichtungsmaske der enthaltenen Felder ergibt.&lt;br /&gt;
&lt;br /&gt;
====Implizites Packen von Feldern mit einer gemeinsamen Typspezifikation====&lt;br /&gt;
&lt;br /&gt;
In früheren Versionen des {{Delphi}}-Compilers, wie {{Delphi}} 7 und vorher, wurde die Ausrichtung &#039;&#039;&#039;packed&#039;&#039;&#039; implizit für Felder angewendet, die gemeinsam deklariert wurden, d. h., für Felder, die eine gemeinsame Typspezifikation haben. Neuere Compiler können dieses Verhalten erzeugen, wenn Sie die Direktive {$OLDTYPELAYOUT ON} angeben. Diese Direktive packt (auf Byte-Basis) die Felder mit einer gemeinsamen Typspezifikation, auch wenn in der Deklaration der Modifizierer &#039;&#039;&#039;packed&#039;&#039;&#039; nicht enthalten ist und der Record-Typ nicht mit dem Status &amp;lt;code&amp;gt;{$A-}&amp;lt;/code&amp;gt; deklariert wurde. &lt;br /&gt;
&lt;br /&gt;
Betrachten Sie folgende Deklaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 {$OLDTYPELAYOUT ON}&lt;br /&gt;
 type&lt;br /&gt;
   TMyRecord = record&lt;br /&gt;
     A, B: Extended;&lt;br /&gt;
     C: Extended;&lt;br /&gt;
   end;&lt;br /&gt;
 {$OLDTYPELAYOUT OFF}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; werden gepackt (an Byte-Grenzen ausgerichtet), weil die Direktive {$OLDTYPELAYOUT ON} angegeben ist und &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; dieselbe Typspezifikation verwenden. Für das separat deklarierte Feld &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; verwendet der Compiler aber das Standardverhalten und füllt die Struktur mit unbenutzten Bytes auf, damit das Feld an einer Quadword-Grenze erscheint.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Record-Typ mit dem Status &amp;lt;code&amp;gt;{$A-}&amp;lt;/code&amp;gt; deklariert wird oder die Deklaration den Modifizierer &#039;&#039;&#039;packed&#039;&#039;&#039; enthält, werden die Felder des Records nicht ausgerichtet, sondern an aufeinander folgenden Offsets abgelegt. Die Gesamtgröße eines solchen gepackten Records ergibt sich aus der Größe aller Felder. Da sich die Datenausrichtung ändern kann, bieten sich gepackte Record-Typen für alle Record-Strukturen an, die auf die Festplatte geschrieben oder im Speicher an ein Modul übergeben werden sollen, das mit einer anderen Version des Compilers compiliert wird.&lt;br /&gt;
&lt;br /&gt;
==Dateitypen==&lt;br /&gt;
&lt;br /&gt;
Dateitypen werden als Records dargestellt. Typisierte und untypisierte Dateien belegen auf 32-Bit-Plattformen 592 Byte und auf 64-Bit-Plattformen 616 Byte, die sich wie folgt verteilen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
   TFileRec = packed record&lt;br /&gt;
     Handle: NativeInt;&lt;br /&gt;
     Mode: word;&lt;br /&gt;
     Flags: word;&lt;br /&gt;
     case Byte of&lt;br /&gt;
       0: (RecSize: Cardinal);&lt;br /&gt;
       1: (BufSize: Cardinal;&lt;br /&gt;
    	   BufPos: Cardinal;&lt;br /&gt;
    	   BufEnd: Cardinal;&lt;br /&gt;
    	   BufPtr: _PAnsiChr;&lt;br /&gt;
    	   OpenFunc: Pointer;&lt;br /&gt;
    	   InOutFunc: Pointer;&lt;br /&gt;
    	   FlushFunc: Pointer;&lt;br /&gt;
    	   CloseFunc: Pointer;&lt;br /&gt;
    	   UserData: array[1..32] of Byte;&lt;br /&gt;
    	   Name: array[0..259] of WideChar; );&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Textdateien belegen auf 32-Bit-Plattformen 730 Byte und auf 64-Bit-Plattformen 754 Byte, die sich wie folgt verteilen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
   TTextBuf = array[0..127] of Char;&lt;br /&gt;
   TTextRec = packed record&lt;br /&gt;
     Handle: NativeInt;&lt;br /&gt;
     Mode: word;&lt;br /&gt;
     Flags: word;&lt;br /&gt;
     BufSize: Cardinal;&lt;br /&gt;
     BufPos: Cardinal;&lt;br /&gt;
     BufEnd: Cardinal;&lt;br /&gt;
     BufPtr: _PAnsiChr;&lt;br /&gt;
     OpenFunc: Pointer;&lt;br /&gt;
     InOutFunc: Pointer;&lt;br /&gt;
     FlushFunc: Pointer;&lt;br /&gt;
     CloseFunc: Pointer;&lt;br /&gt;
     UserData: array[1..32] of Byte;&lt;br /&gt;
     Name: array[0..259] of WideChar;&lt;br /&gt;
     Buffer: TTextBuf; //&lt;br /&gt;
     CodePage: Word;&lt;br /&gt;
     MBCSLength: ShortInt;&lt;br /&gt;
     MBCSBufPos: Byte;&lt;br /&gt;
     case Integer of&lt;br /&gt;
       0: (MBCSBuffer: array[0..5] of _AnsiChr);&lt;br /&gt;
       1: (UTF16Buffer: array[0..2] of WideChar);&lt;br /&gt;
   end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Handle&amp;lt;/code&amp;gt; enthält das Handle der Datei (wenn die Datei geöffnet ist).&lt;br /&gt;
&lt;br /&gt;
Das Feld &amp;lt;code&amp;gt;Mode&amp;lt;/code&amp;gt; kann einen der folgenden Werte annehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 const&lt;br /&gt;
   fmClosed = $D7B0;&lt;br /&gt;
   fmInput= $D7B1;&lt;br /&gt;
   fmOutput = $D7B2;&lt;br /&gt;
   fmInOut= $D7B3;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fmClosed&amp;lt;/code&amp;gt; gibt dabei an, dass die Datei geschlossen ist. &amp;lt;code&amp;gt;fmInput&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;fmOutput&amp;lt;/code&amp;gt; geben an, dass es sich bei der Datei um eine Textdatei handelt, die zurückgesetzt (&amp;lt;code&amp;gt;fmInput&amp;lt;/code&amp;gt;) oder neu geschrieben (&amp;lt;code&amp;gt;fmOutput&amp;lt;/code&amp;gt;) wurde. &amp;lt;code&amp;gt;fmInOut&amp;lt;/code&amp;gt; gibt an, dass die Datei eine typisierte oder eine untypisierte Datei ist, die zurückgesetzt oder neu geschrieben wurde. Jeder andere Wert gibt an, dass die Dateivariable nicht zugeordnet (und damit nicht initialisiert) wurde.&lt;br /&gt;
&lt;br /&gt;
Das Feld &amp;lt;code&amp;gt;UserData&amp;lt;/code&amp;gt; wird für benutzerdefinierte Routinen freigehalten, um Daten zu speichern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; enthält den Dateinamen. Dieser besteht aus einer Folge von Zeichen, die mit einem Null-Zeichen (#0) abgeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Bei typisierten und untypisierten Dateien enthält &amp;lt;code&amp;gt;RecSize&amp;lt;/code&amp;gt; die Record-Länge in Byte. Das Feld &amp;lt;code&amp;gt;Private&amp;lt;/code&amp;gt; ist reserviert und wird nicht verwendet.&lt;br /&gt;
&lt;br /&gt;
Bei Textdateien ist &amp;lt;code&amp;gt;BufPtr&amp;lt;/code&amp;gt; ein Zeiger auf einen Puffer mit &amp;lt;code&amp;gt;BufSize&amp;lt;/code&amp;gt; Byte, &amp;lt;code&amp;gt;BufPos&amp;lt;/code&amp;gt; ist der Index des nächsten zu lesenden oder zu schreibenden Zeichens des Puffers. &amp;lt;code&amp;gt;BufEnd&amp;lt;/code&amp;gt; entspricht der Anzahl der gültigen Zeichen im Puffer. &amp;lt;code&amp;gt;OpenFunc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;InOutFunc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FlushFunc&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;CloseFunc&amp;lt;/code&amp;gt; sind Zeiger auf die E/A-Routinen, die die Datei verwalten. Weitere Informationen zu diesem Thema finden Sie unter &amp;quot;Gerätefunktionen&amp;quot;. &amp;lt;code&amp;gt;Flags&amp;lt;/code&amp;gt; legt die Art des Zeilenumbruchs fest.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Bit 0 nicht gesetzt&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
LF-Zeilenumbruch&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Bit 0 gesetzt&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
CRLF-Zeilenumbruch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Alle anderen &amp;lt;code&amp;gt;Flags&amp;lt;/code&amp;gt;-Bits sind für die zukünftige Verwendung reserviert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Für den Typ &#039;&#039;&#039;UnicodeString&#039;&#039;&#039; (dem Standard-String-Typ in {{Delphi}}) sind die verschiedenen Stream-Typen aus der Unit &#039;&#039;&#039;Classes&#039;&#039;&#039; (&#039;&#039;&#039;TFileStream&#039;&#039;&#039;, &#039;&#039;&#039;TStreamReader&#039;&#039;&#039;, &#039;&#039;&#039;TStreamWriter&#039;&#039;&#039; usw.) nützlicher, weil die älteren Dateitypen (besonders ältere Textdateitypen) nur über eine begrenzte Unicode-Funktionalität verfügen. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prozedurale Typen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform wird ein Prozedurzeiger als 32-Bit-Zeiger auf den Eintrittspunkt einer Prozedur oder Funktion gespeichert. Ein Methodenzeiger wird als 32-Bit-Zeiger auf den Eintrittspunkt einer Methode gespeichert, dem ein 32-Bit-Zeiger auf ein Objekt folgt.&lt;br /&gt;
&lt;br /&gt;
Auf der 64-Bit-Plattform wird ein Prozedurzeiger als 64-Bit-Zeiger auf den Eintrittspunkt einer Prozedur oder Funktion gespeichert. Ein Methodenzeiger wird als 64-Bit-Zeiger auf den Eintrittspunkt einer Methode gespeichert, dem ein 64-Bit-Zeiger auf ein Objekt folgt.&lt;br /&gt;
&lt;br /&gt;
==Klassentypen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform (Win32, OSX, iOS und Android) wird der Wert eines Klassentyps als 32-Bit-Zeiger auf eine Instanz der Klasse (bzw. als 64-Bit-Zeiger auf der 64-Bit-Plattform) gespeichert. Die Instanz einer Klasse wird auch als &#039;&#039;Objekt&#039;&#039; bezeichnet. Das interne Datenformat eines Objekts gleicht dem eines Records. Die Felder eines Objekts werden in der Reihenfolge ihrer Deklaration als fortlaufende Folge von Variablen gespeichert. Die Felder werden wie bei einem ungepackten Record-Typ immer ausgerichtet. Die Ausrichtung entspricht deshalb der größten Ausrichtungsmaske der Felder im &#039;&#039;Objekt&#039;&#039;. Alle von einer Vorfahrklasse geerbten Felder werden vor den neuen Feldern gespeichert, die in der abgeleiteten Klasse definiert wurden.&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform ist das erste, 4 Byte große Feld aller Objekte (bzw. auf der 64-Bit-Plattform das erste, 8 Byte große Feld) ein Zeiger auf die &#039;&#039;virtuelle Methodentabelle&#039;&#039; (VMT) der Klasse. Es gibt nur eine VMT pro Klasse (und nicht eine für jedes Objekt). Verschiedene Klassentypen verwenden nie dieselbe VMT. VMTs werden automatisch vom Compiler erstellt und nie direkt von einem Programm geändert. Ebenso werden die Zeiger auf VMTs automatisch von den Konstruktormethoden in den erstellten Objekten gespeichert und nie direkt von einem Programm geändert.&lt;br /&gt;
&lt;br /&gt;
Die folgende Tabelle zeigt die Struktur einer VMT. Auf der 32-Bit-Plattform besteht eine VMT bei positiven Offsets aus einer Liste mit 32-Bit-Methodenzeigern (64-Bit-Methodenzeiger auf der 64-Bit-Plattform). Für jede benutzerdefinierte virtuelle Methode des Klassentyps ist ein Zeiger vorhanden. Die Zeiger sind in der Reihenfolge der Deklaration angeordnet. Jeder Eintrag enthält die Adresse des Eintrittspunkts der entsprechenden virtuellen Methode. Dieses Layout ist zur V-Tabelle von C++ und zu COM kompatibel. Bei negativen Offsets enthält eine VMT die Anzahl der Felder, die in {{Delphi}} intern implementiert sind. In einer Anwendung sollten diese Informationen mit den Methoden von TObject abgerufen werden, da sich dieses Layout bei künftigen Implementierungen von {{Delphi}} ändern kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Struktur der virtuellen Methodentabelle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&amp;lt;br /&amp;gt;Win32, OSX&lt;br /&gt;
! Offset&amp;lt;br /&amp;gt;Win64&lt;br /&gt;
! Offset&amp;lt;br /&amp;gt;iOS/ARM, Android/ARM&lt;br /&gt;
! Offset&amp;lt;br /&amp;gt;iOS/Simulator&lt;br /&gt;
! &#039;&#039;&#039; Typ &#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Beschreibung &#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Konstante in System.pas &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-88&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-200&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-108&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-96&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die virtuelle Methodentabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtSelfPtr&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-84&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-192&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-104&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-92&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Interface-Tabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtIntfTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-80&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-184&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-100&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-88&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Informationstabelle zur Automatisierung (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtAutoTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-76&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-176&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-96&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-84&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Instanzeninitialisierungstabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtInitTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-72&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-168&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-92&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-80&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Typinformationstabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtTypeInfo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-68&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-160&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-88&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-76&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Felddefinitionstabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtFieldTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-152&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-84&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-72&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Methodendefinitionstabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtMethodTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-60&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-144&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-80&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-68&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die dynamische Methodentabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtDynamicTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-56&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-136&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-76&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf einen kurzen String, der den Klassennamen enthält&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtClassName&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-52&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-128&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-72&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-60&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Cardinal&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Instanzgröße in Byte&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtInstanceSize&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-48&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-120&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-68&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-56&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf einen Zeiger auf die Vorfahrklasse (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtParent&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
n/v&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
n/v&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-52&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode __ObjAddRef&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtObjAddRef&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
n/v&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
n/v&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-60&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-48&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode __ObjRelease&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtObjRelease&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-44&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-112&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-56&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-44&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode Equals&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtEquals&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-40&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-104&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-52&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-40&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode GetHashCode&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtGetHashCode&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-36&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-96&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-48&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-36&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode ToString&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtToString&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-88&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-44&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf den Eintrittspunkt der Methode &#039;&#039;SafecallException&#039;&#039; (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtSafeCallException&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-28&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-80&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-40&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-28&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;AfterConstruction&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtAfterConstruction&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-24&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-72&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-36&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-24&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;BeforeDestruction&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtBeforeDestruction&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-20&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-20&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;Dispatch&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtDispatch&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-16&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-56&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-28&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-16&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;DefaultHandler&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtDefaultHandler&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-12&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-48&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-24&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-12&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;NewInstance&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtNewInstance&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-8&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-40&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-20&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-8&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;FreeInstance&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtFreeInstance&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-16&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt des Destruktors &#039;&#039;Destroy&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtDestroy&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
0&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
0&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
0&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
0&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der ersten benutzerdefinierten virtuellen Methode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
8&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der zweiten benutzerdefinierten virtuellen Methode&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Klassenreferenztypen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform (Win32, OSX, iOS und Android) wird der Wert einer Klassenreferenz als 32-Bit-Zeiger auf die virtuelle Methodentabelle (VMT) einer Klasse gespeichert.&lt;br /&gt;
&lt;br /&gt;
Auf der 64-Bit-Plattform (Win64) wird der Wert einer Klassenreferenz als 64-Bit-Zeiger auf die virtuelle Methodentabelle (VMT) einer Klasse gespeichert.&lt;br /&gt;
&lt;br /&gt;
==Variante Typen==&lt;br /&gt;
&lt;br /&gt;
Varianten sind beim Implementieren von variantenbezogenen RTL-Funktionen vom Boxing und Unboxing von Daten in einen Objekt-Wrapper sowie von {{Delphi}}-Hilfsklassen abhängig.&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform wird eine Variante als 16-Byte-Record gespeichert, der einen Typcode und einen Wert (oder eine Referenz auf einen Wert) des durch den Code bezeichneten Typs enthält. Auf der 64-Bit-Plattform wird eine Variante als 24-Byte-Record gespeichert. Die Units [[lib_de:System|System]] und [[lib_de:System.Variants|System.Variants]] definieren Konstanten und Typen für Varianten.&lt;br /&gt;
&lt;br /&gt;
Der Typ [[lib_de:System.TVarData|TVarData]] steht für die interne Struktur einer [[lib_de:System.Variant|Variante]] (in Windows entspricht er dem Typ [[lib_de:System.Variant|Variant]], der von COM und der Win32-API verwendet wird). Mit dem Typ [[lib_de:System.TVarData|TVarData]] kann bei einer Typumwandlung von Varianten auf die interne Struktur einer Variable zugegriffen werden. Der Record [[lib_de:System.TVarData|TVarData]] enthält die folgenden Felder:&lt;br /&gt;
&lt;br /&gt;
* Das Feld &#039;&#039;&#039;VType&#039;&#039;&#039; mit dem Typ [[lib_de:System.TVarType|TVarType]] hat die Größe [[lib_de:System.Word|Word]] (16 Bit). &#039;&#039;&#039;VType&#039;&#039;&#039; enthält den Typcode der Variante in den niederwertigen 12 Bit (die Bits, die von der Konstante [[Lib en:System#Konstanten|varTypeMask]] &amp;lt;code&amp;gt;= $FFF&amp;lt;/code&amp;gt; definiert werden). Zusätzlich zeigt das Bit [[Lib en:System#Konstanten|varArray]] &amp;lt;code&amp;gt;= $2000&amp;lt;/code&amp;gt; an, ob es sich bei der Variante um ein Array handelt. Das Bit [[Lib en:System#Konstanten|varByRef]] (&amp;lt;code&amp;gt;= $4000&amp;lt;/code&amp;gt;) gibt an, ob die Variante eine Referenz oder einen Wert enthält.&lt;br /&gt;
* Die Felder &#039;&#039;&#039;Reserved1&#039;&#039;&#039;, &#039;&#039;&#039;Reserved2&#039;&#039;&#039; und &#039;&#039;&#039;Reserved3&#039;&#039;&#039; ([[lib_de:System.Word|Word]]-Größe) werden nicht verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Inhalt der restlichen 8 Byte (32-Bit-Plattform) oder 16 Byte (64-Bit-Plattform) eines [[lib_de:System.TVarData|TVarData]]-Records hängt folgendermaßen vom Feld &#039;&#039;&#039;VType&#039;&#039;&#039; ab:&lt;br /&gt;
&lt;br /&gt;
* Wenn weder das Bit [[Lib en:System#Konstanten|varArray]] noch das Bit [[Lib en:System#Konstanten|varByRef]] gesetzt ist, enthält die Variante einen Wert des gegebenen Typs.&lt;br /&gt;
* Wenn das Bit [[Lib en:System#Konstanten|varArray]] gesetzt ist, enthält die Variante einen Zeiger auf eine [[lib_de:System.TVarArray|TVarArray]]-Struktur, die das Array definiert. Der Typ jedes Array-Elements ist durch die [[Lib en:System#Konstanten|varTypeMask]]-Bits des Feldes &#039;&#039;&#039;VType&#039;&#039;&#039; festgelegt.&lt;br /&gt;
* Wird das Bit [[Lib en:System#Konstanten|varByRef]] gesetzt, enthält die Variante eine Referenz auf einen Wert des Typs, der durch die Bits &#039;&#039;&#039;varTypeMask&#039;&#039;&#039; und &#039;&#039;&#039;varArray&#039;&#039;&#039; im Feld &#039;&#039;&#039;VType&#039;&#039;&#039; definiert ist.&lt;br /&gt;
&lt;br /&gt;
Der Typcode [[lib_de:System.TVarType|varString]] ist &amp;quot;private&amp;quot;. Varianten, die einen [[lib_de:System.TVarType|varString]]-Wert enthalten, sollten nicht an Nicht-{{Delphi}}-Funktionen übergeben werden. Auf der Windows-Plattform sorgt die Automatisierungsunterstützung von {{Delphi}} dafür, dass [[lib_de:System.TVarType|varString]]-Varianten vor der Übergabe an externe Funktionen automatisch in [[lib_de:System.TVarType|varOleStr]]-Varianten umgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Speicherverwaltung|Speicherverwaltung]]&lt;br /&gt;
* [[64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen|64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen]]&lt;br /&gt;
* [[Überblick über Datentypen (Delphi)|Überblick über Datentypen (Delphi)]]&lt;br /&gt;
* [[String-Typen (Delphi)|String-Typen (Delphi)]]&lt;br /&gt;
* [[Strukturierte Typen|Strukturierte Typen (Delphi)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:Delphi-Sprachreferenz]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Interne_Datenformate_(Delphi)&amp;diff=208940</id>
		<title>Interne Datenformate (Delphi)</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Interne_Datenformate_(Delphi)&amp;diff=208940"/>
		<updated>2016-06-30T08:02:34Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Internal review. LOC-22606&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
{{Parent|Speicherverwaltung auf der Win32-Plattform - Index}}&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Integer&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Type&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;integer&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;type&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Shortint&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Byte&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Smallint&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Word&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Longint&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;LongWord&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Int64&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Char&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;AnsiChar&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Char&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;WideChar&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Boolean&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;WordBool&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;LongBool&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;ByteBool&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;{$Z1}&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;{$Z2}&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;{$Z4}&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;+&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;-&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Real&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Enumerated&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;/&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;+/-&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Real48&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Inf&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;NaN&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Extended&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Double&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Single&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Comp&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Currency&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Currency&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Pointer&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;ShortString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;LongString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;AnsiString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;WideString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;nil&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Set&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Min&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Max&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Static Array&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;System Array&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Dynamic Array&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Record&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;packed&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Ordinal&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Real&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Short&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Array&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;UserData&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;RecSize&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Private&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;BufPtr&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;BufSize&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;BufPos&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;BufEnd&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Openfunc&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;InOutFunc&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;FlushFunc&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;CloseFunc&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Procedural&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Class&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;System.MulticastDelegate&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;System.Reflection&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Pointer&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Class Reference&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Class-Reference&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Variant&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;System&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;TVarData&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;VType&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varTypeMask&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varArray&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varByRef&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Reserved1&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Reserved2&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;Reserved3&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varString&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
&amp;lt;ideTag id=&amp;quot;varOleStr&amp;quot;&amp;gt;&amp;lt;/ideTag&amp;gt;&lt;br /&gt;
In den folgenden Themen werden die internen Datenformate von {{Delphi}}-Datentypen beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Integertypen==&lt;br /&gt;
&lt;br /&gt;
Integerwerte haben in {{Delphi}} die folgende interne Darstellung.&lt;br /&gt;
&lt;br /&gt;
===Plattformunabhängige vorzeichenlose Integertypen===&lt;br /&gt;
&lt;br /&gt;
Werte von plattformunabhängigen Integertypen belegen auf jeder Plattform dieselbe Bitanzahl. &lt;br /&gt;
&lt;br /&gt;
Werte von vorzeichenlosen Integertypen sind immer positiv und haben kein &#039;&#039;&#039;Vorzeichenbit&#039;&#039;&#039; wie Integertypen mit Vorzeichen. Alle Bits von vorzeichenlosen Integertypen belegen die Größe des Wertes und haben keine andere Bedeutung.&lt;br /&gt;
&lt;br /&gt;
====Byte, UInt8====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Byte|Byte]] und [[lib_de:System.UInt8|UInt8]] sind 1 Byte (8 Bit) große vorzeichenlose positive Integerzahlen. Die &#039;&#039;&#039;Größe&#039;&#039;&#039; belegt alle 8 Bit.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerUnsigned8.png|Integer, 8 Bit ohne Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====Word und UInt16====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Word|Word]] und [[lib_de:System.UInt16|UInt16]] sind 2 Byte (16 Bit) große vorzeichenlose Integerzahlen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerUnsigned16.png|Integer, 16 Bit ohne Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====FixedUInt, Cardinal und UInt32====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.FixedUInt|FixedUInt]], [[lib_de:System.Cardinal|Cardinal]] und [[lib_de:System.UInt32|UInt32]] sind 4 Byte (32 Bit) große vorzeichenlose Integerzahlen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerUnsigned32.png|Integer, 32 Bit ohne Vorzeichen]]&lt;br /&gt;
&lt;br /&gt;
====UInt64====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.UInt64|UInt64]] sind 8 Byte (64 Bit) große vorzeichenlose Integerzahlen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerUnsigned64.png|Integer, 64 Bit ohne Vorzeichen]]&lt;br /&gt;
&lt;br /&gt;
===Plattformunabhängige Integertypen mit Vorzeichen===&lt;br /&gt;
&lt;br /&gt;
Werte von Integertypen mit Vorzeichen stellen das Vorzeichen einer Zahl durch ein führendes &#039;&#039;Vorzeichenbit&#039;&#039; dar, ausgedrückt durch das höchstwertige Bit. Das Vorzeichenbit ist für positive Zahlen 0 und für negative Zahlen 1. Die anderen Bits in einer positiven Integerzahl mit Vorzeichen werden von der Größe belegt. In einer negativen Integerzahl mit Vorzeichen werden die anderen Bits durch die &#039;&#039;2er-Komplement&#039;&#039;-Darstellung der Größe des Wertes (absoluter Wert) belegt. &lt;br /&gt;
&lt;br /&gt;
So ermitteln Sie das 2er-Komplement für eine Größe:&lt;br /&gt;
&lt;br /&gt;
# Suchen Sie beginnend von rechts die erste &amp;quot;1&amp;quot;.&lt;br /&gt;
# Invertieren Sie alle Bits links davon.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Beispiel 1&lt;br /&gt;
! Beispiel 2&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Größe&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;01010&#039;&#039;&#039;1&#039;&#039;&#039;0&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;101010&#039;&#039;&#039;1&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;2er-Komplement&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;&#039;10101&#039;&#039;&#039;10&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;&#039;010101&#039;&#039;&#039;1&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====ShortInt, Int8====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Shortint|Shortint]] und [[lib_de:System.Int8|Int8]] sind 1 Byte (8 Bit) große Integerzahlen mit Vorzeichen. Das &#039;&#039;&#039;Vorzeichenbit&#039;&#039;&#039; belegt das höchstwertige siebte Bit, die &#039;&#039;&#039;Größe&#039;&#039;&#039; oder das &#039;&#039;&#039;2er-Komplement&#039;&#039;&#039; belegt die anderen 7 Bit.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerSignPositive8.png|Integer, 8 Bit positiv mit Vorzeichen]] &lt;br /&gt;
: [[Image:IntegerSignNegative8.png|Integer, 8 Bit negativ mit Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====SmallInt und Int16====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Smallint|SmallInt]] und [[lib_de:System.Int16|Int16]] sind 2 Byte (16 Bit) große Integerzahlen mit Vorzeichen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerSignPositive16.png|Integer, 16 Bit positiv mit Vorzeichen]] &lt;br /&gt;
: [[Image:IntegerSignNegative16.png|Integer, 16 Bit negativ mit Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====FixedInt, Integer und Int32====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.FixedInt|FixedInt]], [[lib_de:System.Integer|Integer]] und [[lib_de:System.Int32|Int32]] sind 4 Byte (32 Bit) große Integerzahlen mit Vorzeichen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerSignPositive32.png|Integer, 32 Bit positiv mit Vorzeichen]] &lt;br /&gt;
: [[Image:IntegerSignNegative32.png|Integer, 32 Bit negativ mit Vorzeichen]] &lt;br /&gt;
&lt;br /&gt;
====Int64====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Int64|Int64]] sind 8 Byte (64 Bit) große Integerzahlen mit Vorzeichen.&lt;br /&gt;
&lt;br /&gt;
: [[Image:IntegerSignPositive64.png|Integer, 64 Bit positiv mit Vorzeichen]] &lt;br /&gt;
: [[Image:IntegerSignNegative64.png|Integer, 64 Bit negativ mit Vorzeichen]]&lt;br /&gt;
&lt;br /&gt;
===Plattformabhängige Integertypen===&lt;br /&gt;
&lt;br /&gt;
Die plattformabhängigen Integertypen werden konvertiert, damit sie zu der Bitgröße der aktuellen Zielplattform passen. Auf 64-Bit-Plattformen belegen Sie 64 Bit, auf 32-Bit-Plattformen 32 Bit (mit Ausnahme der Typen [[lib_de:System.Longint|LongInt]] und [[lib_de:System.LongWord|LongWord]]). &lt;br /&gt;
Wenn die Größe der Zielplattform und die Größe der CPU-Plattform identisch sind, dann stimmt eine plattformabhängige Integerzahl exakt mit der Größe der CPU-Register überein. Diese Typen werden häufig verwendet, wenn eine bestmögliche Leistung für einen bestimmten CPU-Typ und ein bestimmtes Betriebssystem erwünscht ist. &lt;br /&gt;
&lt;br /&gt;
====Vorzeichenloser NativeUInt-Integer====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.NativeUInt|NativeUInt]] ist der plattformabhängige vorzeichenlose Integertyp. Die Größe und interne Darstellung von [[lib_de:System.NativeUInt|NativeUInt]] hängen von der aktuellen Plattform ab. Auf 32-Bit-Plattformen entspricht [[lib_de:System.NativeUInt|NativeUInt]] dem Typ [[lib_de:System.Cardinal|Cardinal]]. Auf 64-Bit-Plattformen entspricht [[lib_de:System.NativeUInt|NativeUInt]] dem Typ [[lib_de:System.UInt64|UInt64]].&lt;br /&gt;
&lt;br /&gt;
====NativeInt-Integer mit Vorzeichen====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.NativeInt|NativeInt]] ist der plattformabhängige Integertyp mit Vorzeichen. Die Größe und interne Darstellung von [[lib_de:System.NativeInt|NativeInt]] hängen von der aktuellen Plattform ab. Auf 32-Bit-Plattformen entspricht [[lib_de:System.NativeInt|NativeInt]] dem Typ [[lib_de:System.Integer|Integer]]. Auf 64-Bit-Plattformen entspricht [[lib_de:System.NativeInt|NativeInt]] dem Typ [[lib_de:System.Int64|Int64]].&lt;br /&gt;
&lt;br /&gt;
====LongInt und LongWord====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Longint|LongInt]] definiert den Integertyp mit Vorzeichen und [[lib_de:System.LongWord|LongWord]] den Integertyp ohne Vorzeichen.&lt;br /&gt;
Die Größe der plattformabhängigen Integertypen [[lib_de:System.Longint|LongInt]] und [[lib_de:System.LongWord|LongWord]] ist auf jeder Plattform anders, mit Ausnahme von 64-Bit-Windows; hier bleibt die Größe unverändert (32 Bit).&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |Größe&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;32-Bit-Plattformen und 64-Bit-Windows-Plattformen&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;64-Bit-iOS-Plattformen&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;LongInt&#039;&#039;&#039;&lt;br /&gt;
|32 Bit (4 Byte)&lt;br /&gt;
|64 Bit (8 Byte)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;LongWord&#039;&#039;&#039;&lt;br /&gt;
|32 Bit (4 Byte)&lt;br /&gt;
|64 Bit (8 Byte)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
 Zu 32-Bit-Plattformen gehören in {{Product}} 32-Bit-Windows, OSX32, 32-Bit-iOS und Android.&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie auf &#039;&#039;&#039;64-Bit-iOS-Plattformen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:* &#039;&#039;&#039;[[lib_de:System.Integer|Integer]]&#039;&#039;&#039; oder &#039;&#039;&#039;[[lib_de:System.FixedInt|FixedInt]]&#039;&#039;&#039; statt [[lib_de:System.Longint|LongInt]], wenn Sie den 32-Bit-Integertyp mit Vorzeichen verwenden möchten.&lt;br /&gt;
:* &#039;&#039;&#039;[[lib_de:System.Cardinal|Cardinal]]&#039;&#039;&#039; oder &#039;&#039;&#039;[[lib_de:System.FixedUInt|FixedUInt]]&#039;&#039;&#039; statt [[lib_de:System.LongWord|LongWord]], wenn Sie den 32-Bit-Integertyp ohne Vorzeichen verwenden möchten.&lt;br /&gt;
&lt;br /&gt;
==Integer-Teilbereichstypen==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit Integerkonstanten die Ober- und Unterbereichsgrenzen von [[Einfache Typen#Teilbereichstypen|Teilbereichstypen]] festlegen, definieren Sie einen &#039;&#039;Integer-Teilbereichstyp&#039;&#039;. Ein Integer-Teilbereich ist eine Untermenge der Werte eines anderen Integertyps (des sogenannten &#039;&#039;Basistyps&#039;&#039;).  Der Basistyp ist der kleinste Integertyp, der den angegebenen Bereich enthält (enthält die Ober- und Unterbereichsgrenzen). &lt;br /&gt;
&lt;br /&gt;
Das interne Datenformat, in dem eine Variable eines Integer-Teilbereichstyps dargestellt werden kann, hängt von den Bereichsgrenzen ab:&lt;br /&gt;
&lt;br /&gt;
* Liegen beide Grenzen im Bereich -128..127 ([[lib_de:System.Shortint|ShortInt]]), wird die Variable als ein Byte mit Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich 0..255 ([[lib_de:System.Byte|Byte]]), wird die Variable als ein Byte ohne Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich -32768..32767 ([[lib_de:System.Smallint|SmallInt]]), wird die Variable als ein Word mit Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich 0..65535 ([[lib_de:System.Word|Word]]), wird die Variable als ein Word ohne Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich -2147483648..2147483647 ([[lib_de:System.FixedInt|FixedInt]] und [[lib_de:System.Longint|LongInt]] auf 32-Bit-Plattformen und 64-Bit-Windows-Plattformen), wird die Variable als ein Double Word mit Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich 0..4294967295 ([[lib_de:System.FixedUInt|FixedUInt]] und [[lib_de:System.LongWord|LongWord]] auf 32-Bit-Plattformen und 64-Bit-Windows-Plattformen), wird die Variable als ein Double Word ohne Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich -2^63..2^63-1 ([[lib_de:System.Int64|Int64]] und [[lib_de:System.Longint|LongInt]] auf 64-Bit-iOS-Plattformen), wird die Variable als Quadruple Word mit Vorzeichen gespeichert.&lt;br /&gt;
* Liegen beide Grenzen im Bereich 0..2^64-1 ([[lib_de:System.UInt64|UInt64]] und [[lib_de:System.LongWord|LongWord]] auf 64-Bit-iOS-Plattformen), wird die Variable als Quadruple Word ohne Vorzeichen gespeichert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Ein &amp;quot;Word&amp;quot; belegt zwei Byte.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zeichentypen==&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit- und 64-Bit-Plattformen:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Char|Char]] und [[lib_de:System.WideChar|WideChar]] werden als Word-Variable ohne Vorzeichen in der Regel in der Codierung UTF-16 oder Unicode gespeichert.  &lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.AnsiChar|AnsiChar]] wird als Byte ohne Vorzeichen gespeichert. In {{Delphi}} 2007 und früher wurde &#039;&#039;&#039;Char&#039;&#039;&#039; als ein &#039;&#039;&#039;AnsiChar&#039;&#039;&#039; dargestellt. Der Zeichentyp für [[lib_de:System.ShortString|kurze Strings]] ist immer [[lib_de:System.AnsiChar|AnsiChar]]. Er wird in vorzeichenlosen Byte-Werten gespeichert. &lt;br /&gt;
&lt;br /&gt;
* Der Standardtyp für lange Strings (string) ist jetzt [[lib_de:System.UnicodeString|UnicodeString]], dessen Referenzzählung der von [[lib_de:System.AnsiString|AnsiString]] entspricht. AnsiString war früher der Standardtyp für lange Strings. Um die Kompatibilität mit älterem Quelltext aufrechtzuerhalten, könnte die Verwendung des Typs [[lib_de:System.AnsiString|AnsiString]] erforderlich sein. &lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.WideString|WideString]] setzt sich aus [[lib_de:System.WideChar|WideChars]] wie [[lib_de:System.UnicodeString|UnicodeString]] zusammen, verfügt aber über keine Referenzzählung.&lt;br /&gt;
&lt;br /&gt;
==Boolesche Typen==&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Boolean&#039;&#039;&#039;-Typ wird als ein &#039;&#039;&#039;Byte&#039;&#039;&#039;, ein &#039;&#039;&#039;ByteBool&#039;&#039;&#039;-Typ wird als ein &#039;&#039;&#039;Byte&#039;&#039;&#039;, ein &#039;&#039;&#039;WordBool&#039;&#039;&#039;-Typ wird als ein &#039;&#039;&#039;Word&#039;&#039;&#039; und ein &#039;&#039;&#039;LongBool&#039;&#039;&#039;-Typ wird als ein &#039;&#039;&#039;Longint&#039;&#039;&#039; gespeichert.&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Boolean&#039;&#039;&#039;-Typ kann die Werte 0 (&#039;&#039;&#039;False&#039;&#039;&#039;) und 1 (&#039;&#039;&#039;True&#039;&#039;&#039;) annehmen. Die Typen &#039;&#039;&#039;ByteBool&#039;&#039;&#039;, &#039;&#039;&#039;WordBool&#039;&#039;&#039; und &#039;&#039;&#039;LongBool&#039;&#039;&#039; können die Werte 0 (&#039;&#039;&#039;False&#039;&#039;&#039;) oder ungleich 0 (&#039;&#039;&#039;True&#039;&#039;&#039;) annehmen.&lt;br /&gt;
&lt;br /&gt;
==Aufzählungstypen==&lt;br /&gt;
&lt;br /&gt;
Ein Aufzählungstyp wird als ein Byte ohne Vorzeichen gespeichert, wenn die Aufzählung nicht mehr als 256 Werte umfasst und der Typ im Status &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;{$Z1}&amp;lt;/span&amp;gt; (Voreinstellung) deklariert wurde. Enthält der Aufzählungstyp mehr als 256 Werte oder wurde er im Status &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;{$Z2}&amp;lt;/span&amp;gt; deklariert, wird er als ein Word ohne Vorzeichen gespeichert. Wird ein Aufzählungstyp im Status &amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;{$Z4}&amp;lt;/span&amp;gt; deklariert, wird er als ein Double Word ohne Vorzeichen gespeichert.&lt;br /&gt;
&lt;br /&gt;
==Reelle Typen==&lt;br /&gt;
&lt;br /&gt;
Reelle Typen speichern die binäre Entsprechung des Vorzeichens (&amp;lt;code&amp;gt;&#039;&#039;&#039;+&#039;&#039;&#039;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;/code&amp;gt;), eines Exponenten und einer &amp;lt;code&amp;gt;&#039;&#039;Mantisse&#039;&#039;&amp;lt;/code&amp;gt;. Ein reeller Wert wird in der folgenden Form dargestellt:&lt;br /&gt;
&lt;br /&gt;
 +/- &#039;&#039;significand&#039;&#039; * 2^&#039;&#039;exponent&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dabei wird für die &amp;lt;code&amp;gt;&#039;&#039;Mantisse&#039;&#039;&amp;lt;/code&amp;gt; links vom binären Dezimalpunkt ein einziges Bit verwendet (das heißt, &amp;lt;code&amp;gt;0 &amp;amp;lt;= &#039;&#039;Mantisse&#039;&#039; &amp;amp;lt; 2&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
In den folgenden Abbildungen befindet sich das höchstwertige Bit immer auf der linken Seite, das niedrigstwertige Bit immer auf der rechten Seite. Die Zahlen am oberen Rand geben die Breite jedes Feldes in Bit an. Die Elemente ganz links werden an den höchsten Adressen gespeichert. Bei einem &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039;-Wert wird beispielsweise &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; im ersten Byte, &amp;lt;code&amp;gt;&#039;&#039;f&#039;&#039;&amp;lt;/code&amp;gt; in den nächsten fünf Byte und &amp;lt;code&amp;gt;&#039;&#039;s&#039;&#039;&amp;lt;/code&amp;gt; im höchstwertigen Bit des letzten Byte gespeichert.&lt;br /&gt;
&lt;br /&gt;
===Der Typ Real48===&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit- und 64-Bit-Plattform wird eine &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039;-Zahl mit 6 Byte (48 Bit) in drei Felder unterteilt:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #000;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
39&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
8&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn gilt &amp;lt;code&amp;gt;0 &amp;amp;lt; &#039;&#039;e&#039;&#039; &amp;amp;lt;= 255&amp;lt;/code&amp;gt;, ergibt sich der Wert &amp;lt;code&amp;gt;&#039;&#039;v&#039;&#039;&amp;lt;/code&amp;gt; der Zahl folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;v&#039;&#039; = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(e-129)&amp;lt;/sup&amp;gt; * (1.f)&lt;br /&gt;
&lt;br /&gt;
Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt;, ist &amp;lt;code&amp;gt;v = 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der Typ &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039; eignet sich nicht zum Speichern von denormalisierten Werten, NaN-Werten (Not a Number = keine Zahl) und unendlichen Werten. Denormalisierte Zahlen werden zu null, wenn sie als &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039; gespeichert werden, und das Speichern von NaN- und unendlichen Werten in &#039;&#039;&#039;[[lib_de:System.Real48|Real48]]&#039;&#039;&#039;-Variablen führt zu einem Überlauffehler.&lt;br /&gt;
&lt;br /&gt;
===Der Typ Single===&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit- und 64-Bit-Plattform wird eine &#039;&#039;&#039;[[lib_de:System.Single|Single]]&#039;&#039;&#039;-Zahl mit 4 Byte (32 Bit) in drei Felder unterteilt: &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #000;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1 &lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
8&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
23&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;  &lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;        &lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wert &amp;lt;code&amp;gt;&#039;&#039;v&#039;&#039;&amp;lt;/code&amp;gt; der Zahl ergibt sich folgendermaßen: &lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt; 0 &amp;amp;lt; e &amp;amp;lt; 255&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(e-127)&amp;lt;/sup&amp;gt; * (1.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(-126)&amp;lt;/sup&amp;gt; * (0.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 255&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * Inf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 255&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt; ein NaN-Wert&lt;br /&gt;
&lt;br /&gt;
===Der Typ Double===&lt;br /&gt;
&lt;br /&gt;
Der generische Typ &#039;&#039;&#039;[[lib_de:System.Real|Real]]&#039;&#039;&#039; entspricht in seiner aktuellen Implementierung dem Typ &#039;&#039;&#039;[[lib_de:System.Double|Double]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit- und 64-Bit-Plattform wird eine &#039;&#039;&#039;[[lib_de:System.Double|Double]]&#039;&#039;&#039;-Zahl mit 8 Byte (64 Bit) in drei Felder unterteilt:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #000;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
11&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
52&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wert &amp;lt;code&amp;gt;&#039;&#039;v&#039;&#039;&amp;lt;/code&amp;gt; der Zahl ergibt sich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt; 0 &amp;amp;lt; e &amp;amp;lt; 2047&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(e-1023)&amp;lt;/sup&amp;gt; * (1.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(-1022)&amp;lt;/sup&amp;gt; * (0.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 0&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 2047&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * Inf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 2047&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt; ein NaN-Wert&lt;br /&gt;
&lt;br /&gt;
===Der Typ Extended===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039; bietet eine höhere Präzision auf 32-Bit Intel-Plattformen an als andere reelle Typen, ist aber weniger portierbar. Seien Sie vorsichtig, wenn Sie &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039; verwenden, wenn Sie gemeinsame und plattformübergreifende Datendateien erstellen. Beachten Sie, dass:&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Intel-Plattformen wird eine &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039;-Zahl mit 10 Byte (80 Bit) dargestellt. Eine &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039;-Zahl ist in vier Felder unterteilt.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #000;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
15&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000; background-color: #FFF&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
63&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #000;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Wert &amp;lt;code&amp;gt;&#039;&#039;v&#039;&#039;&amp;lt;/code&amp;gt; der Zahl ergibt sich folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;0 &amp;amp;lt;= e &amp;amp;lt; 32767&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * 2&amp;lt;sup&amp;gt;(e-16383)&amp;lt;/sup&amp;gt; * (i.f)&amp;lt;/code&amp;gt;&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 32767&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f = 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v = (-1)&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt; * Inf&amp;lt;/code&amp;gt;&lt;br /&gt;
*Wenn &amp;lt;code&amp;gt;e = 32767&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;f &amp;amp;lt;&amp;amp;gt; 0&amp;lt;/code&amp;gt;, dann ist &amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt; ein NaN-Wert&lt;br /&gt;
&lt;br /&gt;
Auf der 64-Bit Intel-Plattform und ARM-Plattform ist der &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039;-Typ jedoch ein Alias für &#039;&#039;&#039;[[lib_de:System.Double|Double]]&#039;&#039;&#039;, das nur 8 Bytes hat. Dieser Unterschied kann sich auf numerische Prezision in Gelitkomma-Operationen auswirken. Weitere Informationen finden Sie unter [[Gesichtspunkte für geräteübergreifende Delphi-Anwendungen|Gesichtspunkte für geräteübergreifende Delphi-Anwendungen]]. Auf MAC OS X-Systemen ist die Größe von &#039;&#039;&#039;[[lib_de:System.Extended|Extended]]&#039;&#039;&#039; 16 Bytes, um mit [[BCCOSX|BCCOSX]] kompatibel zu sein.&lt;br /&gt;
&lt;br /&gt;
===Der Typ Comp===&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;[[lib_de:System.Comp|Comp]]&#039;&#039;&#039;-Zahl mit 8 Byte (64 Bit) wird als 64-Bit-Integer mit Vorzeichen gespeichert.&lt;br /&gt;
&lt;br /&gt;
===Der Typ Currency===&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;[[lib_de:System.Currency|Currency]]&#039;&#039;&#039;-Zahl mit 8 Byte (64 Bit) wird als skalierter 64-Bit-Integer mit Vorzeichen gespeichert. Dabei stehen die 4 niedrigstwertigen Ziffern implizit für 4 Dezimalstellen.&lt;br /&gt;
&lt;br /&gt;
==Zeigertypen==&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit-Plattformen wird ein [[Zeiger und Zeigertypen (Delphi)|Zeigertyp]] in 4 Byte als 32-Bit-Adresse gespeichert.&lt;br /&gt;
&lt;br /&gt;
Auf [[64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen|64-Bit-Plattformen]] wird ein [[Zeiger und Zeigertypen (Delphi)|Zeigertyp]] in 8 Byte als 64-Bit-Adresse gespeichert. &lt;br /&gt;
&lt;br /&gt;
Der Zeigerwert &#039;&#039;&#039;nil&#039;&#039;&#039; wird als null gespeichert.&lt;br /&gt;
&lt;br /&gt;
==[[String-Typen (Delphi)#Kurze String-Typen|Kurze String]]-Typen==&lt;br /&gt;
&lt;br /&gt;
Die Anzahl der Bytes eines [[lib_de:System.ShortString|ShortString]]-Strings ergibt sich aus seiner maximalen Länge + 1. Das erste Byte enthält die aktuelle dynamische Länge des Strings, die folgenden Bytes seine Zeichen.&lt;br /&gt;
&lt;br /&gt;
Das Längenbyte und die Zeichen werden als Werte ohne Vorzeichen betrachtet. Die maximale Länge eines Strings beträgt 255 Zeichen plus ein Längenbyte (&amp;lt;span class=&amp;quot;codeInline&amp;quot;&amp;gt;string[255]&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Lange String-Typen==&lt;br /&gt;
&lt;br /&gt;
Eine String-Variable vom Typ &#039;&#039;&#039;[[lib_de:System.UnicodeString|UnicodeString]]&#039;&#039;&#039; oder &#039;&#039;&#039;[[lib_de:System.AnsiString|AnsiString]]&#039;&#039;&#039; belegt auf 32-Bit-Plattformen 4 Byte (und auf 64-Bit 8 Byte) im Arbeitsspeicher, die einen Zeiger auf einen dynamisch zugewiesenen String enthalten. Wenn eine String-Variable leer ist (also einen String der Länge 0 enthält), ist der String-Zeiger &#039;&#039;&#039;nil&#039;&#039;&#039;, und der String-Variable wird kein dynamischer Speicher zugewiesen. Andernfalls referenziert der String-Zeiger einen dynamisch zugewiesenen Speicherblock, der neben dem String-Wert Informationen zur Beschreibung des Strings enthält. Die nachfolgenden Tabellen zeigen den Aufbau eines Speicherblocks für einen langen String.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format des Datentyps [[lib_de:System.UnicodeString|UnicodeString]] (32 Bit und 64 Bit)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feld&lt;br /&gt;
! &#039;&#039;&#039;Codeseite&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Elementgröße&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Referenzzählung &#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Länge &#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;String-Daten&amp;lt;br /&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(Elementgröße)&lt;br /&gt;
! &#039;&#039;&#039; Nullterminiert&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039;Offset&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-12&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-10&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-8&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-4&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;0..(Länge - 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;Länge * Elementgröße&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Inhalt &#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
16-Bit-Codeseite der String-Daten&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
16-Bit-Elementgröße der String-Daten&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
32-Bit-Referenzzählung&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Länge in Zeichen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeichen-String mit Daten nach Größe der Elemente&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
NULL-Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Zahlen in der Zeile &#039;&#039;&#039;Offset&#039;&#039;&#039; stellen die Offsets der Felder dar, welche den String-Inhalt ab dem String-Zeiger beschreiben, der auf das Feld &#039;&#039;&#039;String-Daten&#039;&#039;&#039; zeigt (&amp;lt;code&amp;gt;Offset = 0&amp;lt;/code&amp;gt;), das einen Speicherblock mit den tatsächlichen String-Werten enthält. &lt;br /&gt;
&lt;br /&gt;
Das NULL-Zeichen am Ende des Speicherblocks eines Strings wird vom Compiler und den integrierten String-Routinen automatisch verwaltet. Durch das NULL-Zeichen kann ein String direkt in einen nullterminierten String umgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[Unicode in RAD Studio#Neuer String-Typ: UnicodeString|Neuer String-Typ: UnicodeString]].&lt;br /&gt;
&lt;br /&gt;
Für String-Literale erzeugt der Compiler einen Speicherblock mit demselben Aufbau wie bei einem dynamisch zugewiesenen String, aber mit einem Referenzzähler von -1. String-Konstanten werden genauso behandelt, der einzige Unterschied zu Literalen ist, dass eine String-Konstante ein Zeiger auf einen -1-Referenzzählerblock ist.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Zeiger auf eine String-Struktur (&#039;&#039;&#039;Quelle&#039;&#039;&#039;) einer String-Variable (&#039;&#039;&#039;Ziel&#039;&#039;&#039;) zugewiesen wird, schreibt der Referenzzähler vor, wie dies ausgeführt wird. Normalerweise wird der Referenzzähler für das Ziel erhöht und für die Quelle verringert, da beide Zeiger (Quelle und Ziel) nach der Zuweisung auf denselben Speicherblock zeigen.&lt;br /&gt;
&lt;br /&gt;
Wenn der Referenzzähler der Quelle -1 (String-Konstante) ist, wird eine neue Struktur mit einem Referenzzähler von 1 erstellt. Wenn das Ziel nicht &#039;&#039;&#039;nil&#039;&#039;&#039; ist, wird der Referenzzähler verringert. Wenn er 0 erreicht, wird die Struktur aus dem Speicher freigegeben. Wenn das Ziel &#039;&#039;&#039;nil&#039;&#039;&#039; ist, werden keine weiteren Aktionen dafür ausgeführt.&lt;br /&gt;
Das Ziel zeigt dann auf die neue Struktur. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
 destination : String;&lt;br /&gt;
 source : String;&lt;br /&gt;
...&lt;br /&gt;
destination := &#039;qwerty&#039;;  // reference count for the newly-created block of memory (containing the &#039;qwerty&#039; string) pointed at by the &amp;quot;destination&amp;quot; variable is now 1&lt;br /&gt;
...&lt;br /&gt;
source := &#039;asdfgh&#039;; // reference count for the newly-created block of memory (containing the &#039;asdfgh&#039; string) pointed at by the &amp;quot;destination&amp;quot; variable is now 1&lt;br /&gt;
destination := source; // reference count for the memory block containing the &#039;asdfgh&#039; string is now 2, and since reference count for the block of memory containing the &#039;qwerty&#039; string is now 0, the memory block is deallocated. &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn der Referenzzähler für die Quelle nicht -1 ist, wird er nicht erhöht, und das Ziel zeigt darauf.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  destination, destination2, destination3: String;&lt;br /&gt;
  destination := &#039;Sample String&#039;; //reference count for the newly-created block of memory containing &#039;Sample string&#039; is 1.&lt;br /&gt;
  destination2 := destination; //reference count for the block of memory containing &#039;Sample string&#039; is now 2.&lt;br /&gt;
  destination3 := destination; //reference count for the block of memory containing &#039;Sample string&#039; is now 3.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; String-Variablen können nicht auf eine Struktur mit einer Referenzzählung von 0 zeigen. Strukturen werden immer freigegeben, wenn sie die Referenzzählung 0 erreichen, und sie können nicht geändert werden, wenn ihre Referenzzählung -1 ist.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==WideString-Typen==&lt;br /&gt;
&lt;br /&gt;
Auf 32-Bit-Plattformen belegt eine WideString-Variable 4 Byte (und auf 64-Bit-Plattformen 8 Byte), die einen Zeiger auf einen dynamisch zugewiesenen String enthalten. Wenn eine WideString-Variable leer ist (also einen String der Länge 0 enthält), ist der String-Zeiger &#039;&#039;&#039;nil&#039;&#039;&#039;, und der Variable wird kein dynamischer Speicher zugewiesen. Andernfalls referenziert der String-Zeiger einen dynamisch zugewiesenen Speicherblock, der neben dem String-Wert eine Längenangabe von 32 Bit enthält. Die nachstehende Tabelle zeigt den Aufbau eines Speicherblocks für einen WideString in Windows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Aufbau des Speichers für einen WideString (32 Bit und 64 Bit) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Offset &#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-4&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;0..(Länge - 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;Länge&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Inhalt &#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
32-Bit-Längenindikator&amp;lt;br /&amp;gt; (in Byte)&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeichen-String&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
NULL-Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Länge des Strings ergibt sich aus der Anzahl der Bytes und ist damit doppelt so groß wie die Anzahl der Wide-Zeichen, die er enthält.&lt;br /&gt;
&lt;br /&gt;
Das NULL-Zeichen am Ende des Speicherblocks eines WideStrings wird vom Compiler und den integrierten String-Routinen automatisch verwaltet. Durch das NULL-Zeichen kann ein WideString direkt in einen nullterminierten String umgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
==Mengentypen==&lt;br /&gt;
&lt;br /&gt;
Eine Menge ist ein Array von Bits. Jedes Bit zeigt an, ob ein Element in der Menge enthalten ist oder nicht. Da die maximale Anzahl der Elemente einer Menge 256 beträgt, belegt eine Menge nie mehr als 32 Byte. Die Anzahl der Bytes, die eine bestimmte Menge belegt, ergibt sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
 (&#039;&#039;Max&#039;&#039; div 8) - (&#039;&#039;Min&#039;&#039; div 8) + 1&lt;br /&gt;
&lt;br /&gt;
wobei &amp;lt;code&amp;gt;&#039;&#039;Max&#039;&#039;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&#039;&#039;Min&#039;&#039;&amp;lt;/code&amp;gt; die obere und die untere Grenze des Basistyps der Menge sind. Die Byte-Anzahl eines bestimmten Elements &#039;&#039;E&#039;&#039; ergibt sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
 (&#039;&#039;E&#039;&#039; div 8) - (&#039;&#039;Min&#039;&#039; div 8)&lt;br /&gt;
&lt;br /&gt;
und die Bitanzahl in diesem Byte ergibt sich aus&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;E&#039;&#039; mod 8&lt;br /&gt;
&lt;br /&gt;
wobei &amp;lt;code&amp;gt;&#039;&#039;E&#039;&#039;&amp;lt;/code&amp;gt; der ordinale Wert des Elements ist. Der Compiler speichert Mengen nach Möglichkeit in CPU-Registern. Eine Menge bleibt jedoch immer im Speicher, wenn sie größer als der plattformabhängige Integertyp ist oder im Quelltext des Programms auf die Adresse der Menge zugegriffen wird.&lt;br /&gt;
&lt;br /&gt;
==Statische Array-Typen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform belegt eine statische Array-Variable 4 Byte im Speicher (und 8 Byte auf der 64-Bit-Plattform), die einen Zeiger auf ein statisch zugewiesenes Array enthalten. Ein statisches Array wird als fortlaufende Folge von Variablen des Komponententyps des Arrays gespeichert. Die Komponenten mit den niedrigsten Indizes werden an der niedrigsten Speicheradresse abgelegt. Bei einem mehrdimensionalen Array liegt die äußerste rechte Dimension an der Basis des belegten Speicherblocks.&lt;br /&gt;
&lt;br /&gt;
==Dynamische Array-Typen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform belegt eine dynamische Array-Variable 4 Byte im Speicher (und 8 Byte auf der 64-Bit-Plattform), die einen Zeiger auf ein dynamisch zugewiesenes Array enthalten. Ist eine Variable leer (also nicht initialisiert), ist der Zeiger &#039;&#039;&#039;nil&#039;&#039;&#039;, und der Variable wird kein dynamischer Speicher zugewiesen. Andernfalls referenziert die Variable einen dynamisch zugewiesenen Speicherblock, der neben dem Array eine Längenangabe von 32 Bit (unter Win64 von 64 Bit) und einen Referenzzähler von 32 Bit enthält. Die nachstehende Tabelle zeigt den Aufbau eines Speicherblocks für ein dynamisches Array.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Aufbau des Speichers für ein dynamisches Array (32 Bit und 64 Bit) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Offset 32 Bit&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-8&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-4&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;0..(Länge * Größe_des_Elements - 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Offset 64 Bit&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-12&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;-8&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;code&amp;gt;0..(Länge * Größe_des_Elements - 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
&#039;&#039;&#039; Inhalt &#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
32-Bit-Referenzzählung&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
32 Bit oder 64 Bit auf 64-Bit-Plattformen&amp;lt;br /&amp;gt;Längenindikator&amp;lt;br /&amp;gt; (Anzahl der Elemente)&lt;br /&gt;
| style=&amp;quot;text-align: center; vertical-align: top;&amp;quot; |&lt;br /&gt;
Array-Elemente&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Record-Typen==&lt;br /&gt;
&lt;br /&gt;
Wenn ein Record-Typ mit dem Status &amp;lt;code&amp;gt;{$A+}&amp;lt;/code&amp;gt; (Vorgabe) deklariert wird und die Deklaration nicht den Modifizierer &#039;&#039;&#039;packed&#039;&#039;&#039; enthält, handelt es sich um einen ungepackten Record-Typ. Die Felder des Records werden so ausgerichtet, dass die CPU entsprechend der jeweiligen Plattform möglichst effizient darauf zugreifen kann. Die Ausrichtung wird vom Typ des jeweiligen Feldes gesteuert. Jeder Datentyp besitzt eine implizite Ausrichtungsmaske, die vom Compiler automatisch berechnet wird. Sie kann die Werte 1, 2, 4 oder 8 haben und entspricht dem Byte-Raster, in dem ein Wert dieses Typs für den optimalen Zugriff im Speicher angeordnet werden muss. Die folgende Tabelle enthält die Ausrichtungsmasken für alle Datentypen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Ausrichtungsmasken für Typen (nur 32 Bit) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039; Typ &#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Ausrichtung &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Ordinale Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Größe des Typs (1, 2, 4 oder 8)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Reelle Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
2 für &#039;&#039;Real48&#039;&#039;, 4 für &#039;&#039;Single&#039;&#039;, 8 für &#039;&#039;Double&#039;&#039; und &#039;&#039;Extended&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Kurze String-Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Array-Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Entspricht dem Typ der Array-Elemente&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Record-Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Die größte Ausrichtungsmaske der Felder im Record&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Mengentypen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Größe des Typs bei 1, 2 oder 4, andernfalls 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Alle anderen Typen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Werden von der $A-Direktive festgelegt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die korrekte Ausrichtung der Felder in einem ungepackten Record-Typ zu gewährleisten, fügt der Compiler vor den Feldern mit der Ausrichtungsmaske 2 ein leeres Byte ein. Bei Feldern mit der Ausrichtungsmaske 4 werden nach Bedarf bis zu 3 leere Byte eingefügt. Schließlich erweitert der Compiler die gesamte Größe des Records bis zu der Byte-Grenze, die sich aus der größten Ausrichtungsmaske der enthaltenen Felder ergibt.&lt;br /&gt;
&lt;br /&gt;
====Implizites Packen von Feldern mit einer gemeinsamen Typspezifikation====&lt;br /&gt;
&lt;br /&gt;
In früheren Versionen des {{Delphi}}-Compilers, wie {{Delphi}} 7 und vorher, wurde die Ausrichtung &#039;&#039;&#039;packed&#039;&#039;&#039; implizit für Felder angewendet, die gemeinsam deklariert wurden, d. h., für Felder, die eine gemeinsame Typspezifikation haben. Neuere Compiler können dieses Verhalten erzeugen, wenn Sie die Direktive {$OLDTYPELAYOUT ON} angeben. Diese Direktive packt (auf Byte-Basis) die Felder mit einer gemeinsamen Typspezifikation, auch wenn in der Deklaration der Modifizierer &#039;&#039;&#039;packed&#039;&#039;&#039; nicht enthalten ist und der Record-Typ nicht mit dem Status &amp;lt;code&amp;gt;{$A-}&amp;lt;/code&amp;gt; deklariert wurde. &lt;br /&gt;
&lt;br /&gt;
Betrachten Sie folgende Deklaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 {$OLDTYPELAYOUT ON}&lt;br /&gt;
 type&lt;br /&gt;
   TMyRecord = record&lt;br /&gt;
     A, B: Extended;&lt;br /&gt;
     C: Extended;&lt;br /&gt;
   end;&lt;br /&gt;
 {$OLDTYPELAYOUT OFF}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; werden gepackt (an Byte-Grenzen ausgerichtet), weil die Direktive {$OLDTYPELAYOUT ON} angegeben ist und &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; dieselbe Typspezifikation verwenden. Für das separat deklarierte Feld &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; verwendet der Compiler aber das Standardverhalten und füllt die Struktur mit unbenutzten Bytes auf, damit das Feld an einer Quadword-Grenze erscheint.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Record-Typ mit dem Status &amp;lt;code&amp;gt;{$A-}&amp;lt;/code&amp;gt; deklariert wird oder die Deklaration den Modifizierer &#039;&#039;&#039;packed&#039;&#039;&#039; enthält, werden die Felder des Records nicht ausgerichtet, sondern an aufeinander folgenden Offsets abgelegt. Die Gesamtgröße eines solchen gepackten Records ergibt sich aus der Größe aller Felder. Da sich die Datenausrichtung ändern kann, bieten sich gepackte Record-Typen für alle Record-Strukturen an, die auf die Festplatte geschrieben oder im Speicher an ein Modul übergeben werden sollen, das mit einer anderen Version des Compilers compiliert wird.&lt;br /&gt;
&lt;br /&gt;
==Dateitypen==&lt;br /&gt;
&lt;br /&gt;
Dateitypen werden als Records dargestellt. Typisierte und untypisierte Dateien belegen auf 32-Bit-Plattformen 592 Byte und auf 64-Bit-Plattformen 616 Byte, die sich wie folgt verteilen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
   TFileRec = packed record&lt;br /&gt;
     Handle: NativeInt;&lt;br /&gt;
     Mode: word;&lt;br /&gt;
     Flags: word;&lt;br /&gt;
     case Byte of&lt;br /&gt;
       0: (RecSize: Cardinal);&lt;br /&gt;
       1: (BufSize: Cardinal;&lt;br /&gt;
    	   BufPos: Cardinal;&lt;br /&gt;
    	   BufEnd: Cardinal;&lt;br /&gt;
    	   BufPtr: _PAnsiChr;&lt;br /&gt;
    	   OpenFunc: Pointer;&lt;br /&gt;
    	   InOutFunc: Pointer;&lt;br /&gt;
    	   FlushFunc: Pointer;&lt;br /&gt;
    	   CloseFunc: Pointer;&lt;br /&gt;
    	   UserData: array[1..32] of Byte;&lt;br /&gt;
    	   Name: array[0..259] of WideChar; );&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Textdateien belegen auf 32-Bit-Plattformen 730 Byte und auf 64-Bit-Plattformen 754 Byte, die sich wie folgt verteilen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 type&lt;br /&gt;
   TTextBuf = array[0..127] of Char;&lt;br /&gt;
   TTextRec = packed record&lt;br /&gt;
     Handle: NativeInt;&lt;br /&gt;
     Mode: word;&lt;br /&gt;
     Flags: word;&lt;br /&gt;
     BufSize: Cardinal;&lt;br /&gt;
     BufPos: Cardinal;&lt;br /&gt;
     BufEnd: Cardinal;&lt;br /&gt;
     BufPtr: _PAnsiChr;&lt;br /&gt;
     OpenFunc: Pointer;&lt;br /&gt;
     InOutFunc: Pointer;&lt;br /&gt;
     FlushFunc: Pointer;&lt;br /&gt;
     CloseFunc: Pointer;&lt;br /&gt;
     UserData: array[1..32] of Byte;&lt;br /&gt;
     Name: array[0..259] of WideChar;&lt;br /&gt;
     Buffer: TTextBuf; //&lt;br /&gt;
     CodePage: Word;&lt;br /&gt;
     MBCSLength: ShortInt;&lt;br /&gt;
     MBCSBufPos: Byte;&lt;br /&gt;
     case Integer of&lt;br /&gt;
       0: (MBCSBuffer: array[0..5] of _AnsiChr);&lt;br /&gt;
       1: (UTF16Buffer: array[0..2] of WideChar);&lt;br /&gt;
   end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Handle&amp;lt;/code&amp;gt; enthält das Handle der Datei (wenn die Datei geöffnet ist).&lt;br /&gt;
&lt;br /&gt;
Das Feld &amp;lt;code&amp;gt;Mode&amp;lt;/code&amp;gt; kann einen der folgenden Werte annehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 const&lt;br /&gt;
   fmClosed = $D7B0;&lt;br /&gt;
   fmInput= $D7B1;&lt;br /&gt;
   fmOutput = $D7B2;&lt;br /&gt;
   fmInOut= $D7B3;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fmClosed&amp;lt;/code&amp;gt; gibt dabei an, dass die Datei geschlossen ist. &amp;lt;code&amp;gt;fmInput&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;fmOutput&amp;lt;/code&amp;gt; geben an, dass es sich bei der Datei um eine Textdatei handelt, die zurückgesetzt (&amp;lt;code&amp;gt;fmInput&amp;lt;/code&amp;gt;) oder neu geschrieben (&amp;lt;code&amp;gt;fmOutput&amp;lt;/code&amp;gt;) wurde. &amp;lt;code&amp;gt;fmInOut&amp;lt;/code&amp;gt; gibt an, dass die Datei eine typisierte oder eine untypisierte Datei ist, die zurückgesetzt oder neu geschrieben wurde. Jeder andere Wert gibt an, dass die Dateivariable nicht zugeordnet (und damit nicht initialisiert) wurde.&lt;br /&gt;
&lt;br /&gt;
Das Feld &amp;lt;code&amp;gt;UserData&amp;lt;/code&amp;gt; wird für benutzerdefinierte Routinen freigehalten, um Daten zu speichern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; enthält den Dateinamen. Dieser besteht aus einer Folge von Zeichen, die mit einem Null-Zeichen (#0) abgeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Bei typisierten und untypisierten Dateien enthält &amp;lt;code&amp;gt;RecSize&amp;lt;/code&amp;gt; die Record-Länge in Byte. Das Feld &amp;lt;code&amp;gt;Private&amp;lt;/code&amp;gt; ist reserviert und wird nicht verwendet.&lt;br /&gt;
&lt;br /&gt;
Bei Textdateien ist &amp;lt;code&amp;gt;BufPtr&amp;lt;/code&amp;gt; ein Zeiger auf einen Puffer mit &amp;lt;code&amp;gt;BufSize&amp;lt;/code&amp;gt; Byte, &amp;lt;code&amp;gt;BufPos&amp;lt;/code&amp;gt; ist der Index des nächsten zu lesenden oder zu schreibenden Zeichens des Puffers. &amp;lt;code&amp;gt;BufEnd&amp;lt;/code&amp;gt; entspricht der Anzahl der gültigen Zeichen im Puffer. &amp;lt;code&amp;gt;OpenFunc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;InOutFunc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FlushFunc&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;CloseFunc&amp;lt;/code&amp;gt; sind Zeiger auf die E/A-Routinen, die die Datei verwalten. Weitere Informationen zu diesem Thema finden Sie unter &amp;quot;Gerätefunktionen&amp;quot;. &amp;lt;code&amp;gt;Flags&amp;lt;/code&amp;gt; legt die Art des Zeilenumbruchs fest.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Bit 0 nicht gesetzt&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
LF-Zeilenumbruch&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Bit 0 gesetzt&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
CRLF-Zeilenumbruch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Alle anderen &amp;lt;code&amp;gt;Flags&amp;lt;/code&amp;gt;-Bits sind für die zukünftige Verwendung reserviert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Für den Typ &#039;&#039;&#039;UnicodeString&#039;&#039;&#039; (dem Standard-String-Typ in {{Delphi}}) sind die verschiedenen Stream-Typen aus der Unit &#039;&#039;&#039;Classes&#039;&#039;&#039; (&#039;&#039;&#039;TFileStream&#039;&#039;&#039;, &#039;&#039;&#039;TStreamReader&#039;&#039;&#039;, &#039;&#039;&#039;TStreamWriter&#039;&#039;&#039; usw.) nützlicher, weil die älteren Dateitypen (besonders ältere Textdateitypen) nur über eine begrenzte Unicode-Funktionalität verfügen. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prozedurale Typen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform wird ein Prozedurzeiger als 32-Bit-Zeiger auf den Eintrittspunkt einer Prozedur oder Funktion gespeichert. Ein Methodenzeiger wird als 32-Bit-Zeiger auf den Eintrittspunkt einer Methode gespeichert, dem ein 32-Bit-Zeiger auf ein Objekt folgt.&lt;br /&gt;
&lt;br /&gt;
Auf der 64-Bit-Plattform wird ein Prozedurzeiger als 64-Bit-Zeiger auf den Eintrittspunkt einer Prozedur oder Funktion gespeichert. Ein Methodenzeiger wird als 64-Bit-Zeiger auf den Eintrittspunkt einer Methode gespeichert, dem ein 64-Bit-Zeiger auf ein Objekt folgt.&lt;br /&gt;
&lt;br /&gt;
==Klassentypen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform (Win32, OSX, iOS und Android) wird der Wert eines Klassentyps als 32-Bit-Zeiger auf eine Instanz der Klasse (bzw. als 64-Bit-Zeiger auf der 64-Bit-Plattform) gespeichert. Die Instanz einer Klasse wird auch als &#039;&#039;Objekt&#039;&#039; bezeichnet. Das interne Datenformat eines Objekts gleicht dem eines Records. Die Felder eines Objekts werden in der Reihenfolge ihrer Deklaration als fortlaufende Folge von Variablen gespeichert. Die Felder werden wie bei einem ungepackten Record-Typ immer ausgerichtet. Die Ausrichtung entspricht deshalb der größten Ausrichtungsmaske der Felder im &#039;&#039;Objekt&#039;&#039;. Alle von einer Vorfahrklasse geerbten Felder werden vor den neuen Feldern gespeichert, die in der abgeleiteten Klasse definiert wurden.&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform ist das erste, 4 Byte große Feld aller Objekte (bzw. auf der 64-Bit-Plattform das erste, 8 Byte große Feld) ein Zeiger auf die &#039;&#039;virtuelle Methodentabelle&#039;&#039; (VMT) der Klasse. Es gibt nur eine VMT pro Klasse (und nicht eine für jedes Objekt). Verschiedene Klassentypen verwenden nie dieselbe VMT. VMTs werden automatisch vom Compiler erstellt und nie direkt von einem Programm geändert. Ebenso werden die Zeiger auf VMTs automatisch von den Konstruktormethoden in den erstellten Objekten gespeichert und nie direkt von einem Programm geändert.&lt;br /&gt;
&lt;br /&gt;
Die folgende Tabelle zeigt die Struktur einer VMT. Auf der 32-Bit-Plattform besteht eine VMT bei positiven Offsets aus einer Liste mit 32-Bit-Methodenzeigern (64-Bit-Methodenzeiger auf der 64-Bit-Plattform). Für jede benutzerdefinierte virtuelle Methode des Klassentyps ist ein Zeiger vorhanden. Die Zeiger sind in der Reihenfolge der Deklaration angeordnet. Jeder Eintrag enthält die Adresse des Eintrittspunkts der entsprechenden virtuellen Methode. Dieses Layout ist zur V-Tabelle von C++ und zu COM kompatibel. Bei negativen Offsets enthält eine VMT die Anzahl der Felder, die in {{Delphi}} intern implementiert sind. In einer Anwendung sollten diese Informationen mit den Methoden von TObject abgerufen werden, da sich dieses Layout bei künftigen Implementierungen von {{Delphi}} ändern kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Struktur der virtuellen Methodentabelle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&amp;lt;br /&amp;gt;Win32, OSX&lt;br /&gt;
! Offset&amp;lt;br /&amp;gt;Win64&lt;br /&gt;
! Offset&amp;lt;br /&amp;gt;iOS/ARM, Android/ARM&lt;br /&gt;
! Offset&amp;lt;br /&amp;gt;iOS/Simulator&lt;br /&gt;
! &#039;&#039;&#039; Typ &#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Beschreibung &#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039; Konstante in System.pas &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-88&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-200&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-108&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-96&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die virtuelle Methodentabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtSelfPtr&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-84&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-192&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-104&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-92&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Interface-Tabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtIntfTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-80&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-184&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-100&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-88&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Informationstabelle zur Automatisierung (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtAutoTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-76&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-176&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-96&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-84&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Instanzeninitialisierungstabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtInitTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-72&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-168&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-92&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-80&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Typinformationstabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtTypeInfo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-68&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-160&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-88&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-76&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Felddefinitionstabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtFieldTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-152&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-84&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-72&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die Methodendefinitionstabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtMethodTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-60&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-144&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-80&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-68&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf die dynamische Methodentabelle (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtDynamicTable&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-56&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-136&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-76&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf einen kurzen String, der den Klassennamen enthält&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtClassName&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-52&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-128&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-72&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-60&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Cardinal&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Instanzgröße in Byte&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtInstanceSize&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-48&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-120&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-68&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-56&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf einen Zeiger auf die Vorfahrklasse (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtParent&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
n/v&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
n/v&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-52&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode __ObjAddRef&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtObjAddRef&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
n/v&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
n/v&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-60&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-48&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode __ObjRelease&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtObjRelease&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-44&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-112&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-56&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-44&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode Equals&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtEquals&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-40&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-104&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-52&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-40&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode GetHashCode&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtGetHashCode&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-36&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-96&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-48&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-36&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode ToString&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtToString&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-88&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-44&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger auf den Eintrittspunkt der Methode &#039;&#039;SafecallException&#039;&#039; (oder &#039;&#039;&#039;nil&#039;&#039;&#039;)&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtSafeCallException&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-28&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-80&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-40&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-28&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;AfterConstruction&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtAfterConstruction&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-24&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-72&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-36&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-24&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;BeforeDestruction&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtBeforeDestruction&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-20&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-20&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;Dispatch&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtDispatch&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-16&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-56&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-28&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-16&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;DefaultHandler&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtDefaultHandler&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-12&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-48&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-24&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-12&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;NewInstance&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtNewInstance&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-8&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-40&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-20&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-8&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der Methode &#039;&#039;FreeInstance&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtFreeInstance&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-16&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
-4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt des Destruktors &#039;&#039;Destroy&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
vmtDestroy&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
0&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
0&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
0&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
0&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der ersten benutzerdefinierten virtuellen Methode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
8&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Zeiger&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&lt;br /&gt;
Eintrittspunkt der zweiten benutzerdefinierten virtuellen Methode&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Klassenreferenztypen==&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform (Win32, OSX, iOS und Android) wird der Wert einer Klassenreferenz als 32-Bit-Zeiger auf die virtuelle Methodentabelle (VMT) einer Klasse gespeichert.&lt;br /&gt;
&lt;br /&gt;
Auf der 64-Bit-Plattform (Win64) wird der Wert einer Klassenreferenz als 64-Bit-Zeiger auf die virtuelle Methodentabelle (VMT) einer Klasse gespeichert.&lt;br /&gt;
&lt;br /&gt;
==Variante Typen==&lt;br /&gt;
&lt;br /&gt;
Varianten sind beim Implementieren von variantenbezogenen RTL-Funktionen vom Boxing und Unboxing von Daten in einen Objekt-Wrapper sowie von {{Delphi}}-Hilfsklassen abhängig.&lt;br /&gt;
&lt;br /&gt;
Auf der 32-Bit-Plattform wird eine Variante als 16-Byte-Record gespeichert, der einen Typcode und einen Wert (oder eine Referenz auf einen Wert) des durch den Code bezeichneten Typs enthält. Auf der 64-Bit-Plattform wird eine Variante als 24-Byte-Record gespeichert. Die Units [[lib_de:System|System]] und [[lib_de:System.Variants|System.Variants]] definieren Konstanten und Typen für Varianten.&lt;br /&gt;
&lt;br /&gt;
Der Typ [[lib_de:System.TVarData|TVarData]] steht für die interne Struktur einer [[lib_de:System.Variant|Variante]] (in Windows entspricht er dem Typ [[lib_de:System.Variant|Variant]], der von COM und der Win32-API verwendet wird). Mit dem Typ [[lib_de:System.TVarData|TVarData]] kann bei einer Typumwandlung von Varianten auf die interne Struktur einer Variable zugegriffen werden. Der Record [[lib_de:System.TVarData|TVarData]] enthält die folgenden Felder:&lt;br /&gt;
&lt;br /&gt;
* Das Feld &#039;&#039;&#039;VType&#039;&#039;&#039; mit dem Typ [[lib_de:System.TVarType|TVarType]] hat die Größe [[lib_de:System.Word|Word]] (16 Bit). &#039;&#039;&#039;VType&#039;&#039;&#039; enthält den Typcode der Variante in den niederwertigen 12 Bit (die Bits, die von der Konstante [[Lib en:System#Konstanten|varTypeMask]] &amp;lt;code&amp;gt;= $FFF&amp;lt;/code&amp;gt; definiert werden). Zusätzlich zeigt das Bit [[Lib en:System#Konstanten|varArray]] &amp;lt;code&amp;gt;= $2000&amp;lt;/code&amp;gt; an, ob es sich bei der Variante um ein Array handelt. Das Bit [[Lib en:System#Konstanten|varByRef]] (&amp;lt;code&amp;gt;= $4000&amp;lt;/code&amp;gt;) gibt an, ob die Variante eine Referenz oder einen Wert enthält.&lt;br /&gt;
* Die Felder &#039;&#039;&#039;Reserved1&#039;&#039;&#039;, &#039;&#039;&#039;Reserved2&#039;&#039;&#039; und &#039;&#039;&#039;Reserved3&#039;&#039;&#039; ([[lib_de:System.Word|Word]]-Größe) werden nicht verwendet.&lt;br /&gt;
&lt;br /&gt;
Der Inhalt der restlichen 8 Byte (32-Bit-Plattform) oder 16 Byte (64-Bit-Plattform) eines [[lib_de:System.TVarData|TVarData]]-Records hängt folgendermaßen vom Feld &#039;&#039;&#039;VType&#039;&#039;&#039; ab:&lt;br /&gt;
&lt;br /&gt;
* Wenn weder das Bit [[Lib en:System#Konstanten|varArray]] noch das Bit [[Lib en:System#Konstanten|varByRef]] gesetzt ist, enthält die Variante einen Wert des gegebenen Typs.&lt;br /&gt;
* Wenn das Bit [[Lib en:System#Konstanten|varArray]] gesetzt ist, enthält die Variante einen Zeiger auf eine [[lib_de:System.TVarArray|TVarArray]]-Struktur, die das Array definiert. Der Typ jedes Array-Elements ist durch die [[Lib en:System#Konstanten|varTypeMask]]-Bits des Feldes &#039;&#039;&#039;VType&#039;&#039;&#039; festgelegt.&lt;br /&gt;
* Wird das Bit [[Lib en:System#Konstanten|varByRef]] gesetzt, enthält die Variante eine Referenz auf einen Wert des Typs, der durch die Bits &#039;&#039;&#039;varTypeMask&#039;&#039;&#039; und &#039;&#039;&#039;varArray&#039;&#039;&#039; im Feld &#039;&#039;&#039;VType&#039;&#039;&#039; definiert ist.&lt;br /&gt;
&lt;br /&gt;
Der Typcode [[lib_de:System.TVarType|varString]] ist &amp;quot;private&amp;quot;. Varianten, die einen [[lib_de:System.TVarType|varString]]-Wert enthalten, sollten nicht an Nicht-{{Delphi}}-Funktionen übergeben werden. Auf der Windows-Plattform sorgt die Automatisierungsunterstützung von {{Delphi}} dafür, dass [[lib_de:System.TVarType|varString]]-Varianten vor der Übergabe an externe Funktionen automatisch in [[lib_de:System.TVarType|varOleStr]]-Varianten umgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Speicherverwaltung|Speicherverwaltung]]&lt;br /&gt;
* [[64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen|64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen]]&lt;br /&gt;
* [[Überblick über Datentypen (Delphi)|Überblick über Datentypen (Delphi)]]&lt;br /&gt;
* [[String-Typen (Delphi)|String-Typen (Delphi)]]&lt;br /&gt;
* [[Strukturierte Typen|Strukturierte Typen (Delphi)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:Delphi-Sprachreferenz]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=XLINK.EXE:_Der_macOS-Linker&amp;diff=208929</id>
		<title>XLINK.EXE: Der macOS-Linker</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=XLINK.EXE:_Der_macOS-Linker&amp;diff=208929"/>
		<updated>2016-06-24T10:56:40Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Befehlszeilenhilfsprogramme - Index}}&lt;br /&gt;
&lt;br /&gt;
XLINK.EXE ist die Befehlszeilenoberfläche von [[XLINK|XLINK]], der C++-Linker für Mac OS X. &lt;br /&gt;
&lt;br /&gt;
==Befehlszeilenhilfe==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;C:\&amp;amp;gt;xlink&lt;br /&gt;
 Turbo Incremental Link 1.00 Copyright (c) 1997-2011 {{Company}} Technologies, Inc.&lt;br /&gt;
 Syntax: ILINK objfiles, exefile, mapfile, libfiles, deffile, resfiles&lt;br /&gt;
 @xxxx indicates use response file xxxx&lt;br /&gt;
 General Options:                       -Af:nnnn Specify file alignment&lt;br /&gt;
  -C       Clear state before linking   -Ao:nnnn Specify object alignment&lt;br /&gt;
  -wxxx    Warning control              -ax      Specify application type&lt;br /&gt;
  -Enn     Max number of errors         -b:xxxx  Specify image base addr&lt;br /&gt;
  -r       Verbose linking              -Txx     Specify output file type&lt;br /&gt;
  -q       Suppress banner              -H:xxxx  Specify heap reserve size&lt;br /&gt;
  -c       Case sensitive linking       -Hc:xxxx Specify heap commit size&lt;br /&gt;
  -v       Full debug information       -S:xxxx  Specify stack reserve size&lt;br /&gt;
  -Gn      No state files               -Sc:xxxx Specify stack commit size&lt;br /&gt;
  -Gi      Generate import library      -Vd.d    Specify Windows version&lt;br /&gt;
  -GD      Generate .DRC file           -Dstring Set image description&lt;br /&gt;
 Map File Control:                      -Vd.d    Specify subsystem version&lt;br /&gt;
  -M       Map with mangled names       -Ud.d    Specify image user version&lt;br /&gt;
  -m       Map file with publics        -GC      Specify image comment str&lt;br /&gt;
  -s       Detailed segment map         -GF      Set image flags&lt;br /&gt;
  -x       No map                       -Gl      Static package&lt;br /&gt;
 Paths:                                 -Gpd     Design time only package&lt;br /&gt;
  -I       Intermediate output dir      -Gpr     Runtime only package&lt;br /&gt;
  -L       Specify library search paths -GS      Set section flags&lt;br /&gt;
  -j       Specify object search paths  -Gt      Fast TLS&lt;br /&gt;
 Image Control:                         -Gz      Do image checksum&lt;br /&gt;
  -d       Delay load a .DLL            -Rr      Replace resources&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Erzeugen der Ausgabe==&lt;br /&gt;
&lt;br /&gt;
Mit der Optionsfamilie &amp;lt;code&amp;gt;-Txx&amp;lt;/code&amp;gt; können Sie das Erzeugen der Ausgabe steuern:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Option&lt;br /&gt;
! Befehl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;-Tmd&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Mach-dylib erzeugen&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;-Tme&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Ausführbare Mach-Datei erzeugen&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;-Tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Mach-Package erzeugen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Festlegen der Bibliotheken==&lt;br /&gt;
&lt;br /&gt;
Die Suchpfade für die XLINK-Bibliothek können mit den folgenden Optionen gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Option&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;-Fr&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Legt das logische Stammverzeichnis: &amp;lt;code&amp;gt;$(SYSROOT)&amp;lt;/code&amp;gt; fest. Diese Option muss einmal angegeben werden. (Für [[BCCOSX.EXE: Der C++-Compiler für OS X|BCCOSX]] würden Sie die Option &amp;lt;code&amp;gt;--sysroot&amp;lt;/code&amp;gt; verwenden.)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;-Fp&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Gibt die Remote-Bibliothekspfade an. Pfaden, die mit &amp;lt;code&amp;gt;-Fp&amp;lt;/code&amp;gt; angegeben werden, wird &amp;lt;code&amp;gt;$(SYSROOT)&amp;lt;/code&amp;gt; vorangestellt und das Ergebnis dem Bibliothekspfad hinzugefügt. In einem {{Variables|Product}}-Projekt werden die Remote-Bibliotheken in dem Fenster [[SDK-Manager|SDK-Manager]] angegeben (Sie sollten die SDK-Remote-Pfade bearbeiten). Diese Option kann mehrmals angegeben werden. Dieser Option sollte die Option &amp;lt;code&amp;gt;-Fr&amp;lt;/code&amp;gt; vorausgehen.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;-L&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Legt die lokalen Bibliothekssuchpfade fest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sie können die Optionen &amp;lt;code&amp;gt;-L&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-Fp&amp;lt;/code&amp;gt; verschachteln.&lt;br /&gt;
&lt;br /&gt;
==Festlegen des Frameworks==&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie die Option &amp;lt;code&amp;gt;-Ff&amp;lt;/code&amp;gt;, um ein bestimmtes Framework einzubinden.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Option&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;-Ff&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Weist XLINK an, das angegebene Framework einzubinden. Um beispielsweise das Framework &#039;&#039;&#039;Carbon&#039;&#039;&#039; einzubinden, geben Sie &amp;lt;code&amp;gt;-FfCarbon&amp;lt;/code&amp;gt; an.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;[[--framework|--framework]]&amp;lt;/code&amp;gt; (BCCOSX-Option)&lt;br /&gt;
|&lt;br /&gt;
Weist BCCOSX an, das angegebene Framework einzubinden. Die auf diese Weise angegebenen Framework-Namen werden mit der Option &amp;lt;code&amp;gt;-Ff&amp;lt;/code&amp;gt; an XLINK umgeleitet.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In einem {{Variables|Product}}-Projekt können die Frameworks in dem Fenster [[SDK-Manager|SDK-Manager]] angegeben werden (Sie sollten die SDK-Remote-Pfade bearbeiten).&lt;br /&gt;
&lt;br /&gt;
==Parameter für ausführbare Header==&lt;br /&gt;
&lt;br /&gt;
Einer dynamischen OS X-Bibliothek ist ein &#039;&#039;&#039;Installationsname&#039;&#039;&#039; (oder &#039;&#039;&#039;ID-Name&#039;&#039;&#039;) zugeordnet. Dieser String wird in die Datei .dylib eingebettet, die den Pfad der .dylib-Datei repräsentiert. Der &#039;&#039;&#039;Installationsname&#039;&#039;&#039; von &#039;&#039;&#039;CoreServices&#039;&#039;&#039; lautet beispielsweise &amp;lt;code&amp;gt;/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices&amp;lt;/code&amp;gt;. Beim Erzeugen einer ausführbaren OS X-Datei oder dynamischen Bibliothek, die von &#039;&#039;&#039;CoreServices&#039;&#039;&#039; abhängt, fügt XLINK einen Record mit der &#039;&#039;&#039;Installationsnamensinformation&#039;&#039;&#039; von &#039;&#039;&#039;CoreServices&#039;&#039;&#039; in das binäre Image ein.&lt;br /&gt;
&lt;br /&gt;
Ein binäres OS X-Image enthält die Header mit den Parametern für das Laden. Einige dieser Parameter enthalten dynamische Bibliothekspfade, die beim Linken unbekannt sein könnten. Solche Pfade können gepatcht werden, das kann aber problematisch werden, wenn der Linker nicht genügend Speicher in dem Image-Header reserviert. Mit der Option &amp;lt;code&amp;gt;-Gr&amp;lt;/code&amp;gt; können Sie die Anzahl der zusätzlich zu reservierenden Bytes festlegen.&lt;br /&gt;
&lt;br /&gt;
==Themen==&lt;br /&gt;
&lt;br /&gt;
* [[Linken einer C++-Anwendung Hello World für OS X|Linken einer C++-Anwendung Hello World für OS X]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile|Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile]]&lt;br /&gt;
* [[Gesichtspunkte für geräteübergreifende C++-Anwendungen|Gesichtspunkte für geräteübergreifende C++-Anwendungen]]&lt;br /&gt;
* [[Pragma link|#pragma link]]&lt;br /&gt;
* [[ILINK32.EXE: Der inkrementelle 32-Bit-Linker|ILINK32.EXE: Der inkrementelle 32-Bit-Linker]]&lt;br /&gt;
* [[ILINK64.EXE: Der inkrementelle 64-Bit-Linker|ILINK64.EXE: Der inkrementelle 64-Bit-Linker]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
[[Category:OS X]]&lt;br /&gt;
[[Category:Geräteübergreifend]]&lt;br /&gt;
&lt;br /&gt;
[[en:XLINK.EXE, the OS X Linker]]&lt;br /&gt;
[[fr:XLINK.EXE, le lieur OS X]]&lt;br /&gt;
[[ja:XLINK.EXE - OS X リンカ]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Neuerungen_in_Seattle&amp;diff=208928</id>
		<title>Neuerungen in Seattle</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Neuerungen_in_Seattle&amp;diff=208928"/>
		<updated>2016-06-24T10:56:26Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Neuerungen in den letzten Releases}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das {{Version|Seattle}}-Release enthält die folgenden neuen und verbesserten Features.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Informationen zur Kompatibilität mit OS X 10.11 (El Capitan) und iOS 9 finden Sie unter [[#Hinweise zu OS X 10.11 und iOS 9|Hinweise zu OS X 10.11 und iOS 9]].&lt;br /&gt;
&lt;br /&gt;
==[[Compiler für C++|Compiler für C++]]==&lt;br /&gt;
&lt;br /&gt;
===Neuer durch Clang erweiterter C++-Compiler für 32-Bit-Windows===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[BCC32C|BCC32C]]&#039;&#039;&#039; ist ein [[Durch Clang erweiterte C++-Compiler|durch Clang erweiterter C++-Compiler]] für 32-Bit-Windows. Mit BCC32C können Sie die Vorteile [[Kompatibilitätsstatus der C++11-Sprach-Features|vieler C++11-Features]] nutzen und einfacher eine einzige Codebasis für 32-Bit- und 64-Bit-Windows verwalten.&lt;br /&gt;
&lt;br /&gt;
BCC32C ersetzt BCC32 nicht; in {{Product|Seattle}} können Sie wählen, welchen Compiler Sie für das jeweilige Projekt verwenden möchten. BCC32 ist der Standard-C++-Compiler für 32-Bit-Windows. Um für ein Projekt zu BCC32C zu wechseln, wählen Sie {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; [[C++-Compiler|C++-Compiler]]}} und deaktivieren unter &#039;&#039;&#039;Klassischer Compiler&#039;&#039;&#039; die Option &amp;quot;&#039;Klassischen&#039; Borland-Compiler verwenden&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Aktualisierte Clang- und LLVM-Versionen===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[BCC32C|BCC32C]]&#039;&#039;&#039; und &#039;&#039;&#039;[[BCC64|BCC64]]&#039;&#039;&#039;, [[Durch Clang erweiterte C++-Compiler|durch Clang erweiterte C++-Compiler]] für Windows, wurden auf &#039;&#039;&#039;Clang 3.3&#039;&#039;&#039; und &#039;&#039;&#039;LLVM 3.3&#039;&#039;&#039; aktualisiert.&lt;br /&gt;
&lt;br /&gt;
===Parallele Compilierung für durch Clang erweiterte C++-Compiler===&lt;br /&gt;
&lt;br /&gt;
In {{Version|Seattle}} können Sie [[Durch Clang erweiterte C++-Compiler#Verwenden der parallelen Compilierung|in C++-Compilern, die durch Clang erweitert wurden, die parallele Compilierung aktivieren]], um die Compilierungsdauer auf Systemen mit Mehrkernprozessoren signifikant zu reduzieren.&lt;br /&gt;
&lt;br /&gt;
===Einschränkungen des Schlüsselworts __property bei C++-Compilern der vorherigen Generation===&lt;br /&gt;
&lt;br /&gt;
Die BCC32- und BCCOSX-Compiler unterstützen das Schlüsselwort {{Code|default}} für indizierte Eigenschaften nicht. Weitere Informationen finden Sie unter [[Property#Compiler-Unterstützung|__property - Compiler-Unterstützung]].&lt;br /&gt;
&lt;br /&gt;
===Neue Konstante für durch Clang erweiterte C++-Compiler===&lt;br /&gt;
&lt;br /&gt;
Die Konstante [[Unterschiede zwischen C++-Compilern, die durch Clang erweitert wurden, und C++-Compilern der vorherigen Generation#Vordefinierte Makros|RTLVersion]] wird von C++-Compilern, die durch Clang erweitert wurden, nicht unterstützt. Sie können stattdessen &#039;&#039;&#039;RTLVersionC&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
==[[FireMonkey|FireMonkey]]==&lt;br /&gt;
&lt;br /&gt;
==={{FM|Seattle}} unterstützt Windows 10===&lt;br /&gt;
&lt;br /&gt;
{{FM|Seattle}} unterstützt das Erstellen von nativen Anwendungen für &#039;&#039;&#039;Windows 10&#039;&#039;&#039; vollständig. Das Framework ermittelt automatisch die Zielplattform, lädt zur Laufzeit den entsprechenden nativen Stil und zeigt ihn an, ohne dass Sie ein Stilbuch oder Code hinzufügen müssen.&lt;br /&gt;
&lt;br /&gt;
===Übernehmen von Daten in andere Anwendungen auf OS X per Drag&amp;amp;amp;Drop===&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.Platform.IFMXDragDropService|IFMXDragDropService]], der [[FireMonkey-Plattformdienste|FireMonkey-Plattformdienst]], der die Unterstützung für Drag&amp;amp;amp;Drop-Operationen bereitstellt, unterstützt jetzt das Ziehen von Daten aus einer {{FM|Seattle}}-Anwendung in eine andere Anwendung.&lt;br /&gt;
&lt;br /&gt;
===Neue {{FM|Seattle}}-Stile===&lt;br /&gt;
&lt;br /&gt;
Neue {{FM|Seattle}}-Stile für &#039;&#039;&#039;Windows 10&#039;&#039;&#039; sind in {{Version|Seattle}} enthalten: &#039;&#039;&#039;Win10Modern.Style&#039;&#039;&#039;, &#039;&#039;&#039;Win10ModernBlue.Style&#039;&#039;&#039; und &#039;&#039;&#039;Win10ModernDark.Style&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die {{FM|Seattle}}-Stile finden Sie unter {{Code|{{StylesPath|Seattle}}}}.&lt;br /&gt;
&lt;br /&gt;
===Neue native Windows-Darstellung von {{FM|Seattle}}===&lt;br /&gt;
&lt;br /&gt;
Die folgenden Steuerelemente unterstützen die native Darstellung auf der Windows-Plattform:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:FMX.Edit.TEdit|TEdit]]&lt;br /&gt;
* [[lib_de:FMX.Memo.TMemo|TMemo]]&lt;br /&gt;
* [[lib_de:FMX.ScrollBox.TPresentedScrollBox|TPresentedScrollBox]]&lt;br /&gt;
&lt;br /&gt;
Informationen [[Native FireMonkey-Windows-Steuerelemente|über die Steuerung der Z-Reihenfolgenunterstützung für Windows durch FireMonkey]].&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen über native Windows-Steuerelemente finden Sie unter [[Native FireMonkey-Windows-Steuerelemente|Native Windows-Steuerelemente von FireMonkey]].&lt;br /&gt;
&lt;br /&gt;
===Registerkartenwechsel im Register-Steuerelement===&lt;br /&gt;
&lt;br /&gt;
Die Komponente [[lib_de:FMX.TabControl.TTabControl|TTabControl]] unterstützt die Registerkartennavigation durch einen Bildlauf, wenn die Registerkarten nicht in die Breite des Register-Steuerelements passen. Um diese Funktion zu verwenden, müssen Sie die Eigenschaft [[lib_de:FMX.TabControl.TTabControl.FullSize|FullSize]] auf {{False}} setzen.&lt;br /&gt;
&lt;br /&gt;
Wenn die Breite aller Registerkarten nicht in die Breite des Register-Steuerelements passt, werden beim Entwurf rechts und links Schaltflächen angezeigt, die angeben, dass ein Bildlauf zu verborgenen Registerkarten zur Laufzeit möglich ist. Auf Geräten [[lib_de:FMX.TabControl.TTabControl.HasTouchScreen|mit Touch-Screens]] können Sie die Registerkarten durch Wischen verschieben. Auf Geräten ohne Touch-Screens können Sie zwischen den Registerkarten mit den rechten und linken Schaltflächen sowie mit der Maus wechseln. Die rechten und linken Schaltflächen werden nur beim Entwurf angezeigt, auf Geräten ohne Touch-Screens auch zur Laufzeit.&lt;br /&gt;
&lt;br /&gt;
Sie können die [[lib_de:FMX.TabControl.TTabItem.Height|Höhe]] der [[lib_de:FMX.TabControl.TTabItem|Registereinträge]] ändern. Zum Ändern der Höhe muss die Eigenschaft [[lib_de:FMX.TabControl.TTabItem.AutoSize|AutoSize]] {{False}} sein.&lt;br /&gt;
&lt;br /&gt;
===Entfernung der Größenbeschränkungen von TCalendar===&lt;br /&gt;
&lt;br /&gt;
In {{Product|Seattle}} {{Version|Seattle}} bestehen für die [[lib_de:FMX.Calendar.TCalendar|TCalendar]]-Komponente keine Größenbeschränkungen.&lt;br /&gt;
&lt;br /&gt;
Sie können jetzt die Höhe ([[lib_de:FMX.Calendar.TCalendar.Height|Height]]) und Breite ([[lib_de:FMX.Calendar.TCalendar.Width|Width]]) von TCalendar ändern und sogar die Eigenschaft [[lib_de:FMX.Calendar.TCalendar.Align|Align]] auf &amp;lt;code&amp;gt;[[lib_de:FMX.Types.TAlignLayout|Client]]&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die Größenbeschränkungen für [[lib_de:FMX.Calendar.TCalendar|TCalendar]] wurden auch für native iOS-Kalenderkomponenten entfernt; Sie können die Größe der nativen Kalender für iOS 6 oder später ändern.&lt;br /&gt;
&lt;br /&gt;
===Native iOS-Listenansicht unterstützt benutzerdefinierte Erscheinungsbilder===&lt;br /&gt;
&lt;br /&gt;
Sie können in [[Native FireMonkey-iOS-Steuerelemente|nativen iOS-Listenansichts-Steuerelementen]] [[Anpassen der Darstellung von FireMonkey-Listenansichten|benutzerdefinierte Erscheinungsbilder ändern]].&lt;br /&gt;
&lt;br /&gt;
===Visuelle {{FM|Seattle}}-Steuerelemente können Hinweise anzeigen, wenn der Mauszeiger darüber geführt wird===&lt;br /&gt;
&lt;br /&gt;
Visuelle {{FM|Seattle}}-Steuerelemente unterstützen jetzt Hinweise auf Desktop-Plattformen. Um einen Hinweis festzulegen, geben Sie den Text im [[Objektinspektor|Objektinspektor]] in die Eigenschaft [[lib_de:FMX.Controls.TControl.Hint|Hint]] des Steuerelements ein und setzen die Eigenschaft [[lib_de:FMX.Controls.TControl.ShowHint|ShowHint]] auf {{True}}. Weitere Informationen zur Verwendung von Hinweisen finden Sie unter [[Verwenden von Hinweisen zum Anzeigen von Kontexthilfe in einer FireMonkey-Anwendung|Verwenden von Hinweisen zum Anzeigen von Kontexthilfe in einer FireMonkey-Anwendung]].&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Hinweise werden unter Windows und OS X 10.10 oder neuer unterstützt.&lt;br /&gt;
&lt;br /&gt;
===Touch-Animation für Android===&lt;br /&gt;
&lt;br /&gt;
In {{Version|Seattle}} wurden Touch-Animationen für die Android-Plattform aufgenommen. Dieser neue Animationstyp simuliert die Touch-Animation aus den Google-Anleitungen für Material Design.&lt;br /&gt;
&lt;br /&gt;
Sie müssen die Animation nicht aktivieren oder deaktivieren, sie ist bereits standardmäßig aktiviert.&lt;br /&gt;
Die Animation wurde für [[lib_de:FMX.ListBox.TListBox|TListBox]] und für Schaltflächen, wie [[lib_de:FMX.StdCtrls.TButton|TButton]], [[lib_de:FMX.StdCtrls.TCornerButton|TCornerButton]] und [[lib_de:FMX.StdCtrls.TSpeedButton|TSpeedButton]], hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
Weitere Einzelheiten finden Sie bei der Klasse [[lib_de:FMX.Styles.Objects.TTouchAnimationAdapter|TTouchAnimationAdapter]] und den Eigenschaften [[lib_de:FMX.Styles.Objects.TActiveStyleObject.TouchAnimation|TActiveStyleObject.TouchAnimation]] und [[lib_de:FMX.Styles.Objects.TButtonStyleObject.TouchAnimation|TButtonStyleObject.TouchAnimation]].&lt;br /&gt;
&lt;br /&gt;
===Systembenachrichtigungen wurden in die RTL verschoben und werden von Windows unterstützt===&lt;br /&gt;
&lt;br /&gt;
Die Unit {{Code|FMX.Notification}} wurde durch [[lib_de:System.Notification|System.Notification]] ersetzt.&lt;br /&gt;
&lt;br /&gt;
Die Komponente [[lib_de:System.Notification.TNotificationCenter|TNotificationCenter]] unterstützt jetzt Windows 8 und neuere Windows-Versionen. An dieser Komponente wurden zudem einige kleinere Änderungen vorgenommen:&lt;br /&gt;
&lt;br /&gt;
* Sie verfügt jetzt über die Eigenschaft [[lib_de:System.Notification.TCustomNotificationCenter.Loaded|Loaded]] zum Überprüfen, ob die Mitteilungszentrale verwendungsbereit ist oder nicht.&lt;br /&gt;
* Der Typ von [[lib_de:System.Notification.TNotificationCenter.ApplicationIconBadgeNumber|ApplicationIconBadgeNumber]] wurde von [[lib_de:System.Word|Word]] in [[lib_de:System.Integer|Integer]] geändert.&lt;br /&gt;
* Die Methode {{Code|Supported}} ist nicht mehr nötig und wurde entfernt.&lt;br /&gt;
&lt;br /&gt;
Die Klasse [[lib_de:System.Notification.TBaseNotificationCenter|TBaseNotificationCenter]] hat das Interface {{Code|IFMXNotificationCenter}} ersetzt. Klassen für die Implementierung des Interface {{Code|IFMXNotificationCenter}} müssen Unterklassen von [[lib_de:System.Notification.TBaseNotificationCenter|TBaseNotificationCenter]] sein und die virtuellen abstrakten Methoden ihrer übergeordneten Klasse implementieren.&lt;br /&gt;
&lt;br /&gt;
===[[FireMonkey-Stil-Designer|FireMonkey-Stil-Designer]]===&lt;br /&gt;
&lt;br /&gt;
====Plattformstile====&lt;br /&gt;
&lt;br /&gt;
Mit dem {{FM|Seattle}}-Stil-Designer können Sie nun beim Entwurf für jede Plattform Ihres Projekts einen andern Stil festlegen. Nur ein [[lib_de:FMX.Controls.TStyleBook|TStyleBook]] kann jetzt eine Sammlung von Stilen unterstützen.&lt;br /&gt;
&lt;br /&gt;
====Anpassung von Steuerelementen====&lt;br /&gt;
&lt;br /&gt;
Mit {{Product|Seattle}} können Sie nun Komponenten für unterschiedliche Plattformen beim Entwurf anpassen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [[Mobile-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen (iOS und Android)|Mobile-Tutorial: Verwenden von Schaltflächen-Komponenten mit unterschiedlichen Stilen (iOS und Android)]].&lt;br /&gt;
&lt;br /&gt;
====Neuer Bitmap-Verknüpfungseditor====&lt;br /&gt;
&lt;br /&gt;
Mit einem neuen Editor können Sie Grafiken für [[lib_de:FMX.Styles.Objects.TBitmapLink|TBitmapLink]]-Eigenschaften für mit Stilen versehene Objekte direkt in der IDE bearbeiten.&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.Styles.Objects.TBitmapLink|TBitmapLink]]-Eigenschaften können jetzt auf einfache und visuelle Weise mit dem [[BitmapLinks-Editor|BitmapLinks-Editor]] bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [[BitmapLinks-Editor|BitmapLinks-Editor]] und [[Tutorial: Verwenden des BitmapLinks-Editors|Tutorial: Verwenden des BitmapLinks-Editors]].&lt;br /&gt;
&lt;br /&gt;
====Weitere Verbesserungen====&lt;br /&gt;
&lt;br /&gt;
* Neue Symbolleiste zum Laden, Speichern und Bereinigen von .style-Dateien.&lt;br /&gt;
* Verschiedene Hintergründe für die Stilbearbeitung. Sie können jetzt zwischen keinem und einem hellen/dunklen Hintergrund wählen. Anhand der Farbe können Sie feststellen, wie das angepasste Steuerelement auf dunklen oder hellen Farben angezeigt wird.&lt;br /&gt;
* Auswählen und Verwalten der verschiedenen Stil-Layoutobjekte und -Layoutkomponenten direkt im Stil-Designer.&lt;br /&gt;
* Hinzufügen neuer Steuerelemente zum Stil-Designer durch Doppelklicken auf das Steuerelement in der Tool-Palette.&lt;br /&gt;
&lt;br /&gt;
===Neue Funktion &amp;quot;GetFirstWeekday&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
{{FM|Seattle}} stellt im Interface [[lib_de:FMX.Platform.IFMXLocaleService|IFMXLocaleService]] die neue Funktion [[lib_de:FMX.Platform.IFMXLocaleService.GetFirstWeekday|GetFirstWeekday]] bereit.&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.Platform.IFMXLocaleService.GetFirstWeekday|GetFirstWeekday]] gibt den [[lib_de:System.DateUtils.DayOfTheWeek|ersten Tag der Woche]] in einem vereinheitlichten plattformunabhängigen Format zurück.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; [[lib_de:FMX.Platform.IFMXLocaleService.GetLocaleFirstDayOfWeek|GetLocaleFirstDayOfWeek]] ist veraltet. Verwenden Sie stattdessen [[lib_de:FMX.Platform.IFMXLocaleService.GetFirstWeekday|GetFirstWeekday]].&lt;br /&gt;
&lt;br /&gt;
===Mit Stilen versehene Darstellungskonstruktoren erhalten das Datenmodell und das Steuerelement===&lt;br /&gt;
&lt;br /&gt;
In {{Version|Seattle}} erhalten [[lib_de:FMX.Presentation.Style.TStyledPresentation|mit Stilen versehene Darstellungsklassen]] ihr [[lib_de:FMX.Presentation.Style.TStyledPresentation.GetModel|Datenmodell]] und ihr [[lib_de:FMX.Presentation.Style.TStyledPresentation.PresentedControl|dargestelltes Steuerelement]] im [[lib_de:FMX.Presentation.Style.TStyledPresentation.Create|Konstruktor]], wodurch das Erstellen von Darstellungsklassen erheblich vereinfacht wird.&lt;br /&gt;
&lt;br /&gt;
Um Ihre Darstellungsklassen aus {{Version|XE8}} nach {{Version|Seattle}} zu portieren, müssen Sie Code für die verzögerte Initialisierung des Datenmodells und des dargestellten Steuerelements entfernen und diesen Code in den Konstruktor verschieben.&lt;br /&gt;
&lt;br /&gt;
===Umgestaltung des Listenansichts-Steuerelements===&lt;br /&gt;
&lt;br /&gt;
Viele Member, die früher in {{Code|TCustomListView}} enthalten waren, befinden sich jetzt in einer anderen Klasse oder sogar in einer anderen Unit. In eine andere Klasse verschobene Member sind weiterhin aufgrund der Vererbung Teil von {{Code|TCustomListView}}.&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Änderungsliste finden Sie unter &#039;&#039;&#039;[[Refactoring des Listenansichts-Steuerelements in Seattle|Refactoring des Listenansichts-Steuerelements in Seattle]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===TStyledPresentationProxy ersetzt alle mit Stilen versehenen Proxy-Klassen===&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.Presentation.Style.TStyledPresentation|Mit Stilen versehene Darstellungsklassen]] müssen keine Proxy-Klasse mehr definieren. Mit der neuen Klasse [[lib_de:FMX.Presentation.Style.TStyledPresentationProxy|TStyledPresentationProxy]] kann ein Proxy-Objekt für alle Stildarstellungsklassen erstellt werden. Alle vorhandenen Stildarstellungs-Proxy-Klassen wurden entfernt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! {{Version|XE8}}&lt;br /&gt;
! {{Version|Seattle}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{Code|TStyledCalendarProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledCalendarEditProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledComboEditProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledComboTrackBarProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledEditProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledEditBoxProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledMemoProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledOverlayLayoutProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledShadowedLayoutProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledNumberBoxProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledScrollBoxProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledSearchBoxProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledSpinBoxProxy}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Code|TStyledSwitchProxy}}&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:FMX.Presentation.Style.TStyledPresentationProxy|TStyledPresentationProxy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Umgestaltung von TCalendar===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:FMX.Calendar.TCalendar|TCalendar]]-Änderungen&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
* [[lib_de:FMX.Calendar.TCustomCalendar|TCustomCalendar]] wurde als Basisklasse für Steuerelemente, die einen Monatskalender anzeigen, eingeführt. &amp;lt;code&amp;gt;TCalendar&amp;lt;/code&amp;gt; ist jetzt von &amp;lt;code&amp;gt;TCustomCalendar&amp;lt;/code&amp;gt; abgeleitet. Beide Klassen befinden sich in der Unit [[lib_de:FMX.Calendar|FMX.Calendar]].&lt;br /&gt;
&lt;br /&gt;
* Die neue Eigenschaft [[lib_de:FMX.Calendar.TCalendar.TouchTargetExpansion|TouchTargetExpansion]] wurde hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:FMX.Calendar.Style.TStyledCalendar|TStyledCalendar]]-Änderungen&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
* Die Methode [[lib_de:FMX.Calendar.Style.TStyledCalendar.TryFindDayItem|TryFindDayItem]] wurde hinzugefügt, um den Zugriff auf das [[lib_de:FMX.ListBox.TListBoxItem|Listenfeldelement]] bereitzustellen, das einen [[lib_de:FMX.Calendar.TCalendar|TCalendar]]-Tag darstellt. &lt;br /&gt;
&lt;br /&gt;
* Die Methode &amp;lt;code&amp;gt;TStyledCalendar.FillList&amp;lt;/code&amp;gt; aus XE8 wurde jetzt in die folgenden Prozeduren unterteilt:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:* [[lib_de:FMX.Calendar.Style.TStyledCalendar.FillYears|TStyledCalendar.FillYears]]&lt;br /&gt;
:* [[lib_de:FMX.Calendar.Style.TStyledCalendar.FillWeeksNumbers|TStyledCalendar.FillWeeksNumbers]]&lt;br /&gt;
:* [[lib_de:FMX.Calendar.Style.TStyledCalendar.FillWeekDays|TStyledCalendar.FillWeekDays]]&lt;br /&gt;
:* [[lib_de:FMX.Calendar.Style.TStyledCalendar.FillDays|TStyledCalendar.FillDays]]&lt;br /&gt;
:* [[lib_de:FMX.Calendar.Style.TStyledCalendar.FillCalendar|TStyledCalendar.FillCalendar]]&lt;br /&gt;
&lt;br /&gt;
===Weitere {{FM|Seattle}}-Änderungen===&lt;br /&gt;
&lt;br /&gt;
* Sie müssen den Typ von [[lib_de:FMX.ListView.TListViewBase.Selected|TListView.Selected]] jetzt in [[lib_de:FMX.ListView.Appearances.TListViewItem|Appearances.TListViewItem]] umwandeln, um es als solches zu verwenden.&lt;br /&gt;
* Einige Konstanten, die Dateierweiterungen repräsentieren, wurden geändert, um Rechtschreibfehler zu korrigieren. Beispielsweise wurde {{Const|SBMPImageExtention}} in {{Const|SBMPImageExtension}} geändert. Diese Konstanten befinden sich in der Datei {{Path|FMX.Consts.pas}}.&lt;br /&gt;
* Das protected Feld {{Code|FDisableDayChange}} von [[lib_de:FMX.Calendar.Style.TStyledCalendar|TStyledCalendar]] wurde durch die published Eigenschaft [[lib_de:FMX.Calendar.Style.TStyledCalendar.DisableDayChange|DisableDayChange]] ersetzt. {{Code|TStyledCalendar}} veröffentlicht jetzt auch seine Stilobjekte: [[lib_de:FMX.Calendar.Style.TStyledCalendar.Years|Years]], [[lib_de:FMX.Calendar.Style.TStyledCalendar.Month|Month]], [[lib_de:FMX.Calendar.Style.TStyledCalendar.Weeks|Weeks]], [[lib_de:FMX.Calendar.Style.TStyledCalendar.Week|Week]], [[lib_de:FMX.Calendar.Style.TStyledCalendar.Days|Days]], [[lib_de:FMX.Calendar.Style.TStyledCalendar.Today|Today]], [[lib_de:FMX.Calendar.Style.TStyledCalendar.Prev|Prev]], [[lib_de:FMX.Calendar.Style.TStyledCalendar.Next|Next]].&lt;br /&gt;
* Die Eigenschaft [[lib_de:FMX.Controls.TControl.TouchTargetExpansion|TouchTargetExpansion]] von [[lib_de:FMX.DateTimeCtrls.TDateEdit|TDateEdit]] und [[lib_de:FMX.DateTimeCtrls.TTimeEdit|TTimeEdit]] ist jetzt published.&lt;br /&gt;
* Für den [[lib_de:FMX.Styles.Objects.TTintedStages.Create|Konstruktor]] von [[lib_de:FMX.Styles.Objects.TTintedStages|TTintedStages]] muss das [[lib_de:FMX.Styles.Objects.TTintedStages.StyleObject|Eigentümer]]-[[lib_de:FMX.Styles.Objects.TCustomStyleObject|Stilobjekt]] als Parameter angegeben werden.&lt;br /&gt;
* Neue Darstellung und neues Verhalten von [[lib_de:FMX.StdCtrls.TSwitch|TSwitch]] für Windows 10. Beispielsweise ändert sich die Hintergrundfarbe bei Mausberührung, wenn der Umschalter eingeschaltet ist.&lt;br /&gt;
* Der [[lib_de:FMX.MultiView.TMultiView.Mode|Standardmodus]] von [[lib_de:FMX.MultiView.TMultiView|TMultiView]] ist in Windows 10 {{Const|NavigationPane}}. Weitere Einzelheiten finden Sie unter [[Mobile-Tutorial: Verwenden von MultiView-Komponenten zur Anzeige von alternativen Ansichten von Informationen (iOS und Android)#Navigationsbereichsmodus|Navigationsbereichsmodus]].&lt;br /&gt;
* Neuer [[Bitmap-Stil-Designer#Stil-Viewer|Stil-Viewer]] für den Windows 10-Stil im [[Bitmap-Stil-Designer|Bitmap-Stil-Designer]].&lt;br /&gt;
* Erweiterte Zwischenablagenunterstützung für das Kopieren und Einfügen von Bitmaps. Beispiele finden Sie unter:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:* {{Path|{{DelphiSamplesPath|Seattle}}\Multi-Device Samples\User Interface\CopyPaste}}&lt;br /&gt;
:* {{Path|{{CppSamplesPath|Seattle}}\Multi-Device Samples\User Interface\CopyPaste}}&lt;br /&gt;
&lt;br /&gt;
* Mit der neuen Klasse [[lib_de:System.Beacon.Components.TBeaconDevice|TBeaconDevice]] können Sie simulieren, dass ein Gerät mit [[Verwenden von Bluetooth Low Energy|BluetoothLE]] ein Beacon ist. Siehe das [[Samp:RTL.BeaconDevice Sample|Beispiel &amp;quot;BeaconDevice&amp;quot;]].&lt;br /&gt;
* [[lib_de:FMX.ListBox.TListBoxSelector|TListBoxSelector]] stellt eine Alternative für die Methode [[lib_de:FMX.ListBox.TListBoxSelector.MouseSelectFinish|MouseSelectFinish]] bereit, die das Listenfeld ausführt, bevor das Ereignis [[lib_de:FMX.ListBox.TCustomListBox.OnItemClick|OnItemClick]] der Kombinationsfeld-Komponente ausgelöst wird: [[lib_de:FMX.ListBox.TListBoxSelector.MouseSelectFinishing|MouseSelectFinishing]].&lt;br /&gt;
* [[lib_de:FMX.Controls.TControl|Steuerelemente]] verfügen über die folgenden protected Methoden: [[lib_de:FMX.Controls.TControl.EnabledChanged|EnabledChanged]], [[lib_de:FMX.Controls.TControl.PaddingChanged|PaddingChanged]] und [[lib_de:FMX.Controls.TControl.VisibleChanged|VisibleChanged]]. Wenn der Wert von [[lib_de:FMX.Controls.TControl.Enabled|Enabled]], [[lib_de:FMX.Controls.TControl.Padding|Padding]] oder [[lib_de:FMX.Controls.TControl.Visible|Visible]] in einem Steuerelement geändert wird, führt dieses Steuerelement die entsprechende Methode aus.&lt;br /&gt;
&lt;br /&gt;
==[[Überblick zu VCL|VCL]]==&lt;br /&gt;
&lt;br /&gt;
===Neue VCL-Steuerelemente für Windows 10===&lt;br /&gt;
&lt;br /&gt;
Die folgenden Steuerelemente wurden der VCL hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[lib_de:Vcl.WinXCtrls.TRelativePanel|TRelativePanel]]&#039;&#039;&#039;: RelativePanel ist ein neuer Layout-Bereich, mit dem Sie untergeordnete Objekte in Relation zueinander und zu ihrem übergeordneten Bereich positionieren und ausrichten können. Beispielsweise können Sie angeben, dass Text immer links in dem Bereich und eine Schaltfläche immer unter dem Text positioniert wird. Verwenden Sie RelativePanel als Alternative zu TGridPanel beim Erstellen von Benutzeroberflächen, die kein klares lineares Muster haben.&lt;br /&gt;
* &#039;&#039;&#039;[[lib_de:Vcl.WinXCtrls.TSplitView|TSplitView]]&#039;&#039;&#039;: Mit dem neuen SplitView-Steuerelement können Sie transienten Inhalt einfach anzeigen und ausblenden. Beispielsweise können Sie es als Navigationsmenü der obersten Ebene verwenden, wobei der Navigationsinhalt verborgen ist und bei Bedarf eingeblendet wird (auch als Hamburger-Menü bezeichnet).&lt;br /&gt;
* &#039;&#039;&#039;[[lib_de:Vcl.WinXCtrls.TToggleSwitch|TToggleSwitch]]&#039;&#039;&#039;: Der Umschalter simuliert einen physischen Schalter, mit dem Benutzer etwas ein- oder ausschalten können. Das Steuerelement hat zwei Zustände: ein und aus. Sie können die Beschriftungen des Umschalters ändern oder entfernen.&lt;br /&gt;
* &#039;&#039;&#039;[[lib_de:Vcl.WinXCtrls.TActivityIndicator|TActivityIndicator]]&#039;&#039;&#039;: Ein Ringindikator für den Status &amp;quot;unbestimmt&amp;quot; ({{Code|indeterminate}}). Für diesen Indikator können Sie unter mehreren Typen auswählen und viele visuelle Eigenschaften, wie Größe, Geschwindigkeit der Animation, Farbe des Indikators, ändern.&lt;br /&gt;
* &#039;&#039;&#039;[[lib_de:Vcl.WinXCtrls.TSearchBox|TSearchBox]]&#039;&#039;&#039;: Ein Eingabefeld mit Suchfunktionalität, ähnlich dem {{FM|Seattle}}-[[lib_de:FMX.SearchBox.TSearchBox|TSearchBox]]-Feld.&lt;br /&gt;
&lt;br /&gt;
Diese Steuerelemente sind speziell für Windows 10 zugeschnitten, unterstützen aber alle Windows-Versionen.&lt;br /&gt;
&lt;br /&gt;
Beispielanwendungen für die neuen VCL-Steuerelemente für Windows 10 zeigen die Verwendung und Funktionen dieser Steuerelemente:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[samp_en:VCL.ActivityIndicator Sample|ActivityIndicator (Beispiel)]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[samp_en:VCL.RelativePanel Sample|RelativePanel (Beispiel)]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[samp_en:VCL.SearchBox Sample|SearchBox (Beispiel)]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[samp_en:VCL.SplitView Sample|SplitView (Beispiel)]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[samp_en:VCL.ToggleSwitch Sample|ToggleSwitch (Beispiel)]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Neue TSharingContract-Komponente===&lt;br /&gt;
&lt;br /&gt;
Die [[lib_de:Vcl.ShareContract.TSharingContract|TSharingContract]]-Komponente unterstützt Verträge, den Systemmechanismus für das Teilen von Informationen mit anderen Windows 10-Anwendungen. Anwendungen können sich mit der neuen SharingContract-Komponente wie Vertragsquellen verhalten.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen über App-Verträge und die Teilen-Funktionalität finden Sie unter [https://msdn.microsoft.com/en-us/library/windows/apps/hh464906.aspx Windows Dev Center - App contracts and extensions (EN)].&lt;br /&gt;
&lt;br /&gt;
===Neue VCL-Stile===&lt;br /&gt;
&lt;br /&gt;
* In {{Version|Seattle}} sind neue VCL-Stile für &#039;&#039;&#039;Windows 10&#039;&#039;&#039; enthalten: &#039;&#039;&#039;Windows10&#039;&#039;&#039;, &#039;&#039;&#039;Windows10 Blue&#039;&#039;&#039; und &#039;&#039;&#039;Windows10 Dark&#039;&#039;&#039;.&lt;br /&gt;
* Neuer &#039;&#039;&#039;OnyxBlue&#039;&#039;&#039;-Stil.&lt;br /&gt;
&lt;br /&gt;
Über {{menu | Projekt &amp;amp;gt; Optionen &amp;amp;gt; Anwendung &amp;amp;gt; Erscheinungsbild}} können Sie auf die VCL-Stile zugreifen.&lt;br /&gt;
&lt;br /&gt;
===Verbesserungen von VCL-Stilen===&lt;br /&gt;
&lt;br /&gt;
* Unterstützung für Stile für allgemeine Dialogfelder. Weitere Informationen finden Sie unter [[lib_de:Vcl.Themes.TStyleManager.SystemHooks|SystemHooks]].&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:SHDocVw.TWebBrowser|TWebBrowser]]-Komponente unterstützt nun Stile.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen über VCL-Stile finden Sie unter [[Arbeiten mit VCL-Stilen|Arbeiten mit VCL-Stilen]].&lt;br /&gt;
&lt;br /&gt;
===Modernisiertes Dialogfeld &amp;quot;Verzeichnis auswählen&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[[lib_de:Vcl.FileCtrl.SelectDirectory|SelectDirectory]] wurde geändert, damit es ein modernisiertes Dialogfeld &amp;quot;Verzeichnis auswählen&amp;quot; anzeigt. Verwenden Sie die dritte Signatur der Funktion [[lib_de:Vcl.FileCtrl.SelectDirectory|SelectDirectory]], und definieren Sie Ihren Optionssatz als [[lib_de:Vcl.FileCtrl.TSelectDirFileDlgOpts|TSelectDirFileDlgOpts]].&lt;br /&gt;
&lt;br /&gt;
[[File:ModernizedSelectDirectory.png|500px]]&lt;br /&gt;
&lt;br /&gt;
==[[RTL|RTL]]==&lt;br /&gt;
&lt;br /&gt;
===Registrieren Ihrer Anwendung für die Behandlung von Android-Intents===&lt;br /&gt;
&lt;br /&gt;
In {{Version|XE8}} konnten Intents nur über lokale oder Push-Benachrichtigungen empfangen werden. In {{Version|Seattle}} ermöglicht die [[Verwenden der in RAD Studio integrierten Java-Bibliotheken für Android|integrierte RAD Studio-Java-Bibliothek]] {{Code|Androidapi.JNI.Embarcadero}} die Registrierung Ihrer Anwendung für die Behandlung von Intent-Aktionen.&lt;br /&gt;
&lt;br /&gt;
Die [[samp_en:FMX.Android Intents Sample|Beispielanwendung &amp;quot;Android Intents&amp;quot;]] zeigt, wie einfache Daten von einer anderen Anwendung mit Android-Intents behandelt werden.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Für die Behandlung von Android-Intents müssen Sie dem Abschnitt &amp;lt;source lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&amp;lt;intent-filter&amp;gt;&amp;lt;/source&amp;gt; der [[rad_de:Vorbereiten von Android-Anwendungen für die Bereitstellung#Anpassen der Datei &amp;quot;AndroidManifest.xml&amp;quot;|Datei AndroidManifest.xml]] das entsprechende &amp;lt;source lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&amp;lt;action&amp;gt;&amp;lt;/source&amp;gt;-Tag hinzufügen.&lt;br /&gt;
&lt;br /&gt;
===JSON-Verbesserungen===&lt;br /&gt;
&lt;br /&gt;
Der Gültigkeitsbereich von [[lib_de:System.JSON|System.JSON]] wurde um viele neue Units erweitert, die Unterstützung für Folgendes bereitstellen:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.JSON.BSON|BSON]], eine binäre Alternative zum JSON-Format.&lt;br /&gt;
* JSON-[[lib_de:System.JSON.Readers|Reader]] und -[[lib_de:System.JSON.Writers|Writer]], um JSON-Daten ad hoc zu generieren und zu analysieren, ohne zuerst eine vollständige JSON-Hierarchie im Arbeitsspeicher erstellen zu müssen.&lt;br /&gt;
* [http://docs.mongodb.org/manual/reference/mongodb-extended-json/ MongoDB extended JSON (EN)], eine Erweiterung des JSON-Formats für die Unterstützung weiterer Datentypen. Sie können diese JSON-Erweiterung in JSON-Readern und -Writern über deren Eigenschaft {{Code|ExtendedJsonMode}} aktivieren.&lt;br /&gt;
&lt;br /&gt;
Außerdem ermöglichen [[lib_de:System.JSON.TJSONObject.ParseJSONValue|TJSONObject.ParseJSONValue]] und [[lib_de:System.JSON.TJSONObject.Parse|TJSONObject.Parse]] das Erstellen eines [[lib_de:System.JSON.TJSONBool|TJSONBool]]-Wertes aus den analysierten Daten.&lt;br /&gt;
&lt;br /&gt;
===Ausführen asynchroner Remote-Aktionen===&lt;br /&gt;
&lt;br /&gt;
Mit der neuen Methode [[lib_de:System.Tether.AppProfile.TTetheringAppProfile.RunRemoteActionAsync|RunRemoteActionAsync]] können Sie [[lib_de:System.Tether.AppProfile.TRemoteAction|Remote-Aktionen]] asynchron ausführen.&lt;br /&gt;
Bei der Verwendung asynchroner Aktionen wird die Funktion, die diese Methode aufruft, während der Ausführung der Remote-Aktion nicht blockiert.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen dazu finden Sie unter [[Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering#Ausführen von Remote-Aktionen|Ausführen von Remote-Aktionen]].&lt;br /&gt;
&lt;br /&gt;
===GATT-Serverunterstützung für Android 5===&lt;br /&gt;
&lt;br /&gt;
In {{Version|Seattle}} können Sie einen [[Verwenden von Bluetooth Low Energy#BluetoothLE-Server|Bluetooth Low Energy-Server]] für Android 5 erstellen.&lt;br /&gt;
&lt;br /&gt;
===Unterstützung für internationalisierte Domänennamen===&lt;br /&gt;
&lt;br /&gt;
Das HTTP-Framework unterstützt jetzt [[Wikipedia:Internationalized domain name|internationalisierte Domainnamen (EN)]] (IDN). Zwei neue public Methoden sind verfügbar: [[lib_de:System.Net.URLClient.TURI.UnicodeToIDNA|TURI.UnicodeToIDNA]] und [[lib_de:System.Net.URLClient.TURI.IDNAToUnicode|TURI.IDNAToUnicode]].&lt;br /&gt;
&lt;br /&gt;
===Unterstützung für SHA-2 Hashing===&lt;br /&gt;
&lt;br /&gt;
Die Unit [[lib_de:System.Hash|System.Hash]] enthält einen neuen Member, [[lib_de:System.Hash.THashSHA2|THashSHA2]], der die Hash-Funktionsfamilie [[Wikipedia:SHA-2|SHA-2]] implementiert.&lt;br /&gt;
&lt;br /&gt;
===Verbesserungen bei Bluetooth===&lt;br /&gt;
&lt;br /&gt;
* Mit der neuen Eigenschaft [[lib_de:System.Bluetooth.TBluetoothLEDevice.ScannedAdvertiseData|ScannedAdvertiseData]] von [[lib_de:System.Bluetooth.TBluetoothLEDevice|TBluetoothLEDevice]] können Sie auf die Daten zugreifen, die ein Remote-Gerät als Instanz von [[lib_de:System.Bluetooth.TBluetoothLEAdvertiseData|TBluetoothLEAdvertiseData]] bekanntgibt, sodass Sie nützliche Informationen, wie [[lib_de:System.Bluetooth.TBluetoothLEAdvertiseData.ManufacturerSpecificData|herstellerspezifische Informationen]], auf einfache Weise lesen können.&lt;br /&gt;
* Mit [[lib_de:System.Bluetooth.TBluetoothGattServer.AddService|TBluetoothGattServer.AddService]] können Sie angeben, ob der hinzugefügte Dienst bekanntgegeben werden soll (Vorgabe) oder nicht.&lt;br /&gt;
* [[lib_de:System.Bluetooth.TBluetoothLEManager.StartDiscovery|TBluetoothLEManager.StartDiscovery]] unterstützt einen neuen Parameter, {{Arg|ForceConnect}}, zum Herstellen von Verbindungen mit allen ermittelten Remote-Geräten, um eine vollständige Liste der Dienste, die jedes Remote-Gerät bereitstellt, zu erhalten. Dies ermöglicht das Filtern von Remote-Geräten auf Basis der von ihnen bereitgestellten Dienste, unabhängig davon, ob sie [[lib_de:System.Bluetooth.TBluetoothLEDevice.ScannedAdvertiseData|sie bekanntgeben]] oder nicht.&lt;br /&gt;
* Neue Hilfsklasse [[lib_de:System.Bluetooth.TBluetoothUUIDHelper|TBluetoothUUIDHelper]] für die Arbeit mit unterschiedlichen Formaten von Bluetooth-UUIDs.&lt;br /&gt;
&lt;br /&gt;
===Refactoring der App-Tethering-Kommunikation===&lt;br /&gt;
&lt;br /&gt;
Die Basisklasse für App-Tethering-Profile, [[lib_de:System.Tether.Manager.TTetheringProfile|TTetheringProfile]], implementiert jetzt die Logik für die Analyse von [[lib_de:System.Tether.Manager.TTetheringCommand|App-Tethering-Befehlen]] (die früher in der [[lib_de:System.Tether.Manager.TTetheringProtocol|Basisklasse für App-Tethering-Protokolle]] implementiert war) sowie die Logik für die Behandlung von [[lib_de:System.Tether.Manager.TTetheringProfileInfo|Remote-Profilen]] und [[lib_de:System.Tether.Manager.TTetheringConnection|Verbindungen]], die früher in der untergeordneten Klasse [[lib_de:System.Tether.AppProfile.TTetheringAppProfile|TTetheringAppProfile]] implementiert war.&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Änderungsliste finden Sie unter &#039;&#039;&#039;[[Refactoring der App-Tethering-Kommunikation in Seattle|Refactoring der App-Tethering-Kommunikation in Seattle]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Weitere RTL-Änderungen===&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Hash.THashSHA2.GetHMACAsBytes|THashSHA2.GetHMACAsBytes]], [[lib_de:System.Hash.THashSHA1.GetHMACAsBytes|THashSHA1.GetHMACAsBytes]] und [[lib_de:System.Hash.THashMD5.GetHMACAsBytes|THashMD5.GetHMACAsBytes]] akzeptieren jetzt die Parameter {{Arg|Data}} und {{Arg|Key}} als [[lib_de:System.String|String]] oder als [[lib_de:System.SysUtils.TBytes|Bytes]].&lt;br /&gt;
* [[lib_de:System.IOUtils.TPath.GetSharedDocumentsPath|GetSharedDocumentsPath]] gibt jetzt auf der Android-Plattform einen anderen Pfad zurück. Der neue Pfad zeigt auf ein systemweites Verzeichnis im externen Speicher.&lt;br /&gt;
* [[lib_de:System.Threading.TThreadPool|TThreadPool]] enthält eine neue Klasseneigenschaft, [[lib_de:System.Threading.TThreadPool.Current|Current]], die den Thread-Pool der [[lib_de:System.Threading.TTask.CurrentTask|aktuellen Aufgabe]] bereitstellt.&lt;br /&gt;
* Die Klasse [[lib_de:System.Zip.TZipFile|TZipFile]] hat nun ein Callback für die Abfrage des aktuellen Fortschritts des Vorgangs. Weitere Informationen finden Sie unter [[lib_de:System.Zip.TZipFile.ExtractZipFile|TZipFile.ExtractZipFile]] und [[lib_de:System.Zip.TZipFile.OnProgress|TZipFile.OnProgress]].&lt;br /&gt;
&lt;br /&gt;
==[[IDE-Referenz und Hilfsprogramme|IDE]]==&lt;br /&gt;
&lt;br /&gt;
===Verbesserungen des Arbeitsspeichers===&lt;br /&gt;
&lt;br /&gt;
In {{Version|Seattle}} enthält die {{Product|Seattle}}-IDE einige bemerkenswerte Verbesserungen hinsichtlich des Speicherbedarfs und der Speicherverwaltung:&lt;br /&gt;
&lt;br /&gt;
* Die IDE kann jetzt bis zu 4 GiB verwenden und ist nicht mehr auf 2 GiB beschränkt.&lt;br /&gt;
*: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; IDE-Erweiterungen müssen [[Erweitern der IDE mit der Tools-API#IDE-Erweiterungen müssen große Speicheradressen unterstützen|große Speicheradressen]] unterstützen.&lt;br /&gt;
* Die IDE-Speicherverwaltung von geöffneten Projekten wurde verbessert. Die IDE kann nun eine größere Anzahl von geöffneten Projekten verwalten.&lt;br /&gt;
&lt;br /&gt;
{{f| radstudio|&lt;br /&gt;
&lt;br /&gt;
===Neues Android-Dienstprojekt===&lt;br /&gt;
&lt;br /&gt;
{{Product|Seattle}} stellt einen neuen {{Delphi|Seattle}}-Projekttyp zum Erstellen von Android-Diensten bereit.&lt;br /&gt;
&lt;br /&gt;
Der neue Projekttyp deckt die verschiedenen Diensttypen ab: lokal und remote, und er enthält die Unterstützung für asynchrone Aufgaben mit Intents.&lt;br /&gt;
&lt;br /&gt;
Das [[Android-Dienst|Android-Dienstprojekt]] besteht aus einem [[Datenmodule verwenden|Datenmodul]] zum Erstellen der Methoden und Ereignisse für den Dienst. Beim Erzeugen des Projekts werden die Binärdateien, die die Hauptanwendung benötigt, gemäß dem ausgewählten Diensttyp erstellt, wie z. B. die Java-Archivdatei (*.JAR).&lt;br /&gt;
&lt;br /&gt;
So erstellen Sie einen &#039;&#039;&#039;Android-Dienst&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Die IDE stellt einen neuen Experten zum Erstellen des [[Android-Dienst|Android-Dienstprojekts]] bereit.&lt;br /&gt;
* Die IDE stellt einen neuen Experten zum Hinzufügen von Android-Diensten zu einer [[Geräteübergreifende Anwendung|geräteübergreifenden Anwendung]] bereit.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [[Android-Dienst|Android-Dienst]] und [[Erstellen von Android-Diensten|Erstellen von Android-Diensten]].}}&lt;br /&gt;
&lt;br /&gt;
===Verbesserte Unterstützung für mehrere Bildschirmkonfigurationen===&lt;br /&gt;
&lt;br /&gt;
{{Version|Seattle}} verbessert die Benutzererfahrung bei Konfigurationen mit mehreren Bildschirmen.&lt;br /&gt;
&lt;br /&gt;
===Integration der Castalia-Funktionen in der IDE===&lt;br /&gt;
&lt;br /&gt;
Einige Castalia-Funktionen wurden in {{Product|Seattle}} {{Version|Seattle}} in die IDE integriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Zwischenablageverlauf|Zwischenablageverlauf]]&#039;&#039;&#039;: Zeigt die gespeicherten Elemente beim Kopieren von Text an. Sie öffnen das Fenster &amp;quot;Zwischenablageverlauf&amp;quot; über {{Menu|Ansicht &amp;amp;gt; Zwischenablageverlauf}}.&lt;br /&gt;
* &#039;&#039;&#039;[[Mehrfach einfügen|Mehrfach einfügen]]&#039;&#039;&#039;: Ermöglicht die Bearbeitung von Text vor dem Einfügen. Sie können auf das Fenster &amp;quot;Mehrfach einfügen&amp;quot; über {{Menu|Bearbeiten &amp;amp;gt; Mehrfach einfügen}} zugreifen.&lt;br /&gt;
* &#039;&#039;&#039;[[Projektstatistik|Projektstatistik]]&#039;&#039;&#039;: Zeigt die Zeit an, die in verschiedenen Bereichen Ihres Projekts verbracht wurde. Sie öffnen das Fenster &amp;quot;Projektstatistik&amp;quot; über {{Menu|Ansicht &amp;amp;gt; Projektstatistik}}.&lt;br /&gt;
* &#039;&#039;&#039;[[Quelltext-Editor#Navigationssymbolleiste|Navigationssymbolleiste]]&#039;&#039;&#039;: Wird im Quelltext-Editor angezeigt, um die Navigation in Ihrem Code zu vereinfachen. Die Navigationssymbolleiste enthält die &#039;&#039;&#039;Projektsymbolsuche&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;[[Quelltext-Editor#Synchronisieren_von_Prototypen|Synchronisierung von Prototypen]]&#039;&#039;&#039;: Funktion zum Synchronisieren der interface- und implementation-Versionen Ihrer Methodenprototypen.&lt;br /&gt;
* &#039;&#039;&#039;[[Quelltext-Editor#Strukturhervorhebung|Strukturhervorhebung]]&#039;&#039;&#039;: Hebt die Codestruktur mit Linien sowie die Verwendung von Prozeduren hervor, die den linearen Ausführungsablauf in Ihrem Code unterbrechen. Auf der [[Strukturhervorhebung|Optionsseite für die Strukturhervorhebung]] finden Sie weitere Optionen für diese Funktion.&lt;br /&gt;
* &#039;&#039;&#039;[[Quelltext-Editor#Intelligente_Tasten|Intelligente Tasten]]&#039;&#039;&#039;: Stellt Tastenkürzel bereit, um den Cursor an den Anfang der Zeile oder des Textes zu setzen; sowie eine schnelle Möglichkeit, Ihren Code in &amp;quot;()&amp;quot;, &amp;quot;[]&amp;quot; oder &amp;quot;{}&amp;quot; einzuschließen. Diese Funktionen können auf der [[Tastaturbelegung|Optionsseite &amp;quot;Tastaturbelegung&amp;quot;]] aktiviert oder deaktiviert werden.&lt;br /&gt;
&lt;br /&gt;
===Auto-Wiederherstellen===&lt;br /&gt;
&lt;br /&gt;
Die Funktion [[Auto-Wiederherstellen|Auto-Wiederherstellen]] ermöglicht Ihre Dateien wiederherzustellen, wenn die IDE unerwartet geschlossen wird.&lt;br /&gt;
&lt;br /&gt;
Auf der [[Auto-Wiederherstellen|Optionsseite &amp;quot;Auto-Wiederherstellen&amp;quot;]] finden Sie weitere Einstellungen für diese Funktion.&lt;br /&gt;
&lt;br /&gt;
===Ändern der Schriftgröße im Quelltext-Editor===&lt;br /&gt;
&lt;br /&gt;
Sie können die Größe der Schrift im [[Quelltext-Editor|Quelltext-Editor]] mit dem Kontextmenü des Quelltext-Editors oder mit Tastenkombinationen vergrößern oder verkleinern:&lt;br /&gt;
&lt;br /&gt;
* Verwenden Sie die Optionen &#039;&#039;&#039;Schrift vergrößern&#039;&#039;&#039; und &#039;&#039;&#039;Schrift verkleinern&#039;&#039;&#039; im [[Kontextmenü des Quelltext-Editors|Kontextmenü des Quelltext-Editors]], um die Schrift zu vergrößern bzw. zu verkleinern.&lt;br /&gt;
&lt;br /&gt;
* Verwenden Sie die Tastenkombinationen &#039;&#039;&#039;Strg+Num+&#039;&#039;&#039; und &#039;&#039;&#039;Strg+Num-&#039;&#039;&#039;, um die Größe der Schrift zu vergrößern bzw. zu verkleinern. Unter [[Tastenzuordnungen - Index|Tastenzuordnungen - Index]] finden Sie weitere Tastenkombinationen.&lt;br /&gt;
&lt;br /&gt;
===Aktualisierung der Subversion-Bibliotheken in der IDE===&lt;br /&gt;
&lt;br /&gt;
{{Version|Seattle}} {{Version|Seattle}} enthält die Subversion-Bibliotheken der Version 1.8.13.&lt;br /&gt;
&lt;br /&gt;
Weitere Einzelheiten über in der IDE integrierte Versionskontrollsysteme finden Sie unter [[Subversion-Integration in der IDE|Subversion-Integration in der IDE]] und [[Versionskontrollsysteme in der IDE|Versionskontrollsysteme in der IDE]].&lt;br /&gt;
&lt;br /&gt;
===Verbesserungen des [[GetIt-Package-Manager|GetIt-Package-Managers]]===&lt;br /&gt;
&lt;br /&gt;
Die folgenden Verbesserungen wurden in {{Version|Seattle}} zum GetIt-Package-Manager hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
* Neue verbesserte Benutzeroberfläche für das [[Fenster &amp;quot;GetIt-Package-Manager&amp;quot;|Fenster &amp;quot;GetIt-Package-Manager&amp;quot;]].&lt;br /&gt;
* Möglichkeit, Packages nach Kategorie zu filtern.&lt;br /&gt;
* {{Product|Seattle}} {{Version|Seattle}} Subscription Update 1 enthält die neue Optionsseite {{Menu|Tools &amp;amp;gt; Optionen &amp;amp;gt; [[GetIt (Optionen)|GetIt]]}}, auf der Sie den &#039;&#039;&#039;GetIt-Package-Manager&#039;&#039;&#039; so konfigurieren können, dass beim Start nach Package-Updates gesucht wird.&lt;br /&gt;
&lt;br /&gt;
===Umbenannte Beschriftungen auf der Bereitstellungsseite &amp;quot;OS X - Anwendungs-Store&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Die [[Bereitstellungsseite|Bereitstellungsoptionen]] für die Codesignierung einer [[Bereitstellungsseite#OS_X_-_Anwendungs-Store|OS X-Anwendung für den &#039;&#039;&#039;Anwendungs-Store&#039;&#039;&#039;]] wurde in &#039;&#039;&#039;Mac-Entwicklerzertifikat für Fremdhersteller&#039;&#039;&#039; und &#039;&#039;&#039;Mac-Installationszertifikat für Fremdhersteller&#039;&#039;&#039; umbenannt, damit sie mit den Namen, die Apple für diese Zertifikate verwendet, übereinstimmen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen über die Codesignierung von Anwendungen finden Sie unter &#039;&#039;&#039;[[Bereitstellungsseite|Bereitstellung]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Neue Option für den Zugriff von iOS 9-Anwendungen auf Nicht-SSL-URLs===&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Dies betrifft nur {{Product|Seattle}} {{Version|Seattle}} Subscription Update 1.&lt;br /&gt;
&lt;br /&gt;
Neue Option in {{Menu| Projekt &amp;amp;gt; Optionen &amp;amp;gt; [[Berechtigungsliste|Berechtigungsliste]]}} zur Aktivierung von HTTP-Protokollanforderungen unter iOS 9.0. Diese Option ist standardmäßig aktiviert.&lt;br /&gt;
&lt;br /&gt;
===Neue Option zum Hinzufügen der Unterstützung für die Ausführung im Hintergrund unter iOS===&lt;br /&gt;
&lt;br /&gt;
In der IDE können Sie jetzt die Datei [[Apple-Anwendungsinformationsdatei (*.info.plist)|{{Code|Info.plist}}]] zur Unterstützung des Ausführungsmodus im Hintergrund für iOS-Anwendungen hinzufügen.&lt;br /&gt;
&lt;br /&gt;
In {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; Versionsinformationen}} können Sie dem Array-Schlüssel {{Code|UIBackgroundModes}} die Stringwerte für die Dienste hinzufügen, die weiterhin im Hintergrund ausgeführt werden müssen.&lt;br /&gt;
&lt;br /&gt;
===Neue Option zur Aktivierung der High-DPI-Unterstützung in Ihren VCL-Anwendungen===&lt;br /&gt;
&lt;br /&gt;
In der IDE können Sie jetzt die High-DPI-Unterstützung für Ihre [[VCL|VCL-Anwendungen]] aktivieren.&lt;br /&gt;
&lt;br /&gt;
Sie können in {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; [[Anwendungsoptionen|Anwendung]]}} die Option &#039;&#039;&#039;Hochauflösung aktivieren&#039;&#039;&#039; für Ihr Projekt auswählen.&lt;br /&gt;
&lt;br /&gt;
===Verbesserungen des [[Objektinspektor|Objektinspektors]]===&lt;br /&gt;
&lt;br /&gt;
* In einem neuen Filterfeld werden Eigenschaften oder Ereignisse angezeigt, die mit dem angegebenen Muster übereinstimmen. Die neue Option befindet sich unter der &#039;&#039;&#039;Instanzliste&#039;&#039;&#039; des &#039;&#039;&#039;Objektinspektors&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Größere Feinabstimmung im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Mit der neuen Option &#039;&#039;&#039;Anzeigen&#039;&#039;&#039; im Kontextmenü können Sie verschiedene Teile des &#039;&#039;&#039;Objektinspektors&#039;&#039;&#039; ein- oder ausblenden.&lt;br /&gt;
** Instanzliste&lt;br /&gt;
** Filterfeld&lt;br /&gt;
** Schnellzugriffsbereich&lt;br /&gt;
** Beschreibungsbereich (standardmäßig ausgeblendet)&lt;br /&gt;
** Statuszeile&lt;br /&gt;
&lt;br /&gt;
Auf die neuen Optionen kann auch über {{menu | Tools &amp;amp;gt; Optionen}} | {{menu | Umgebungsoptionen &amp;amp;gt; Objektinspektor}} zugegriffen werden.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [[Objektinspektor#Optionen des Menüs &amp;quot;Anzeigen&amp;quot;|Optionen im Objektinspektor]].&lt;br /&gt;
&lt;br /&gt;
===Neue Symbole für die Strukturansicht===&lt;br /&gt;
&lt;br /&gt;
Die Symbole in der [[Strukturansicht|Strukturansicht]] stimmen jetzt mit den Symbolen in der [[Tool-Palette|Tool-Palette]] überein. Anhand der Miniaturansichten können Sie auf einfache Weise die Anwendungskomponenten in der &#039;&#039;&#039;Strukturansicht&#039;&#039;&#039; finden.&lt;br /&gt;
&lt;br /&gt;
===Neuer Standardwert für den Parameter InstallLocation im Android-Manifest===&lt;br /&gt;
&lt;br /&gt;
Der neue Standardwert für den Parameter &#039;&#039;&#039;InstallLocation&#039;&#039;&#039; in der [[Anwendungsmanifestdatei für Android (AndroidManifest.xml)|Android-Anwendungsmanifestdatei]] ist {{Code|auto}}. Weitere Informationen finden Sie unter [[Versionsinformationen#Android-Versionsinformationen|Android-Versionsinformationen]].  Durch Ändern dieses Wertes in älteren Projekten können einige spezifische [[Ausführen von Android-Anwendungen auf einem Android-Gerät#Debugger wird nicht gestartet oder Haltepunkte werden ignoriert|Debugging-Probleme]] behoben werden.&lt;br /&gt;
&lt;br /&gt;
===Neue Option zum Ausblenden nicht-visueller Komponenten beim Entwurf===&lt;br /&gt;
&lt;br /&gt;
In der IDE können Sie jetzt nicht-visuelle Komponenten beim Entwurf [[Nicht-visuelle Komponenten ausblenden|ein- oder ausblenden]].&lt;br /&gt;
&lt;br /&gt;
===Neues Aussehen und Verhalten des Dialogfeldes &amp;quot;Verzeichnis auswählen&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
In der IDE wird jetzt ein modernisiertes [[lib_de:Vcl.FileCtrl.SelectDirectory|Dialogfeld &amp;quot;Verzeichnis auswählen&amp;quot;]] für das Suchen von Ordnern angezeigt. In das [[lib_de:Vcl.FileCtrl.SelectDirectory|Dialogfeld &amp;quot;Verzeichnis auswählen&amp;quot;]] können Sie einen Ordnerpfad eingeben oder einfügen.&lt;br /&gt;
&lt;br /&gt;
[[File:ModernizedSelectDirectory.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Dieses Dialogfeld wird beispielsweise im &#039;&#039;&#039;Datei-Finder&#039;&#039;&#039; (&amp;lt;code&amp;gt;Strg-Umschalt-F&amp;lt;/code&amp;gt;) angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Verbesserungen der Tools-API===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Editor-Interface zum Zeichnen&#039;&#039;&#039;: Neue Tools-API-Interfaces zum Zeichnen wurden zur Erweiterung des Quelltext-Editors hinzugefügt, um das benutzerdefinierte Zeichnen zu verbessern.&lt;br /&gt;
&lt;br /&gt;
Siehe [[Erweitern der IDE mit der Tools-API|Erweitern der IDE mit der Tools-API]].&lt;br /&gt;
{{f|radstudio|&lt;br /&gt;
&lt;br /&gt;
===Verbesserte Unterstützung für ältere Projekte===&lt;br /&gt;
&lt;br /&gt;
{{Version|Seattle}} unterstützt den Import von Projekten aus {{Delphi|Seattle}} {{Version|1}} bis {{Version|XE8}} und {{CBuilder|Seattle}} {{Version|3}} bis {{Version|XE8}}. }}&lt;br /&gt;
&lt;br /&gt;
==Änderungen für Datenbanken==&lt;br /&gt;
&lt;br /&gt;
{{f|datasnap|&lt;br /&gt;
&lt;br /&gt;
===[[DataSnap-Anwendungen entwickeln|DataSnap]]===&lt;br /&gt;
&lt;br /&gt;
====Komprimierte Übertragung von FireDAC-Datenmengen====&lt;br /&gt;
&lt;br /&gt;
In {{Version|Seattle}} erfolgt die Übertragung von FireDAC-Datenmengen zwischen einem DataSnap-Server und einem DataSnap-Client komprimiert. Als Ergebnis belegen Server und Client ungefähr ein Drittel des Speichers als bei {{Version|XE8}}.&lt;br /&gt;
&lt;br /&gt;
====Bestimmte DataSnap-Clientanwendungen benötigen OpenSSL nicht mehr====&lt;br /&gt;
&lt;br /&gt;
Bestimmte [[DataSnap-Anwendungen entwickeln|DataSnap-Clientanwendungen]] benötigen OpenSSL nicht mehr für die Unterstützung von HTTPS:&lt;br /&gt;
&lt;br /&gt;
* Ein [[DataSnap-Anwendungen entwickeln|DataSnap-Client]] mit [[lib_de:Datasnap.DSClientRest.TDSRestConnection|TDSRestConnection]] benötigt OpenSSL nicht.&lt;br /&gt;
* Ein [[DataSnap-Anwendungen entwickeln|DataSnap-Client]] mit [[lib_de:Data.SqlExpr.TSQLConnection|TSQLConnection]] benötigt OpenSSL eventuell nicht.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Für DataSnap-Clientanwendungen, die [[Filtern des DataSnap-Byte-Streams|Filter]] verwenden, ist die Installation von OpenSSL-Bibliotheken erforderlich.&lt;br /&gt;
&lt;br /&gt;
====Neue DataSnap-Demobeispiele====&lt;br /&gt;
&lt;br /&gt;
{{Product|Seattle}} enthält zwei neue Beispiele für die Verwendung von [[lib_de:FireDAC.Comp.Client.TFDSchemaAdapter|FDSchemaAdapter]] in [[DataSnap-Anwendungen entwickeln|DataSnap]]-Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* Das [[Samp:DataSnap.FireDAC Sample|FireDAC]]-Beispiel in {{Path|Object Pascal\DataSnap\FireDAC}}.&lt;br /&gt;
* Das [[Samp:DataSnap.FireDAC DBX Sample|FireDAC DBX]]-Beispiel in {{Path|Object Pascal\DataSnap\FireDAC_DBX}}.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===[[FireDAC|FireDAC]]===&lt;br /&gt;
&lt;br /&gt;
====Optimierung von FireDAC-ETL-Komponenten====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FireDAC.Comp.BatchMove.SQL.TFDBatchMoveSQLWriter|TFDBatchMoveSQLWriter]] unterstützt alle möglichen [[lib_de:FireDAC.Comp.BatchMove.TFDBatchMove.Mode|Modi]] der [[lib_de:FireDAC.Comp.BatchMove.TFDBatchMove|TFDBatchMove]]-Datenbewegung.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Modus {{Const|dmAppendUpdate}} wird nur unterstützt, wenn die Datenbank MERGE, INSERT OR REPLACE oder ähnliche DML-Anweisungen unterstützt.&lt;br /&gt;
&lt;br /&gt;
====Unterstützung für die NoSQL MongoDB-Datenbank====&lt;br /&gt;
&lt;br /&gt;
In {{Version|Seattle}} enthält FireDAC die vollständige Unterstützung für die NoSQL MongoDB-Datenbank.&lt;br /&gt;
&lt;br /&gt;
Entwickeln Sie mit dem neuen FireDAC-Verbindungstreiber, den API-Klassen und den neuen Komponenten Anwendungen, die eine Verbindung mit der MongoDB-Datenbank herstellen.&lt;br /&gt;
&lt;br /&gt;
Einzelheiten finden Sie unter [[Herstellen einer Verbindung zur MongoDB-Datenbank (FireDAC)|Herstellen einer Verbindung zu einer MongoDB-Datenbank mit FireDAC]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Einrichten einer Verbindung zu einer MongoDB-Datenbank&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie den neuen MongoDB-Treiber von FireDAC, um eine Verbindung zu der MongoDB-Datenbank einzurichten.&lt;br /&gt;
&lt;br /&gt;
* Verwenden Sie in der [[lib_de:FireDAC.Comp.Client.TFDConnection|TFDConnection]]-Komponente die neue Treiber-ID &#039;&#039;&#039;Mongo&#039;&#039;&#039; als [[lib_de:FireDAC.Comp.Client.TFDCustomConnection.DriverName|DriverName]].&lt;br /&gt;
* Neue &#039;&#039;&#039;[[lib_de:FireDAC.Phys.MongoDB.TFDPhysMongoDriverLink|TFDPhysMongoDriverLink]]&#039;&#039;&#039;-Komponente und die &#039;&#039;&#039;[[lib_de:FireDAC.Phys.MongoDB|FireDAC.Phys.MongoDB]]&#039;&#039;&#039;-Unit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MongoDB-Wrapper-Klassen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FireDAC enthält nun Wrapper-Klassen zum Kapseln von MongoDB-Datenbankanweisungen, -methoden und -strukturen:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:FireDAC.Phys.MongoDBWrapper.TMongoConnection|TMongoConnection]]: Klasse zum Verwalten von Verbindungen zu einem MongoDB-Server, zum Zugreifen auf Datenbanken und Objektsammlungen.&lt;br /&gt;
* [[lib_de:FireDAC.Phys.MongoDBWrapper.TMongoDatabase|TMongoDatabase]]: Klasse zum Verwalten einer MongoDB-Datenbank, Sammlungen und Benutzer in der MongoDB-Datenbank.&lt;br /&gt;
* [[lib_de:FireDAC.Phys.MongoDBWrapper.TMongoCollection|TMongoCollection]]: Klasse, die eine MongoDB-Sammlung repräsentiert.&lt;br /&gt;
* [[lib_de:FireDAC.Phys.MongoDBWrapper.TMongoCursor|TMongoCursor]]: Klasse, die ein Ergebnismengendokument aus einem MongoDB-Cursor abruft.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MongoDB-Anweisungs- und -Methodengeneratoren&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FireDAC unterstützt jetzt Anweisungen für MongoDB-Abfragen, -Pipelines und -Aktualisierungen mit dem Stilbefehl &#039;&#039;&#039;fluent&#039;&#039;&#039; und Methodengeneratoren.&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:FireDAC.Phys.MongoDBWrapper.TMongoUpdate|TMongoUpdate]]: repräsentiert den Generator [https://docs.mongodb.org/manual/reference/operator/update/ MongoDB Update (EN)].&lt;br /&gt;
* [[lib_de:FireDAC.Phys.MongoDBWrapper.TMongoSelector|TMongoSelector]]: repräsentiert den Generator [http://docs.mongodb.org/manual/reference/method/db.collection.remove/ MongoDB Selector (EN)].&lt;br /&gt;
* [[lib_de:FireDAC.Phys.MongoDBWrapper.TMongoInsert|TMongoInsert]]: repräsentiert den Generator [http://docs.mongodb.org/manual/reference/method/db.collection.insert/ MongoDB Insert (EN)].&lt;br /&gt;
* [[lib_de:FireDAC.Phys.MongoDBWrapper.TMongoIndex|TMongoIndex]]: repräsentiert den Definitionsgenerator [http://docs.mongodb.org/manual/reference/method/db.collection.insert/ MongoDB Index (EN)].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Neue MongoDB-Datenmengen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
FireDAC-spezifische MongoDB-Datenmengen rufen die Daten aus einer MongoDB-Datenbank ab und verwalten sie.&lt;br /&gt;
&lt;br /&gt;
* Mit der Komponente [[lib_de:FireDAC.Phys.MongoDBDataSet.TFDMongoDataSet|TFDMongoDataSet]] verknüpfen Sie die Datenmenge mit dem MongoDB-Cursor.&lt;br /&gt;
* Mit der Komponente [[lib_de:FireDAC.Phys.MongoDBDataSet.TFDMongoQuery|TFDMongoQuery]] führen Sie Abfragen der MongoDB-Sammlungen aus.&lt;br /&gt;
* Mit der Komponente [[lib_de:FireDAC.Phys.MongoDBDataSet.TFDMongoPipeline|TFDMongoPipeline]] führen Sie Pipelines der MongoDB-Sammlung aus.&lt;br /&gt;
&lt;br /&gt;
====Erweiterungen des [[Herstellen einer Verbindung zu ODBC-Datenquellen (FireDAC)|ODBC-Treibers]]====&lt;br /&gt;
&lt;br /&gt;
Der [[Herstellen einer Verbindung zu ODBC-Datenquellen (FireDAC)|ODBC-Treiber]] für FireDAC wurde verbessert:&lt;br /&gt;
&lt;br /&gt;
* Wenn Sie den ODBC-Treiber und eine [http://www.pervasive.com/database/Home/Products/PSQLv10.aspx Pervasive 10-Datenbank (EN)] verwenden, ist der Parameter &#039;&#039;&#039;NumericFormat&#039;&#039;&#039; standardmäßig &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Weitere FireDAC-Änderungen====&lt;br /&gt;
&lt;br /&gt;
*Die Eigenschaft &#039;&#039;&#039;AutoCommitUpdates&#039;&#039;&#039; wurde aus [[lib_de:FireDAC.Comp.DataSet.TFDDataSet|TFDDataSet]] nach [[lib_de:FireDAC.Stan.Option.TFDUpdateOptions|TFDUpdateOptions]] verschoben.&lt;br /&gt;
** Die Eigenschaft &#039;&#039;&#039;AutoCommitUpdates&#039;&#039;&#039; wurde aus [[lib_de:FireDAC.Comp.Client.TFDSchemaAdapter|TFDSchemaAdapter]] nach [[lib_de:FireDAC.Stan.Option.TFDUpdateOptions|TFDUpdateOptions]] verschoben.&lt;br /&gt;
** [[lib_de:FireDAC.Comp.Client.TFDSchemaAdapter|TFDSchemaAdapter]] enthält nun die Eigenschaft &#039;&#039;&#039;UpdateOptions&#039;&#039;&#039;.&lt;br /&gt;
** Wenn [[lib_de:FireDAC.Stan.Option.TFDUpdateOptions.AutoCommitUpdates|AutoCommitUpdates]] &#039;&#039;&#039;True&#039;&#039;&#039; ist, dann entfernt [[lib_de:FireDAC.Comp.DataSet.TFDDataSet.ApplyUpdates|ApplyUpdates]] alle Änderungen, die für alle Datensätze im Änderungsprotokoll der Datenmenge erfolgreich übernommen wurden.&lt;br /&gt;
* [[lib_de:FireDAC.Comp.Client.TFDTable|TFDTable]].[[lib_de:FireDAC.Comp.DataSet.TFDDataSet.FetchOptions|FetchOptions]].[[lib_de:FireDAC.Stan.Option.TFDFetchOptions.LiveWindowParanoic|LiveWindowParanoic]] ist jetzt standardmäßig {{True}}.&lt;br /&gt;
* Wenn Ihre SQL-Anweisung nicht parametrisiert ist, können Sie jetzt den Parameter {{Arg|AParams}} in Aufrufen von [[lib_de:FireDAC.Comp.Client.TFDCustomConnection.ExecSQL|TFDConnection.ExecSQL]] weglassen, anstatt einen nil-Parameter zu übergeben.&lt;br /&gt;
* Verwenden Sie den neuen Parameter im nativen Informix-Treiber, &#039;&#039;&#039;TxSupported&#039;&#039;&#039;, um anzugeben, ob die Informix-Datenbank SQL-Transaktionen unterstützt oder nicht. Weitere Informationen finden Sie unter [[Herstellen einer Verbindung zu Informix (FireDAC)|Herstellen einer Verbindung zu Informix (FireDAC)]].&lt;br /&gt;
&lt;br /&gt;
===[[REST-Clientbibliothek|REST-Clientbibliothek]] und [[Übersicht über BaaS|BaaS]]===&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:REST.Client.TRESTRequestParameterList.AddItem|TRESTRequestParameterList.AddItem]] akzeptiert Werte als [[lib_de:System.SysUtils.TBytes|Byte-Arrays]] oder [[lib_de:System.Classes.TStream|Streams]].&lt;br /&gt;
* [[lib_de:REST.Client.TCustomRESTRequest|TCustomRESTRequest]] hat eine neue schreibgeschützte Eigenschaft, [[lib_de:REST.Client.TCustomRESTRequest.Body|Body]], mit der Sie den Text, den Sie zuvor mit [[lib_de:REST.Client.TCustomRESTRequest.AddBody|AddBody]] definiert haben, lesen können.&lt;br /&gt;
* Die [[REST-Clientbibliothek|REST-Clientbibliothek]] und [[Übersicht über BaaS|BaaS]] unterstützen jetzt JSON-[[lib_de:System.JSON.Readers|Reader]] und -[[lib_de:System.JSON.Writers|Writer]].&lt;br /&gt;
* Der Typ [[lib_de:REST.Json.Types.TParseDate|TParseDate]] unterstützt das Parse-Date-Objekt im korrekten Format.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;__type&amp;quot;: &amp;quot;Date&amp;quot;,&lt;br /&gt;
  &amp;quot;iso&amp;quot;: &amp;quot;2015-08-25T18:32:12.265Z&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==[[Entwickeln von Cloud-Anwendungen|Cloud]]==&lt;br /&gt;
&lt;br /&gt;
===Für die Cloud-API ist OpenSSL nicht mehr erforderlich===&lt;br /&gt;
&lt;br /&gt;
[[lib_de:Data.Cloud.AmazonAPI|AmazonAPI]] und [[lib_de:Data.Cloud.AzureAPI|AzureAPI]] benötigen OpenSSL nicht mehr für die Unterstützung von HTTPS.&lt;br /&gt;
&lt;br /&gt;
===Einige Member von [[lib_de:Data.Cloud.CloudAPI|CloudAPI]] sind veraltet===&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:Data.Cloud.CloudAPI.Encode64|Encode64]] ist veraltet, verwenden Sie [[lib_de:System.NetEncoding.TNetEncoding.Encode|TNetEncoding.Encode]] (für die Eigenschaft [[lib_de:System.NetEncoding.TNetEncoding.Base64|base64]]).&lt;br /&gt;
* [[lib_de:Data.Cloud.CloudAPI.EncodeBytes64|EncodeBytes64]] ist veraltet, verwenden Sie [[lib_de:System.NetEncoding.TNetEncoding.EncodeBytesToString|TNetEncoding.EncodeBytesToString]] (für die Eigenschaft [[lib_de:System.NetEncoding.TNetEncoding.Base64|base64]]).&lt;br /&gt;
* [[lib_de:Data.Cloud.CloudAPI.Decode64|Decode64]] ist veraltet, verwenden Sie [[lib_de:System.NetEncoding.TNetEncoding.Decode|TNetEncoding.Decode]] (für die Eigenschaft [[lib_de:System.NetEncoding.TNetEncoding.Base64|base64]]).&lt;br /&gt;
* [[lib_de:Data.Cloud.CloudAPI.DecodeBytes64|DecodeBytes64]] ist veraltet, verwenden Sie [[lib_de:System.NetEncoding.TNetEncoding.DecodeStringToBytes|TNetEncoding.DecodeStringToBytes]] (für die Eigenschaft [[lib_de:System.NetEncoding.TNetEncoding.Base64|base64]]).&lt;br /&gt;
* [[lib_de:Data.Cloud.CloudAPI.XMLEscape|XMLEscape]] ist veraltet, verwenden Sie [[lib_de:System.NetEncoding.TNetEncoding.Encode|TNetEncoding.Encode]] (für die Eigenschaft [[lib_de:System.NetEncoding.TNetEncoding.HTML|HTML]]).&lt;br /&gt;
&lt;br /&gt;
===Amazon===&lt;br /&gt;
&lt;br /&gt;
*[[lib_de:Data.Cloud.AmazonAPI|AmazonAPI]] unterstützt jetzt die &#039;&#039;&#039;neuesten API-Versionen&#039;&#039;&#039;:&lt;br /&gt;
** Amazon Simple Storage Service (S3): {{Code|API Version 2006-03-01}}&lt;br /&gt;
** Amazon Simple DB: {{Code|API Version 2009-04-15}}&lt;br /&gt;
** Amazon Simple Queue Service (SQS): {{Code|API Version 2012-11-05}}&lt;br /&gt;
*[[lib_de:Data.Cloud.AmazonAPI|AmazonAPI]] unterstützt jetzt &#039;&#039;&#039;AWS Signature Version 4&#039;&#039;&#039;:&lt;br /&gt;
** Diese Änderung ist für den Benutzer transparent.&lt;br /&gt;
** Die API verwendet [http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html AWS Signature Version 4 (EN)], wo immer möglich, behält aber die Abwärtskompatibilität bei.&lt;br /&gt;
&lt;br /&gt;
===Azure===&lt;br /&gt;
&lt;br /&gt;
*[[lib_de:Data.Cloud.AzureAPI|AzureAPI]] unterstützt jetzt die &#039;&#039;&#039;neuesten API-Versionen&#039;&#039;&#039;:&lt;br /&gt;
** Microsoft Azure Blob Service: {{Code|API Version 2014-02-14}}&lt;br /&gt;
** Microsoft Azure Table Service: {{Code|API Version 2014-02-14}}&lt;br /&gt;
** Microsoft Azure Queue Service: {{Code|API Version 2014-02-14}}&lt;br /&gt;
* Bei der Methode zum [[lib_de:Data.Cloud.AzureAPI.TAzureBlobService.AcquireBlobLease|Leasen eines Blobs]] kann jetzt ein {{Arg|LeaseDuration}}-Parameter angegeben werden. Weitere Informationen über den neuen Parameter {{Arg|LeaseDuration}} finden Sie unter [https://msdn.microsoft.com/en-us/library/azure/ee691972.aspx Microsoft Azure - Lease Blob (EN)].&lt;br /&gt;
&lt;br /&gt;
==Änderungen des Debuggers für {{Version|Seattle}}==&lt;br /&gt;
&lt;br /&gt;
===[[Debuggen von geräteübergreifenden Anwendungen|Remotes Debugging auf iOS-64-Bit-Geräten]]===&lt;br /&gt;
&lt;br /&gt;
In {{Version|Seattle}} wird jetzt das [[Debuggen von geräteübergreifenden Anwendungen|Debugging]] von iOS64-Anwendungen unterstützt. In der IDE ist nun &#039;&#039;&#039;F9&#039;&#039;&#039; für die Zielplattform &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039; aktiviert.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur Unterstützung von Remote-Debugging für 64-Bit-iOS-Anwendungen finden Sie unter [[Debuggen von iOS-Apps#Debuggen von Apps, die auf dem 64-Bit-iOS-Gerät ausgeführt werden|Debuggen von Apps, die auf dem 64-Bit-iOS-Gerät ausgeführt werden]].&lt;br /&gt;
&lt;br /&gt;
===Verbesserte OS X-Exception-Behandlung===&lt;br /&gt;
&lt;br /&gt;
Die OS X-Exception-Behandlung wurde in {{Version|Seattle}} verbessert.&lt;br /&gt;
&lt;br /&gt;
{{f|radstudio|&lt;br /&gt;
&lt;br /&gt;
==Änderungen des Test-Frameworks für {{Version|Seattle}}==&lt;br /&gt;
&lt;br /&gt;
In {{Product|Seattle}} {{Version|Seattle}} wurde die Unterstützung für &#039;&#039;&#039;DUnitX&#039;&#039;&#039;-Unit-Tests für mobile Plattformen (iOS und Android) erweitert. Dieses Test-Framework ermöglicht jetzt die Entwicklung und Ausführung von Tests für iOS-Geräte, Android und iOS-Simulator.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [[Überblick über DUnitX|Überblick über DUnitX]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Integrierte Frameworks und SDKs==&lt;br /&gt;
&lt;br /&gt;
* Microsoft Windows 10 SDK wird jetzt mit {{Product|Seattle}} {{Version|Seattle}} installiert. {{Product|Seattle}} {{Version|Seattle}} unterstützt zudem die folgenden SDKs:&lt;br /&gt;
** Microsoft Windows 8.x SDK&lt;br /&gt;
** Microsoft Windows 7 SDK&lt;br /&gt;
* {{Product|Seattle}} {{Version|Seattle}} unterstützt jetzt die [https://msdn.microsoft.com/en-us/library/windows/desktop/dn554295%28v=vs.85%29.aspx Windows RT API (EN)] (Windows Runtime API) und die [https://msdn.microsoft.com/en-us/library/windows/desktop/ff818516%28v=vs.85%29.aspx Windows API (EN)].&lt;br /&gt;
&lt;br /&gt;
==[[Hilfe zur Hilfe|Hilfe]]==&lt;br /&gt;
&lt;br /&gt;
===Beispielanwendungen enthalten bessere Readme-Dateien===&lt;br /&gt;
&lt;br /&gt;
Die Projektunterordner im Ordner mit den Beispielanwendungen enthalten nun aus dem Inhalt der [[Samp:Category:Sample|Dokumentation der Beispielanwendungen]] generierte HTML-Readme-Dateien. Diese Readme-Dateien beinhalten detaillierte Informationen zu jeder Beispielanwendung, einschließlich einer Beschreibung, Schritten zum Ausführen der Beispielanwendung und Links zu verwandten Hilfequellen.&lt;br /&gt;
&lt;br /&gt;
===In der Bibliotheksdokumentation werden Unit-Packages angezeigt===&lt;br /&gt;
&lt;br /&gt;
Auf den Unit-Seiten in der [[lib_de:Main Page|Bibliotheksdokumentation]] werden jetzt die in einem Package enthaltenen Units angezeigt. Wenn Sie wissen möchten, in welchem Package eine bestimmte Unit enthalten ist, öffnen Sie die API-Referenzseite für diese Unit, wie z. B. [[lib_de:System.SysUtils|System.SysUtils]] oder [[lib_de:FMX.Controls|FMX.Controls]].&lt;br /&gt;
&lt;br /&gt;
===Verbesserte Navigation mithilfe von Seiten mit Begriffserklärungen und Umleitungen===&lt;br /&gt;
&lt;br /&gt;
Für einige der am häufigsten gesuchten Begriffe in der [[Hauptseite|Themen-Online-Dokumentation]] stehen nun Seiten mit Begriffserklärungen und Umleitungen zur Verfügung, die die Suche nach der gewünschten Dokumentation erleichtern. Suchen Sie beispielsweise nach [[Special:Search/datasnap|datasnap]], [[Special:Search/android|android]], [[Special:Search/paserver|paserver]] oder [[Special:Search/listview|listview]].&lt;br /&gt;
&lt;br /&gt;
==Hinweise zu OS X 10.11 und iOS 9==&lt;br /&gt;
&lt;br /&gt;
===PAServer-Hotfix für {{Product|Seattle}} {{Version|Seattle}}===&lt;br /&gt;
&lt;br /&gt;
Dieser Hotfix stellt Korrekturen für die Erzeugung der folgenden Anwendungen bereit:&lt;br /&gt;
&lt;br /&gt;
* OS X 10.11 (El Capitan)&lt;br /&gt;
* iOS-Anwendungen unter iOS 7, iOS 8 und iOS 9 mit dem iOS 9 SDK&lt;br /&gt;
&lt;br /&gt;
Sie können den Hotfix hier herunterladen: [http://cc.embarcadero.com/item/30398 http://cc.embarcadero.com/item/30398]&lt;br /&gt;
&lt;br /&gt;
[[Category:Seattle]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:What&#039;s New in Seattle]]&lt;br /&gt;
[[fr:Nouveautés de Seattle]]&lt;br /&gt;
[[ja:Seattle の新機能]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Versionsinformationen&amp;diff=208927</id>
		<title>Versionsinformationen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Versionsinformationen&amp;diff=208927"/>
		<updated>2016-06-24T10:55:53Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Projektoptionen (Dialogfeld)}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; Versionsinformationen}}&lt;br /&gt;
&lt;br /&gt;
In diesem Dialogfeld legen Sie Versionsinformationen für ein Projekt fest. Wenn ein Benutzer mit der rechten Maustaste auf das Programmsymbol klickt und &amp;quot;Eigenschaften&amp;quot; wählt, werden die Versionsinformationen angezeigt.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Optionen&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Ziel, Übernehmen, Speichern&lt;br /&gt;
|&lt;br /&gt;
Siehe [[Optionen für das Ziel|Optionen für das Ziel]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Gemeinsame Elemente&lt;br /&gt;
|&lt;br /&gt;
Siehe [[Gemeinsame Elemente auf den Projektoptionsseiten|Gemeinsame Elemente auf den Projektoptionsseiten]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auf der Seite &#039;&#039;&#039;Versionsinformationen&#039;&#039;&#039; werden je nach im Feld &#039;&#039;&#039;Ziel&#039;&#039;&#039; ausgewählter Zielplattform unterschiedliche Felder angezeigt:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#Windows-Versionsinformationen|Windows-Versionsinformationen]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[#OS X- und iOS-Versionsinformationen|OS X- und iOS-Versionsinformationen]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[#Android-Versionsinformationen|Android-Versionsinformationen]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Windows-Versionsinformationen==&lt;br /&gt;
&lt;br /&gt;
Wenn es sich bei der im Feld &#039;&#039;&#039;Ziel&#039;&#039;&#039; ausgewählten Zielplattform entweder um &#039;&#039;&#039;32-Bit-Windows&#039;&#039;&#039; oder um &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039; handelt, enthält die Seite &#039;&#039;&#039;Versionsinformationen&#039;&#039;&#039; die folgenden Felder:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Versionsinformationen in das Projekt übernehmen&lt;br /&gt;
|&lt;br /&gt;
Legt fest, ob der Benutzer Produktidentifikationsinformationen anzeigen kann.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Versionsnummer des Moduls&lt;br /&gt;
|&lt;br /&gt;
Legt eine hierarchisch strukturierte Identifikationsnummer bestehend aus Versionsnummern (Haupt- und Nebenversion), Release-Nummer und Build-Nummer fest (z. B. 2.1.3.5):&lt;br /&gt;
*In den Feldern &#039;&#039;&#039;Hauptversion&#039;&#039;&#039;, &#039;&#039;&#039;Nebenversion&#039;&#039;&#039;, &#039;&#039;&#039;Ausgabe&#039;&#039;&#039; und &#039;&#039;&#039;Build&#039;&#039;&#039; können vorzeichenlose Ganzzahlen im Bereich von 0 bis 65.535 eingegeben werden. Der daraus zusammengesetzte String bildet eine eindeutige Versionsnummer für die Anwendung.&lt;br /&gt;
&lt;br /&gt;
Um die &#039;&#039;&#039;Versionsnummer&#039;&#039;&#039; auf einer Windows-Plattform anzuzeigen, klicken Sie mit der rechten Maustaste im Windows-Datei-Explorer auf die EXE-Datei und wählen im Kontextmenü &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039;. Im Dialogfeld &amp;quot;Eigenschaften&amp;quot; wird u. a. die &#039;&#039;&#039;Dateiversion&#039;&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
Um programmseitig Versionsinformationen Ihrer compilierten Win32-Anwendung zu ermitteln, verwenden Sie die &#039;&#039;&#039;Windows-API-Funktionen [http://msdn.microsoft.com/en-us/library/ms647003%28v=VS.85%29.aspx GetFileVersionInfo (EN)]&#039;&#039;&#039; und &#039;&#039;&#039;[http://msdn.microsoft.com/en-us/library/ms647464(VS.85).aspx VerQueryValue (EN)]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Versionsinformationen für einen emulierten Win32-Prozess, der in einer Win64-Umgebung ausgeführt wird, erhalten Sie mit der Funktion [http://msdn.microsoft.com/en-us/library/ms724340(VS.85).aspx GetNativeSystemInfo (EN)].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Optionen für Build-Nummern&lt;br /&gt;
|&lt;br /&gt;
Legt fest, wie die Build-Nummer geändert wird, wenn Sie &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; &amp;amp;lt;Projekt&amp;amp;gt; erzeugen&#039;&#039;&#039;&amp;lt;/font&amp;gt; wählen. Durch andere Compilierungsarten wird die Build-Nummer nicht geändert (die vierte Zahl in der Versionsnummer, z. B. 1.2.3.4).&lt;br /&gt;
*&#039;&#039;&#039;Build-Nr. automatisch erzeugen&#039;&#039;&#039; erzeugt die &#039;&#039;&#039;Ausgabe&#039;&#039;&#039;- und &#039;&#039;&#039;Build&#039;&#039;&#039;-Nummer und inkrementiert die Nummern bei jedem Aufruf von &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; &amp;amp;lt;Projekt&amp;amp;gt; erzeugen&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Wenn &#039;&#039;&#039;Build-Nr. automatisch erzeugen&#039;&#039;&#039; festgelegt ist:&lt;br /&gt;
** &#039;&#039;&#039;Ausgabe&#039;&#039;&#039; = Anzahl der Tage seit dem 1. Januar 2000&lt;br /&gt;
** &#039;&#039;&#039;Build&#039;&#039;&#039; = Anzahl der Sekunden seit Mitternacht (00:00:00) dividiert durch 2&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Für &#039;&#039;&#039;Build-Nr. automatisch erzeugen&#039;&#039;&#039; müssen Sie eventuell die Umgebungsvariable (SAVEVRC=TRUE) setzen.&lt;br /&gt;
Wählen Sie &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;Tools &amp;amp;gt; Optionen &amp;amp;gt; Umgebungsoptionen  &amp;amp;gt; [[Umgebungsvariablen|Umgebungsvariablen]]&amp;lt;/font&amp;gt;&#039;&#039;&#039;, und fügen Sie eine neue Benutzervariable mit dem Namen &#039;&#039;&#039;SAVEVRC&#039;&#039;&#039; und dem Wert &#039;&#039;&#039;TRUE&#039;&#039;&#039; hinzu.&lt;br /&gt;
Durch diese Variable wird das Generieren einer VRC-Datei mit einer automatisch erzeugten Build-Nummer und anderen Informationen aktiviert.&lt;br /&gt;
Diese Informationen werden compiliert und der RES-Datei hinzugefügt. Wenn Sie mit der rechten Maustaste auf Ihre ausführbare Datei klicken, wird die generierte Build-Nummer angezeigt.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Mit der Option &#039;&#039;&#039;Build-Nr. automatisch erhöhen&#039;&#039;&#039; wird die Build-Nummer jedes Mal erhöht, wenn der Menübefehl &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &#039;&#039;&#039;Projekt &amp;amp;gt; &amp;amp;lt;Projekt&amp;amp;gt; erzeugen&#039;&#039;&#039; &amp;lt;/font&amp;gt; gewählt wird. Bei anderen Arten der Compilierung wird die Build-Nummer nicht erhöht.&lt;br /&gt;
* &#039;&#039;&#039;Build-Nr. nicht ändern&#039;&#039;&#039; behält die vorhandene Build-Nummer bei. Dies ist die Vorgabe.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Modulattribute&lt;br /&gt;
|&lt;br /&gt;
Gibt den Zweck dieser Version an: Fehlersuche, Testversion usw. Modulattribute können zu Informationszwecken in die Versionsinformationen aufgenommen werden. Wird ein Projekt im Debug-Modus compiliert, wird das entsprechende Flag in die Versionsinformationen aufgenommen. Die verbleibenden Flags können nach Bedarf gesetzt werden.&lt;br /&gt;
*&#039;&#039;&#039;Debug-Build&#039;&#039;&#039; – Das Projekt wurde im Debug-Modus compiliert.&lt;br /&gt;
*&#039;&#039;&#039;Testversion&#039;&#039;&#039; – Die Version ist keine endgültige Version.&lt;br /&gt;
*&#039;&#039;&#039;DLL&#039;&#039;&#039; – Das Projekt enthält eine dynamische Link-Bibliothek (DLL).&lt;br /&gt;
*&#039;&#039;&#039;Spezielles Build&#039;&#039;&#039; – Die Version ist eine Abwandlung der Standardversion.&lt;br /&gt;
*&#039;&#039;&#039;Privates Build&#039;&#039;&#039; – Die Version wurde nicht unter den üblichen Gesichtspunkten für Ausgabeversionen compiliert.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Sprache&lt;br /&gt;
|&lt;br /&gt;
Gibt die Codeseite an, die zur Ausführung der Anwendung auf dem System des Benutzers erforderlich ist. Die &#039;&#039;&#039;Länderkennungs-ID&#039;&#039;&#039; kann in Hex angezeigt werden; zum Beispiel $0409 = Codeseite 1033.&lt;br /&gt;
&lt;br /&gt;
Sie können hier nur eine Sprache auswählen, die im Dialogfeld &#039;&#039;&#039;Regions- und Sprachoptionen&#039;&#039;&#039; Ihres Computers aufgeführt ist. In einigen Windows-Versionen werden nicht alle Sprachen (z. B. fernöstliche Sprachen) unterstützt. Sie müssen mit Hilfe des entsprechenden Sprachpakets separat installiert werden.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Liste &amp;quot;Schlüssel/Wert&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Legt typische Daten zur Produktidentifikation fest. Die Schlüsseleinträge können geändert werden, indem der Schlüssel ausgewählt und der Name neu eingegeben wird. Klicken Sie zum Hinzufügen von Schlüsseleinträgen mit der rechten Maustaste in die Tabelle &amp;quot;Schlüssel/Wert&amp;quot;, und wählen Sie &#039;&#039;&#039;Schlüssel hinzufügen&#039;&#039;&#039;. Um den Wert für einen Schlüssel einzugeben oder zu ändern, tippen Sie ihn einfach in das Feld &#039;&#039;&#039;Wert&#039;&#039;&#039; ein.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==OS X- und iOS-Versionsinformationen==&lt;br /&gt;
&lt;br /&gt;
Wenn im Feld &#039;&#039;&#039;Ziel&#039;&#039;&#039; als Zielplattform &#039;&#039;&#039;OS X&#039;&#039;&#039;, &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039;, &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039; oder &#039;&#039;&#039;iOS-Simulator&#039;&#039;&#039; ausgewählt wird, enthält die Seite &#039;&#039;&#039;Versionsinformationen&#039;&#039;&#039; die folgenden Felder:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Versionsinformationen in das Projekt übernehmen&lt;br /&gt;
|&lt;br /&gt;
Legt fest, ob der Benutzer Produktidentifikationsinformationen anzeigen kann.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Versionsnummer des Moduls&lt;br /&gt;
|&lt;br /&gt;
Legt eine hierarchisch strukturierte Identifikationsnummer bestehend aus Versionsnummern (Haupt- und Nebenversion) und Build-Nummer fest (z. B. 2.1.5):&lt;br /&gt;
*In den Feldern &#039;&#039;&#039;Hauptversion&#039;&#039;&#039;, &#039;&#039;&#039;Nebenversion&#039;&#039;&#039; und &#039;&#039;&#039;Build&#039;&#039;&#039; können vorzeichenlose Ganzzahlen im Bereich von 0 bis 65.535 eingegeben werden. Der daraus zusammengesetzte String bildet eine eindeutige Versionsnummer für die Anwendung.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Optionen für Build-Nummern&lt;br /&gt;
|&lt;br /&gt;
Legt fest, wie die Build-Nummer geändert wird, wenn Sie &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; &amp;amp;lt;Projekt&amp;amp;gt; erzeugen&#039;&#039;&#039;&amp;lt;/font&amp;gt; wählen. Durch andere Compilierungsarten wird die Build-Nummer nicht geändert (die dritte Zahl in der Versionsnummer, z. B. 1.2.3).&lt;br /&gt;
* &#039;&#039;&#039;Build-Nr. automatisch erzeugen&#039;&#039;&#039; erzeugt die &#039;&#039;&#039;Build&#039;&#039;&#039;-Nummer und inkrementiert die Nummern bei jedem Aufruf von &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; &amp;amp;lt;Projekt&amp;amp;gt; erzeugen&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Ist &#039;&#039;&#039;Build-Nr. automatisch erzeugen&#039;&#039;&#039; festgelegt, dann ist &#039;&#039;&#039;Build&#039;&#039;&#039; die Anzahl der Sekunden seit Mitternacht (00:00:00) dividiert durch 2.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Für &#039;&#039;&#039;Build-Nr. automatisch erzeugen&#039;&#039;&#039; müssen Sie eventuell die Umgebungsvariable (SAVEVRC=TRUE) setzen: Wählen Sie &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;Tools &amp;amp;gt; Optionen &amp;amp;gt; Umgebungsoptionen  &amp;amp;gt; [[Umgebungsvariablen|Umgebungsvariablen]]&amp;lt;/font&amp;gt;&#039;&#039;&#039;, und fügen Sie eine neue Benutzervariable mit dem Namen &#039;&#039;&#039;SAVEVRC&#039;&#039;&#039; und dem Wert &#039;&#039;&#039;TRUE&#039;&#039;&#039; hinzu. Durch diese Variable wird das Generieren einer VRC-Datei mit einer automatisch erzeugten Build-Nummer und anderen Informationen aktiviert.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Mit der Option &#039;&#039;&#039;Build-Nr. automatisch erhöhen&#039;&#039;&#039; wird die Build-Nummer jedes Mal erhöht, wenn der Menübefehl &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &#039;&#039;&#039;Projekt &amp;amp;gt; &amp;amp;lt;Projekt&amp;amp;gt; erzeugen&#039;&#039;&#039; &amp;lt;/font&amp;gt; gewählt wird. Bei anderen Arten der Compilierung wird die Build-Nummer nicht erhöht.&lt;br /&gt;
* &#039;&#039;&#039;Build-Nr. nicht ändern&#039;&#039;&#039; behält die vorhandene Build-Nummer bei. Dies ist die Vorgabe.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Liste &amp;quot;Schlüssel/Wert&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Definiert Schlüssel-/Wertpaare, die der [[Apple-Anwendungsinformationsdatei (*.info.plist)|{{Path|info.plist}}-datei]] Ihres Projekts hinzugefügt werden müssen.&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle sind die Standardfelder, die {{Product}}  bereitstellt, aufgeführt. Um der Datei {{Path|info.plist}} ein neues Feld hinzuzufügen, klicken Sie mit der rechten Maustaste in die Feldliste und wählen Sie &#039;&#039;&#039;Schlüssel hinzufügen&#039;&#039;&#039;. Wenn Sie komplexe Schlüssel-/Wertpaare hinzufügen müssen, die Sie nicht mit dem Listenfeld definieren können, siehe [[Anpassen der Datei info.plist|Anpassen der Datei info.plist]].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Schlüssel&lt;br /&gt;
! Standardwert&lt;br /&gt;
! Hinweise&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-109585 CFBundleName (EN)]&lt;br /&gt;
|&lt;br /&gt;
$(ModuleName)&lt;br /&gt;
|&lt;br /&gt;
Wenn Sie [[Bereitstellen von iOS-Anwendungen für die Übermittlung an den App Store|Ihre Anwendung an den Mac App Store übermitteln]], müssen Sie Ihre &amp;quot;Mac App BundleID&amp;quot; in dieses Feld eingeben. Ansonsten könnte der Mac AppLoader melden, dass die Anwendungsdatei nicht mit der verwendeten &amp;quot;Store BundleId&amp;quot; übereinstimmt.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-130430-BAJJHDJH CFBundleDevelopmentRegion (EN)]&amp;lt;br /&amp;gt;&lt;br /&gt;
(nur iOS)&lt;br /&gt;
|&lt;br /&gt;
en&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-110725-TPXREF135 CFBundleDisplayName (EN)]&lt;br /&gt;
|&lt;br /&gt;
$(ModuleName)&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-102070-TPXREF105 CFBundleIdentifier (EN)]&lt;br /&gt;
|&lt;br /&gt;
$(ModuleName)&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102088 CFBundleInfoDictionaryVersion (EN)]&amp;lt;br /&amp;gt;&lt;br /&gt;
(nur iOS)&lt;br /&gt;
|&lt;br /&gt;
7.1&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-102364-TPXREF106 CFBundleVersion (EN)]&lt;br /&gt;
|&lt;br /&gt;
1.0.0 (OS X)&amp;lt;br /&amp;gt;&lt;br /&gt;
1.0.0.0 (iOS)&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-111321-TPXREF112 CFBundlePackageType (EN)]&lt;br /&gt;
|&lt;br /&gt;
APPL&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-SW8 CFBundleSignature (EN)]&lt;br /&gt;
|&lt;br /&gt;
????&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/TP40009250-SW2 LSRequiresIPhoneOS (EN)]&amp;lt;br /&amp;gt;&lt;br /&gt;
(nur iOS)&lt;br /&gt;
|&lt;br /&gt;
true&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-130418-TPXREF104 CFBundleAllowMixedLocalizations (EN)]&lt;br /&gt;
|&lt;br /&gt;
YES&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-101909-BCIIDGJG CFBundleExecutable (EN)]&lt;br /&gt;
|&lt;br /&gt;
$(ModuleName)&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html NSHighResolutionCapable (EN)]&amp;lt;br /&amp;gt;&lt;br /&gt;
(nur OS X)&lt;br /&gt;
|&lt;br /&gt;
true&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/TP40009250-SW8 LSApplicationCategoryType (EN)]&amp;lt;br /&amp;gt;&lt;br /&gt;
(nur OS X)&lt;br /&gt;
|&lt;br /&gt;
public.app-category.utilities&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW11 UIDeviceFamily (EN)]&amp;lt;br /&amp;gt;&lt;br /&gt;
(nur iOS)&lt;br /&gt;
|&lt;br /&gt;
iPhone &amp;amp;amp; iPad&lt;br /&gt;
|&lt;br /&gt;
Gibt die von Ihrer Anwendung unterstützten iOS-Geräte an. Mögliche Werte:&lt;br /&gt;
* &#039;&#039;&#039;iPhone&#039;&#039;&#039; – Unterstützung für iPhone- und iPod-Touch-Geräte.&lt;br /&gt;
* &#039;&#039;&#039;iPad&#039;&#039;&#039; – Unterstützung für iPad-Geräte.&lt;br /&gt;
* &#039;&#039;&#039;iPhone &amp;amp;amp; iPad&#039;&#039;&#039; – Unterstützung für iPhone-, iPod-Touch- und iPad-Geräte. (Vorgabe)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
CFBundleResourceSpecification &amp;lt;br /&amp;gt;&lt;br /&gt;
(nur iOS)&lt;br /&gt;
|&lt;br /&gt;
ResourceRules.plist&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW18 NSLocationAlwaysUsageDescription (EN)]&lt;br /&gt;
|&lt;br /&gt;
Der Grund, warum auf die Standortinformationen des Benutzers zugegriffen wird&lt;br /&gt;
|&lt;br /&gt;
Diese Beschreibung wird angezeigt, wenn die Autorisierung benötigt wird.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW26 NSLocationWhenInUseUsageDescription (EN)]&lt;br /&gt;
|&lt;br /&gt;
Der Grund, warum auf die Standortinformationen des Benutzers zugegriffen wird&lt;br /&gt;
|&lt;br /&gt;
Diese Beschreibung wird angezeigt, wenn die Autorisierung benötigt wird.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
FMLocalNotificationPermission&amp;lt;br /&amp;gt;&lt;br /&gt;
(nur iOS)&lt;br /&gt;
|&lt;br /&gt;
false&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span id=&amp;quot;UIBackgroundModes&amp;quot;&amp;gt;[https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/plist/info/UIBackgroundModes UIBackgroundModes (EN)]&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
(nur iOS)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Gibt die App-Dienste an, die weiter im Hintergrund ausgeführt werden müssen. Wählen Sie die gewünschten Stringwerte aus, die dem Array dieses Schlüssels hinzugefügt werden sollen.&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Android-Versionsinformationen==&lt;br /&gt;
&lt;br /&gt;
Für die Zielplattform &#039;&#039;&#039;Android&#039;&#039;&#039; werden auf der Seite &#039;&#039;&#039;Versionsinformationen&#039;&#039;&#039; die folgenden Felder angezeigt, die in der Datei [[Anwendungsmanifestdatei für Android (AndroidManifest.xml)|AndroidManifest.xml]] verwendet werden: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Versionscode&lt;br /&gt;
|&lt;br /&gt;
Integerwert, der die Version Ihrer Anwendung auf den &#039;&#039;&#039;Android&#039;&#039;&#039;-Plattformen festlegt.&lt;br /&gt;
&lt;br /&gt;
Für manche Anwendungs-Stores, wie Google Play, müssen neuere Versionen Ihrer Anwendung immer einen höheren Versionscode als die Vorgängerversionen aufweisen. Deshalb ist es wichtig, dass Sie diesen Wert immer inkrementieren, bevor Sie Ihre Anwendung für Anwendungs-Stores bereitstellen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Versionscodeoptionen&lt;br /&gt;
|&lt;br /&gt;
Legt fest, wie der Versionscode bei Auswahl von &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; &amp;amp;lt;Projekt&amp;amp;gt; erzeugen&#039;&#039;&#039;&amp;lt;/font&amp;gt; geändert wird, wenn &#039;&#039;&#039;Anwendungs-Store&#039;&#039;&#039; als [[Übersicht über Zielplattformen#Verwenden des Konfigurationsknotens|Plattformkonfiguration]] ausgewählt ist. Bei anderen Arten der Compilierung wird der Versionscode nicht geändert.&lt;br /&gt;
* &#039;&#039;&#039;Für Anwendungs-Store automatisch erhöhen&#039;&#039;&#039; aktualisiert den Versionscode und erhöht ihn jedes Mal um 1, wenn Sie &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; &amp;amp;lt;Projekt&amp;amp;gt; erzeugen&#039;&#039;&#039;&amp;lt;/font&amp;gt; wählen und der &#039;&#039;&#039;Anwendungs-Store&#039;&#039;&#039; als [[Übersicht über Zielplattformen#Verwenden des Konfigurationsknotens|Plattformkonfiguration]] ausgewählt ist.&lt;br /&gt;
* &#039;&#039;&#039;Nicht ändern&#039;&#039;&#039; behält den vorhandenen Versionscode bei. Dies ist die Vorgabe.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Liste &amp;quot;Schlüssel/Wert&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Legt Eigenschaften für Informationen zu Ihrer Anwendung fest. Die folgende Eigenschaftsliste ist verfügbar:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Schlüssel&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
package&lt;br /&gt;
|&lt;br /&gt;
Ein Paketname, der Ihre Anwendung eindeutig bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Der Name muss den folgenden Formatanforderungen entsprechen:&lt;br /&gt;
* Sie dürfen nur lateinische Groß- oder Kleinbuchstaben (A-Z, a-z), Zahlen (0-9) und Unterstriche (_) verwenden.&lt;br /&gt;
* Einzelne Teile von Paketnamen müssen mit Buchstaben beginnen.&lt;br /&gt;
&lt;br /&gt;
In manchen Android-Anwendungs-Stores, wie Google Play, können Sie nur neue Versionen Ihrer Anwendung veröffentlichen, wenn die alte und die neue Version denselben Paketnamen haben. Außerdem kann der Paketname von anderen Android-Anwendungen zum Identifizieren Ihrer Anwendung verwendet werden; zum Beispiel, um Android mitzuteilen, dass diese Anwendungen Ihre Anwendung als Voraussetzung benötigen.&lt;br /&gt;
&lt;br /&gt;
In der [http://developer.android.com/guide/topics/manifest/manifest-element.html#package Android-Dokumentation (EN)] finden Sie weitere Informationen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
label&lt;br /&gt;
|&lt;br /&gt;
Der Anzeigename Ihrer Anwendung.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
versionCode&lt;br /&gt;
|&lt;br /&gt;
Der Versionscode Ihrer Anwendung.&lt;br /&gt;
&lt;br /&gt;
Sie können diesen Wert im numerischen Feld &#039;&#039;&#039;Versionscode&#039;&#039;&#039; ändern.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
versionName&lt;br /&gt;
|&lt;br /&gt;
Die angezeigte Versionsnummer Ihrer Anwendung. Zum Beispiel: &amp;quot;2.0&amp;quot;.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
persistent&lt;br /&gt;
|&lt;br /&gt;
Ob Ihre Anwendung immer ausgeführt werden soll oder nicht. In der [http://developer.android.com/guide/topics/manifest/application-element.html#persistent Android-Dokumentation (EN)] finden Sie weitere Informationen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
restoreAnyVersion&lt;br /&gt;
|&lt;br /&gt;
Ob Ihre Anwendung von einer neueren Version Ihrer Anwendung geschriebene Daten lesen kann oder nicht. In der [http://developer.android.com/guide/topics/manifest/application-element.html#restoreany Android-Dokumentation (EN)] finden Sie weitere Informationen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
installLocation&lt;br /&gt;
|&lt;br /&gt;
Der bevorzugte Speicherort für die Installation Ihrer Anwendung. Mögliche Werte:&lt;br /&gt;
* &#039;&#039;&#039;internalOnly&#039;&#039;&#039; – Die Anwendung nur im internen Speicher installieren. Falls im internen Speicher nicht genügend freier Speicherplatz vorhanden ist, schlägt die Installation der Anwendung fehl.&lt;br /&gt;
* &#039;&#039;&#039;auto&#039;&#039;&#039; (Vorgabe) – Die Anwendung im internen Speicher installieren. Falls im internen Speicher nicht genügend freier Speicherplatz vorhanden ist, wird die Anwendung in einem externen Speicher installiert.&lt;br /&gt;
* &#039;&#039;&#039;preferExternal&#039;&#039;&#039; – Die Anwendung im externen Speicher installieren (z. B. auf einer SD-Karte). Falls im externen Speicher nicht genügend freier Speicherplatz vorhanden ist, wird die Anwendung im internen Speicher installiert.&lt;br /&gt;
&lt;br /&gt;
In der [http://developer.android.com/guide/topics/manifest/manifest-element.html#install Android-Dokumentation (EN)] finden Sie weitere Informationen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
largeHeap&lt;br /&gt;
|&lt;br /&gt;
Ob die Prozesse Ihrer Anwendung mit einem großen Dalvik-Heap erstellt werden sollen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Für die meisten Apps ist dies nicht erforderlich. Stattdessen sollte deren Gesamtspeichernutzung reduziert werden, um eine verbesserte Leistung zu erzielen.&lt;br /&gt;
&lt;br /&gt;
In der [http://developer.android.com/guide/topics/manifest/application-element.html#largeHeapl Android-Dokumentation (EN)] finden Sie weitere Informationen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
theme&lt;br /&gt;
|&lt;br /&gt;
Ob Ihre Anwendung im Vollbildmodus ausgeführt wird. In Android-Apps kann das Vollbildverhalten nicht mit der Eigenschaft &#039;&#039;&#039;[[lib_de:FMX.Forms.TForm.BorderStyle|BorderStyle]]&#039;&#039;&#039; wie in iOS-Apps festgelegt werden. Anstelle [[lib_de:FMX.Forms.TForm.BorderStyle|BorderStyle]] festzulegen, müssen Sie mit dem Schlüssel &#039;&#039;&#039;theme&#039;&#039;&#039; das Vollbildverhalten für alle Formulare in Ihrer Android-App definieren.&lt;br /&gt;
&lt;br /&gt;
Mögliche Werte:&lt;br /&gt;
*&#039;&#039;&#039;TitleBar&#039;&#039;&#039; (Vorgabe). In Ihrer Anwendung wird die Android-Statusleiste angezeigt.&lt;br /&gt;
*: Das Ergebnis ist das Verhalten, das Sie in iOS-Apps erhalten, wenn Sie in allen Formularen &amp;lt;code&amp;gt;[[lib_de:FMX.Forms.TCommonCustomForm.BorderStyle|BorderStyle]]&amp;lt;/code&amp;gt; ≠ &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; festlegen.&lt;br /&gt;
*&#039;&#039;&#039;Keine TitleBar&#039;&#039;&#039;. Ihre Anwendung wird im Vollbildmodus ausgeführt.&lt;br /&gt;
*: Das Ergebnis ist das Verhalten, das Sie in iOS-Apps erhalten, wenn Sie in allen Formularen &amp;lt;code&amp;gt;[[lib_de:FMX.Forms.TCommonCustomForm.BorderStyle|BorderStyle]]&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; festlegen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [[lib_de:FMX.Forms.TForm.BorderStyle|FMX.Forms.TForm.BorderStyle]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
hardwareAccelerated&lt;br /&gt;
|&lt;br /&gt;
Ermöglicht die Aktivierung/Deaktivierung der Hardwarebeschleunigung auf Anwendungsebene auf der Zielplattform.&lt;br /&gt;
&lt;br /&gt;
Diese Option fügt dem &amp;amp;lt;application&amp;amp;gt;-Tag das folgende Attribut hinzu, um die Hardwarebeschleunigung für die ganze Anwendung zu aktivieren.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;application android:hardwareAccelerated=&amp;quot;true&amp;quot; ...&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;application android:hardwareAccelerated=&amp;quot;false&amp;quot; ...&amp;amp;gt;&lt;br /&gt;
Vorgabe = true&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [http://developer.android.com/guide/topics/manifest/application-element.html#hwaccel developer.android.com (EN)]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
apiKey&lt;br /&gt;
|&lt;br /&gt;
Ermöglicht, den API-Schlüssel für den Zugriff auf die Google Maps-Dienste zu definieren. Weitere Informationen finden Sie unter [[Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps|Konfigurieren von Android-Anwendungen für die Verwendung von Google Maps]].&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Anwendungsoptionen|Anwendungsoptionen]]&lt;br /&gt;
* [[Bereitstellungsseite|Bereitstellungsseite]]&lt;br /&gt;
* [[Verwendet Berechtigungen|Verwendet Berechtigungen]]&lt;br /&gt;
* [[Berechtigungsliste|Berechtigungsliste]]&lt;br /&gt;
* [[Vorbereiten von iOS-Anwendungen für die Bereitstellung|Vorbereiten von iOS-Anwendungen für die Bereitstellung]]&lt;br /&gt;
* [[Vorbereiten von Android-Anwendungen für die Bereitstellung|Vorbereiten von Android-Anwendungen für die Bereitstellung]]&lt;br /&gt;
&lt;br /&gt;
[[Category:IDE-Referenz]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Version Info]]&lt;br /&gt;
[[fr:Informations de version]]&lt;br /&gt;
[[ja:［バージョン情報］]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_TImageList-Bilderlisten_als_zentralisierte_Bildersammlungen&amp;diff=208926</id>
		<title>Verwenden von TImageList-Bilderlisten als zentralisierte Bildersammlungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_TImageList-Bilderlisten_als_zentralisierte_Bildersammlungen&amp;diff=208926"/>
		<updated>2016-06-24T10:54:38Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
{{Parent|FireMonkey-Anwendungsdesign}}&lt;br /&gt;
[[lib_de:FMX.ImgList.TImageList|TImageList]]-Bilderlisten von {{FM}} bieten Tools mit vielfältigen Funktionen für die Verwendung von zentralisierten Sammlungen kleiner Bilder durch GUI-Elemente (Steuerelemente, Menüs und andere) in {{FM}}-Anwendungen. &lt;br /&gt;
{{f|vcl|&lt;br /&gt;
Die [[lib_de:FMX.ImgList.TImageList|TImageList]]-Bilderlisten in {{FM}} dienen demselben Zweck wie die [[lib_de:Vcl.Controls.TImageList|Vcl.Controls.TImageList]]-Bilderlisten in der VCL, bieten aber fortgeschrittenere Funktionen.}} Die [[lib_de:FMX.ImgList.TImageList|TImageList]]-Bilderlisten in {{FM}} werden verwendet, um große Mengen von Symbolen oder Bitmaps effektiv zu verwalten, und sie sind für plattformübergreifende Anwendungen geeignet.&lt;br /&gt;
&lt;br /&gt;
Da {{FM}} ein plattformübergreifendes Framework (Windows, iOS, OS X und Android) ist, können {{FM}}-Anwendungen auf Geräten mit unterschiedlicher Punktdichte und Auflösung des Bildschirms ausgeführt werden. &lt;br /&gt;
Bei Verwendung der [[lib_de:FMX.MultiResBitmap|Bitmaps mit Mehrfachauflösung]] von {{FM}} werden Ihre Bilder und Symbole in {{FM}}-Anwendungen korrekt in verschiedenen Punktdichten, Auflösungen und auf unterschiedlichen Plattformen (Windows, iOS, OS X und Android) dargestellt. Ein Bitmap mit Mehrfachauflösung ist eine Sammlung von Bitmap-Elementen, die dasselbe Bild in unterschiedlichen Skalierungen enthält.&lt;br /&gt;
&lt;br /&gt;
==Gründe für die Verwendung von Bilderlisten==&lt;br /&gt;
&lt;br /&gt;
In einer GUI-Anwendung kann eine Vielzahl von Steuerelementen (wie Schaltflächen, Menüeinträge, Einträge in verschiedenen Listen) kleine Bilder (Symbole, Piktogramme oder Widgets) enthalten. Beispielsweise hat [[lib_de:FMX.Menus.TMenuItem|TMenuItem]] die Eigenschaft [[lib_de:FMX.Menus.TMenuItem.Bitmap|Bitmap]]. Mit dieser Eigenschaft können Sie ein Bild aus einer Datei laden. Dies ist die einfachste und anscheinend die bequemste Art des Ladens von Bildern in Ihre Anwendungen. In jedes neue Steuerelement können Sie ein bestimmtes Bild laden und es anzeigen.&lt;br /&gt;
&lt;br /&gt;
Eine andere Möglichkeit stellt das Speichern aller in einer Anwendung verwendeten Bilder in einer zentralisierten Sammlung dar. Für jedes Steuerelement wird dabei nur ein Verweis auf ein Bild in dieser Sammlung gespeichert. Beispielsweise können Sie ein Bild aus einem Stil verwenden. Wählen Sie zum Beispiel im Objektinspektor für eine Schaltfläche die Eigenschaft &#039;&#039;&#039;StyleLookup&#039;&#039;&#039; aus, klicken Sie auf den Pfeil, um die Dropdown-Liste zu erweitern, und wählen Sie {{Code|searchtoolbutton}} aus. Das Symbol &amp;quot;Vergrößerungsglas&amp;quot; wird für die Schaltfläche angezeigt. Wir haben diese Möglichkeit beibehalten, weil sie für eine feste Sammlung der meisten Standardsymbole sehr praktisch ist. Für reale Anwendungen müssen Sie aber häufig individuell gestaltete Symbole laden und speichern. Für solche Fälle kann die [[lib_de:FMX.ImgList.TImageList|TImageList]]-Komponente sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Das schematische Vorgehen bei der Verwendung von [[lib_de:FMX.ImgList.TImageList|TImageList]] kann folgendermaßen beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
# Fügen Sie einem Formular (besser einem speziell erstellten Datenmodul) eine [[lib_de:FMX.ImgList.TImageList|TImageList]]-Bilderliste (nicht sichtbare Komponente) hinzu.&lt;br /&gt;
# Laden Sie Ihre Bilder in dieses [[lib_de:FMX.ImgList.TImageList|TImageList]]-Objekt.&lt;br /&gt;
# Wählen Sie im Objektinspektor die Eigenschaft &#039;&#039;&#039;Images&#039;&#039;&#039; Ihres Steuerelements aus, klicken Sie auf den Pfeil, um die Dropdown-Liste zu erweitern, und wählen Sie den Verweis auf das [[lib_de:FMX.ImgList.TImageList|TImageList]]-Objekt aus. &lt;br /&gt;
# Wählen Sie in der Eigenschaft &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; die Anzahl der Bilder in dem Bilderlisten-Objekt aus, die Sie anzeigen möchten.&lt;br /&gt;
&lt;br /&gt;
Wiederholen Sie die Schritte 3 und 4 für jedes neue Steuerelement. Wenn das [[lib_de:FMX.ImgList.TImageList|TImageList]]-Objekt kein passendes Bild enthält, wiederholen Sie Schritt 2.&lt;br /&gt;
Im ersten Moment könnte dieses Vorgehen zu kompliziert wirken. Anhand der folgenden [[lib_de:FMX.ImgList.TImageList|TImageList]]-Verwendungsbeispiele werden die Vorteile dieser Schritte und die Verwendung von [[lib_de:FMX.ImgList.TImageList|TImageList]] gegenüber dem einfachen Auswählen des gewünschten Bildes aus einem Ordner erläutert.  &lt;br /&gt;
&lt;br /&gt;
Das erste Beispiel: Eine Sammlung von Bildern eines erfahrenen Programmierers kann ohne Weiteres 9.000 bis 10.000 Bilder enthalten. Die Suche nach einem bestimmten Bild in solchen Sammlungen kann sehr mühsam sein. Andererseits können auch in recht komplexen Anwendungen bis zu 100 – 200 Bilder verwendet werden. Für viele Steuerelemente in einer Anwendung kann dasselbe (oder ein ähnliches) Bild verwendet werden, und eine gewisse Konsistenz bei der Verwendung dieser Bilder ist wünschenswert. Beispielsweise hat etwa vor einem Jahr ein früherer Kollege von Ihnen bei der Entwicklung der ersten Version Ihres Programms der &#039;&#039;&#039;Speichern&#039;&#039;&#039;-Schaltfläche ein Symbol mit einer blauen 3-Zoll-Diskette zugewiesen. Bei der Entwicklung der neuen Version Ihres Programms müssen Sie jetzt ein neues Formular mit derselben &#039;&#039;&#039;Speichern&#039;&#039;&#039;-Schaltfläche erstellen und ihr dasselbe Symbol zuweisen. Dieses Symbol zu finden, könnte sich jedoch als schwierig erweisen. Bei der Verwendung des [[lib_de:FMX.ImgList.TImageList|TImageList]]-Objekts hätten Sie dieses Problem nicht, weil Sie einfach dieses Symbol aus der für Ihr [[lib_de:FMX.ImgList.TImageList|TImageList]]-Objekt erweiterten Dropdown-Liste auswählen könnten.&lt;br /&gt;
&lt;br /&gt;
Das zweite Beispiel: Angenommen, Ihr Chef hat entschieden, dass es nun an der Zeit ist, ein Symbol mit der modernen Energiesparlampe anstatt des Symbols mit der alten Glühbirne zu verwenden. Wie viele Steuerelemente (und Menüeinträge) verwenden dieses Symbol? Wie lange brauchen Sie, um all diese Symbole zu ändern? Wenn all Ihre Symbole in einer zentralisierten Bildersammlung gespeichert sind, dann sind solche Massenersetzungen ein Kinderspiel. Sie müssen nur dieses Symbol in Ihrer zentralisierten Bildersammlung ändern.&lt;br /&gt;
Im Anschluss daran können Sie auch ein Datenmodul, das eine Sammlung mit Bildern (Bilderliste) enthält, erstellen und dieses Modul mehreren Anwendungen hinzufügen, die Bilder aus dieser Sammlung verwenden müssen.    &lt;br /&gt;
&lt;br /&gt;
Ein kurzes drittes Beispiel: Die dynamische Erstellung von vielen Steuerelementen, die zur Laufzeit Symbole anzeigen, produziert ein Menge von doppelten Grafikdaten. Wenn Sie &#039;&#039;&#039;TImageList&#039;&#039;&#039; verwenden, speichert jedes Steuerelement nur einen Index auf das zu zeichnende Symbol in der &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Sammlung. &lt;br /&gt;
&lt;br /&gt;
Die Verwendung der gemeinsamen &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Sammlung trägt also dazu bei, ähnliche Aufgaben wie die Wiederverwendung von Code, aber in Bezug auf Grafikdaten, zu lösen.&lt;br /&gt;
&lt;br /&gt;
==Verwendung von Bilderlisten==&lt;br /&gt;
&lt;br /&gt;
Sehen Sie sich das [http://youtu.be/QI_dwMWtpuc Video, das die typischen Schritte beim Erstellen einer neuen Bilderliste in einem FireMonkey-Projekt demonstriert], und das [http://youtu.be/IZfG2S9KGcU Video, das zeigt, wie mit dem Bilderlisten-Editor eine Bilderliste bearbeitet wird], an.&lt;br /&gt;
&lt;br /&gt;
Das detaillierte Vorgehen bei der Verwendung von [[lib_de:FMX.ImgList.TImageList|TImageList]] kann folgendermaßen beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
# Erstellen Sie ein Datenmodul, und setzen Sie es vor das Hauptformular in der Modulliste eines Projekts.&lt;br /&gt;
# Fügen Sie den Unit-Namen des Datenmoduls in den &#039;&#039;&#039;uses&#039;&#039;&#039;-Abschnitt des Hauptmoduls ein.&lt;br /&gt;
# Ziehen Sie aus der &#039;&#039;&#039;Tool-Palette&#039;&#039;&#039; ein &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Objekt auf das Datenmodul.&lt;br /&gt;
# Doppelklicken Sie auf das &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Objekt.&amp;lt;br /&amp;gt; Der leere [[Bilderlisten-Editor (FireMonkey)|Bilderlisten-Editor ({{FM}})]] wird geöffnet.&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039;.&lt;br /&gt;
# Suchen Sie im Dialogfeld &#039;&#039;&#039;Bilder hinzufügen&#039;&#039;&#039; die gewünschte Grafikdatei, und klicken Sie auf &#039;&#039;&#039;Öffnen&#039;&#039;&#039;. Wechseln Sie beispielsweise zum Ordner &amp;lt;br /&amp;gt; &#039;&#039;&#039;{{InstallPath}}\Images\GlyFX\Icons\XP\PNG\16x16&#039;&#039;&#039;&amp;lt;br /&amp;gt;, und wählen Sie darin eine Grafikdatei aus.&lt;br /&gt;
# Im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; wird eine Vorschau aller geöffneten Bilder angezeigt. Sie können die Reihenfolge der Bilder durch Ziehen mit der Maus ändern.&lt;br /&gt;
#: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die Komponente &#039;&#039;&#039;TImageList&#039;&#039;&#039; selbst hat keine allgemeinen &#039;&#039;&#039;Width&#039;&#039;&#039;- und &#039;&#039;&#039;Height&#039;&#039;&#039;-Eigenschaften. Jedes Bild wird so skaliert, dass es am besten zu der Form des Steuerelements passt, in dem das Bild angezeigt wird. Wenn Sie die Größe des Bereichs &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; ändern, wird die Größe der Bilder entsprechend geändert.&lt;br /&gt;
#:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Beachten Sie, dass Sie zwar Bilder in beliebiger Größe hinzufügen können, &#039;&#039;&#039;TImageList&#039;&#039;&#039; aber für die Aufnahme von vielen kleinen Bildern konzipiert ist, die in verschiedenen GUI-Elementen (Schaltflächen, Menüeinträge, Listen usw.) angezeigt werden können. Standardmäßig werden Bilder ohne Änderungen gespeichert. Sie werden bei Bedarf skaliert. Wenn Sie einige große Bilder oder Fotos laden, werden diese daher nicht wie erwartet auf einer 24x24-Schaltfläche angezeigt, und eine Anwendung auf einem mobilen Gerät könnte einfach aufgrund mangelnder Systemressourcen hängen bleiben.&lt;br /&gt;
# Klicken Sie jetzt auf &#039;&#039;&#039;OK&#039;&#039;&#039;, um den [[Bilderlisten-Editor (FireMonkey)|Bilderlisten-Editor]] zu schließen.&lt;br /&gt;
# Suchen Sie in der &#039;&#039;&#039;Tool-Palette&#039;&#039;&#039; das Grafiksteuerelement [[lib_de:FMX.ImgList.TGlyph|TGlyph]]. Die Funktionalität von [[lib_de:FMX.ImgList.TGlyph|TGlyph]] ist vergleichbar mit der von [[lib_de:FMX.Objects.TImage|TImage]], aber TGlyph enthält keine Grafikdaten.&lt;br /&gt;
# Suchen Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; die Eigenschaft [[lib_de:FMX.ImgList.TGlyph.Images|Images]] des TGlyph-Steuerelements. Die Liste in [[lib_de:FMX.ImgList.TGlyph.Images|Images]] enthält alle &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Sammlungen des Projekts.&lt;br /&gt;
# Wählen Sie die gewünschte &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Sammlung aus, und suchen Sie die Eigenschaft [[lib_de:FMX.ImgList.TGlyph.ImageIndex|ImageIndex]]. &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; ist der Index (Nummer) eines Bildes in der Bilderliste. Die Liste in [[lib_de:FMX.ImgList.TGlyph.ImageIndex|ImageIndex]] enthält alle Bilder, die in der ausgewählten &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Sammlung enthalten sind. Sie können ein gewünschtes Bild auswählen oder den ganzzahligen Index (&#039;&#039;&#039;ImageIndex&#039;&#039;&#039;) des Bildes, das Sie anzeigen möchten, eingeben. Wenn für den angegebenen &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; kein Bild vorhanden ist, wird kein Bild ausgewählt.   &lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.ImgList.TGlyph|TGlyph]] ist von [[lib_de:FMX.Controls.TControl|TControl]] abgeleitet und kann in Stilen zum Erstellen von Steuerelementen verwendet werden. [[lib_de:FMX.ImgList.TGlyph|TGlyph]] ist in vielen Steuerelementen enthalten, die die Verwendung von Bilderlisten unterstützen. &lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.ImgList.TGlyph|TGlyph]]-Steuerelemente verfügen über die Eigenschaft [[lib_de:FMX.ImgList.TGlyph.AutoHide|AutoHide]]. [[lib_de:FMX.ImgList.TGlyph.AutoHide|AutoHide]] legt fest, dass das [[lib_de:FMX.ImgList.TGlyph|TGlyph]]-Steuerelement den Wert der Eigenschaft [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]] selbst verwaltet:&lt;br /&gt;
&lt;br /&gt;
* Wenn während der Laufzeit einer Anwendung [[lib_de:FMX.ImgList.TGlyph.AutoHide|AutoHide]] {{True}} ist, dann ist [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]] {{True}}, falls das Steuerelement Grafiken enthält ([[lib_de:FMX.ImgList.TGlyph.BitmapExists|BitmapExists]] ist {{True}}). Andernfalls hat [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]] den Wert {{False}}. Wenn im Code der Anwendung versucht wird, [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]] auf einen neuen Wert zu setzen, dann wird dieser Wert ignoriert. Der [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]]-Wert ist für die Eigenschaft [[lib_de:FMX.ImgList.TGlyph.Align|Align]] von Bedeutung, wenn [[lib_de:FMX.ImgList.TGlyph.Align|Align]] nicht {{Code|None}} ist. Wenn [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]] {{True}} ist, dann zeichnet ein leeres sichtbares Steuerelement den leeren Raum, der von dem Steuerelement belegt wird. Wenn [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]] {{False}} ist, dann zeichnet ein leeres unsichtbares Steuerelement den leeren Raum nicht.&lt;br /&gt;
* Wenn [[lib_de:FMX.ImgList.TGlyph.AutoHide|AutoHide]] {{True}} ist, dann ist im Entwurfsmodus [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]] immer {{True}}, und es kann nicht darauf zugegriffen werden.    &lt;br /&gt;
&lt;br /&gt;
Viele Grafiksteuerelemente (Schaltflächen, Menüs, Listen usw.) und Aktionen enthalten die neuen Eigenschaften &#039;&#039;&#039;Images&#039;&#039;&#039; und &#039;&#039;&#039;ImageIndex&#039;&#039;&#039;. Bitte beachten Sie, dass für Komponenten, die Listen mit Elementen bereitstellen, im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; nur die Eigenschaft &#039;&#039;&#039;Images&#039;&#039;&#039; angezeigt wird. Für Elemente dieser Listen zeigt der &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; nur die Eigenschaft &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; an. Die Eigenschaft &#039;&#039;&#039;Images&#039;&#039;&#039; aller Elemente des Listensteuerelements hat denselben Wert wie &#039;&#039;&#039;Images&#039;&#039;&#039; im Listensteuerelement. Das heißt, alle Menüeinträge verwenden immer die &#039;&#039;&#039;Images&#039;&#039;&#039;-Sammlung, die in der Eigenschaft &#039;&#039;&#039;Images&#039;&#039;&#039; des Menüs festgelegt ist.    &lt;br /&gt;
&lt;br /&gt;
Einige Steuerelemente, die über die Eigenschaften &#039;&#039;&#039;Images&#039;&#039;&#039; und &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; verfügen, können die Eigenschaft &#039;&#039;&#039;Bitmap&#039;&#039;&#039; haben, die auch ein Bild referenzieren kann. Wenn die Eigenschaften &#039;&#039;&#039;Images&#039;&#039;&#039; und &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; auf ein vorhandenes Bild zeigen, dann wird dieses Bild gezeichnet. Wenn &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; auf kein vorhandenes Bild zeigt, dann zeichnet das Steuerelement das Bild, das von &#039;&#039;&#039;Bitmap&#039;&#039;&#039; referenziert wird. Beachten Sie, dass ein von &#039;&#039;&#039;Bitmap&#039;&#039;&#039; referenziertes, aber nicht verwendetes Bild nur ignoriert und nicht automatisch gelöscht wird, um Datenverluste zu vermeiden. Zum Beispiel, wenn Sie versehentlich &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; festlegen, um ein nicht-vorhandenes Bild zu referenzieren. Sie können dieses referenzierte Bild manuell löschen, indem Sie die Eigenschaft &#039;&#039;&#039;Bitmap&#039;&#039;&#039; bearbeiten.&lt;br /&gt;
&lt;br /&gt;
==TImageList-Struktur der obersten Ebene==&lt;br /&gt;
&lt;br /&gt;
Im Allgemeinen kennt eine {{FM}}-Anwendung die erforderliche Größe eines zu zeichnenden Bildes nicht. Die Größe hängt von dem jeweiligen Steuerelement, dem Steuerelementstil und der [[lib_de:FMX.Controls.IScene.GetSceneScale|Skalierung]] der [[lib_de:FMX.Controls.IScene|Szene]] ab (und diese Skalierung kann nicht nur 1, 1,5 oder 2 sein), was wiederum von dem jeweiligen Computer oder dem mobilen Gerät abhängt. Deshalb werden Bilder häufig skaliert, damit sie in die gewünschten Begrenzungen zu passen. Aus diesem Grund wurde die Klasse [[lib_de:FMX.ImgList.TMultiResBitmap|TMultiResBitmap]] eingeführt. [[lib_de:FMX.MultiResBitmap.TCustomMultiResBitmap|Bitmaps mit Mehrfachauflösung]] speichern mehrere Varianten desselben für verschiedene Größen optimierten Bildes. Dadurch werden beim Skalieren von Bildern Qualitätseinbußen minimiert. Als Nächstes wurden die [[lib_de:FMX.ImgList.TImageList|TImageList]]-Bilderlisten eingeführt. [[lib_de:FMX.ImgList.TImageList|TImageList]]-Objekte speichern Sammlungen von [[lib_de:FMX.ImgList.TMultiResBitmap|TMultiResBitmap]]-Bildern. Jedes dieser [[lib_de:FMX.MultiResBitmap.TCustomMultiResBitmap|Bitmaps mit Mehrfachauflösung]] ist eine Menge von mehreren Varianten desselben Bildes in unterschiedlichen Größen. &lt;br /&gt;
&lt;br /&gt;
Um die Bedeutung und Funktionalität der Elemente im [[Bilderlisten-Editor (FireMonkey)|Bilderlisten-Editor]] zu verdeutlichen, wird im Folgenden die [[lib_de:FMX.ImgList.TImageList|TImageList]]-Struktur der Komponente erläutert.   &lt;br /&gt;
&lt;br /&gt;
Jede [[lib_de:FMX.ImgList.TImageList|TImageList]]-Komponente enthält zwei Sammlungen mit Bildern: &lt;br /&gt;
&lt;br /&gt;
* Die Sammlung [[lib_de:FMX.ImgList.TImageList.Source|Source]] enthält die Daten der Quellgrafiken. Mit diesen Daten werden die Bilder in der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] erstellt. &lt;br /&gt;
* Die Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] enthält die Daten, die zum Erstellen derjenigen Bilder erforderlich sind, die als Bilder der [[lib_de:FMX.ImgList.TImageList|TImageList]]-Sammlung gezeichnet werden sollen. &lt;br /&gt;
&lt;br /&gt;
In der &#039;&#039;&#039;[[Strukturansicht|Strukturansicht]]&#039;&#039;&#039; des [[samp_en:FMX.ImageList Sample|Beispiels ImageList]] wird die {{Code|ImageList1}}-Struktur wie in der folgenden Abbildung angezeigt:   &lt;br /&gt;
&lt;br /&gt;
[[Image:ImageListEditor StructureView.png|center|200px|Strukturansicht im Bilderlisten-Editor]]&lt;br /&gt;
&lt;br /&gt;
In dieser Abbildung hat jedes Bild in der [[lib_de:FMX.ImgList.TImageList.Source|Source]]-Sammlung:&lt;br /&gt;
&lt;br /&gt;
* Einen eindeutigen Namen (ohne Berücksichtigung der Groß-/Kleinschreibung) (in jeder [[lib_de:FMX.ImgList.TImageList|TImageList]]-Sammlung). Beispielsweise hat das Bild {{Code|0}} den Namen {{Code|Stop}}, das Bild {{Code|1}} den Namen {{Code|TImageList}} und das Bild {{Code|2}} den Namen {{Code|folder}}. &lt;br /&gt;
* Die Eigenschaft &#039;&#039;&#039;MultiResBitmap&#039;&#039;&#039;. Jedes Element in einer &#039;&#039;&#039;MultiResBitmap&#039;&#039;&#039;-Sammlung repräsentiert wiederum eine Variante desselben Bildes mit einer bestimmten Größe (Skalierung). Beispielsweise enthält die &#039;&#039;&#039;MultiResBitmap&#039;&#039;&#039;-Sammlung des Bildes {{Code|folder}} 5 Bitmaps für die Skalierungen {{Code|1.0}}, {{Code|2.0}}, {{Code|1.5}}, {{Code|3.0}} und {{Code|16.0}}.  &lt;br /&gt;
&lt;br /&gt;
Diese Abbildung zeigt auch, dass jedes Element in der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] mehrere Ebenen enthalten kann, die in der Sammlung [[lib_de:FMX.ImgList.TDestinationItem.Layers|Layers]] enthalten sind. Beispielsweise besteht das Bild {{Code|3}} aus 2 Ebenen: die Ebene {{Code|0}} enthält das Bitmap mit Mehrfachauflösung {{Code|folder}} und die Ebene {{Code|1}} enthält das Bitmap mit Mehrfachauflösung {{Code|delete}}. Jede Ebene enthält den Namen des Quell-Bitmaps mit Mehrfachauflösung und Koordinaten eines Abschnitts dieses Bitmaps (immer in der Skalierung {{Code|1}}). Dieser Abschnitt des Bitmaps wird gezeichnet und somit das Bild generiert. Beim Generieren eines Bildes zeichnet {{FM}} zuerst das Bitmap mit Mehrfachauflösung aus der Ebene {{Code|0}}, das Bitmap mit Mehrfachauflösung aus der Ebene {{Code|1}} wird über das erhaltene Bild gezeichnet, das Bitmap mit Mehrfachauflösung aus der Ebene {{Code|2}} wird über das erhaltene Bild gezeichnet usw. Dies wird detaillierter im Abschnitt [[#Bereich &amp;quot;Ausgewähltes Bild&amp;quot;|Bereich &amp;quot;Ausgewähltes Bild&amp;quot;]] erläutert. Wenn ein Bitmap mit Mehrfachauflösung in einer Ebene Bitmaps mit mehreren Skalierungen enthält, dann wird das Bitmap mit der passendsten Skalierung verwendet. Die Skalierung wird entsprechend der erforderlichen Größe des fertigen Bildes und der Skalierung der Szene ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Wenn die Struktur von [[lib_de:FMX.ImgList.TImageList|TImageList]] bekannt ist, können zur Laufzeit Teile der gesamten [[lib_de:FMX.ImgList.TImageList|TImageList]]-Instanz gebildet werden. Das [[samp_en:FMX.ImageList Sample|Beispiel ImageList]] enthält solchen Code. &lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten einer [[lib_de:FMX.ImgList.TImageList|TImageList]]-Sammlung in der IDE können Sie die &#039;&#039;&#039;Strukturansicht&#039;&#039;&#039; und den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; verwenden. Es steht aber auch speziell dafür der [[#Verwenden des Bilderlisten-Editors|&#039;&#039;&#039;Bilderlisten&#039;&#039;&#039;-Editor]] zur Verfügung, der für die Verwaltung des Inhalts von [[lib_de:FMX.ImgList.TImageList|TImageList]]-Sammlungen besser geeignet ist.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
===Unterschiede der TImageList-Implementierung in der VCL===&lt;br /&gt;
&lt;br /&gt;
In der VCL ist eine [[lib_de:Vcl.Controls.TImageList|Vcl.Controls.TImageList]]-Bilderliste eine Sammlung von Bildern mit derselben festen Größe. Dies führt zu Problemen, wenn in Ihrer Anwendung Bilder mit unterschiedlichen Skalierungen gezeichnet werden sollen. Um in VCL-Anwendungen Bilder mit unterschiedlichen Skalierungen zu zeichnen, müssen Sie mehrere &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Objekte erstellen. Jedes &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Objekt enthält eine spezielle Sammlung von Bildern für eine bestimmte Größe. In all diesen &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Objekten sollten dieselben Bilder dieselben Nummern (&#039;&#039;&#039;Indizes&#039;&#039;&#039;) haben. Eine VCL-Anwendung kann nur Bilder mit diesen Skalierungen zeichnen. In VCL-Anwendungen ist es schwierig, Bilder während der Laufzeit zu ändern. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verwenden des Bilderlisten-Editors==&lt;br /&gt;
&lt;br /&gt;
Das [http://youtu.be/IZfG2S9KGcU Video zeigt, wie mit dem Bilderlisten-Editor eine Bilderliste erstellt und bearbeitet wird (EN)]. Dieses Video demonstriert einige fortgeschrittene und wichtige Leistungsmerkmale des Bilderlisten-Editors.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden werden Eigenschaften des [[Bilderlisten-Editor (FireMonkey)|Bilderlisten-Editors]] anhand des [[samp_en:FMX.ImageList Sample|Beispiels ImageList]] beschrieben, das als Muster für die Verwendung von Bilderlisten dient. Laden Sie das Projekt &amp;quot;ImageListDemo.dproj&amp;quot;, und doppelklicken Sie in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; auf das Modul &amp;quot;UnitDataModule.dfm&amp;quot;. Doppelklicken Sie im [[Formular-Designer|Formular-Designer]] auf das Symbol &#039;&#039;&#039;ImageList1&#039;&#039;&#039;. Der [[Bilderlisten-Editor (FireMonkey)|Bilderlisten-Editor]] wird mit der Komponente &#039;&#039;&#039;ImageList1&#039;&#039;&#039; geöffnet. Der &#039;&#039;&#039;Bilderlisten&#039;&#039;&#039;-Editor enthält drei Bereiche: &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039;, &#039;&#039;&#039;Quellen der Bilder&#039;&#039;&#039; und &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
[[Image:ImageListEditor.png|center|550px|Bilderlisten-Editor]]&lt;br /&gt;
&lt;br /&gt;
===Bereich &amp;quot;Liste der Bilder&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; wird die horizontale Liste der Bilder angezeigt. Jedes Bild ist eine Vorschau eines entsprechenden Bildes in der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]]. Diese Bilder werden in der Eigenschaft &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; jedes Steuerelements angezeigt, das diese Bildersammlung verwendet.&lt;br /&gt;
&lt;br /&gt;
Im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; können Sie Bilder mit der Maus ziehen, um deren Reihenfolge in der &#039;&#039;&#039;ImageList1&#039;&#039;&#039;-Bildersammlung zu ändern. &lt;br /&gt;
&lt;br /&gt;
Mit der Schaltfläche &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; wird ein Bild aus einer Datei hinzugefügt. Durch Klicken auf &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039; wird das Dialogfeld &#039;&#039;&#039;Bilder hinzufügen&#039;&#039;&#039; geöffnet, in dem Sie eine Bilddatei suchen können. Wenn ein hinzuzufügendes Bild um ein Vielfaches der angegebenen &#039;&#039;&#039;Breite&#039;&#039;&#039; und &#039;&#039;&#039;Höhe&#039;&#039;&#039; größer ist, werden Sie in einem Dialogfeld gefragt, ob der &#039;&#039;&#039;Bilderlisten-Editor&#039;&#039;&#039; es in mehrere Bilder aufteilen soll. Dies ist speziell für Symbolleisten-Bitmaps hilfreich, die normalerweise aus mehreren aufeinanderfolgenden kleinen Grafiken bestehen und als größeres Bitmap gespeichert werden. Das hinzugefügte Bild wird in der Vorschauliste des Bereichs &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; hervorgehoben aufgeführt und im Bereich &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039; angezeigt. Das Bild wird der Sammlung &#039;&#039;&#039;Source&#039;&#039;&#039; hinzugefügt und im Bereich &#039;&#039;&#039;Quellen der Bilder&#039;&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
Mit der Schaltfläche &#039;&#039;&#039;Exportieren&#039;&#039;&#039; können Sie alle Bilder aus der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] in eine Grafikdatei speichern. Das in dieser Datei gespeicherte Bild besteht aus Fragmenten, die alle Bilder aus dem Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; enthalten. Alle Fragmente haben dieselbe durch &#039;&#039;&#039;Breite&#039;&#039;&#039; und &#039;&#039;&#039;Höhe&#039;&#039;&#039; festgelegte Größe.&lt;br /&gt;
&lt;br /&gt;
Mit der Schaltfläche &#039;&#039;&#039;Löschen&#039;&#039;&#039; wird das ausgewählte Bild aus der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] gelöscht. (Mit &#039;&#039;&#039;Löschen&#039;&#039;&#039; wird das zugehörige Bild nicht aus der Sammlung [[lib_de:FMX.ImgList.TImageList.Source|Source]] gelöscht.)  &lt;br /&gt;
&lt;br /&gt;
Mit der Schaltfläche [[File:New.png]] (&#039;&#039;&#039;Neues Bild&#039;&#039;&#039;) in der Symbolleiste (in der linken oberen Ecke des Bereichs) wird ein zuvor geladenes Bild (mit einer Ebene) hinzugefügt. Wenn sich der Fokus im Bereich &#039;&#039;&#039;Quellen der Bilder&#039;&#039;&#039; befindet, dann wird das ausgewählte Bild hinzugefügt. Ansonsten wird ein Bild in einer ausgewählten Ebene im Bereich &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039; hinzugefügt. Das hinzugefügte Bild wird im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; hervorgehoben angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Bereich &amp;quot;Quellen der Bilder&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Im Bereich &#039;&#039;&#039;Quellen der Bilder&#039;&#039;&#039; (siehe die Abbildung [[#Verwenden des Bilderlisten-Editors| &#039;&#039;&#039;Bilderlisten-Editor&#039;&#039;&#039;]] weiter oben) werden alle Bilder in der [[lib_de:FMX.ImgList.TImageList.Source|Source]]-Sammlung der aktuellen [[lib_de:FMX.ImgList.TImageList|TImageList]]-Bilderliste angezeigt. Mit diesen Quellbildern werden Bilder in der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] erstellt (angezeigt im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Wie bereits erwähnt, wird durch Klicken auf &#039;&#039;&#039;Löschen&#039;&#039;&#039; im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; das ausgewählte Bild aus der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] gelöscht. Mit &#039;&#039;&#039;Löschen&#039;&#039;&#039; wird das zugehörige Bild nicht aus der Sammlung [[lib_de:FMX.ImgList.TImageList.Source|Source]] gelöscht, die im Bereich &#039;&#039;&#039;Quellen der Bilder&#039;&#039;&#039; angezeigt wird. Um ein Bild aus der Sammlung [[lib_de:FMX.ImgList.TImageList.Source|Source]] zu löschen, verwenden Sie die Schaltfläche [[File:Action delete.jpg]] &#039;&#039;&#039;Quelle löschen&#039;&#039;&#039; in der Symbolleiste.&lt;br /&gt;
&lt;br /&gt;
Mit den Pfeilschaltflächen [[File:Arrow up.jpg]] und [[File:Arrow down.jpg]] in der Symbolleiste können Sie die Reihenfolge der Bilder ändern, indem Sie einzelne Bilder nach oben oder unten verschieben.  &lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf die Schaltfläche [[File:New.png]] (&#039;&#039;&#039;Neue Quelle&#039;&#039;&#039;) in der Symbolleiste, um der Sammlung [[lib_de:FMX.ImgList.TImageList.Source|Source]] ein neues Bild hinzuzufügen. Durch Klicken auf diese Schaltfläche wird ein Dialogfeld geöffnet, in dem Sie den &#039;&#039;&#039;Namen des neuen Quellelements&#039;&#039;&#039; eingeben müssen. Anschließend wird der [[MultiResBitmap-Editor|MultiResBitmap-Editor]] aktiviert.&lt;br /&gt;
&lt;br /&gt;
====Verwenden des MultiResBitmap-Editors====&lt;br /&gt;
&lt;br /&gt;
Das [http://youtu.be/oFl925XuFgc Video demonstriert die typische Verwendung des MultiResBitmap-Editors (EN)].&lt;br /&gt;
&lt;br /&gt;
Mit dem [[MultiResBitmap-Editor|MultiResBitmap-Editor]] können Sie mehrere, für verschiedene Skalierungen optimierte Bilder hinzufügen:&lt;br /&gt;
&lt;br /&gt;
[[Image:MultiResBitmapEditor ImageList.png|center|400px|ImageList im MultiResBitmap-Editor]]&lt;br /&gt;
&lt;br /&gt;
Während der Laufzeit wählt eine Anwendung ein Bild aus, das über die am besten geeignete Skalierung verfügt.    &lt;br /&gt;
&lt;br /&gt;
Wie bereits erwähnt, ist die Komponente [[lib_de:FMX.ImgList.TImageList|TImageList]] für die Speicherung von Listen mit einer großen Anzahl kleiner Bilder vorgesehen. Bilder aus der Komponente [[lib_de:FMX.ImgList.TImageList|TImageList]] sind für die Verwendung als Symbole in Steuerelementen, Menüs, Listen usw gedacht.    &lt;br /&gt;
&lt;br /&gt;
Wenn Sie nur Dateien mit großen Bildern haben, dann können Sie deren Größe beim Hinzufügen dieser Bilder im [[MultiResBitmap-Editor|MultiResBitmap-Editor]] anpassen. Klicken Sie, bevor Sie ein großes Bild aus einer Datei hinzufügen, auf das Steuerelement &#039;&#039;&#039;[[MultiResBitmap-Editor#Steuerelemente|SizeKind]]&#039;&#039;&#039;, und wählen Sie in der geöffneten Liste &#039;&#039;&#039;Benutzerdefinierte Größe&#039;&#039;&#039; aus. Die Eingabefelder &#039;&#039;&#039;Breite&#039;&#039;&#039; und &#039;&#039;&#039;Höhe&#039;&#039;&#039; werden angezeigt, falls sie nicht schon zuvor vorhanden waren. &#039;&#039;&#039;Breite&#039;&#039;&#039; und &#039;&#039;&#039;Höhe&#039;&#039;&#039; legen die Eigenschaften [[lib_de:FMX.MultiResBitmap.TCustomMultiResBitmap.Width|Width]] und [[lib_de:FMX.MultiResBitmap.TCustomMultiResBitmap.Height|Height]] für das Bild mit &amp;lt;code&amp;gt;Scale = 1&amp;lt;/code&amp;gt; fest. Wenn Sie beispielsweise ein Bild für &amp;lt;code&amp;gt;Scale = 1.5&amp;lt;/code&amp;gt; laden, dann wird die angegebene &#039;&#039;&#039;Breite&#039;&#039;&#039; und &#039;&#039;&#039;Höhe&#039;&#039;&#039; mit &amp;lt;code&amp;gt;1,5&amp;lt;/code&amp;gt; multipliziert. Um ein Bild für eine bestimmte &#039;&#039;&#039;Skalierung&#039;&#039;&#039; zu laden, klicken Sie in diesem Skalierungs-Eingabefeld auf die Schaltfläche [[Image:Fill All From File.png]]. Um ein Bild für alle &#039;&#039;&#039;Skalierungen&#039;&#039;&#039; zu laden, klicken Sie in der Symbolleiste des &#039;&#039;&#039;MultiResBitmap-Editors&#039;&#039;&#039; auf die Schaltfläche [[Image:Fill All From File.png]] &#039;&#039;&#039;Alle aus Datei füllen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie bitte, dass mit der Option &#039;&#039;&#039;Benutzerdefinierte Größe&#039;&#039;&#039; nicht das Bild in einer Quelldatei geändert wird. &#039;&#039;&#039;Benutzerdefinierte Größe&#039;&#039;&#039; ändert nur die Größe des in der FMX- oder DFM-Datei gespeicherten Bildes. &lt;br /&gt;
&lt;br /&gt;
Die vom &#039;&#039;&#039;MultiResBitmap-Editor&#039;&#039;&#039; verwendeten Entwurfszeitinformationen enthalten &#039;&#039;&#039;Transparente Farbe&#039;&#039;&#039;, &#039;&#039;&#039;SizeKind&#039;&#039;&#039;, &#039;&#039;&#039;Breite&#039;&#039;&#039;, &#039;&#039;&#039;Höhe&#039;&#039;&#039; und die Namen von Dateien mit Quellbildern. Diese Eigenschaften werden nicht veröffentlicht, sie werden nur beim Entwurf verwendet. Nach Bearbeitung des Bitmaps mit Mehrfachauflösung können diese Eigenschaften aus der FMX- oder DFM-Datei mit der Schaltfläche [[Image:Clear design time info and close.png]] (&#039;&#039;&#039;Fertig stellen&#039;&#039;&#039;) der Symbolleiste entfernt werden. Mit der Schaltfläche [[Image:Clear design time info and close.png]] des &#039;&#039;&#039;MultiResBitmap-Editors&#039;&#039;&#039; werden die Entwurfszeitinformationen nur aus dem Bitmap mit Mehrfachauflösung entfernt, das gerade im &#039;&#039;&#039;MultiResBitmap-Editor&#039;&#039;&#039; bearbeitet wird. Mit der Schaltfläche [[Image:Clear design time info and close.png]] des &#039;&#039;&#039;Bilderlisten-Editors&#039;&#039;&#039; werden die Entwurfszeitinformationen aller Bilder in der aktuellen Bilderliste entfernt.&lt;br /&gt;
&lt;br /&gt;
===Bereich &amp;quot;Ausgewähltes Bild&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Im Bereich &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039; (siehe die Abbildung [[#Verwenden des Bilderlisten-Editors| &#039;&#039;&#039;Bilderlisten-Editor&#039;&#039;&#039;]] weiter oben) werden detaillierte Informationen über das im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; ausgewählte Bild angezeigt. Im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; wird eine Vorschau der Bilder in der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] angezeigt. &lt;br /&gt;
&lt;br /&gt;
Wie bereits im Abschnitt [[#TImageList-Struktur der obersten Ebene| &#039;&#039;&#039;TImageList&#039;&#039;&#039;-Struktur]] erläutert (siehe die Abbildung [[#TImageList-Struktur der obersten Ebene| &#039;&#039;&#039;Strukturansicht&#039;&#039;&#039;]] weiter oben), kann jedes Bild in der Sammlung [[lib_de:FMX.ImgList.TImageList.Destination|Destination]] mehrere [[lib_de:FMX.ImgList.TDestinationItem.Layers|Ebenen]] enthalten. Für jede [[lib_de:FMX.ImgList.TLayer|Ebene]] wird ein [[lib_de:FMX.ImgList.TLayer.Layers|Name]] eines Bildes aus der Sammlung [[lib_de:FMX.ImgList.TImageList.Source|Source]] und dem zugehörigen [[lib_de:FMX.ImgList.TLayer.MultiResBitmap|Bitmap mit Mehrfachauflösung]] angezeigt. Außerdem enthält jede Ebene [[lib_de:FMX.ImgList.TLayer.SourceRect|Koordinaten eines Abschnitts dieses Bitmaps mit Mehrfachauflösung]] (immer in der Skalierung 1, unabhängig von der Skalierung des zu verwendenden Bitmaps). Nur dieser Abschnitt des Bitmaps mit Mehrfachauflösung wird im fertigen Bild gezeichnet.&lt;br /&gt;
&lt;br /&gt;
Normalerweise enthält jedes Bild nur eine Ebene. In manchen Situationen könnte aber die Verwendung mehrerer Ebenen zum Erstellen eines zusammengesetzten Bildes erforderlich sein. Beispielsweise könnte es zweckmäßig sein, eine separate Ebene für ein &amp;quot;durchgestrichenes&amp;quot; oder &amp;quot;Vergrößerungsglas&amp;quot;-Bild zu verwenden. Diese Ebene kann dann über eine Ebene mit einem anderen Bild gelegt werden. Beispielsweise könnte das Bild in der Ebene über eine Ebene mit einem &amp;quot;Ordner&amp;quot;- oder einem &amp;quot;Umschlag&amp;quot;-Bild gezeichnet werden. Dann können diese beiden Ebenen ein kombiniertes Bild bilden, z. B. ein Bild mit einem &amp;quot;durchgestrichenen Ordner&amp;quot; oder einem &amp;quot;Vergrößerungsglas über einem Umschlag&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Beim Generieren eines Bildes zeichnet FireMonkey zuerst das Bitmap mit Mehrfachauflösung aus der Ebene 0, das Bitmap mit Mehrfachauflösung aus der Ebene 1 wird über das erhaltene Bild gezeichnet, das Bitmap mit Mehrfachauflösung aus der Ebene 2 wird über das erhaltene kombinierte Bild gezeichnet usw. Wenn ein Bild mit dem in einer Ebene angegebenen Namen nicht vorhanden ist oder sich der angegebene Sektor außerhalb des Bildes befindet, dann zeichnet die Ebene nichts, und es wird keine Exception ausgelöst. Wenn ein Bitmap mit Mehrfachauflösung in einer Ebene Bitmaps mit mehreren Skalierungen enthält, dann wird das Bitmap mit der passendsten Skalierung verwendet. Die Skalierung wird entsprechend der erforderlichen Größe des fertigen Bildes und der Skalierung der Szene ausgewählt.&lt;br /&gt;
&lt;br /&gt;
Diese Funktionalität wird im Folgenden anhand von Bildern aus dem [[samp_en:FMX.ImageList Sample|Beispiel ImageList]] demonstriert. Wählen Sie im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; (siehe [[#Verwenden des Bilderlisten-Editors|Verwenden des Bilderlisten-Editors]] weiter oben) das Bild mit &amp;lt;code&amp;gt;ImageIndex = 3&amp;lt;/code&amp;gt; aus. Dies ist der &amp;quot;durchgestrichene Ordner&amp;quot;. Im Bereich &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039; werden die beiden folgenden Ebenen angezeigt:&lt;br /&gt;
&lt;br /&gt;
[[Image:SelectedImage Folder1.png|center|250px|Bereich &amp;quot;Ausgewähltes Bild&amp;quot; für den &amp;quot;durchgestrichenen Ordner&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Vergleichen Sie dies mit der Darstellung des Destination-Bildes mit &amp;lt;code&amp;gt;ImageIndex = 3&amp;lt;/code&amp;gt; in der &#039;&#039;&#039;Strukturansicht&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Image:StructureView Folder1.png|center|Strukturansicht für den &amp;quot;durchgestrichenen Ordner&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
In dieser Abbildung befindet sich das Bild {{Code|folder}} in der Ebene {{Code|0}} und das Bild {{Code|delete}} in der Ebene {{Code|1}}. Im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; wird das Ergebnis dieser beiden Ebenen angezeigt, nämlich das folgende Zielbild &amp;quot;durchgestrichener Ordner&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Image:StrikeThroughFolder.png|center|Durchgestrichener Ordner]]&lt;br /&gt;
&lt;br /&gt;
Das Bild {{Code|delete}} aus der Ebene {{Code|1}} wird über das Bild {{Code|folder}} aus der Ebene {{Code|0}} gezeichnet. &lt;br /&gt;
&lt;br /&gt;
Die Eingabefelder &#039;&#039;&#039;Links&#039;&#039;&#039;, &#039;&#039;&#039;Oben&#039;&#039;&#039;, &#039;&#039;&#039;Breite&#039;&#039;&#039; und &#039;&#039;&#039;Höhe&#039;&#039;&#039; in einem Ebenenbereich legen die [[lib_de:FMX.ImgList.TLayer.SourceRect|Koordinaten eines Abschnitts des Bitmaps mit Mehrfachauflösung]] fest, der in der Ebene gespeichert ist. Diese Koordinaten haben in der Abbildung &#039;&#039;&#039;Bereich &amp;quot;Ausgewähltes Bild&amp;quot; für den &amp;quot;durchgestrichenen Ordner&amp;quot;&#039;&#039;&#039; für das Bild {{Code|delete}} die Werte {{Code|(0,0,16,16)}}. Setzen Sie nun für das Bild {{Code|delete}} &#039;&#039;&#039;Links&#039;&#039;&#039; auf {{Code|4}} und &#039;&#039;&#039;Oben&#039;&#039;&#039; auf {{Code|4}}. Klicken Sie auf &#039;&#039;&#039;Übernehmen&#039;&#039;&#039;. In der &#039;&#039;&#039;Strukturansicht&#039;&#039;&#039; werden nun die Koordinaten {{Code|(4,4,20,20)}} des Abschnitts für das Bild {{Code|delete}} angezeigt. Im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; hat sich das Zielbild &amp;quot;durchgestrichener Ordner&amp;quot; geändert. Das Bild &amp;quot;durchgestrichener Ordner&amp;quot; wurde nach links oben verschoben:&lt;br /&gt;
&lt;br /&gt;
[[Image:StrikeThroughFolder Moved.png|center|&amp;quot;Durchgestrichener Ordner&amp;quot; wurde verschoben]]&lt;br /&gt;
&lt;br /&gt;
Um zu zeigen, wie Koordinaten des Abschnitts eines Bitmaps mit Mehrfachauflösung verwendet werden können, doppelklicken Sie auf das Bild &amp;quot;durchgestrichen&amp;quot;. Der &#039;&#039;&#039;MultiResBitmap-Editor&#039;&#039;&#039; wird geöffnet: &lt;br /&gt;
&lt;br /&gt;
[[Image:MultiResBitmapEditor Section.png|center|400px|Im MultiResBitmap-Editor anzuzeigender Abschnitt]]&lt;br /&gt;
&lt;br /&gt;
Diese Abbildung zeigt, welcher Abschnitt des &amp;quot;durchgestrichen&amp;quot;-Bildes in der Ebene gezeichnet wird. Klicken Sie in das Auswahlrechteck, das den anzuzeigenden Abschnitt angibt. Versuchen Sie, die Größe des Auswahlrechtecks zu ändern. Versuchen Sie, das Auswahlrechteck zu verschieben, und beachten Sie die entsprechenden Änderungen der Eigenschaften &#039;&#039;&#039;Links&#039;&#039;&#039;, &#039;&#039;&#039;Oben&#039;&#039;&#039;, &#039;&#039;&#039;Breite&#039;&#039;&#039; und &#039;&#039;&#039;Höhe&#039;&#039;&#039; des Auswahlrechtecks (in der Ebene im Bereich &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039;) und die Änderungen des Vorschaubildes im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039;.     &lt;br /&gt;
&lt;br /&gt;
Die Funktionen der Schaltflächen in der Symbolleiste des Bereichs &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039; sind weitgehend selbsterklärend.  [[File:New.png]] – Fügt dem Bereich &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039; eine neue Ebene hinzu. [[File:Action delete.jpg]] – Löscht die ausgewählte Ebene aus dem Bereich &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039;. Die Pfeile [[File:Arrow up.jpg]] und [[File:Arrow down.jpg]] verschieben die ausgewählte Ebene nach oben bzw. unten und ändern so die Reihenfolge der Ebenen. Dies kann nützlich sein, weil das Bild in einer Ebene mit einer höheren Nummer über Bilder aus vorherigen Ebenen gezeichnet wird.&lt;br /&gt;
&lt;br /&gt;
==Grundlegende Klassen von TImageList==&lt;br /&gt;
&lt;br /&gt;
Die Informationen über grundlegende Merkmale und Funktionen der Bilderlistenklassen können für die Entwicklung benutzerdefinierter Komponenten, die Bilderlisten verwenden, sehr hilfreich sein. &lt;br /&gt;
&lt;br /&gt;
===Unit &amp;quot;System.ImageList&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Ab Version XE8 stellt {{Product}} die neue RTL-Unit [[lib_de:System.ImageList|System.ImageList]] bereit. [[lib_de:System.ImageList|System.ImageList]] enthält die Gemeinsamkeiten für {{FM}}- und VCL-Code und implementiert die grundlegendsten geräteunabhängigen Funktionen von Bilderlisten. &lt;br /&gt;
[[lib_de:System.ImageList|System.ImageList]] enthält den Code zur Unterstützung der Interaktion zwischen Bildern in einer Bilderliste und deren Verwendung in Komponenten (wie Steuerelemente, Menüeinträge usw.). &lt;br /&gt;
&lt;br /&gt;
Die Unit [[lib_de:System.ImageList|System.ImageList]] definiert die Klassen [[lib_de:System.ImageList.TBaseImageList|TBaseImageList]] und [[lib_de:System.ImageList.TImageLink|TImageLink]].&lt;br /&gt;
&lt;br /&gt;
====Klasse &amp;quot;TBaseImageList&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
Die Klasse [[lib_de:System.ImageList.TBaseImageList|TBaseImageList]]stellt Methoden und Eigenschaften für die Behandlung von Interaktionen zwischen einer Bilderliste und allen GUI-Komponenten bereit, die Bilder aus dieser Bilderliste verwenden. &lt;br /&gt;
{{f|vcl|&lt;br /&gt;
Ab der Version {{Product}} XE8 erben die Klassen [[lib_de:FMX.ImgList.TCustomImageList|FMX.ImgList.TCustomImageList]] und [[lib_de:Vcl.ImgList.TCustomImageList|Vcl.ImgList.TCustomImageList]] diese [[lib_de:System.ImageList.TBaseImageList|TBaseImageList]]-Klasse.}}&lt;br /&gt;
&lt;br /&gt;
====Klasse &amp;quot;TImageLink&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
Ein [[lib_de:System.ImageList.TBaseImageList|TBaseImageList]]-Bilderlisten-Objekt sendet mit [[lib_de:System.ImageList.TImageLink|TImageLink]]-Objekten Benachrichtigungen über Änderungen, die in dem Bilderlisten-Objekt aufgetreten sind, an Komponenten, die das Bilderlisten-Objekt verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn Änderungen der Eigenschaft [[lib_de:System.ImageList.TImageLink.ImageIndex|ImageIndex]] oder [[lib_de:System.ImageList.TImageLink.Images|Images]] aufgetreten sind, dann ruft das [[lib_de:System.ImageList.TImageLink|TImageLink]]-Objekt die virtuelle Methode [[lib_de:System.ImageList.TImageLink.Change|Change]] auf. Beachten Sie, dass jede Änderung in [[lib_de:System.ImageList.TBaseImageList|TBaseImageList]] zur Änderung von [[lib_de:System.ImageList.TImageLink.Images|Images]] führt.   &lt;br /&gt;
&lt;br /&gt;
Damit Ihre Komponente eine adäquate Reaktion auf Änderungen in einer Bilderliste bereitstellen kann, muss Ihre Komponente eine Instanz eines [[lib_de:System.ImageList.TImageLink|TImageLink]]-Nachkommens enthalten. Dieser [[lib_de:System.ImageList.TImageLink|TImageLink]]-Nachkomme muss korrekte &#039;&#039;&#039;Images&#039;&#039;&#039;- und &#039;&#039;&#039;ImageIndex&#039;&#039;&#039;-Eigenschaften haben und die Methode [[lib_de:System.ImageList.TImageLink.Change|Change]] überschreiben, oder die Ereignisbehandlungsroutine [[lib_de:System.ImageList.TImageLink.OnChange|OnChange]] muss definiert sein. &lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.ImageList.TBaseImageList|TBaseImageList]] enthält die Array-Eigenschaft [[lib_de:System.ImageList.TBaseImageList.Links|Links]], die [[lib_de:System.ImageList.TImageLink|TImageLink]]-Instanzen enthält. Wenn Sie die Eigenschaft [[lib_de:System.ImageList.TImageLink.Images|TImageLink.Images]] auf eine Komponente setzen, dann wird diese Bilderliste diesem [[lib_de:System.ImageList.TBaseImageList.Links|Links]]-Array hinzugefügt.    &lt;br /&gt;
Nach Änderungen von [[lib_de:System.ImageList.TImageLink.Images|Images]] oder [[lib_de:System.ImageList.TImageLink.ImageIndex|ImageIndex]] übernehmen Nachkommen von [[lib_de:System.ImageList.TBaseImageList|TBaseImageList]] sequenziell alle Bildverknüpfungsobjekte aus dem Array &#039;&#039;&#039;Links&#039;&#039;&#039; und rufen [[lib_de:System.ImageList.TImageLink.Change|Change]] für alle (oder nur für einige) dieser Bildverknüpfungen (Komponenten) auf.    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Eigenschaft TImageLink.IgnoreIndex&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ist die Eigenschaft [[lib_de:System.ImageList.TImageLink.IgnoreIndex|IgnoreIndex]] {{True}}, dann wird [[lib_de:System.ImageList.TImageLink.Change|Change]] nicht ausgeführt, wenn ein Bild oder die Reihenfolge der Bilder in einer [[lib_de:System.ImageList.TBaseImageList|TBaseImageList]]-Bilderliste geändert wurde. Normalerweise gehen Benachrichtigungen ein, wenn ein Bild an einem Index geändert wird. Durch Setzen von [[lib_de:System.ImageList.TImageLink.IgnoreIndex|IgnoreIndex]] auf {{True}} werden derartige Benachrichtigungen unterdrückt. Diese Eigenschaft kann verwendet werden, wenn eine Anwendung die gesamte Bilderliste anzeigen muss, beispielsweise in einem Editorfenster. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eigenschaft TImageLink.IgnoreImages&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ist die Eigenschaft [[lib_de:System.ImageList.TImageLink.IgnoreImages|IgnoreImages]] {{True}}, dann wird [[lib_de:System.ImageList.TImageLink.Change|Change]] nicht ausgeführt, wenn der [[lib_de:System.ImageList.TImageLink.Images|Images]]-Wert geändert wurde. {{f|vcl|Diese Eigenschaft wird aus Kompatibilitätsgründen mit VCL-Klassen verwendet, die Klassen aus [[lib_de:System.ImageList|System.ImageList]] erben.}}&lt;br /&gt;
&lt;br /&gt;
===Unit &amp;quot;FMX.ImgList&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Die Unit [[lib_de:FMX.ImgList|FMX.ImgList]] definiert die grundlegenden {{FM}}-Klassen, die {{FM}}-Bilderlisten implementieren. &lt;br /&gt;
&lt;br /&gt;
====Klasse &amp;quot;FMX.ImgList.TCustomImageList&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
Die Komponente [[lib_de:FMX.ImgList.TCustomImageList|FMX.ImgList.TCustomImageList]] implementiert die Kernfunktionalität von {{FM}}-Bilderlisten. [[lib_de:FMX.ImgList.TImageList|FMX.ImgList.TImageList]] unterscheidet sich von der Klasse [[lib_de:FMX.ImgList.TCustomImageList|FMX.ImgList.TCustomImageList]] nur durch die Neudeklaration einiger Eigenschaften als &#039;&#039;&#039;Published&#039;&#039;&#039;. Im Fall von [[lib_de:FMX.ImgList.TImageList|FMX.ImgList.TImageList]] sind dies die folgenden &#039;&#039;&#039;Published&#039;&#039;&#039;-Eigenschaften: [[lib_de:FMX.ImgList.TImageList.Source|Source]], [[lib_de:FMX.ImgList.TImageList.Destination|Destination]], [[lib_de:FMX.ImgList.TImageList.OnChanged|OnChanged]] und [[lib_de:FMX.ImgList.TImageList.OnChange|OnChange]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eigenschaft TCustomImageList.Dormant&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft [[lib_de:FMX.ImgList.TCustomImageList.Dormant|Dormant]] ist {{True}}, wenn die Eigenschaft [[lib_de:FMX.MultiResBitmap.TCustomBitmapItem.Dormant|Dormant]] aller Bitmaps mit Mehrfachauflösung in der Sammlung [[lib_de:FMX.ImgList.TCustomImageList.Source|Source]] {{True}} ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eigenschaft TCustomImageList.CacheSize&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft [[lib_de:FMX.ImgList.TCustomImageList.CacheSize|CacheSize]] gibt die maximale Anzahl an Bildern an, die im internen Zwischenspeicher des aktuellen [[lib_de:FMX.ImgList.TCustomImageList|TCustomImageList]]-Objekts gespeichert werden können.&lt;br /&gt;
&lt;br /&gt;
Das Zeichnen jedes Bildes besteht aus mehreren Schritten mit ziemlichem Ressourcenaufwand. Um das Skalieren und Zeichnen mehrerer Ebenen zur Anzeige desselben Bildes in jedem betroffenen Steuerelement zu vermeiden, wird das generierte Bild in ein Array im internen Zwischenspeicher gesetzt und dann das fertige Bild aus diesem Zwischenspeicher-Array übernommen. Ein neu generiertes Bild wird an das Ende dieses Zwischenspeicher-Arrays angehängt, und alle vorhandenen Bilder werden um eine Position in Richtung des Anfangs des Arrays verschoben. Wenn die Anzahl der im Zwischenspeicher-Array zu speichernden Bilder die angegebene [[lib_de:FMX.ImgList.TCustomImageList.CacheSize|CacheSize]]-Anzahl an Bildern übersteigt, dann wird das älteste Bild aus dem Zwischenspeicher entfernt. Eine große [[lib_de:FMX.ImgList.TCustomImageList.CacheSize|CacheSize]]-Anzahl erhöht die Verarbeitungsgeschwindigkeit, aber auch den verwendeten Speicher. Die standardmäßige Maximalanzahl an im Zwischenspeicher-Array zu speichernder Bilder ist 8; die Minimalanzahl ist 1.       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Methode TCustomImageList.ClearCache&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.ImgList.TCustomImageList.ClearCache|ClearCache]] entfernt das durch die {{Arg|Index}}-Nummer angegebene Bild aus dem internen Zwischenspeicher-Array. Im Zwischenspeicher können mehrere Bilder mit derselben Nummer, aber mit unterschiedlicher Größe gespeichert sein. Wenn {{Arg|Index}} {{Code|-1}} (die Vorgabe) ist, dann werden alle Bilder aus dem Zwischenspeicher entfernt (der Zwischenspeicher wird geleert). Normalerweise wird [[lib_de:FMX.ImgList.TCustomImageList.ClearCache|ClearCache]] automatisch aufgerufen, wenn sich das [[lib_de:FMX.ImgList.TImageList|TImageList]]-Objekt ändert.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Methode TCustomImageList.BitmapExists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Methode [[lib_de:FMX.ImgList.TCustomImageList.BitmapExists|BitmapExists]] gibt {{True}} zurück, wenn ein Bild mit der angegebenen Nummer vorhanden ist und tatsächlich ein Bitmap enthält. Das heißt, wenn das angegebene Bild mindestens eine Ebene mit einem [[lib_de:FMX.ImgList.TLayer.Name|Namen]] eines vorhandenen [[lib_de:FMX.ImgList.TSourceItem|Quellbildes]] mit einem [[lib_de:FMX.ImgList.TLayer.SourceRect|zu zeichnenden Rechteck]] enthält, das über einen Schnittpunkt ungleich null mit dem Rechteck des Bildes verfügt. &lt;br /&gt;
&lt;br /&gt;
Ein nicht vorhandenes Bild wird im [[Bilderlisten-Editor (FireMonkey)|Bilderlisten-Editor]] als leeres gestricheltes Rechteck angezeigt. Siehe das Bild mit der Nummer {{Code|9}} im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; in der Abbildung des [[#Verwenden des Bilderlisten-Editors|&#039;&#039;&#039;Bilderlisten-Editors&#039;&#039;&#039;]] weiter oben. Wenn das [[lib_de:FMX.ImgList.TLayer.SourceRect|zu zeichnende Rechteck]] Grafikdaten enthält, aber all diese Grafiken transparent sind (siehe [[MultiResBitmap-Editor#Steuerelemente|Transparente Farbe]]), dann gibt die Methode [[lib_de:FMX.ImgList.TCustomImageList.BitmapExists|BitmapExists]] {{True}} zurück, aber diese Ebene zeichnet keine Grafiken. [[lib_de:FMX.ImgList.TCustomImageList.BitmapExists|BitmapExists]] wird in der Klasse [[lib_de:FMX.ImgList.TGlyph|TGlyph]] verwendet, um die Eigenschaft [[lib_de:FMX.ImgList.TGlyph.Visible|Visible]] festzulegen, wenn [[lib_de:FMX.ImgList.TGlyph.AutoHide|AutoHide]] {{True}} ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Methode TCustomImageList.Bitmap&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Methode [[lib_de:FMX.ImgList.TCustomImageList.Bitmap|Bitmap]] gibt das im Zwischenspeicher gespeicherte [[lib_de:FMX.Graphics.TBitmap|TBitmap]]-Objekt zurück, das dem in {{Arg|Index}} angegebenen Bild entspricht und das die angegebene Größe {{Arg|Size}} hat. &lt;br /&gt;
&lt;br /&gt;
Wenn das in {{Arg|Index}} angegebene Bild mit der Größe {{Arg|Size}} im Zwischenspeicher nicht vorhanden ist, dann versucht [[lib_de:FMX.ImgList.TCustomImageList.Bitmap|Bitmap]], ein passendes Bild zu erstellen und es dem Zwischenspeicher hinzuzufügen. Wenn kein {{Arg|Index}}-Bild in der [[lib_de:FMX.ImgList.TCustomImageList.Source|Source]]-Sammlung vorhanden ist oder [[lib_de:FMX.ImgList.TCustomImageList.Bitmap|Bitmap]] kein Bitmap mit der angegebenen Größe {{Arg|Size}} erstellen oder es dem Zwischenspeicher hinzufügen kann, dann gibt [[lib_de:FMX.ImgList.TCustomImageList.Bitmap|Bitmap]] {{Code|nil}} zurück.   &lt;br /&gt;
&lt;br /&gt;
Da Bilder im Zwischenspeicher von internen [[lib_de:FMX.ImgList.TCustomImageList|TCustomImageList]]-Funktionen erstellt und freigegeben werden, sollten Sie das zurückgegebene, im Zwischenspeicher gespeicherte [[lib_de:FMX.Graphics.TBitmap|TBitmap]]-Objekt nicht explizit freigeben oder versuchen, einen Verweis auf dieses Objekt zu speichern.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nur ein Bild aus der [[lib_de:FMX.ImgList.TCustomImageList|TCustomImageList]]-Liste zeichnen müssen, verwenden Sie die Methode [[lib_de:FMX.ImgList.TCustomImageList.Draw|Draw]]. Wenn Sie das erhaltene [[lib_de:FMX.Graphics.TBitmap|TBitmap]]-Objekt tatsächlich für die zukünftige Verwendung speichern müssen, sollten Sie ein weiteres [[lib_de:FMX.Graphics.TBitmap|TBitmap]]-Objekt erstellen und mit [[lib_de:FMX.Graphics.TBitmap.Assign|Assign]] eine Kopie des erhaltenen [[lib_de:FMX.Graphics.TBitmap|TBitmap]]-Objekts erstellen.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Methode TCustomImageList.BitmapItemByName&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Methode [[lib_de:FMX.ImgList.TCustomImageList.BitmapItemByName|BitmapItemByName]] gibt {{True}} zurück, wenn ein Bild mit dem angegebenen {{Arg|Name}} in der [[lib_de:FMX.ImgList.TCustomImageList.Source|Source]]-Sammlung gefunden wird. &lt;br /&gt;
&lt;br /&gt;
Wenn [[lib_de:FMX.ImgList.TCustomImageList.BitmapItemByName|BitmapItemByName]] {{True}} zurückgibt, dann gibt {{Arg|Item}} das gefundene Bitmap für eine am besten für 1 geeignete Skalierung zurück, und {{Arg|Size}} gibt die [[lib_de:System.Types.TSize|Größe]] des zurückgegebenen Bitmaps zurück. Wenn [[lib_de:FMX.ImgList.TCustomImageList.BitmapItemByName|BitmapItemByName]] {{False}} zurückgibt, dann werden {{Arg|Item}} und {{Arg|Size}} nicht geändert. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Methode TCustomImageList.UpdateImmediately&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Methode [[lib_de:FMX.ImgList.TCustomImageList.UpdateImmediately|UpdateImmediately]] initiiert das unverzügliche Neuzeichnen aller Komponenten, die diese Bilderliste verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn ein Bild geändert wird, dann sollten alle Komponenten, die dieses Bild verwenden, darüber benachrichtigt werden, dass sie ihr Bild aktualisieren müssen. &lt;br /&gt;
Standardmäßig werden solche Benachrichtigungen kurz nach den Änderungen gesendet, um ein mehrfaches Neuzeichnen beim Umgestalten einer Bilderliste zu vermeiden. Wenn während dieser Zeit mehrere Änderungen vorgenommen werden, wird nur eine Benachrichtigung gesendet, und Steuerelemente werden nur einmal neu gezeichnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eigenschaft TCustomImageList.Source&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft [[lib_de:FMX.ImgList.TCustomImageList.Source|Source]] enthält den Verweis auf die [[lib_de:FMX.ImgList.TSourceCollection|TSourceCollection]]-Sammlung mit den [[lib_de:FMX.ImgList.TCustomSourceItem|TCustomSourceItem]]-Quell-Bitmaps mit Mehrfachauflösung. Quellsammlungen werden von der Methode [[lib_de:FMX.ImgList.TCustomImageList.CreateSource|CreateSource]] erstellt. Sie können diese Methode überschreiben, um Sammlungen mit einem eigenen Typ zu erstellen. Die wichtige Methode von [[lib_de:FMX.ImgList.TSourceCollection|TSourceCollection]]-Quellsammlungen ist [[lib_de:FMX.ImgList.TSourceCollection.IndexOf|IndexOf]], die den Index des Bildes in den Quellsammlungen zurückgibt, das dem angegebenen {{Code|Name}} entspricht. Wird kein Bild gefunden, wird {{Code|nil}} zurückgegeben.      &lt;br /&gt;
&lt;br /&gt;
====Klasse &amp;quot;TCustomSourceItem&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
Die Klasse [[lib_de:FMX.ImgList.TCustomSourceItem|TCustomSourceItem]] definiert Elemente von [[lib_de:FMX.ImgList.TSourceCollection|TSourceCollection]]-Quellsammlungen. Jedes [[lib_de:FMX.ImgList.TCustomSourceItem|TCustomSourceItem]]-Objekt hat einen eindeutigen [[lib_de:FMX.ImgList.TCustomSourceItem.Name|Namen]] des Bildelements (ohne Berücksichtigung der Groß-/Kleinschreibung) in der [[lib_de:FMX.ImgList.TCustomImageList.Source|Source]]-Sammlung und eine [[lib_de:FMX.ImgList.TCustomSourceItem.MultiResBitmap|MultiResBitmap]]-Eigenschaft mit einem Bitmap mit Mehrfachauflösung, das die Menge der Bilder mit derselben Form für verschiedene Skalierungen enthält. &lt;br /&gt;
&lt;br /&gt;
====Eigenschaft &amp;quot;TCustomImageList.Destination&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft [[lib_de:FMX.ImgList.TCustomImageList.Destination|Destination]] enthält den Verweis auf die [[lib_de:FMX.ImgList.TDestinationCollection|TDestinationCollection]]-Sammlung mit den [[lib_de:FMX.ImgList.TCustomDestinationItem|TCustomDestinationItem]]-Elementen. Zielelemente enthalten Informationen, die zum Vorbereiten der zu zeichnenden Bilder benötigt werden. Zielsammlungen werden von [[lib_de:FMX.ImgList.TCustomImageList.CreateDestination|CreateDestination]] erstellt.&lt;br /&gt;
&lt;br /&gt;
====Klasse &amp;quot;TCustomDestinationItem&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.ImgList.TCustomDestinationItem|TCustomDestinationItem]]-Objekte sind Elemente von [[lib_de:FMX.ImgList.TDestinationCollection|TDestinationCollection]]-Sammlungen. Jedes [[lib_de:FMX.ImgList.TCustomDestinationItem|TCustomDestinationItem]]-Element enthält die [[lib_de:FMX.ImgList.TCustomDestinationItem.Layers|Layers]]-Sammlung mit [[lib_de:FMX.ImgList.TLayer|TLayer]]-Elementen. [[lib_de:FMX.ImgList.TCustomDestinationItem.Layers|Layers]] wird mit [[lib_de:FMX.ImgList.TCustomDestinationItem.CreateLayers|CreateLayers]] erstellt. Die Funktion [[lib_de:FMX.ImgList.TCustomDestinationItem.LayersCount|LayersCount]] gibt die Anzahl der nicht leeren Ebenen zurück. Beachten Sie den Unterschied zur Eigenschaft [[lib_de:System.Classes.TCollection.Count|TLayers.Count]], die die Gesamtanzahl der Ebenen in der Ebenen-Sammlung enthält. &lt;br /&gt;
&lt;br /&gt;
====Klasse &amp;quot;TLayers&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
Die [[lib_de:FMX.ImgList.TLayers|TLayers]]-Sammlung enthält [[lib_de:FMX.ImgList.TLayer|TLayer]]-Ebenen. Bei der Generierung der fertigen Bilder werden Bitmaps mit den am besten passenden Skalierungen aus allen sichtbaren Ebenen beginnend mit der Ebene 0 bis zur letzten Ebene [[lib_de:System.Classes.TCollection.Count|Count]] sequenziell gezeichnet.  &lt;br /&gt;
&lt;br /&gt;
====Klasse &amp;quot;TLayer&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
Die Ebene [[lib_de:FMX.ImgList.TLayer|TLayer]] enthält Informationen über ein Quellbild, das beim Zeichnen eines fertigen Bildes verwendet wird. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eigenschaft TLayer.MultiResBitmap&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft [[lib_de:FMX.ImgList.TLayer.MultiResBitmap|MultiResBitmap]] enthält ein [[lib_de:FMX.ImgList.TLayer.MultiResBitmap|Bitmap mit Mehrfachauflösung]] aus der [[lib_de:FMX.ImgList.TImageList.Source|Source]]-Sammlung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eigenschaft TLayer.Name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft [[lib_de:FMX.ImgList.TLayer.Name|Name]] enthält den Namen (ohne Berücksichtigung der Groß-/Kleinschreibung) eines Bildes aus der [[lib_de:FMX.ImgList.TImageList.Source|Source]]-Sammlung. Die Funktion [[lib_de:FMX.ImgList.TCustomImageList.BitmapItemByName|BitmapItemByName]] gibt das [[lib_de:FMX.ImgList.TLayer.MultiResBitmap|Bitmap mit Mehrfachauflösung]] mit dem [[lib_de:FMX.ImgList.TLayer.Name|Namen]] in der [[lib_de:FMX.ImgList.TCustomImageList.Source|Source]]-Sammlung zurück.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eigenschaft TLayer.SourceRect&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft [[lib_de:FMX.ImgList.TLayer.SourceRect|SourceRect]] enthält die [[lib_de:FMX.ImgList.TLayer.SourceRect|Koordinaten eines Abschnitts dieses Bitmaps mit Mehrfachauflösung]] (immer in der Skalierung 1, unabhängig von der Skalierung des zu verwendenden Bitmaps). Nur dieser Abschnitt des Bitmaps mit Mehrfachauflösung wird im fertigen Bild gezeichnet.&lt;br /&gt;
&lt;br /&gt;
==Codebeispiel &amp;quot;FMX.TImageList&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Sehen Sie sich das [http://youtu.be/oAEHD44BnQQ Video, das Funktionen aus dem &amp;quot;Beispiel FMX.ImageList&amp;quot; demonstriert], an.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden werden typische Codefragmente aus dem [[samp_en:FMX.ImageList Sample|Beispiel FMX.ImageList]] behandelt, das als Muster für die Verwendung von Bilderlisten dient, mit deren Hilfe Standardoperationen mit Bilderlisten programmiert werden.  &lt;br /&gt;
&lt;br /&gt;
Öffnen Sie das Projekt &#039;&#039;&#039;ImageListDemo.dproj&#039;&#039;&#039;, wie im [[samp_en:FMX.ImageList Sample|Beispiel FMX.ImageList]] beschrieben. Rufen Sie den [[rad_de:Formular-Designer|Formular-Designer]] mit dem Modul &#039;&#039;&#039;UnitMain&#039;&#039;&#039; auf, und öffnen Sie die Registerkarte &#039;&#039;&#039;Bitmap and Image&#039;&#039;&#039;. Diese Registerkarte enthält mehrere Steuerelemente, die Bilder aus der Bilderliste verwenden. Hier wird die Codeimplementierungsfunktionalität der Schaltflächen &#039;&#039;&#039;[[#Ereignisbehandlungsroutine der Schaltfläche &amp;quot;Add New Source&amp;quot;|Add New Source]]&#039;&#039;&#039; und &#039;&#039;&#039;[[#Ereignisbehandlungsroutine der Schaltfläche &amp;quot;Update Text&amp;quot;|Update Text]]&#039;&#039;&#039; und der Pfeilschaltflächen &#039;&#039;&#039;Right&#039;&#039;&#039; und &#039;&#039;&#039;Left&#039;&#039;&#039; besprochen, die das nächste bzw. vorherige Bild aus der {{Code|ImageList1}}-Bilderliste auf den Titel &#039;&#039;&#039;None&#039;&#039;&#039; der Registerkarte &#039;&#039;&#039;None&#039;&#039;&#039; zeichnen. Der Code für die Pfeilschaltflächen &#039;&#039;&#039;Right&#039;&#039;&#039; und &#039;&#039;&#039;Left&#039;&#039;&#039; zeigt, [[#Verwenden von Bilderlisten in Steuerelementen|wie ein Bild aus einer Bilderliste auf die Oberfläche Ihres Steuerelements gezeichnet wird]].&lt;br /&gt;
&lt;br /&gt;
Um den Code zur Behandlung eines Steuerelements im &#039;&#039;&#039;Quelltext-Editor&#039;&#039;&#039; zu öffnen, doppelklicken Sie im &#039;&#039;&#039;Formular-Designer&#039;&#039;&#039; einfach auf dieses Steuerelement. &lt;br /&gt;
&lt;br /&gt;
===Ereignisbehandlungsroutine der Schaltfläche &amp;quot;Add New Source&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Doppelklicken Sie im &#039;&#039;&#039;Formular-Designer&#039;&#039;&#039; auf die Schaltfläche &#039;&#039;&#039;Add New Source&#039;&#039;&#039;. Der &#039;&#039;&#039;Quelltext-Editor&#039;&#039;&#039; zeigt die &#039;&#039;&#039;ActnAddSourceExecute&#039;&#039;&#039;-Implementierung der Methode an. &#039;&#039;&#039;ActnAddSourceExecute&#039;&#039;&#039; ist die &#039;&#039;&#039;OnClick&#039;&#039;&#039;-Ereignisbehandlungsroutine für die Schaltfläche &#039;&#039;&#039;Add New Source&#039;&#039;&#039;. &#039;&#039;&#039;ActnAddSourceExecute&#039;&#039;&#039; ruft {{Code|AddSourceToItem(9)}} auf. Der Kern von &#039;&#039;&#039;ActnAddSourceExecute&#039;&#039;&#039; ist die interne Methode&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;DrawPicture(Canvas: TCanvas; R: TRectF; Scale: Single)&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Methode zeichnet einfach ein Bild auf das angegebene {{Code|Canvas}}. Weiterer Code von {{Code|AddSourceToItem(9)}} bereitet Parameter für den Aufruf von {{Code|DrawPicture}} vor. Die Methode {{Code|AddSourceToItem(9)}} weist den angegebenen Parameterwert {{Code|9}} dem {{Code|ImageIndex}} des neuen in {{Code|ImageList1}} eingefügten Bildes zu. Das heißt &amp;lt;code&amp;gt;ImageIndex=9&amp;lt;/code&amp;gt;. Zuerst überprüft {{Code|AddSourceToItem}}, ob das Bild in der &#039;&#039;&#039;Destination&#039;&#039;&#039;-Sammlung mit dem &amp;lt;code&amp;gt;ImageIndex=9&amp;lt;/code&amp;gt; über mindestens eine &#039;&#039;&#039;Ebene (Layer)&#039;&#039;&#039; verfügt. Falls nicht, wird die &#039;&#039;&#039;Ebene&#039;&#039;&#039; 0 erstellt. Wenn die &#039;&#039;&#039;Ebene&#039;&#039;&#039; 0 ein Bild enthält, dann wird das Bild in der Variable {{Code|SourceName}} gespeichert:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;SourceName&amp;amp;nbsp;:= Layer.Name;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.ImgList.TCustomImageList.BitmapItemByName|BitmapItemByName]] wird aufgerufen&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;MainDataModule.ImageList1.BitmapItemByName(SourceName, Item, Size)&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
um ein Element abzurufen, das dem angegebenen {{Code|SourceName}}-Namen aus der Sammlung &#039;&#039;&#039;Source&#039;&#039;&#039; entspricht. Bei Erfolg wird davon ausgegangen, dass das Bild bereits hinzugefügt wurde, und es wird nichts ausgeführt. Ansonsten wird der Sammlung &#039;&#039;&#039;Source&#039;&#039;&#039; ein neues Bild hinzugefügt. Wenn die &#039;&#039;&#039;Ebene&#039;&#039;&#039; vorhanden ist und den {{Code|SourceName}}-Namen enthält, dann wird der {{Code|SourceName}}-Name den hinzugefügten Bild zugewiesen. Andernfalls wird der Standardname verwendet.   &lt;br /&gt;
&lt;br /&gt;
Jetzt werden zyklisch mehrere Bilder für unterschiedliche Skalierungen erstellt. Ein neues Element wird in &#039;&#039;&#039;TMultiResBitmap&#039;&#039;&#039; eingefügt und dessen Standardskalierung ermittelt:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;S&amp;amp;nbsp;:= Item.Scale;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit {{Code|S}} und &#039;&#039;&#039;SourceRect&#039;&#039;&#039; der &#039;&#039;&#039;Ebene&#039;&#039;&#039; wird die Größe des &#039;&#039;&#039;Quellbildes&#039;&#039;&#039; berechnet:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Size.cx&amp;amp;nbsp;:= Round(Layer.SourceRect.Width * S);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird dieses Bild mit der transparenten Farbe gefüllt&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Item.Bitmap.Clear(TAlphaColorRec.Null);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und ein Bild gezeichnet:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;DrawPicture(Item.Bitmap.Canvas, R, S);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Öffnen Sie die Unit &#039;&#039;&#039;UnitDataModule&#039;&#039;&#039; im [[Formular-Designer|Formular-Designer]], und doppelklicken Sie auf das Bild {{Code|ImageList1}}. Im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; sehen Sie, dass das Bild mit dem &amp;lt;code&amp;gt;ImageIndex=9&amp;lt;/code&amp;gt; leer ist.&lt;br /&gt;
&lt;br /&gt;
Mit der aktuellen Implementierung wird durch Klicken auf &#039;&#039;&#039;Add New Source&#039;&#039;&#039; das neue Bild mit dem &amp;lt;code&amp;gt;ImageIndex=9&amp;lt;/code&amp;gt; in die Bilderliste {{Code|ImageList1}} eingefügt.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So überprüfen Sie die Funktionalität der Schaltfläche &amp;quot;Add New Source&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Lesen Sie, wie das [[samp_en:FMX.ImageList Sample|Beispiel FMX.ImageList]] verwendet wird.&lt;br /&gt;
# Wählen Sie in der Anwendung &#039;&#039;&#039; Demo of images&#039;&#039;&#039; die Registerkarte &#039;&#039;&#039;Bitmap and Image&#039;&#039;&#039; aus. &lt;br /&gt;
# Klicken Sie wiederholt auf die Pfeilschaltfläche &#039;&#039;&#039;Right&#039;&#039;&#039;.&amp;lt;br /&amp;gt; Die Bilder aus der Bilderliste {{Code|ImageList1}} werden sequenziell auf den Titel &#039;&#039;&#039;None&#039;&#039;&#039; der Registerkarte &#039;&#039;&#039;None&#039;&#039;&#039; gezeichnet.&lt;br /&gt;
# Wenn Sie zum neunten Mal auf die Pfeilschaltfläche &#039;&#039;&#039;Right&#039;&#039;&#039; klicken, wird der folgende Text in der Beschriftung {{Code|Label1}} angezeigt:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
::&lt;br /&gt;
:::&amp;lt;code&amp;gt;Images: &#039;ImageList1&#039;: Counts 11 &amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:::&amp;lt;code&amp;gt;ImageIndex: 9; Width 16; Height 16 &amp;lt;/code&amp;gt;&lt;br /&gt;
:: und das leere Bild auf den Titel &#039;&#039;&#039;None&#039;&#039;&#039; gezeichnet (es wird kein Bild gezeichnet).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;li&amp;gt; Klicken Sie auf der Registerkarte &#039;&#039;&#039;Bitmap and Image&#039;&#039;&#039; auf &#039;&#039;&#039;Add New Source&#039;&#039;&#039;. Das Bild mit dem &amp;lt;code&amp;gt;ImageIndex=9&amp;lt;/code&amp;gt; wird der {{Code|ImageList1}} hinzugefügt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Das hinzugefügte Bild erscheint auf dem Titel &#039;&#039;&#039;None&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ereignisbehandlungsroutine der Schaltfläche &amp;quot;Update Text&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Doppelklicken Sie im &#039;&#039;&#039;Formular-Designer&#039;&#039;&#039; auf die Schaltfläche &#039;&#039;&#039;Update Text&#039;&#039;&#039;. Der &#039;&#039;&#039;Quelltext-Editor&#039;&#039;&#039; zeigt die &#039;&#039;&#039;ActnUpdateTextExecute&#039;&#039;&#039;-Implementierung der Methode an. &#039;&#039;&#039;ActnUpdateTextExecute&#039;&#039;&#039; ist die &#039;&#039;&#039;OnClick&#039;&#039;&#039;-Ereignisbehandlungsroutine für die Schaltfläche &#039;&#039;&#039;Update Text&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der zu zeichnende Text wird aus dem Integerfeld {{Code|FNumber}} ermittelt, indem es in die String-Repräsentation {{Code|FNumber.[[lib_de:System.SysUtils.TIntegerHelper.ToString|ToString]]}} konvertiert wird. Jeder Klick auf &#039;&#039;&#039;Update Text&#039;&#039;&#039; erhöht den Wert dieses Feldes um {{Code|Inc(FNumber)}}.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ActnUpdateTextExecute&#039;&#039;&#039; ruft Folgendes auf&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;DrawTextOnLayer(8,FNumber.ToString)&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier gibt der erste Parameter {{Code|8}} den Index des Bildes in der &#039;&#039;&#039;Destination&#039;&#039;&#039;-Sammlung der {{Code|ImageList1}}-Bilderliste an, das geändert werden soll.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Öffnen Sie die Unit &#039;&#039;&#039;UnitDataModule&#039;&#039;&#039; im [[Formular-Designer|Formular-Designer]], und doppelklicken Sie auf das Bild {{Code|ImageList1}}. Klicken Sie im Bereich &#039;&#039;&#039;Liste der Bilder&#039;&#039;&#039; auf das Bild mit dem &amp;lt;code&amp;gt;ImageIndex=8&amp;lt;/code&amp;gt;. Im Bereich &#039;&#039;&#039;Ausgewähltes Bild&#039;&#039;&#039; sehen Sie, dass dieses Bild zwei &#039;&#039;&#039;Ebenen&#039;&#039;&#039; enthält. Die Ebene {{Code|0}} ist leer, und die Ebene {{Code|1}} enthält das &#039;&#039;&#039;TMultiResBitmap&#039;&#039;&#039; mit dem &#039;&#039;&#039;Namen&#039;&#039;&#039; {{Code|mail}}, das einen Umschlag darstellt:&lt;br /&gt;
&lt;br /&gt;
[[Image:ImageListEditor Image8.png|200px|center|Bild 8]]&lt;br /&gt;
&lt;br /&gt;
Der zweite Parameter {{Code|FNumber.ToString}} gibt den zu zeichnenden Text an.&lt;br /&gt;
&lt;br /&gt;
{{Code|DrawTextOnLayer}} entspricht weitgehend {{Code|DrawPicture}}. Zuerst überprüft {{Code|DrawTextOnLayer}}, ob das Bild in der &#039;&#039;&#039;Destination&#039;&#039;&#039;-Sammlung mit dem &amp;lt;code&amp;gt;ImageIndex=8&amp;lt;/code&amp;gt; über mindestens eine &#039;&#039;&#039;Ebene (Layer)&#039;&#039;&#039; verfügt. Anschließend wird überprüft, ob die oberste &#039;&#039;&#039;Ebene&#039;&#039;&#039; ein Bild enthält, und dann wird das Bild in der Variable {{Code|SourceName}} gespeichert:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;SourceName&amp;amp;nbsp;:= Layer.Name;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FMX.ImgList.TCustomImageList.BitmapItemByName|BitmapItemByName]] wird aufgerufen&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;MainDataModule.ImageList1.BitmapItemByName(SourceName, Item, Size)&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
um ein Element abzurufen, das dem angegebenen {{Code|SourceName}}-Namen aus der Sammlung &#039;&#039;&#039;Source&#039;&#039;&#039; entspricht.&lt;br /&gt;
&lt;br /&gt;
Wenn [[lib_de:FMX.ImgList.TCustomImageList.BitmapItemByName|BitmapItemByName]] kein Element mit dem {{Code|SourceName}} entsprechenden Namen ermittelt, wird ein neues &#039;&#039;&#039;Quellelement&#039;&#039;&#039; hinzugefügt:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;NewSource&amp;amp;nbsp;:= MainDataModule.ImageList1.Source.Add;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diesem Element wird der Name {{Code|SourceName}} zugewiesen:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;NewSource.Name&amp;amp;nbsp;:= SourceName;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wird versucht, {{Code|Item}} abzurufen:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Item&amp;amp;nbsp;:= NewSource.MultiResBitmap.ItemByScale(1, False, True);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Wenn {{Code|Item}} nicht vorhanden ist, dann wird der &#039;&#039;&#039;MultiResBitmap&#039;&#039;&#039;-Sammlung ein neues Element hinzugefügt:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Item&amp;amp;nbsp;:= NewSource.MultiResBitmap.Add;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und dessen Größe festgelegt:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Item.Bitmap.SetSize(Size.cx, Size.cy);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Size.cx&amp;amp;nbsp;:= Round(Layer.SourceRect.Rect.Width);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;Size.cy&amp;amp;nbsp;:= Round(Layer.SourceRect.Rect.Height);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach oder wenn [[lib_de:FMX.ImgList.TCustomImageList.BitmapItemByName|BitmapItemByName]] erfolgreich war, zeichnet {{Code|DrawTextOnLayer}} den {{Code|Text}} (gleich {{Code|FNumber.ToString}}) auf das erhaltene Bild:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Item.Bitmap.Canvas.FillText(&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;      TRectF.Create(1,0,Size.cx - 1,Size.cy div 2),&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;      Text, False, 1, [], TTextAlign.Center, TTextAlign.Center);&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit der aktuellen Implementierung wird durch Klicken auf &#039;&#039;&#039;Update Text&#039;&#039;&#039; eine Zahl auf das Bild mit dem &amp;lt;code&amp;gt;ImageIndex=8&amp;lt;/code&amp;gt; in die Bilderliste {{Code|ImageList1}} gezeichnet. Mit jedem Klick wird die gezeichnete Zahl um {{Code|1}} erhöht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So überprüfen Sie die Funktionalität der Schaltfläche &amp;quot;Update Text&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie in der Anwendung &#039;&#039;&#039; Demo of images&#039;&#039;&#039; die Registerkarte &#039;&#039;&#039;Bitmap and Image&#039;&#039;&#039; aus. &lt;br /&gt;
# Klicken Sie wiederholt auf die Pfeilschaltfläche &#039;&#039;&#039;Right&#039;&#039;&#039;.&amp;lt;br /&amp;gt; Die Bilder aus der Bilderliste {{Code|ImageList1}} werden sequenziell auf den Titel &#039;&#039;&#039;None&#039;&#039;&#039; der Registerkarte &#039;&#039;&#039;None&#039;&#039;&#039; und in das {{Code|Glyph1}}-Steuerelement gezeichnet.&lt;br /&gt;
# Wenn Sie zum achten Mal auf die Pfeilschaltfläche &#039;&#039;&#039;Right&#039;&#039;&#039; klicken, wird das Umschlag-Bild mit dem &amp;lt;code&amp;gt;ImageIndex=8&amp;lt;/code&amp;gt; gezeichnet.&lt;br /&gt;
# Die folgende Abbildung zeigt, dass der String {{Code|4}} auf das Bild im Titel &#039;&#039;&#039;None&#039;&#039;&#039; und in das {{Code|Glyph1}}-Steuerelement gezeichnet wurde.&lt;br /&gt;
&lt;br /&gt;
[[Image:Glyph with 4.png|center|Umschlag mit einer darüber gezeichneten 4]]&lt;br /&gt;
&lt;br /&gt;
===Verwenden von Bilderlisten in Steuerelementen===&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird erläutert, wie Bilder aus einer Bilderliste auf die Oberfläche Ihrer Steuerelemente gezeichnet werden. Ähnlich können Sie beim Erstellen Ihrer eigenen Steuerelemente mit Bildern aus Bilderlisten verfahren.&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel zeichnet Bilder aus der Bilderliste {{Code|ImageList1}} auf die Oberfläche des vierten Registerkarten-Steuerelements auf den Titel &#039;&#039;&#039;None&#039;&#039;&#039;. Um dies anzuzeigen, klicken Sie wiederholt auf die Pfeilschaltfläche &#039;&#039;&#039;Right&#039;&#039;&#039; oder &#039;&#039;&#039;Left&#039;&#039;&#039;. Die Bilder aus der Bilderliste {{Code|ImageList1}} werden sequenziell auf den Titel &#039;&#039;&#039;None&#039;&#039;&#039; gezeichnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Funktionsweise des Zeichnens von Bildern&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im {{Code|TMainForm.Create}}-Konstruktor des Formulars wird das Feld {{Code|FImageLink}} mit dem Typ [[lib_de:System.ImageList.TImageLink|TImageLink]] erstellt. Dann weist&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;FImageLink.Images&amp;amp;nbsp;:= MainDataModule.ImageList1;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
diesem Feld die Bilderliste {{Code|ImageList1}} zu. Anschließend wird die Ereignisbehandlungsroutine {{Code|OnImagesChange}} für das Ereignis {{Code|OnChange}} zugewiesen. {{Code|OnImagesChange}} wird ausgeführt, wenn das Programm ein Bild auf einem Steuerelement mit der Bilderliste {{Code|ImageList1}} zeichnen muss. {{Code|OnImagesChange}} kann folgendermaßen aussehen:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;... TabItem4.Repaint; ...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Zeichnen eines Bildes wird von der Ereignisbehandlungsroutine {{Code|TabItem4Paint}} der Ereignisbehandlungsroutine &#039;&#039;&#039;OnPaint&#039;&#039;&#039; des Registerkarten-Steuerelements {{Code|TabItem4}} durchgeführt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TMainForm.TabItem4Paint(Sender: TObject; Canvas: TCanvas;&lt;br /&gt;
                                  const ARect: TRectF);&lt;br /&gt;
var&lt;br /&gt;
  R: TRectF;&lt;br /&gt;
begin&lt;br /&gt;
  R := TRectF.Create(ARect.Right - 22, 4, ARect.Right - 6, 20);&lt;br /&gt;
  MainDataModule.ImageList1.Draw(TabItem4.Canvas, R,&lt;br /&gt;
                                 Glyph1.ImageIndex);&lt;br /&gt;
end;  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ist {{Code|R}} das Rechteck auf dem Registerkarten-Steuerelement {{Code|TabItem4}}, in das das Bild gezeichnet wird. [[lib_de:FMX.ImgList.TCustomImageList.Draw|Draw]] zeichnet das {{Code|Glyph1.ImageIndex}}-Bild in {{Code|R}} auf die angegebene {{Code|TabItem4.Canvas}}-Zeichenfläche. &lt;br /&gt;
&lt;br /&gt;
Sie können auch Nachkommen von {{Code|TImageLink}} ableiten, in denen die Methode [[lib_de:System.ImageList.TImageLink.Change|Change]] überschrieben werden soll, anstatt die Ereignisbehandlungsroutine {{Code|OnChange}} zu erstellen. &lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Vergessen Sie nicht das erstellte {{Code|FImageLink}}-Feld im Destruktor freizugeben. Verwenden Sie dazu die Methode [[lib_de:System.TObject.DisposeOf|DisposeOf]].&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr Steuerelement die Verwendung von [[FireMonkey-Aktionen|Aktionen]] unterstützt, dann unterstützt dieses Steuerelement wahrscheinlich das Interface [[lib_de:FMX.ActnList.IGlyph|IGlyph]]. In diesem Fall sollten Sie ein [[lib_de:FMX.ImgList.TGlyphImageLink|TGlyphImageLink]]-Objekt erstellen, das die Methode [[lib_de:FMX.ActnList.IGlyph.ImagesChanged|ImagesChanged]] aufruft. Dann müssen Sie die Ereignisbehandlungsroutine {{Code|OnChange}} nicht zuweisen.&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaften &#039;&#039;&#039;ImageIndex&#039;&#039;&#039; und &#039;&#039;&#039;Images&#039;&#039;&#039; Ihres Steuerelements müssen korrekte Werte haben. Normalerweise werden Eigenschaften mit dem folgenden Stil verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
property ImageIndex: TImageIndex read GetImageIndex write SetImageIndex&lt;br /&gt;
                                  stored ImageIndexStored;&lt;br /&gt;
…&lt;br /&gt;
function TMyControl.GetImageIndex: TImageIndex;&lt;br /&gt;
begin&lt;br /&gt;
  Result := FImageLink.ImageIndex;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TGlyph.SetImageIndex(const Value: TImageIndex);&lt;br /&gt;
begin&lt;br /&gt;
  FImageLink.ImageIndex := Value;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Bilderlisten-Editor (FireMonkey)|Bilderlisten-Editor (FireMonkey)]]&lt;br /&gt;
* [http://youtu.be/IZfG2S9KGcU Video, das zeigt, wie mit dem Bilderlisten-Editor eine Bilderliste erstellt und bearbeitet wird (EN)] Es werden einige fortgeschrittene und wichtige Leistungsmerkmale des Bilderlisten-Editors demonstriert.&lt;br /&gt;
&lt;br /&gt;
* [http://youtu.be/QI_dwMWtpuc Video, das die typischen Schritte beim Erstellen einer neuen Bilderliste in einem FireMonkey-Projekt demonstriert (EN)] &lt;br /&gt;
&lt;br /&gt;
* [[samp_en:FMX.ImageList Sample|FMX.ImageList (Beispiel)]]&lt;br /&gt;
* [http://youtu.be/oAEHD44BnQQ Video, das Funktionen aus dem &amp;quot;Beispiel FMX.ImageList&amp;quot; demonstriert (EN)]&lt;br /&gt;
&lt;br /&gt;
* [[Verwenden von Bitmaps mit Mehrfachauflösung|Verwenden von Bitmaps mit Mehrfachauflösung]]&lt;br /&gt;
* [[MultiResBitmap-Editor|MultiResBitmap-Editor]]&lt;br /&gt;
* [http://youtu.be/oFl925XuFgc Video, das die typische Verwendung des MultiResBitmap-Editors demonstriert (EN)]&lt;br /&gt;
&lt;br /&gt;
[[en:Using TImageList Image Lists as Centralized Collections of Images]]&lt;br /&gt;
[[fr:Utilisation des listes d&#039;images de TImageList en tant que collections centralisées d&#039;images]]&lt;br /&gt;
[[ja:画像の一元的なコレクションとしての TImageList 画像リストの使用]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_des_Experten_f%C3%BCr_neue_Komponenten&amp;diff=208925</id>
		<title>Verwenden des Experten für neue Komponenten</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_des_Experten_f%C3%BCr_neue_Komponenten&amp;diff=208925"/>
		<updated>2016-06-24T10:54:12Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Neue Komponente}}&lt;br /&gt;
&lt;br /&gt;
{{f| radstudio | Mit dem Experten {{menu | Komponente &amp;amp;gt; [[Neue Komponente|Neue Komponente]]}} können Sie entweder eine VCL-Komponente oder eine neue {{FM}}-Komponente für Ihre Anwendung erstellen. }}&lt;br /&gt;
{{f| appmethod | Mit dem Experten {{menu | Komponente &amp;amp;gt; [[Neue Komponente|Neue Komponente]]}} können Sie eine neue {{FM}}-Komponente für Ihre Anwendung erstellen. }}&lt;br /&gt;
Wenn ein Projekt geöffnet ist oder Sie ein Produkt mit nur einer Personality ausführen, ermittelt der Experte die Personality und erstellt den passenden Komponententyp ({{Delphi}} oder C++).&lt;br /&gt;
&lt;br /&gt;
==Übersicht: Schritte bei der Erstellung einer neuen Komponente==&lt;br /&gt;
&lt;br /&gt;
# [[#Ein Skeleton-Package erstellen (optional)|Erstellen Sie ein neues Skeleton-Package]] (dieser Schritt ist optional, wird aber empfohlen).&lt;br /&gt;
# [[#Den Experten starten und die Personality, das Framework und die Plattform festlegen|Starten Sie den Experten, und geben Sie &#039;&#039;&#039;Personality, Framework und Plattform&#039;&#039;&#039; an]].&lt;br /&gt;
# [[#Vorfahrkomponente auswählen|Wählen Sie auf der Seite &#039;&#039;&#039;Vorfahrkomponente&#039;&#039;&#039; eine Vorfahrkomponente aus]].&lt;br /&gt;
# [[#Klassennamen und andere Eigenschaften festlegen|Legen Sie auf der Seite &#039;&#039;&#039;Komponente&#039;&#039;&#039; einen Klassennamen und andere Eigenschaften fest]].&lt;br /&gt;
#[[#Unit erstellen und installieren|Wählen Sie eine Methode zum Erstellen und Installieren der Unit aus]]:&lt;br /&gt;
#* &#039;&#039;&#039;Unit anlegen&#039;&#039;&#039; auf der Seite &#039;&#039;&#039;Unit erstellen&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;In vorhandenes Package installieren&#039;&#039;&#039; auf der Seite &#039;&#039;&#039;Vorhandenes Package&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;In neues Package installieren&#039;&#039;&#039; auf der Seite &#039;&#039;&#039;Neues Package&#039;&#039;&#039;&lt;br /&gt;
#* Fügen Sie die Unit zu einem Skeleton-Package hinzu, das Sie vor dem Start des Experten in dem aktuellen Projekt erstellt haben.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Weitere Informationen zum Erstellen von Win64-Komponenten finden Sie unter &#039;&#039;&#039;[[Neue Komponente|Neue Komponente]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Ein Skeleton-Package erstellen (optional)===&lt;br /&gt;
&lt;br /&gt;
# Erstellen Sie durch Auswahl von {{menu | Datei &amp;amp;gt; Neu &amp;amp;gt; Weitere &amp;amp;gt; {{Delphi}}- oder C++-Projekte}} ein neues Skeleton-Package für die neue Komponente.&lt;br /&gt;
# Doppelklicken Sie auf das Symbol &#039;&#039;&#039;Package&#039;&#039;&#039;. Mit diesem Schritt wird der &#039;&#039;&#039;[[Projektverwaltung|Projektverwaltung]]&#039;&#039;&#039; ein neues Package-Projekt hinzugefügt und die Option &#039;&#039;&#039;Unit dem Projekt &amp;amp;lt;Mein_neues_Package&amp;amp;gt; hinzufügen&#039;&#039;&#039; auf der Seite &#039;&#039;&#039;Unit anlegen&#039;&#039;&#039; des Experten aktiviert.&lt;br /&gt;
&lt;br /&gt;
===Den Experten starten und die Personality, das Framework und die Plattform festlegen===&lt;br /&gt;
&lt;br /&gt;
Die Seite &#039;&#039;&#039;Personality, Framework und Plattform&#039;&#039;&#039; des Experten wird nur angezeigt, wenn Sie den Experten ohne in der IDE geöffnetes Projekt starten.&lt;br /&gt;
&lt;br /&gt;
:1. Wählen Sie in der IDE einen der folgenden Befehle:&lt;br /&gt;
:* {{menu | Komponente &amp;amp;gt; [[Neue Komponente|Neue Komponente]]}}&lt;br /&gt;
:* {{menu | Datei &amp;amp;gt; Neu &amp;amp;gt; Weitere &amp;amp;gt; {{Delphi}}-Projekte &amp;amp;gt; {{Delphi}}-Dateien &amp;amp;gt; Komponente &amp;amp;gt; {{Delphi}}-Dateien}}&lt;br /&gt;
:* {{menu | Datei &amp;amp;gt; Neu &amp;amp;gt; Weitere &amp;amp;gt; {{CBuilderUI}}-Projekte &amp;amp;gt; {{CBuilderUI}}-Dateien &amp;amp;gt; Komponente &amp;amp;gt; C++-Dateien}} {{f| radstudio | &lt;br /&gt;
:2. Wenn die erste Seite des Experten &#039;&#039;&#039;Neue Komponente&#039;&#039;&#039; (die Seite &#039;&#039;&#039;Personality, Framework und Plattform&#039;&#039;&#039;) angezeigt wird, wählen Sie die Personality ({{Delphi}} oder C++), das Framework (Bibliothek) und die gewünschte Plattform aus. Wählen Sie eine der folgenden Optionen:&lt;br /&gt;
:*&#039;&#039;&#039;VCL für C++&#039;&#039;&#039; oder &#039;&#039;&#039;VCL für {{Delphi}}&#039;&#039;&#039; &lt;br /&gt;
:*: VCL wird nur auf Windows unterstützt.}}	&lt;br /&gt;
&lt;br /&gt;
{{f| appmethod |&amp;amp;nbsp;:2. Wenn Sie die erste Seite des Experten &#039;&#039;&#039;Neue Komponente&#039;&#039;&#039; (Seite &#039;&#039;&#039;Personality, Framework und Plattform&#039;&#039;&#039;) sehen, wählen Sie die gewünschte Personality ({{Delphi}} oder C++) aus. Wählen Sie eine der folgenden Optionen:}}&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:*&#039;&#039;&#039;{{FM}} für C++&#039;&#039;&#039; oder &#039;&#039;&#039;{{FM}} für {{Delphi}}&#039;&#039;&#039; &lt;br /&gt;
:*: {{Delphi}} unterstützt {{FM}} auf Win32, Win64, OS X, 32-Bit- und 64-Bit-iOS-Gerät, iOS-Simulator und Android.&lt;br /&gt;
:*: {{CBuilderUI}} unterstützt {{FM}} auf Win32, Win64, OS X, 32-Bit- und 64-Bit-iOS-Gerät, iOS-Simulator und Android.&lt;br /&gt;
:* Klicken Sie auf &#039;&#039;&#039;Weiter&#039;&#039;&#039;. Die Seite &#039;&#039;&#039;Vorfahrkomponente&#039;&#039;&#039; wird angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Vorfahrkomponente auswählen===&lt;br /&gt;
&lt;br /&gt;
# Sehen Sie sich auf der Seite &#039;&#039;&#039;Vorfahrkomponente&#039;&#039;&#039; die Liste aller Komponenten und den Namen der Unit an, die die jeweilige Komponente definiert. Wählen Sie eine Vorfahrkomponente in der Liste aus.&lt;br /&gt;
# Klicken Sie auf &#039;&#039;&#039;Weiter&#039;&#039;&#039;. Die Seite &#039;&#039;&#039;Komponente&#039;&#039;&#039; wird angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Klassennamen und andere Eigenschaften festlegen===&lt;br /&gt;
&lt;br /&gt;
# Auf der Seite &#039;&#039;&#039;Komponente&#039;&#039;&#039; enthalten die folgenden Felder bereits Einträge:&lt;br /&gt;
#* &#039;&#039;&#039;Klassenname&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Palettenseite&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Unit-Name&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Suchpfad&#039;&#039;&#039;&lt;br /&gt;
#: Sie können diese Standardwerte übernehmen oder die Werte ändern. Wenn Sie die Standardwerte übernehmen möchten, fahren Sie mit dem letzten Schritt dieser Anleitung fort.&lt;br /&gt;
# Um den Standardklassennamen zu ändern, geben Sie den gewünschten Namen in das Textfeld &#039;&#039;&#039;Klassenname&#039;&#039;&#039; ein.&lt;br /&gt;
# Um die Standardpalettenseite für die Komponente zu ändern, geben Sie den gewünschten Namen in das Textfeld &#039;&#039;&#039;Palettenseite&#039;&#039;&#039; ein oder klicken auf den nach unten weisenden Pfeil, um eine Palettenseite auszuwählen.&lt;br /&gt;
# Im Textfeld &#039;&#039;&#039;Unit-Name&#039;&#039;&#039; können Sie den vollständigen Pfad des Unit-Namens eingeben oder bearbeiten. Klicken Sie auf [...], um die gewünschte Unit auszuwählen.&lt;br /&gt;
# Geben Sie den Suchpfad in das Textfeld &#039;&#039;&#039;Suchpfad&#039;&#039;&#039; ein, oder ändern Sie ihn. Der Standardsuchpfad ist der für den Bibliothekspfad auf der folgenden Seite festgelegte Wert:&lt;br /&gt;
#* {{menu | Tools &amp;amp;gt; Optionen &amp;amp;gt; Umgebungsoptionen &amp;amp;gt; C++-Optionen &amp;amp;gt; [[Pfade und Verzeichnisse (C++)|Pfade und Verzeichnisse (C++)]]}}&lt;br /&gt;
#* {{menu | Tools &amp;amp;gt; Optionen &amp;amp;gt; Umgebungsoptionen &amp;amp;gt; {{Delphi}}-Optionen &amp;amp;gt; [[Bibliothek|Bibliothek]]}} ({{Delphi}})&lt;br /&gt;
# Klicken Sie auf &#039;&#039;&#039;Weiter&#039;&#039;&#039;. Die Seite &#039;&#039;&#039;Unit erstellen&#039;&#039;&#039; des Experten wird geöffnet.&lt;br /&gt;
&lt;br /&gt;
===Unit erstellen und installieren===&lt;br /&gt;
&lt;br /&gt;
:Auf der Seite &#039;&#039;&#039;Unit anlegen&#039;&#039;&#039; finden Sie vier Optionen:&lt;br /&gt;
:* &#039;&#039;&#039;Unit erstellen&#039;&#039;&#039;&lt;br /&gt;
:* &#039;&#039;&#039;In vorhandenes Package installieren&#039;&#039;&#039;&lt;br /&gt;
:* &#039;&#039;&#039;In neues Package installieren&#039;&#039;&#039;&lt;br /&gt;
:* &#039;&#039;&#039;Unit dem Projekt &amp;amp;lt;Mein_neues_Package&amp;amp;gt; hinzufügen&#039;&#039;&#039; (diese Option wird nur angezeigt, wenn Sie vor dem Start des Experten ein neues Package erstellt haben)&lt;br /&gt;
:&#039;&#039;&#039;So erstellen Sie eine Unit:&#039;&#039;&#039;&lt;br /&gt;
:# Wählen Sie auf der Seite &#039;&#039;&#039;Unit erstellen&#039;&#039;&#039; das Optionsfeld &#039;&#039;&#039;Unit anlegen&#039;&#039;&#039;.&lt;br /&gt;
:# Klicken Sie auf &#039;&#039;&#039;Fertig stellen&#039;&#039;&#039;. Die neue Unit wird im &#039;&#039;&#039;Quelltext-Editor&#039;&#039;&#039; geöffnet.&lt;br /&gt;
:&#039;&#039;&#039;So installieren Sie eine Unit in ein vorhandenes Package:&#039;&#039;&#039;&lt;br /&gt;
:# Wählen Sie auf der Seite &#039;&#039;&#039;Unit erstellen&#039;&#039;&#039; das Optionsfeld &#039;&#039;&#039;In vorhandenes Package installieren&#039;&#039;&#039;.&lt;br /&gt;
:# Klicken Sie auf &#039;&#039;&#039;Weiter&#039;&#039;&#039;. Eine Liste mit allen vorhandenen Packages wird erzeugt.&lt;br /&gt;
:# Wählen Sie auf der Seite &#039;&#039;&#039;Vorhandenes Package&#039;&#039;&#039; das Package aus, in das Sie die Unit installieren möchten.&lt;br /&gt;
:# Klicken Sie auf &#039;&#039;&#039;Fertig stellen&#039;&#039;&#039;. Die neue Unit wird im &#039;&#039;&#039;Quelltext-Editor&#039;&#039;&#039; geöffnet.&lt;br /&gt;
:&#039;&#039;&#039;So installieren Sie eine Unit in ein neues Package:&#039;&#039;&#039;&lt;br /&gt;
:# Wählen Sie auf der Seite &#039;&#039;&#039;Unit erstellen&#039;&#039;&#039; das Optionsfeld &#039;&#039;&#039;In neues Package installieren&#039;&#039;&#039;.&lt;br /&gt;
:# Klicken Sie auf &#039;&#039;&#039;Weiter&#039;&#039;&#039;.&lt;br /&gt;
:# Geben Sie auf der Seite &#039;&#039;&#039;Neues Package&#039;&#039;&#039; einen Namen für das Package in das Textfeld &#039;&#039;&#039;Package-Name&#039;&#039;&#039; ein.&lt;br /&gt;
:# Geben Sie in das Textfeld &#039;&#039;&#039;Beschreibung&#039;&#039;&#039; eine Beschreibung für Ihr neues Package ein.&lt;br /&gt;
:# Klicken Sie auf &#039;&#039;&#039;Fertig stellen&#039;&#039;&#039;. Die neue Unit wird im &#039;&#039;&#039;Quelltext-Editor&#039;&#039;&#039; geöffnet.&lt;br /&gt;
:&#039;&#039;&#039; So installieren Sie eine Unit in ein Skeleton-Package, das Sie vor der Ausführung des Experten erstellt haben:&#039;&#039;&#039;&lt;br /&gt;
:# Wählen Sie auf der Seite &#039;&#039;&#039;Unit erstellen&#039;&#039;&#039; das Optionsfeld &#039;&#039;&#039;Unit dem Projekt &amp;amp;lt;Mein_neues_Package&amp;amp;gt; hinzufügen&#039;&#039;&#039;. (Diese Option ist aktiviert, wenn Sie ein Skeleton-Package vor dem Start des Experten erstellt haben, wie oben unter &#039;&#039;&#039;Ein Skeleton-Package erstellen (optional)&#039;&#039;&#039; beschrieben.)&lt;br /&gt;
:# Klicken Sie auf &#039;&#039;&#039;Fertig stellen&#039;&#039;&#039;. Die neue Unit wird im &#039;&#039;&#039;Quelltext-Editor&#039;&#039;&#039; geöffnet.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
{{f| radstudio |*[[Überblick zu VCL|Überblick zu VCL]] }}&lt;br /&gt;
&lt;br /&gt;
* [[Neue Komponente|Experte für neue Komponenten]] (Experte)&lt;br /&gt;
* [[Erstellen einer FireMonkey-Komponente (Delphi)|Erstellen einer FireMonkey-Komponente (Delphi)]]&lt;br /&gt;
* [[Erstellen einer FireMonkey-Komponente (C++)|Erstellen einer FireMonkey-Komponente (C++)]]&lt;br /&gt;
* [[Neue Komponenten erzeugen|Neue Komponenten erzeugen]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Verwenden des Experten fur neue Komponenten}}&lt;br /&gt;
[[Category:Mit Delphi für Windows arbeiten]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using the New Component Wizard]]&lt;br /&gt;
[[fr:Utilisation de l&#039;expert Nouveau composant]]&lt;br /&gt;
[[ja:［コンポーネントの新規作成］ウィザードを使用する]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_der_macOS-Mitteilungszentrale&amp;diff=208924</id>
		<title>Verwenden der macOS-Mitteilungszentrale</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_der_macOS-Mitteilungszentrale&amp;diff=208924"/>
		<updated>2016-06-24T10:53:59Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
{{Parent|OS X-Anwendungsentwicklung}}&lt;br /&gt;
&lt;br /&gt;
Durch lokale Mitteilungen können Hintergrund- oder inaktive Anwendungen Benutzer darüber informieren, dass ein Ereignis aufgetreten ist, das von Interesse ist oder die App betrifft. In diesem Thema werden die grundlegenden Schritte für die Verwendung von lokalen Mitteilungen für &#039;&#039;&#039;OS X&#039;&#039;&#039;-Anwendungen beschrieben.&lt;br /&gt;
&lt;br /&gt;
In Mountain Lion (OS X 10.8) wurden die Mitteilungsfunktionen und die &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039; hinzugefügt. Diese entspricht weitgehend der &#039;&#039;&#039;iOS&#039;&#039;&#039;-Mitteilungszentrale, in der Sie lokale Mitteilungen terminieren oder sofort anzeigen können.&lt;br /&gt;
&lt;br /&gt;
==Mitteilungsarten==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;OS X&#039;&#039;&#039; gibt es drei Arten von Mitteilungen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mitteilungsart&lt;br /&gt;
! Beschreibung&lt;br /&gt;
! Vorschau&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Hinweis&lt;br /&gt;
|&lt;br /&gt;
Wird in der rechten oberen Ecke auf dem Mac angezeigt. Der Hinweis verbleibt auf dem Bildschirm, bis der Benutzer eine Aktion ausführt.&lt;br /&gt;
|&lt;br /&gt;
[[File:Notification Alert.png]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Banner&lt;br /&gt;
|&lt;br /&gt;
Wird für eine kurze Zeit in der rechten oberen Ecke auf dem Mac angezeigt und gleitet dann nach rechts aus dem Bildschirm.&lt;br /&gt;
|&lt;br /&gt;
[[File:Notification Banner.png]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Kennzeichen&lt;br /&gt;
|&lt;br /&gt;
Ein rotes Kennzeichen mit einer Zahl wird rechts oben auf dem Symbol einer App angezeigt. Die Zahl gibt die Anzahl der Mitteilungen an, die für Sie in einer App vorhanden sind.&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Kennzeichen wird nicht unterstützt. Ein Beispiel der Implementierung von Kennzeichen ohne Verwendung der Komponente [[lib_de:System.Notification.TNotificationCenter|TNotificationCenter]] finden Sie unter [[samp_en:OSX Dock Badges (Delphi)|OSX Dock Badges]]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Zugreifen auf den Mitteilungsdienst==&lt;br /&gt;
&lt;br /&gt;
{{Product}} stellt die Komponente [[lib_de:System.Notification.TNotificationCenter|TNotificationCenter]] bereit, über die Sie schnell auf den Mitteilungsdienst zugreifen können.&lt;br /&gt;
&lt;br /&gt;
Um auf den Mitteilungsdienst zuzugreifen, legen Sie eine &#039;&#039;&#039;TNotificationCenter&#039;&#039;&#039;-Komponente auf Ihrem Formular ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{Product}} fügt die folgende Unit für {{Delphi}} hinzu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
uses&lt;br /&gt;
  System.Notification;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{Product}} fügt den folgenden &#039;&#039;&#039;include&#039;&#039;&#039;-Operator der Projekt-Header-Datei für C++ hinzu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Notification.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mitteilungszentrale unter OS X==&lt;br /&gt;
&lt;br /&gt;
Alle [http://support.apple.com/kb/ht5362 Mitteilungen (EN)], für die keine Aktionen ausgeführt werden, werden in die &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039; übernommen. Wenn eine Popup-Mitteilung auf dem Bildschirm erscheint und der Benutzer nicht darauf klickt, wird sie in die &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039; übernommen. Hinweise verbleiben so lange in der Mitteilungszentrale, bis der Benutzer die geeignete Aktion ausführt.&lt;br /&gt;
&lt;br /&gt;
Sie können die &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039; ein- und ausblenden, indem Sie einfach auf der rechten Seite der Menüleiste auf [[File:Notification Center icon.png]] klicken. Wenn der Benutzer in der &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039; auf eine Mitteilung klickt, wird die App geöffnet oder in den Vordergrund gesetzt.&lt;br /&gt;
&lt;br /&gt;
[[File:Notification Center on Menu Bar.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Mitteilung kann als Popup-Banner oder als Hinweis angezeigt werden, wenn die App im Hintergrund ausgeführt wird oder inaktiv ist. Der Benutzer kann die Art und Weise festlegen, wie diese Mitteilungen in &#039;&#039;&#039;OS X&#039;&#039;&#039; dargestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[File:Notifications Icon.png]]&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie &#039;&#039;&#039;Systemeinstellungen&#039;&#039;&#039; &amp;amp;gt; &#039;&#039;&#039;Mitteilungen&#039;&#039;&#039;.&lt;br /&gt;
# Suchen Sie links die App.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Keine&#039;&#039;&#039;, &#039;&#039;&#039;Banner&#039;&#039;&#039; oder &#039;&#039;&#039;Hinweise&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Wenn der Benutzer &#039;&#039;&#039;Keine&#039;&#039;&#039; auswählt, wird keine Popup-Mitteilung angezeigt, und Mitteilungen werden direkt in die  &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039; übernommen. Standardmäßig zeigt Ihre App das Mitteilungsbanner an.&lt;br /&gt;
&lt;br /&gt;
Der folgende Screenshot zeigt das Konfigurationsfenster der &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:OSXNotificationCenter.png|500 px]]&lt;br /&gt;
&lt;br /&gt;
==Erstellen von Mitteilungen==&lt;br /&gt;
&lt;br /&gt;
Damit Ihre App lokale Mitteilungen unter &#039;&#039;&#039;OS X&#039;&#039;&#039; anzeigen kann, müssen Sie eine Instanz des Klassenobjekts [[lib_de:System.Notification.TNotification|TNotification]] erstellen. Sie können diese Instanz mit der Methode &#039;&#039;&#039;[[lib_de:System.Notification.TCustomNotificationCenter.CreateNotification|System.Notification.TNotificationCenter.CreateNotification]]&#039;&#039;&#039; erstellen.&lt;br /&gt;
&lt;br /&gt;
Beim Erstellen eines lokalen Mitteilungsobjekts kann die App die Mitteilung entweder mit dem Betriebssystem terminieren oder sie sofort anzeigen. Lokale Mitteilungen eignen sich ideal für Apps mit zeitbasiertem Verhalten. Sie können die Uhrzeit festlegen, zu der das Betriebssystem die Mitteilung liefert; die Uhrzeit wird auch &#039;&#039;&#039;Auslösungszeitpunkt&#039;&#039;&#039; genannt.&lt;br /&gt;
Sie können die geplante Mitteilung auch wiederholen.&lt;br /&gt;
&lt;br /&gt;
So nehmen Sie Mitteilungen in Ihre &#039;&#039;&#039;OS X&#039;&#039;&#039;-Apps auf:&lt;br /&gt;
&lt;br /&gt;
# Erstellen Sie eine Instanz der Klasse [[lib_de:System.Notification.TNotification|TNotification]].&lt;br /&gt;
# Erstellen Sie mit [[lib_de:System.Notification.TCustomNotificationCenter.CreateNotification|CreateNotification]] eine Mitteilung.&lt;br /&gt;
# Legen Sie die Felder [[lib_de:System.Notification.TNotification.Name|Name]], [[lib_de:System.Notification.TNotification.AlertBody|AlertBody]] und [[lib_de:System.Notification.TNotification.FireDate|FireDate]] fest.&lt;br /&gt;
#* Um die Mitteilung zu planen und sie in der &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039; anzuzeigen, verwenden Sie die Methode [[lib_de:System.Notification.TCustomNotificationCenter.ScheduleNotification|ScheduleNotification]], die die Klasse [[lib_de:System.Notification.TNotificationCenter|TNotificationCenterclass]] von [[lib_de:System.Notification.TCustomNotificationCenter|TCustomNotificationCenter]] erbt.&lt;br /&gt;
#* Um eine geplante Mitteilung zu wiederholen und für die &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039; bereitzustellen, erstellen Sie eine geplante Mitteilung und verwenden Sie die Eigenschaft [[lib_de:System.Notification.TNotification.RepeatInterval|RepeatInterval]] der Klasse [[lib_de:System.Notification.TNotificationCenter|TNotificationCenter]].&lt;br /&gt;
#* Um die Mitteilung sofort anzuzeigen, verwenden Sie die Methode [[lib_de:System.Notification.TCustomNotificationCenter.PresentNotification|PresentNotification]], die die Klasse [[lib_de:System.Notification.TNotificationCenter|TNotificationCenter]] von [[lib_de:System.Notification.TCustomNotificationCenter|TCustomNotificationCenter]] erbt.&lt;br /&gt;
&lt;br /&gt;
Mitteilungen verbleiben in der &#039;&#039;&#039;Mitteilungszentrale&#039;&#039;&#039;, bis Sie sie löschen. &lt;br /&gt;
&lt;br /&gt;
Jede Mitteilung ist durch die Eigenschaft &#039;&#039;&#039;Name&#039;&#039;&#039; des &#039;&#039;&#039;TNotification&#039;&#039;&#039;-Objekts eindeutig festgelegt. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So aktualisieren oder löschen Sie eine Mitteilung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Um eine geplante Mitteilung zu aktualisieren, rufen Sie erneut die Methode [[lib_de:System.Notification.TCustomNotificationCenter.ScheduleNotification|ScheduleNotification]] mit einer Instanz von &#039;&#039;&#039;TNotificationCenter&#039;&#039;&#039; auf, die denselben Namen (Eigenschaft &#039;&#039;&#039;Name&#039;&#039;&#039;) hat. &lt;br /&gt;
* Um eine Mitteilung zu stornieren, rufen Sie die Methode [[lib_de:System.Notification.TCustomNotificationCenter.CancelNotification|CancelNotification]] mit dem verwendeten Bezeichner auf.&lt;br /&gt;
* Um alle Mitteilungen zu stornieren, rufen Sie die Methode [[lib_de:System.Notification.TCustomNotificationCenter.CancelAll|CancelAll]] auf.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Verwenden von Mitteilungen|Verwenden von Mitteilungen]]&lt;br /&gt;
* [[lib_de:System.Notification.TNotification|System.Notification.TNotification]]&lt;br /&gt;
* [[lib_de:System.Notification.TNotificationCenter|System.Notification.TNotificationCenter]]&lt;br /&gt;
* [[samp_en:FMX.SendCancelNotification Sample|FMX.SendCancelNotification (Beispiel)]]&lt;br /&gt;
* [[samp_en:FMX.Notification.Mac (Delphi)|FMX.Notification.Mac (Delphi-Codebeispiel)]]&lt;br /&gt;
* [[samp_en:FMX.Notification.Mac (C++)|FMX.Notification.Mac (C++-Codebeispiel)]]&lt;br /&gt;
* [[Mobile-Tutorial: Verwenden von Mitteilungen (iOS und Android)|Mobile-Tutorial: Verwenden von Mitteilungen (iOS und Android)]]&lt;br /&gt;
* [[Mobile-Tutorial: Verwenden von Remote-Mitteilungen (iOS und Android)|Mobile-Tutorial: Verwenden von Remote-Mitteilungen (iOS und Android)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:FMX]]&lt;br /&gt;
[[Category:Geräteübergreifend]]&lt;br /&gt;
[[Category:XE6]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using the OS X Notification Center]]&lt;br /&gt;
[[fr:Utilisation du Centre de notifications Mac OS X]]&lt;br /&gt;
[[ja:Mac OS X 通知センターの使用]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_SQLite_mit_FireDAC&amp;diff=208923</id>
		<title>Verwenden von SQLite mit FireDAC</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_SQLite_mit_FireDAC&amp;diff=208923"/>
		<updated>2016-06-24T10:53:35Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Arbeiten mit DBMS (FireDAC)}}&lt;br /&gt;
&lt;br /&gt;
Dieser Referenzartikel ist in mehrere Abschnitte gegliedert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Einführung in SQLite&#039;&#039;&#039;: bietet einen Überblick über SQLite-Funktionen, fehlende Funktionen, mögliche Anwendungen und nicht für SQLite geeignete Anwendungen.&lt;br /&gt;
* &#039;&#039;&#039;Verwenden von SQLite-Datenbanken&#039;&#039;&#039;: erläutert, wie eine SQLite-Datenbank in einer {{Delphi}}-Anwendung erstellt, eine Verbindung mit der Datenbank hergestellt und die Datenbank verwaltet wird.&lt;br /&gt;
* &#039;&#039;&#039;Verschlüsselte SQLite-Datenbanken:&#039;&#039;&#039; die Datenbankverschlüsselung stellt eine der wichtigsten SQLite-Funktionen dar. In diesem Abschnitt wird die Funktionsweise der Verschlüsselung und deren Steuerung erklärt.&lt;br /&gt;
* &#039;&#039;&#039;SQLite-Datentypen:&#039;&#039;&#039; SQLite verwendet ein spezielles Datentypsystem. Ohne Kenntnis der Funktionsweise dieses Systems ist es schwierig, Daten in {{Delphi}}-Anwendungen zu speichern und abzurufen.&lt;br /&gt;
* &#039;&#039;&#039;SQL-Anweisungen von SQLite:&#039;&#039;&#039; Hauptaspekte des SQL-Dialekts von SQLite für {{Delphi}}-Anwendungsentwickler.&lt;br /&gt;
* &#039;&#039;&#039;Transaktionen, Sperren und Cursors in SQLite:&#039;&#039;&#039; erläutert die Arbeit mit Transaktionen in einer SQLite-Umgebung.&lt;br /&gt;
* &#039;&#039;&#039;Erweitern der SQLite-Engine:&#039;&#039;&#039; als eingebettetes DBMS kann die SQLite-Engine durch {{Delphi}}-Anwendungscode erweitert werden.&lt;br /&gt;
* &#039;&#039;&#039;Fortgeschrittene SQLite-Techniken:&#039;&#039;&#039; in diesem Abschnitt werden schließlich einige fortgeschrittene SQLite-Konzepte, wie Protokollierung von Aktualisierungen und SQL-Autorisierung, vorgestellt.&lt;br /&gt;
&lt;br /&gt;
Für diesen Artikel ist die Kenntnis der FireDAC-Grundlagen und der Hauptbibliotheks-APIs erforderlich. Anfängern wird empfohlen, mit dem Artikel [[Einführung (FireDAC)|Einführung]] zu beginnen und sich die Demo &amp;quot;FireDAC\Samples\Getting Started\SQLite&amp;quot; anzusehen.&lt;br /&gt;
&lt;br /&gt;
==Einführung in SQLite==&lt;br /&gt;
&lt;br /&gt;
===SQLite-Datenbank===&lt;br /&gt;
&lt;br /&gt;
[http://www.sqlite.org/ SQLite (EN)] ist eine eingebettete SQL-Datenbank-Engine, die vom SQLite Consortium entwickelt wurde. Sie ist das weltweit [http://www.sqlite.org/mostdeployed.html am häufigsten eingesetzte DBMS (EN)] mit circa 500&amp;amp;nbsp;Millionen Installationen. Sie wird auf mobilen iOS- und Android-Geräten genauso wie auf Mac OS-Desktops eingesetzt. Sie wird von Firefox, Skype und McAfee-Antivirus verwendet.&lt;br /&gt;
&lt;br /&gt;
===SQLite-Funktionen===&lt;br /&gt;
&lt;br /&gt;
Auf der [http://www.sqlite.org/features.html SQLite-Website (EN)] sind die folgenden Funktionen aufgeführt:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Transaktionen&#039;&#039;&#039; sind ACID (Atomic, Consistent, Isolated und Durable), auch nach Systemabstürzen und Stromausfällen.&lt;br /&gt;
* &#039;&#039;&#039;Konfigurationsfrei&#039;&#039;&#039; – keine Konfiguration oder Administration erforderlich.&lt;br /&gt;
* Implementiert einen &#039;&#039;&#039;Großteil der SQL92-Funktionen&#039;&#039;&#039;. Unterstützt Tabellen-Trigger und -Sichten.&lt;br /&gt;
* Eine komplette Datenbank wird in einer &#039;&#039;&#039;einzelnen plattformübergreifenden Datei&#039;&#039;&#039; gespeichert.&lt;br /&gt;
* Unterstützt &#039;&#039;&#039;Datenbanken in Terabyte-Größe&#039;&#039;&#039; sowie Strings und Blobs in Gigabyte-Größe.&lt;br /&gt;
* &#039;&#039;&#039;Schneller&#039;&#039;&#039; als populäre Client/Server-Datenbank-Engines bei den häufigsten Operationen.&lt;br /&gt;
* &#039;&#039;&#039;Eigenständig&#039;&#039;&#039;: keine externen Abhängigkeiten.&lt;br /&gt;
* &#039;&#039;&#039;Geräteübergreifend&#039;&#039;&#039;: Windows, OS X, iOS und Android werden ohne Zusatzaufwand unterstützt.&lt;br /&gt;
* Die Quelltexte befinden sich in der öffentlichen Domäne. Deren Verwendung für beliebige Zwecke ist &#039;&#039;&#039;kostenlos&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Sehr leistungsstarke API&#039;&#039;&#039;, die die Erweiterung der Engine in praktisch allen Bereichen zulässt.&lt;br /&gt;
* SQLite erreicht im Vergleich zu anderen eingebetteten, Dateiserver- und Client-Server-Datenbank-Engines, die in {{Delphi}}-Anwendungen eingesetzt werden, eine der &#039;&#039;&#039;besten Datenzugriffsleistungen&#039;&#039;&#039;. Es gibt viele erfolgreiche Datenbankenanwendungen mit mehreren Gigabyte. Silwood Technology Saphir wurde beispielsweise mit SQLite, {{Delphi}} und FireDAC entwickelt.&lt;br /&gt;
&lt;br /&gt;
===Fehlende SQLite-Funktionen===&lt;br /&gt;
&lt;br /&gt;
Entwickler suchen häufig nach den folgenden Funktionen, die in SQLite nicht vorhanden sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Gespeicherte Prozeduren&#039;&#039;&#039; – FireDAC bietet eine API für benutzerdefinierte Funktionen.&lt;br /&gt;
* Umfangreiche &#039;&#039;&#039;integrierte Funktionen&#039;&#039;&#039; – FireDAC installiert ungefähr 50&amp;amp;nbsp;Standardfunktionen vor.&lt;br /&gt;
* &#039;&#039;&#039;Sicherheitssystem&#039;&#039;&#039;, einschließlich Benutzerkonzept und Rechtekonzept – FireDAC bietet eine passwortgeschützte verschlüsselte Datenbank und spezielle Callback-Funktionen zum Filtern von Benutzeraktionen.&lt;br /&gt;
* &#039;&#039;&#039;Sortierungen&#039;&#039;&#039; (nur ASCII und binär) – FireDAC ermöglicht die Definition von benutzerdefinierten Sortierungen.&lt;br /&gt;
&lt;br /&gt;
===SQLite-Anwendungen===&lt;br /&gt;
&lt;br /&gt;
Auf der [http://www.sqlite.org/whentouse.html SQLite-Website (EN)] sind die folgenden Funktionen aufgeführt:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Format der Anwendungsdatei&#039;&#039;&#039; – SQLite wurde mit großem Erfolg als On-Disk-Dateiformat für Desktop-Plattformen eingesetzt.&lt;br /&gt;
* &#039;&#039;&#039;Eingebettete Geräte und Anwendungen&#039;&#039;&#039; – Weil die SQLite-Datenbank keine oder nur wenig Administration erfordert, ist SQLite eine gute Wahl für Geräte oder Dienste, die unbeaufsichtigt und ohne menschliche Unterstützung arbeiten.&lt;br /&gt;
* &#039;&#039;&#039;Websites&#039;&#039;&#039; – SQLite funktioniert in der Regel als Datenbank-Engine für Websites mit geringem oder mittlerem Verkehr (d.&amp;amp;nbsp;h. 99,9&amp;amp;nbsp;% aller Websites) gut.&lt;br /&gt;
* &#039;&#039;&#039;Ersatz für Ad-hoc-Datenträgerdateien&#039;&#039;&#039; – SQLite funktioniert insbesondere gut als Ersatz für diese Ad-hoc-Datendateien.&lt;br /&gt;
* &#039;&#039;&#039;Interne oder temporäre Datenbanken&#039;&#039;&#039; – In Programmen kann das Sichten und Sortieren von Daten auf unterschiedliche Weise einfacher ausgeführt werden, indem Daten in die SQLite-Datenbank im Arbeitsspeicher geladen werden und die komplette SQL-Anweisung ausgeführt wird.&lt;br /&gt;
* &#039;&#039;&#039;Ersatz für eine Unternehmensdatenbank&#039;&#039;&#039; bei Demos oder Tests.&lt;br /&gt;
* &#039;&#039;&#039;Datenbankpädagogik&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Nicht für SQLite geeignete Anwendungen===&lt;br /&gt;
&lt;br /&gt;
Auf derselben [http://www.sqlite.org/whentouse.html SQLite-Website (EN)] sind die folgenden Funktionen aufgeführt:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Hohe Parallelität&#039;&#039;&#039; – SQLite verwendet Lese-/Schreibsperren für die gesamte Datenbankdatei. Wenn also ein Prozess einen Teil der Datenbank liest, können alle anderen Prozesse nicht in einen anderen Teil der Datenbank schreiben. Ebenso können alle anderen Prozesse keinen anderen Teil der Datenbank lesen, während ein Prozess in die Datenbank schreibt.&lt;br /&gt;
* &#039;&#039;&#039;Client/Server-Anwendungen&#039;&#039;&#039; – Wenn viele Client-Programme auf eine gemeinsame Datenbank über ein Netzwerk zugreifen, sollten Sie die Verwendung einer Client/Server-Datenbank-Engine anstelle von SQLite in Betracht ziehen. SQLite arbeitet über ein Netzwerkdateisystem, aber wegen der den meisten Netzwerkdateisystemen zugeordneten Wartezeit ist die Leistung nicht ideal.&lt;br /&gt;
* &#039;&#039;&#039;Sehr große Datenmengen&#039;&#039;&#039; (N TB).&lt;br /&gt;
&lt;br /&gt;
==Verwenden von SQLite-Datenbanken==&lt;br /&gt;
&lt;br /&gt;
===Verbinden mit einer SQLite-Datenbank aus einer {{Delphi}}-Anwendung===&lt;br /&gt;
&lt;br /&gt;
Fügen Sie TFDPhysSQLiteDriverLink einem Formular oder einen Datenmodul hinzu, um den SQLite-Treiber von FireDAC mit einer {{Delphi}}-Anwendung zu verknüpfen. Um eine Verbindung mit einer SQLite-Datenbank herzustellen, geben Sie [[Herstellen einer Verbindung zu SQLite-Datenbanken (FireDAC)|SQLite-Treiberparameter]] an, zumindest die folgenden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
DriverID=SQLite&lt;br /&gt;
Database=&amp;lt;path to SQLite database&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden alle SQLite-Treibereinstellungen für einen einzelnen Hochleistungszugriff auf eine Datenbank in einer stabilen Umgebung festgelegt. Mit der Anweisung [http://www.sqlite.org/pragma.html PRAGMA (EN)] können Sie SQLite konfigurieren. Viele FireDAC SQLite-Treiberparameter entsprechen Pragma-Anweisungen. Darüber hinaus ermöglicht &#039;&#039;&#039;SQLiteAdvanced&#039;&#039;&#039; die Angabe von mehreren durch &amp;quot;;&amp;quot; getrennten Pragma-Anweisungen als einzelnen Verbindungsparameter.&lt;br /&gt;
&lt;br /&gt;
Weitere SQLite-Anwendungsfälle:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Nr.&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Besonderheiten der Anwendung&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Lesen großer DBs.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Setzen Sie &#039;&#039;&#039;CacheSize&#039;&#039;&#039; auf eine höhere Anzahl an Seiten, die für die Zwischenspeicherung der DB-Daten verwendet werden. Die gesamte Größe des Zwischenspeichers beträgt &amp;quot;CacheSize * &amp;amp;lt;DB-Seitengröße&amp;amp;gt;&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Exklusives Aktualisieren von DBs.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Setzen Sie &#039;&#039;&#039;JournalMode&#039;&#039;&#039; ggf. auf [http://www.sqlite.org/pragma.html#pragma_journal_mode WAL (EN)] ([http://www.sqlite.org/draft/wal.html weitere Informationen (EN)]).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Lange Aktualisierungstransaktionen.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Setzen Sie &#039;&#039;&#039;CacheSize&#039;&#039;&#039; auf eine höhere Anzahl an Seiten. Dadurch können Sie Transaktionen mit vielen Aktualisierungen ausführen, ohne den Arbeitsspeicher-Zwischenspeicher mit modifizierten Seiten zu überladen.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Einige wenige gleichzeitige Aktualisierungsprozesse.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Setzen Sie &#039;&#039;&#039;LockingMode&#039;&#039;&#039; auf Normal, um den gemeinsamen DB-Zugriff zu aktivieren. Setzen Sie &#039;&#039;&#039;Synchronous&#039;&#039;&#039; auf Normal oder Full, damit übergebene Daten für andere sichtbar sind. Setzen Sie &#039;&#039;&#039;UpdateOptions.LockWait&#039;&#039;&#039; auf True, um das Warten auf Sperren zu aktivieren. Erhöhen Sie &#039;&#039;&#039;BusyTimeout&#039;&#039;&#039;, um die Wartezeit auf Sperren zu verlängern. Setzen Sie &#039;&#039;&#039;JournalMode&#039;&#039;&#039; ggf. auf WAL.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Einige wenige gleichzeitige Aktualisierungs-Threads.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Siehe (4). Setzen Sie zudem &#039;&#039;&#039;SharedCache&#039;&#039;&#039; auf False, um Sperrkonflikte zu minimieren.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Einige wenige gleichzeitige Aktualisierungstransaktionen.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Siehe (4) oder (5). Setzen Sie zudem &#039;&#039;&#039;TxOptions.Isolation&#039;&#039;&#039; auf xiSnapshot oder xiSerializible, um mögliche Transaktions-Deadlocks zu verhindern.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Hohe Sicherheit.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Setzen Sie &#039;&#039;&#039;Synchronous&#039;&#039;&#039; auf Full, um die DB vor Verlusten von übergebenen Daten zu schützen. Siehe auch (3). Ziehen Sie die Verschlüsselung der Datenbank in Betracht, um die Integrität zu wahren. &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 8&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Hohe Vertraulichkeit.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Verschlüsseln Sie die Datenbank, um Vertraulichkeit und Integrität bereitzustellen.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | 9&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Entwicklungszeit.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Setzen Sie &#039;&#039;&#039;LockingMode&#039;&#039;&#039; auf Normal, um die simultane Verwendung der SQLite-DB in der IDE und einem gedebuggten Programm zu aktivieren.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Erstellen einer SQLite-Datenbank in einer {{Delphi}}-Anwendung===&lt;br /&gt;
&lt;br /&gt;
Standardmäßig wird die SQLite-Datenbank bei der Verbindungseinrichtung erstellt, falls sie nicht vorhanden ist. Um eine explizite Steuerung zu erreichen, kann in der {{Delphi}}-Anwendung Folgendes angegeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
OpenMode=CreateUTF8 | CreateUTF16 | ReadWrite | ReadOnly&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die beiden ersten für die Erstellung verwendeten Werte unterscheiden sich hinsichtlich der Codierung, die für die neue Datenbank verwendet wird. Außerdem wird empfohlen, [http://www.sqlite.org/pragma.html#pragma_page_size page_size (EN)] für Datenbanken, die Tabellen mit mehreren Zeilen enthalten, auf 4096 oder höher zu setzen. Dafür können Sie bei der Erstellung den folgenden Code angeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
SQLiteAdvanced=page_size=4096&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ziehen Sie die Angabe von Parametern mittels SQLiteAdvanced in Betracht:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlite.org/pragma.html#pragma_auto_vacuum auto_vacuum (EN)]&lt;br /&gt;
* [http://www.sqlite.org/pragma.html#pragma_default_cache_size default_cache_size (EN)]&lt;br /&gt;
&lt;br /&gt;
Nach Erstellung der Datenbankdatei hat sie eine Größe von null. Als Folge werden Datenbankcodierung, Seitengröße und andere persistente Parameter nicht in der Datenbank aufgezeichnet. Damit diese Parameter persistent werden, muss in der Anwendung mindestens eine Tabelle erstellt werden.&lt;br /&gt;
&lt;br /&gt;
===Verwenden einer SQLite-Datenbank im Arbeitsspeicher in einer {{Delphi}}-Anwendung===&lt;br /&gt;
&lt;br /&gt;
Die nächste SQLite-spezifische Funktion ist die Möglichkeit, mit [http://www.sqlite.org/inmemorydb.html reinen Arbeitsspeicherdatenbanken (EN)] zu arbeiten. Das bedeutet, dass keine Daten zum Speichern von Datenbankobjekten erstellt werden, sondern alles im Arbeitsspeicher verbleibt. Auf diese Weise profitieren Sie in einer {{Delphi}}-Anwendung von einer höheren Sicherheit, einer größeren Leistung und weniger Anforderungen für Zugriffsrechte in der Umgebung.&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie die folgenden Parameter, um eine SQLite-Datenbank im Arbeitsspeicher zu erstellen und zu öffnen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
DriverID=SQLite&lt;br /&gt;
Database=:memory:&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder lassen Sie den Parameter Database einfach leer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
DriverID=SQLite&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein FireDAC-Kunde hat eine SQLite-Datenbank auf einer freigegebenen Netzwerkressource gespeichert. Die Datenbank ist ein schreibgeschützter Produktkatalog mit vielen gespeicherten Produktattributen. Um die Leistung extrem zu steigern, hat der Kunde mit TFDSQLiteBackup die gesamte Datenbank in die Datenbank im Arbeitsspeicher verschoben. Der Beispielcode:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDConnection1.DriverName := &#039;SQLite&#039;;&lt;br /&gt;
FDConnection1.Open;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteBackup1.Database := &#039;\\srv\db\data.sdb&#039;;&lt;br /&gt;
FDSQLiteBackup1.DestDatabaseObj := FDConnection1.CliObj;&lt;br /&gt;
FDSQLiteBackup1.DestMode := smCreate;&lt;br /&gt;
FDSQLiteBackup1.Backup;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arbeiten mit Unicode und SQLite-Datenbanken===&lt;br /&gt;
&lt;br /&gt;
[[Unicode-Unterstützung (FireDAC)|FireDAC unterstützt Unicode]] von {{Delphi}} &amp;lt;f s=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt; (ab {{Delphi}} 2009) &amp;lt;f e=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt; vollständig. Für SQLite bedeutet das:&lt;br /&gt;
&lt;br /&gt;
* FireDAC richtet automatisch eine SQLite-Datenbank für den Austausch aller Metadaten in der UTF-16-Codierung ein, wenn {{Delphi}} &amp;lt;f s=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt; 2009 oder höher &amp;lt;f e=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt; verwendet wird. &amp;lt;f s=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt; In {{Delphi}} 2007 oder früher sind die Metadaten in ANSI codiert.&amp;lt;f e=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt;&lt;br /&gt;
* Die Daten werden so definiert und ausgetauscht, wie im Kapitel &amp;quot;Zuordnen von SQLite- zu FireDAC-Datentypen&amp;quot; beschrieben.&lt;br /&gt;
&lt;br /&gt;
===Verwenden von mehreren SQLite-Datenbanken in einer {{Delphi}}-Anwendung===&lt;br /&gt;
&lt;br /&gt;
SQLite ermöglicht die Verwendung mehrerer Datenbanken in einer einzelnen Verbindung. Eine im Parameter Database angegebene DB ist die Hauptdatenbank. Um weitere Datenbanken hinzuzufügen, muss in der {{Delphi}}-Anwendung die [http://www.sqlite.org/lang_attach.html ATTACH-Anweisung (EN)] verwendet werden. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDConnection1.ExecSQL(&#039;ATTACH &#039;&#039;c:\hr.sdb&#039;&#039; AS hr&#039;);&lt;br /&gt;
FDConnection1.ExecSQL(&#039;ATTACH &#039;&#039;c:\cust.sdb&#039;&#039; AS cust&#039;);&lt;br /&gt;
FDQuery1.Open(&#039;select * from &amp;quot;Orders&amp;quot; o &#039; +&lt;br /&gt;
  &#039;left join hr.&amp;quot;Employees&amp;quot; e on o.EmployeeID = e.EmployeeID &#039; +&lt;br /&gt;
  &#039;left join cust.&amp;quot;Customers&amp;quot; c on o.CustomerID = c.CustomerID&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; FireDAC interpretiert einen Datenbanknamen als Katalognamen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verwalten einer SQLite-Datenbank in einer {{Delphi}}-Anwendung===&lt;br /&gt;
&lt;br /&gt;
In einer guten {{Delphi}}-SQLite-Datenbankanwendung (und nicht nur dort) muss Folgendes berücksichtigt werden:&lt;br /&gt;
&lt;br /&gt;
* Die SQLite-Datenbank kann nach vielen &amp;quot;harten&amp;quot; Datensatzaktualisierungen oder -löschungen fragmentiert und nicht optimal sein. Durch Aufruf der Methode [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteValidate.Sweep|TFDSQLiteValidate.Sweep]] wird die Datenbank optimiert. Diese Methode entspricht den Anweisungen [http://www.sqlite.org/lang_vacuum.html VACUUM (EN)] und [http://www.sqlite.org/pragma.html#pragma_auto_vacuum PRAGMA auto_vacuum (EN)]. Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDSQLiteValidate1.Database := &#039;c:\db.sdb&#039;;&lt;br /&gt;
FDSQLiteValidate1.Sweep;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Durch die Optimierung von SQLite-Abfragen wird ein besserer Abfrageausführungsplan erstellt, wenn eine aktuelle Datenbankstatistik vorliegt. SQLite aktualisiert die Statistik nicht automatisch. Durch Aufruf der Methode [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteValidate.Analyze|TFDSQLiteValidate.Analyze]] wird die Statistik erfasst. Diese Methode verwendet die Anweisung [http://www.sqlite.org/lang_analyze.html ANALYZE (EN)]. Eine Anwendung kann die Statistik für die vollständige Datenbank erfassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDSQLiteValidate1.Database := &#039;c:\db.sdb&#039;;&lt;br /&gt;
FDSQLiteValidate1.Analyze;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die SQLite-Datenbank kann beschädigt oder nicht wohlgeformt werden. Verwenden Sie die Methode [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteValidate.CheckOnly|TFDSQLiteValidate.CheckOnly]], um die Integrität zu überprüfen. Um eine beschädigte SQLite-Datenbank zu reparieren, muss die {{Delphi}}-Anwendung sie aus einer Sicherung wiederherstellen. Die Methode CheckOnly verwendet die Ereignisbehandlungsroutine [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteValidate.OnProgress|OnProgress]], um über Probleme zu informieren. Diese Methode führt die Anweisung [http://www.sqlite.org/pragma.html#pragma_integrity_check PRAGMA integrity_check (EN)] aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.FDSQLiteValidate1Progress(ASender: TFDPhysDriverService; const AMessage: String);&lt;br /&gt;
begin&lt;br /&gt;
  Memo1.Lines.Add(AMessage);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteValidate1.Database := &#039;c:\db.sdb&#039;;&lt;br /&gt;
FDSQLiteValidate1.OnProgress := Form1Progress;&lt;br /&gt;
FDSQLiteValidate1.CheckOnly;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die SQLite-Datenbank muss regelmäßig gesichert werden, um Datenverluste zu vermeiden. Die Komponente [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteBackup|TFDSQLiteBackup]] führt eine Sicherung der Datenbank durch. Der einfachste Code zum Ausführen einer Sicherung lautet wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDSQLiteBackup1.Database := &#039;c:\db.sdb&#039;;&lt;br /&gt;
FDSQLiteBackup1.DestDatabase := &#039;c:\db.backup&#039;;&lt;br /&gt;
FDSQLiteBackup1.DestMode := smCreate;&lt;br /&gt;
FDSQLiteBackup1.Backup;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselte SQLite-Datenbanken==&lt;br /&gt;
&lt;br /&gt;
===Ansatz===&lt;br /&gt;
&lt;br /&gt;
Eine der spezifischen SQLite-Funktionen ist extrem schnelle, starke Verschlüsselung von Datenbanken. Damit wird der Inhalt der Datenbankdatei vertraulich und die Integritätssteuerung für die Datenbankdatei verstärkt.&lt;br /&gt;
&lt;br /&gt;
Das verschlüsselte Datenbankformat ist nicht mit anderen ähnlichen SQLite-Verschlüsselungserweiterungen kompatibel. Das bedeutet, dass Sie keine verschlüsselte Datenbank verwenden können, die mit Nicht-FireDAC-Bibliotheken verschlüsselt wurden. Wenn Sie eine derartig verschlüsselte Datenbank verwenden möchten, dann müssen Sie die Datenbank mit dem Originaltool entschlüsseln und mit FireDAC erneut verschlüsseln.&lt;br /&gt;
&lt;br /&gt;
Die Verschlüsselung wird im offiziell unterstützten SQLite-Ansatz bereitgestellt – benutzerdefinierter Codec-Code und Compilierung mit definiertem SQLITE_HAS_CODEC. Alle Verschlüsselungsroutinen sind in {{Delphi}} implementiert und im sqlite3-Code eingebettet. Daher wird die Verschlüsselung für folgende Elemente korrekt behandelt:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlite.org/lang_attach.html ATTACH (EN)].&lt;br /&gt;
* [http://www.sqlite.org/lang_vacuum.html VACUUM (EN)].&lt;br /&gt;
* Datenbankwiederherstellung.&lt;br /&gt;
* [http://www.sqlite.org/backup.html Datenbanksicherung (EN)].&lt;br /&gt;
&lt;br /&gt;
===Verschlüsselungsmodi===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Modus&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Verwendung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&#039;&#039;&#039;AES-NNN&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Die Algorithmen aes-NNN sind generische Zusammensetzungen von AES-CTR und AES-CBC-MAC. Diese Zusammensetzungen &#039;&#039;&#039;garantieren Vertraulichkeit und Integrität&#039;&#039;&#039;. Das bedeutet, dass nur Entitäten mit Zugriff auf das korrekte Passwort die Seiten der verschlüsselten Datenbank lesen und ändern können. Diese Algorithmen fügen der verschlüsselten Datenbank einen linearen Overhead von 32 Byte pro Seite hinzu.&lt;br /&gt;
&lt;br /&gt;
Mit diesem Algorithmus können Sie die bösartigsten Versuche aufdecken, Daten in die Datenbank einzufügen, aber solche Versuche werden nicht verhindert, und Sie erhalten keine Unterstützung für die Rückgängigmachung derartiger Änderungen. Es handelt sich um Grunde um eine Ergänzung häufiger Sicherungen, aber dieser Algorithmus ist besser als die meisten anderen Verschlüsselungsschemas für Datenbanken, da er eine Warnung ausgibt, wenn Sie Ziel eines Angriffs geworden sind und Sie Ihre Datenbank aus einer Sicherung wiederherstellen sollten. Bitte beachten Sie, das der aes-NNN-Algorithmus alleine weder die Löschung von ganzen Seiten am Ende der Datenbank (sondern nur Löschungen in der Mitte der Datenbank), noch Angriffe entdeckt, die darin bestehen, die Datenbank auf eine ältere Version zurückzusetzen, die mit demselben Passwort verschlüsselt ist.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Der AES-NNN-Algorithmus stellt eine optimale Vertraulichkeit und Integrität bereit. Daraus resultiert jedoch eine gewisse Leistungsminderung, die gegenüber anderen Verschlüsselungsmodi deutlich wahrnehmbar ist.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&#039;&#039;&#039;AES-CTR-NNN&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Die Algorithmen aes-ctr-NNN umfassen nur AES-CTR. Sie &#039;&#039;&#039;erkennen keine Änderungen an der Datenbank&#039;&#039;&#039;, aber Sie &#039;&#039;&#039;stellen Vertraulichkeit&#039;&#039;&#039; bei passiven Angriffen bereit. Solange ein Angreifer keinen Zugriff au Ihr Passwort hat und nicht versucht, die Datenbank zu ändern, um auszuprobieren, wie Ihre Anwendung auf die Änderungen reagiert, bleiben Ihre Daten so geheim, wie Ihre Anwendung es zulässt.&lt;br /&gt;
&lt;br /&gt;
Die Algorithmen schützen die Datenbankdatei nur gegen Angreifer, die nicht in der Lage sind, in Ihre FireDAC-Anwendung einzudringen, beispielsweise mit einem Debugger, und das Passwort so zu extrahieren. Wenn Sie Ihr Passwort in einer Konfigurationsdatei oder als eine Konstante in der Software selbst speichern, ist es sogar für nicht sehr versierte Angreifer ein Kinderspiel es zu finden und Ihre Sicherheit zu gefährden.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Der AES-CTR-NNN-Algorithmus stellt eine optimale Vertraulichkeit, aber keine Integrität bereit. Damit erzielen Sie eine bessere Leistung.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |&#039;&#039;&#039;AEC-ECB-NNN&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Die Algorithmen aes-ecb-NNN umfassen nur AES-ECB. Sie &#039;&#039;&#039;erkennen keine Änderungen an der Datenbank&#039;&#039;&#039; und &#039;&#039;&#039;stellen keine Vertraulichkeit&#039;&#039;&#039; bei passiven Angriffen bereit, im Gegensatz zu AES-NNN und AES-CTR-NNN.&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Der Algorithmus AES-ECB-NNN stellt eine vergleichsweise schwache Vertraulichkeit und keine Integrität bereit. Er liefert jedoch im Vergleich mit anderen Verschlüsselungsmodi die beste Leistung.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NNN ist die Schlüsselgröße; 128, 192 oder 256&amp;amp;nbsp;Bit.&lt;br /&gt;
&lt;br /&gt;
===Konfigurieren der Verschlüsselung===&lt;br /&gt;
&lt;br /&gt;
Die Verschlüsselung kann durch Folgendes gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
* durch die Verbindungsdefinitionsparameter Encrypt, NewPassword und Password.&lt;br /&gt;
* durch die Dienstkomponente TFDSQLiteSecurity.&lt;br /&gt;
&lt;br /&gt;
Die password-Verbindungsdefinitionsparameter können die folgende Form haben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
[aes-128 | aes-192 | aes-256 | aes-ctr-128 | aes-ctr-192 | aes-ctr-256 |&lt;br /&gt;
 aes-ecb-128 | aes-ecb-192 | aes-ecb-256:] password&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;aes-XXX-NNN&amp;quot;: ist ein optionaler Präfix, der den zu verwendenden Verschlüsselungsalgorithmus steuert. Wenn er nicht angegeben ist, dann wird Folgendes verwendet:&lt;br /&gt;
&lt;br /&gt;
* ein Algorithmus, der im Parameter &#039;&#039;&#039;Encrypt&#039;&#039;&#039; angegeben ist&lt;br /&gt;
* &#039;&#039;&#039;aes-256&#039;&#039;&#039;, wenn nichts angegeben ist&lt;br /&gt;
&lt;br /&gt;
FireDAC unterstützt Verschlüsselungsoperationen:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Operation&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Verwendung von Parametern&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Verwendung von TFDSQLiteSecurity&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Öffnen einer verschlüsselten Datenbank&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Password=xxxx&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | ---&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Verschlüsseln einer nicht verschlüsselten Datenbank&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | NewPassword=xxxx&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | FDSQLiteSecurity1.Database&amp;amp;nbsp;:= &#039;...&#039;;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteSecurity1.Password&amp;amp;nbsp;:= &#039;xxxx&#039;;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteSecurity1.SetPassword;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Ändern des Passworts einer verschlüsselten Datenbank&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Password=xxxx&lt;br /&gt;
&lt;br /&gt;
NewPassword=yyyy &lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | FDSQLiteSecurity1.Database&amp;amp;nbsp;:= &#039;...&#039;;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteSecurity1.Password&amp;amp;nbsp;:= &#039;xxxx&#039;;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteSecurity1.ToPassword&amp;amp;nbsp;:= &#039;yyyy&#039;;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteSecurity1.ChangePassword;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Entschlüsseln einer verschlüsselten Datenbank&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Password=xxxx&lt;br /&gt;
&lt;br /&gt;
NewPassword= &lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | FDSQLiteSecurity1.Database&amp;amp;nbsp;:= &#039;...&#039;;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteSecurity1.Password&amp;amp;nbsp;:= &#039;xxxx&#039;;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteSecurity1.RemovePassword;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Überprüfen des Verschlüsselungsstatus einer Datenbank&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | ---&lt;br /&gt;
&lt;br /&gt;
NewPassword= &lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | FDSQLiteSecurity1.Database&amp;amp;nbsp;:= &#039;...&#039;;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteSecurity1.Password&amp;amp;nbsp;:= &#039;xxxx&#039;;&lt;br /&gt;
&lt;br /&gt;
ShowMessage(FDSQLiteSecurity1.CheckEncryption);&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SQL-Erweiterung===&lt;br /&gt;
&lt;br /&gt;
Die Anweisung ATTACH hat eine Erweiterung. Die vollständige Syntax von ATTACH lautet nun:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
ATTACH [DATABASE] &#039;filename&#039; [AS name] [KEY &#039;password&#039;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn KEY weggelassen wird, dann wird der Passwortwert von der Hauptdatenbank geerbt. Um ein leeres Passwort zum Anfügen einer nicht verschlüsselten Datenbank anzugeben, verwenden Sie Code wie den folgenden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
ATTACH &#039;D:\tmp\test.db&#039; AS tst KEY &#039;&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SQLite-Datentypen==&lt;br /&gt;
&lt;br /&gt;
===Zuordnen von SQLite- zu FireDAC-Datentypen===&lt;br /&gt;
&lt;br /&gt;
SQLite verwendet ein &amp;quot;typenloses&amp;quot; [http://www.sqlite.org/datatype3.html Datentypsystem (EN)]. Das bedeutet, dass Sie praktisch jeden beliebigen Bezeichner als Datentypname einer Spalte verwenden können. Beispielsweise funktioniert auch &amp;quot;{{Delphi}}&amp;quot; und entspricht dem String-Datentyp. Damit der SQLite-Ansatz kompatibler zu anderen DBMSs und {{Delphi}}, aber auch einfacher für {{Delphi}}-Anwendungsentwickler wird, erkennt FireDAC die in der folgenden Tabelle aufgeführten Datentypnamen:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Typname&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | ROWID | _ROWID_ | OID&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtInt64, Attrs = [caSearchable, caAllowNull, caROWID]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | BIT | BOOL | BOOLEAN | LOGICAL | YESNO&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtBoolean&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | TINYINT | SHORTINT | INT8 [UNSIGNED]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtSByte / dtByte&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | BYTE | UINT8&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtByte&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | SMALLINT | INT16 [UNSIGNED]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtInt16 / dtUInt16&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | WORD | UINT16 | YEAR&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtUInt16&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | MEDIUMINT | INTEGER | INT | INT32 [UNSIGNED]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtInt32 / dtUInt32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | LONGWORD | UINT32&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtUInt32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | BIGINT | INT64 | COUNTER | AUTOINCREMENT | IDENTITY [UNSIGNED]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtInt64 / dtUInt64&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | LONGLONGWORD | UINT64&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtUInt64&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | REAL | FLOAT | DOUBLE&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtDouble&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | SINGLE [PRECISION] [(P, S)]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtSingle / dtBCD / dtFmtBCD&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | DECIMAL | DEC | NUMERIC | NUMBER [UNSIGNED] [(P, S)]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |dtSByte / dtInt16 / dtInt32 / dtInt64&lt;br /&gt;
&lt;br /&gt;
dtByte / dtUInt16 / dtUInt32 / dtUInt64&lt;br /&gt;
&lt;br /&gt;
dtBCD / dtFmtBCD&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | MONEY | SMALLMONEY | CURRENCY | FINANCIAL [(P, S)]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtCurrency&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | DATE | SMALLDATE&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtDate&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | DATETIME | SMALLDATETIME&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtDateTime&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | TIMESTAMP&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtDateTimeStamp&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | TIME&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtTime&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | CHAR | CHARACTER [(L)]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtAnsiString, Len = L, Attrs = [caFixedLen]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | VARCHAR | VARCHAR2 | TYNITEXT | CHARACTER VARYING | CHAR VARYING [(L)]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtAnsiString, Len = L&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | NCHAR | NATIONAL CHAR | NATIONAL CHARACTER [(L)]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtWideString, Len = L, Attrs = [caFixedLen]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | NVARCHAR | NVARCHAR2 | NATIONAL CHAR VARYING | STRING [(L)]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtWideString, Len = L&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | RAW | TYNIBLOB | VARBINARY | BINARY | BINARY VARYING [(L)]&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtByteString, Len = L&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |  BLOB | MEDIUMBLOB | IMAGE | LONGBLOB | LONG BINARY | LONG RAW | LONGVARBINARY | GENERAL | OLEOBJECT | TINYBLOB&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtBlob&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | MEDIUMTEXT | LONGTEXT | CLOB | MEMO | NOTE | LONG | LONG TEXT | LONGCHAR | LONGVARCHAR | TINYTEXT&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtMemo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | TEXT | NTEXT | WTEXT | NCLOB | NMEMO | LONG NTEXT | LONG WTEXT | NATIONAL TEXT | LONGWCHAR | LONGWVARCHAR | HTML&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtWideMemo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | XMLDATA | XMLTYPE | XML&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtXML&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | GUID | UNIQUEIDENTIFIER&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtGUID&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Andere Datentypen&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | dtWideString&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Mit SQLite funktioniert FormatOptions.StrsTrim für alle String-Datentypen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Spezielle SQLite-Datentypen===&lt;br /&gt;
&lt;br /&gt;
Um einer Tabelle eine [http://www.sqlite.org/autoinc.html Auto-Inkrementierungsspalte (EN)] hinzuzufügen, definieren Sie eine Spalte als INTEGER PRIMARY KEY AUTOINCREMENT. Dieser Typ wird zu dtInt32, Attrs = [caAutoInc] zugeordnet. Weitere Einzelheiten über die Behandlung von Auto-Inkrementierungsspalten finden Sie unter [[Auto-Inkrementierungsfelder (FireDAC)|Auto-Inkrementierungsfelder]].&lt;br /&gt;
&lt;br /&gt;
Die Spalten mit den Typnamen ROWID, _ROWID_ oder OID werden als [http://www.sqlite.org/lang_createtable.html#rowid Kennzeichnungsspalten für Zeilen (EN)] betrachtet. Diese Typen werden zu dtInt64, Attrs = [caSearchable, caAllowNull, caROWID] zugeordnet. Weitere Einzelheiten über die Behandlung von Kennzeichnungsspalten für Zeilen finden Sie unter [[Eindeutige Kennzeichnungsfelder (FireDAC)|Eindeutige Kennzeichnungsfelder]]. SQLite ROWID bietet den schnellsten Weg zum Zugreifen auf eine bestimmte Zeile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM Orders WHERE ROWID = :RID&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Anpassen der FireDAC-Zuordnung===&lt;br /&gt;
&lt;br /&gt;
Bestimmte [[Herstellen einer Verbindung zu SQLite-Datenbanken (FireDAC)|SQLite-Treiberparameter]] ermöglichen, dass in der {{Delphi}}-Anwendung die Datendarstellung geändert wird:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Parameter&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | StringFormat = Choose | Unicode&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Bei Unicode werden alle dtAnsiString- und dtMemo-Daten für einen Client als dtWideString- und dtWideMemo-Daten dargestellt.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | GUIDFormat = String | Binary&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Bei Binary werden dtGUID-Daten in einer Datenbank als binäre TGUID-Werte gespeichert. Bei String werden die Daten als String im Format {xxxxxxx} dargestellt. Für Binary ist weniger Speicherplatz in der DB erforderlich, und String kann einfacher gelesen werden.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | DateTimeFormat = String | Binary&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Bei Binary werden die dtDate-, dtTime-, dtDateTime-Daten in einer Datenbank als double-Wert im Julianischen Datumsformat gespeichert. Bei String werden die Daten als Zeichen-String im Format &amp;quot;jjjj-mm-tt hh24:mi:ss&amp;quot; gespeichert. Für Binary ist weniger Speicherplatz in der DB erforderlich, und String kann einfacher gelesen werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Wenn die Datenbank nicht leer ist und GUIDFormat oder DateTimeFormat geändert wird, können Fehler auftreten, weil FireDAC möglicherweise die gespeicherten Werte nicht lesen und analysieren kann.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Ausdrücken in SELECT-Listen vermeidet SQLite Typnamensinformationen. Wenn die Ergebnismenge nicht leer ist, verwendet FireDAC die Wertdatentypen aus dem ersten Datensatz. Wenn die Ergebnismenge leer ist, beschreibt FireDAC diese Spalten als dtWideString. Um den Spaltendatentyp explizit anzugeben, hängen Sie &amp;quot;::&amp;amp;lt;Typname&amp;amp;gt;&amp;quot; an den Spaltenalias an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
SELECT count(*) as &amp;quot;cnt::INT&amp;quot; FROM mytab&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn für die {{Delphi}}-Anwendung die native SQLite-Datentyprepräsentation erforderlich ist, dann verwendet FireDAC Zuordnungsregeln. Zum Beispiel: Zuordnen von TEXT-Spalten zu dtAnsiString und von INT-Spalten zu dtInt64:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
with FDQuery1.FormatOptions do begin&lt;br /&gt;
  OwnMapRules := True;&lt;br /&gt;
  with MapRules do begin&lt;br /&gt;
    SourceDataType := dtMemo;&lt;br /&gt;
    TargetDataType := dtAnsiString;&lt;br /&gt;
  end;&lt;br /&gt;
  with MapRules do begin&lt;br /&gt;
    SourceDataType := dtInt32;&lt;br /&gt;
    TargetDataType := dtInt64;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zahlen mit hoher Genauigkeit===&lt;br /&gt;
&lt;br /&gt;
Aufgrund des [http://www.sqlite.org/datatype3.html SQLite-Typsystems (EN)] wird von langen Zahlen (&amp;amp;gt;= 20 Stellen) angenommen, dass sie eine Affinität zum Typ REAL haben. Deshalb wird ein Wert auf einen REAL-Typ (double-{{Delphi}}-Typ) mit einer Genauigkeit von 15 Stellen gerundet. Um dieses Problem zu lösen, sollte in einer Anwendung TEXT oder ein ähnlicher Datentyp und eine Zuordnungsregel verwendet werden, mit der dtAnsiString in dtFmtBCD oder einen ähnlichen Datentyp umgewandelt wird. Hierbei handelt es sich nicht um ein FireDAC-Problem, und gegenwärtig kann es nicht anders gelöst werden.&lt;br /&gt;
&lt;br /&gt;
==SQL-Anweisungen in SQLite==&lt;br /&gt;
&lt;br /&gt;
===SQL-Dialekt===&lt;br /&gt;
&lt;br /&gt;
SQLite ist nah an ANSI SQL 92 angelehnt, trotzdem werden einige Funktionen und Anweisungen nicht unterstützt, aber andere leistungsstarke wurden hinzugefügt. Weitere Informationen über den SQL.Dialekt von SQLite finden Sie unter:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlite.org/lang.html SQL As Understood By SQLite (EN)] (SQL in SQLite).&lt;br /&gt;
* [http://www.sqlite.org/omitted.html SQLite / ANSI SQL Commands and Features Not Supported (EN)] (Nicht unterstützte SQLite/ANSI-SQL-Anweisungen und Funktionen).&lt;br /&gt;
&lt;br /&gt;
===SQLite-SQL-Anweisungsstapel===&lt;br /&gt;
&lt;br /&gt;
Der FireDAC SQLite-Treiber unterstützt die [[Anweisungsstapel (FireDAC)|SQL-Anweisungsstapel]]. SQL-Anweisungen müssen durch &amp;quot;;&amp;quot; getrennt werden. In SQLite können Sie beliebige Anweisungen, einschließlich DDL und DML, in einem Stapel zusammen verwenden. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
{{#tag:source|&lt;br /&gt;
with FDQuery1.SQL do begin&lt;br /&gt;
&lt;br /&gt;
  SQL.Clear;&lt;br /&gt;
  SQL.Add(&#039;create table dbms (id integer, name varchar(20));&#039;);&lt;br /&gt;
  SQL.Add(&#039;insert into tab values (1, &#039;&#039;sqlite&#039;&#039;);&#039;);&lt;br /&gt;
  SQL.Add(&#039;insert into tab values (2, &#039;&#039;mysql&#039;&#039;);&#039;);&lt;br /&gt;
  SQL.Add(&#039;insert into tab values (3, &#039;&#039;firebird&#039;&#039;);&#039;);&lt;br /&gt;
  SQL.Add(&#039;create table langs (id integer, name varchar(20));&#039;);&lt;br /&gt;
  SQL.Add(&#039;insert into tab values (1, &#039;&#039;{{lc:Delphi}}&#039;&#039;);&#039;);&lt;br /&gt;
  SQL.Add(&#039;insert into tab values (2, &#039;&#039;c&#039;&#039;);&#039;);&lt;br /&gt;
  SQL.Add(&#039;insert into tab values (3, &#039;&#039;c++&#039;&#039;);&#039;);&lt;br /&gt;
  SQL.Add(&#039;select * from dbms;&#039;);&lt;br /&gt;
  SQL.Add(&#039;select * from langs;&#039;);&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
FDQuery1.Open;&lt;br /&gt;
// process here the DBMS list&lt;br /&gt;
FDQuery1.NextRecordSet;&lt;br /&gt;
// process here the programming languages list&lt;br /&gt;
|lang=delphi}}&lt;br /&gt;
&lt;br /&gt;
===SQL-Skriptdialekt===&lt;br /&gt;
&lt;br /&gt;
[[lib_de:FireDAC.Comp.Script.TFDScript|TFDScript]] von FireDAC unterstützt keine Skriptsteuerungsanweisungen der SQLite-Syntax, die mit &amp;quot;.&amp;quot; beginnen.&lt;br /&gt;
&lt;br /&gt;
===Array DML===&lt;br /&gt;
&lt;br /&gt;
Ab v 3.7.11 unterstützt SQLite die [http://www.sqlite.org/lang_insert.html Anweisung INSERT (EN)] mit mehreren VALUES. FireDAC implementiert mit diesem Feature [[Array DML (FireDAC)|Array DML]], wenn &amp;quot;Params.BindMode = pbByNumber&amp;quot;. Ansonsten emuliert FireDAC Array DML. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
// here ADQuery1.Params collection is filled by 3 parameters&lt;br /&gt;
FDQuery1.SQL.Text := &#039;insert into MyTab values (:p1, :p2, :p3)&#039;;&lt;br /&gt;
// set &amp;quot;by number&amp;quot; parameter binding mode&lt;br /&gt;
FDQuery1.Params.BindMode := pbByNumber;&lt;br /&gt;
FDQuery1.Params.ArraySize := 100;&lt;br /&gt;
for i := 0 to FDQuery1.Params.ArraySize - 1 do begin&lt;br /&gt;
  FDQuery1.Params[0].AsIntegers[i] := i;&lt;br /&gt;
  FDQuery1.Params[1].AsStrings[i] := &#039;qwe&#039;;&lt;br /&gt;
  FDQuery1.Params[2].Clear(i);&lt;br /&gt;
end;&lt;br /&gt;
FDQuery1.Execute(FDQuery1.Params.ArraySize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Transaktionen, Sperren, Threads und Cursors in SQLite==&lt;br /&gt;
&lt;br /&gt;
===Sperren und gleichzeitige Aktualisierungen===&lt;br /&gt;
&lt;br /&gt;
Nähere Informationen finden Sie in den Original-SQLite-Artikeln:&lt;br /&gt;
&lt;br /&gt;
* [http://www.sqlite.org/lang_transaction.html BEGIN TRANSACTION (EN)]&lt;br /&gt;
* [http://www.sqlite.org/sharedcache.html SQLite Shared-Cache Mode  (EN)]&lt;br /&gt;
* [http://www.sqlite.org/cvstrac/wiki?p=CorruptionFollowingBusyError Corruption Following Busy  (EN)]&lt;br /&gt;
&lt;br /&gt;
SQLite als Dateiserver-DBMS sperrt die Datenbanktabellen bei Aktualisierungen. Die folgenden Einstellungen wirken sich auf den gleichzeitigen Zugriff aus:&lt;br /&gt;
&lt;br /&gt;
* Setzen Sie den Verbindungsparameter &#039;&#039;&#039;SharedCache&#039;&#039;&#039; auf False, wenn mehrere Threads dieselbe Datenbank aktualisieren. Dadurch werden mögliche Deadlocks vermieden.&lt;br /&gt;
* Setzen Sie &#039;&#039;&#039;LockingMode&#039;&#039;&#039; auf Normal, um den gleichzeitigen Zugriff auf die Tabellen zu ermöglichen, wenn mehrere Prozesse oder Threads dieselben Datenbanktabellen aktualisieren. Setzen Sie außerdem den Verbindungsparameter &#039;&#039;&#039;Synchronous&#039;&#039;&#039; auf Full oder Normal. Auf diese Weise aktualisiert SQLite eine Datenbankdatei direkt nach dem Abschluss der Transaktion und ermöglicht anderen Verbindungen die Kenntnisnahme über Aktualisierungen auf einer vorhersehbaren Basis.&lt;br /&gt;
* Setzen Sie UpdateOptions.LockWait auf True und &#039;&#039;&#039;BusyTimeout&#039;&#039;&#039; auf einen höheren Wert, um Sperrkonfikte zwischen Verbindungen zu vermeiden.&lt;br /&gt;
* Setzen Sie TADConnection.TxOptions.Isolation auf xiSnapshot oder xiSerializible, um Sperrkonfikte zwischen länger laufenden Aktualisierungstransaktionen zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
===Transaktionen und Isolationsmodi===&lt;br /&gt;
&lt;br /&gt;
SQLite unterstützt normale [[Verwalten von Transaktionen (FireDAC)|Transaktionen]] und verschachtelte Transaktionen (Prüfpunkte). Mehrere Transaktionen werden nicht unterstützt. Im Folgenden finden Sie eine Liste der von SQLite unterstützten Isolationsmodi:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Modus&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Entspricht&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | xiDirtyRead&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |[http://www.sqlite.org/pragma.html#pragma_read_uncommitted PRAGMA read_uncommitted (EN)] = 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | xiReadCommitted&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; |[http://www.sqlite.org/lang_transaction.html BEGIN TRANSACTION DEFERRED (EN)]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | xiRepeatableRead&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | Siehe xiReadCommitted.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | xiSnapshot&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | BEGIN TRANSACTION IMMEDIATE&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | xiSerializible&lt;br /&gt;
| style=&amp;quot;text-align: left; vertical-align: top;&amp;quot; | BEGIN TRANSACTION EXCLUSIVE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Transaktionen und DML-Anweisungen===&lt;br /&gt;
&lt;br /&gt;
Durch das Einfügen von Schreib-Anweisungen in eine Transaktion kann die Leistung von SQLite erheblich gesteigert werden. Dies gilt besonders bei großen Datenänderungen. Dies kann auch für das FireDAC-Feature [[Array DML (FireDAC)|Array DML]] angewendet werden. Fügen Sie daher den Code für die Datenänderung in eine Transaktion ein, um die beste Leistung zu erzielen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDConnection1.StartTransaction;&lt;br /&gt;
try&lt;br /&gt;
  FDQuery1.SQL.Text := &#039;insert into tab values (:id, :name)&#039;;&lt;br /&gt;
  FDQuery1.Params.ArraySize := 10;&lt;br /&gt;
  for i := 0 to FDQuery1.Params.ArraySize - 1 do begin&lt;br /&gt;
    FDQuery1.Params[0].AsIntegers[i] := i;&lt;br /&gt;
    FDQuery1.Params[0].AsStrings[i] := &#039;name&#039; + IntTostr(i);&lt;br /&gt;
  end;&lt;br /&gt;
  FDQuery1.Execute(FDQuery1.Params.ArraySize, 0);&lt;br /&gt;
  FDConnection1.Commit;&lt;br /&gt;
except&lt;br /&gt;
  FDConnection1.Rollback;&lt;br /&gt;
  raise;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Transaktionen und Cursors===&lt;br /&gt;
&lt;br /&gt;
In SQLite ist das Zurücksetzen einer Transaktion nicht möglich, wenn Anweisungen mit Ergebnismengen vorhanden sind, die noch nicht abgerufen wurden. Um dies zu vermeiden, ruft FireDAC beim Aufruf der Methode Rollback alle verbleibenden Datensätze aus einer Ergebnismenge ab. Siehe [[lib_de:FireDAC.Stan.Option.TFDFetchOptions.AutoFetchAll|FetchOptions.AutoFetchAll]].&lt;br /&gt;
&lt;br /&gt;
==Erweitern der SQLite-Engine==&lt;br /&gt;
&lt;br /&gt;
===Benutzerdefinierte Funktionen===&lt;br /&gt;
&lt;br /&gt;
SQLite unterstützt das Konzept der gespeicherten Prozeduren oder Funktionen nicht, da Sie die Funktionalität der Engine anhand der Host-Sprache erweitern können. SQLite ermöglicht die Registrierung der Host-Sprachfunktionen in der SQLite-Engine und deren Verwendung in SQL-Anweisungen. FireDAC vereinfacht dies durch Einführung der Komponente [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteFunction|TFDSQLiteFunction]].&lt;br /&gt;
&lt;br /&gt;
Zum Erstellen einer Funktion muss der Entwickler [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteFunction.FunctionName|FunctionName]], [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteFunction.ArgumentsCount|ArgumentsCount]] setzen und die Ereignisbehandlungsroutine [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteFunction.OnCalculate|OnCalculate]] erstellen. Durch Setzen von [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteFunction.Active|Active]] auf True wird die benutzerdefinierte Funktion bei der SQLite-Engine registriert. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.FDSQLiteFunction1Calculate(AFunc: TSQLiteFunction;&lt;br /&gt;
  AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  AOutput.AsInteger := AInputs[0].AsInteger * AInputs[1].AsInteger;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
FDSQLiteFunction1.DriverLink := FDPhysSQLiteDriverLink1;&lt;br /&gt;
FDSQLiteFunction1.FunctionName := &#039;XmY&#039;;&lt;br /&gt;
FDSQLiteFunction1.ArgumentsCount := 2;&lt;br /&gt;
FDSQLiteFunction1.OnCalculate := FDSQLiteFunction1Calculate;&lt;br /&gt;
FDSQLiteFunction1.Active := True;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Verwendung dieser Funktion:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDQuery1.Open(&#039;select RegionID, XmY(RegionID, 10) from &amp;quot;Region&amp;quot;&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Funktion kann die FireDAC-Methoden zum Abfragen einer Datenbank aufrufen. Sie müssen denselben [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteFunction.FunctionName|FunctionName]] mit der Standard- oder einer anderen Anzahl an Argumenten angeben, um eine benutzerdefinierte Funktion mit der Standard- oder einer anderen Anzahl an Argumenten zu erstellen. Damit wird in der SQLite-Engine eine überladene Funktion registriert.&lt;br /&gt;
&lt;br /&gt;
Im Ordner &amp;quot;FireDAC\Samples\DBMS Specific\SQLite\UserFunc&amp;quot; finden Sie das obige und andere Funktionsbeispiele.&lt;br /&gt;
&lt;br /&gt;
FireDAC implementiert und installiert für eine SQLite-Verbindung rund [[Erstellen von Ausdrücken (FireDAC)|50&amp;amp;nbsp;Funktionen]], die in der Praxis für viele DBMSs Standard sind und von der lokalen FireDAC-Ausdrucks-Engine implementiert werden. Beachten Sie bitte, dass Sie beim Einrichten einer SQLite-Verbindung zur Laufzeit die Unit FireDAC.Stan.ExprFuncs in die &amp;quot;uses&amp;quot;-Klausel aufnehmen müssen, sonst wird eine Exception ausgelöst:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
[FireDAC][Phys][SQLite] ERROR: no such function: UCASE.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstellen Sie ein benutzerdefiniertes Entwurfszeit-Package mit einem Datenmodul, legen Sie die Komponenten in diesem Modul ab, und konfigurieren Sie es ordnungsgemäß, damit zur Entwurfszeit auf benutzerdefinierte Funktionen zugegriffen werden kann. Erstellen Sie das Modul im &amp;quot;initialization&amp;quot;-Abschnitt der Modul-Unit, und geben Sie es im &amp;quot;finalization&amp;quot;-Abschnitt frei. Installieren Sie danach Ihr Package in der {{Delphi}}-IDE.&lt;br /&gt;
&lt;br /&gt;
Siehe auch das Video von [http://www.youtube.com/watch?v=2H2r4SIF53c Ron Grove (EN)].&lt;br /&gt;
&lt;br /&gt;
===Benutzerdefinierte Sortierungen===&lt;br /&gt;
&lt;br /&gt;
SQLite speichert und behandelt alle Zeichendaten abhängig vom Verbindungsparameter OpenMode entweder in UTF8 oder UTF16. Wenn SQLite Zeichendaten vergleichen oder sortieren muss, müssen die dafür zu verwendenden Regeln bekannt sein. Diese Regeln ergeben die Sortierung.&lt;br /&gt;
&lt;br /&gt;
SQLite verfügt über mehrere integrierte Sortierungen. Keine davon erzeugt eine korrekte Sortierfolge für deutsche, kyrillische, arabische und andere Ausdrücke. Sie müssen die Komponente [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteCollation|TFDSQLiteCollation]] zum Erstellen einer eigenen Sortierung verwenden. Legen Sie [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteCollation.CollationName|CollationName]], [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteCollation.Flags|Flags]] und [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteCollation.LocaleName|LocaleName]] fest, und setzen Sie dann [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteCollation.Active|Active]] auf True, um die Sortierung bei der SQLite-Engine zu registrieren. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDSQLiteCollation1.DriverLink := FDPhysSQLiteDriverLink1;&lt;br /&gt;
FDSQLiteCollation1.CollationName := &#039;UTF16NoCase&#039;;&lt;br /&gt;
FDSQLiteCollation1.Flags := [sfIgnoreCase];&lt;br /&gt;
FDSQLiteCollation1.Active := True;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die obige Komponentenkonfiguration mit dem Standardwert [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteCollation.CollationKind|CollationKind]]=scCompareString implementiert eine Unicode-Standardsortierung, die Groß-/Kleinschreibung berücksichtigt. Die Anwendung kann Sortierungen mit [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteCollation.CollationKind|CollationKind]]=scCustomUTF16 oder scCustomUTF8 und der Implementierung der Ereignisbehandlungsroutine [[lib_de:FireDAC.Phys.SQLite.TFDSQLiteCollation.OnCompare|OnCompare]] implementieren. Sie können diese Sortierung folgendermaßen verwenden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM &amp;quot;Employees&amp;quot; ORDER BY LastName COLLATE UTF16NoCase&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um eine Standardsortierung für eine Spalte festzulegen, können Sie folgenden Code verwenden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS test_col (f1 VARCHAR(10) COLLATE UTF16NoCase)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Wenn es keine Möglichkeit gibt, die Standardsortierung für eine Verbindung, eine Datenbank oder eine Tabelle festzulegen. Im Ordner &amp;quot;FireDAC\Samples\DBMS Specific\SQLite\UserCollation&amp;quot; finden Sie die obigen Sortierbeispiele.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keine eigenen Sortierungen verwenden, dann verwendet SQLite standardmäßig die binäre Sortierreihenfolge. Für den Modus [[Durchsuchen von Tabellen (FireDAC)|Live-Datenfenster]] von [[lib_de:FireDAC.Comp.Client.TFDTable|TFDTable]] ist es wichtig, dass die Client-Seite und die Datenbank dieselbe Sortierreihenfolge verwendet. Setzen Sie [[lib_de:FireDAC.Stan.Option.TFDFormatOptions.SortLocale|FormatOptions.SortLocale]] auf 0, um die binäre Sortierreihenfolge auf der Client-Seite zu aktivieren.&lt;br /&gt;
&lt;br /&gt;
===Datenbankereignisse===&lt;br /&gt;
&lt;br /&gt;
[[Datenbankwarnungen (FireDAC)|FireDAC unterstützt Benachrichtigungen]] einer {{Delphi}}-Anwendung von einem SQLite-Datenbank-Trigger über bestimmte Ereignisse, z.&amp;amp;nbsp;B. eine Datenänderung. Dazu verwendet FireDAC ein ähnliches Vorgehen wie Firebird und registriert die benutzerdefinierte Funktion POST_EVENT. Gehen Sie folgendermaßen vor, um diese Funktion aus einen Trigger aufzurufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TRIGGER update_orders UPDATE ON &amp;quot;Orders&amp;quot;&lt;br /&gt;
BEGIN&lt;br /&gt;
  SELECT POST_EVENT(&#039;Orders&#039;);&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Empfangen einer Ereignisbenachrichtigung verwendet die {{Delphi}}-Anwendung die Komponente [[lib_de:FireDAC.Comp.Client.TFDEventAlerter|TFDEventAlerter]]. Zum Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
FDEventAlerter1.Names.Text := &#039;Orders&#039;;&lt;br /&gt;
FDEventAlerter1.Options.Synchronize := True;&lt;br /&gt;
FDEventAlerter1.OnAlter := DoAlert;&lt;br /&gt;
FDEventAlerter1.Active := True;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.DoAlert(ASender: TFDCustomEventAlerter;&lt;br /&gt;
  const AEventName: String; const AArgument: Variant);&lt;br /&gt;
begin&lt;br /&gt;
  if CompareText(AEventName, &#039;Orders&#039;) = 0 then&lt;br /&gt;
    qryOrders.Refresh;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Benutzerdefinierte Datenquellen===&lt;br /&gt;
&lt;br /&gt;
Die [[Local SQL (FireDAC)|Local SQL]]-Engine ermöglicht die Verwendung von TDataSet-Nachkommen in SQL-Abfragen. FireDAC implementiert Local SQL mittels der [http://www.sqlite.org/vtab.html SQLite-API für virtuelle Tabellen (EN)].&lt;br /&gt;
&lt;br /&gt;
==Fortgeschrittene SQLite-Techniken==&lt;br /&gt;
&lt;br /&gt;
===Einbeziehen von Datenbankaktualisierungen===&lt;br /&gt;
&lt;br /&gt;
SQLite stellt eine spezielle API bereit, die die [http://www.sqlite.org/c3ref/update_hook.html Überwachung aller Datenbankaktualisierungen (EN)] ermöglicht. Damit können beispielsweise alle Aktualisierungen einer DB protokolliert werden. Zur Verwendung dieser API muss in einer {{Delphi}}-Anwendung die Ereignisbehandlungsroutine OnUpdate des Objekts TSQLiteDatabase, dem Objekt zum Kapseln der Datenbankverbindung, festgelegt werden. Beziehen Sie dieses Ereignis nach dem Öffnen der Datenbankverbindung ein. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.DoUpdate(ADB: TSQLiteDatabase; AOper: Integer; const ADatabase, ATable: String; ARowid: sqlite3_int64);&lt;br /&gt;
begin&lt;br /&gt;
  Memo1.Lines.Add(Format(&#039;%d - %s - %s - %u&#039;, [AOper, ADatabase, ATable, ARowid]));&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
FDConnection1.Connected := True;&lt;br /&gt;
TSQLiteDatabase(FDConnection1.ConnectionIntf.CliObj).OnUpdate := DoUpdate;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie finden dieses Beispiel im Ordner &amp;quot;FireDAC\Samples\DBMS Specific\SQLite\OnUpdate&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Steuern von Datenbankzugriffsrechten===&lt;br /&gt;
&lt;br /&gt;
SQLite ist ein eingebettetes DBMS. Es arbeitet mit einem Einzelbenutzer-DBMS und benötigt keine Konzepte wie &amp;quot;Benutzer&amp;quot;, &amp;quot;Zugriffsrechte&amp;quot; usw. Trotzdem kann eine Steuerung der Zugriffsrechte für manche Anwendungen sinnvoll sein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* Eine Anwendung kann Rechte abhängig von einer Endbenutzerlizenz einschränken. Eine Demolizenz beinhaltet weniger Möglichkeiten, eine Volllizenz bietet alle Möglichkeiten.&lt;br /&gt;
* Mehrschichtige Datenzugriffs-Frameworks können eigene Konzepte verwenden und Datenzugriffsrechte durch ein generisches Vorgehen steuern.&lt;br /&gt;
&lt;br /&gt;
Auch dafür bietet SQLite ein spezielles Feature, das die [http://www.sqlite.org/c3ref/set_authorizer.html Autorisierung von SQL-Anweisungen zulässt oder nicht  (EN)]. Zur Verwendung dieser API muss in einer {{Delphi}}-Anwendung die Ereignisbehandlungsroutine OnAutorize des Objekts TSQLiteDatabase, dem Objekt zum Kapseln der Datenbankverbindung, festgelegt werden. Beziehen Sie dieses Ereignis nach dem Öffnen der Datenbankverbindung ein. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.DoAuthorize(ADB: TSQLiteDatabase; ACode: Integer; const AArg1, AArg2, AArg3, AArg4: String; var AResult: Integer);&lt;br /&gt;
begin&lt;br /&gt;
  Memo1.Lines.Add(Format(&#039;%d - %s - %s - %s - %s&#039;, [ACode, AArg1, AArg2, AArg3, AArg4]));&lt;br /&gt;
&lt;br /&gt;
  // Deny any delete operation&lt;br /&gt;
  if ACode = SQLITE_DELETE then&lt;br /&gt;
    AResult := SQLITE_DENY&lt;br /&gt;
  else&lt;br /&gt;
    AResult := SQLITE_OK;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
FDConnection1.Connected := True;&lt;br /&gt;
TSQLiteDatabase(FDConnection1.ConnectionIntf.CliObj).OnAutorize := DoAuthorize;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie finden dieses Beispiel im Ordner &amp;quot;FireDAC\Samples\DBMS Specific\SQLite\OnAuthorize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Verwenden der Low-Level-API von SQLite===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die maximale Leistung für SQLite-Datenzugriffe erzielen möchten, dann sollten Sie die Verwendung der Kapselungsklassen der FireDAC SQLite-API in Betracht ziehen. Dabei handelt es sich um eine auf schlanke Low-Level-Objekte bezogene API, die vom FireDAC SQLite-Treiber verwendet wird. Diese API ist nicht dokumentiert und wird nicht offiziell unterstützt.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt, wie Transaktionen gesteuert und Datensätze mit einer parametrisierten SELECT-Anweisung abgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
uses&lt;br /&gt;
  FireDAC.Phys.SQLiteWrapper;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  oDB: TSQLiteDatabase;&lt;br /&gt;
  oTran: TSQLiteStatement;&lt;br /&gt;
  oStmt: TSQLiteStatement;&lt;br /&gt;
  i: Integer;&lt;br /&gt;
begin&lt;br /&gt;
  FDConnection1.Connected := True;&lt;br /&gt;
  oDB := TSQLiteDatabase(FDConnection1.CliObj);&lt;br /&gt;
&lt;br /&gt;
  oTran := TSQLiteStatement.Create(oDB);&lt;br /&gt;
  try&lt;br /&gt;
    // start transaction&lt;br /&gt;
    oTran.Prepare(&#039;BEGIN&#039;);&lt;br /&gt;
    oTran.Execute;&lt;br /&gt;
&lt;br /&gt;
    oStmt := TSQLiteStatement.Create(oDB);&lt;br /&gt;
    try&lt;br /&gt;
      // prepare statement&lt;br /&gt;
      oStmt.Prepare(&#039;select * from &amp;quot;Orders&amp;quot; where OrderID &amp;gt; :ID1 and OrderID &amp;lt; :ID2&#039;);&lt;br /&gt;
&lt;br /&gt;
      // add bind variables (parameters)&lt;br /&gt;
      for i := 1 to oStmt.ParamDefsCount do&lt;br /&gt;
        TSQLiteBind.Create(oStmt.Params);&lt;br /&gt;
&lt;br /&gt;
      // add column variables (fields)&lt;br /&gt;
      for i := 1 to oStmt.ColumnDefsCount do&lt;br /&gt;
        TSQLiteColumn.Create(oStmt.Columns).Index := i - 1;&lt;br /&gt;
&lt;br /&gt;
      // set parameter values and execute&lt;br /&gt;
      oStmt.Params[0].AsInteger := 11000;&lt;br /&gt;
      oStmt.Params[1].AsInteger := 12000;&lt;br /&gt;
      oStmt.Execute;&lt;br /&gt;
&lt;br /&gt;
      // fetch records and read columns&lt;br /&gt;
      while oStmt.Fetch do&lt;br /&gt;
        Memo1.Lines.Add(Format(&#039;OrderID: %d, CustomerID: %s&#039;,&lt;br /&gt;
          [oStmt.Columns[0].AsInteger, oStmt.Columns[1].AsString]));&lt;br /&gt;
    finally&lt;br /&gt;
      oStmt.Free;&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
    // commit transaction&lt;br /&gt;
    oTran.Unprepare;&lt;br /&gt;
    oTran.Prepare(&#039;COMMIT&#039;);&lt;br /&gt;
    oTran.Execute;&lt;br /&gt;
  finally&lt;br /&gt;
    oTran.Free;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Herstellen einer Verbindung zu SQLite-Datenbanken (FireDAC)|Herstellen einer Verbindung zu SQLite-Datenbanken]]{{f|radstudio|	&lt;br /&gt;
* [[Mobile-Tutorial: Verwenden von FireDAC in mobilen Anwendungen (iOS und Android)|Mobile-Tutorial: Verwenden von FireDAC in mobilen Anwendungen (iOS und Android)]]}}	&lt;br /&gt;
* [[Mobile-Tutorial: Verwenden von FireDAC und SQLite (iOS und Android)|Mobile-Tutorial: Verwenden von FireDAC und SQLite (iOS und Android)]] &lt;br /&gt;
&lt;br /&gt;
===Beispiele===&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:FireDAC.SQLite Sample|FireDAC SQLite]] (Beispiel)&lt;br /&gt;
&lt;br /&gt;
[[Category:FireDAC]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using SQLite with FireDAC]]&lt;br /&gt;
[[fr:Utilisation de SQLite avec FireDAC]]&lt;br /&gt;
[[ja:FireDAC での SQLite の使用]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Mitteilungen&amp;diff=208922</id>
		<title>Verwenden von Mitteilungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Mitteilungen&amp;diff=208922"/>
		<updated>2016-06-24T10:53:04Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Verwenden der RTL in geräteübergreifenden Anwendungen}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mitteilungen&#039;&#039;&#039; sind Meldungen, die Anwendungen senden, um Informationen oder Warnungen weiterzugeben.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; In diesem Thema werden &#039;&#039;&#039;lokale Mitteilungen&#039;&#039;&#039; behandelt, die von Geräteanwendungen gesendete Mitteilungen darstellen; Informationen zu &#039;&#039;&#039;Remote-Mitteilungen&#039;&#039;&#039; finden Sie unter [[Push-Benachrichtigungen|Push-Benachrichtigungen]].&lt;br /&gt;
&lt;br /&gt;
{{Product}} enthält die Komponente [[lib_de:System.Notification.TNotificationCenter|TNotificationCenter]] für die Verwaltung geräteübergreifender Mitteilungen. Die Mitteilungszentrale ermöglicht das Senden von Mitteilungen aus einer ausgeführten Anwendung. Anwendungen können anhand von Mitteilungen den Benutzer über etwas informieren.&lt;br /&gt;
&lt;br /&gt;
Die Komponente [[lib_de:System.Notification.TNotification|TNotification]] ist die Mitteilung, die die Anwendung an die Mitteilungszentrale sendet und die im ausgewiesenen Benachrichtigungsbereich der jeweiligen Plattform angezeigt werden soll.&lt;br /&gt;
&lt;br /&gt;
Sie können Mitteilungen für {{f|vcl|Windows mit der VCL oder für}} Ihre [[Geräteübergreifende Anwendungen - Index|geräteübergreifenden Anwendungen]] mit {{FM}} erstellen.&lt;br /&gt;
&lt;br /&gt;
==Unterstützung von Mitteilungen nach Plattform==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Windows&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;OS X&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;iOS&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Android&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Plattformunterstützung&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
&lt;br /&gt;
Windows 10 und Windows 8&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
&lt;br /&gt;
10.8+&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Name des Benachrichtigungsbereichs&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [https://en.wikipedia.org/wiki/Action_Center Aktionszentrale]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [https://en.wikipedia.org/wiki/Notification_Center Mitteilungszentrale]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [https://en.wikipedia.org/wiki/Notification_Center Mitteilungszentrale]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [http://developer.android.com/guide/topics/ui/notifiers/notifications.html Mitteilungsschublade]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; style=&amp;quot;background: #d7d7d7;&amp;quot; | &#039;&#039;&#039;[[lib_de:System.Notification.TNotification|TNotification]]&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.Name|TNotification.Name]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.AlertBody|TNotification.AlertBody]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
&lt;br /&gt;
Obligatorisch&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.Title|TNotification.Title]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
&lt;br /&gt;
Wenn kein Titel vorhanden ist, wird der App-Name als Titel verwendet.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Der App-Name wird als Titel verwendet.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
&lt;br /&gt;
Wenn kein Titel vorhanden ist, wird der App-Name als Titel verwendet.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.FireDate|TNotification.FireDate]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.Number|TNotification.Number]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
&lt;br /&gt;
Legt die Zahl auf dem Kennzeichensymbol fest.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.EnableSound|TNotification.EnableSound]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Ton ist immer aktiviert.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.AlertAction|TNotification.AlertAction]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.HasAction|TNotification.HasAction]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TNotification.RepeatInterval|TNotification.RepeatInterval]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; style=&amp;quot;background: #d7d7d7;&amp;quot; | &#039;&#039;&#039;[[lib_de:System.Notification.TCustomNotificationCenter|TCustomNotificationCenter]]&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TCustomNotificationCenter.ApplicationIconBadgeNumber|TCustomNotificationCenter.ApplicationIconBadgeNumber]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Siehe [[samp_en:OSX Dock Badges (Delphi)|OS X Badge (Beispiel) (EN)]].&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TCustomNotificationCenter.ScheduleNotification|TCustomNotificationCenter.ScheduleNotification]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Nicht unterstützt.&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[lib_de:System.Notification.TCustomNotificationCenter.PresentNotification|TCustomNotificationCenter.PresentNotification]]&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | {{V}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Windows-Mitteilungen===&lt;br /&gt;
&lt;br /&gt;
Popupbenachrichtigungen sind mit den folgenden Windows-Versionen kompatibel:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Windows 8&#039;&#039;&#039;: Windows 8 zeigt die Benachrichtigungen eine kurze Zeit lang an, danach kann der Benutzer nicht mehr darauf zugreifen.&lt;br /&gt;
* &#039;&#039;&#039;Windows 10&#039;&#039;&#039;: Windows 10 zeigt die Benachrichtigungen eine kurze Zeit lang an, danach sind die Benachrichtigungen in der &#039;&#039;&#039;Aktionszentrale&#039;&#039;&#039; verfügbar.&lt;br /&gt;
&lt;br /&gt;
Um die Aktionszentrale zum Anzeigen der Benachrichtigungen zu öffnen, klicken Sie in der Taskleiste auf das Symbol &amp;quot;Aktionszentrale&amp;quot;. Je nachdem, ob Benachrichtigungen verfügbar sind, wird das Symbol unterschiedlich dargestellt:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ausstehende Benachrichtigungen&lt;br /&gt;
! Keine ausstehenden Benachrichtigungen&lt;br /&gt;
|- valign=&amp;quot;center&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align: center&amp;quot; | [[File:W10-NotificationsPending.png]]&lt;br /&gt;
| style=&amp;quot;text-align: center&amp;quot; | [[File:W10-NoNotificationsPending.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===OS X-Mitteilungen===&lt;br /&gt;
&lt;br /&gt;
OS X unterstützt Mitteilungen ab der Version 10.8. Weitere Informationen über OS X finden Sie unter [[Verwenden der OS X-Mitteilungszentrale|Verwenden der OS X-Mitteilungszentrale]].&lt;br /&gt;
&lt;br /&gt;
===iOS-Mitteilungen===&lt;br /&gt;
&lt;br /&gt;
====Berechtigungen für Mitteilungen====&lt;br /&gt;
&lt;br /&gt;
Fügen Sie Ihrer Anwendung Mitteilungsberechtigungen hinzu, um Mitteilungen in iOS verwenden zu können:&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt;  [[Versionsinformationen|Versionsinformationen]]}}&lt;br /&gt;
# Wählen Sie die entsprechende iOS-Zielplattform aus.&lt;br /&gt;
# Setzen Sie im Listenfeld &amp;quot;Schlüssel-Wert&amp;quot; den Wert von {{Code|FMLocalNotificationPermission}} auf {{True}}.&lt;br /&gt;
&lt;br /&gt;
: [[File:FMLocalNotificationPermission.png]]&lt;br /&gt;
&lt;br /&gt;
====Mitteilungshinweis====&lt;br /&gt;
&lt;br /&gt;
In iOS kann der Benutzer festlegen, ob Mitteilungen einer App als Banner oder als Hinweis angezeigt werden. Banner werden nur eine kurze Zeit lang auf dem Bildschirm angezeigt, aber Hinweise verbleiben auf dem Bildschirm, bis der Benutzer eine Interaktion mit dem Hinweis ausführt.&lt;br /&gt;
&lt;br /&gt;
Um Mitteilungen als Hinweise anzuzeigen, muss der Endbenutzer in den Mitteilungseinstellungen auf dem iOS-Gerät, die Einstellung &#039;&#039;&#039;Hinweisstil&#039;&#039;&#039; in &#039;&#039;&#039;Hinweise&#039;&#039;&#039; ändern.&lt;br /&gt;
&lt;br /&gt;
==Erstellen von Mitteilungen==&lt;br /&gt;
&lt;br /&gt;
Mitteilungen werden mit der Klasse [[lib_de:System.Notification.TNotification|TNotification]] erstellt. Zum Verwalten einer oder mehrerer [[lib_de:System.Notification.TNotification|TNotification]]-Instanzen benötigen Sie die Komponente [[lib_de:System.Notification.TNotificationCenter|TNotificationCenter]].&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie eine [[lib_de:System.Notification.TNotificationCenter|TNotificationCenter]]-Komponente auf Ihrem Formular platziert haben, können Sie die Variable &amp;lt;code&amp;gt;TNotification&amp;lt;/code&amp;gt; deklarieren und die Methode [[lib_de:System.Notification.TCustomNotificationCenter.CreateNotification|CreateNotification]] zum Erstellen der Mitteilung aufrufen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification:= NotificationCenter1.CreateNotification;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
TNotification *MyNotification = NotificationCenter1-&amp;gt;CreateNotification();&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Erstellen der Mitteilung sollten Sie mindestens die folgenden Felder festlegen:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Notification.TNotification.Name|Name]]: Eindeutiger Name der Mitteilung.&lt;br /&gt;
* [[lib_de:System.Notification.TNotification.AlertBody|AlertBody]]: Text des Steuerelements. Das Feld &amp;lt;code&amp;gt;AlertBody&amp;lt;/code&amp;gt; ist in iOS obligatorisch.&lt;br /&gt;
&lt;br /&gt;
Sie können andere Einstellungen für Ihre Mitteilungen verwalten:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Notification.TNotification.Title|Title]]: Titel der Mitteilung.&lt;br /&gt;
 iOS ist mit dem Feld &amp;lt;code&amp;gt;Title&amp;lt;/code&amp;gt; nicht kompatibel; iOS zeigt immer den App-Namen als Titel an.&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Notification.TNotification.Number|Number]]: Mit diesem Feld aktualisieren Sie die Mitteilungsnummer in Android oder die Zahl auf dem Anwendungskennzeichen in iOS.&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Notification.TCustomNotificationCenter.ApplicationIconBadgeNumber|ApplicationIconBadgeNumber]]: Mit dieser Eigenschaft aktualisieren Sie die Zahl auf dem Anwendungskennzeichen in iOS.&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Zahl auf dem iOS-Kennzeichensymbol&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Android-Mitteilungsnummer&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;center&amp;quot;&lt;br /&gt;
| [[File:IOSNotification.PNG|120px]]&lt;br /&gt;
| [[File:Android Notification with number.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Auslösen von Mitteilungen==&lt;br /&gt;
&lt;br /&gt;
Mit [[lib_de:System.Notification.TNotification.FireDate|FireDate]] legen Sie das [[lib_de:System.TDateTime|Datum und die Uhrzeit]] fest, zu der die Mitteilung ausgelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
Um die Zeit festzulegen, zu der die Mitteilung ausgelöst werden soll, können Sie zwei Typen von Mitteilungen erstellen.&lt;br /&gt;
&lt;br /&gt;
* [[#Sofortige Mitteilungen|Sofortige Mitteilungen]]&lt;br /&gt;
* [[#Geplante Mitteilungen|Geplante Mitteilungen]]&lt;br /&gt;
&lt;br /&gt;
===Sofortige Mitteilungen===&lt;br /&gt;
&lt;br /&gt;
Standardmäßig ist [[lib_de:System.Notification.TNotification.FireDate|FireDate]] auf [[lib_de:System.SysUtils.Now|Now]] gesetzt. Wenn Sie den Wert von [[lib_de:System.Notification.TNotification.FireDate|FireDate]] nicht ändern, wird daher die Mitteilung sofort ausgelöst.&lt;br /&gt;
&lt;br /&gt;
===Geplante Mitteilungen===&lt;br /&gt;
&lt;br /&gt;
Der Zeitpunkt, zu dem Mitteilungen ausgelöst werden, kann geplant werden. Setzen Sie [[lib_de:System.Notification.TNotification.FireDate|FireDate]] auf das [[lib_de:System.TDateTime|Datum und die Uhrzeit]], zu der die Mitteilung ausgelöst werden soll.&lt;br /&gt;
&lt;br /&gt;
====Auslösen von Mitteilungen zu einem bestimmten Zeitpunkt====&lt;br /&gt;
&lt;br /&gt;
Sie können festlegen, dass eine Mitteilung zu einem bestimmten Zeitpunkt ausgelöst werden muss. Wenn eine Mitteilung beispielsweise am &#039;&#039;16. Dezember 2015, um 17:30&#039;&#039;, ausgelöst werden soll, können Sie [[lib_de:System.Notification.TNotification.FireDate|FireDate]] wie folgt festlegen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification.FireDate := EncodeDateTime(2015, 12, 16, 17, 30, 00, 00);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification-&amp;gt;FireDate = System::Dateutils::EncodeDateTime(2015, 12, 16, 17, 30, 00, 00);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denken Sie beim Planen von Mitteilungen für einen bestimmten Zeitpunkt daran, dass die Mitteilung sofort ausgelöst wird, wenn das festgelegte &amp;lt;code&amp;gt;FireDate&amp;lt;/code&amp;gt; bereits vorüber ist.&lt;br /&gt;
&lt;br /&gt;
====Auslösen von Mitteilungen nach einer bestimmten Zeitspanne====&lt;br /&gt;
&lt;br /&gt;
Sie können festlegen, dass eine Mitteilung nach einer bestimmten Zeitspanne ausgelöst werden muss. Um die Mitteilung beispielsweise in 1 Minute und 30 Sekunden auszulösen, können Sie Folgendes angeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification.FireDate := Now + EncodeTime(0, 1, 30, 0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification-&amp;gt;FireDate = Now() + EncodeTime(0, 1, 30, 0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn eine Mitteilung geplant ist und Sie eine andere Mitteilung mit dem gleichen Namen (geplant oder nicht) erstellen, wird die geplante Mitteilung überschrieben.&lt;br /&gt;
&lt;br /&gt;
==Wiederholen von Mitteilungen==&lt;br /&gt;
&lt;br /&gt;
Sie können mit [[lib_de:System.Notification.TNotification.RepeatInterval|RepeatInterval]] geplante Mitteilungen nach einer bestimmten Zeitspanne wiederholen. Dazu stehen die folgenden von [[lib_de:System.Notification.TRepeatInterval|TRepeatInterval]] definierten Intervalltypen zur Verfügung: &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Second&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Minute&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Hour&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Day&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Week&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Weekday&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Month&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Quarter&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Year&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Era&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Warnung:&#039;&#039;&#039; Wenn Sie mit &amp;lt;code&amp;gt;RepeatInterval&amp;lt;/code&amp;gt; die Wiederholung einer Mitteilung nach einer bestimmten Zeitspanne planen, wird die Mitteilung weiterhin wiederholt, auch wenn die Anwendung geschlossen ist; achten Sie darauf, dass [[#Stornieren von Mitteilungen|Mitteilungen korrekt storniert werden]].&lt;br /&gt;
&lt;br /&gt;
Damit eine Mitteilung jede Stunde wiederholt wird, könnten Sie beispielsweise Folgendes angeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification.RepeatInterval := TRepeatInterval.Hour;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification-&amp;gt;RepeatInterval = TRepeatInterval::Hour;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mitteilungston==&lt;br /&gt;
&lt;br /&gt;
===Aktivieren von Mitteilungstönen===&lt;br /&gt;
&lt;br /&gt;
Sie können Töne mit [[lib_de:System.Notification.TNotification.EnableSound|EnableSound]] aktivieren oder deaktivieren. Standardmäßig ist &amp;lt;code&amp;gt;EnableSound&amp;lt;/code&amp;gt; auf {{True}} gesetzt.&lt;br /&gt;
&lt;br /&gt;
* Bei &#039;&#039;&#039;OS X&#039;&#039;&#039; und &#039;&#039;&#039;iOS&#039;&#039;&#039; wird, selbst wenn Töne aktiviert sind, der Mitteilungston nicht abgespielt, wenn sich die Anwendung im Vordergrund befindet; OS X und iOS spielen den Mitteilungston ab, wenn sich die Anwendung im Hintergrund befindet oder geschlossen ist.&lt;br /&gt;
* Bei &#039;&#039;&#039;Windows&#039;&#039;&#039; wird der Mitteilungston immer abgespielt; auch wenn Sie den Ton mit &amp;lt;code&amp;gt;EnableSound&amp;lt;/code&amp;gt; deaktivieren.&lt;br /&gt;
&lt;br /&gt;
===Anpassen von Mitteilungstönen===&lt;br /&gt;
&lt;br /&gt;
Sie können den Ton Ihrer Mitteilungen anpassen, indem Sie [[lib_de:System.Notification.TNotification.SoundName|SoundName]] festlegen.&lt;br /&gt;
&lt;br /&gt;
Führen Sie die folgenden Schritte aus, um einen benutzerdefinierten Mitteilungston hinzuzufügen:&lt;br /&gt;
&lt;br /&gt;
# Ziehen Sie in der [[Projektverwaltung|Projektverwaltung]] die Tondatei auf dem Namen Ihres Projekts, und bestätigen Sie, dass Sie diese Datei hinzufügen möchten.&lt;br /&gt;
# Geben Sie in {{Menu|Projekt &amp;amp;gt; [[Bereitstellungs-Manager|Bereitstellung]]}} die richtigen Remote-Pfade der Datei für die verschiedenen Plattformen an.&lt;br /&gt;
#* &#039;&#039;&#039;iOS:&#039;&#039;&#039;{{Path|.\}}&lt;br /&gt;
# Geben Sie den benutzerdefinierten Tonnamen an, und legen Sie &amp;lt;code&amp;gt;SoundName&amp;lt;/code&amp;gt; der Plattform entsprechend fest.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
{$IFDEF IOS}&lt;br /&gt;
MyNotification.SoundName := &#039;nameOfSound.caf&#039;;&lt;br /&gt;
{$ENDIF}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#if defined(_PLAT_IOS)&lt;br /&gt;
myNotification-&amp;gt;SoundName = &amp;quot;nameOfSound.caf&amp;quot;;&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Laut der iOS-Dokumentation sollte die Tondatei die Dateierweiterung {{Path|aiff}}, {{Path|wav}} oder {{Path|caf}} haben.&lt;br /&gt;
&lt;br /&gt;
Achten Sie darauf, Ihrem Projekt die richtige Unit hinzuzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039; Fügen Sie [[lib_de:System.IOUtils|System.IOUtils]] in die uses-Klausel ein.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
System.IOUtils;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039; Fügen Sie [[lib_de:System.IOUtils|System.IOUtils.hpp]] in die Header-Datei {{Path|.h}} Ihres Projekts ein.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.IOUtils.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das Gerät die benutzerdefinierte Tondatei, die Sie in Ihrem Projekt festgelegt haben, nicht finden kann, spielt iOS den Standardton, Android dagegen keinen Ton ab.&lt;br /&gt;
&lt;br /&gt;
==Mitteilungsaktionen==&lt;br /&gt;
&lt;br /&gt;
Durch Klicken auf die Mitteilungen in &#039;&#039;&#039;OS X&#039;&#039;&#039;, &#039;&#039;&#039;iOS&#039;&#039;&#039; oder &#039;&#039;&#039;Android&#039;&#039;&#039; wird die Anwendung, die die Mitteilung gesendet hat, in den Vordergrund gesetzt, unabhängig davon, ob diese Anwendung im Hintergrund ausgeführt wird oder geschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;Windows&#039;&#039;&#039; ist kein bestimmtes Verhalten vorgesehen, wenn der Benutzer auf die Mitteilung klickt.&lt;br /&gt;
&lt;br /&gt;
===Hinzufügen von Mitteilungsaktionen===&lt;br /&gt;
&lt;br /&gt;
Sie können Aktionen ausführen, wenn der Benutzer auf eine Mitteilung klickt. Beim Klicken auf eine Mitteilung wird das Ereignis [[lib_de:System.Notification.TNotificationCenter.OnReceiveLocalNotification|OnReceiveLocalNotification]] ausgelöst. Schreiben Sie eine Ereignisbehandlungsroutine, um eine Aktion festzulegen.&lt;br /&gt;
&lt;br /&gt;
Die Ereignisbehandlungsroutine für &amp;lt;code&amp;gt;OnReceiveLocalNotification&amp;lt;/code&amp;gt; empfängt auch die im Parameter {{Arg|ANotification}} angegebene TNotitication, auf die der Benutzer klickt; mit dem Parameter {{Arg|ANotification}} ermitteln Sie weitere Einzelheiten über die Mitteilung, auf die der Benutzer geklickt hat.&lt;br /&gt;
&lt;br /&gt;
So zeigen Sie eine Meldung gemäß der Mitteilung, auf die der Benutzer geklickt hat, an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
if ANotification.Name=&#039;ProcessCompleted&#039; then&lt;br /&gt;
	ShowMessage(&#039;The process is completed.&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
if (ANotification-&amp;gt;Name == &amp;quot;ProcessCompleted&amp;quot;) {&lt;br /&gt;
	ShowMessage(&amp;quot;The process is completed.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mitteilungsaktionen (OS X und iOS)===&lt;br /&gt;
&lt;br /&gt;
Sie können einem Hinweis eine Aktions-Schaltfläche hinzufügen, mit der der Benutzer die Anwendung öffnen kann. Dazu muss der Benutzer in den Mitteilungseinstellungen den Stil der Mitteilung auf &amp;quot;Hinweise&amp;quot; festlegen; weitere Informationen dazu finden Sie unter [[Verwenden der OS X-Mitteilungszentrale#Verwenden der OS X-Mitteilungszentrale|Mitteilungshinweise in OS X]] und [[#Mitteilungshinweis|Mitteilungshinweise in iOS]].&lt;br /&gt;
&lt;br /&gt;
Um eine Aktions-Schaltfläche hinzuzufügen, setzen Sie das Feld [[lib_de:System.Notification.TNotification.HasAction|HasAction]] auf {{True}}. Im Feld [[lib_de:System.Notification.TNotification.AlertAction|AlertAction]] können Sie den Text für die Schaltfläche angeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification.HasAction := True;&lt;br /&gt;
MyNotification.AlertAction := &#039;Open App&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
MyNotification-&amp;gt;HasAction = True;&lt;br /&gt;
MyNotification-&amp;gt;AlertAction = &amp;quot;Open App&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Senden von Mitteilungen an die Mitteilungszentrale==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie alle Einstellungen für Ihre Mitteilung konfiguriert haben, müssen Sie Ihre Mitteilung an die Mitteilungszentrale zur Verarbeitung senden.&lt;br /&gt;
&lt;br /&gt;
Sie können Mitteilungen an die Mitteilungszentrale mit einer der beiden folgenden Methoden senden.&lt;br /&gt;
&lt;br /&gt;
* [[#ScheduleNotification|ScheduleNotification]]&lt;br /&gt;
* [[#PresentNotification|PresentNotification]]&lt;br /&gt;
&lt;br /&gt;
===ScheduleNotification===&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Notification.TCustomNotificationCenter.ScheduleNotification|ScheduleNotification]] sendet eine geplante Mitteilung an die Mitteilungszentrale. Wenn [[lib_de:System.Notification.TNotification.FireDate|FireDate]] [[lib_de:System.SysUtils.Now|Now]] ist oder &amp;lt;code&amp;gt;FireDate&amp;lt;/code&amp;gt; einen vergangenen Zeitpunkt (TDateTime) enthält, dann wird die Mitteilung sofort angezeigt; ansonsten wird die Mitteilung wie angegeben geplant.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Warnung:&#039;&#039;&#039; Windows unterstützt &amp;lt;code&amp;gt;ScheduleNotification&amp;lt;/code&amp;gt; nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
NotificationCenter1.ScheduleNotification(MyNotification);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
NotificationCenter1-&amp;gt;ScheduleNotification(MyNotification);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PresentNotification===&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Notification.TCustomNotificationCenter.PresentNotification|PresentNotification]] zeigt die Mitteilung sofort an, unabhängig vom Wert von [[lib_de:System.Notification.TNotification.FireDate|FireDate]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
NotificationCenter1.PresentNotification(MyNotification);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
NotificationCenter1-&amp;gt;PresentNotification(MyNotification);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Stornieren von Mitteilungen==&lt;br /&gt;
&lt;br /&gt;
Sie können Mitteilungen, die geplant sind, und Mitteilungen, die wiederholt werden, stornieren sowie Mitteilungen entfernen, die bereits in der Aktionszentrale, der Mitteilungszentrale oder der Mitteilungsschublade angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
===CancelNotification===&lt;br /&gt;
&lt;br /&gt;
Mit [[lib_de:System.Notification.TCustomNotificationCenter.CancelNotification|CancelNotification]] wird eine geplante Mitteilung oder eine Mitteilung, die wiederholt wird, storniert. Um eine Mitteilung zu stornieren, benötigen Sie den [[lib_de:System.Notification.TNotification.Name|Namen]] der Mitteilung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
NotificationCenter1.CancelNotification(&#039;MyNotificationName&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
NotificationCenter1-&amp;gt;CancelNotification(&amp;quot;MyNotificationName&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CancelAll===&lt;br /&gt;
&lt;br /&gt;
[[lib_de:System.Notification.TCustomNotificationCenter.CancelAll|CancelAll]] storniert alle Mitteilungen:&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:* Geplante Mitteilungen werden nicht ausgelöst.&lt;br /&gt;
:* Mitteilungen mit einem Wiederholungsintervall werden storniert.&lt;br /&gt;
:* Mitteilungen, die in der Aktionszentrale, der Mitteilungszentrale oder der Mitteilungsschublade für diese Anwendung verfügbar sind, werden gelöscht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
NotificationCenter1.CancelAll;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++: &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
NotificationCenter1-&amp;gt;CancelAll();&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Aktualisieren von Mitteilungen==&lt;br /&gt;
&lt;br /&gt;
Sie können ausstehende Mitteilungen anhand des &amp;lt;code&amp;gt;Namens&amp;lt;/code&amp;gt;, des eindeutigen Bezeichners der Mitteilung, aktualisieren. Führen Sie die folgenden Schritte aus, um eine Mitteilung zu aktualisieren:&lt;br /&gt;
&lt;br /&gt;
# [[#Erstellen von Mitteilungen|Erstellen Sie eine Instanz von TNotification]] mit dem gleichen &amp;lt;code&amp;gt;Namen&amp;lt;/code&amp;gt; wie die zu aktualisierende Mitteilung. &lt;br /&gt;
# Konfigurieren Sie die neue Instanz mit den gewünschten Einstellungen.&lt;br /&gt;
# [[#Senden von Mitteilungen an die Mitteilungszentrale|Senden Sie die Mitteilung an die Mitteilungszentrale]].&lt;br /&gt;
&lt;br /&gt;
Durch die Aktualisierung von zukünftigen Mitteilungen, geplanten Mitteilungen oder Mitteilungen mit einem Wiederholungsintervall werden die Mitteilungen, die sich bereits in der Aktionszentrale, der Mitteilungszentrale oder der Mitteilungsschublade befinden, gelöscht und zukünftige Mitteilungen überschrieben.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Verwenden der OS X-Mitteilungszentrale|Verwenden der OS X-Mitteilungszentrale]]&lt;br /&gt;
* [[Mobile-Tutorial: Verwenden von Mitteilungen (iOS und Android)|Mobile-Tutorial: Verwenden von Mitteilungen (iOS und Android)]]&lt;br /&gt;
* [[Push-Benachrichtigungen|Push-Benachrichtigungen]]&lt;br /&gt;
* [[lib_de:System.Notification.TNotification|System.Notification.TNotification]]&lt;br /&gt;
* [[lib_de:System.Notification.TNotificationCenter|System.Notification.TNotificationCenter]]&lt;br /&gt;
&lt;br /&gt;
===Codebeispiele===&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:FMX.SendCancelNotification Sample|{{FM}} Send Cancel Notification (EN)]] (Beispiel)&lt;br /&gt;
* [[samp_en:FMX.Android Notification Service Sample|{{FM}} Android Notification Service (EN)]] (Beispiel)&lt;br /&gt;
* [[samp_en:FMX.SetResetBadgeNumber Sample|{{FM}} Set Reset Badge Number (EN)]] (Beispiel)&lt;br /&gt;
* [[samp_en:OSX Dock Badges (Delphi)|OSX Dock Badges (EN)]] (Delphi)&lt;br /&gt;
* [[samp_en:FMX.Notification.Mac (Delphi)|{{FM}} Notification Mac (EN)]] (Delphi)&lt;br /&gt;
* [[samp_en:FMX.Notification.Mac (C++)|{{FM}} Notification Mac (EN)]] (C++)&lt;br /&gt;
&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:Geräteübergreifend]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using Notifications]]&lt;br /&gt;
[[fr:Utilisation de notifications]]&lt;br /&gt;
[[ja:通知の使用]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Hinweisen_zum_Anzeigen_von_Kontexthilfe_in_einer_FireMonkey-Anwendung&amp;diff=208921</id>
		<title>Verwenden von Hinweisen zum Anzeigen von Kontexthilfe in einer FireMonkey-Anwendung</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Hinweisen_zum_Anzeigen_von_Kontexthilfe_in_einer_FireMonkey-Anwendung&amp;diff=208921"/>
		<updated>2016-06-24T10:52:41Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|FireMonkey-Anwendungsdesign}}&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite wird beschrieben, wie Sie Hinweise in einer {{FM}}-Anwendung verwenden. Außerdem finden Sie hier einige Codefragmente. &lt;br /&gt;
&lt;br /&gt;
==Plattformunterstützung für Hinweise==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plattform&lt;br /&gt;
! Unterstützt&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Windows&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
OS X&lt;br /&gt;
|&lt;br /&gt;
{{V}} (10.10+)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
iOS&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Android&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Aktivieren von Hinweisen==&lt;br /&gt;
&lt;br /&gt;
===Aktivieren von Hinweisen für Ihre Anwendung===&lt;br /&gt;
&lt;br /&gt;
In Ihrer Anwendung können standardmäßig Hinweise angezeigt werden. Die Eigenschaft, mit der die Anzeige von Hinweisen aktiviert/deaktiviert wird, ist [[lib_de:FMX.Forms.TApplication.ShowHint|TApplication.ShowHint]]. Dabei handelt es sich um eine globale Einstellung, die alle hinweisbezogenen Aktionen, wie die Anzeige von Hinweisen und hinweisbezogene Ereignisse, betrifft.&lt;br /&gt;
Verwenden Sie den folgenden Code, um Hinweise für Ihre Anwendung zu deaktivieren:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
  Application.ShowHint := False;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  Application-&amp;gt;ShowHint = false;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aktivieren von Hinweisen für ein Steuerelement===&lt;br /&gt;
&lt;br /&gt;
Führen Sie einen der folgenden Schritte aus, um Hinweise für das aktuelle Steuerelement zu aktivieren:&lt;br /&gt;
&lt;br /&gt;
* Setzen Sie [[lib_de:FMX.Controls.TControl.ShowHint|ShowHint]] des Steuerelements auf &#039;&#039;&#039;True&#039;&#039;&#039;.&lt;br /&gt;
* Setzen Sie [[lib_de:FMX.Controls.TControl.ParentShowHint|ParentShowHint]] des Steuerelements auf &#039;&#039;&#039;True&#039;&#039;&#039; und [[lib_de:FMX.Controls.TControl.ShowHint|ShowHint]] des übergeordneten Steuerelements ebenfalls auf &#039;&#039;&#039;True&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; [[lib_de:FMX.Controls.TControl.ShowHint|ShowHint]] und [[lib_de:FMX.Controls.TControl.ParentShowHint|ParentShowHint]] des Steuerelements dürfen nicht gleichzeitig {{True}} sein.&lt;br /&gt;
&lt;br /&gt;
====Vererbung von ParentShowHint====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Steuerelement auf dem Formular platzieren und einen Hinweis für dieses Steuerelement festlegen, ist der Hinweis standardmäßig aktiviert. Und zwar, weil [[lib_de:FMX.Forms.TForm.ShowHint|TForm.ShowHint]] standardmäßig {{True}} ist und [[lib_de:FMX.Controls.TControl.ParentShowHint|ParentShowHint]] des Steuerelements ebenfalls standardmäßig {{True}} ist.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie jedoch ein anderes Steuerelement als untergeordnetes Steuerelement des vorherigen hinzufügen und einen Hinweis für das neue Steuerelement festlegen, wird dieser Hinweis aufgrund der Nichtbeachtung der im Abschnitt [[#Aktivieren von Hinweisen für ein Steuerelement|Aktivieren von Hinweisen für ein Steuerelement]] dargestellten Regeln nicht standardmäßig angezeigt. In diesem Fall ist [[lib_de:FMX.Controls.TControl.ParentShowHint|ParentShowHint]] des untergeordneten Steuerelements {{True}}, aber [[lib_de:FMX.Controls.TControl.ShowHint|ShowHint]] des übergeordneten Steuerelements ist {{False}}. Ändern Sie eine dieser Eigenschaften entsprechend der [[#Aktivieren von Hinweisen für ein Steuerelement|Regeln]] zum Aktivieren von Hinweisen für das untergeordnete Steuerelement.&lt;br /&gt;
&lt;br /&gt;
==Festlegen von Hinweisen==&lt;br /&gt;
&lt;br /&gt;
Sie können den Hinweistext beim Entwurf im [[Objektinspektor|Objektinspektor]] in die Eigenschaft [[lib_de:FMX.Controls.TControl.Hint|Hint]] eines Steuerelements eingeben, oder Sie können einen Hinweis zur Laufzeit programmseitig festlegen. Der folgende Code zeigt, wie ein Hinweis für eine [[lib_de:FMX.StdCtrls.TButton|Schaltfläche]] festgelegt und aktiviert wird:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
  Button1.Hint := &#039;This is a button&#039;;&lt;br /&gt;
  Button1.ShowHint := True;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  Button1-&amp;gt;Hint = &amp;quot;This is a button&amp;quot;;&lt;br /&gt;
  Button1-&amp;gt;ShowHint = true;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Kurze und lange Hinweise===&lt;br /&gt;
&lt;br /&gt;
Sie können für denselben Hinweis einen kurzen und einen langen Text festlegen. Trennen Sie dazu die beiden Texte einfach durch einen senkrechten Strich (&#039;&#039;&#039;|&#039;&#039;&#039; Pipe). Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
 A hint|A much longer hint&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen Hinweis anzeigen, können Sie mit den folgenden Methoden aus der Unit [[lib_de:FMX.Utils|FMX.Utils]] entweder den kurzen oder den langen Teil des Hinweises abrufen:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:FMX.Utils.GetLongHint|GetLongHint]]&lt;br /&gt;
* [[lib_de:FMX.Utils.GetShortHint|GetShortHint]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie müssen dem uses-Abschnitt/der Header-Datei im [[Quelltext-Editor|Quelltext-Editor]] die Unit [[lib_de:FMX.Utils|FMX.Utils]] hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie für Ihren Hinweis keinen kurzen oder langen Teil festgelegt haben, wird durch Aufruf der obigen Methoden dasselbe Ergebnis, nämlich der gesamte Hinweistext, zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Der folgende Code zeigt, wie der lange Hinweis in der Ereignisbehandlungsroutine [[lib_de:FMX.Forms.TApplication.OnHint|TApplication.OnHint]] abgerufen wird:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.OnApplicationHint(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Label1.Text := GetLongHint(Application.Hint);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void _fastcall TForm1::OnApplicationHint(TObject* Sender);&lt;br /&gt;
{&lt;br /&gt;
  Label1-&amp;gt;Text = GetLongHint(Application-&amp;gt;Hint);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hinweise und Ereignisse==&lt;br /&gt;
&lt;br /&gt;
Bei jedem Auslösen eines Hinweises wird das Ereignis [[lib_de:FMX.Forms.TApplication.OnHint|TApplication.OnHint]] ausgelöst. Mit diesem Ereignis können Sie alle Hinweise in Ihrer Anwendung abfangen und verwenden. Beispielsweise können Sie dem Ereignis [[lib_de:FMX.Forms.TApplication.OnHint|TApplication.OnHint]] eine benutzerdefinierte Ereignisbehandlungsroutine zuweisen und damit alle Hinweise in einer Beschriftung anzeigen:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Deklarieren der benutzerdefinierten Ereignisbehandlungsroutine:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
  private&lt;br /&gt;
    { Private declarations }&lt;br /&gt;
    procedure OnApplicationHint(Sender: TObject);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hinzufügen der Implementierung:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Application.OnHint := OnApplicationHint;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TForm1.OnApplicationHint(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Label1.Text := Application.Hint;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Hinzufügen der folgenden Deklaration zur Projekt-Header-Datei: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
private:	// User declarations&lt;br /&gt;
  void __fastcall OnApplicationHint(TObject* Sender);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Implementierung des benutzerdefinierten Ereignisses:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
__fastcall TForm1:FormCreate(TObject* Sender);&lt;br /&gt;
{&lt;br /&gt;
  Application-&amp;gt;OnHint = OnApplicationHint;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void __fastcall TForm1:OnApplicationHint(TObject* Sender);&lt;br /&gt;
{&lt;br /&gt;
  Label1-&amp;gt;Text = Application-&amp;gt;Hint;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unterdrücken von Hinweisen===&lt;br /&gt;
&lt;br /&gt;
Möglicherweise möchten Sie die Anzeige eines Hinweises unterdrücken, diesen Hinweis aber dennoch abfangen. Sie erreichen dies durch Aufrufen von [[lib_de:FMX.Forms.TApplication.HideHint|TApplication.HideHint]] in der Ereignisbehandlungsroutine [[lib_de:FMX.Forms.TApplication.OnHint|TApplication.OnHint]]:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.OnApplicationHint(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
   Label1.Text := Application.Hint;&lt;br /&gt;
   Application.HideHint;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TForm1:OnApplicationHint(TObject* Sender);&lt;br /&gt;
{&lt;br /&gt;
   Label1-&amp;gt;Text = Application-&amp;gt;Hint;&lt;br /&gt;
   Application-&amp;gt;HideHint;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Besondere Aspekte==&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Ausnahmen und besondere Anwendungsfälle, die Sie bei der Verwendung von Hinweisen berücksichtigen sollten.&lt;br /&gt;
&lt;br /&gt;
===Menüs===&lt;br /&gt;
&lt;br /&gt;
Sie können für [[lib_de:FMX.Menus.TMenuItem|Menüeinträge]] Hinweise festlegen, aber sie werden nicht wie bei anderen Steuerelementen angezeigt, sondern an die Ereignisbehandlungsroutine weitergegeben. Wenn Sie also einen Hinweis für einen Menüeintrag festlegen, können Sie ihn mit einer benutzerdefinierten [[lib_de:FMX.Forms.TApplication.OnHint|TApplication.OnHint]]-Ereignisbehandlungsroutine abfangen und anzeigen. Hinweise für Menüeinträge können nicht deaktiviert werden. Wenn Sie einen Hinweis für einen Menüeintrag deaktivieren möchten, weisen Sie als Hinweis einen leeren String zu.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Menüeinträge der obersten Ebene unterstützen keine Hinweise.&lt;br /&gt;
&lt;br /&gt;
===Statuszeile===&lt;br /&gt;
&lt;br /&gt;
Ein Sonderfall in Bezug auf Hinweise stellt das Steuerelement [[lib_de:FMX.StdCtrls.TStatusBar|TStatusBar]] dar. Wenn Sie Ihrer Anwendung eine Statuszeile hinzufügen und die Eigenschaft [[lib_de:FMX.StdCtrls.TStatusBar.AutoHint|TStatusBar.AutoHint]] auf {{True}} setzen, empfängt das Ereignis [[lib_de:FMX.StdCtrls.TStatusBar.OnHint|TStatusBar.OnHint]] automatisch alle Hinweise.&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie diesen Code in der Ereignisbehandlungsroutine, um Hinweise in einer Beschriftung anzuzeigen, wenn Ihr Formular über eine Statuszeile verfügt:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.StatusBar1Hint(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Label1.Text := Application.Hint;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
__fastcall TForm1:StatusBar1Hint(TObject* Sender);&lt;br /&gt;
{&lt;br /&gt;
  Label1-&amp;gt;Text = Application-&amp;gt;Hint;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Gleichzeitiges Verwenden beider OnHint-Ereignisse====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie eine benutzerdefinierte [[lib_de:FMX.Forms.TApplication.OnHint|TApplication.OnHint]]-Ereignisbehandlungsroutine in einer Anwendung mit einer Statuszeile festlegen, wird das Ereignis [[lib_de:FMX.StdCtrls.TStatusBar.OnHint|TStatusBar.OnHint]] ungeachtet der Eigenschaft [[lib_de:FMX.StdCtrls.TStatusBar.AutoHint|TStatusBar.AutoHint]] nicht ausgelöst. Wenn Sie dennoch beide Ereignisse verwenden möchten, können Sie dies durch Aufrufen von [[lib_de:FMX.StdCtrls.TStatusBar.OnHint|TStatusBar.OnHint]] aus der [[lib_de:FMX.Forms.TApplication.OnHint|TApplication.OnHint]]-Ereignisbehandlungsroutine erreichen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.OnApplicationHint(Sender:TObject);&lt;br /&gt;
begin&lt;br /&gt;
   Label1.Text := Application.Hint;&lt;br /&gt;
   StatusBar1Hint(Sender);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TForm1:OnApplicationHint(TObject* Sender);&lt;br /&gt;
{&lt;br /&gt;
   Label1-&amp;gt;Text = Application-&amp;gt;Hint;&lt;br /&gt;
   StatusBar1Hint(Sender);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aktionen===&lt;br /&gt;
&lt;br /&gt;
[[FireMonkey-Aktionen|{{FM}}-Aktionen]] unterstützen ebenfalls Hinweise. Sie können einen Hinweis für eine Aktion angeben, und dieser Hinweis wird für alle Steuerelemente, die diese Aktion verwenden, übernommen. Sie können Aktionshinweise nicht deaktivieren (sie verfügen nicht über die Eigenschaft {{Code|ShowHint}}). Die globale [[lib_de:FMX.Forms.TApplication.ShowHint|TApplication.ShowHint]]-Einstellung betrifft auch Aktionen.&lt;br /&gt;
&lt;br /&gt;
====Festlegen von Aktionshinweisen====&lt;br /&gt;
&lt;br /&gt;
Sie können einen Hinweis für eine Aktion im [[Objektinspektor|Objektinspektor]] oder zur Laufzeit festlegen. Ein Beispiel zur Definition eines Hinweises für eine Aktion zur Laufzeit finden Sie unter [[#Aktionsereignis OnHint |Aktionsereignis OnHint]]. Sie müssen aber trotzdem Hinweise für dieses Steuerelement [[#Aktivieren von Hinweisen für ein Steuerelement|aktivieren]], ansonsten ist der Hinweis deaktiviert.&lt;br /&gt;
&lt;br /&gt;
====Tastenkürzel für Aktionen====&lt;br /&gt;
&lt;br /&gt;
Aktionen ermöglichen auch, das Tastenkürzel ([[lib_de:FMX.ActnList.TAction.ShortCut|TAction.ShortCut]]) als Teil des Hinweises anzuzeigen. Dazu müssen Sie [[lib_de:FMX.Forms.TApplication.HintShortCuts|TApplication.HintShortCuts]] auf {{True}} setzen.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Auch wenn Sie keinen Hinweis für eine Aktion festlegen, wird im Hinweis das Tastenkürzel angezeigt, wenn [[lib_de:FMX.Forms.TApplication.HintShortCuts|TApplication.HintShortCuts]] {{True}} ist.&lt;br /&gt;
&lt;br /&gt;
====Aktionsereignis OnHint====&lt;br /&gt;
&lt;br /&gt;
Aktionen haben ein eigenes unabhängiges [[lib_de:System.Actions.TContainedAction.OnHint|OnHint]]-Ereignis. Wenn Sie eine benutzerdefinierte Ereignisbehandlungsroutine für dieses Ereignis implementieren, können Sie den Text des Hinweises programmseitig festlegen oder ändern oder diesen Hinweis unterdrücken.&lt;br /&gt;
&lt;br /&gt;
Der folgende Code ist ein Beispiel für eine [[lib_de:System.Actions.TContainedAction.OnHint|OnHint]]-Ereignisbehandlungsroutine für eine Aktion, die den Text des Hinweises ändert.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Parameter {{Arg|CanShow}} führt nichts aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.Action1Hint(var HintStr: string; var CanShow: Boolean);&lt;br /&gt;
begin&lt;br /&gt;
  HintStr := HintStr + &#039;My hint text&#039;;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
__fastcall TForm1:Action1Hint(System:UnicodeString HintStr, boolean CanShow);&lt;br /&gt;
{&lt;br /&gt;
  HintStr = HintStr + &amp;quot;My hint text&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie den Hinweis entfernen möchten, können Sie dies im [[Objektinspektor|Objektinspektor]] tun oder den Hinweis zur Laufzeit unterdrücken:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.Action1Hint(var HintStr: string; var CanShow: Boolean);&lt;br /&gt;
begin&lt;br /&gt;
  HintStr := &#039;&#039;;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
__fastcall TForm1:Action1Hint(System:UnicodeString HintStr, boolean CanShow);&lt;br /&gt;
{&lt;br /&gt;
  HintStr = &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Wenn Sie einem Steuerelement eine Aktion mit einem Hinweis zuweisen und dann den Hinweis aus den Eigenschaften des Steuerelements entfernen, wird der Aktionshinweis trotzdem angezeigt. Informationen zu diesem Szenario finden Sie in der [[#Steuerelementhinweise und Aktionshinweise|folgenden Tabelle]].&lt;br /&gt;
&lt;br /&gt;
====Steuerelementhinweise und Aktionshinweise====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einem Steuerelement eine Aktion zuweisen, erbt das Steuerelement automatisch den Hinweis dieser Aktion. Wenn Sie den Hinweis später ändern möchten, können Sie dazu entweder den Hinweis der Aktion oder den Hinweis des Steuerelements ändern. Es gibt jedoch bestimmte Szenarien, die Sie berücksichtigen sollten. In der folgenden Tabelle sind die verschiedenen Szenarien und der sich ergebende Hinweis aufgeführt.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Schritte&lt;br /&gt;
! Angezeigter Hinweis&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
# Festlegen eines Hinweises für die Aktion: {{Code|ActionHint}}&lt;br /&gt;
# Zuweisen dieser Aktion zu einem Steuerelement&lt;br /&gt;
|&lt;br /&gt;
{{Code|ActionHint}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
# Festlegen eines Hinweises für die Aktion: {{Code|ActionHint}}&lt;br /&gt;
# Zuweisen dieser Aktion zu einem Steuerelement&lt;br /&gt;
# [[#Aktionsereignis OnHint|Unterdrücken des Hinweises]] zur Laufzeit (Zuweisen eines leeren Strings)&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
# Festlegen eines Hinweises für die Aktion: {{Code|ActionHint}}&lt;br /&gt;
# Zuweisen dieser Aktion zu einem Steuerelement&lt;br /&gt;
# Ändern des Hinweises in den Eigenschaften des Steuerelements, Festlegen des Hinweises als {{Code|ControlHint}}&lt;br /&gt;
|&lt;br /&gt;
{{Code|ControlHint}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
# Festlegen eines Hinweises für die Aktion: {{Code|ActionHint}}&lt;br /&gt;
# Zuweisen dieser Aktion zu einem Steuerelement&lt;br /&gt;
# Entfernen des Hinweises aus den Eigenschaften des Steuerelements &lt;br /&gt;
|&lt;br /&gt;
{{Code|ActionHint}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Berücksichtigen Sie bei den Szenarien in der obigen Tabelle die [[#Tastenkürzel für Aktionen|Tastenkürzel]].&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
===Bibliotheken===&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:FMX.Controls.THint|FMX.Controls.THint]]&lt;br /&gt;
* [[lib_de:FMX.Controls.TControl.Hint|FMX.Controls.TControl.Hint]]&lt;br /&gt;
* [[lib_de:FMX.Controls.TControl.ShowHint|FMX.Controls.TControl.ShowHint]]&lt;br /&gt;
* [[lib_de:FMX.StdCtrls.TStatusBar.OnHint|FMX.StdCtrls.TStatusBar.OnHint]]&lt;br /&gt;
* [[lib_de:FMX.StdCtrls.TStatusBar.AutoHint|FMX.StdCtrls.TStatusBar.AutoHint]]&lt;br /&gt;
* [[lib_de:FMX.Forms.TApplication.OnHint|FMX.Forms.TApplication.OnHint]]&lt;br /&gt;
* [[lib_de:FMX.Forms.TApplication.Hint|FMX.Forms.TApplication.Hint]]&lt;br /&gt;
* [[lib_de:FMX.Forms.TApplication.ShowHint|FMX.Forms.TApplication.ShowHint]]&lt;br /&gt;
* [[lib_de:FMX.Forms.TApplication.HideHint|FMX.Forms.TApplication.HideHint]]&lt;br /&gt;
* [[lib_de:FMX.Forms.TApplication.HintShortCuts|FMX.Forms.TApplication.HintShortCuts]]&lt;br /&gt;
* [[lib_de:FMX.Utils.GetLongHint|FMX.Utils.GetLongHint]]&lt;br /&gt;
* [[lib_de:FMX.Utils.GetShortHint|FMX.Utils.GetShortHint]]&lt;br /&gt;
&lt;br /&gt;
===Themen===&lt;br /&gt;
&lt;br /&gt;
[[FireMonkey-Aktionen|{{FM}}-Aktionen]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Seattle]]&lt;br /&gt;
[[Category:FMX]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using Hints to Show Contextual Help in a FireMonkey Application]]&lt;br /&gt;
[[fr:Utilisation des conseils pour afficher de l&#039;aide contextuelle dans une application FireMonkey]]&lt;br /&gt;
[[ja:FireMonkey アプリケーションでヒントを使用して状況依存ヘルプを表示する方法]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Gesten_in_Anwendungen&amp;diff=208920</id>
		<title>Verwenden von Gesten in Anwendungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Gesten_in_Anwendungen&amp;diff=208920"/>
		<updated>2016-06-24T10:52:29Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|So erstellen Sie eine Anwendung mit Gesten-Komponenten}}&lt;br /&gt;
&lt;br /&gt;
===So fügen Sie Ihrer Anwendung Funktionen für Gesten hinzu:===&lt;br /&gt;
&lt;br /&gt;
# Fügen Sie im &#039;&#039;&#039;[[Formular-Designer|Formular-Designer]]&#039;&#039;&#039; die Komponente oder Komponenten hinzu, die mit Gesten verwendet werden sollen.&lt;br /&gt;
#: Große Komponenten, wie Tafeln (TPanel) und Tafelgruppen, eignen sich gut für Gesten.&lt;br /&gt;
# Für Desktop-Plattformen fügen Sie dem Projekt eine &#039;&#039;&#039;GestureManager&#039;&#039;&#039;-Komponente hinzu, geben ihr optional einen bestimmten Namen und weisen sie dem Gestenmanager zu:&lt;br /&gt;
#: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Mobile Plattformen unterstützen per Vorgabe Gesten.&lt;br /&gt;
## Suchen Sie in der &#039;&#039;&#039;[[Tool-Palette|Tool-Palette]]&#039;&#039;&#039; in der Kategorie &#039;&#039;&#039;Gesten&#039;&#039;&#039; die GestureManager-Komponente, und doppelklicken Sie darauf:&lt;br /&gt;
##: [[Image:GMIcon2.png]]&lt;br /&gt;
##: (entweder &#039;&#039;&#039;[[lib_de:Vcl.Touch.GestureMgr.TGestureManager|Vcl.Touch.GestureMgr.TGestureManager]]&#039;&#039;&#039; oder &#039;&#039;&#039;[[lib_de:FMX.Types.TCustomTouchManager.GestureManager|FMX.Types.TCustomTouchManager.GestureManager]]&#039;&#039;&#039;).&lt;br /&gt;
##: [[Image:AssignGestureManager.png|thumb|right|300px|Gesten sind für das Steuerelement nicht aktiviert, wenn im Feld &#039;&#039;&#039;Gesten&#039;&#039;&#039; die Meldung &#039;&#039;&#039;Gestenmanager zuweisen&#039;&#039;&#039; angezeigt wird]]&lt;br /&gt;
##: Damit wird dem Projekt eine GestureManager-Komponente hinzugefügt und mit einem Standardnamen wie &#039;&#039;&#039;GestureManager1&#039;&#039;&#039; benannt.&lt;br /&gt;
## Wenn Sie den Standardnamen der GestureManager-Komponente ändern möchten, geben Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; einen Namen in das Feld &#039;&#039;&#039;Name&#039;&#039;&#039; für die GestureManager-Komponente ein.  Der Standardname lautet in der Regel GestureManager&amp;amp;lt;n&amp;amp;gt;.&lt;br /&gt;
## Sie müssen jeder Komponente, die Gesten verarbeiten soll, &#039;&#039;&#039;einen Gestenmanager zuweisen&#039;&#039;&#039;:&lt;br /&gt;
### Wählen Sie (entweder im Formular-Designer oder in der Dropdown-Liste mit Komponenten im Objektinspektor) die GestureManager-Komponente aus.&lt;br /&gt;
###: [[Image:AssignGM1.png|thumb|right|300px|Wenn die Meldung &#039;&#039;&#039;Gestenmanager zuweisen&#039;&#039;&#039; angezeigt wird, klicken Sie auf @@wikiImage@@Image:ProjectOptionsDownArrow2.jpg]] im Feld &amp;quot;GestureManager&amp;quot;, um die vorhandenen Gestenmanager anzuzeigen]]&lt;br /&gt;
### Klicken Sie im &#039;&#039;&#039;[[Objektinspektor|Objektinspektor]]&#039;&#039;&#039; im Eingabefeld für die Eigenschaft &#039;&#039;&#039;GestureManager&#039;&#039;&#039; (unter dem Knoten &#039;&#039;&#039;Touch&#039;&#039;&#039;) auf den Abwärtspfeil [[Image:ProjectOptionsDownArrow2.jpg]]. Daraufhin wird im Feld &#039;&#039;&#039;GestureManager&#039;&#039;&#039; eine Liste der verfügbaren Gestenmanager angezeigt.&lt;br /&gt;
### Wählen Sie einen Gestenmanager in der Liste verfügbarer Gestenmanager aus:&lt;br /&gt;
###: [[Image:GMList.png]]&lt;br /&gt;
## Wählen Sie im &#039;&#039;&#039;Formular-Designer&#039;&#039;&#039; die Komponente aus, die den Gestenmanager enthält, und öffnen Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; den Knoten &#039;&#039;&#039;Touch&#039;&#039;&#039;.  Überprüfen Sie, ob im Feld &#039;&#039;&#039;GestureManager&#039;&#039;&#039; der Name anzeigt wird, den Sie dem GestureManager für diese Komponente zugewiesen haben.&lt;br /&gt;
# Für Desktop- und mobile Plattformen:&lt;br /&gt;
## Wählen Sie im Objektinspektor im Feld &#039;&#039;&#039;Touch | Gesten&#039;&#039;&#039; des Steuerelements die Geste(n), die Sie aktivieren möchten.&lt;br /&gt;
## Implementieren Sie die Ereignisbehandlungsroutine &#039;&#039;&#039;OnGesture&#039;&#039;&#039; (Prozedur) für jede Geste, die Sie für das Steuerelement aktivieren möchten, und behandeln Sie die entsprechende &#039;&#039;&#039;[[lib_de:FMX.Types.TCustomGestureCollectionItem.GestureID|EventInfo.GestureId]]&#039;&#039;&#039;.&lt;br /&gt;
##: Ein Beispiel einer Ereignisbehandlungsroutine finden Sie unter &#039;&#039;&#039;Implementieren der OnGesture-Ereignisbehandlungsroutine&#039;&#039;&#039; in [[Gesten in FireMonkey|Gesten in FireMonkey]].&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Überblick zu Gesten|Überblick zu Gesten]]&lt;br /&gt;
* [[Erstellen von benutzerdefinierten Gesten|Erstellen von benutzerdefinierten Gesten]]&lt;br /&gt;
* [[Aufzählung der Standardgesten|Aufzählung der Standardgesten]]&lt;br /&gt;
* [[Behandeln von VCL-Aktionen mit einer Aktionsliste|Aktionslisten verwenden]]&lt;br /&gt;
* [[Gesten in FireMonkey|Gesten in FireMonkey]]&lt;br /&gt;
&lt;br /&gt;
===Plattformspezifische Informationen===&lt;br /&gt;
&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/dd371585(v=VS.85).aspx Windows Touch-Gesten]&lt;br /&gt;
* [http://support.apple.com/kb/HT4721 Multi-Touch Gestures for OS X (Mehrfingerbewegungen für OS X) (EN)]&lt;br /&gt;
* [https://developer.apple.com/library/ios/documentation/userexperience/conceptual/MobileHIG/index.html iOS Human Interface Guidelines: Platform Characteristics (iOS-Benutzeroberflächenrichtlinien: Plattformmerkmale) (EN)]&lt;br /&gt;
* [http://developer.android.com/design/patterns/gestures.html Gestures on Android (Gesten in Android) (EN)]&lt;br /&gt;
&lt;br /&gt;
===Codebeispiele===&lt;br /&gt;
&lt;br /&gt;
* [[Samp:OnGesture (Delphi)|OnGesture ({{Delphi}})]]&lt;br /&gt;
* [[Samp:OnGesture (C++)|OnGesture (C++)]]&lt;br /&gt;
* [[samp_en:FMX.InteractiveGestures Sample|FMX.InteractiveGestures (Beispiel)]]&lt;br /&gt;
&lt;br /&gt;
===Beispiele===&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:FMX.ImageZoom Sample|ImageZoom]] (Beispiel)&lt;br /&gt;
* [[samp_en:FMX.ImageRotation Sample|ImageRotation]] (Beispiel)&lt;br /&gt;
* [[samp_en:FMX.TapAndHold Sample|TapAndHold]] (Beispiel)&lt;br /&gt;
&lt;br /&gt;
[[Category:Mit Delphi für Windows arbeiten]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using Gesturing in Your Applications]]&lt;br /&gt;
[[fr:Utilisation de la gestion des mouvements dans vos applications]]&lt;br /&gt;
[[ja:アプリケーションでジェスチャを使用する]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Box2D_in_Delphi-Anwendungen&amp;diff=208919</id>
		<title>Verwenden von Box2D in Delphi-Anwendungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Box2D_in_Delphi-Anwendungen&amp;diff=208919"/>
		<updated>2016-06-24T10:52:14Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Box2D}}&lt;br /&gt;
&lt;br /&gt;
In diesem Thema wird die Verwendung von Box2D in {{Delphi}}-Anwendungen beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Konfigurieren Ihrer Anwendung für die Verwendung von Box2D==&lt;br /&gt;
&lt;br /&gt;
{{Product}} enthält keine vorerzeugten {{Path|.dcu}}-Dateien für Box2D-{{Delphi}}-Units. Zum Erzeugen eines {{Delphi}}-Projekts, das Box2D-Units in der &amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;uses&amp;lt;/source&amp;gt;-Klausel enthält, müssen Sie den Suchpfad Ihres Projekts so konfigurieren, dass {{Product}} die Box2D-Units finden kann.&lt;br /&gt;
&lt;br /&gt;
So konfigurieren Sie den Suchpfad Ihres {{Delphi}}-Projekts so, dass {{Product}} die Box2D-Units finden kann:&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; [[Delphi-Compiler|{{Delphi}}-Compiler]]}}.&lt;br /&gt;
# Fügen Sie dem Feld &#039;&#039;&#039;Suchpfad&#039;&#039;&#039; den Eintrag {{Path|$(BDS)\source\FlatBox2D}} hinzu.&lt;br /&gt;
&lt;br /&gt;
Sie können nun Ihrem Code [[Hinzufügen einer Unit-Referenz|Referenzen auf diese Units hinzufügen]], damit Sie [[#Verwenden von Box2D|Box2D verwenden]] können.&lt;br /&gt;
&lt;br /&gt;
==Verwenden von Box2D==&lt;br /&gt;
&lt;br /&gt;
Die {{Delphi}}-Bindungen für Box2D basieren auf der [http://www.learn-cocos2d.com/api-ref/1.0/Box2D/html/index.html C++-API (EN)]; es gibt jedoch einige wichtige Unterschiede.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Für die Verwendung der {{Delphi}}-Bindungen für Box2D sollten Sie mit [[Zeiger und Zeigertypen (Delphi)|Zeigern]] und [[Grundlegende syntaktische Elemente (Delphi)#Erweiterte Bezeichner|erweiterten Bezeichnern]] vertraut sein.&lt;br /&gt;
&lt;br /&gt;
==={{Delphi}}-Zuordnung von Box2D-Klassen===&lt;br /&gt;
&lt;br /&gt;
Die {{Delphi}}-Bindungen für Box2D stellen Box2D-Klassen auf eine der folgenden Arten bereit:&lt;br /&gt;
&lt;br /&gt;
* Als Record mit dem Originalnamen der Box2D-Klasse. Siehe [[#Verwenden von Box2D-Records|Verwenden von Box2D-Records]].&lt;br /&gt;
* Als Record mit dem Originalnamen der Box2D-Klasse und dem Suffix {{Code|Wrapper}}. Beispielsweise wäre der Wrapper von {{Code|b2World}} {{Code|b2WorldWrapper}}. Siehe [[#Verwenden von Box2D-Wrapper-Records|Verwenden von Box2D-Wrapper-Records]].&lt;br /&gt;
&lt;br /&gt;
In beiden Fällen ist im Gegensatz zu regulären {{Delphi}}-Records die Deklaration dieser Box2D-Records nicht ausreichend, um sie zu erstellen. Sie müssen deren {{Code|Create}}-Prozedur aufrufen, um sicherzustellen, dass deren Member die richtigen Standardwerte erhalten. Wenn Sie einen Record deklarieren und {{Code|Create}} nicht aufrufen, könnten die Standardwerte der Member nicht mit denjenigen übereinstimmen, die Box2D definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
groundBodyDef := b2BodyDef.Create;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Verwenden von Box2D-Records====&lt;br /&gt;
&lt;br /&gt;
Die {{Delphi}}-Bindungen für Box2D stellen die meisten Box2D-Klassen als Records bereit. Die einzigen Ausnahmen bilden [[#Verwenden von Box2D-Wrapper-Records|als Wrapper-Records bereitgestellte Klassen]] und [[#Definieren von Box2D-Listenern|Listener-Klassen]].&lt;br /&gt;
&lt;br /&gt;
====Verwenden von Box2D-Wrapper-Records====&lt;br /&gt;
&lt;br /&gt;
Die {{Delphi}}-Bindungen für Box2D stellen die folgenden Wrapper-Records bereit:&lt;br /&gt;
&lt;br /&gt;
* {{Code|b2BlockAllocatorWrapper}}&lt;br /&gt;
* {{Code|b2BodyWrapper}}&lt;br /&gt;
* {{Code|b2BroadPhaseWrapper}}&lt;br /&gt;
* {{Code|b2ChainAndCircleContactWrapper}}&lt;br /&gt;
* {{Code|b2ChainAndPolygonContactWrapper}}&lt;br /&gt;
* {{Code|b2ChainShapeWrapper}}&lt;br /&gt;
* {{Code|b2CircleContactWrapper}}&lt;br /&gt;
* {{Code|b2CircleShapeWrapper}}&lt;br /&gt;
* {{Code|b2ContactWrapper}}&lt;br /&gt;
* {{Code|b2ContactManagerWrapper}}&lt;br /&gt;
* {{Code|b2ContactSolverWrapper}}&lt;br /&gt;
* {{Code|b2DistanceJointWrapper}}&lt;br /&gt;
* {{Code|b2DrawWrapper}}&lt;br /&gt;
* {{Code|b2DynamicTreeWrapper}}&lt;br /&gt;
* {{Code|b2EdgeAndCircleContactWrapper}}&lt;br /&gt;
* {{Code|b2EdgeAndPolygonContactWrapper}}&lt;br /&gt;
* {{Code|b2EdgeShapeWrapper}}&lt;br /&gt;
* {{Code|b2FrictionJointWrapper}}&lt;br /&gt;
* {{Code|b2GearJointWrapper}}&lt;br /&gt;
* {{Code|b2IslandWrapper}}&lt;br /&gt;
* {{Code|b2JointWrapper}}&lt;br /&gt;
* {{Code|b2MotorJointWrapper}}&lt;br /&gt;
* {{Code|b2MouseJointWrapper}}&lt;br /&gt;
* {{Code|b2PolygonAndCircleContactWrapper}}&lt;br /&gt;
* {{Code|b2PolygonContactWrapper}}&lt;br /&gt;
* {{Code|b2PolygonShapeWrapper}}&lt;br /&gt;
* {{Code|b2PrismaticJointWrapper}}&lt;br /&gt;
* {{Code|b2PulleyJointWrapper}}&lt;br /&gt;
* {{Code|b2RevoluteJointWrapper}}&lt;br /&gt;
* {{Code|b2RopeWrapper}}&lt;br /&gt;
* {{Code|b2RopeJointWrapper}}&lt;br /&gt;
* {{Code|b2ShapeWrapper}}&lt;br /&gt;
* {{Code|b2StackAllocatorWrapper}}&lt;br /&gt;
* {{Code|b2WeldJointWrapper}}&lt;br /&gt;
* {{Code|b2WheelJointWrapper}}&lt;br /&gt;
* {{Code|b2WorldWrapper}}&lt;br /&gt;
&lt;br /&gt;
====Freigabe von Box2D-Records und -Record-Wrappern====&lt;br /&gt;
&lt;br /&gt;
Die einzigen Box2D-Records oder -Record-Wrapper, die Sie freigeben müssen, sind Instanzen von {{Code|b2WorldWrapper}}. Der Destruktor von {{Code|b2WorldWrapper}} gibt den durch Körper, Inventarstücke oder Verbindungen im {{Code|b2WorldWrapper}}-Objekt zugewiesenen Speicher frei.&lt;br /&gt;
&lt;br /&gt;
Ausnahmen von dieser Regel:&lt;br /&gt;
&lt;br /&gt;
* ShapeWrapper&lt;br /&gt;
* Andere Wrapper, die Sie explizit erstellen und die in C++ freigegeben werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
world.Destroy;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[#Definieren von Box2D-Listenern|Box2D-Listener]] gehören ebenfalls zu den Ausnahmen von dieser Regel.&lt;br /&gt;
&lt;br /&gt;
===Definieren von Box2D-Listenern===&lt;br /&gt;
&lt;br /&gt;
Box2D definierte einige Listener-Klassen. Wenn Sie [[Verwenden von Box2D in C++Builder-Anwendungen|C++ verwenden]], können Sie Unterklassen eines Listeners anlegen, eine Instanz Ihrer Unterklasse erstellen und Ihr Listener-Objekt in einem Box2D-Objekt registrieren, wie z. B. &amp;quot;Welt&amp;quot; ({{Code|b2World}}).&lt;br /&gt;
&lt;br /&gt;
Um ein Box2D-Listener-Objekt eines bestimmten Typs in {{Delphi}} zu erstellen, müssen Sie eine benutzerdefinierte Klasse definieren, die das Interface der Ziel-Box2D-Listener-Klasse implementiert. Das Interface einer Box2D-Listener-Klasse wird wie die Box2D-Listener-Klasse, aber mit dem Präfix {{Code|I}} benannt. {{Code|Ib2ContactListener}} ist beispielsweise das Interface der {{Code|b2ContactListener}}-Box2D-Listener-Klasse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
TMyContactListener = class (TInterfacedObject, Ib2ContactListener)&lt;br /&gt;
public&lt;br /&gt;
  procedure BeginContact(contact: NativeUInt); cdecl;&lt;br /&gt;
  procedure EndContact(contact: NativeUInt); cdecl;&lt;br /&gt;
  procedure PostSolve(contact: NativeUInt; impulse: Pb2ContactImpulse); cdecl;&lt;br /&gt;
  procedure PreSolve(contact: NativeUInt; oldManifold: Pb2Manifold); cdecl;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie eine Klasse angelegt haben, die das Ziel-Listener-Interface implementiert, müssen Sie eine Instanz dieser Klasse erstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
myContactListener := TMyContactListener.Create;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Listener-Setter-Methoden können Ihr Listener-Objekt nicht direkt behandeln, sondern Sie müssen einen Delegaten (mit dem Typ &amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;NativeUInt&amp;lt;/source&amp;gt;) für Ihr Listener-Objekt abrufen und diesen Delegaten an die Listener-Setter-Methode übergeben. Verwenden Sie {{Code|Create_{{placeholder|Listener-Klasse}}_delegate}}, um einen Delegaten Ihres Listener-Objekts zu erstellen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
myContactListenerHandle := Create_b2ContactListener_delegate(myContactListener);&lt;br /&gt;
world.SetContactListener(myContactListenerHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach der Freigabe der Box2D-Welt können Sie das Listener-Objekt freigeben, indem Sie sein Handle an {{Code|Destroy_{{placeholder|Listener-Klasse}}_delegate}} übergeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
world.Destroy;&lt;br /&gt;
Destroy_b2ContactListener_delegate(myContactListenerHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bereitstellen Ihrer Anwendung==&lt;br /&gt;
&lt;br /&gt;
Auf Desktop-Plattformen müssen Sie die dynamische {{Product}}-Box2D-Bibliothek zusammen mit Ihrer Anwendung weitergeben.&lt;br /&gt;
&lt;br /&gt;
Die dynamische {{Product}}-Box2D-Bibliotheksdatei befindet sich in:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;32-Bit-Windows:&#039;&#039;&#039; {{Path|{{InstallPath}}\bin\FlatBox2DDyn.dll}}&lt;br /&gt;
* &#039;&#039;&#039;64-Bit-Windows:&#039;&#039;&#039; {{Path|{{InstallPath}}\bin64\FlatBox2DDyn.dll}}&lt;br /&gt;
* &#039;&#039;&#039;OS X:&#039;&#039;&#039; {{Path|{{InstallPath}}\binosx32\libFlatBox2DDyn.dylib}}&lt;br /&gt;
&lt;br /&gt;
[[Bereitstellungs-Manager - Hinzufügen von Dateien|Fügen Sie dem Bereitstellungs-Manager diese Bibliotheksdatei]] für jede Zielplattform hinzu, die Ihre Anwendung unterstützt, damit sich bei der [[Anwendungen weitergeben - Index|Bereitstellung Ihrer Anwendung]] für eine beliebige Desktop-Plattform die dynamische {{Product}}-Box2D-Bibliotheksdatei unter den bereitgestellten Dateien Ihrer Anwendung befindet.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Verwenden von Box2D in C++Builder-Anwendungen|Verwenden von Box2D in {{CBuilder}}-Anwendungen]]&lt;br /&gt;
* [http://box2d.org/manual.pdf C++ Manual (EN)]&lt;br /&gt;
* [http://www.learn-cocos2d.com/api-ref/1.0/Box2D/html/index.html C++ API documentation (EN)]&lt;br /&gt;
&lt;br /&gt;
===Beispiele===&lt;br /&gt;
&lt;br /&gt;
* [[Samp:Box2D Hello World (Delphi)|Box2D Hello World ({{Delphi}})]]&lt;br /&gt;
* [[samp_en:Box2D.Box2DHello|Box2D Hello]] (Beispiel)&lt;br /&gt;
* [[samp_en:Box2D.TestBed|Box2D TestBed]] (Beispiel)&lt;br /&gt;
* [[samp_en:FMX.SimplePhysics Sample|FMX SimplePhysics]] (Beispiel)&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using Box2D in Delphi Applications]]&lt;br /&gt;
[[fr:Utilisation de Box2D dans les applications Delphi]]&lt;br /&gt;
[[ja:Delphi アプリケーションでの Box2D の使用]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Bluetooth_Low_Energy&amp;diff=208918</id>
		<title>Verwenden von Bluetooth Low Energy</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Bluetooth_Low_Energy&amp;diff=208918"/>
		<updated>2016-06-24T10:52:06Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Verwenden von Bluetooth}}&lt;br /&gt;
&lt;br /&gt;
Weil die Bluetooth Core Specification seit der Version 4.0 unterschiedliche Typen von &amp;quot;Bluetooth&amp;quot;-Protokollen, wie Bluetooth Low Energy, definiert, wird das ursprüngliche Bluetooth-Protokoll &amp;quot;[[Verwenden von Classic Bluetooth|Classic Bluetooth]]&amp;quot; genannt. &lt;br /&gt;
&lt;br /&gt;
Bluetooth Low Energy oder Smart Bluetooth stellt eine neue Umgebung für Geräte mit einer geringen Datenübertragungsmenge und niedrigerem Energieverbrauch bereit.&lt;br /&gt;
&lt;br /&gt;
So implementieren Sie die BluetoothLE-Unterstützung für Standarddienste in Ihren Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* [[#Einfügen einer TBluetoothLE-Komponente| Einfügen einer TBluetoothLE-Komponente in Ihr Projekt]]&lt;br /&gt;
* [[#Ermitteln von Geräten| Ermitteln von Bluetooth LE-Geräten]]&lt;br /&gt;
* [[#Ermitteln und Abrufen von Diensten| Ermitteln und Abrufen von Diensten für das Gerät]]&lt;br /&gt;
* [[#Ermitteln und Abrufen von Merkmalen| Ermitteln und Abrufen der Merkmale für das Gerät]]&lt;br /&gt;
* [[#Lesen, Schreiben oder Abonnieren eines Merkmals| Lesen, Schreiben oder Abonnieren eines Merkmals]]&lt;br /&gt;
* [[#Verarbeiten der empfangenen Daten| Ermitteln der Informationen aus den Rohdaten]]&lt;br /&gt;
&lt;br /&gt;
==Plattformunterstützung==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Plattform&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Bluetooth Low Energy&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! Client&lt;br /&gt;
! Server&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Windows(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
|&lt;br /&gt;
8+&lt;br /&gt;
|&lt;br /&gt;
10+ (&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
OS X&lt;br /&gt;
|&lt;br /&gt;
10.7+&lt;br /&gt;
|&lt;br /&gt;
10,9+ &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
iOS&lt;br /&gt;
|&lt;br /&gt;
5+&lt;br /&gt;
|&lt;br /&gt;
6+&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Android&lt;br /&gt;
|&lt;br /&gt;
4.3+&lt;br /&gt;
|&lt;br /&gt;
5+&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;(*) Hinweis&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;: Windows-Server unterstützt Bluetooth nicht (siehe: [https://msdn.microsoft.com/en-us/library/windows/hardware/dn133849%28v=vs.85%29.aspx General Bluetooth Support in Windows (EN)]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;(**) Hinweis&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;: Die WinRT Bluetooth-API unterstützt die BLE-Bekanntgabedaten durch das Feld [[lib_de:System.Bluetooth.TBluetoothLEAdvertiseData.ManufacturerSpecificData|herstellerspezifische Daten]], trotzdem implementiert sie die GATT-Server-Funktionalitäten nicht vollständig.&lt;br /&gt;
&lt;br /&gt;
==GATT-Profile (GENERIC ATTRIBUTE)==&lt;br /&gt;
&lt;br /&gt;
Profile sind allgemeine Definitionen, die festlegen, wie die Standarddienste in Ihren Anwendungen verwendet werden. Beispielsweise gibt es ein Herzfrequenzprofil, das in Fitness- oder Gesundheitsanwendungen eingesetzt wird. Das Servergerät mit einem Herzfrequenzsensor stellt den Standard-Herzfrequenzdienst bereit, sodass der BluetoothLE-Client den Dienst findet und mit dem Sammeln von Daten, z. B. Schläge pro Minute, beginnt.&lt;br /&gt;
&lt;br /&gt;
Das GATT-Profil ist die Kombination von Dienst und Merkmalen.&lt;br /&gt;
&lt;br /&gt;
Die offizielle Seite mit den GATT-Profilen ist [http://developer.bluetooth.org/gatt/profiles/Pages/ProfilesHome.aspx GATT Specifications for Standard Profiles (EN)].&lt;br /&gt;
&lt;br /&gt;
==Einfügen einer TBluetoothLE-Komponente==&lt;br /&gt;
&lt;br /&gt;
Implementieren Sie mit der neuen [[lib_de:System.Bluetooth.Components.TBluetoothLE|TBluetoothLE]]-Komponente das RTL-BluetoothLE-Feature für Server- und Clientanwendungen.&lt;br /&gt;
&lt;br /&gt;
TBluetoothLE fügt die Unit [[lib_de:System.Bluetooth|System.Bluetooth]] in Ihre Anwendung ein und ruft intern [[lib_de:System.Bluetooth.TBluetoothLEManager.Current|TBluetoothLEManager.Current]] auf, um eine Instanz von [[lib_de:System.Bluetooth.TBluetoothLEManager|TBluetoothLEManager]] abzurufen. {{Code|TBluetoothLEManager}} ist die Hauptklasse für die Bluetooth Low Energy-Kommunikation.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; {{Code|TBluetoothLEManager.Current}} gibt immer dieselbe Instanz von {{Code|TBluetoothLEManager}} zurück. Sie benötigen nur eine Instanz von {{Code|TBluetoothLEManager}}.&lt;br /&gt;
&lt;br /&gt;
==Ermitteln von Geräten==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BluetoothLE&#039;&#039;&#039; arbeitet nicht wie &#039;&#039;&#039;Classic Bluetooth&#039;&#039;&#039;, Sie müssen die Geräte nicht koppeln. BluetoothLE-Clients müssen BluetoothLE-Server ermitteln. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Bei Anwendungen, die auf Windows-Plattformen unter Windows 10 ausgeführt werden, müssen die Geräte vor der Ermittlung der BluetoothLE-Server zuerst gekoppelt werden. Weitere Informationen finden Sie unter [https://msdn.microsoft.com/en-us/library/windows/hardware/dn133844(v=vs.85).aspx Windows Bluetooth FAQ (EN)].&lt;br /&gt;
* Auf [[Neuerungen in Berlin#Bluetooth LE- und Beacon-Unterstützung in Windows 10|WinRT API für Windows 10+]]-Plattformen können Geräte ohne Koppelung ermittelt werden.&lt;br /&gt;
&lt;br /&gt;
Mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.DiscoverDevices|DiscoverDevices]] ermitteln Sie BluetoothLE-Server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure DoScan;&lt;br /&gt;
const &lt;br /&gt;
  HeartRateService: TBluetoothUUID = &#039;{0000180D-0000-1000-8000-00805F9B34FB}&#039;;&lt;br /&gt;
begin&lt;br /&gt;
  BluetoothLE1.DiscoverDevices(2500) // The parameter is the timeout in milliseconds. &lt;br /&gt;
  BluetoothLE1.DiscoverDevices(2500, [HRService]) // It only exposes devices with the Heart Rate service to the BluetoothLE client.&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dieser Zeitspanne wird das Ereignis [[lib_de:System.Bluetooth.Components.TBluetoothLE.OnEndDiscoverDevices|OnEndDiscoverDevices]] ausgelöst. Wenn das Gerät ermittelt wurde, können Sie mit dem Abrufen der Dienste und Merkmale aus dem Standardprofil, wie im Folgenden beschrieben, beginnen.&lt;br /&gt;
&lt;br /&gt;
===Verwenden von Suchfiltern===&lt;br /&gt;
&lt;br /&gt;
Die RTL stellt eine BLE-Suchfilterimplementierung bereit, die die neuen BLE-Chips mit geringem Energieverbrauch nutzt.&lt;br /&gt;
&lt;br /&gt;
Sie können mit angepassten, unabhängigen Suchfiltern nach bestimmten BLE-Geräten suchen:&lt;br /&gt;
&lt;br /&gt;
*Erstellen Sie Ihren Filter als [[lib_de:System.Bluetooth.TBluetoothLEScanFilter|TBluetoothLEScanFilter]].&lt;br /&gt;
*Geben Sie die [[lib_de:System.Bluetooth.TBluetoothLEScanFilter Properties|Felder]] an, anhand derer Sie die Geräte filtern möchten.&lt;br /&gt;
**Optional können Sie für Geräte, die [[lib_de:System.Bluetooth.TBluetoothLEAdvertiseData.ManufacturerSpecificData|ManufacturerSpecificData]] verwenden, wie [[Verwenden von Beacons#Beacon-Typen|AltBeacons und iBeacons]], mit der Hilfsklasse [[lib_de:System.Beacon.TBeaconManufacturerDataHelper|TBeaconManufacturerDataHelper]] nach diesen Daten filtern. Übergeben Sie dazu den [[lib_de:System.Beacon.TBeaconManufacturerDataHelper|TBeaconManufacturerDataHelper]]-Inhalt an den Filter.&lt;br /&gt;
&lt;br /&gt;
*Fügen Sie dann der [[lib_de:System.Bluetooth.TBluetoothLEScanFilterList|Filterliste]] den Filter hinzu, und beginnen Sie die Ermittlung von Geräten mit der neuen Implementierung von [[lib_de:System.Bluetooth.TBluetoothLEManager.StartDiscovery|StartDiscovery]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure DoScanWithFilter;&lt;br /&gt;
const &lt;br /&gt;
  HeartRateService: TGUID = &#039;{0000180D-0000-1000-8000-00805F9B34FB}&#039;;&lt;br /&gt;
var&lt;br /&gt;
  ABLEAdvertisedDataFilter: TBluetoothLEScanFilter;&lt;br /&gt;
  ABLEAdvertisedDataFilterList: TBluetoothLEScanFilterList;&lt;br /&gt;
begin&lt;br /&gt;
  ABLEAdvertisedDataFilter:= TBluetoothLEScanFilter.Create;&lt;br /&gt;
  ABLEAdvertisedDataFilterList:= TBluetoothLEScanFilterList.Create;&lt;br /&gt;
  ABLEAdvertisedDataFilter.ServiceUUID:= HeartRateService; &lt;br /&gt;
  ABLEAdvertisedDataFilterList.Add(ABLEAdvertisedDataFilter);&lt;br /&gt;
&lt;br /&gt;
  BluetoothLE1.CurrentManager.StartDiscovery(2500,ABLEAdvertisedDataFilterList);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dienste und Merkmale==&lt;br /&gt;
&lt;br /&gt;
===Ermitteln und Abrufen von Diensten===&lt;br /&gt;
&lt;br /&gt;
Dienste sind Sammlungen von Merkmalen und Beziehungen zu anderen Diensten, die das Verhalten eines Geräteteils kapseln.&lt;br /&gt;
&lt;br /&gt;
Ein GATT-Profil enthält einen oder mehrere Standarddienste, die über eine Zahl bezeichnet werden. Beispielsweise ist dem Herzfrequenzdienst offiziell die Zahl &amp;quot;0x180D&amp;quot; zugeordnet.&lt;br /&gt;
&lt;br /&gt;
Die offizielle Seite mit den Standarddienstinformationen ist [https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx Standard BluetoothLE Services (EN)].&lt;br /&gt;
&lt;br /&gt;
Um einen Dienst abzurufen, müssen Sie die vollständige UUID verwenden. Die UUID setzt sich aus der dem Standarddienst zugeordneten Zahl und dem Basis-Bluetooth-Code zusammen. Der vollständige Code für den Herzfrequenzdienst lautet beispielsweise &amp;lt;code&amp;gt;0000180D-0000-1000-8000-00805F9B34FB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.DiscoverServices|DiscoverServices]] ermitteln Sie Dienste für ein bestimmtes Gerät. Nach der Ermittlung der Dienste wird das Ereignis [[lib_de:System.Bluetooth.Components.TBluetoothLE.OnServicesDiscovered|OnServicesDiscovered]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
Sie müssen ermittelte Dienste abrufen. Mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.GetServices|GetServices]] können Sie eine Liste mit Diensten und mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.GetService|GetService]] einen bestimmten Dienst von einem Gerät abrufen.&lt;br /&gt;
&lt;br /&gt;
===Ermitteln und Abrufen von Merkmalen===&lt;br /&gt;
&lt;br /&gt;
Ein Dienst kann mehrere Merkmale enthalten, die Informationen für diesen Dienst bereitstellen. Jedes Merkmal ist mit einer offiziellen Nummer gekennzeichnet. Der Herzfrequenzdienst hat beispielsweise ein Merkmal zum Messen des Herzschlags, die Herzschlagmessung (Heart Rate Measurement) mit der UUID &amp;lt;code&amp;gt; 00002A37-0000-1000-8000-00805F9B34FB&amp;lt;/code&amp;gt;, und ein weiteres Merkmal zum Messen der Position des Sensors, Position des Körpersensors (Body Sensor Location) mit der UUID &amp;lt;code&amp;gt; 00002A38-0000-1000-8000-00805F9B34FB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.GetCharacteristics|GetCharacteristics]] rufen Sie eine Liste der Merkmale für einen bestimmten Dienst ab, mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.GetCharacteristic|GetCharacteristic]] ermitteln Sie Informationen über ein bestimmtes Merkmal.&lt;br /&gt;
&lt;br /&gt;
===Lesen, Schreiben oder Abonnieren eines Merkmals===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das Merkmal mit [[lib_de:System.Bluetooth.Components.TBluetoothLE.GetCharacteristic|GetCharacteristic]] abgerufen haben, können Sie die enthaltenen Informationen lesen oder schreiben (sofern verfügbar). Die Ereignisbehandlungsroutine [[lib_de:System.Bluetooth.Components.TBluetoothLE.OnCharacteristicRead|OnCharacteristicRead]] wird nach dem Lesen des Merkmals ausgelöst.&lt;br /&gt;
&lt;br /&gt;
Mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.ReadCharacteristic|ReadCharacteristic]] können Sie den aktuellen Wert eines Merkmals abrufen. Verwenden Sie [[lib_de:System.Bluetooth.Components.TBluetoothLE.WriteCharacteristic|WriteCharacteristic]] zum Schreiben, sofern diese Option auf dem Server verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
Sie können ein Merkmal auch abonnieren, um die Informationen bei jeder Änderung abzurufen. Um beispielsweise die Überwachung des Herzfrequenzsensors zu beginnen, können Sie den aktuellen Wert mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.GetCharacteristic|GetCharacteristic]] lesen und dann mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.SubscribeToCharacteristic|SubscribeToCharacteristic]] die Informationen abrufen, sobald sie sich ändern. Verwenden Sie die Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.UnSubscribeToCharacteristic|UnSubscribeToCharacteristic]], um die Überwachung zu beenden.&lt;br /&gt;
&lt;br /&gt;
===Verarbeiten der empfangenen Daten===&lt;br /&gt;
&lt;br /&gt;
Das Clientgerät empfängt ein Array mit Daten vom Server. Befolgen Sie die Spezifikationen im GATT-Profil, um die Daten in lesbare Informationen umzuwandeln. Die Datenpaketdetails für das Merkmal Herzschlagmessung (Heart Rate Measurement) finden Sie beispielsweise auf der offiziellen Seite: [https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml Heart Rate Measurement Data Package Structure (EN)].&lt;br /&gt;
&lt;br /&gt;
Bei dem Merkmal Herzschlagmessung (Heart Rate Measurement) enthält das erste Byte z. B. Flags mit Informationen über die im Bluetooth LE-Paket übertragenen Daten. Das Bit &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; im Feld &amp;quot;Flags&amp;quot; legt das Format des Herzschlagwertes fest: UINT8 oder UINT16. Je nach Format müssen Sie das zweite Byte des Datenpakets oder das zweite und das dritte Byte extrahieren, um die Schläge pro Minute zu erhalten.&lt;br /&gt;
&lt;br /&gt;
==BluetoothLE-Server==&lt;br /&gt;
&lt;br /&gt;
So erstellen Sie einen Server, der Standarddienste bereitstellt oder veröffentlicht:&lt;br /&gt;
&lt;br /&gt;
# Fügen Sie die Komponente [[lib_de:System.Bluetooth.Components.TBluetoothLE|TBluetoothLE]] in Ihr Projekt ein.&lt;br /&gt;
# Veröffentlichen Sie mit der Methode [[lib_de:System.Bluetooth.Components.TBluetoothLE.GetGattServer|GetGattServer]] die Bluetooth Low Energy-Dienste.&lt;br /&gt;
# Erstellen Sie mit der Methode [[lib_de:System.Bluetooth.TBluetoothGattServer.CreateService|CreateService]] aus der Klasse [[lib_de:System.Bluetooth.TBluetoothGattServer|TBluetoothGattServer]] den Dienst mit der Standard-UUID.&lt;br /&gt;
# Erstellen Sie mit der Methode [[lib_de:System.Bluetooth.TBluetoothGattServer.CreateCharacteristic|CreateCharacteristic]] aus der Klasse [[lib_de:System.Bluetooth.TBluetoothGattServer|TBluetoothGattServer]] das Merkmal für den Dienst mit der Standard-UUID.&lt;br /&gt;
# Fügen Sie mit der Methode [[lib_de:System.Bluetooth.TBluetoothGattServer.AddService|AddService]] dem GATT-Server den Dienst hinzu.&lt;br /&gt;
# Die Ereignisbehandlungsroutine [[lib_de:System.Bluetooth.Components.TBluetoothLE.OnCharacteristicReadRequest|OnCharacteristicReadRequest]] wird ausgelöst, wenn der Server eine Leseanforderung vom Clientgerät erhält.&lt;br /&gt;
# Die Ereignisbehandlungsroutine [[lib_de:System.Bluetooth.Components.TBluetoothLE.OnCharacteristicReadRequest|OnCharacteristicWriteRequest]] wird ausgelöst, wenn der Server eine Schreibanforderung vom Clientgerät erhält.&lt;br /&gt;
&lt;br /&gt;
==Nicht-Standardprofile==&lt;br /&gt;
&lt;br /&gt;
Sie können Server- und Clientanwendungen mit der BluetoothLE-Technologie ohne GATT-Profile erstellen, das heißt, dass Sie eigene Dienste und Merkmale für die private Kommunikation zwischen Server und Clientgeräten erstellen können. &lt;br /&gt;
&lt;br /&gt;
Für Nicht-Standardprofile muss eine 128-Bit-UUID verwendet werden, die zufällig generiert werden muss.&lt;br /&gt;
&lt;br /&gt;
Jedes Bluetooth LE-Gerät, das als GATT-Server fungiert, muss den offiziellen Dienst für den allgemeinen Zugriff (Generic Access) mit den Merkmalen Gerätename und -darstellung (Device Name and Appearance) implementieren. Weitere Informationen finden Sie auf der offiziellen Website: [https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.generic_access.xml Generic Access service (EN)].&lt;br /&gt;
&lt;br /&gt;
==Hinzufügen von Unterstützung für die Hintergrundausführung unter iOS==&lt;br /&gt;
&lt;br /&gt;
Wenn für Ihre iOS-Anwendung die weitere Ausführung bestimmter Dienste im Hintergrund erforderlich ist, sollten Sie die Werte des Schlüssels [https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/plist/info/UIBackgroundModes {{Code|UIBackgroundModesProject}}] auf der Seite &#039;&#039;&#039;[[Versionsinformationen|Versionsinformationen]]&#039;&#039;&#039; angeben, bevor Sie [[Bereitstellen von iOS-Anwendungen für die Übermittlung an den App Store|Ihre fertige Anwendung weitergeben]].&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Wenn Sie Ihre Anwendung beim Auftreten eines Bluetooth-Ereignisses &amp;quot;aufwecken&amp;quot; müssen, fügen Sie dem Schlüssel {{Code|UIBackgroundModesProject}} die folgenden Stringwerte hinzu:&lt;br /&gt;
:* {{Code|bluetooth-central}}: Wenn Ihre Anwendung die zentrale Rolle übernimmt.&lt;br /&gt;
:* {{Code|bluetooth-peripherical}}: Wenn Ihre Anwendung eine periphere Rolle übernimmt.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW1 Core Bluetooth Background Processing for iOS Apps (EN)].&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Verwenden von Bluetooth|Verwenden von Bluetooth]]&lt;br /&gt;
* [[Verwenden von Classic Bluetooth|Verwenden von Classic Bluetooth]]&lt;br /&gt;
* [[Verwenden von Beacons|Verwenden von Beacons]]&lt;br /&gt;
* [[samp_en:FMX.Heart Rate Monitor Sample|FMX.Heart Rate Monitor (Beispiel)]]&lt;br /&gt;
* [[lib_de:System.Bluetooth|System.Bluetooth]]&lt;br /&gt;
* [http://developer.bluetooth.org/gatt/profiles/Pages/ProfilesHome.aspx GATT Specifications for Standard Profiles (EN)]&lt;br /&gt;
* [https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW1 Core Bluetooth Background Processing for iOS Apps (EN)]&lt;br /&gt;
&lt;br /&gt;
[[Category:XE7]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using Bluetooth Low Energy]]&lt;br /&gt;
[[fr:Utilisation du Bluetooth Low Energy]]&lt;br /&gt;
[[ja:Bluetooth LE の使用]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Beacons&amp;diff=208917</id>
		<title>Verwenden von Beacons</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_Beacons&amp;diff=208917"/>
		<updated>2016-06-24T10:51:56Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{parent|Verwenden von Bluetooth}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Beacon ist ein [[Verwenden von Bluetooth Low Energy|Bluetooth Low Energy]]-Gerät, das Information in seinen Bekanntgabedaten enthält, insbesondere in den &#039;&#039;&#039;Manufacturer Specific Data&#039;&#039;&#039; (Herstellerspezifische Daten), die in &amp;quot;Bluetooth Specification Version 4.1, Seite 2023&amp;quot; [https://www.bluetooth.org/en-us https://www.bluetooth.org/en-us (EN)] beschrieben sind. Diese Informationen ermöglichen Bluetooth Low Energy-Geräten in der Umgebung, das Gerät zu identifizieren und die Entfernung dazu zu berechnen, ohne dass eine Koppelung oder die Einrichtung einer Verbindung erfolgen muss.&lt;br /&gt;
&lt;br /&gt;
==Übersicht über Beacons==&lt;br /&gt;
&lt;br /&gt;
===Plattformunterstützung===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plattform&lt;br /&gt;
! Unterstützt&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Windows(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
|&lt;br /&gt;
10+&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
OS X&lt;br /&gt;
|&lt;br /&gt;
10.7+&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
iOS&lt;br /&gt;
|&lt;br /&gt;
5+&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Android&lt;br /&gt;
|&lt;br /&gt;
4.3+&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;(*) Hinweis&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;: Die [[Verwenden der RTL (Laufzeitbibliothek)|RTL-]] [[lib_de:System.Beacon|API für Beacons]] ist nur für Windows 10+-Plattformen verfügbar. Die zwei verfügbaren Formate sind [https://developer.apple.com/ibeacon/ iBeacon] und [http://altbeacon.org/ AltBeacon]. Frühere Windows-Versionen unterstützen keine BLE-Bekanntgabedaten.&lt;br /&gt;
&lt;br /&gt;
===Beacon-Typen===&lt;br /&gt;
&lt;br /&gt;
Es sind drei Beacon-Typen verfügbar: &#039;&#039;&#039;iBeacon&#039;&#039;&#039;, &#039;&#039;&#039;AltBeacon&#039;&#039;&#039; und &#039;&#039;&#039;Eddystone&#039;&#039;&#039;. Die [[Verwenden der RTL (Laufzeitbibliothek)|RTL-]] [[lib_de:System.Beacon|API für Beacons]] unterscheidet diese mithilfe der Typen [[lib_de:System.Beacon.TBeaconScanMode|TBeaconScanMode]] und [[lib_de:System.Beacon.TKindofBeacon|TKindofBeacon]].&lt;br /&gt;
&lt;br /&gt;
Sie müssen das Format kennen, das der Beacon verwendet, den Sie überwachen möchten.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Beacon-Format&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;[[lib_de:System.Beacon.TBeaconScanMode|Modus]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;iBeacon&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Das von Apple definierte Format. Die vollständige Spezifikation finden Sie [https://developer.apple.com/ibeacon/ hier (EN)].&lt;br /&gt;
|&lt;br /&gt;
Standard&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;AltBeacon&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Offenes Format. Die vollständige Spezifikation finden Sie [http://altbeacon.org hier (EN)].&lt;br /&gt;
|&lt;br /&gt;
Alternative&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;Eddystone&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Von Google definiertes, offenes Format. Die vollständige Spezifikation finden Sie [https://github.com/google/eddystone/blob/master/protocol-specification.md hier (EN)].&lt;br /&gt;
|&lt;br /&gt;
Eddystone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Herstellerinformationen===&lt;br /&gt;
&lt;br /&gt;
Bluetooth Low Energy-Geräte im Bekanntgabemodus senden wiederholt die Bekanntgabedaten in verschiedenen Strukturen vom Typ AD. Einer der AD-Typen in den Bekanntgabedaten sind die [[lib_de:System.Bluetooth.TBluetoothLEAdvertiseData.ManufacturerSpecificData|herstellerspezifischen Daten]], die mit Beacons verwendet werden.  Abhängig vom [[#Beacon-Typen|Beacon-Format]] sind die in den herstellerspezifischen Daten beinhalteten Daten unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
Die folgende Tabelle enthält die Datenfelder, die jedes Beacon-Format bekanntgeben kann:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Bekanntgegebene Daten&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;iBeacon&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;AltBeacon&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Eddystone&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:System.TGUID|UUID]]&lt;br /&gt;
|&lt;br /&gt;
Ein eindeutiger Bezeichner, der eine Gruppe von Beacons kennzeichnet, z. B. die Beacons für eine bestimmte Firma.&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:System.Beacon.IBeacon.Major|Major]]&lt;br /&gt;
|&lt;br /&gt;
Die Major-ID bezeichnet einen Unterbereich in einem größeren durch die UUID festgelegten Bereich. &lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:System.Beacon.IBeacon.Minor|Minor]]&lt;br /&gt;
|&lt;br /&gt;
Die Minor-ID gibt einen weiteren Unterbereich in einer Major-ID an.&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:System.Beacon.TBeaconInfo.TxPower|TxPower]]&lt;br /&gt;
|&lt;br /&gt;
Die TxPower ist die gemessene Leistung in 1 Meter Entfernung. Mit TxPower und dem Indikator für die Stärke des empfangenen Signals (Received Signal Strength Indicator, [[lib_de:System.Beacon.IBeacon.Rssi|RSSI]]) wird die ungefähre Entfernung zu einem Beacon berechnet.  &lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Eddystone-Frame====&lt;br /&gt;
&lt;br /&gt;
Der Eddystone-Frame enthält eine Service-UUID, die als [[lib_de:System.Bluetooth.TBluetoothLEServiceData|ServiceData]] mit der ID {{code|0xFEAA}} bezeichnet wird.&lt;br /&gt;
&lt;br /&gt;
Der Frame akzeptiert drei Unterformat: &lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Beacon.TEddystoneUID|EddystoneUID]]: Der Beacon sendet einen Bezeichner, der aus einem [[lib_de:System.Beacon.TEddystoneUID.Namespace|Namespace]] und einer [[lib_de:System.Beacon.TEddystoneUID.Instance|Instance]] besteht.  &lt;br /&gt;
* [[lib_de:System.Beacon.TEddystoneURL|EddystoneURL]]: Der Beacon sendet einen [[lib_de:System.Beacon.TEddystoneURL.URL|URL]] in einem komprimierten Format.&lt;br /&gt;
* [[lib_de:System.Beacon.TEddystoneTLM|EddystoneTLM]]: Der Beacon sendet [[lib_de:System.Beacon.TEddystoneTLM Fields|Telemetrieinformationen]] in Bezug auf den Beacon-Status.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [https://github.com/google/eddystone/blob/master/protocol-specification.md Eddystone specifications (EN)].&lt;br /&gt;
&lt;br /&gt;
==Verwenden von Beacons==&lt;br /&gt;
&lt;br /&gt;
Mit der [[Verwenden der RTL (Laufzeitbibliothek)|RTL]]-API für Beacons können Sie den [[lib_de:System.Beacon.IBeacon.Distance|Abstand]] zwischen dem Gerät, auf dem Ihre Anwendung ausgeführt wird, und den Beacons in der Umgebung ermitteln. Die [[Verwenden der RTL (Laufzeitbibliothek)|RTL]]-API für Beacons stellt nur Informationen für die Beacons in einem bestimmten Bereich bereit. &#039;&#039;&#039;Bereich&#039;&#039;&#039; ist eine Gruppe von Beacons. Sie können einen &#039;&#039;&#039;Bereich&#039;&#039;&#039; mit [[lib_de:System.Beacon.IBeacon.GUID|UUID]], [[lib_de:System.Beacon.IBeacon.Major|MajorID]], [[lib_de:System.Beacon.IBeacon.Minor|MinorID]] (für &#039;&#039;&#039;iBeacons&#039;&#039;&#039; und &#039;&#039;&#039;AltBeacons&#039;&#039;&#039;) oder [[lib_de:System.Beacon.TEddystoneUID.Namespace|Namespace]] und [[lib_de:System.Beacon.TEddystoneUID.Instance|Instance]] (für &#039;&#039;&#039;Eddystone&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
===Abrufen einer Instanz von TBeaconManager===&lt;br /&gt;
&lt;br /&gt;
Für die Verwendung der [[Verwenden der RTL (Laufzeitbibliothek)|RTL]]-API für Beacons müssen Sie die Unit [[lib_de:System.Beacon|System.Beacon]] in Ihre Anwendung einbeziehen und [[lib_de:System.Beacon.TBeaconManager.GetBeaconManager|TBeaconManager.GetBeaconManager]] für den gewünschten [[lib_de:System.Beacon.TBeaconScanMode|TBeaconScanMode]] aufrufen, um eine Instanz von [[lib_de:System.Beacon.TBeaconManager|TBeaconManager]] abzurufen.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;iBeacons&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 BeaconManager := TBeaconManager.GetBeaconManager(TBeaconScanMode.Standard);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;AltBeacons&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 BeaconManager := TBeaconManager.GetBeaconManager(TBeaconScanMode.Alternative);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;Eddystone&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 BeaconManager := TBeaconManager.GetBeaconManager(TBeaconScanMode.Eddystone);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;Extended&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 BeaconManager := TBeaconManager.GetBeaconManager(TBeaconScanMode.Extended);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der [[lib_de:System.Beacon.TBeaconManager.ScanMode|ScanMode]] bezeichnet den Typ des Beacon, nach dem das System suchen soll: Standardmodus, alternativer Modus, Eddystone-Modus oder Extended-Modus. Mit dem Extended-Modus können Sie nach [[lib_de:System.Beacon.TKindofBeacon|Beacon-Arten]] gleichzeitig suchen. [[lib_de:System.Beacon.TBeaconManager|TBeaconManager]] ist die Hauptklasse der Beacon-Implementierung der RTL-API für Beacons. [[lib_de:System.Beacon.TBeaconManager|TBeaconManager]] ist für die Registrierung von Bereichen zuständig und verwaltet die Ereignisse zum Abrufen von Informationen von den Beacons. Die [[lib_de:System.Beacon.TBeaconManager|TBeaconManager]]-Instanz muss entweder für den Standardmodus, den alternativen Modus oder den Eddystone-Modus erstellt werden.&lt;br /&gt;
&lt;br /&gt;
===Registrieren der zu überwachenden Bereiche===&lt;br /&gt;
&lt;br /&gt;
Mit der [[lib_de:System.Beacon.TBeaconManager.RegisterBeacons|TBeaconManager.RegisterBeacons]]-Methode können Sie die Bereiche der Beacons registrieren, die Sie überwachen möchten. Sie müssen einen Parameter mit einem [[lib_de:System.Beacon.TBeaconsRegion|TBeaconsRegion]]-Typ überreichen, um die Informationen zum Beacon und dem Bereich anzugeben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 BeaconManager.RegisterBeacons(ABeaconRegion);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;iBeacons&#039;&#039;&#039; und &#039;&#039;&#039;AltBeacons&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Der [[lib_de:System.Beacon.TBeaconsRegion|TBeaconsRegion]]-Typparameter ist auf [[lib_de:System.Beacon.TiBAltBeaconRegion|TiBAltBeaconRegion]] gesetzt.&lt;br /&gt;
* Bereiche sind mit den Parametern [[lib_de:System.Beacon.IBeacon.GUID|UUID]], [[lib_de:System.Beacon.IBeacon.Major|MajorID]] und [[lib_de:System.Beacon.IBeacon.Minor|MinorID]] angegeben. Zum Registrieren einer Region wird nur der Parameter [[lib_de:System.Beacon.IBeacon.GUID|UUID]] benötigt. Falls Sie den Bereich, den Sie registrieren möchten, genauer angeben möchten, können Sie auch [[lib_de:System.Beacon.IBeacon.Major|MajorID]], [[lib_de:System.Beacon.IBeacon.Minor|MinorID]] oder beide verwenden. &lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;Eddystone&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Der [[lib_de:System.Beacon.TBeaconsRegion|TBeaconsRegion]]-Typparameter ist auf [[lib_de:System.Beacon.TEddysUIDRegion|TEddysUIDRegion]] gesetzt.&lt;br /&gt;
* Bereiche werden für das [[lib_de:System.Beacon.IEddystoneBeacon.EddystoneUID|EddystoneUID]]-Format mit einem [[lib_de:System.Beacon.TEddystoneUID.Namespace|Namespace]] und einer [[lib_de:System.Beacon.TEddystoneUID.Instance|Instance]] angegeben. Zum Registrieren eines Bereichs ist nur der Parameter [[lib_de:System.Beacon.TEddystoneUID.Namespace|Namespace]] erforderlich. Wenn Sie den zu registrierenden Bereich detaillierter angeben möchten, können Sie sowohl einen [[lib_de:System.Beacon.TEddystoneUID.Namespace|Namespace]] als auch eine [[lib_de:System.Beacon.TEddystoneUID.Instance|Instance]] verwenden.&lt;br /&gt;
&lt;br /&gt;
===Suchen von Beacons===&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;registrierte&#039;&#039;&#039; Beacons:&lt;br /&gt;
Das frühere Framework setzte Folgendes voraus:&lt;br /&gt;
&lt;br /&gt;
#[[#Registrieren der zu überwachenden Bereiche|Registrieren]] der zu überwachenden Beacons.&lt;br /&gt;
# [[lib_de:System.Beacon.TBeaconManager.StartScan|Beginnen]] der Überwachung der registrierten Beacons. &lt;br /&gt;
# [[lib_de:System.Beacon.TBeaconManager.StopScan|Beenden]] der Überwachung der registrierten Beacons.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;nicht registrierte&#039;&#039;&#039; Beacons:&lt;br /&gt;
Die Neuerungen des Suchvorgangs ermöglichen es, gleichzeitig nach verschiedenen nicht registrierten Beacon-Arten zu suchen:&lt;br /&gt;
&lt;br /&gt;
# Legen Sie den Modus [[lib_de:System.Beacon.TBeaconScanMode|Extended]] fest.&lt;br /&gt;
# Wählen Sie die zu überwachenden Formate mit dem Typ [[lib_de:System.Beacon.TKindofBeacon|TKindofBeacon]] aus.&lt;br /&gt;
# Setzen Sie die zu überwachenden Beacons auf die Eigenschaft [[lib_de:System.Beacon.Components.TCustomBeacon.ModeExtended|ModeExtended]].&lt;br /&gt;
# [[lib_de:System.Beacon.TBeaconManager.StartScan|Beginnen]] Sie die Überwachung nicht registrierter Beacons. &lt;br /&gt;
# [[lib_de:System.Beacon.TBeaconManager.StopScan|Beenden]] Sie die Überwachung nicht registrierter Beacons.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Falls Sie zuvor Beacons registriert haben, rufen die letzten Schritte nur registrierte Beacons und [[lib_de:System.Beacon.TEddystoneURL|EddystoneURL]]-Beacons ab, die als einzige nicht registriert sind.&lt;br /&gt;
&lt;br /&gt;
===Abrufen von Informationen von eingehenden Beacons===&lt;br /&gt;
&lt;br /&gt;
Für weitere Informationen fragen Sie den Hauptbeacon-Schnittstelle ([[lib_de:System.Beacon.IBeacon|IBeacon]]) zur [[lib_de:System.Beacon.IBeacon.KindofBeacon|Art des Beacons]], der überwacht wird. Dann können Sie die bestimmte Beacon-Schnittstelle verwenden: [[lib_de:System.Beacon.IiBeacon|IiBeacon]] für &#039;&#039;&#039;iBeacon&#039;&#039;&#039;, [[lib_de:System.Beacon.IAltBeacon|IAltBeacon]] für &#039;&#039;&#039;AltBeacon&#039;&#039;&#039; oder [[lib_de:System.Beacon.IEddystoneBeacon|IEddystoneBeacon]] für &#039;&#039;&#039;Eddystone&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Mit den Ereignissen, die mit [[lib_de:System.Beacon.TBeaconManager|TBeaconManager]] assoziiert sind, erhalten Sie weitere Informationen über die überwachten Beacons. Jedes [[#Beacon-Typen|Beaconformat]] stellt eine Gruppe von Ereignissen bereit:&lt;br /&gt;
&lt;br /&gt;
#Für &#039;&#039;&#039;iBeacons&#039;&#039;&#039; und &#039;&#039;&#039;AltBeacons&#039;&#039;&#039;:&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnCalcDistance|OnCalcDistance]]: Wir sofort ausgelöst, bevor die Entfernung ([[lib_de:System.Beacon.IBeacon.Distance|Distance]]) errechnet wird.&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnEnterRegion|OnEnterRegion]]: Wird ausgelöst, wenn ein Beacon zum ersten Mal aus einem registrierten Bereich erreichbar ist.&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnExitRegion|OnExitRegion]]: Wird ausgelöst, wenn alle registrierten Beacons in einem Bereich unerreichbar sind.&lt;br /&gt;
#:Nach Auslösen des Ereignisses können Sie die von dem Ereignis bereitgestellten Informationen verwenden.&lt;br /&gt;
#::&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Wenn Sie mehrere [[lib_de:System.Beacon.Components.TBeaconRegionItem|Bereichseinträge]] mit derselben [[lib_de:System.Beacon.Components.TBeaconRegionItem.UUID|UUID]] [[lib_de:System.Beacon.TBeaconManager.RegisterBeacon|registrieren]] und Sie diese überwachen möchten, können Sie aufgrund von plattformübergreifenden Anforderungen nur Ereignisse des letzten Bereichseintrags, den Sie in der [[lib_de:System.Beacon.Components.TBeaconRegionCollection|TBeaconRegionCollection]] registriert haben, abrufen. Wenn Sie verschiedene Bereiche überwachen möchten, können Sie abhängig von Ihrem Szenario eine der beiden folgenden Vorgehensweisen anwenden:&lt;br /&gt;
#::*Registrieren Sie einen Bereich mit dessen &#039;&#039;&#039;UUID&#039;&#039;&#039;, &#039;&#039;&#039;MajorID&#039;&#039;&#039;=-1 und &#039;&#039;&#039;MinorID&#039;&#039;&#039;=-1, um Ereignisse zu erhalten, die allen Beacons mit derselben &#039;&#039;&#039;UUID&#039;&#039;&#039; zugeordnet sind.&lt;br /&gt;
#::*Registrieren Sie einen Bereich mit dessen &#039;&#039;&#039;UUID&#039;&#039;&#039;, und entwickeln Sie Ihre App so, dass &#039;&#039;&#039;MajorID&#039;&#039;&#039; und &#039;&#039;&#039;MinorID&#039;&#039;&#039; Ihren benutzerdefinierten Werten und App-Anforderungen entsprechend gefiltert werden.&lt;br /&gt;
# Für &#039;&#039;&#039;Eddystone&#039;&#039;&#039;:&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnNewEddystoneURL|OnNewEddystoneURL]]: Wird jedes Mal ausgelöst, wenn ein neuer [[lib_de:System.Beacon.TEddystoneURL|EddystoneURL]]-Beacon gefunden wurde.&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnNewEddystoneTLM|OnNewEddystoneTLM]]: Wird jedes Mal ausgelöst, wenn ein neuer [[lib_de:System.Beacon.TEddystoneTLM|EddystoneTLM]]-Beacon gefunden wurde.&lt;br /&gt;
#Für &#039;&#039;&#039;jedes&#039;&#039;&#039; Beacon-Format:&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnCalculateDistances|OnCalculateDistances]]: Wird kurz vor der Berechnung der Distanz zu einem Beacon ausgelöst. &lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnBeaconEnter|OnBeaconEnter]]: Wird jedes Mal ausgelöst, wenn eine neuer Beacon erreichbar ist.&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnBeaconsEnterRegion|OnBeaconsEnterRegion]]: Wird jedes Mal ausgelöst, wenn ein neuer Beacon in einem Bereich erkannt wird. Die Beacon- und Bereichsinformationen werden beide mit dem [[lib_de:System.Beacon.TBeaconsRegion|TBeaconsRegion]]-Typ angegeben.&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnBeaconExit|OnBeaconExit]]: Wird jedes Mal ausgelöst, wenn ein Beacon unerreichbar wird.&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnBeaconsExitRegion|OnBeaconsExitRegion]]: Wird jedes Mal ausgelöst, wenn ein registrierter Beacon in einem Bereich nicht mehr vorhanden ist. Beacon- und Bereichsinformationen werden mit dem [[lib_de:System.Beacon.TBeaconsRegion|TBeaconsRegion]]-Typ angegeben.&lt;br /&gt;
#*[[lib_de:System.Beacon.TBeaconManager.OnBeaconProximity|OnBeaconProximity]]: Wird jedes Mal ausgelöst, wenn sich der [[lib_de:System.Beacon.IBeacon.Proximity|Proximity]]-Wert ändert.&lt;br /&gt;
&lt;br /&gt;
====Beispiel====&lt;br /&gt;
&lt;br /&gt;
Das folgende Codefragment zeigt, wie ein [[lib_de:System.Beacon.TBeaconManager.OnBeaconEnter|OnBeaconEnter]]-Ereignis verwendet wird. Um die benötigten Beaconinformationen von diesem Ereignis zu erhalten, folgen Sie den folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Fragen Sie die [[lib_de:System.Beacon.IBeacon|Beacon-Schnittstelle]] zur Art des überwachten Beacons. Verwenden Sie aus diesem Grund die [[lib_de:System.Beacon.IBeacon.KindofBeacon|KindofBeacon]]-Eigenschaft.&lt;br /&gt;
# Fragen Sie nach der bestimmten Schnittstelle:&lt;br /&gt;
#* [[lib_de:System.Beacon.IiBeacon|IiBeacon]] für &#039;&#039;&#039;iBeacon&#039;&#039;&#039;.&lt;br /&gt;
#* [[lib_de:System.Beacon.IAltBeacon|IAltBeacon]] für &#039;&#039;&#039;AltBeacon&#039;&#039;&#039;.&lt;br /&gt;
#* [[lib_de:System.Beacon.IEddystoneBeacon|IEddystoneBeacon]] für &#039;&#039;&#039;Eddystone&#039;&#039;&#039;.&lt;br /&gt;
# Code für dieses Ereignis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TForm1.Beacon1BeaconEnter(const Sender: TObject;&lt;br /&gt;
          const ABeacon: IBeacon; const CurrentBeaconList: TBeaconList);&lt;br /&gt;
var&lt;br /&gt;
   LEddyHandler: IEddystoneBeacon;&lt;br /&gt;
   LiBeacon: IiBeacon;&lt;br /&gt;
   LAltBeacon: IAltBeacon;&lt;br /&gt;
   ST: string;&lt;br /&gt;
begin&lt;br /&gt;
   case ABeacon.KindofBeacon of&lt;br /&gt;
   TKindofBeacon.iBeacons:&lt;br /&gt;
      if (Supports(ABeacon, IiBeacon, LiBeacon)) then&lt;br /&gt;
         ST := &#039; GUID: &#039; + LiBeacon.GUID.ToString;&lt;br /&gt;
      // code&lt;br /&gt;
   TKindofBeacon.AltBeacons:&lt;br /&gt;
      if (Supports(ABeacon, IAltBeacon, LAltBeacon)) then&lt;br /&gt;
         ST := &#039; GUID: &#039; + LAltBeacon.GUID.ToString;&lt;br /&gt;
      // code&lt;br /&gt;
   TKindofBeacon.Eddystones:&lt;br /&gt;
      if (Supports(ABeacon, IEddystoneBeacon, LEddyHandler)) then&lt;br /&gt;
         ST := LEddyHandler.EddystoneUID.NamespaceToString;&lt;br /&gt;
      // code&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hinzufügen von Positionsdiensten==&lt;br /&gt;
&lt;br /&gt;
Positionsdienste ermöglichen, positionsbasierten Apps anhand von Informationen von Mobiltelefonen, WiFi, GPS und Beacons Ihren ungefähren Standort zu ermitteln. Zur Ermittlung von Beacons müssen Sie die Positionsdienste aktivieren.&lt;br /&gt;
&lt;br /&gt;
Für Android müssen Sie die Bluetooth-Optionen in &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; Optionen &amp;amp;gt; Verwendet Berechtigungen&#039;&#039;&#039;&amp;lt;/font&amp;gt; aktivieren.&lt;br /&gt;
&lt;br /&gt;
Für die iOS-Plattform im alternativen Modus müssen die Positionsdienste nicht aktiviert werden. Im Standardmodus (iBeacons) muss die Anforderung der Positionsaktivierung beim ersten Aufruf der App akzeptiert werden.&lt;br /&gt;
&lt;br /&gt;
Für iOS 8.0 im Standardmodus sind bestimmte Schlüssel erforderlich, damit die Anwendung für die Verwendung der für die Beacon-Ermittlung benötigten Positionsdienste aktiviert wird. Die IDE bezieht bereits {{Code|NSLocationAlwaysUsageDescription}} und {{Code|NSLocationWhenInUseUsageDescription}} ein.&lt;br /&gt;
&lt;br /&gt;
Der folgende Schlüssel muss manuell hinzugefügt werden:&lt;br /&gt;
&lt;br /&gt;
*{{Code|NSLocationUsageDescription}}&lt;br /&gt;
&lt;br /&gt;
Für die Werte ist nur eine Textmeldung wie z. B. &amp;quot;Diese App muss auf Positionsdienste zugreifen, um Beacons zu überwachen&amp;quot; erforderlich. Das System zeigt die Textmeldung beim Zugriff auf die App-Konfiguration an.&lt;br /&gt;
&lt;br /&gt;
Der Schlüssel kann in der IDE hinzugefügt werden: Wählen Sie &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; Optionen &amp;amp;gt; Versionsinformationen&#039;&#039;&#039;&amp;lt;/font&amp;gt;, klicken Sie dann mit der rechten Maustaste auf die Tabelle, und wählen Sie &#039;&#039;&#039;Schlüssel hinzufügen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:BeaconKeysFig1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Einschränkungen in Räumen==&lt;br /&gt;
&lt;br /&gt;
Das Funksignal, das Beacons senden, ist hochempfindlich gegenüber Rauscheffekten, wie Diffraktion, Absorption, Mehrwegreflexionen oder Störungen, die von anderen Geräten herrühren, die in demselben Funkfrequenzband senden. Insbesondere wirken sich diese schädlichen Einflüsse negativ auf das Signal des Beacon in Innenräumen aus. Als Ergebnis sind die aus Leistungsmessungen extrahierten Schätzwerte, wie [[lib_de:System.Beacon.IBeacon.Rssi|Rssi]] (Stärke des empfangenen Signals), [[lib_de:System.Beacon.IBeacon.Distance|Distance]] (Entfernung) oder [[lib_de:System.Beacon.IBeacon.Proximity|Proximity]] (Näherungsstufe), erheblich instabil und unterliegen starken Schwankungen. Demgemäß nimmt die Genauigkeit dieser Schätzwerte ab.&lt;br /&gt;
&lt;br /&gt;
===Signalverarbeitung===&lt;br /&gt;
&lt;br /&gt;
Die RTL stellt zwei verschiedene Algorithmen bereit, um das Signal eines Beacon und die aus diesem Signal extrahierten Schätzwerte zu stabilisieren:&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Bluetooth.TBluetoothLEManager.RssiToDistance|RssiToDistance]] führt ein Modell ein, mit dem der aus den &#039;&#039;&#039;Rssi&#039;&#039;&#039;-Messungen abgeleitete &#039;&#039;&#039;Entfernungsschätzwert&#039;&#039;&#039; ermittelt werden kann. Die Robustheit dieses Algorithmus wird durch einen kalibrierten Leistungsparameter, {{Arg|ATxPower}}, erhöht.&lt;br /&gt;
* [[lib_de:System.Beacon.TBeaconManager|TBeaconManager]] implementiert einen optionalen &#039;&#039;&#039;Differentialfilter&#039;&#039;&#039;-Algorithmus. Dieser Algorithmus stabilisiert die &#039;&#039;&#039;Rssi&#039;&#039;&#039;- und &#039;&#039;&#039;Entfernungs&#039;&#039;&#039;-Messungen. Wählen Sie bei der Eigenschaft [[lib_de:System.Beacon.TBeaconManager.CalcMode|CalcMode]] den Berechnungsmodus &#039;&#039;&#039;Stabilized&#039;&#039;&#039; aus, um diesen Algorithmus zu aktivieren. Dieser Modus ist insbesondere für die Näheschätzung und die Bewegungserkennung geeignet.&lt;br /&gt;
&lt;br /&gt;
===Integrieren von Algorithmen===&lt;br /&gt;
&lt;br /&gt;
Sie können auch weitere Algorithmen für die Signalverarbeitung integrieren, wobei es sich um allgemeine oder von Ihnen selbst entwickelte Algorithmen handeln kann. Die folgende Liste enthält einige Beispielfilter, die Sie zur Reduzierung von Rauscheffekten implementieren können:&lt;br /&gt;
&lt;br /&gt;
* Bewegungsmittelungsfilter&lt;br /&gt;
* Gewichtete Durchschnittsfilter&lt;br /&gt;
* Kurvenanpassungsfilter&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
*[[Verwenden von Bluetooth Low Energy|Verwenden von Bluetooth Low Energy]]&lt;br /&gt;
*[[lib_de:System.Beacon|System.Beacon]]&lt;br /&gt;
*[[lib_de:System.Beacon.TBeaconManager|TBeaconManager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XE8]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using Beacons]]&lt;br /&gt;
[[fr:Utilisation des beacons]]&lt;br /&gt;
[[ja:ビーコンの使用]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_App-Tethering&amp;diff=208916</id>
		<title>Verwenden von App-Tethering</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verwenden_von_App-Tethering&amp;diff=208916"/>
		<updated>2016-06-24T10:48:07Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Verwenden der RTL in geräteübergreifenden Anwendungen}}&lt;br /&gt;
&lt;br /&gt;
Die [[Verwenden der RTL (Laufzeitbibliothek)|RTL]] enthält &#039;&#039;&#039;App-Tethering&#039;&#039;&#039;-Komponenten, über die Ihre Anwendungen mit anderen Anwendungen auf demselben oder einem Remote-Gerät interagieren können.&lt;br /&gt;
&lt;br /&gt;
Mit App-Tethering können Anwendungen sehr einfach:&lt;br /&gt;
&lt;br /&gt;
* [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering|Andere Anwendungen ermitteln, die das App-Tethering verwenden]]und auf demselben Gerät wie Ihre Anwendung oder auf anderen angeschlossenen Geräten ausgeführt werden.&lt;br /&gt;
* [[Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering|Aktionen remote ausführen]]. Eine Anwendung kann mit App-Tethering Aktionen veröffentlichen. Andere Anwendungen können dann diese Aktionen in der ersten Anwendung remote aufrufen.&lt;br /&gt;
* [[Teilen von Daten mit Remote-Anwendungen mithilfe von App-Tethering|Daten zwischen Anwendungen teilen]]. App-Tethering ermöglicht das Teilen von Standarddatentypen und Streams. &lt;br /&gt;
&lt;br /&gt;
Die App-Tethering-Funktion ist nicht von einem speziellen Transport oder Protokoll abhängig, und neue Protokolle können mit der [[lib_de:System.Tether|App-Tethering-API]] implementiert werden. Die RTL bietet integrierte Unterstützung für IP- und [[Verwenden von Classic Bluetooth|Classic Bluetooth]]-Verbindungen, einschließlich der Verbindung zwischen Anwendungen, die auf demselben Gerät ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
==Plattformunterstützung==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plattform&lt;br /&gt;
! IP-Verbindungen&lt;br /&gt;
! Classic Bluetooth-Verbindungen&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Windows&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
OS X&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
iOS&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Android&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Themen==&lt;br /&gt;
&lt;br /&gt;
* [[Hinzufügen von App-Tethering zu Anwendungen|Hinzufügen von App-Tethering zu Anwendungen]]&lt;br /&gt;
* [[Verbinden zu Remote-Anwendungen mithilfe von App-Tethering|Verbinden zu Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
* [[Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering|Teilen und Ausführen von Aktionen für Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
* [[Teilen von Daten mit Remote-Anwendungen mithilfe von App-Tethering|Teilen von Daten mit Remote-Anwendungen mithilfe von App-Tethering]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=oeyGzuC_QqU&amp;amp;index=6&amp;amp;list=PLwUPJvR9mZHikVu-FgmXg2ajAagF8OPgh YouTube: App Tethering with Bluetooth ({{Delphi}}) (EN)]&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:System.Tether|System.Tether]]&lt;br /&gt;
&lt;br /&gt;
* [[samp_en:RTL.BDShoppingList Sample|BDShoppingList]] Beispiel&lt;br /&gt;
* [[samp_en:RTL.DesktopCast Sample|DesktopCast]] Beispiel&lt;br /&gt;
* [[samp_en:RTL.MediaPlayer Sample|MediaPlayer]] Beispiel&lt;br /&gt;
* [[samp_en:RTL.PhotoWall Sample|PhotoWall]] Beispiel&lt;br /&gt;
&lt;br /&gt;
* [[Verwenden von Bluetooth|Verwenden von Bluetooth]]&lt;br /&gt;
* [[Verwenden eines HTTP-Clients|Verwenden eines HTTP-Clients]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XE6]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Using App Tethering]]&lt;br /&gt;
[[fr:Utilisation du tethering d&#039;app]]&lt;br /&gt;
[[ja:アプリケーション テザリングの使用]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=UnixODBC_(FireDAC)&amp;diff=208915</id>
		<title>UnixODBC (FireDAC)</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=UnixODBC_(FireDAC)&amp;diff=208915"/>
		<updated>2016-06-24T10:47:54Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Geräteübergreifende Entwicklung (FireDAC)}}&lt;br /&gt;
&lt;br /&gt;
==Allgemeine Informationen==&lt;br /&gt;
&lt;br /&gt;
FireDAC {{f|linux|unter Linux und }}OS X verwendet [http://www.unixodbc.org/ UnixODBC (EN)] für den Zugriff auf:&lt;br /&gt;
&lt;br /&gt;
* [[Herstellen einer Verbindung zu IBM DB2 Server (FireDAC)|IBM DB2]]&lt;br /&gt;
* [[Herstellen einer Verbindung zu Informix (FireDAC)|Informix]]&lt;br /&gt;
* [[Herstellen einer Verbindung zu Microsoft SQL Server (FireDAC)|SQL Server]]&lt;br /&gt;
* [[Herstellen einer Verbindung zu Sybase SQL Anywhere (FireDAC)|SQL Anywhere]]&lt;br /&gt;
* [[Herstellen einer Verbindung zu Teradata Database (FireDAC)|Teradata]]&lt;br /&gt;
* Andere [[Herstellen einer Verbindung zu ODBC-Datenquellen (FireDAC)|ODBC]]-basierte Datenquellen. &lt;br /&gt;
&lt;br /&gt;
FireDAC verwendet &#039;&#039;&#039;libodbc.so&#039;&#039;&#039; oder die gemeinsame &#039;&#039;&#039;.dylib&#039;&#039;&#039;-Bibliothek, um auf die ODBC-API zuzugreifen. Normalerweise befindet sich diese im Ordner &#039;&#039;&#039;/usr/local/lib&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Häufig ist das mit dem Betriebssystem installierte UnixODBC:&lt;br /&gt;
&lt;br /&gt;
* veraltet{{f|linux| auf den meisten Linux-Distributionen;}}&lt;br /&gt;
* nicht korrekt konfiguriert{{f|linux| auf den meisten Linux-Distributionen;}}&lt;br /&gt;
* oder nicht installiert, wie unter OS X. &lt;br /&gt;
&lt;br /&gt;
Wenn UnixODBC installiert ist, sollten Sie es daher optional erneut installieren.&lt;br /&gt;
&lt;br /&gt;
Sie müssen entscheiden, welche UnixODBC-Version verwendet werden soll und wie sie installiert werden soll:&lt;br /&gt;
{{f|linux|* Linux:&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
** Wählen Sie die [https://msdn.microsoft.com/en-us/library/hh568449%28v=sql.110%29.aspx spezielle Installation (EN)], wenn Sie den &#039;&#039;&#039;Microsoft SQL Server ODBC&#039;&#039;&#039;-Treiber für Linux unter &#039;&#039;&#039;Red Hat Enterprise Linux&#039;&#039;&#039; oder &#039;&#039;&#039;SUSE Linux Enterprise&#039;&#039;&#039; verwenden möchten.&lt;br /&gt;
** Verwenden Sie die Standard-UnixODBC-Version und -Installation, wenn Sie mit Linux keine Erfahrung haben.&lt;br /&gt;
** Verwenden Sie das neueste UnixODBC v 2.3.4, wenn Sie mit Linux Erfahrung haben.}}&lt;br /&gt;
* OS X:&lt;br /&gt;
** Verwenden Sie UnixODBC v 2.3.0, wenn Sie mit OS X keine Erfahrung haben.&lt;br /&gt;
** Verwenden Sie das neueste UnixODBC v 2.3.4, wenn Sie mit OS X Erfahrung haben.&lt;br /&gt;
&lt;br /&gt;
{{f|linux|&lt;br /&gt;
&lt;br /&gt;
===Installation unter Linux===&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie für die Installation von UnixODBC unter Linux die folgenden Befehle: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get remove libodbc1 unixodbc unixodbc-dev&lt;br /&gt;
wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz&lt;br /&gt;
tar -zxvf unixODBC-2.3.4.tar.gz&lt;br /&gt;
cd unixODBC-2.3.4&lt;br /&gt;
./configure --enable-gui=no --enable-drivers=no --enable-stats=no --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Installation unter OS X===&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie die folgenden Befehle, um UnixODBC auf OS X zu installieren: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
export CFLAGS=-m32&lt;br /&gt;
wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz&lt;br /&gt;
tar -zxvf unixODBC-2.3.4.tar.gz&lt;br /&gt;
cd unixODBC-2.3.4&lt;br /&gt;
./configure --enable-gui=no --enable-drivers=no --enable-stats=no --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{f|linux|&lt;br /&gt;
&lt;br /&gt;
===Weitere Installationsschritte===&lt;br /&gt;
&lt;br /&gt;
UnixODBC v 2.3.4 erstellt symbolische &amp;quot;.2&amp;quot;-Verknüpfungen, aber für viele ODBC-Treiber sind symbolische &amp;quot;.1&amp;quot;-Verknüpfungen erforderlich. Erstellen Sie dafür manuell symbolische &amp;quot;.1&amp;quot;-Verknüpfungen. Führen Sie beispielsweise für Ubuntu Linux die folgenden Befehle aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
sudo ln -s /usr/local/lib/libodbc.so.2.0.0 /usr/lib/x86_64-linux-gnu/libodbc.so.1&lt;br /&gt;
sudo ln -s /usr/local/lib/libodbccr.so.2.0.0 /usr/lib/x86_64-linux-gnu/libodbccr.so.1&lt;br /&gt;
sudo ln -s /usr/local/lib/libodbcinst.so.2.0.0 /usr/lib/x86_64-linux-gnu/libodbcinst.so.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:FireDAC]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:UnixODBC (FireDAC)]]&lt;br /&gt;
[[fr:UnixODBC (FireDAC)]]&lt;br /&gt;
[[ja:UnixODBC（FireDAC）]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Unit-G%C3%BCltigkeitsbereichsnamen&amp;diff=208914</id>
		<title>Unit-Gültigkeitsbereichsnamen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Unit-G%C3%BCltigkeitsbereichsnamen&amp;diff=208914"/>
		<updated>2016-06-24T10:47:32Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Einführung in RAD Studio}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unit-Gültigkeitsbereichsnamen&#039;&#039;&#039; sind Präfixe, die Unit-Namen in den {{Product}}-Bibliotheken ({{f|vcl|VCL/}}FMX/RTL) vorangestellt werden. &lt;br /&gt;
Das heißt, Namen von Units, Funktionen, Klassen und Membern enthalten einen Unit-Gültigkeitsbereichsnamen vor dem Unit-Namen:&lt;br /&gt;
&lt;br /&gt;
===Syntax und Beschreibung===&lt;br /&gt;
&lt;br /&gt;
Der Unit-Gültigkeitsbereichsname steht vor dem Unit-Namen:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;unitscope&amp;amp;gt;.&amp;amp;lt;unitname&amp;amp;gt;. ...&lt;br /&gt;
&lt;br /&gt;
Beispielsweise ist die Unit &#039;&#039;&#039;SysUtils&#039;&#039;&#039; {{f|radstudio|jetzt}} Teil des Unit-Gültigkeitsbereichs &#039;&#039;&#039;System&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 System.SysUtils&lt;br /&gt;
&lt;br /&gt;
und die Unit &#039;&#039;&#039;Controls&#039;&#039;&#039; ist Teil des Unit-Gültigkeitsbereichs {{f|vcl|&#039;&#039;&#039;Vcl&#039;&#039;&#039; oder }} &#039;&#039;&#039;FMX&#039;&#039;&#039;: {{f|vcl|&lt;br /&gt;
&lt;br /&gt;
 Vcl.Controls  }}&lt;br /&gt;
 FMX.Controls&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&#039;&#039;&#039;Unit-Gültigkeitsbereichsnamen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Ordnen Units in Basisgruppen, wie {{f|vcl|Vcl,}} System, FMX usw., ein (Unit-Gültigkeitsbereiche sind in [[#Unit-Gültigkeitsbereiche|Unit-Gültigkeitsbereiche]] klassifiziert).&lt;br /&gt;
* Stellen die Kompatibilität des in der IDE geschriebenen Codes sicher.&lt;br /&gt;
* Differenzieren Member, deren Namen mehrdeutig sind (d. h. stellen eine korrekte Namensauflösung sicher, wenn der Name eines Member mit dem Namen eines Member einer anderen Unit übereinstimmt).&lt;br /&gt;
* Beginnen normalerweise mit einem einzelnen Großbuchstaben gefolgt von Kleinbuchstaben (wie &#039;&#039;&#039;Data&#039;&#039;&#039;).&lt;br /&gt;
* Bestehen normalerweise aus einem Element {{f|datasnap| (wie z. B. &#039;&#039;&#039;DataSnap&#039;&#039;&#039;)}}, es sind aber auch zwei Elemente möglich (wie &#039;&#039;&#039;System.Generics&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Komponentenentwickler&#039;&#039;&#039; können Unit-Gültigkeitsbereichsnamen hinzufügen (siehe [[Hinzufügen von Unit-Gültigkeitsbereichsnamen für eigene Komponenten|Hinzufügen von Unit-Gültigkeitsbereichsnamen für eigene Komponenten]]).&lt;br /&gt;
&lt;br /&gt;
==Voll qualifizierte Namen müssen den Unit-Gültigkeitsbereichsnamen enthalten==&lt;br /&gt;
&lt;br /&gt;
{{f|radstudio|&lt;br /&gt;
Mit einer besonderen Ausnahme sollte alter Code weiterhin ohne Änderungen funktionsfähig sein. Diese Ausnahme bezieht sich auf &#039;&#039;&#039;bereichsabhängige oder qualifizierte Bezeichner&#039;&#039;&#039; im Code selbst.  Für voll qualifizierte Bezeichnernamen sind jetzt Unit-Gültigkeitsbereiche erforderlich. Das bedeutet, dass Änderungen für die Compilierung bei Verwendung von qualifizierten Bezeichnern in Ihrem vorhandenen Code (der nicht von Unit-Gültigkeitsbereichen abhängig war) erforderlich sind. Sie müssen dem Unit-Namen den Unit-Gültigkeitsbereichsnamen hinzufügen.  }}&lt;br /&gt;
&lt;br /&gt;
Beispielsweise lautet {{f|radstudio|der voll qualifizierte Bezeichner}}{{f|appmethod|ein teilweise qualifizierter Bezeichner}} der Klasse [[lib_de:System.Classes.TStream|TStream]]{{f|radstudio|, den Sie in früheren Produkt-Releases angegeben hätten,}} folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;Classes.TStream&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Name &#039;&#039;&#039;Classes.TStream&#039;&#039;&#039; gilt nun nicht mehr als voll qualifizierter Klassenname, weil voll qualifizierte Klassennamen jetzt einen &#039;&#039;&#039;Unit-Gültigkeitsbereich&#039;&#039;&#039; enthalten müssen, das heißt, der Unit-Gültigkeitsbereichsname muss angegeben sein. In diesem Fall muss dem Unit-Namen &#039;&#039;&#039;Classes&#039;&#039;&#039; der Unit-Gültigkeitsbereichsname &#039;&#039;&#039;System&#039;&#039;&#039; hinzugefügt werden, um einen Unit-gültigkeitsbereichsabhängigen oder voll qualifizierten Namen zu erhalten und zwar folgendermaßen: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;In {{Delphi}}&#039;&#039;&#039; lautet der voll qualifizierte Bezeichnername für &#039;&#039;&#039;TStream&#039;&#039;&#039;: &lt;br /&gt;
*:&amp;lt;code&amp;gt;System.Classes.TStream  &amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;In C++&#039;&#039;&#039; verwenden Unit-Gültigkeitsbereichsnamen den C++-Gültigkeitsbereichsoperator (&amp;lt;code&amp;gt;::&amp;lt;/code&amp;gt;). Der voll qualifizierte Name für die Klasse &#039;&#039;&#039;TStream&#039;&#039;&#039; lautet in C++-Code:&lt;br /&gt;
*:&amp;lt;code&amp;gt;System::Classes::TStream &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{f|radstudio|&lt;br /&gt;
&#039;&#039;&#039;Mögliche Codeänderungen:&#039;&#039;&#039; Wenn in Ihrem vorhandenen Code qualifizierte Bezeichner (wie &amp;lt;code&amp;gt;&#039;&#039;&#039;Classes.TStream.Seek&#039;&#039;&#039;&amp;lt;/code&amp;gt;) enthalten sind, müssen Sie den Namen die Unit-Gültigkeitsbereiche hinzufügen, damit sie voll qualifiziert sind (wie &#039;&#039;&#039;&amp;lt;code&amp;gt;System.Classes.TStream.Seek&amp;lt;/code&amp;gt;&#039;&#039;&#039;).   }}&lt;br /&gt;
&lt;br /&gt;
===Angeben von Unit-Gültigkeitsbereichsnamen für Units im Quellcode===&lt;br /&gt;
&lt;br /&gt;
Beim Entwickeln neuer Anwendungen müssen Sie den Unit-Gültigkeitsbereich für Units angeben. Dazu stehen Ihnen verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Überall:&#039;&#039;&#039; &lt;br /&gt;
*: Qualifizieren Sie alle Namen aller Member in Ihrem gesamten Code vollständig. Die Verwendung einer vollständigen Qualifizierung, einschließlich von Unit-Gültigkeitsbereichsnamen, in Ihrer gesamten Anwendung gewährleistet die schnellste Compilierung. &lt;br /&gt;
*&#039;&#039;&#039;Uses-Klausel oder #includes:&#039;&#039;&#039; &lt;br /&gt;
*: Qualifizieren Sie Unit-Namen (mit dem Unit-Gültigkeitsbereich und den Unit-Namen) in der &amp;lt;code&amp;gt;uses&amp;lt;/code&amp;gt;-Klausel oder der &amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt;-Anweisung vollständig. In Ihrem Code können Sie dann die Namen von Membern derjenigen Units teilweise qualifizieren, für die Sie in der &amp;lt;code&amp;gt;uses&amp;lt;/code&amp;gt;-Klausel oder der &amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt;-Anweisung voll qualifizierte Unit-Namen (mit dem Unit-Gültigkeitsbereich) verwendet haben.&lt;br /&gt;
*&#039;&#039;&#039;In Projektoptionen:&#039;&#039;&#039; &lt;br /&gt;
*: Fügen Sie auf der Seite [[Delphi-Compiler|{{Delphi}}-Compiler]] des Dialogfeldes &amp;quot;Projektoptionen&amp;quot; der Option &#039;&#039;&#039;Unit-Gültigkeitsbereichsnamen&#039;&#039;&#039; die Unit-Gültigkeitsbereichsnamen hinzu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;[[Image:YellowBang.png]]Achtung:&#039;&#039;&#039; Die Verwendung von &#039;&#039;&#039;teilweise qualifizierten Namen&#039;&#039;&#039; kann die Compilierung signifikant verlangsamen, weil die Compiler alle teilweise qualifizierten Namen während der Compilierung auflösen müssen. &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==={{Variables|Product}} verwendet Unit-Gültigkeitsbereiche und in der Hilfe werden ebenfalls Unit-Gültigkeitsbereichsnamen verwendet===&lt;br /&gt;
&lt;br /&gt;
In den Experten und Vorlagen in {{Variables|Product}} werden jetzt korrekte Unit-Gültigkeitsbereichsnamen verwendet und einbezogen.  In der Hilfe werden bei einigen Vorkommen von Unit-, Klassen- und Member-Namen keine Unit-Gültigkeitsbereichsnamen verwendet. In den Seitentiteln der [[lib_de:Main Page|Bibliotheksdokumentation]] sind jedoch die vollständigen Unit-Gültigkeitsbereichsnamen enthalten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Beispiel====&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr Code Folgendes enthält:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
 uses&lt;br /&gt;
   System.SysUtils, System.Types, System.Classes, FMX.Controls;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
oder:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;System.SysUtils.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Types.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;System.Classes.hpp&amp;gt;&lt;br /&gt;
#include &amp;lt;FMX.Controls.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
können Sie in Ihrem Code unqualifizierte Member-Namen wie folgt angeben:&lt;br /&gt;
&lt;br /&gt;
   GetPackageInfo  // referring to System.SysUtils.GetPackageInfo&lt;br /&gt;
   TRect           // referring to System.Types.TRect&lt;br /&gt;
   TNotifyEvent    // referring to System.Classes.TNotifyEvent&lt;br /&gt;
   TTrackBar       // referring to FMX.Controls.TTrackBar&lt;br /&gt;
&lt;br /&gt;
==Unit-Gültigkeitsbereiche==&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Vielzahl von Unit-Gültigkeitsbereichen, aber die meisten können in ein paar wenige allgemeine Kategorien gruppiert werden.  Die folgende Tabelle führt die allgemeinen Kategorien und die Unit-Gültigkeitsbereichsnamen in jeder Kategorie auf:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Allgemeine Kategorie&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Unit-Gültigkeitsbereichsnamen in dieser Kategorie&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Datenbankbezogen  &lt;br /&gt;
|&lt;br /&gt;
{{f|bde|[[lib_de:Bde|Bde]], }}[[lib_de:Data|Data]], [[lib_de:Data.Bind|Data.Bind]], [[lib_de:Data.Cloud|Data.Cloud]], {{f|datasnap|[[lib_de:Datasnap|Datasnap]], [[lib_de:Datasnap.Win|Datasnap.Win]], }}IB (auch [[lib_de:System.Bindings|System.Bindings]])       &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{{FM}}&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:FMX|FMX]], [[lib_de:FMX.ASE|FMX.ASE]], [[lib_de:FMX.Bind|FMX.Bind]], [[lib_de:FMX.Canvas|FMX.Canvas]], [[lib_de:FMX.DAE|FMX.DAE]], [[lib_de:FMX.Filter|FMX.Filter]], [[lib_de:FMX.Platform|FMX.Platform]], [[lib_de:FMX.Printer|FMX.Printer]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
iOS&lt;br /&gt;
|&lt;br /&gt;
iOSapi (RTL)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
OS X&lt;br /&gt;
|&lt;br /&gt;
Macapi, Posix, System.Mac (RTL)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Systembezogen (Laufzeitbibliothek)&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:System|System]], [[lib_de:System.Bindings|System.Bindings]], [[lib_de:System.Generics|System.Generics]], [[lib_de:System.Math|System.Math]], [[lib_de:System.Sensors|System.Sensors]], [[lib_de:System.Tether|System.Tether]]{{f|radstudio|, [[lib_de:System.Win|System.Win]]}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|vcl}}&lt;br /&gt;
|&lt;br /&gt;
VCL (Visuelle Komponentenbibliothek)&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:Vcl|Vcl]], [[lib_de:Vcl.Imaging|Vcl.Imaging]], [[lib_de:Vcl.Samples|Vcl.Samples]], Vcl.Shell, [[lib_de:Vcl.Touch|Vcl.Touch]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
SOAP, COM&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:Soap|Soap]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|radstudio}}&lt;br /&gt;
|&lt;br /&gt;
Webbezogen&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:Web|Web]], [[lib_de:Web.Win|Web.Win]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Windows-API&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:Winapi|Winapi]] (RTL)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
XML-Verarbeitung&lt;br /&gt;
|&lt;br /&gt;
[[lib_de:Xml|Xml]], Xml.Internal, Xml.Win&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Zehn Unit-Gültigkeitsbereiche beziehen sich auf {{FM}} (FMX, FMX.ASE, FMX.Bind, FMX.Canvas, FMX.DAE, FMX.DateTimeControls, FMX.EmbeddedControls, FMX.Filter, FMX.ListView, FMX.MediaLibrary).&lt;br /&gt;
* Der Unit-Gültigkeitsbereich [[lib_de:Soap|Soap]] enthält COM-bezogene Units.&lt;br /&gt;
* Der Unit-Gültigkeitsbereich [[lib_de:System|System]] hat mehrere Unit-Gültigkeitsbereiche, einschließlich System.Bindings, System.Generics, System.Math, System.Sensors, System.Tether. {{f|vcl|&lt;br /&gt;
* Vier Unit-Gültigkeitsbereiche beziehen sich auf die VCL (Vcl, Vcl.Imaging, Vcl.Samples, Vcl.Touch).  }}&lt;br /&gt;
* Der Unit-Gültigkeitsbereich [[lib_de:Xml|Xml]] enthält die vier Units, die sich auf die XML-Verarbeitung beziehen, wie z. B. [[lib_de:Xml.Win.msxmldom|Xml.Win.msxmldom]].&lt;br /&gt;
&lt;br /&gt;
==Unit-Gültigkeitsbereiche und die Units im jeweiligen Unit-Gültigkeitsbereich==&lt;br /&gt;
&lt;br /&gt;
Die nachstehende Tabelle enthält folgende Informationen:&lt;br /&gt;
&lt;br /&gt;
* Für Units, die in der Hilfe dokumentiert sind, ist ein Link auf den Unit-Gültigkeitsbereich angegeben, in dem die zu diesem Unit-Gültigkeitsbereich gehörenden Units aufgeführt sind.&lt;br /&gt;
* Für externe Units, die nicht in der Hilfe dokumentiert sind, sind die zu diesem Unit-Gültigkeitsbereich gehörenden Units aufgeführt.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Unit-Gültigkeitsbereichsname&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Units&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Androidapi (RTL)&lt;br /&gt;
|&lt;br /&gt;
AppGlue, AssetManager, AssetManagaerIni, Bitmap, Configuration, Consts, Egl, Eglext, EglPlatform&lt;br /&gt;
Gles, Gles2, Gles2ext, Glesext, Input, IOUtils, JNI.Analytics, JNI.ApkExpansion, JNI.App, JNI.Dalvik, JNI.{{Company}}, JNI.GraphicsContentViewText, JNI.Hardware, JNI.InputMethodService, JNI.JavaTypes, JNI.Licensing, JNI.Location, JNI.Media, JNI.Net, JNI.OpenGL, JNI.Os, Jni, JNI.PlayServices, JNI.Provider, JNI.Support, JNI.Telephony, JNI.Util, JNI.VideoView, JNI.WebKit, JNI.Widget, JNIBridge, JNIMarshal, Keycodes, KhrPlatform, Log, Looper, NativeActivity, NativeWindow, NativeWindowJni, Obb, OpenSles, Rect, Sensor, StorageManager&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Data|Data]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Data|Data]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Data.Bind|Data.Bind]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Data.Bind|Data.Bind]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Data.Cloud|Data.Cloud]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Data.Cloud|Data.Cloud]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|datasnap}}&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Datasnap|Datasnap]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Datasnap|Datasnap]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:FMX|FMX]] &amp;lt;br /&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
([[FireMonkey|FireMonkey-Anwendungsplattform]])&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:FMX|FMX]] &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|radstudio}}&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:IBX|IBX]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:IBX|IBX]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
iOSapi (RTL)&lt;br /&gt;
|&lt;br /&gt;
AssetsLibrary, AVFoundation, CocoaTypes, CoreAudio, CoreData, CoreGraphics, CoreImage, CoreLocation, CoreMedia, CoreMotion, CoreTelephony, CoreText, CoreVideo, Foundation, GLKit, MediaPlayer, OpenGLES, QuartzCore, UIKit&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Macapi (RTL) (Mac Objective-C Frameworks)&lt;br /&gt;
|&lt;br /&gt;
AppKit, CocoaTypes, CoreFoundation, CoreServices, Foundation, Mach, ObjCRuntime, ObjectiveC, OCMarshal, OpenGL, QuartzCore, Security, SystemConfiguration, VarObjC&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Posix &amp;lt;br /&amp;gt;(OS X) (RTL)&lt;br /&gt;
|&lt;br /&gt;
ArpaInet, Base, Dirent, Dlfcn, Errno, Fcntl, Fnmatch, Grp, Iconv, Langinfo, Limits, Locale, NetDB, NetIf, NetinetIcmp6, NetinetIn, NetinetIp6, Posix, Pthread, Pwd, Sched, Semaphore, Signal, StdDef, Stdio, Stdlib, String_, StrOpts, SysMman, SysSelect, SysSocket, SysStat, SysStatvfs, SysSysctl, SysTime, SysTimes, Systypes, SysUio, SysWait, Termios, Time, Unistd, Utime, Wchar, Wctype, Wordexp&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Soap|Soap]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Soap|Soap]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:SysInit|SysInit]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:SysInit|SysInit]] &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:System|System]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:System|System]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|radstudio}}&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:System.Win|System.Win]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:System.Win|System.Win]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|vcl}}&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Vcl|Vcl]] &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
([[Einführung in die VCL (Visual Component Library)|Visuelle Komponentenbibliothek]])&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Vcl|Vcl]]  &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|radstudio}}&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Web|Web]]  featurerow=&amp;quot;radstudio&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Web|Web]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|radstudio}}&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Winapi|Winapi]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Winapi|Winapi]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;[[lib_de:Xml|Xml]]&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Siehe [[lib_de:Xml|Xml]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Themen==&lt;br /&gt;
&lt;br /&gt;
* [[Hinzufügen von Unit-Gültigkeitsbereichsnamen für eigene Komponenten|Hinzufügen von Unit-Gültigkeitsbereichsnamen für eigene Komponenten]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Namespaces in Delphi|Namespaces in {{Delphi}}]]&lt;br /&gt;
* [[C++-Namespaces - Index|C++-Namespaces]]&lt;br /&gt;
* [[lib_de:Unit List|Unit-Liste (Bibliotheksreferenz)]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Unit-Gultigkeitsbereichsnamen}}&lt;br /&gt;
[[Category:XE2]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Unit Scope Names]]&lt;br /&gt;
[[fr:Noms de portées d&#039;unités]]&lt;br /&gt;
[[ja:ユニット スコープ名]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Ger%C3%A4te%C3%BCbergreifende_Anwendungstypen,_die_erstellt_werden_k%C3%B6nnen&amp;diff=208913</id>
		<title>Geräteübergreifende Anwendungstypen, die erstellt werden können</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Ger%C3%A4te%C3%BCbergreifende_Anwendungstypen,_die_erstellt_werden_k%C3%B6nnen&amp;diff=208913"/>
		<updated>2016-06-24T10:47:13Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Geräteübergreifende Anwendungen - Index}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
In der folgenden Tabelle sind einige wichtige geräteübergreifende Anwendungen beschrieben, die Sie in der IDE erstellen können:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Anwendungstyp&lt;br /&gt;
!Schritte zum Erstellen dieser Anwendung&lt;br /&gt;
!Beschreibung und Links&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Geräteübergreifende Anwendungen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zielcomputer:&#039;&#039;&#039;&lt;br /&gt;
* Windows-PC mit:&lt;br /&gt;
** Dem Betriebssystem 32-Bit-Windows&lt;br /&gt;
** Dem Betriebssystem 64-Bit-Windows&lt;br /&gt;
* Mac mit dem Betriebssystem OS X&lt;br /&gt;
* iOS-Geräte:&lt;br /&gt;
** iPhone&lt;br /&gt;
** iPad&lt;br /&gt;
*iOS-Simulator auf dem Mac (nur für {{Delphi}})&lt;br /&gt;
* Android-Geräte&lt;br /&gt;
|&lt;br /&gt;
# Wählen Sie im Experten &#039;&#039;&#039;[[Geräteübergreifende Anwendung|Geräteübergreifende Anwendung]]&#039;&#039;&#039; eine der folgenden Optionen:&lt;br /&gt;
#*&#039;&#039;&#039; [[Geräteübergreifende HD-Anwendung|Leere Anwendung]]&#039;&#039;&#039;.&lt;br /&gt;
#* &#039;&#039;&#039;[[Geräteübergreifende 3D-Anwendung|3D-Anwendung]]&#039;&#039;&#039;.&lt;br /&gt;
#* &#039;&#039;&#039;Eine [[Vorlagen für geräteübergreifende Anwendungen|Anwendungsvorlage]]&#039;&#039;&#039;, wie z. B. Registerkartenanwendung.&lt;br /&gt;
# Vorbereiten der Entwicklungsumgebung:&lt;br /&gt;
#* Installieren Sie für &#039;&#039;&#039;Remote-64-Bit-Windows&#039;&#039;&#039; den [[PAServer: Die Platform Assistant Server-Anwendung|Platform Assistant-Server]] auf der Zielplattform, und [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|erstellen Sie ein Verbindungsprofil]] in {{Product}}.&lt;br /&gt;
#* Installieren Sie für &#039;&#039;&#039;OS X&#039;&#039;&#039; den &amp;quot;Platform Assistant&amp;quot;-Server auf der Zielplattform, und erstellen Sie ein Verbindungsprofil in {{Product}}. Für OS X-Anwendungen fügen Sie {{Product}} auch [[Hinzufügen von SDKs für OS X oder iOS|ein OS X-SDK]] hinzu.&lt;br /&gt;
#* Installieren Sie für &#039;&#039;&#039;32-Bit- und 64-Bit-iOS-Geräte&#039;&#039;&#039; den &amp;quot;Platform Assistant&amp;quot;-Server auf dem Mac (der als Zwischenzielplattform für das iOS-Gerät dient), erstellen Sie ein Verbindungsprofil in {{Product}}, und [[Hinzufügen von SDKs für OS X oder iOS|fügen Sie RAD Studio ein iOS-SDK]] hinzu.&lt;br /&gt;
#* Installieren Sie für den &#039;&#039;&#039;iOS-Simulator&#039;&#039;&#039; (nur für {{Delphi}}) den &amp;quot;Platform Assistant&amp;quot;-Server auf dem Mac (der als Zwischenzielplattform für den iOS-Simulator dient), erstellen Sie ein Verbindungsprofil in {{Product}}, und [[Hinzufügen von SDKs für OS X oder iOS|fügen Sie RAD Studio ein iOS-SDK]] hinzu.&lt;br /&gt;
# Aktivieren Sie in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; im Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039; die gewünschte [[Unterstützte Zielplattformen|Zielplattform]].&lt;br /&gt;
|&lt;br /&gt;
Mit dem Experten &#039;&#039;&#039;[[Geräteübergreifende Anwendung|Geräteübergreifende Anwendungen]]&#039;&#039;&#039; erstellte Anwendungen verwenden automatisch die geräteübergreifenden Versionen der Komponenten und der [[Verwenden der RTL (Laufzeitbibliothek)|Laufzeitbibliothek]]. Sie können eine geräteübergreifende  {{Delphi}}- oder C++-Anwendung erstellen, die auf allen [[Unterstützte Zielplattformen|unterstützten Zielplattformen]] mit Ausnahmen des iOS-Simulators, der nur von  {{Delphi}}-Anwendungen unterstützt wird, ausgeführt werden kann.&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Wenn es sich bei Ihrem Entwicklungs-PC um ein 64-Bit-System handelt, ist für die Entwicklung von Anwendungen für 64-Bit-Windows weder der Platform Assistant-Server noch ein Verbindungsprofil erforderlich.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter &#039;&#039;&#039;[[Geräteübergreifende Anwendungen entwickeln|Geräteübergreifende Anwendungen entwickeln]]&#039;&#039;&#039;.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;64-Bit-Windows-Anwendungen für {{Delphi}} und {{CBuilder}}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zielcomputer:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
PC, auf dem das Betriebssystem 64-Bit-Windows ausgeführt wird, entweder ein lokaler PC (das Entwicklungssystem) oder ein Remote-PC&lt;br /&gt;
|&lt;br /&gt;
So erstellen Sie eine &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;-Anwendung in der IDE:&lt;br /&gt;
# Erstellen Sie eine der folgenden Anwendungen:&lt;br /&gt;
#* &#039;&#039;&#039;[[Geräteübergreifende Anwendung|Geräteübergreifende Anwendung]]{{f|vcl|&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;[[VCL-Formularanwendung|VCL-Formularanwendung]]&#039;&#039;&#039; }}&lt;br /&gt;
#* &#039;&#039;&#039;[[Konsolenanwendungen|Konsolenanwendung]]&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; dem Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039; die Zielplattform &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039; hinzu, falls sie noch nicht hinzugefügt wurde.&lt;br /&gt;
# Aktivieren Sie in der [[Projektverwaltung|Projektverwaltung]] als &#039;&#039;&#039;Zielplattform&#039;&#039;&#039; &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;.&lt;br /&gt;
|&lt;br /&gt;
Die {{Product}}-IDE kann auf jeder Windows-Plattform (natives Win32 oder Win64) ausgeführt werden:&lt;br /&gt;
*Wenn Sie {{Product}} auf einem Win32-Entwicklungssystem ausführen, müssen Sie den &amp;quot;Platform Assistant&amp;quot; und ein Verbindungsprofil mit einer Live-Verbindung zu einem Win64-System verwenden, um plattformübergreifende Win64-Anwendungen auszuführen und zu debuggen. Ausführen und Debuggen stellen zwei wesentliche Schritte in der Anwendungsentwicklung dar.&lt;br /&gt;
* Wenn Sie {{Product}} auf einem Win64-Entwicklungssystem ausführen, ist die Verwendung des &amp;quot;Platform Assistant&amp;quot; und eines Verbindungsprofils optional, aber diese Komponenten erleichtern das Debuggen und ermöglichen die Verwendung des [[Bereitstellungs-Manager|Bereitstellungs-Managers]] zur Bereitstellung von Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [[64-Bit-Windows-Anwendungsentwicklung|64-Bit-Windows-Anwendungsentwicklung]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;Konsolenanwendungen &amp;lt;br /&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
(OS X, iOS oder 64-Bit-Windows)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zielcomputer:&#039;&#039;&#039;&lt;br /&gt;
* Mac, auf dem das Betriebssystem OS X ausgeführt wird (für {{Delphi}}- und {{CBuilder}}-Anwendungen)&lt;br /&gt;
* iOS-Simulator oder iOS-Gerät&lt;br /&gt;
* PC, auf dem das Betriebssystem 64-Bit-Windows ausgeführt wird (nur für {{Delphi}}-Anwendungen)&lt;br /&gt;
|&lt;br /&gt;
#Erstellen Sie in {{Delphi}} oder {{CBuilder}} eine Konsolenanwendung:&lt;br /&gt;
#* [[Neue Konsolenanwendung (C++)|Neue Konsolenanwendung]]&lt;br /&gt;
# Fügen Sie in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; dem Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039; die Zielplattform (&#039;&#039;&#039;OS X&#039;&#039;&#039;, entweder &#039;&#039;&#039;iOS-Simulator&#039;&#039;&#039;, &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039;, &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039;, oder &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;) hinzu.&lt;br /&gt;
# Aktivieren Sie die Zielplattform in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039;:&lt;br /&gt;
#* &#039;&#039;&#039;OS X&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;iOS-Simulator&#039;&#039;&#039;, &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039; oder &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
Zum Ausführen, Debuggen und Bereitstellen einer OS X- oder iOS-Anwendung müssen Sie [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|ein Verbindungsprofil erstellen]] und den &amp;quot;Platform Assistant&amp;quot;, den Remote-Anwendungsserver, auf einem aktiv verbundenen Mac [[Installieren des Platform Assistant auf dem Mac|installieren]] und [[Ausführen des Platform Assistant auf dem Mac|ausführen]]. Außerdem müssen Sie ein [[SDK-Manager|SDK]] hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Ausgabe von Konsolenanwendungen auf dem iOS-Simulator und -Gerät &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Product}} unterstützt iOS-Konsolenanwendungen in Verbindung mit Xcode.  Wenn die Konsolenausgabe verwendet wird (z. B., wenn die Konsolenanwendung [[lib_de:System.Writeln|Writeln]] verwendet), wird die Ausgabe weder im iOS-Simulator- noch im iOS-Gerätefenster angezeigt. Die Ausgabe wird stattdessen an das Konsolenprotokoll gesendet, das Sie in der App &#039;&#039;&#039;OS X Console log viewer&#039;&#039;&#039; (für den iOS-Simulator) oder im Bereich &#039;&#039;&#039;Xcode Organizer device Console&#039;&#039;&#039; (für das iOS-Gerät) anzeigen können.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter:&lt;br /&gt;
* [[Schritte bei der Entwicklung von geräteübergreifenden Anwendungen|Schritte bei der Entwicklung von geräteübergreifenden Anwendungen]]&lt;br /&gt;
* [[Erstellen einer OS X-Konsolenanwendung Hello World|Erstellen einer geräteübergreifenden OS X-Konsolenanwendung &amp;quot;Hello World&amp;quot;]]{{f|cmd|&lt;br /&gt;
* [[Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile|Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile]]}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|datasnap}}&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;DataSnap-Anwendungen &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zielcomputer:&#039;&#039;&#039;&lt;br /&gt;
*DataSnap-Clients werden auf allen [[Unterstützte Zielplattformen|unterstützten Zielplattformen]] unterstützt.&lt;br /&gt;
*DataSnap-Server werden nur auf 64-Bit-Windows unterstützt.&lt;br /&gt;
|&lt;br /&gt;
#Wählen Sie eine der folgenden Anwendungen aus:&lt;br /&gt;
#* [[DataSnap-Server-Experte|DataSnap-Server]]&lt;br /&gt;
#* [[Experte für DataSnap-Client-Module|Experte für DataSnap-Client-Module]] oder [[Experte für DataSnap-REST-Client-Module|Experte für DataSnap-REST-Client-Modul]]&lt;br /&gt;
# Fügen Sie in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; dem Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039; die Zielplattform (entweder &#039;&#039;&#039;OS X&#039;&#039;&#039; (nur für DataSnap-Clients) oder &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;) hinzu.&lt;br /&gt;
# Aktivieren Sie in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; die Zielplattform (entweder &#039;&#039;&#039;OS X&#039;&#039;&#039; (nur für DataSnap-Clients) oder &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;).&lt;br /&gt;
|&lt;br /&gt;
Zum Ausführen, Debuggen und Bereitstellen einer DataSnap-Anwendung auf einem OS X- oder Remote-Win64-Ziel müssen Sie [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|ein Verbindungsprofil erstellen]] und [[PAServer: Die Platform Assistant Server-Anwendung|den &amp;quot;Platform Assistant&amp;quot;-Server]], den Remote-Anwendungsserver, auf einem aktiv verbundenen Computer, auf dem die Zielplattform ausgeführt wird, installieren und ausführen. Für OS X-Anwendungen müssen Sie auch ein [[SDK-Manager|SDK]] hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter:&lt;br /&gt;
* [[Schritte bei der Entwicklung von geräteübergreifenden Anwendungen|Schritte bei der Entwicklung von geräteübergreifenden Anwendungen]]&lt;br /&gt;
* [[Erstellen einer OS X-Konsolenanwendung Hello World|Erstellen einer geräteübergreifenden OS X-Konsolenanwendung &amp;quot;Hello World&amp;quot;]]&lt;br /&gt;
* [[Geräteübergreifende Datenbankanwendungen|Geräteübergreifende Datenbankanwendungen]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{f|radstudio|&lt;br /&gt;
&lt;br /&gt;
==Andere Anwendungstypen, die geräteübergreifend sein können==&lt;br /&gt;
&lt;br /&gt;
Folgende Anwendungen können geräteübergreifend sein:{{f|datasnap|&lt;br /&gt;
&lt;br /&gt;
* [[DataSnap-Server-Experte|DataSnap-Server]] (Win64)}}{{f|radstudio|&lt;br /&gt;
* [[Experte für DataSnap-Client-Module|DataSnap-Client]] (Win64, OS X)}} {{f|appmethod|&lt;br /&gt;
* [[Experte für DataSnap-REST-Client-Module|Experte für DataSnap-Client-Module]] (Win64, OS X)}}{{f|webbroker|&lt;br /&gt;
* [[Experte für DataSnap WebBroker-Anwendungen|Experte für DataSnap WebBroker-Anwendungen]] (Win64)&lt;br /&gt;
* [[Neue Webserver-Anwendung|Webserver-Anwendung]] (Win64, OS X)}}{{f|activex|&lt;br /&gt;
* [[ActiveX-Steuerelemente|ActiveX]] (Win64)}}{{f|soap|&lt;br /&gt;
* [[Neue SOAP-Server-Anwendung|SOAP-Server-Anwendung]] (Win64)}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Themen==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Windows-Anwendungsentwicklung&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;Vorbereiten von Windows-Anwendungen für die Bereitstellung&#039;&#039;&#039;&lt;br /&gt;
*** [[Anpassen der Windows-Anwendungsmanifestdatei|Anpassen der Windows-Anwendungsmanifestdatei]]&lt;br /&gt;
**&#039;&#039;&#039;[[64-Bit-Windows-Anwendungsentwicklung|64-Bit-Windows-Anwendungsentwicklung]]&#039;&#039;&#039;&lt;br /&gt;
*** [[Verbinden Ihres 32-Bit-PC mit einem Win64-PC|Verbinden Ihres 32-Bit-PC mit einem Win64-PC]]&lt;br /&gt;
*** [[64-Bit-Windows-Anwendung Hello World (Delphi und C++)|64-Bit-Windows-Anwendung &amp;quot;Hello World&amp;quot; ({{Delphi}} und C++)]]&lt;br /&gt;
*** [[64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen|64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen]]&lt;br /&gt;
*** [[Konvertieren von 32-Bit-Delphi-Anwendungen in 64-Bit-Windows|Konvertieren von 32-Bit-{{Delphi}}-Anwendungen in 64-Bit-Windows]]&lt;br /&gt;
* [[FireMonkey-Anwendungsplattform - geräteübergreifend|{{FM}}-Anwendungsplattform - geräteübergreifend]]&lt;br /&gt;
*&#039;&#039;&#039; [[OS X-Anwendungsentwicklung|OS X-Anwendungsentwicklung]]&#039;&#039;&#039;&lt;br /&gt;
** [[Arbeiten mit einem Mac und einem PC|Arbeiten mit einem Mac und einem PC]]&lt;br /&gt;
** [[Erstellen einer OS X-Konsolenanwendung Hello World|Geräteübergreifende OS X-Konsolenanwendung &amp;quot;Hello World&amp;quot;]]{{f|cmd|&lt;br /&gt;
** [[Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile|Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile]]}}&lt;br /&gt;
** [[PC-zugeordnete Erweiterungen|PC-zugeordnete Erweiterungen]]&lt;br /&gt;
*&#039;&#039;&#039; [[Mobile iOS-Anwendungsentwicklung|Mobile iOS-Anwendungsentwicklung]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[Mobile Android-Anwendungsentwicklung|Mobile Android-Anwendungsentwicklung]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[Mobile-Tutorials: Mobile Anwendungsentwicklung (iOS und Android)|Mobile-Tutorials: Mobile Anwendungsentwicklung (iOS und Android)]]&#039;&#039;&#039;&lt;br /&gt;
* [[Geräteübergreifende Datenbankanwendungen|Geräteübergreifende Datenbankanwendungen]]{{f|datasnap|&lt;br /&gt;
* [[DataSnap-Konnektoren für mobile Geräte|DataSnap-Konnektoren für mobile Geräte]]}}&lt;br /&gt;
* [[Experten zum Erstellen von geräteübergreifenden FireMonkey-Anwendungen und -Komponenten|Experten zum Erstellen von geräteübergreifenden {{FM}}-Anwendungen und -Komponenten]]{{f|cmd|&lt;br /&gt;
* [[Toolkette|Toolkette]]}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Gerateubergreifende Anwendungstypen, die erstellt werden konnen}}&lt;br /&gt;
[[Category:Geräteübergreifend]]&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Types of Multi-Device Applications You Can Create]]&lt;br /&gt;
[[fr:Types d&#039;applications multi-périphériques que vous pouvez créer]]&lt;br /&gt;
[[ja:作成できるマルチデバイス アプリケーションの種類]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Tutorial:_Verwenden_von_FireDAC_aus_einer_ger%C3%A4te%C3%BCbergreifenden_Anwendung_auf_Desktop-Plattformen&amp;diff=208912</id>
		<title>Tutorial: Verwenden von FireDAC aus einer geräteübergreifenden Anwendung auf Desktop-Plattformen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Tutorial:_Verwenden_von_FireDAC_aus_einer_ger%C3%A4te%C3%BCbergreifenden_Anwendung_auf_Desktop-Plattformen&amp;diff=208912"/>
		<updated>2016-06-24T10:46:29Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Tutorials zu Datenbanken und LiveBindings}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial werden die grundlegenden Schritte zum Durchsuchen der von &#039;&#039;&#039;InterBase ToGo&#039;&#039;&#039; verwalteten Daten mithilfe des &#039;&#039;&#039;FireDAC&#039;&#039;&#039;-Frameworks unter Windows und auf dem Mac beschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Für die Bearbeitung dieses Tutorials ist eine &#039;&#039;&#039;Lizenz&#039;&#039;&#039; für &#039;&#039;&#039;IBToGo&#039;&#039;&#039; erforderlich. Wenn Sie eine Testversion verwenden und InterBase auf dem Mac testen möchten, können Sie während der Testphase auf eine IBToGo-Bereitstellungslizenz für die Testversion zugreifen. Klicken Sie auf den folgenden Link, um Ihre Bereitstellungslizenz für die Testversion zu aktivieren: [https://reg.codegear.com/srs6/login.jsp?redirect=%2Fsrs6%2Factivation.do%3Fx%3D3%26serialNumber%3DD2AK-82Q7PS-VAN9NA-32VC%26key%3D74739 InterBase ToGo Deployment (EN)].&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Herstellen einer Verbindung zu der Datenbank mit FireDAC==&lt;br /&gt;
&lt;br /&gt;
FireDAC ist ein einzigartiger Satz von &#039;&#039;&#039;[[Komponenten (FireDAC)|Komponenten]]&#039;&#039;&#039; für den universellen Datenzugriff zur Entwicklung von plattformübergreifenden Datenbankanwendungen für {{Delphi}}, {{CBuilder}} und FreePascal. Durch seine leistungsstarke allgemeine Architektur ermöglicht FireDAC von {{Delphi}} aus einen nativen, extrem schnellen, direkten Zugriff auf InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, IBM DB2, SQL Anywhere, Access, Firebird, Informix und weitere.&lt;br /&gt;
&lt;br /&gt;
Der [[Herstellen einer Verbindung zu InterBase (FireDAC)|native FireDAC-Treiber für InterBase]] unterstützt {{Company}} InterBase Server, Desktop, Developer, [http://edn.embarcadero.com/article/42319 ToGo (EN)] und IBLite Version 6 und höher.&lt;br /&gt;
&lt;br /&gt;
* Zum Durchsuchen der von &#039;&#039;&#039;Interbase ToGo&#039;&#039;&#039; verwalteten Daten unter Windows muss für FireDAC die folgende x86- oder x64-Clientsoftware auf dem Arbeitsplatzrechner installiert sein:&lt;br /&gt;
** Die Bibliothek &#039;&#039;&#039;IBTOGO.DLL&#039;&#039;&#039; unterstützt die Arbeit mit Datenbanken mit eingebettetem InterBase ToGo oder IBLite von x86-Anwendungen aus.&lt;br /&gt;
** Die Bibliothek &#039;&#039;&#039;IBTOGO64.DLL&#039;&#039;&#039; unterstützt die Arbeit mit Datenbanken mit eingebettetem InterBase ToGo oder IBLite von x64-Anwendungen aus.&lt;br /&gt;
* Um von &#039;&#039;&#039;InterBase ToGo&#039;&#039;&#039; verwaltete Daten unter OS X durchsuchen zu können, benötigt FireDAC die eingebettete InterBase-x86-Datei &#039;&#039;&#039;libibtogo.dylib&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Entwerfen und Einrichten der Benutzeroberfläche==&lt;br /&gt;
&lt;br /&gt;
Erstellen Sie ein neues Projekt. Wählen Sie eine &#039;&#039;&#039;[[Geräteübergreifende HD-Anwendung|Geräteübergreifende HD-Anwendung]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Legen Sie eine [[lib_de:FireDAC.Comp.Client.TFDConnection|TFDConnection]]-Komponente auf dem Formular ab.&lt;br /&gt;
# Klicken Sie mit der rechten Maustaste auf die [[lib_de:FireDAC.Comp.Client.TFDConnection|TFDConnection]]-Komponente, und wählen Sie &#039;&#039;&#039;Verbindungseditor&#039;&#039;&#039;.&lt;br /&gt;
# Legen Sie im FireDAC-Verbindungseditor die folgenden Parameter der [[lib_de:FireDAC.Comp.Client.TFDConnection|TFDConnection]]-Komponente fest:&lt;br /&gt;
## Legen Sie die Eigenschaft [[lib_de:FireDAC.Comp.Client.TFDCustomConnection.DriverName|Treiber-ID]] auf &#039;&#039;&#039;IB&#039;&#039;&#039; fest.&lt;br /&gt;
## Legen Sie den Parameter &#039;&#039;&#039;Database&#039;&#039;&#039; auf {{Path|{{DataSamplesPath}}\EMPLOYEE.GDB}} (Speicherort der Datenbank) fest.&lt;br /&gt;
## Legen Sie den Parameter &#039;&#039;&#039;User_name&#039;&#039;&#039; auf &#039;&#039;&#039;sysdba&#039;&#039;&#039; fest.&lt;br /&gt;
## Legen Sie den Parameter &#039;&#039;&#039;Password&#039;&#039;&#039; auf &#039;&#039;&#039;masterkey&#039;&#039;&#039; fest.&lt;br /&gt;
##: [[File:ConnectionEditor2.png|600px]] &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
## Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Testen&#039;&#039;&#039;, um die Verbindung zu testen.&lt;br /&gt;
##: [[File:TestConnectionSuccess.png]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
## Klicken Sie auf &#039;&#039;&#039;OK&#039;&#039;&#039;, um den Verbindungseditor zu schließen.&lt;br /&gt;
# Legen Sie im [[Objektinspektor|Objektinspektor]] die folgenden Eigenschaften der &#039;&#039;&#039;TFDConnection&#039;&#039;&#039;-Komponente fest:&lt;br /&gt;
## Setzen Sie die Eigenschaft &#039;&#039;&#039;[[lib_de:Data.DB.TCustomConnection.LoginPrompt|LoginPrompt]]&#039;&#039;&#039; auf &#039;&#039;&#039;False&#039;&#039;&#039;, damit der Benutzer nicht zur Eingabe von Anmeldedaten aufgefordert wird.&lt;br /&gt;
## Setzen Sie die Eigenschaft &#039;&#039;&#039;[[lib_de:Data.DB.TCustomConnection.Connected|Connected]]&#039;&#039;&#039; auf &#039;&#039;&#039;True&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Verwenden des LiveBindings-Experten==&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie den &#039;&#039;&#039;LiveBindings-Experten&#039;&#039;&#039;, um die LiveBindings-Komponenten ([[lib_de:Data.Bind.DBScope.TBindSourceDB|TBindSourceDB]], [[lib_de:Fmx.Bind.Navigator.TBindNavigator|TBindNavigator]]), [[lib_de:FireDAC.Comp.Client.TFDQuery|TFDQuery]] und [[lib_de:FMX.Grid.TStringGrid|Grid]] hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
===Hinzufügen der LiveBinding-Komponenten===&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Ansicht &amp;amp;gt; LiveBindings-Designer&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Der [[LiveBindings-Designer|LiveBindings-Designer]] wird geöffnet.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;[[LiveBindings-Experte|LiveBindings-Experte]]&#039;&#039;&#039; ([[Image:LBDLiveBindingsWizard.png]]).&lt;br /&gt;
#: [[File:SelectLiveBindWizard.png]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Wählen Sie auf der Seite &#039;&#039;&#039;Bindungsaufgabe&#039;&#039;&#039; die Option &#039;&#039;&#039;Datenquelle erstellen&#039;&#039;&#039;, und klicken Sie auf &#039;&#039;&#039;Weiter&#039;&#039;&#039;.&lt;br /&gt;
# Wählen Sie auf der Seite &#039;&#039;&#039;Datenquelle&#039;&#039;&#039; die Option &#039;&#039;&#039;FireDAC&#039;&#039;&#039;, und klicken Sie auf &#039;&#039;&#039;Weiter&#039;&#039;&#039;.&lt;br /&gt;
# Ändern Sie den &#039;&#039;&#039;Befehlstyp&#039;&#039;&#039; in &#039;&#039;&#039;Abfrage&#039;&#039;&#039;.&lt;br /&gt;
# Legen Sie die Eigenschaft &#039;&#039;&#039;Befehlstext&#039;&#039;&#039; auf &amp;lt;code&amp;gt;select * from employee&amp;lt;/code&amp;gt; fest.&lt;br /&gt;
#: [[File:LiveBindingWizard.png]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Befehl testen&#039;&#039;&#039;.&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Weiter&#039;&#039;&#039;.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Datenquellennavigator hinzufügen&#039;&#039;&#039;.&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Fertig stellen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Damit wurden die Komponenten [[lib_de:Data.Bind.DBScope.TBindSourceDB|TBindSourceDB]], [[lib_de:Fmx.Bind.Navigator.TBindNavigator|TBindNavigator]] und [[lib_de:FireDAC.Comp.Client.TFDQuery|TFDQuery]] Ihrem Formular hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
===Hinzufügen der Gitter-Komponente===&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie erneut den [[LiveBindings-Experte|LiveBindings-Experten]].&lt;br /&gt;
# Wählen Sie die Bindungsaufgabe &#039;&#039;&#039;Gitter mit einer Datenquelle verknüpfen&#039;&#039;&#039; aus.&lt;br /&gt;
#: [[File:LinkGrid.png]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Weiter&#039;&#039;&#039;.&lt;br /&gt;
# Wählen Sie [[lib_de:FMX.Grid.TStringGrid|TSringGrid]] aus.&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Weiter&#039;&#039;&#039;.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;BindSourceDB1&#039;&#039;&#039; aus.&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Fertig stellen&#039;&#039;&#039;, um den Experten zu schließen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Bindungsdiagramm sollte wie in der folgenden Abbildung dargestellt aussehen:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Diagram.png]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vorbereiten der Anwendung für die Ausführung==&lt;br /&gt;
&lt;br /&gt;
FireDAC verfügt über eine lose verbundene [[Allgemeine Informationen (FireDAC)|mehrschichtige Architektur]], in der Dienste von Schichten bereitgestellt werden. Eine Dienst-API ist als COM-Interface definiert, das von anderen Schichten über den Interface-Generator angefordert werden kann.&lt;br /&gt;
&lt;br /&gt;
Für die [[Vorbereiten einer FireDAC-Anwendung für die Ausführung|ordnungsgemäße Ausführung von FireDAC]] müssen Sie die Implementierung der Interfaces &#039;&#039;&#039;IFDGUIxWaitCursor&#039;&#039;&#039; und &#039;&#039;&#039;IFDPhysDriver&#039;&#039;&#039; in Ihre Anwendung einbinden.&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie die Komponente &#039;&#039;&#039;NavigatorBindSourceDB1&#039;&#039;&#039; aus, und setzen Sie die Eigenschaft [[lib_de:Fmx.Bind.Navigator.TBindNavigator.Align|Align]] auf &#039;&#039;&#039;Top&#039;&#039;&#039;.&lt;br /&gt;
# Wählen Sie die Komponente &#039;&#039;&#039;StringGridBindSourceDB1&#039;&#039;&#039; aus, und legen Sie die Eigenschaft [[lib_de:FMX.Grid.TStringGrid.Align|Align]] auf &#039;&#039;&#039;Client&#039;&#039;&#039; fest.&lt;br /&gt;
# Ziehen Sie die Komponenten [[lib_de:FireDAC.Comp.UI.TFDGUIxWaitCursor|TFDGUIxWaitCursor]] und [[lib_de:FireDAC.Phys.IB.TFDPhysIBDriverLink|TFDPhysIBDriverLink]] auf das Formular.&lt;br /&gt;
#: [[File:FormComponentsAdded.png|700px]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bereitstellen Ihrer Anwendung unter OS X==&lt;br /&gt;
&lt;br /&gt;
Bis jetzt haben Sie InterBase auf dem Desktop verwendet. Das bedeutet, dass sich die eigentliche Datenbank auf Ihrer lokalen Festplatte (z. B. {{Path|{{DataSamplesPath}}\EMPLOYEES.GDB}}) befindet. Zum Bereitstellen der Anwendung unter OS X müssen Sie die Datenbankdatei in das Mac OS-Dateisystem kopieren (z. B. &#039;&#039;&#039;/Users/&amp;amp;lt;user&amp;amp;gt;/EMPLOYEE.GDB&#039;&#039;&#039;). Außerdem müssen die &#039;&#039;&#039;InterBase ToGo&#039;&#039;&#039;-Dateien für OS X bereitgestellt werden.&lt;br /&gt;
&lt;br /&gt;
===Bereitstellen von InterBase ToGo für OS X===&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie den [[Bereitstellungs-Manager|Bereitstellungs-Manager]] durch Auswahl von &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Projekt &amp;amp;gt; Bereitstellung&#039;&#039;&#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
# Wählen Sie in der Dropdown-Liste der Zielplattformen oben im Bereitstellungs-Manager den Eintrag &#039;&#039;&#039;Alle Konfigurationen - OS X-Plattform&#039;&#039;&#039; aus.&lt;br /&gt;
# Wählen Sie [[Bereitstellungs-Manager - Weitere Dateien hinzufügen|Weitere Dateien hinzufügen]] ([[Image:DMgrAddFeatFiles.png]]):&lt;br /&gt;
#: [[File:AddingFeaturedFiles.png]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Wählen Sie das InterBase ToGo-Datenbankmodul aus, und klicken Sie dann auf &#039;&#039;&#039;OK&#039;&#039;&#039;, um das Dialogfeld &#039;&#039;&#039;Weitere Dateien&#039;&#039;&#039; zu schließen:&lt;br /&gt;
#: [[File:FeaturedFilesOSX.png]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#: Möglicherweise haben Sie von {{Company}} eine Lizenzdatei für ToGo mit dem Muster &#039;&#039;&#039;reg_nnnnnnn.txt&#039;&#039;&#039; (&#039;&#039;&#039;reg_nnnnnnn.txt&#039;&#039;&#039; ist eine generierte Zahl) erhalten:&lt;br /&gt;
#:* Wenn Sie die Datei unter dem Namen &#039;&#039;&#039;reg_ibtogo.txt&#039;&#039;&#039; (im Verzeichnis {{Path|{{PublicInterBasePath}}}}) gespeichert haben, können Sie einfach die gewünschte Lizenz auswählen.&lt;br /&gt;
#:* Wenn Sie die Datei unter ihrem Originalnamen gespeichert haben, dann wählen Sie &#039;&#039;&#039;Dateien hinzufügen&#039;&#039;&#039; und nehmen die Lizenzdatei in die Liste der für die Bereitstellung der Anwendung erforderlichen Dateien auf.&lt;br /&gt;
&lt;br /&gt;
===Ändern des Codes für die Verbindung zu einer lokalen Datenbankdatei unter OS X===&lt;br /&gt;
&lt;br /&gt;
Wie im vorigen Schritt beschrieben, wird die [[lib_de:FireDAC.Comp.Client.TFDConnection|TFDConnection]]-Komponente mit einer Datenbank unter Windows verbunden. Deshalb müssen Sie den Speicherort der Datei vor dem Herstellen einer Verbindung zu der Datenbank wie folgt ändern:&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie im Formular-Designer die &#039;&#039;&#039;FDConnection1&#039;&#039;&#039;-Komponente aus.&lt;br /&gt;
# Doppelklicken Sie im Objektinspektor auf das Feld &#039;&#039;&#039;Wert&#039;&#039;&#039; des &#039;&#039;&#039;BeforeConnect&#039;&#039;&#039;-Ereignisses.&lt;br /&gt;
# Fügen Sie den folgenden Code für diese Ereignisbehandlungsroutine hinzu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
 procedure TForm9.FDConnection1BeforeConnect(Sender: TObject);&lt;br /&gt;
 begin&lt;br /&gt;
 {$IFDEF MACOS}&lt;br /&gt;
   FDConnection1.Params.Values[&#039;Database&#039;]:= &#039;$(DOC)/EMPLOYEE.GDB&#039;;&lt;br /&gt;
 {$ENDIF}&lt;br /&gt;
 end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Beachten Sie, dass &#039;&#039;&#039;$(DOC)&#039;&#039;&#039; eine [[Pfadvariablen (FireDAC)|Pfadvariable]] ist, mit der Sie die Eingabe von Pfadausdrücken vereinfachen können. Unter OS X zeigt die Variable $(DOC) auf das Stammverzeichnis des Benutzers (/Users/&amp;amp;lt;user&amp;amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Ausführen der Anwendung unter Windows und OS X==&lt;br /&gt;
&lt;br /&gt;
Ihre Anwendung kann nun ausgeführt werden. Sie sollten genau wie in der IDE die Daten durchsuchen können.  Sie können mit der [[lib_de:Fmx.Bind.Navigator.TBindNavigator|TBindNavigator]]-Komponente auch Datensätze der Datenbank ändern.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So führen Sie die Anwendung aus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie in der [[Projektverwaltung|Projektverwaltung]] die Zielplattform aus.&amp;lt;br /&amp;gt;[[File:ProjectManagerSelectTarget.png]]&lt;br /&gt;
# Wählen Sie einen der folgenden Befehle aus:&lt;br /&gt;
#* &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Start &amp;amp;gt; Start&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
#* &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Start &amp;amp;gt; Ohne Debugger ausführen&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:RunTimeMac.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Herstellen einer Verbindung zu InterBase (FireDAC)|Herstellen einer Verbindung zu InterBase]]&lt;br /&gt;
* [[Bereitstellungslizenz für IBLite und IBToGo-Testversion|Bereitstellungslizenz für IBLite und IBToGo-Testversion in {{Product}} XE5]]&lt;br /&gt;
* [[Vorbereiten einer FireDAC-Anwendung für die Ausführung|Vorbereiten einer FireDAC-Anwendung für die Ausführung]]&lt;br /&gt;
* [[LiveBindings in RAD Studio|LiveBindings in RAD Studio]]&lt;br /&gt;
* [[Mobile-Tutorial: Verwenden von FireDAC in mobilen Anwendungen (iOS und Android)|Mobile-Tutorial: Verwenden von FireDAC in mobilen Anwendungen (iOS und Android)]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Tutorial: Verwenden von FireDAC aus einer gerateubergreifenden Anwendung auf Desktop-Plattformen}}&lt;br /&gt;
[[Category:FMX]]&lt;br /&gt;
[[Category:FireDAC]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Tutorial: Using FireDAC from a Multi-Device Application on Desktop Platforms]]&lt;br /&gt;
[[fr:Tutoriel : Utilisation de FireDAC depuis une application multi-périphérique sur les plates-formes de bureau]]&lt;br /&gt;
[[ja:チュートリアル：デスクトップ プラットフォーム上のマルチデバイス アプリケーションから FireDAC を使用する]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Tutorial:_Verbinden_mit_einer_SQLite-Datenbank_aus_einer_ger%C3%A4te%C3%BCbergreifenden_Anwendung_auf_Desktop-Plattformen&amp;diff=208911</id>
		<title>Tutorial: Verbinden mit einer SQLite-Datenbank aus einer geräteübergreifenden Anwendung auf Desktop-Plattformen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Tutorial:_Verbinden_mit_einer_SQLite-Datenbank_aus_einer_ger%C3%A4te%C3%BCbergreifenden_Anwendung_auf_Desktop-Plattformen&amp;diff=208911"/>
		<updated>2016-06-24T10:45:32Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Tutorials zu Datenbanken und LiveBindings}}&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial wird anhand einer einfachen &#039;&#039;&#039;geräteübergreifenden Anwendung&#039;&#039;&#039; gezeigt, wie eine Verbindung mit einer SQLite-Datenbank hergestellt und eine einfache Abfrage ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorial wird eine von Embarcadero bereitgestellte Datenbank verwendet, Sie können aber jede SQLite-Datenbank einsetzen, die für Sie verfügbar ist. Die in diesem Tutorial verwendete Datenbank befindet sich hier:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Windows&#039;&#039;&#039;: {{Path|{{DataSamplesPath}}\Employees.s3db}}.&lt;br /&gt;
* &#039;&#039;&#039;OS X&#039;&#039;&#039;: Sie können die von {{Company}} bereitgestellte Datenbank auf Ihren Mac kopieren. Denken Sie vor der Bereitstellung Ihrer Anwendung daran, [[Aktivieren und Konfigurieren der Zielplattform#Aktivieren einer Zielplattform|&#039;&#039;&#039;OS X&#039;&#039;&#039; als Zielplattform auszuwählen]], und Ihr &#039;&#039;&#039;[[Verbindungsprofil-Manager|Verbindungsprofil]]&#039;&#039;&#039; zu überprüfen. &lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das SQLite-Programm ist in &#039;&#039;&#039;OS X&#039;&#039;&#039; ab Version 10.4 enthalten und befindet sich im Verzeichnis {{Path|/usr/bin}}. Wählen Sie zum Erstellen einer Datenbank einfach {{ menu | Programme &amp;amp;gt; Dienstprogramme &amp;amp;gt; Terminal}} aus. Öffnen Sie ein Terminalfenster, und geben Sie &amp;lt;code&amp;gt;sqlite3&amp;amp;lt;Datenbankname&amp;amp;gt;&amp;lt;/code&amp;gt; ein.&lt;br /&gt;
&lt;br /&gt;
Die Datenbank enthält eine Tabelle namens &#039;&#039;&#039;Employee&#039;&#039;&#039; und mehrere Tupel mit Feldern.  Im Folgenden wird eine Verbindung zu der Datenbank hergestellt, und alle Tupel in der Tabelle &#039;&#039;&#039;Employee&#039;&#039;&#039; werden angezeigt.&lt;br /&gt;
&lt;br /&gt;
==Schritte==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt; Erstellen Sie eine geräteübergreifende Anwendung für {{Delphi}} oder C++:&lt;br /&gt;
* {{menu | Datei &amp;amp;gt; Neu &amp;amp;gt; Geräteübergreifende Anwendung - {{Delphi}} &amp;amp;gt; Leere Anwendung}}&lt;br /&gt;
* {{menu | Datei &amp;amp;gt; Neu &amp;amp;gt; Geräteübergreifende Anwendung - {{CBuilderUI}} &amp;amp;gt; Leere Anwendung}}&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Aktivieren und Konfigurieren der Zielplattform#Aktivieren einer Zielplattform|Aktivieren Sie eine Zielplattform]] in der &#039;&#039;&#039;[[Projektverwaltung|Projektverwaltung]]&#039;&#039;&#039;. Geräteübergreifende Anwendungen unterstützen die folgenden Plattformen:&lt;br /&gt;
* &#039;&#039;&#039;32-Bit-Windows&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;OS X&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Hinweis: &#039;&#039;&#039; Wenn die gewünschte Zielplattform nicht in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; angezeigt wird, klicken Sie mit der rechten Maustaste auf den Knoten &#039;&#039;&#039;[[Übersicht über Zielplattformen|Zielplattform]]&#039;&#039;&#039;, um Ihrem Projekt diese Zielplattform hinzuzufügen. Weitere Informationen finden Sie unter [[Aktivieren und Konfigurieren der Zielplattform|Aktivieren und Konfigurieren der Zielplattform]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Doppelklicken Sie im [[Objektinspektor|Objektinspektor]] auf das Ereignis [[lib_de:FMX.Forms.TForm.OnCreate|onCreate]] des Formulars, und fügen Sie den folgenden Code hinzu:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TDemonstration.FormCreate(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  Self.Caption := &#039;Demonstration&#039;;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TDemonstration::FormCreate(TObject *Sender) {&lt;br /&gt;
	this-&amp;gt;Caption = &amp;quot;Demonstration&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fügen Sie Ihrem Formular die folgenden Komponenten hinzu:&lt;br /&gt;
* Zwei [[lib_de:FMX.StdCtrls.TButton|TButton]]-Steuerelemente; setzen Sie im &#039;&#039;&#039;[[Objektinspektor|Objektinspektor]]&#039;&#039;&#039; die Eigenschaft [[lib_de:System.Classes.TComponent.Name|Name]] der beiden Schaltflächen auf &amp;lt;code&amp;gt;executeButton&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;connectButton&amp;lt;/code&amp;gt; und die Eigenschaft [[lib_de:FMX.Controls.TTextControl.Text|Text]] auf &amp;lt;code&amp;gt;Execute&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Connect&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein [[lib_de:Data.SqlExpr.TSQLConnection|TSQLConnection]]-Steuerelement; setzen Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; die Eigenschaft [[lib_de:Data.SqlExpr.TSQLConnection.DriverName|Driver]] auf &amp;lt;code&amp;gt;Sqlite&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein [[lib_de:FMX.Memo.TMemo|TMemo]]-Steuerelement; setzen Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; die Eigenschaft [[lib_de:System.Classes.TComponent.Name|Name]] auf &amp;lt;code&amp;gt;outputMemo&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein [[lib_de:Data.SqlExpr.TSQLQuery|TSQLQuery]]-Steuerelement; setzen Sie im &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039; die Eigenschaft [[lib_de:Data.SqlExpr.TCustomSQLDataSet.SQLConnection|SQLConnection]] auf &amp;lt;code&amp;gt;SQLConnection1&amp;lt;/code&amp;gt;. &lt;br /&gt;
:&lt;br /&gt;
::Jetzt sollte Ihr Formular etwa folgendermaßen aussehen: &lt;br /&gt;
:[[File:FMXSQLiteTutorialForm.png|350px]]      &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Erstellen Sie in Ihrer Unit eine neue &#039;&#039;&#039;setParamsToConnect&#039;&#039;&#039;-Prozedur, und fügen Sie den folgenden Code hinzu:&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Ersetzen Sie &amp;quot;full_path_to_your_database_file&amp;quot; durch den absoluten Pfad zu Ihrer Datenbankdatei.&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TDemonstration.setParamsToConnect();&lt;br /&gt;
begin&lt;br /&gt;
  //  If Database param does not exist, it adds it. Otherwise, the existing value is overwritten.&lt;br /&gt;
  if SQLConnection1.Params.IndexOf (&#039;Database=&#039;) = -1 then&lt;br /&gt;
    SQLConnection1.Params.Add(&#039;Database=full_path_to_your_database_file&#039;);&lt;br /&gt;
  else&lt;br /&gt;
   SQLConnection1.Params.Values [&#039;Database&#039;] := &#039;full_path_to_your_database_file&#039;;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
::&lt;br /&gt;
:::&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Vergessen Sie nicht die Deklaration von&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt; procedure setParamsToConnect();&amp;lt;/source&amp;gt; im &amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;interface&amp;lt;/source&amp;gt;-Abschnitt Ihrer Quelldatei.&lt;br /&gt;
&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TDemonstration::setParamsToConnect() {&lt;br /&gt;
	// Use double backslash in Windows paths, as the backslash character (\) must be escaped with another backslash to be treated literally.&lt;br /&gt;
	if (SQLConnection1-&amp;gt;Params-&amp;gt;IndexOf(&amp;quot;Database&amp;quot;) == -1) {&lt;br /&gt;
		SQLConnection1-&amp;gt;Params-&amp;gt;Add(&amp;quot;Database=full_path_to_your_database_file&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		SQLConnection1-&amp;gt;Params-&amp;gt;Values[&amp;quot;Database&amp;quot;] = &amp;quot;full_path_to_your_database_file&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
::&lt;br /&gt;
:::&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Vergessen Sie nicht die Deklaration von&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt; void __fastcall TDemonstration::setParamsToConnect();  &amp;lt;/source&amp;gt; in der Datei {{Path|Unit.h}} Ihres Projekts.&lt;br /&gt;
&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Doppelklicken Sie im [[Objektinspektor|Objektinspektor]] auf das Ereignis [[lib_de:Data.SqlExpr.TSQLConnection.BeforeConnect|BeforeConnect]] der [[lib_de:Data.SqlExpr.TSQLConnection|TSQLConnection]]-Komponente.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fügen Sie den folgenden Code für diese Ereignisbehandlungsroutine hinzu:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TDemonstration.SQLConnection1BeforeConnect(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
   SetParamsToConnect;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TDemonstration::SQLConnection1BeforeConnect(TObject *Sender) {&lt;br /&gt;
	setParamsToConnect();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fügen Sie der [[lib_de:FMX.Controls.TControl.OnClick|OnClick]]-Ereignisbehandlungsroutine von &amp;lt;code&amp;gt;connectButton&amp;lt;/code&amp;gt; den folgenden Code hinzu.&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TDemonstration.connectButtonClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
  try&lt;br /&gt;
    // Establish the connection.&lt;br /&gt;
    outputMemo.Lines.Clear;&lt;br /&gt;
    SQLConnection1.Connected := true;&lt;br /&gt;
    executeButton.Enabled := true;&lt;br /&gt;
    outputMemo.Text := &#039;Connection established!&#039;;&lt;br /&gt;
  except&lt;br /&gt;
    on E: EDatabaseError do&lt;br /&gt;
      ShowMessage(&#039;Exception raised with message&#039; + E.Message);&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void __fastcall TDemonstration::connectButtonClick(TObject *Sender) {&lt;br /&gt;
	outputMemo-&amp;gt;Lines-&amp;gt;Clear();&lt;br /&gt;
	try {&lt;br /&gt;
		SQLConnection1-&amp;gt;Connected = true;&lt;br /&gt;
		executeButton-&amp;gt;Enabled = true;&lt;br /&gt;
		outputMemo-&amp;gt;Text = &amp;quot;Connection established!&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	catch (EDatabaseError&amp;amp; E) {&lt;br /&gt;
		ShowMessage(&amp;quot;Exception raised with message&amp;quot; + E.Message);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Fügen Sie der [[lib_de:FMX.Controls.TControl.OnClick|OnClick]]-Ereignisbehandlungsroutine von &amp;lt;code&amp;gt;executeButton&amp;lt;/code&amp;gt; den folgenden Code hinzu.&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TDemonstration.executeButtonClick(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
  query: String;&lt;br /&gt;
begin&lt;br /&gt;
  outputMemo.Lines.Clear;&lt;br /&gt;
  // A random query&lt;br /&gt;
  query := &#039;SELECT * FROM Employee;&#039;;&lt;br /&gt;
  try&lt;br /&gt;
    // Assign the query to the object SQLQuery1.&lt;br /&gt;
    SQLQuery1.SQL.Text := query;&lt;br /&gt;
    SQLQuery1.Active := true;&lt;br /&gt;
  except&lt;br /&gt;
    on E: Exception do&lt;br /&gt;
      outputMemo.Text := &#039;Exception raised with message: &#039; + E.Message;&lt;br /&gt;
  end;&lt;br /&gt;
  // Show the results of the query in a TMemo control.&lt;br /&gt;
  ShowSelectResults();&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TDemonstration::executeButtonClick(TObject *Sender) {&lt;br /&gt;
	String query;&lt;br /&gt;
&lt;br /&gt;
	outputMemo-&amp;gt;Lines-&amp;gt;Clear();&lt;br /&gt;
	// A random query&lt;br /&gt;
	query = &amp;quot;SELECT * FROM Employee;&amp;quot;;&lt;br /&gt;
	try {&lt;br /&gt;
		// Assign the query to the object SQLQuery1.&lt;br /&gt;
		SQLQuery1-&amp;gt;SQL-&amp;gt;Text = query;&lt;br /&gt;
		SQLQuery1-&amp;gt;Active = true;&lt;br /&gt;
	}&lt;br /&gt;
	catch (Exception&amp;amp; E) {&lt;br /&gt;
		outputMemo-&amp;gt;Text = &amp;quot;Exception raised with message&amp;quot; + E.Message;&lt;br /&gt;
	}&lt;br /&gt;
	// Show the results of the query in a TMemo control.&lt;br /&gt;
	ShowSelectResults();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fügen Sie den folgenden Code für die Prozedur &amp;lt;code&amp;gt;ShowSelectResults&amp;lt;/code&amp;gt; hinzu:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure TDemonstration.ShowSelectResults();&lt;br /&gt;
var&lt;br /&gt;
  names: TStringList;&lt;br /&gt;
  i: Integer;&lt;br /&gt;
  currentField: TField;&lt;br /&gt;
  currentLine: string;&lt;br /&gt;
begin&lt;br /&gt;
  if not SQLQuery1.IsEmpty then&lt;br /&gt;
  begin&lt;br /&gt;
    SQLQuery1.First;&lt;br /&gt;
    names := TStringList.Create;&lt;br /&gt;
    SQLQuery1.GetFieldNames(names);&lt;br /&gt;
    while not SQLQuery1.Eof do&lt;br /&gt;
    begin&lt;br /&gt;
      currentLine := &#039;&#039;;&lt;br /&gt;
      for i := 0 to names.Count - 1 do&lt;br /&gt;
      begin&lt;br /&gt;
        currentField := SQLQuery1.FieldByName(names[i]);&lt;br /&gt;
        currentLine := currentLine + &#039; &#039; + currentField.AsString;&lt;br /&gt;
      end;&lt;br /&gt;
      outputMemo.Lines.Add(currentLine);&lt;br /&gt;
      SQLQuery1.Next;&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
::&lt;br /&gt;
:::&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Vergessen Sie nicht die Deklaration von&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt; procedure ShowSelectResults();&amp;lt;/source&amp;gt; im &amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;interface&amp;lt;/source&amp;gt;-Abschnitt Ihrer Quelldatei.&lt;br /&gt;
&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void __fastcall TDemonstration::ShowSelectResults()&lt;br /&gt;
{&lt;br /&gt;
	TStringList* names;&lt;br /&gt;
	TField* currentField;&lt;br /&gt;
	String currentLine;&lt;br /&gt;
&lt;br /&gt;
	if (!SQLQuery1-&amp;gt;IsEmpty()) {&lt;br /&gt;
	SQLQuery1-&amp;gt;First();&lt;br /&gt;
	names = new TStringList;&lt;br /&gt;
	SQLQuery1-&amp;gt;GetFieldNames(names);&lt;br /&gt;
	while (!SQLQuery1-&amp;gt;Eof)&lt;br /&gt;
		{&lt;br /&gt;
		currentLine = &amp;quot;&amp;quot;;&lt;br /&gt;
		for (int i = 0; i &amp;lt; names-&amp;gt;Count; ++i)&lt;br /&gt;
		{&lt;br /&gt;
			currentField = SQLQuery1-&amp;gt;FieldByName(names-&amp;gt;Strings[i]);&lt;br /&gt;
			currentLine = currentLine + &amp;quot; &amp;quot; + currentField-&amp;gt;AsString;&lt;br /&gt;
		 }&lt;br /&gt;
		 outputMemo-&amp;gt;Lines-&amp;gt;Add(currentLine);&lt;br /&gt;
		 SQLQuery1-&amp;gt;Next();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
::&lt;br /&gt;
:::&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Vergessen Sie nicht die Deklaration von&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;delphi&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt; void __fastcall TDemonstration::ShowSelectResults();  &amp;lt;/source&amp;gt; in der Datei {{Path|Unit.h}} Ihres Projekts.&lt;br /&gt;
&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Ausführen Ihrer Anwendung und dem Klicken auf die Schaltfläche &#039;&#039;&#039;Connect&#039;&#039;&#039; und dann auf die Schaltfläche &#039;&#039;&#039;Execute&#039;&#039;&#039; sollte Ihre Anwendung wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
:[[File:FMXSQLiteTutorialApp.png|350px]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Um unter Windows eine Verbindung mit einer SQLite-Datenbank herzustellen, müssen Sie die Bibliothek &#039;&#039;&#039;sqlite3.dll&#039;&#039;&#039; Ihrem Systempfad hinzufügen und sicherstellen, dass &#039;&#039;&#039;sqlite3.dll&#039;&#039;&#039; von Ihrer Anwendung gefunden werden kann.&lt;br /&gt;
&lt;br /&gt;
* 32-Bit-Windows: C:\Windows\System32&lt;br /&gt;
* 64-Bit-Windows: C:\Windows\SysWOW64&lt;br /&gt;
&lt;br /&gt;
==Verwendete Komponenten und Ereignisse==&lt;br /&gt;
&lt;br /&gt;
* [[lib_de:Data.DB.TDataSet|Data.DB.TDataSet]]&lt;br /&gt;
* [[lib_de:Data.DB.TField|Data.DB.TField]]&lt;br /&gt;
* [[lib_de:System.Classes.TStringList|System.Classes.TStringList]]&lt;br /&gt;
* [[lib_de:Data.SqlExpr.TSQLConnection|Data.SqlExpr.TSQLConnection]]&lt;br /&gt;
* [[lib_de:Data.SqlExpr.TSQLConnection.BeforeConnect|Data.SqlExpr.TSQLConnection.BeforeConnect]]&lt;br /&gt;
* [[lib_de:FMX.StdCtrls.TButton|FMX.StdCtrls.TButton]]&lt;br /&gt;
* [[lib_de:FMX.Memo.TMemo|FMX.Memo.TMemo]]&lt;br /&gt;
* [[lib_de:FMX.Controls.TControl.OnClick|FMX.Controls.TControl.OnClick]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Unterstützung von SQLite in RAD Studio|Unterstützung von SQLite in RAD Studio]]&lt;br /&gt;
* [[Tutorial: TSQLMonitor-Unterstützung für SQLite-Datenbanken|Tutorial: TSQLMonitor-Unterstützung für SQLite-Datenbanken&lt;br /&gt;
]]&lt;br /&gt;
* [[TSQLConnection einrichten|TSQLConnection einrichten]]&lt;br /&gt;
* [[Objektinspektor|Objektinspektor]]&lt;br /&gt;
* [[lib_de:System.Classes.TComponent.Name|System.Classes.TComponent.Name]]&lt;br /&gt;
* [[lib_de:FMX.Forms.TForm.Caption|FMX.Forms.TForm.Caption]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Tutorial: Verbinden mit einer SQLite-Datenbank aus einer gerateubergreifenden Anwendung auf Desktop-Plattformen}}&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:XE6]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Tutorial: Connecting to a SQLite Database from a Multi-Device Application on Desktop Platforms]]&lt;br /&gt;
[[fr:Tutoriel : Connexion à une base de données SQLite depuis une application multi-périphérique sur les plates-formes de bureau]]&lt;br /&gt;
[[ja:チュートリアル：デスクトップ プラットフォーム上のマルチデバイス アプリケーションから SQLite データベースに接続する]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Fehlerbehebung:_Kann_nicht_auf_dem_iOS-Ger%C3%A4t_bereitgestellt_werden&amp;diff=208910</id>
		<title>Fehlerbehebung: Kann nicht auf dem iOS-Gerät bereitgestellt werden</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Fehlerbehebung:_Kann_nicht_auf_dem_iOS-Ger%C3%A4t_bereitgestellt_werden&amp;diff=208910"/>
		<updated>2016-06-24T10:45:13Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Mobile iOS-Anwendungsentwicklung}}&lt;br /&gt;
&lt;br /&gt;
Suchen Sie in den folgenden Bereichen nach einer Lösung für dieses Problem:&lt;br /&gt;
&lt;br /&gt;
# Nur {{Delphi}}: Wenn Sie die iOS-App nicht auf dem iOS-Simulator ausführen, überprüfen Sie, ob die im folgenden Thema beschriebenen Anforderungen erfüllt sind:&lt;br /&gt;
#*[[RunIOSSimulatorFailedHelpPage|Fehlerbehebung: Kann nicht auf dem iOS-Simulator bereitgestellt werden]]&lt;br /&gt;
# [[Ausführen von iOS-Anwendungen auf einem iOS-Gerät|Überprüfen Sie, ob Ihr iOS-Gerät über ein USB-Kabel an Ihren Mac angeschlossen ist]].&lt;br /&gt;
# [[Ausführen von iOS-Anwendungen auf einem iOS-Gerät|Geben Sie eine iOS-Geräteplattform als Zielplattform in der Projektverwaltung an]].&lt;br /&gt;
#[[Ausfüllen der Bereitstellungsseite|Füllen Sie die Bereitstellungsseite aus]]. (Für die Codesignierung ist Ihr Entwicklerzertifikat erforderlich.)&lt;br /&gt;
#* [[Bereitstellungsseite#Entwicklerzertifikat|Stellen Sie sicher, dass ein gültiges Zertifikat auf Ihrem Mac installiert ist.]]&lt;br /&gt;
#* [[Bereitstellen von iOS-Anwendungen#Erstellen und Installieren von Bereitstellungsprofilen|Überprüfen Sie, ob ein gültiges Bereitstellungsprofil auf Ihrem iOS-Gerät installiert ist]].&lt;br /&gt;
# Legen Sie die erforderlichen &#039;&#039;&#039;Projektoptionen&#039;&#039;&#039; für Ihre iOS-App fest:&lt;br /&gt;
#* [[Anwendungsoptionen|Legen Sie Ihre Programmsymbole fest - Anwendungsoptionen]].&lt;br /&gt;
#* [[Versionsinformationen|Legen Sie info.plist-Schlüssel, wie z. B. UIDeviceFamily, fest - Versionsinformationen]].&lt;br /&gt;
# Stellen Sie sicher, dass die [[Installieren der Xcode-Befehlszeilen-Tools auf einem Mac|Xcode-Befehlszeilentools auf dem Mac installiert sind]]. (Erforderlich für die Codesignierung Ihrer iOS-App.)&lt;br /&gt;
# [[Ausführen von iOS-Anwendungen auf einem iOS-Gerät#&#039;Mit Info für angeschlossenes Gerät übereinstimmendes DeviceSupport-Verzeichnis nicht gefunden&#039;|Aktualisieren Sie Xcode, wenn eine neuere Version verfügbar ist]]. (Nach der Aktualisierung Ihres iOS-Geräts erforderlich)&lt;br /&gt;
# Wenn ein Dialogfeld mit der Fehlermeldung &amp;quot;Package kann nicht installiert werden&amp;quot; und einem Fehlercode angezeigt wird, führen Sie die unten für den jeweiligen Fehlercode beschriebenen Schritte aus:&lt;br /&gt;
#* &#039;&#039;&#039;e800000e:&#039;&#039;&#039; Die auf Ihrem Mac installierte Version von Xcode unterstützt die iOS-Version Ihres Gerätes nicht. Installieren Sie eine Version von Xcode auf Ihrem Mac, die die iOS-Version Ihres Gerätes unterstützt. Trennen Sie nach der Aktualisierung Ihr iOS-Gerät von Ihrem Mac und schließen Sie es wieder an.&lt;br /&gt;
#* &#039;&#039;&#039;e800001c:&#039;&#039;&#039; Wenn der iOS-Simulator auf Ihrem Mac ausgeführt wird, schließen Sie den Simulator, und versuchen Sie dann erneut, die Anwendung auf Ihrem iOS-Gerät auszuführen.&lt;br /&gt;
#*&#039;&#039;&#039;e800002d:&#039;&#039;&#039; Das auf Ihrem Mac gefundene Debug-Symbol stimmt nicht mit dem auf Ihrem iOS-Gerät überein. &lt;br /&gt;
#** Wenn Sie ein neues &#039;&#039;&#039;Xcode&#039;&#039;&#039; installieren oder das Gerät mit einer neuen iOS-Version aktualisieren, müssen Sie Ihr iOS-Gerät mit dem neuen auf Ihrem Mac installierten &#039;&#039;&#039;Xcode&#039;&#039;&#039; synchronisieren. Weitere Informationen finden Sie unter [[#Synchronisieren von Xcode mit Ihrem iOS-Gerät|Synchronisieren von Xcode mit Ihrem iOS-Gerät]].&lt;br /&gt;
#*&#039;&#039;&#039;e800003a:&#039;&#039;&#039; Sie versuchen, eine Anwendung mit demselben Namen wie eine früher installierte Anwendung auf dem Zielgerät zu installieren, aber Sie signieren die Anwendung mit einem anderen [[Bereitstellungsseite#Entwicklerzertifikat|Entwicklerzertifikat]]. {{Product}} versucht, die vorhandene Anwendung mit einem anderen Entwicklerzertifikat zu aktualisieren.&lt;br /&gt;
#** Deinstallieren Sie die vorhandene Anwendung auf dem Zielgerät, und versuchen Sie, Ihre Anwendung erneut auszuführen.&lt;br /&gt;
#** Wählen Sie unter {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; Bereitstellung}} dasselbe [[Bereitstellungsseite#Entwicklerzertifikat|Entwicklerzertifikat]] für die Signierung Ihrer Anwendung aus.&lt;br /&gt;
#*&#039;&#039;&#039;e800007e:&#039;&#039;&#039; Ihre iOS-Geräteversion entspricht nicht den Mindestanforderungen.&lt;br /&gt;
#*: Wählen Sie {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; {{Delphi}}-Compiler &amp;amp;gt; [[Linken|Linken]]}} und ändern Sie &#039;&#039;&#039;Niedrigste unterstützte iOS-Version&#039;&#039;&#039; in die Version Ihres iOS-Gerätes. Zum Beispiel: {{Code|7.0}}. (Wenn das Problem dadurch nicht behoben wird, müssen Sie u. U. ein neueres iOS-Gerät kaufen.)&lt;br /&gt;
#*&#039;&#039;&#039;e8000080:&#039;&#039;&#039; Sie versuchen, Ihre iOS-Anwendung auf einem iOS-Gerät auszuführen, das nicht den für Ihr Projekt definierten [[Einstellungen für Standards in RAD Studio|iOS-Standards]] (UIDeviceFamily) entspricht. Beispielsweise versuchen Sie möglicherweise, Ihre iOS-Anwendung auf einem iPad auszuführen, aber Ihre Anwendung ist nur für die Ausführung auf einem iPhone konfiguriert.&lt;br /&gt;
#*: Wählen Sie {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; [[Versionsinformationen#OS X- und iOS-Versionsinformationen|Versionsinformationen]]}}, und wählen Sie einen {{Code|UIDeviceFamily}}-Wert aus, der zu Ihrem iOS-Gerät passt. Wählen Sie z. B. &#039;&#039;&#039;iPhone &amp;amp;amp; iPad&#039;&#039;&#039; aus, um Ihre Anwendung auf einem beliebigen iOS-Gerät auszuführen.&lt;br /&gt;
#*&#039;&#039;&#039;e8000087:&#039;&#039;&#039; Ihr iOS-Gerät unterstützt die ausgewählte Zielplattformarchitektur nicht. Dies kommt vor, wenn Sie versuchen, eine 64-Bit-iOS-Anwendung auf einem 32-Bit-iOS-Gerät auszuführen. Damit Ihre Anwendung auf einem Gerät ausgeführt wird, müssen Sie die folgenden Schritte ausführen:&lt;br /&gt;
#** Ändern Sie das Zielgerät in ein 64-Bit-iOS-Gerät.&lt;br /&gt;
#** Wählen Sie in der [[Projektverwaltung|Projektverwaltung]] als [[Unterstützte Zielplattformen|Zielplattform]] &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039; aus, um Ihre Anwendung auf einem beliebigen 32-Bit-iOS-Gerät auszuführen.&lt;br /&gt;
#** Aktivieren Sie die Option &#039;&#039;&#039;Universelle iOS-Binärdatei generieren (armv7 + arm64)&#039;&#039;&#039;, um Ihre Anwendung so zu erzeugen, dass sie 32-Bit- und 64-Bit-iOS-Geräte unterstützt. Sie finden diese Option in:&lt;br /&gt;
#*** {{Menu|Projekt &amp;amp;gt; Optionen &amp;amp;gt; {{Delphi}}-Compiler &amp;amp;gt; Compilieren &amp;amp;gt; [[Compilieren#Weitere Optionen|Weitere Optionen]]}} ({{Delphi}})&lt;br /&gt;
#*** {{Menu|Project &amp;amp;gt; Options &amp;amp;gt; C++-Compiler &amp;amp;gt; Erweitert &amp;amp;gt; [[C++-Compiler Erweitert#Weitere Optionen|Weitere Optionen]]}} (C++)&lt;br /&gt;
#*&#039;&#039;&#039;e8000097:&#039;&#039;&#039; Sie haben auf dem Ziel-iOS-Gerät Beschränkungen aktiviert, die die Installation neuer Anwendungen auf dem Gerät verhindern. Weitere Informationen finden Sie unter [https://support.apple.com/en-us/HT201304 About Restrictions (parental controls) (EN)].&lt;br /&gt;
#*: Deaktivieren Sie die Beschränkungen auf dem Zielgerät, und versuchen Sie, Ihre Anwendung erneut auszuführen.&lt;br /&gt;
#*&#039;&#039;&#039;e8008015:&#039;&#039;&#039; Das iOS-Zielgerät wurde nicht mit dem Bereitstellungsprofil bereitgestellt, das Sie in {{Variables|Product}} konfiguriert haben.&lt;br /&gt;
#*: Sie können entweder [[Bereitstellen von iOS-Anwendungen|das Zielgerät mit dem konfigurierten Bereitstellungsprofil bereitstellen]], oder Sie ändern das Bereitstellungsprofil in der Projektkonfiguration von {{Variables|Product}}. Siehe [[Ausfüllen der Bereitstellungsseite|Ausfüllen der Bereitstellungsseite]].&lt;br /&gt;
#*: Stellen Sie sicher, dass Ihre Bereitstellungsdaten in &#039;&#039;&#039;{{Variables|Product}}&#039;&#039;&#039; mit Ihrem iOS-Entwicklerkonto übereinstimmen und nicht mit Ihrem Mac-Entwicklerkonto. Gehen Sie bei der Angabe des [[Bereitstellungsseite#Entwicklerzertifikat|Namens Ihres iOS-Entwicklerzertifikats]] besonders sorgfältig vor.&lt;br /&gt;
#*&#039;&#039;&#039;e8008016:&#039;&#039;&#039; Mögliche Ursachen:&lt;br /&gt;
#** Sie haben [[Berechtigungsliste#Berechtigungsliste für iOS|Berechtigungsoptionen für iOS]] festgelegt, die vom auf dem Zielgerät installierten [[Bereitstellen von iOS-Anwendungen|Bereitstellungsprofil]] nicht zugelassen werden.&lt;br /&gt;
#**: Wenn Sie in Ihrer Anwendung &#039;&#039;&#039;[[Mobile-Tutorial: Verwenden von Remote-Mitteilungen (iOS und Android)|Remote-Mitteilungen]]&#039;&#039;&#039; verwenden, müssen Sie sicherstellen, dass Sie die korrekten [[Einrichten des Messaging-Dienstes#Registrieren bei Apple|Anwendungsdienste]] für das auf dem Zielgerät installierte Bereitstellungsprofil festgelegt haben.&lt;br /&gt;
#** Wenn Sie zum Signieren Ihrer Anwendung in den [[Bereitstellungsseite#Bereitstellungsoptionen|Bereitstellungsoptionen]] &amp;quot;Auto&amp;quot; verwenden, müssen Sie überprüfen, ob die [[Bereitstellungsseite|Signaturdaten]] für Ihr Zielgerät gültig sind. Möglicherweise müssen Sie einen bestimmten [[Bereitstellungsseite#Entwicklerzertifikat|Namen des Entwicklerzertifikats]] und ein [[Bereitstellungsseite#Bereitstellungsprofil|Bereitstellungsprofil]] auswählen.&lt;br /&gt;
#** Legen Sie auf der Seite &#039;&#039;&#039;[[Bereitstellungsseite|Bereitstellung]]&#039;&#039;&#039; den richtigen Wert für die {{Code|CFBundleIdentifier}}-Felder für Ihre Ziel-iOS-Plattform fest. Siehe [[Bereitstellen von iOS-Anwendungen#Erstellen von App-IDs für Anwendungen|Erstellen von App-IDs für Anwendungen]].&lt;br /&gt;
#* &#039;&#039;&#039;e8008018:&#039;&#039;&#039; Ihr Zertifikat ist veraltet. [[Bereitstellen von iOS-Anwendungen#Erstellen und Installieren von Bereitstellungsprofilen|Laden Sie eine neue Version Ihres Zertifikats herunter]].&lt;br /&gt;
#* &#039;&#039;&#039;e8008019:&#039;&#039;&#039; Dieser Fehler tritt auf, wenn Sie versuchen, eine für die Plattformkonfiguration &#039;&#039;&#039;Anwendungs-Store&#039;&#039;&#039; erstellte Anwendung auf einem iOS-Gerät auszuführen. Um eine Anwendung auf einem iOS-Gerät auszuführen, müssen Sie die Plattformkonfiguration &#039;&#039;&#039;Debug&#039;&#039;&#039; oder &#039;&#039;&#039;Ad hoc&#039;&#039;&#039; verwenden. Um Ihr Anwendungspaket für die Übermittlung an den App Store zu generieren, müssen Sie [[Bereitstellen von iOS-Anwendungen für die Übermittlung an den App Store|Ihre Anwendung bereitstellen]].&lt;br /&gt;
# Wenn ein Dialogfeld mit der Fehlermeldung &amp;quot;Mit Info für angeschlossenes Gerät übereinstimmendes DeviceSupport-Verzeichnis nicht gefunden&amp;quot; angezeigt wird, führen Sie folgende Schritte aus:&lt;br /&gt;
#* Überprüfen Sie, ob die &#039;&#039;&#039;Xcode&#039;&#039;&#039;-Version die SDK-Version auf Ihrem Gerät unterstützt. Wenn das Gerät nicht unterstützt wird, müssen Sie &#039;&#039;&#039;Xcode&#039;&#039;&#039; auf eine höhere Version aktualisieren. Siehe [[Ausführen von iOS-Anwendungen auf einem iOS-Gerät#&amp;quot;Mit Info für angeschlossenes Gerät übereinstimmendes DeviceSupport-Verzeichnis nicht gefunden&amp;quot;|Ausführen von iOS-Anwendungen auf einem iOS-Gerät]]. &lt;br /&gt;
#* Wenn die SDK-Versionen kompatibel sind, finden Sie weitere Informationen unter [[#Synchronisieren von Xcode mit Ihrem iOS-Gerät|Synchronisieren von Xcode mit Ihrem iOS-Gerät]].&lt;br /&gt;
# Wenn ein Dialogfeld mit der Fehlermeldung &amp;quot;Application bundle should have Info.plist inside&amp;quot; (Anwendungspaket muss Info.plist enthalten) angezeigt wird, wählen Sie {{Menu|Projekt &amp;amp;gt; Erzeugen &amp;amp;gt; ProjektName}} um die [[Apple-Anwendungsinformationsdatei (*.info.plist)|Datei info.plist]] erneut zu generieren.&lt;br /&gt;
# Wenn ein Dialogfeld mit der Fehlermeldung &amp;quot;The program being debugged is not being run&amp;quot; (Das Programm, das gedebuggt werden soll, wird nicht ausgeführt) angezeigt wird, starten Sie Ihr iOS-Gerät und Ihren Mac neu.&lt;br /&gt;
&lt;br /&gt;
Wenn am unteren Rand der {{Variables|Product}}-Benutzeroberfläche im Tool-Fenster &#039;&#039;&#039;Meldungen&#039;&#039;&#039; ein Fehlereintrag mit einem Fehlercode angezeigt wird, wählen Sie diesen Eintrag aus, und drücken Sie &#039;&#039;&#039;F1&#039;&#039;&#039;, um die Hilfe für diesen Fehler zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Synchronisieren von Xcode mit einem iOS-Gerät==&lt;br /&gt;
&lt;br /&gt;
Sie müssen sicherstellen, dass das auf dem Mac installierte Xcode die iOS-Version auf dem iOS-Gerät unterstützt und dass beide miteinander synchronisiert sind. Frühen Sie dazu die folgenden Schritte aus:&lt;br /&gt;
&lt;br /&gt;
# Trennen Sie die Verbindung Ihres iOS-Geräts mit dem Mac.&lt;br /&gt;
# Öffnen Sie &#039;&#039;&#039;Xcode&#039;&#039;&#039; auf Ihrem Mac.&lt;br /&gt;
# Wählen Sie im Hauptmenü &#039;&#039;&#039;Fenster&#039;&#039;&#039;, &#039;&#039;&#039;Geräte&#039;&#039;&#039; aus.&lt;br /&gt;
# Schließen Sie Ihr iOS-Gerät wieder an den Mac an.&lt;br /&gt;
# Wählen Sie im Fenster &#039;&#039;&#039;Geräte&#039;&#039;&#039; auf der linken Seite des Fensters Ihr iOS-Gerät aus.&lt;br /&gt;
# Warten Sie, bis der Ladecursor [[Image:OSX Loader Wheel.png|25px]] ausgeblendet wird. Danach können Sie &#039;&#039;&#039;Xcode&#039;&#039;&#039; schließen und versuchen, die Anwendung erneut auszuführen oder zu debuggen.&lt;br /&gt;
&lt;br /&gt;
===Weitere Informationen finden Sie in den folgenden Hilfethemen===&lt;br /&gt;
&lt;br /&gt;
* [[Ausführen von iOS-Anwendungen auf einem iOS-Gerät|Ausführen von iOS-Anwendungen auf einem iOS-Gerät]]&lt;br /&gt;
* [[Vorbereiten von iOS-Anwendungen für die Bereitstellung|Vorbereiten von iOS-Anwendungen für die Bereitstellung]]&lt;br /&gt;
* [[Plattformvoraussetzungen für FireMonkey|Plattformvoraussetzungen für FireMonkey]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Fehlerbehebung: Kann nicht auf dem iOS-Gerat bereitgestellt werden}}&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Troubleshooting: Cannot Deploy to the iOS Device]]&lt;br /&gt;
[[fr:Dépannage : Impossible de déployer sur le périphérique iOS]]&lt;br /&gt;
[[ja:トラブルシューティング：iOS デバイスに配置できない]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Software-Add-ins_von_Fremdherstellern&amp;diff=208909</id>
		<title>Software-Add-ins von Fremdherstellern</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Software-Add-ins_von_Fremdherstellern&amp;diff=208909"/>
		<updated>2016-06-24T10:44:48Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Parent|Einführung in RAD Studio}}&lt;br /&gt;
&lt;br /&gt;
{{Product}} enthält Software von Fremdherstellern.&lt;br /&gt;
&lt;br /&gt;
Diese Seite führt einige der wichtigsten Software-Programme von Fremdherstellern auf, die mit {{Product}} ausgeliefert werden. Mit dem &#039;&#039;&#039;[[GetIt-Package-Manager|GetIt-Package-Manager]]&#039;&#039;&#039; können Sie weitere Software von Fremdherstellern suchen und in {{Product}} installieren.&lt;br /&gt;
&lt;br /&gt;
==Bibliotheken von Fremdherstellern==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Bibliothek&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Unterstützte Sprachen&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Unterstützte Plattformen&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! {{Delphi}}&lt;br /&gt;
! C++&lt;br /&gt;
! 32-Bit-Windows&lt;br /&gt;
! 64-Bit-Windows&lt;br /&gt;
! OS X&lt;br /&gt;
! 32-Bit-iOS&lt;br /&gt;
! 64-Bit-iOS&lt;br /&gt;
! Android&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[Boost|Boost]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[Box2D|Box2D]]&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[Dinkumware Standard-C++-Bibliothek|Dinkumware STL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|fastreport}}&lt;br /&gt;
|&lt;br /&gt;
[[FastReport|FastReport]]&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[Indy|Indy]]&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|intraweb}}&lt;br /&gt;
|&lt;br /&gt;
[[Verwendung von IntraWeb (VCL für das Web) - Index|IntraWeb]]&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|ipworks}}&lt;br /&gt;
|&lt;br /&gt;
[[IP*Works!|IP*Works!]]&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|teechart}}&lt;br /&gt;
|&lt;br /&gt;
[[TeeChart|TeeChart]]&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==IDE-Erweiterungen und Tools von Fremdherstellern==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Bibliothek&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | Unterstützte Plattformen&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! 32-Bit-Windows&lt;br /&gt;
! 64-Bit-Windows&lt;br /&gt;
! OS X&lt;br /&gt;
! 32-Bit-iOS&lt;br /&gt;
! 64-Bit-iOS&lt;br /&gt;
! Android&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[Beyond Compare|Beyond Compare]]&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; {{fr|codesite}}&lt;br /&gt;
|&lt;br /&gt;
[[CodeSite|CodeSite]]&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
{{V}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[GetIt-Package-Manager|GetIt-Package-Manager]] {{f|vcl|&lt;br /&gt;
* [[Migrieren von VCL-Anwendungen nach FireMonkey#Migrieren von VCL-Anwendungen nach {{FM}} mit der IDE-Erweiterung Mida Converter|Konvertieren einer VCL-Anwendung nach {{FM}} mit dem Mida Converter]] }}&lt;br /&gt;
&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Third Party Software Add-Ins]]&lt;br /&gt;
[[fr:Add-ins logiciels tiers]]&lt;br /&gt;
[[ja:サード パーティ製ソフトウェア アドイン]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=TeeChart&amp;diff=208908</id>
		<title>TeeChart</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=TeeChart&amp;diff=208908"/>
		<updated>2016-06-24T10:44:31Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Software-Add-ins von Fremdherstellern}}&lt;br /&gt;
&lt;br /&gt;
{{f|vcl|&#039;&#039;&#039;TeeChart&#039;&#039;&#039; ist eine von der VCL und {{FM}} in {{Product}} unterstützte Komponente für die Diagrammerstellung von Steema Software.|&#039;&#039;&#039;TeeChart&#039;&#039;&#039; ist eine Komponente für die Diagrammerstellung von Steema Software, die in {{Product}} von {{FM}} unterstützt wird.}}  TeeChart enthält schnell und einfach zu verwendende Komponenten zur Diagrammerstellung für Geschäfts-, Echtzeit-, Finanz- und wissenschaftliche Anwendungen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TeeChart&#039;&#039;&#039; ist in allen Versionen von {{Product}}, außer in der Starter-Version, enthalten; siehe das SKU-Diagramm (Feature-Matrix) unter [http://www.embarcadero.com/products/rad-studio/rad-studio-feature-matrix.pdf {{Product}} {{Version}} Feature-Matrix].&lt;br /&gt;
&lt;br /&gt;
In der &#039;&#039;&#039;[[Tool-Palette|Tool-Palette]]&#039;&#039;&#039; wird ein &#039;&#039;&#039;TeeChart-Experte&#039;&#039;&#039; installiert, und durch Ausführen des Experten können Sie Folgendes erstellen:&lt;br /&gt;
&lt;br /&gt;
* Datenbank-Diagramm&lt;br /&gt;
* Diagramm ohne Datenbank&lt;br /&gt;
* Diagramm aus Vorlage ({{Path|.tee}}-Datei)&lt;br /&gt;
&lt;br /&gt;
Die Version &#039;&#039;&#039;TeeChart Lite&#039;&#039;&#039; für {{FM}}:&lt;br /&gt;
&lt;br /&gt;
* Enthält sechs Datenvisualisierungstypen, die im 2D- oder 3D-Format angezeigt werden können: Linien-, Balken-, Flächen, Torten-, Punkt- und horizontales Balkendiagramm.&lt;br /&gt;
* Kann zum Erstellen von Anwendungen für Windows x32/x64-Plattformen und OS X verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Zur Unterstützung von &#039;&#039;&#039;Apple iOS&#039;&#039;&#039; ist der in der &#039;&#039;&#039;TeeChart Pro&#039;&#039;&#039;-Version von &#039;&#039;&#039;Steema Software&#039;&#039;&#039; enthaltene TeeChart-Quellcode erforderlich. Weitere Einzelheiten finden Sie in der [http://www.steema.com/featurematrix/vcl TeeChart Feature-Matrix] auf der Steema-Website.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [http://www.steema.com/teechart/vcl Homepage für TeeChart-Komponenten]&lt;br /&gt;
* [http://www.steema.com Steema Software]&lt;br /&gt;
&lt;br /&gt;
[[Category:TeeChart]]&lt;br /&gt;
&lt;br /&gt;
[[en:TeeChart]]&lt;br /&gt;
[[fr:TeeChart]]&lt;br /&gt;
[[ja:TeeChart]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=%C3%9Cbersicht_%C3%BCber_Zielplattformen&amp;diff=208907</id>
		<title>Übersicht über Zielplattformen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=%C3%9Cbersicht_%C3%BCber_Zielplattformen&amp;diff=208907"/>
		<updated>2016-06-24T10:44:20Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Geräteübergreifende Anwendungen entwickeln}}&lt;br /&gt;
{{Parent|Compilieren, Build erstellen und Anwendungen ausführen - Index}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Mit dem Knoten &#039;&#039;&#039;[[Projektverwaltung#Kontextmenü für Zielplattformen|Zielplattformen]]&#039;&#039;&#039; in der [[Projektverwaltung|Projektverwaltung]] wird die [[Unterstützte Zielplattformen|Zielplattform]] für ein Projekt festgelegt.&lt;br /&gt;
&lt;br /&gt;
[[File:AllTargetPlatforms.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Der Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039; wird nur für Projekttypen angezeigt, die mehr als eine Plattform unterstützen, z. B.:&lt;br /&gt;
&lt;br /&gt;
* [[Geräteübergreifende Anwendung|Geräteübergreifende Anwendungen]] (die alle [[Unterstützte Zielplattformen|verfügbaren Zielplattformen]] unterstützen){{f|vcl|&lt;br /&gt;
* VCL-Anwendungen (die Win32 und Win64 unterstützen)}}&lt;br /&gt;
* Konsolenanwendungen (die alle verfügbaren Zielplattformen unterstützen)&lt;br /&gt;
&lt;br /&gt;
==Mit Zielplattformen auszuführende grundlegende Aufgaben==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Hinzufügen einer Zielplattform&#039;&#039;&#039; zum aktuellen Projekt: Öffnen Sie die [[Projektverwaltung|Projektverwaltung]], klicken Sie mit der rechten Maustaste auf den Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039;, und wählen Sie dann im Kontextmenü den Befehl &#039;&#039;&#039;Plattform hinzufügen&#039;&#039;&#039; aus.&lt;br /&gt;
* &#039;&#039;&#039;Aktivieren einer Zielplattform&#039;&#039;&#039; für das aktuelle Projekt: Doppelklicken Sie auf die Zielplattform (oder klicken Sie mit der rechten Maustaste, und wählen Sie im Kontextmenü den Befehl &#039;&#039;&#039;Aktivieren&#039;&#039;&#039; aus).&lt;br /&gt;
* &#039;&#039;&#039;Zuweisen eines Verbindungsprofils und eines SDK&#039;&#039;&#039;: Klicken Sie mit der rechten Maustaste auf eine Plattform, und wählen Sie im Kontextmenü &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; aus. Führen Sie dann im Dialogfeld &#039;&#039;&#039;[[Plattformeigenschaften|Plattformeigenschaften]]&#039;&#039;&#039; einen der beiden folgenden Schritte aus:&lt;br /&gt;
** Wählen Sie das Verbindungsprofil aus, oder wählen Sie im Kombinationsfeld &#039;&#039;&#039;Neue hinzufügen&#039;&#039;&#039;, um ein neues Profil zu erstellen.&lt;br /&gt;
**:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Ein Verbindungsprofil wird nur benötigt, wenn die Zielplattform eine der folgenden ist:&lt;br /&gt;
**:* OS X&lt;br /&gt;
**:* iOS&lt;br /&gt;
**:* 64-Bit-Windows und ein 32-Bit-Windows-Entwicklungssystem&lt;br /&gt;
** Wählen Sie das SDK aus, oder wählen Sie im Kombinationsfeld &#039;&#039;&#039;Neue hinzufügen&#039;&#039;&#039;, um ein neues SDK zu installieren.&lt;br /&gt;
**:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Ein SDK wird nur für mobile Projekte und für C++-Projekte für OS X benötigt.&lt;br /&gt;
* Anzeigen der [[Projektverwaltung#Kontextmenü für Zielplattformen|Kontextmenübefehle für eine Zielplattform]]: Klicken Sie im Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039; mit der rechten Maustaste auf den Namen eines bestimmten geräteübergreifenden Ziels (wie &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Nach Zuweisung eines Verbindungsprofils zu der aktiven Plattform wird der Name des Verbindungsprofils und des zugewiesenen SDK in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; neben der aktiven Plattform angezeigt. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
:[[Image:activatedprofilexe7.png]]&lt;br /&gt;
&lt;br /&gt;
Unter &#039;&#039;&#039;[[Aktivieren und Konfigurieren der Zielplattform|Aktivieren und Konfigurieren der Zielplattform]]&#039;&#039;&#039; finden Sie eine Beschreibung der zur Konfiguration eines Projekts, das mehrere Plattformen unterstützt, in {{Product}} auszuführenden Schritte.&lt;br /&gt;
&lt;br /&gt;
==Verwenden der Ziel- und Konfigurationsknoten==&lt;br /&gt;
&lt;br /&gt;
Knoten der Zielplattformen können keinen, einen oder zwei der folgenden untergeordneten Knoten bereitstellen:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#Verwenden des Zielknotens|Ziel]]&#039;&#039;&#039;. Führt die verfügbaren Geräte und Simulatoren auf, die auf der Zielplattform ausgeführt werden.&lt;br /&gt;
* &#039;&#039;&#039;[[#Verwenden des Konfigurationsknotens|Konfiguration]]&#039;&#039;&#039;. Führt die für die Zielplattform spezifischen Build-Konfigurationen auf.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;eine Zielplattform oder Konfiguration zu aktivieren&#039;&#039;&#039;, doppelklicken Sie auf den Knoten für die betreffende Zielplattform oder Konfiguration (oder klicken Sie mit der rechten Maustaste, und wählen Sie im Kontextmenü den Befehl &#039;&#039;&#039;Aktivieren&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
===Verwenden des Zielknotens===&lt;br /&gt;
&lt;br /&gt;
Im Knoten &#039;&#039;&#039;Ziel&#039;&#039;&#039; eines Zielplattformknotens wird eine Liste der verfügbaren Zielgeräte und Simulatoren (iOS) angezeigt.&lt;br /&gt;
&lt;br /&gt;
Die in dieser Liste angezeigten Namen hängen von der Zielplattform und dem Typ des Zielgeräts oder Simulators ab:&lt;br /&gt;
&lt;br /&gt;
* Für die Zielplattformen &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039; und &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039; werden die Geräte nach Gerätenamen aufgeführt. Zum Beispiel: &amp;quot;Jane&#039;s iPhone&amp;quot;.&lt;br /&gt;
* Für die Zielplattform &#039;&#039;&#039;iOS-Simulator&#039;&#039;&#039; werden Simulatoren nach dem Gerätemodell und der iOS-Version aufgeführt. Zum Beispiel: &amp;quot;iPhone 5s (iOS 8.1)&amp;quot;.&lt;br /&gt;
* Für die Zielplattform &#039;&#039;&#039;Android&#039;&#039;&#039; werden die Geräte nach dem Gerätemodel aufgeführt. Zum Beispiel: &amp;quot;GT-I9505&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In Knoten &#039;&#039;&#039;Ziel&#039;&#039;&#039; des Zielplattformknotens &#039;&#039;&#039;Android&#039;&#039;&#039; werden die an Ihr Entwicklungsgerät angeschlossenen Android-Geräte angezeigt. Wenn Sie Android-Geräte an Ihr Entwicklungssystem anschließen oder davon trennen, erkennt {{Variables|Product}} dies automatisch und aktualisiert die Einträge in der Projektverwaltung entsprechend.&lt;br /&gt;
&amp;lt;br /&amp;gt;Der Knoten &#039;&#039;&#039;Ziel&#039;&#039;&#039; der Zielplattformknoten &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039; und &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039; zeigt die an Ihren Mac angeschlossenen iOS-Geräte an.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die &#039;&#039;&#039;[[Projektverwaltung|Projektverwaltung]]&#039;&#039;&#039; filtert diese Geräte nicht nach unterstützten Architekturen. Im Knoten &#039;&#039;&#039;Ziel&#039;&#039;&#039; des Zielplattformknotens &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039; können 32-Bit-iOS-Geräte angezeigt werden, die keine 64-Bit-iOS-Anwendungen unterstützen.&lt;br /&gt;
&lt;br /&gt;
Der Knoten &#039;&#039;&#039;Ziel&#039;&#039;&#039; des Zielplattformknotens &#039;&#039;&#039;iOS-Simulator&#039;&#039;&#039; führt die in Xcode installierten iOS-Simulatoren auf Ihrem Mac auf.&lt;br /&gt;
&lt;br /&gt;
Um die &#039;&#039;&#039;Liste verfügbarer Ziele&#039;&#039;&#039; für eine Zielplattform manuell zu aktualisieren, klicken Sie mit der rechten Maustaste auf den Knoten &#039;&#039;&#039;Ziel&#039;&#039;&#039; und wählen &#039;&#039;&#039;Aktualisieren&#039;&#039;&#039; aus. Wenn im Knoten &#039;&#039;&#039;Ziel&#039;&#039;&#039; nach der Aktualisierung der Liste nicht die erwarteten Einträge angezeigt werden, gehen Sie wie folgt vor: [[Fehlerbehebung: In der Projektverwaltung werden keine Android-Ziele aufgeführt|Fehlerbehebung: In der Projektverwaltung werden keine Android-Ziele aufgeführt]].&lt;br /&gt;
&lt;br /&gt;
Wenn das aktive Zielgerät oder der Zielsimulator nicht mehr in der Liste der Ziele angezeigt wird, wählt {{Variables|Product}} automatisch das erste verfügbare Zielgerät oder den ersten verfügbaren Zielsimulator aus. Wenn keine Zielgeräte oder Simulatoren für die aktive Zielplattform verfügbar sind, können Sie die Anwendung nicht auf der Zielplattform ausführen.&lt;br /&gt;
&lt;br /&gt;
===Verwenden des Konfigurationsknotens===&lt;br /&gt;
&lt;br /&gt;
Im Knoten &#039;&#039;&#039;Konfiguration&#039;&#039;&#039; wird eine Liste der plattformspezifischen Build-Konfigurationen angezeigt, die Sie zum Erstellen der Anwendung verwenden können.&lt;br /&gt;
&lt;br /&gt;
Dieser Knoten ist nur für die Zielplattformen &#039;&#039;&#039;OS X&#039;&#039;&#039;, &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039;, &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039; und &#039;&#039;&#039;Android&#039;&#039;&#039; verfügbar:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Android&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Entwicklung&#039;&#039;&#039;. Für Entwicklungszyklen.&lt;br /&gt;
** &#039;&#039;&#039;Anwendungs-Store&#039;&#039;&#039;. Für das letzte Build vor der Übermittlung der App an den Anwendungs-Store.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Entwicklung&#039;&#039;&#039;. Für Entwicklungszyklen.&lt;br /&gt;
** &#039;&#039;&#039;Ad-hoc&#039;&#039;&#039;. Für die private interne Distribution; weitere Informationen finden Sie unter [https://developer.apple.com/programs/ios/enterprise/ https://developer.apple.com/programs/ios/enterprise/ (EN)].&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Entwicklung&#039;&#039;&#039;. Für Entwicklungszyklen.&lt;br /&gt;
** &#039;&#039;&#039;Ad-hoc&#039;&#039;&#039;. Für die private interne Distribution; weitere Informationen finden Sie unter [https://developer.apple.com/programs/ios/enterprise/ https://developer.apple.com/programs/ios/enterprise/ (EN)].&lt;br /&gt;
** &#039;&#039;&#039;Anwendungs-Store&#039;&#039;&#039;. Für das letzte Build vor der Übermittlung der App an den App Store.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;OS X&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Normal&#039;&#039;&#039;. Für Entwicklungszyklen.&lt;br /&gt;
** &#039;&#039;&#039;Anwendungs-Store&#039;&#039;&#039;. Für das letzte Build vor der Übermittlung der App an den Mac App Store.&lt;br /&gt;
&lt;br /&gt;
==Verwenden des Android-Knotens &amp;quot;Bibliotheken&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
: [[Image:ProjectManagerAndroidLibrariesExample.png]]&lt;br /&gt;
&lt;br /&gt;
Der Knoten der &#039;&#039;&#039;Android&#039;&#039;&#039;-Plattform enthält einen weiteren Knoten, &#039;&#039;&#039;Bibliotheken&#039;&#039;&#039;, mit dem Sie Folgendes ausführen können:&lt;br /&gt;
&lt;br /&gt;
* [[Verwenden der in RAD Studio integrierten Java-Bibliotheken für Android#Deaktivieren nicht benötigter in {{Product}} integrierter Java-Bibliotheken, um die Größe Ihrer Anwendung zu reduzieren|Deaktivieren von in {{Product}} integrierten Java-Bibliotheken]], die für Ihre Anwendung nicht erforderlich sind.&lt;br /&gt;
* [[Hinzufügen von Java-Bibliotheken zu Ihren Anwendungen in der Projektverwaltung|Hinzufügen benutzerdefinierter Java-Bibliotheken zu Ihrer Anwendung]].&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Projektverwaltung#Kontextmenü für Zielplattformen|Kontextmenü für Zielplattformen]]&lt;br /&gt;
* [[Symbolleiste zur Auswahl des Plattformgeräts|Symbolleiste zur Auswahl des Plattformgeräts]]&lt;br /&gt;
* [[Unterstützte Zielplattformen|Unterstützte Zielplattformen]]&lt;br /&gt;
* [[Überblick zu Build-Konfigurationen|Überblick zu Build-Konfigurationen]]&lt;br /&gt;
* [[Schritte bei der Entwicklung von geräteübergreifenden Anwendungen|Schritte bei der Entwicklung von geräteübergreifenden Anwendungen]]&lt;br /&gt;
* [[Verbindungsprofil erstellen|Verbindungsprofil erstellen (Experte)]]&lt;br /&gt;
* [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC]]&lt;br /&gt;
* [[Hinzufügen von SDKs für OS X oder iOS|Hinzufügen von SDKs für OS X oder iOS]]&lt;br /&gt;
* [[Hinzufügen von Android-SDKs|Hinzufügen von Android-SDKs]]&lt;br /&gt;
* [[Aktivieren einer Konfiguration und einer Zielplattform für eine Projektgruppe|Aktivieren einer Konfiguration und einer Zielplattform für eine Projektgruppe]]&lt;br /&gt;
* [[PAServer: Die Platform Assistant Server-Anwendung|PAServer: Die Platform Assistant Server-Anwendung]]&lt;br /&gt;
* [[Geräteübergreifende Anwendung|Geräteübergreifende Anwendung]]&lt;br /&gt;
* [[Mobile-Tutorials: Mobile Anwendungsentwicklung (iOS und Android)|Mobile-Tutorials: Mobile Anwendungsentwicklung (iOS und Android)]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Ubersicht uber Zielplattformen}}&lt;br /&gt;
[[Category:XE5]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Target Platforms Overview]]&lt;br /&gt;
[[fr:Présentation des plates-formes cible]]&lt;br /&gt;
[[ja:［ターゲット プラットフォーム］の概要]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Schritt_2_-_Entwerfen_des_Schaltfl%C3%A4chenbereichs_(Delphi)&amp;diff=208895</id>
		<title>Schritt 2 - Entwerfen des Schaltflächenbereichs (Delphi)</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Schritt_2_-_Entwerfen_des_Schaltfl%C3%A4chenbereichs_(Delphi)&amp;diff=208895"/>
		<updated>2016-06-23T08:20:08Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Erstellen einer FireMonkey-Komponente (Delphi)}}&lt;br /&gt;
&lt;br /&gt;
Nach den aktuellen Windows- und OS X-Entwurfsrichtlinien werden Dialogfeldschaltflächen in der rechten unteren Ecke platziert. Die Reihenfolge der Schaltflächen ist bei den beiden Plattformen unterschiedlich:&lt;br /&gt;
&lt;br /&gt;
* Windows: Ausführen, Nicht ausführen, Abbrechen&lt;br /&gt;
* Mac, iOS, Android: Nicht ausführen, Abbrechen, Ausführen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Design für &#039;&#039;&#039;DialogButtonPanel&#039;&#039;&#039; kann auf zweierlei Arten erstellt werden:&lt;br /&gt;
&lt;br /&gt;
* Mit dem [[FireMonkey-Stil-Designer|FireMonkey-Stil-Designer]].&lt;br /&gt;
* Durch Erstellen eines neues Projekts, Entwerfen der neuen Komponente durch Ziehen von Komponenten auf das Formular und Erstellen des endgültigen Stils von &#039;&#039;&#039;DialogButtonPanel&#039;&#039;&#039; unter Verwendung der &amp;lt;code&amp;gt;.fmx&amp;lt;/code&amp;gt;-Datei.&lt;br /&gt;
&lt;br /&gt;
==Verwenden des [[FireMonkey-Stil-Designer|FireMonkey-Stil-Designers]]==&lt;br /&gt;
&lt;br /&gt;
# Wechseln Sie zum &#039;&#039;&#039;PanelDesign&#039;&#039;&#039;-Formular, und fügen Sie eine [[lib_de:FMX.Controls.TStyleBook|TStyleBook]]-Komponente aus der [[Tool-Palette|Tool-Palette]] hinzu.&lt;br /&gt;
# Doppelklicken Sie auf [[lib_de:FMX.Controls.TStyleBook|TStyleBook]], um den [[FireMonkey-Stil-Designer|FireMonkey-Stil-Designer]] zu öffnen.&lt;br /&gt;
# Ziehen Sie ein [[lib_de:FMX.Objects.TRectangle|TRectangle]] aus der [[Tool-Palette|Tool-Palette]] in den Objekt-Design-Bereich des &#039;&#039;&#039;{{FM}}-Stil-Designers&#039;&#039;&#039;. Setzen Sie die Eigenschaften Fill.Kind und Stroke.Kind auf &#039;&#039;&#039;None&#039;&#039;&#039;, damit die TPanel-Komponente standardmäßig transparent ist.&lt;br /&gt;
#: Mit [[lib_de:FMX.Objects.TRectangle|TRectangle]] wird der Bereich &#039;&#039;&#039;DialogButtonPanel&#039;&#039;&#039; definiert und gerendert. (Sie können dazu auch ein anderes Steuerelement verwenden.)&lt;br /&gt;
# Legen Sie auf dem [[lib_de:FMX.Objects.TRectangle|TRectangle]] ein [[lib_de:FMX.Layouts.TLayout|TLayout]] ab.&lt;br /&gt;
#: Setzen Sie in der Objekt-Hierarchie des Stil-Designers den Fokus auf [[lib_de:FMX.Layouts.TLayout|TLayout]], und führen Sie folgende Schritte aus:&lt;br /&gt;
#* Setzen Sie [[lib_de:FMX.Layouts.TLayout.Align|Align]] auf &#039;&#039;&#039;Bottom&#039;&#039;&#039;.&lt;br /&gt;
#* Fügen Sie ein weiteres [[lib_de:FMX.Layouts.TLayout|TLayout]] mit der Ausrichtung &#039;&#039;&#039;Top&#039;&#039;&#039; hinzu.&lt;br /&gt;
# Fügen Sie dem zuletzt hinzugefügten [[lib_de:FMX.Layouts.TLayout|TLayout]] drei [[lib_de:FMX.StdCtrls.TButton|Schaltflächen]] hinzu: &#039;&#039;&#039;Ausführen&#039;&#039;&#039;, &#039;&#039;&#039;Nicht ausführen&#039;&#039;&#039;, &#039;&#039;&#039;Abbrechen&#039;&#039;&#039;.&lt;br /&gt;
## Für die Schaltfläche &#039;&#039;&#039;Ausführen&#039;&#039;&#039;:&lt;br /&gt;
##* Setzen Sie [[lib_de:FMX.StdCtrls.TButton.Default|Default]] auf &#039;&#039;&#039;True&#039;&#039;&#039;.&lt;br /&gt;
##* Setzen Sie [[lib_de:FMX.StdCtrls.TCustomButton.ModalResult|ModalResult]] auf &#039;&#039;&#039;mrOk&#039;&#039;&#039;.&lt;br /&gt;
##* Setzen Sie &#039;&#039;&#039;StyleName&#039;&#039;&#039; auf &#039;&#039;&#039;DoButton&#039;&#039;&#039;.&lt;br /&gt;
## Für die Schaltfläche &#039;&#039;&#039;Nicht ausführen&#039;&#039;&#039;:&lt;br /&gt;
##* Für &#039;&#039;&#039;Nicht ausführen&#039;&#039;&#039; gibt es keinen integrierten Code, aber Sie können den Negativwert von &#039;&#039;&#039;mrOK&#039;&#039;&#039; (= -1) verwenden. Setzen Sie [[lib_de:FMX.StdCtrls.TCustomButton.ModalResult|ModalResult]] auf -1.&lt;br /&gt;
##* Setzen Sie &#039;&#039;&#039;StyleName&#039;&#039;&#039; auf &#039;&#039;&#039;DontButton&#039;&#039;&#039;.&lt;br /&gt;
## Für die Schaltfläche &#039;&#039;&#039;Abbrechen&#039;&#039;&#039;:&lt;br /&gt;
##* Setzen Sie [[lib_de:FMX.StdCtrls.TButton.Cancel|Cancel]] auf &#039;&#039;&#039;True&#039;&#039;&#039;.&lt;br /&gt;
##* Setzen Sie [[lib_de:FMX.StdCtrls.TCustomButton.ModalResult|ModalResult]] auf &#039;&#039;&#039;mrCancel&#039;&#039;&#039;.&lt;br /&gt;
##* Setzen Sie &#039;&#039;&#039;StyleName&#039;&#039;&#039; auf &#039;&#039;&#039;CancelButton&#039;&#039;&#039;.&lt;br /&gt;
#: Diese Schaltflächenanordnung entspricht weder Windows noch Mac, iOS oder Android. Sie können die Reihenfolge später anpassen. Setzen Sie die Ausrichtung jeder Schaltfläche auf &#039;&#039;&#039;Left&#039;&#039;&#039;, damit sie an der linken Seite &amp;quot;gestapelt&amp;quot; sind und alle einen entsprechenden linken Innenabstand haben. Geben Sie ein Platzhalter-Wort für die Beschriftungen &amp;quot;Ausführen/Nicht ausführen/Abbrechen&amp;quot; an, um eine ausreichende Breite für die Schaltflächen festlegen zu können. Die Gesamtbreite der Schaltflächen, ihr horizontaler Innenabstand und zusätzlicher Platz rechts von der letzten Schaltfläche muss als Breite (Width) des rechts ausgerichteten Layouts angegeben werden. Die Höhe (Height) der anderen beiden Layouts muss die Höhe der Schaltflächen, des oberen Innenabstands und, für die äußere TPanel-Komponente, den Platz unter den Schaltflächen wiedergeben.&lt;br /&gt;
#: Das endgültige Stildesign sollte folgendermaßen aussehen:&lt;br /&gt;
#: [[File:DialogButtonPanel win.style.png]]&lt;br /&gt;
# Erstellen Sie für jede Plattform einen speziellen Stil, und speichern Sie sie als &#039;&#039;&#039;DialogButtonPanel_win.style&#039;&#039;&#039;, &#039;&#039;&#039;DialogButtonPanel_mac.style&#039;&#039;&#039;, &#039;&#039;&#039;DialogButtonPanel_ios.style&#039;&#039;&#039; und &#039;&#039;&#039;DialogButtonPanel_android.style&#039;&#039;&#039;.&lt;br /&gt;
# Sie können Änderungen auch direkt in den &amp;lt;code&amp;gt;.style&amp;lt;/code&amp;gt;-Dateien vornehmen und die Änderungen anschließend speichern.&lt;br /&gt;
# Wie Sie sehen, enthält jede &amp;lt;code&amp;gt;.style&amp;lt;/code&amp;gt;-Datei den Inhalt des Stilbuchs in einer &#039;&#039;&#039;TLayout&#039;&#039;&#039;-Stammkomponente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 object _1: TLayout&lt;br /&gt;
   { All objects would appear here, instead of this comment. Comments are not allowed in .style files! }&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Der Wrapper &amp;quot;TLayout&amp;quot; ist zum Laden der Stile in den Stil-Designer erforderlich, aber zur eigentlichen Verwendung des Stils als Vorgabestil für eine benutzerdefinierte Komponente sollten Sie den Wrapper entfernen, damit auf das Rechteck (in diesem Fall) direkt zugegriffen werden kann. Das Endergebnis sollte aus zwei separaten plattformspezifischen Dateien bestehen:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;DialogButtonPanel_win.style&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;DialogButtonPanel_mac.style&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;DialogButtonPanel_ios.style&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;DialogButtonPanel_android.style&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;  &lt;br /&gt;
object TRectangle&lt;br /&gt;
    StyleName = &#039;DialogButtonPanelStyle&#039;&lt;br /&gt;
    Align = Bottom&lt;br /&gt;
    Position.Point = &#039;(0,264)&#039;&lt;br /&gt;
    Width = 600.000000000000000000&lt;br /&gt;
    Height = 46.000000000000000000&lt;br /&gt;
    ClipChildren = True&lt;br /&gt;
    HitTest = False&lt;br /&gt;
    Fill.Kind = None&lt;br /&gt;
    Stroke.Kind = None&lt;br /&gt;
    Sides = [Top, Left, Bottom, Right]&lt;br /&gt;
    object TLayout&lt;br /&gt;
      Align = Right&lt;br /&gt;
      Position.Point = &#039;(261,0)&#039;&lt;br /&gt;
      Width = 288.000000000000000000&lt;br /&gt;
      Height = 46.000000000000000000&lt;br /&gt;
      object TLayout&lt;br /&gt;
        Align = Top&lt;br /&gt;
        Position.Point = &#039;(0,12)&#039;&lt;br /&gt;
        Width = 288.000000000000000000&lt;br /&gt;
        Height = 22.000000000000000000&lt;br /&gt;
        Padding.Rect = &#039;(0,12,0,0)&#039;&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;DoButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(12,0)&#039;&lt;br /&gt;
          Width = 80.000000000000000000&lt;br /&gt;
          Height = 22.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 0&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = 1&lt;br /&gt;
          Text = &#039;Do Verb&#039;&lt;br /&gt;
          Default = True&lt;br /&gt;
        end&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;DontButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(104,0)&#039;&lt;br /&gt;
          Width = 80.000000000000000000&lt;br /&gt;
          Height = 22.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 1&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = -1&lt;br /&gt;
          Text = &#039;Don&#039;#39&#039;t Verb&#039;&lt;br /&gt;
        end&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;CancelButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(196,0)&#039;&lt;br /&gt;
          Width = 80.000000000000000000&lt;br /&gt;
          Height = 22.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 2&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = 2&lt;br /&gt;
          Text = &#039;Cancel&#039;&lt;br /&gt;
          Cancel = True&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;  &lt;br /&gt;
object TRectangle&lt;br /&gt;
    StyleName = &#039;DialogButtonPanelStyle&#039;&lt;br /&gt;
    Align = Bottom&lt;br /&gt;
    Position.Point = &#039;(0,264)&#039;&lt;br /&gt;
    Width = 600.000000000000000000&lt;br /&gt;
    Height = 46.000000000000000000&lt;br /&gt;
    ClipChildren = True&lt;br /&gt;
    HitTest = False&lt;br /&gt;
    Fill.Kind = None&lt;br /&gt;
    Stroke.Kind = None&lt;br /&gt;
    Sides = [Top, Left, Bottom, Right]&lt;br /&gt;
    object TLayout&lt;br /&gt;
      Align = Right&lt;br /&gt;
      Position.Point = &#039;(249,0)&#039;&lt;br /&gt;
      Width = 300.000000000000000000&lt;br /&gt;
      Height = 46.000000000000000000&lt;br /&gt;
      object TLayout&lt;br /&gt;
        Align = Top&lt;br /&gt;
        Position.Point = &#039;(0,12)&#039;&lt;br /&gt;
        Width = 300.000000000000000000&lt;br /&gt;
        Height = 22.000000000000000000&lt;br /&gt;
        Padding.Rect = &#039;(0,12,0,0)&#039;&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;DontButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(12,0)&#039;&lt;br /&gt;
          Width = 80.000000000000000000&lt;br /&gt;
          Height = 22.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,12,0)&#039;&lt;br /&gt;
          TabOrder = 0&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = -1&lt;br /&gt;
          Text = &#039;Don&#039;#39&#039;t Verb&#039;&lt;br /&gt;
        end&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;CancelButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(116,0)&#039;&lt;br /&gt;
          Width = 80.000000000000000000&lt;br /&gt;
          Height = 22.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 1&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = 2&lt;br /&gt;
          Text = &#039;Cancel&#039;&lt;br /&gt;
          Cancel = True&lt;br /&gt;
        end&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;DoButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(208,0)&#039;&lt;br /&gt;
          Width = 80.000000000000000000&lt;br /&gt;
          Height = 22.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 2&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = 1&lt;br /&gt;
          Text = &#039;Do Verb&#039;&lt;br /&gt;
          Default = True&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
object TRectangle&lt;br /&gt;
    StyleName = &#039;DialogButtonPanelStyle&#039;&lt;br /&gt;
    Align = Bottom&lt;br /&gt;
    Position.Point = &#039;(0,28)&#039;&lt;br /&gt;
    Width = 332.000000000000000000&lt;br /&gt;
    Height = 50.000000000000000000&lt;br /&gt;
    ClipChildren = True&lt;br /&gt;
    HitTest = False&lt;br /&gt;
    Fill.Kind = None&lt;br /&gt;
    Stroke.Kind = None&lt;br /&gt;
    Sides = [Top, Left, Bottom, Right]&lt;br /&gt;
    object TLayout&lt;br /&gt;
      Align = Right&lt;br /&gt;
      Position.Point = &#039;(44,0)&#039;&lt;br /&gt;
      Width = 288.000000000000000000&lt;br /&gt;
      Height = 50.000000000000000000&lt;br /&gt;
      object TLayout&lt;br /&gt;
        Align = Top&lt;br /&gt;
        Width = 288.000000000000000000&lt;br /&gt;
        Height = 22.000000000000000000&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;DontButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(104,0)&#039;&lt;br /&gt;
          Width = 90.000000000000000000&lt;br /&gt;
          Height = 30.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,12,0)&#039;&lt;br /&gt;
          TabOrder = 0&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = -1&lt;br /&gt;
          Text = &#039;Don&#039;#39&#039;t Verb&#039;&lt;br /&gt;
        end&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;CancelButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(196,0)&#039;&lt;br /&gt;
          Width = 90.000000000000000000&lt;br /&gt;
          Height = 30.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 1&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = 2&lt;br /&gt;
          Text = &#039;Cancel&#039;&lt;br /&gt;
          Cancel = True&lt;br /&gt;
        end&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;DoButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(12,0)&#039;&lt;br /&gt;
          Width = 90.000000000000000000&lt;br /&gt;
          Height = 30.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 2&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = 1&lt;br /&gt;
          Text = &#039;Do Verb&#039;&lt;br /&gt;
          Default = True&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
object TRectangle&lt;br /&gt;
    StyleName = &#039;DialogButtonPanelStyle&#039;&lt;br /&gt;
    Align = Bottom&lt;br /&gt;
    Position.Point = &#039;(0,28)&#039;&lt;br /&gt;
    Width = 332.000000000000000000&lt;br /&gt;
    Height = 50.000000000000000000&lt;br /&gt;
    ClipChildren = True&lt;br /&gt;
    HitTest = False&lt;br /&gt;
    Fill.Kind = None&lt;br /&gt;
    Stroke.Kind = None&lt;br /&gt;
    Sides = [Top, Left, Bottom, Right]&lt;br /&gt;
    object TLayout&lt;br /&gt;
      Align = Right&lt;br /&gt;
      Position.Point = &#039;(44,0)&#039;&lt;br /&gt;
      Width = 288.000000000000000000&lt;br /&gt;
      Height = 50.000000000000000000&lt;br /&gt;
      object TLayout&lt;br /&gt;
        Align = Top&lt;br /&gt;
        Width = 288.000000000000000000&lt;br /&gt;
        Height = 22.000000000000000000&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;DontButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(104,0)&#039;&lt;br /&gt;
          Width = 90.000000000000000000&lt;br /&gt;
          Height = 30.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,12,0)&#039;&lt;br /&gt;
          TabOrder = 0&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = -1&lt;br /&gt;
          Text = &#039;Don&#039;#39&#039;t Verb&#039;&lt;br /&gt;
        end&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;CancelButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(196,0)&#039;&lt;br /&gt;
          Width = 90.000000000000000000&lt;br /&gt;
          Height = 30.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 1&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = 2&lt;br /&gt;
          Text = &#039;Cancel&#039;&lt;br /&gt;
          Cancel = True&lt;br /&gt;
        end&lt;br /&gt;
        object TButton&lt;br /&gt;
          StyleName = &#039;DoButton&#039;&lt;br /&gt;
          Align = Left&lt;br /&gt;
          Position.Point = &#039;(12,0)&#039;&lt;br /&gt;
          Width = 90.000000000000000000&lt;br /&gt;
          Height = 30.000000000000000000&lt;br /&gt;
          Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
          TabOrder = 2&lt;br /&gt;
          StaysPressed = False&lt;br /&gt;
          IsPressed = False&lt;br /&gt;
          ModalResult = 1&lt;br /&gt;
          Text = &#039;Do Verb&#039;&lt;br /&gt;
          Default = True&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Verwenden von FMX-Dateien==&lt;br /&gt;
&lt;br /&gt;
# Entwerfen Sie im &#039;&#039;&#039;PanelDesign&#039;&#039;&#039;-Formular die neue Komponente durch Hinzufügen der gleichen Komponenten wie oben.&lt;br /&gt;
# Nehmen Sie für jede verwendete Komponente die gleichen Änderungen wie oben vor.&lt;br /&gt;
#: Das Ergebnis sollte wie folgt aussehen:&lt;br /&gt;
#: [[File:DialogButtonPanel in a form.png]]&lt;br /&gt;
# Wechseln Sie zur &#039;&#039;&#039;PanelDesign.fmx&#039;&#039;&#039;-Datei, und öffnen Sie sie.&lt;br /&gt;
# Extrahieren Sie den Code ab &amp;lt;code&amp;gt;object Rectangle1: TRectangle&amp;lt;/code&amp;gt; bis zum zugehörigen &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;-Tag.&lt;br /&gt;
# Kopieren Sie die extrahierten Zeilen, und speichern Sie sie in einer &amp;lt;code&amp;gt;.style&amp;lt;/code&amp;gt;-Datei.&lt;br /&gt;
# Führen Sie die gewünschten Änderungen aus, und speichern Sie die Datei unter &#039;&#039;&#039;DialogButtonPanel_win.style&#039;&#039;&#039;.&lt;br /&gt;
# Ordnen Sie die Schaltflächen gemäß der Mac-, iOS- und Android-Reihenfolge an, erstellen Sie die Datei &#039;&#039;&#039;DialogButtonPanel_mac.style&#039;&#039;&#039;, &#039;&#039;&#039;DialogButtonPanel_ios.style&#039;&#039;&#039; oder &#039;&#039;&#039;DialogButtonPanel_android.style&#039;&#039;&#039; und speichern Sie sie.&lt;br /&gt;
&lt;br /&gt;
Der Dateiinhalt für die Windows-Plattform sollte folgendermaßen lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  object Rectangle1: TRectangle&lt;br /&gt;
     Align = Bottom&lt;br /&gt;
     Fill.Kind = None&lt;br /&gt;
     Height = 50.000000000000000000&lt;br /&gt;
     Position.Y = 28.000000000000000000&lt;br /&gt;
     Stroke.Kind = None&lt;br /&gt;
     Width = 332.000000000000000000&lt;br /&gt;
     object Layout1: TLayout&lt;br /&gt;
       Align = Right&lt;br /&gt;
       Height = 50.000000000000000000&lt;br /&gt;
       Position.X = 44.000000000000000000&lt;br /&gt;
       Width = 288.000000000000000000&lt;br /&gt;
       object Layout2: TLayout&lt;br /&gt;
         Align = Top&lt;br /&gt;
         Height = 22.000000000000000000&lt;br /&gt;
         Width = 288.000000000000000000&lt;br /&gt;
         object Button1: TButton&lt;br /&gt;
           StyleName = &#039;DoButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Default = True&lt;br /&gt;
           DisableFocusEffect = False&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           ModalResult = 1&lt;br /&gt;
           Padding.Left = 12.000000000000000000&lt;br /&gt;
           Position.X = 12.000000000000000000&lt;br /&gt;
           Text = &#039;Do Verb&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
         end&lt;br /&gt;
         object Button2: TButton&lt;br /&gt;
           StyleName = &#039;DontButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           DisableFocusEffect = False&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           ModalResult = -1&lt;br /&gt;
           Padding.Left = 12.000000000000000000&lt;br /&gt;
           Position.X = 104.000000000000000000&lt;br /&gt;
           Text = &#039;Don&#039;#39&#039;t Verb&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
         end&lt;br /&gt;
         object Button3: TButton&lt;br /&gt;
           StyleName = &#039;CancelButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Cancel = True&lt;br /&gt;
           DisableFocusEffect = False&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           ModalResult = 2&lt;br /&gt;
           Padding.Left = 12.000000000000000000&lt;br /&gt;
           Position.X = 196.000000000000000000&lt;br /&gt;
           Text = &#039;Cancel&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
         end&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zurück==&lt;br /&gt;
&lt;br /&gt;
* [[Schritt 1 - Erstellen der Projekte (Delphi)|Schritt 1 - Erstellen der Projekte ({{Delphi}})]]&lt;br /&gt;
&lt;br /&gt;
==Weiter==&lt;br /&gt;
&lt;br /&gt;
* [[Schritt 3 - Hinzufügen von Stilressourcen als RCDATA (Delphi)|Schritt 3 - Hinzufügen von Stilressourcen als RCDATA ({{Delphi}})]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[FireMonkey-Komponentendesign|FireMonkey-Komponentendesign]]&lt;br /&gt;
* [[Verwenden des Experten für neue Komponenten|Verwenden des Experten für neue Komponenten]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Erstellen einer FireMonkey-Komponente (C++)|Erstellen einer FireMonkey-Komponente (C++)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Erstellen einer mit Stilen versehenen FireMonkey-Komponente durch Erweitern einer vorhandenen Komponente|Erstellen einer mit Stilen versehenen FireMonkey-Komponente durch Erweitern einer vorhandenen Komponente]]&lt;br /&gt;
* [[Erstellen eines grundlegenden FireMonkey-Steuerelements|Erstellen eines grundlegenden FireMonkey-Steuerelements]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Schritt 2 - Entwerfen des Schaltflachenbereichs (Delphi)}}&lt;br /&gt;
[[Category:XE3]]&lt;br /&gt;
[[Category:FMX]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Step 2 - Design the Panel (Delphi)]]&lt;br /&gt;
[[fr:Etape 2 - Concevoir le panneau (Delphi)]]&lt;br /&gt;
[[ja:ステップ 2 - パネルを設計する（Delphi）]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Schritt_2_-_Entwerfen_des_Schaltfl%C3%A4chenbereichs_(C%2B%2B)&amp;diff=208894</id>
		<title>Schritt 2 - Entwerfen des Schaltflächenbereichs (C++)</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Schritt_2_-_Entwerfen_des_Schaltfl%C3%A4chenbereichs_(C%2B%2B)&amp;diff=208894"/>
		<updated>2016-06-23T08:19:34Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Erstellen einer FireMonkey-Komponente (C++)}}&lt;br /&gt;
Nach den aktuellen Windows- und OS X-Entwurfsrichtlinien werden Dialogfeldschaltflächen in der rechten unteren Ecke platziert. Die Reihenfolge der Schaltflächen ist bei den beiden Plattformen unterschiedlich:&lt;br /&gt;
&lt;br /&gt;
* Windows: Ausführen, Nicht ausführen, Abbrechen&lt;br /&gt;
* Mac: Nicht ausführen, Abbrechen, Ausführen&lt;br /&gt;
&lt;br /&gt;
Das Design für &#039;&#039;&#039;DialogButtonPanel&#039;&#039;&#039; kann auf zweierlei Arten erstellt werden:&lt;br /&gt;
&lt;br /&gt;
* Mit dem [[FireMonkey-Stil-Designer|FireMonkey-Stil-Designer]]&lt;br /&gt;
* Durch Erstellen eines neues Projekts, Entwerfen der neuen Komponente durch Ziehen von Komponenten auf das Formular und Erstellen des endgültigen Stils von &#039;&#039;&#039;DialogButtonPanel&#039;&#039;&#039; unter Verwendung der &amp;lt;code&amp;gt;.fmx&amp;lt;/code&amp;gt;-Datei.&lt;br /&gt;
&lt;br /&gt;
==Verwenden des [[FireMonkey-Stil-Designer|FireMonkey-Stil-Designers]]==&lt;br /&gt;
&lt;br /&gt;
# Wechseln Sie zum &#039;&#039;&#039;PanelDesign&#039;&#039;&#039;-Formular, und fügen Sie eine [[lib_de:FMX.Controls.TStyleBook|TStyleBook]]-Komponente aus der [[Tool-Palette|Tool-Palette]] hinzu.&lt;br /&gt;
# Doppelklicken Sie auf [[lib_de:FMX.Controls.TStyleBook|TStyleBook]], um den [[FireMonkey-Stil-Designer|FireMonkey-Stil-Designer]] zu öffnen.&lt;br /&gt;
# Ziehen Sie ein [[lib_de:FMX.Objects.TRectangle|TRectangle]] aus der [[Tool-Palette|Tool-Palette]] in den Objekt-Design-Bereich des &#039;&#039;&#039;{{FM}}-Stil-Designers&#039;&#039;&#039;. Setzen Sie die Eigenschaften Fill.Kind und Stroke.Kind auf &#039;&#039;&#039;None&#039;&#039;&#039;, damit die TPanel-Komponente standardmäßig transparent ist.&lt;br /&gt;
#: Mit [[lib_de:FMX.Objects.TRectangle|TRectangle]] wird der Bereich &#039;&#039;&#039;DialogButtonPanel&#039;&#039;&#039; definiert und gerendert. (Sie können dazu auch ein anderes Steuerelement verwenden.)&lt;br /&gt;
# Legen Sie auf dem [[lib_de:FMX.Objects.TRectangle|TRectangle]] ein [[lib_de:FMX.Layouts.TLayout|TLayout]] ab.&lt;br /&gt;
#: Setzen Sie in der Objekt-Hierarchie des Stil-Designers den Fokus auf [[lib_de:FMX.Layouts.TLayout|TLayout]], und führen Sie folgende Schritte aus:&lt;br /&gt;
#* Setzen Sie [[lib_de:FMX.Layouts.TLayout.Align|Align]] auf &#039;&#039;&#039;Bottom&#039;&#039;&#039;.&lt;br /&gt;
#* Fügen Sie ein weiteres [[lib_de:FMX.Layouts.TLayout|TLayout]] mit der Ausrichtung &#039;&#039;&#039;Top&#039;&#039;&#039; hinzu.&lt;br /&gt;
# Fügen Sie dem zuletzt hinzugefügten [[lib_de:FMX.Layouts.TLayout|TLayout]] drei [[lib_de:FMX.StdCtrls.TButton|Schaltflächen]] hinzu: &#039;&#039;&#039;Ausführen&#039;&#039;&#039;, &#039;&#039;&#039;Nicht ausführen&#039;&#039;&#039;, &#039;&#039;&#039;Abbrechen&#039;&#039;&#039;.&lt;br /&gt;
## Für die Schaltfläche &#039;&#039;&#039;Ausführen&#039;&#039;&#039;:&lt;br /&gt;
##* Setzen Sie [[lib_de:FMX.StdCtrls.TButton.Default|Default]] auf &#039;&#039;&#039;True&#039;&#039;&#039;.&lt;br /&gt;
##* Setzen Sie [[lib_de:FMX.StdCtrls.TCustomButton.ModalResult|ModalResult]] auf &#039;&#039;&#039;mrOk&#039;&#039;&#039;.&lt;br /&gt;
##* Setzen Sie &#039;&#039;&#039;StyleName&#039;&#039;&#039; auf &#039;&#039;&#039;DoButton&#039;&#039;&#039;.&lt;br /&gt;
## Für die Schaltfläche &#039;&#039;&#039;Nicht ausführen&#039;&#039;&#039;:&lt;br /&gt;
##* Für &#039;&#039;&#039;Nicht ausführen&#039;&#039;&#039; gibt es keinen integrierten Code, aber Sie können den Negativwert von &#039;&#039;&#039;mrOK&#039;&#039;&#039; (= -1) verwenden. Setzen Sie [[lib_de:FMX.StdCtrls.TCustomButton.ModalResult|ModalResult]] auf -1.&lt;br /&gt;
##* Setzen Sie &#039;&#039;&#039;StyleName&#039;&#039;&#039; auf &#039;&#039;&#039;DontButton&#039;&#039;&#039;.&lt;br /&gt;
## Für die Schaltfläche &#039;&#039;&#039;Abbrechen&#039;&#039;&#039;:&lt;br /&gt;
##* Setzen Sie [[lib_de:FMX.StdCtrls.TButton.Cancel|Cancel]] auf &#039;&#039;&#039;True&#039;&#039;&#039;.&lt;br /&gt;
##* Setzen Sie [[lib_de:FMX.StdCtrls.TCustomButton.ModalResult|ModalResult]] auf &#039;&#039;&#039;mrCancel&#039;&#039;&#039;.&lt;br /&gt;
##* Setzen Sie &#039;&#039;&#039;StyleName&#039;&#039;&#039; auf &#039;&#039;&#039;CancelButton&#039;&#039;&#039;.&lt;br /&gt;
#: Diese Schaltflächenanordnung entspricht weder Windows noch Mac. Sie können die Reihenfolge später anpassen. Setzen Sie die Ausrichtung jeder Schaltfläche auf &#039;&#039;&#039;Left&#039;&#039;&#039;, damit sie an der linken Seite &amp;quot;gestapelt&amp;quot; sind und alle einen entsprechenden linken Innenabstand haben. Geben Sie ein Platzhalter-Wort für die Beschriftungen &amp;quot;Ausführen/Nicht ausführen/Abbrechen&amp;quot; an, um eine ausreichende Breite für die Schaltflächen festlegen zu können. Die Gesamtbreite der Schaltflächen, ihr horizontaler Innenabstand und zusätzlicher Platz rechts von der letzten Schaltfläche muss als Breite (Width) des rechts ausgerichteten Layouts angegeben werden. Die Höhe (Height) der anderen beiden Layouts muss die Höhe der Schaltflächen, des oberen Innenabstands und, für die äußere TPanel-Komponente, den Platz unter den Schaltflächen wiedergeben.&lt;br /&gt;
#: Das endgültige Stildesign sollte folgendermaßen aussehen:&lt;br /&gt;
#: [[File:DialogButtonPanel win.style.png]]&lt;br /&gt;
# Erstellen Sie für jede Plattform einen speziellen Stil, und speichern Sie sie als &#039;&#039;&#039;DialogButtonPanel_win.style&#039;&#039;&#039; und &#039;&#039;&#039;DialogButtonPanel_mac.style&#039;&#039;&#039;.&lt;br /&gt;
# Sie können Änderungen auch direkt in den &amp;lt;code&amp;gt;.style&amp;lt;/code&amp;gt;-Dateien vornehmen und die Änderungen anschließend speichern.&lt;br /&gt;
# Wie Sie sehen, enthält jede &amp;lt;code&amp;gt;.style&amp;lt;/code&amp;gt;-Datei den Inhalt des Stilbuchs in einer &#039;&#039;&#039;TLayout&#039;&#039;&#039;-Stammkomponente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 object _1: TLayout&lt;br /&gt;
   { All objects would appear here, instead of this comment. Comments are not allowed in .style files! }&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Der Wrapper &amp;quot;TLayout&amp;quot; ist zum Laden der Stile in den Stil-Designer erforderlich, aber zur eigentlichen Verwendung des Stils als Vorgabestil für eine benutzerdefinierte Komponente sollten Sie den Wrapper entfernen, damit auf das Rechteck (in diesem Fall) direkt zugegriffen werden kann. Das Endergebnis sollte aus zwei separaten plattformspezifischen Dateien bestehen:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;DialogButtonPanel_win.style&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;DialogButtonPanel_mac.style&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   object TRectangle&lt;br /&gt;
     StyleName = &#039;DialogButtonPanelStyle&#039;&lt;br /&gt;
     Align = Bottom&lt;br /&gt;
     Position.Point = &#039;(0,264)&#039;&lt;br /&gt;
     Width = 600.000000000000000000&lt;br /&gt;
     Height = 46.000000000000000000&lt;br /&gt;
     ClipChildren = True&lt;br /&gt;
     HitTest = False&lt;br /&gt;
     Fill.Kind = None&lt;br /&gt;
     Stroke.Kind = None&lt;br /&gt;
     Sides = [Top, Left, Bottom, Right]&lt;br /&gt;
     object TLayout&lt;br /&gt;
       Align = Right&lt;br /&gt;
       Position.Point = &#039;(261,0)&#039;&lt;br /&gt;
       Width = 288.000000000000000000&lt;br /&gt;
       Height = 46.000000000000000000&lt;br /&gt;
       object TLayout&lt;br /&gt;
         Align = Top&lt;br /&gt;
         Position.Point = &#039;(0,12)&#039;&lt;br /&gt;
         Width = 288.000000000000000000&lt;br /&gt;
         Height = 22.000000000000000000&lt;br /&gt;
         Padding.Rect = &#039;(0,12,0,0)&#039;&lt;br /&gt;
         object TButton&lt;br /&gt;
           StyleName = &#039;DoButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Position.Point = &#039;(12,0)&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
           TabOrder = 0&lt;br /&gt;
           StaysPressed = False&lt;br /&gt;
           IsPressed = False&lt;br /&gt;
           ModalResult = 1&lt;br /&gt;
           Text = &#039;Do Verb&#039;&lt;br /&gt;
           Default = True&lt;br /&gt;
         end&lt;br /&gt;
         object TButton&lt;br /&gt;
           StyleName = &#039;DontButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Position.Point = &#039;(104,0)&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
           TabOrder = 1&lt;br /&gt;
           StaysPressed = False&lt;br /&gt;
           IsPressed = False&lt;br /&gt;
           ModalResult = -1&lt;br /&gt;
           Text = &#039;Don&#039;#39&#039;t Verb&#039;&lt;br /&gt;
         end&lt;br /&gt;
         object TButton&lt;br /&gt;
           StyleName = &#039;CancelButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Position.Point = &#039;(196,0)&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
           TabOrder = 2&lt;br /&gt;
           StaysPressed = False&lt;br /&gt;
           IsPressed = False&lt;br /&gt;
           ModalResult = 2&lt;br /&gt;
           Text = &#039;Cancel&#039;&lt;br /&gt;
           Cancel = True&lt;br /&gt;
         end&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  object TRectangle&lt;br /&gt;
     StyleName = &#039;DialogButtonPanelStyle&#039;&lt;br /&gt;
     Align = Bottom&lt;br /&gt;
     Position.Point = &#039;(0,264)&#039;&lt;br /&gt;
     Width = 600.000000000000000000&lt;br /&gt;
     Height = 46.000000000000000000&lt;br /&gt;
     ClipChildren = True&lt;br /&gt;
     HitTest = False&lt;br /&gt;
     Fill.Kind = None&lt;br /&gt;
     Stroke.Kind = None&lt;br /&gt;
     Sides = [Top, Left, Bottom, Right]&lt;br /&gt;
     object TLayout&lt;br /&gt;
       Align = Right&lt;br /&gt;
       Position.Point = &#039;(249,0)&#039;&lt;br /&gt;
       Width = 300.000000000000000000&lt;br /&gt;
       Height = 46.000000000000000000&lt;br /&gt;
       object TLayout&lt;br /&gt;
         Align = Top&lt;br /&gt;
         Position.Point = &#039;(0,12)&#039;&lt;br /&gt;
         Width = 300.000000000000000000&lt;br /&gt;
         Height = 22.000000000000000000&lt;br /&gt;
         Padding.Rect = &#039;(0,12,0,0)&#039;&lt;br /&gt;
         object TButton&lt;br /&gt;
           StyleName = &#039;DontButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Position.Point = &#039;(12,0)&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           Padding.Rect = &#039;(12,0,12,0)&#039;&lt;br /&gt;
           TabOrder = 0&lt;br /&gt;
           StaysPressed = False&lt;br /&gt;
           IsPressed = False&lt;br /&gt;
           ModalResult = -1&lt;br /&gt;
           Text = &#039;Don&#039;#39&#039;t Verb&#039;&lt;br /&gt;
         end&lt;br /&gt;
         object TButton&lt;br /&gt;
           StyleName = &#039;CancelButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Position.Point = &#039;(116,0)&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
           TabOrder = 1&lt;br /&gt;
           StaysPressed = False&lt;br /&gt;
           IsPressed = False&lt;br /&gt;
           ModalResult = 2&lt;br /&gt;
           Text = &#039;Cancel&#039;&lt;br /&gt;
           Cancel = True&lt;br /&gt;
         end&lt;br /&gt;
         object TButton&lt;br /&gt;
           StyleName = &#039;DoButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Position.Point = &#039;(208,0)&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           Padding.Rect = &#039;(12,0,0,0)&#039;&lt;br /&gt;
           TabOrder = 2&lt;br /&gt;
           StaysPressed = False&lt;br /&gt;
           IsPressed = False&lt;br /&gt;
           ModalResult = 1&lt;br /&gt;
           Text = &#039;Do Verb&#039;&lt;br /&gt;
           Default = True&lt;br /&gt;
         end&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Verwenden von FMX-Dateien==&lt;br /&gt;
&lt;br /&gt;
# Entwerfen Sie im &#039;&#039;&#039;PanelDesign&#039;&#039;&#039;-Formular die neue Komponente durch Hinzufügen der gleichen Komponenten wie oben.&lt;br /&gt;
# Nehmen Sie für jede verwendete Komponente die gleichen Änderungen wie oben vor.&lt;br /&gt;
#: Das Ergebnis sollte wie folgt aussehen:&lt;br /&gt;
#: [[File:DialogButtonPanel in a form.png]]&lt;br /&gt;
# Wechseln Sie zur &#039;&#039;&#039;PanelDesign.fmx&#039;&#039;&#039;-Datei, und öffnen Sie sie.&lt;br /&gt;
# Extrahieren Sie den Code ab &amp;lt;code&amp;gt;object Rectangle1: TRectangle&amp;lt;/code&amp;gt; bis zum zugehörigen &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;-Tag.&lt;br /&gt;
# Kopieren Sie die extrahierten Zeilen, und speichern Sie sie in einer &amp;lt;code&amp;gt;.style&amp;lt;/code&amp;gt;-Datei.&lt;br /&gt;
# Führen Sie die gewünschten Änderungen aus, und speichern Sie die Datei unter &#039;&#039;&#039;DialogButtonPanel_win.style&#039;&#039;&#039;.&lt;br /&gt;
# Ordnen Sie die Schaltflächen gemäß der Mac-Reihenfolge an, erstellen Sie die Datei &#039;&#039;&#039;DialogButtonPanel_mac.style&#039;&#039;&#039; und speichern Sie sie.&lt;br /&gt;
&lt;br /&gt;
Der Dateiinhalt für die Windows-Plattform sollte folgendermaßen lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Delphi&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
  object Rectangle1: TRectangle&lt;br /&gt;
     Align = Bottom&lt;br /&gt;
     Fill.Kind = None&lt;br /&gt;
     Height = 50.000000000000000000&lt;br /&gt;
     Position.Y = 28.000000000000000000&lt;br /&gt;
     Stroke.Kind = None&lt;br /&gt;
     Width = 332.000000000000000000&lt;br /&gt;
     object Layout1: TLayout&lt;br /&gt;
       Align = Right&lt;br /&gt;
       Height = 50.000000000000000000&lt;br /&gt;
       Position.X = 44.000000000000000000&lt;br /&gt;
       Width = 288.000000000000000000&lt;br /&gt;
       object Layout2: TLayout&lt;br /&gt;
         Align = Top&lt;br /&gt;
         Height = 22.000000000000000000&lt;br /&gt;
         Width = 288.000000000000000000&lt;br /&gt;
         object Button1: TButton&lt;br /&gt;
           StyleName = &#039;DoButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Default = True&lt;br /&gt;
           DisableFocusEffect = False&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           ModalResult = 1&lt;br /&gt;
           Padding.Left = 12.000000000000000000&lt;br /&gt;
           Position.X = 12.000000000000000000&lt;br /&gt;
           Text = &#039;Do Verb&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
         end&lt;br /&gt;
         object Button2: TButton&lt;br /&gt;
           StyleName = &#039;DontButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           DisableFocusEffect = False&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           ModalResult = -1&lt;br /&gt;
           Padding.Left = 12.000000000000000000&lt;br /&gt;
           Position.X = 104.000000000000000000&lt;br /&gt;
           Text = &#039;Don&#039;#39&#039;t Verb&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
         end&lt;br /&gt;
         object Button3: TButton&lt;br /&gt;
           StyleName = &#039;CancelButton&#039;&lt;br /&gt;
           Align = Left&lt;br /&gt;
           Cancel = True&lt;br /&gt;
           DisableFocusEffect = False&lt;br /&gt;
           Height = 22.000000000000000000&lt;br /&gt;
           ModalResult = 2&lt;br /&gt;
           Padding.Left = 12.000000000000000000&lt;br /&gt;
           Position.X = 196.000000000000000000&lt;br /&gt;
           Text = &#039;Cancel&#039;&lt;br /&gt;
           Width = 80.000000000000000000&lt;br /&gt;
         end&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zurück==&lt;br /&gt;
&lt;br /&gt;
* [[Schritt 1 - Erstellen der Projekte (C++)|Schritt 1 - Erstellen der Projekte (C++)]]&lt;br /&gt;
&lt;br /&gt;
==Weiter==&lt;br /&gt;
&lt;br /&gt;
* [[Schritt 3 - Hinzufügen von Stilressourcen als RCDATA (C++)|Schritt 3 - Hinzufügen von Stilressourcen als RCDATA (C++)]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[FireMonkey-Komponentendesign|FireMonkey-Komponentendesign]]&lt;br /&gt;
* [[Verwenden des Experten für neue Komponenten|Verwenden des Experten für neue Komponenten]]&lt;br /&gt;
* [[Erstellen einer FireMonkey-Komponente (C++)|Erstellen einer FireMonkey-Komponente (C++)]]&lt;br /&gt;
* [[Erstellen einer mit Stilen versehenen FireMonkey-Komponente durch Erweitern einer vorhandenen Komponente|Erstellen einer mit Stilen versehenen FireMonkey-Komponente durch Erweitern einer vorhandenen Komponente]]&lt;br /&gt;
* [[Erstellen eines grundlegenden FireMonkey-Steuerelements|Erstellen eines grundlegenden FireMonkey-Steuerelements]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Schritt 2 - Entwerfen des Schaltflachenbereichs (C++)}}&lt;br /&gt;
[[Category:XE3]]&lt;br /&gt;
[[Category:FMX]]&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Step 2 - Design the Panel (C++)]]&lt;br /&gt;
[[fr:Etape 2 - Concevoir le panneau (C++)]]&lt;br /&gt;
[[ja:ステップ 2 - パネルを設計する（C++）]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Schritte_bei_der_Entwicklung_von_ger%C3%A4te%C3%BCbergreifenden_Anwendungen&amp;diff=208893</id>
		<title>Schritte bei der Entwicklung von geräteübergreifenden Anwendungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Schritte_bei_der_Entwicklung_von_ger%C3%A4te%C3%BCbergreifenden_Anwendungen&amp;diff=208893"/>
		<updated>2016-06-23T08:19:09Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Geräteübergreifende Anwendungen entwickeln}}&lt;br /&gt;
__TOC__&lt;br /&gt;
Das Compilieren und Erzeugen geräteübergreifender Anwendungen, aber nicht das Ausführen, entspricht weitgehend den jeweiligen Operationen für das [[Arbeitsschritte bei der Projektentwicklung|Erzeugen von nativen Windows-Anwendungen]]. Die zusätzlichen Schritte sind in diesem Thema beschrieben.&lt;br /&gt;
&lt;br /&gt;
Für das Ausführen und Debuggen einer geräteübergreifenden Anwendung für OS X, iOS oder in einigen Fällen für 64-Bit-Windows ist es erforderlich, dass das Entwicklungssystem mit der Zielplattform verbunden ist, auf der der &#039;&#039;&#039;Platform Assistant-Server&#039;&#039;&#039; (der Remote-Anwendungsserver) im Empfangsmodus ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==Beginnen Sie mit dem Einrichten Ihrer Entwicklungsumgebung==&lt;br /&gt;
&lt;br /&gt;
===Wenn Ihre Anwendung für &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039; vorgesehen ist===&lt;br /&gt;
&lt;br /&gt;
* Für 64-Bit-Windows-Entwicklungssysteme ist keine spezielle Konfiguration erforderlich.&lt;br /&gt;
* Wenn Sie ein externes Win64-Zielsystem verwenden:&lt;br /&gt;
*# [[Verbinden Ihres 32-Bit-PC mit einem Win64-PC|Verbinden Sie Ihren Entwicklungs-PC mit dem 64-Bit-PC]].&lt;br /&gt;
*# [[Installieren des Platform Assistant unter Windows|Installieren]] Sie PAServer, den plattformübergreifenden Server, auf dem 64-Bit-PC, und [[Ausführen des Platform Assistant unter Windows|führen]] Sie ihn aus.&lt;br /&gt;
*# [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|Erstellen Sie ein Verbindungsprofil]], das die Verbindung mit dem &amp;quot;Platform Assistant&amp;quot;-Server auf dem 64-Bit-PC beschreibt.&lt;br /&gt;
&lt;br /&gt;
===Wenn Ihre Anwendung für &#039;&#039;&#039;OS X oder iOS&#039;&#039;&#039; vorgesehen ist===&lt;br /&gt;
&lt;br /&gt;
# [[Arbeiten mit einem Mac und einem PC|Verbinden Sie Ihren Entwicklungs-PC mit dem Mac]].&lt;br /&gt;
# [[Installieren des Platform Assistant auf dem Mac|Installieren]] Sie PAServer, den plattformübergreifenden Server, auf dem Mac, und [[Ausführen des Platform Assistant auf dem Mac|führen]] Sie ihn aus.&lt;br /&gt;
# [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|Erstellen Sie ein Verbindungsprofil]], das die Verbindung mit dem &amp;quot;Platform Assistant&amp;quot;-Server auf dem Mac beschreibt.&lt;br /&gt;
# [[Hinzufügen von SDKs für OS X oder iOS|Fügen Sie ein SDK]] hinzu, damit Ihre Anwendung erzeugt werden kann.&lt;br /&gt;
# Erwerben Sie die erforderlichen Entwickler-IDs und -Zertifikate von Apple. Einzelheiten finden Sie unter:&lt;br /&gt;
#* Mac: [[OS X-Anwendungsentwicklung|Mac OS X-Anwendungsentwicklung]]&lt;br /&gt;
#* iOS: [[Teilnehmen am Apple-Entwicklerprogramm|Beitreten zum Apple-Entwicklerprogramm]], [[Erwerben eines iOS-Entwicklerzertifikats|Erwerben eines iOS-Entwicklerzertifikats]] und [[Bereitstellen von iOS-Anwendungen|Bereitstellen von iOS-Anwendungen]].&lt;br /&gt;
# [[Ausfüllen der Bereitstellungsseite|Konfigurieren Sie Ihre Zertifikate und Bereitstellungsprofile in {{Product}}]].&lt;br /&gt;
&lt;br /&gt;
===Wenn Ihre Anwendung für &#039;&#039;&#039;Android&#039;&#039;&#039; vorgesehen ist===&lt;br /&gt;
&lt;br /&gt;
# [[Aktivieren des USB-Debugging auf Android-Geräten|Aktivieren Sie das USB-Debugging auf Ihrem Android-Gerät]].&lt;br /&gt;
# [[Konfigurieren des Systems für die Erkennung von Android-Geräten|Konfigurieren Sie Ihr System so, dass Ihr Android-Gerät erkannt wird]].&lt;br /&gt;
# [[Ausfüllen der Bereitstellungsseite|Konfigurieren Sie Ihr Signierungszertifikat in {{Product}}]].&lt;br /&gt;
&lt;br /&gt;
==Erstellen und konfigurieren Sie dann in der IDE eine geräteübergreifende Anwendung==&lt;br /&gt;
&lt;br /&gt;
Erstellen Sie Ihre Anwendung, indem Sie einen [[Experten zum Erstellen von geräteübergreifenden FireMonkey-Anwendungen und -Komponenten|Experten auswählen, der die ausgewählte Zielplattform unterstützt]].&lt;br /&gt;
&lt;br /&gt;
: Sie können beispielsweise [[Geräteübergreifende Anwendung|Geräteübergreifend Anwendung]] auswählen, die die geräteübergreifende Anwendungsentwicklung für alle [[Unterstützte Zielplattformen|verfügbaren Zielplattformen unterstützt]].&lt;br /&gt;
:&#039;&#039;&#039; [[Konsolenanwendungen|Konsolenanwendungen]]&#039;&#039;&#039; können geräteübergreifend sein, wenn die Zielplattform in der Projektverwaltung entsprechend festgelegt ist.  Wählen Sie einen der folgenden Befehle aus:&lt;br /&gt;
:* {{Delphi}}: &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Datei &amp;amp;gt; Neu &amp;amp;gt; Weitere &amp;amp;gt; {{Delphi}}-Projekte &amp;amp;gt; Konsolenanwendung&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
:* C++: &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Datei &amp;amp;gt; Neu &amp;amp;gt; Weitere &amp;amp;gt; {{CBuilderUI}}-Projekte &amp;amp;gt; Konsolenanwendung&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Übersicht: So konfigurieren Sie Ihre geräteübergreifende Anwendung in der {{Product}}-IDE===&lt;br /&gt;
&lt;br /&gt;
[[Aktivieren und Konfigurieren der Zielplattform|Weitere Einzelheiten finden Sie unter: Geräteübergreifende Anwendung]]&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Hinzufügen und Aktivieren der Zielplattform (in der [[Projektverwaltung|Projektverwaltung]]):&#039;&#039;&#039;&lt;br /&gt;
## Klicken Sie zum Hinzufügen einer Plattform zu der aktuellen Anwendung in der Projektverwaltung auf den Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039;, wählen Sie &#039;&#039;&#039;Plattform hinzufügen&#039;&#039;&#039; und dann die Zielplattform, z. B. &#039;&#039;&#039;OS X&#039;&#039;&#039;, aus.&lt;br /&gt;
##:(Der Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039; wird nur für Anwendungen angezeigt, die geräteübergreifend sind.)&lt;br /&gt;
## Doppelklicken Sie auf eine Zielplattform (oder klicken Sie mit der rechten Maustaste, und wählen Sie im Kontextmenü &#039;&#039;&#039;Aktivieren&#039;&#039;&#039; aus) oder wählen Sie die Plattform in der [[Symbolleiste zur Auswahl des Plattformgeräts|Symbolleiste zur Auswahl des Plattformgeräts]], um die Zielplattform zu aktivieren.&lt;br /&gt;
##: Doppelklicken Sie beispielsweise auf &#039;&#039;&#039;OS X&#039;&#039;&#039;, wenn die aktuelle Anwendung OS X als Zielplattform verwenden soll.&lt;br /&gt;
#&#039;&#039;&#039;Konfigurieren der Zielplattform (in der [[Projektverwaltung|Projektverwaltung]]):&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
## Klicken Sie mit der rechten Maustaste auf die aktive Zielplattform, und wählen Sie aus dem Kontextmenü &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039;. Das Dialogfeld &#039;&#039;&#039;[[Plattformeigenschaften|Plattformeigenschaften]]&#039;&#039;&#039; wird angezeigt.&lt;br /&gt;
## Sie müssen nur ein &#039;&#039;&#039;SDK (Software Development Kit)&#039;&#039;&#039; konfigurieren, wenn Sie eine Anwendung für &#039;&#039;&#039;OS X&#039;&#039;&#039;, eine Anwendung für &#039;&#039;&#039;iOS (Gerät oder Simulator)&#039;&#039;&#039; oder eine &#039;&#039;&#039;Android&#039;&#039;&#039;-Anwendung entwickeln:&lt;br /&gt;
### Klicken Sie im Dialogfeld [[Plattformeigenschaften|Plattformeigenschaften]] im Kombinationsfeld &#039;&#039;&#039;SDK&#039;&#039;&#039; auf den Pfeil nach unten, und wählen Sie &#039;&#039;&#039;Neue hinzufügen&#039;&#039;&#039; aus.&lt;br /&gt;
### Klicken Sie im Dialogfeld &#039;&#039;&#039;[[Neues SDK hinzufügen|Neues SDK hinzufügen]]&#039;&#039;&#039; im Kombinationsfeld &#039;&#039;&#039;SDK-Version auswählen&#039;&#039;&#039; auf den Pfeil nach unten.&lt;br /&gt;
### Wählen Sie in der Liste verfügbarer SDKs, die daraufhin angezeigt wird, das SDK aus, das Sie für die ausgewählte Plattform verwenden möchten.&lt;br /&gt;
## Sie müssen das &#039;&#039;&#039;Verbindungsprofil&#039;&#039;&#039;, das für die ausgewählte Plattform verwendet werden soll, nur auswählen, wenn es sich bei Ihrer Anwendung um eine &#039;&#039;&#039;64-Bit-Windows&#039;&#039;&#039;-Anwendung (und Ihr Entwicklungssystem nicht Win64 ist), um eine &#039;&#039;&#039;OS X&#039;&#039;&#039;-Anwendung oder um eine Anwendung für &#039;&#039;&#039;iOS (Gerät oder Simulator)&#039;&#039;&#039; handelt.&lt;br /&gt;
##: Um ein Verbindungsprofil für die ausgewählte Plattform zu erstellen, wählen Sie im Kombinationsfeld den Eintrag &#039;&#039;&#039;Neue hinzufügen&#039;&#039;&#039; aus.&lt;br /&gt;
## Klicken Sie zum Speichern der Änderungen auf &#039;&#039;&#039;OK&#039;&#039;&#039;.&lt;br /&gt;
# Für &#039;&#039;&#039;Datenbankanwendungen&#039;&#039;&#039; müssen Sie die entsprechenden Datenbanktreiber für die Bereitstellung auf der Zielplattform auswählen:&lt;br /&gt;
## Öffnen Sie den [[Bereitstellungs-Manager|Bereitstellungs-Manager]].&lt;br /&gt;
## Wählen Sie in der Symbolleiste &#039;&#039;&#039;[[Bereitstellungs-Manager - Weitere Dateien hinzufügen|Weitere Dateien hinzufügen]]&#039;&#039;&#039; aus ([[Image:DMgrAddFeatFiles.png]]).&lt;br /&gt;
## Wählen Sie im Dialogfeld &#039;&#039;&#039;Weitere Dateien hinzufügen&#039;&#039;&#039; die Datenbanktreiber für die Zielplattform Ihrer Anwendung aus.&lt;br /&gt;
#:Im Dialogfeld &#039;&#039;&#039;Weitere Dateien hinzufügen&#039;&#039;&#039; können Sie auch die Plattformunterstützung für die verschiedenen Datenbanktreiber überprüfen.&lt;br /&gt;
# Für alle Anwendungen können Sie Ihrer Projektbereitstellung mit dem [[Bereitstellungs-Manager|Bereitstellungs-Manager]] optional verschiedene Dateien (z. B. Bibliotheken für das dynamische Linken auf der Zielplattform) hinzufügen, wenn Sie ein Verbindungsprofil verwenden.&lt;br /&gt;
&lt;br /&gt;
==Weiter==&lt;br /&gt;
&lt;br /&gt;
* [[Debuggen von geräteübergreifenden Anwendungen|Debuggen von geräteübergreifenden Anwendungen]]&lt;br /&gt;
* [[Bereitstellung von geräteübergreifenden Anwendungen|Bereitstellen von geräteübergreifenden Anwendungen]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Geräteübergreifende Anwendungen entwickeln|Geräteübergreifende Anwendungen entwickeln]]&lt;br /&gt;
* [[64-Bit-Windows-Anwendungsentwicklung|64-Bit-Windows-Anwendungsentwicklung]]&lt;br /&gt;
* [[OS X-Anwendungsentwicklung|OS X-Anwendungsentwicklung]]&lt;br /&gt;
* [[Mobile iOS-Anwendungsentwicklung|Mobile iOS-Anwendungsentwicklung]]&lt;br /&gt;
* [[Mobile Android-Anwendungsentwicklung|Mobile Android-Anwendungsentwicklung]]&lt;br /&gt;
* [[PAServer: Die Platform Assistant Server-Anwendung|PAServer: Die Platform Assistant Server-Anwendung]]&lt;br /&gt;
* [[Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile|Compilieren und Linken einer C++-Konsolenanwendung für OS X in der Befehlszeile]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Schritte bei der Entwicklung von gerateubergreifenden Anwendungen}}&lt;br /&gt;
[[Category:Geräteübergreifend]]&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Steps in Creating Multi-Device Applications]]&lt;br /&gt;
[[fr:Etapes de la création d&#039;applications multi-périphériques]]&lt;br /&gt;
[[ja:マルチデバイス アプリケーション作成のステップ]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Ein_Projekt_starten_-_%C3%9Cberblick&amp;diff=208892</id>
		<title>Ein Projekt starten - Überblick</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Ein_Projekt_starten_-_%C3%9Cberblick&amp;diff=208892"/>
		<updated>2016-06-23T08:18:40Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Einführung in RAD Studio}}&lt;br /&gt;
{{DISPLAYTITLE:Ein Projekt starten - Überblick}}&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Projekt&#039;&#039;&#039; ist eine Sammlung von Dateien, aus denen eine Zielanwendung erstellt wird. Die Sammlung umfasst neben den von Ihnen hinzugefügten und bearbeiteten Dateien, wie Quelltext- und Ressourcendateien, auch Dateien, die {{Variables|Product}} zum Speichern von Projekteinstellungen verwendet (z. B. die Projektdatei &amp;lt;code&amp;gt;.dproj&amp;lt;/code&amp;gt; ({{Delphi}}) oder &amp;lt;code&amp;gt;.cbproj&amp;lt;/code&amp;gt; ({{CBuilder}})). Projekte werden zur Entwurfszeit erstellt und liefern bei der Compilierung die Projektzieldateien (&amp;lt;code&amp;gt;.exe, .dll, .bpl,&amp;lt;/code&amp;gt; usw.).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die IDE öffnen, wird eine &#039;&#039;&#039;Standardprojektgruppe&#039;&#039;&#039; als oberstes Element in der &#039;&#039;&#039;[[Projektverwaltung|Projektverwaltung]]&#039;&#039;&#039; angelegt. Anwendungen, Formulare, Units und andere Dateien, die Sie in der IDE erstellen, werden der Standardprojektgruppe hinzugefügt. Sie können der Projektgruppe Projekte hinzufügen, indem Sie in der &#039;&#039;&#039;Projektverwaltung&#039;&#039;&#039; mit der rechten Maustaste auf die Projektgruppe ([[File:ProjGroupNew.png]]) klicken und einen [[Projektverwaltung#Kontextmenü für Projektgruppen|Kontextmenübefehl]], wie &amp;quot;Neues Projekt hinzufügen&amp;quot; oder &amp;quot;Existierendes Projekt hinzufügen&amp;quot;, auswählen.&lt;br /&gt;
&lt;br /&gt;
Zur Unterstützung der Entwicklungsarbeit enthält die &#039;&#039;&#039;[[Objektablage|Objektablage]]&#039;&#039;&#039; viele vordefinierte Vorlagen, Formulare, Dateien und andere Elemente, auf die Sie zurückgreifen können. Sie öffnen die Objektablage mit &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &#039;&#039;&#039;Datei &amp;amp;gt; Neu &amp;amp;gt; Weitere&#039;&#039;&#039;&amp;lt;/font&amp;gt; und können dann das gewünschte Element auswählen. &lt;br /&gt;
&lt;br /&gt;
*Zum Erstellen eines Projekts wählen Sie &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &#039;&#039;&#039;Datei &amp;amp;gt; Neu &amp;amp;gt; Weitere&#039;&#039;&#039;&amp;lt;/font&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
*Um ein vorhandenes Projekt zu öffnen, wählen Sie es auf der &#039;&#039;&#039;Willkommensseite&#039;&#039;&#039; aus den Listen &amp;quot;Letzte Projekte&amp;quot; oder &amp;quot;Zuletzt geöffnete Projekte&amp;quot; aus oder wählen &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &#039;&#039;&#039;Datei &amp;amp;gt; Projekt öffnen&#039;&#039;&#039;&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Projektarten==&lt;br /&gt;
&lt;br /&gt;
Je nachdem, mit welcher Edition von {{Variables|Product}} Sie arbeiten, können Sie herkömmliche Windows-Anwendungen, geräteübergreifende Anwendungen, Webanwendungen, Datenbankanwendungen, Webdienstanwendungen und viele andere erstellen. {{Variables|Product}} unterstützt auch Assemblies, benutzerdefinierte Komponenten&amp;lt;f s=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt;, Multithreading und COM.&amp;lt;f e=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;f s=&amp;quot;appmethod&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt; und Multithreading. &amp;lt;f e=&amp;quot;appmethod&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt; Weitere Informationen zu den verfügbaren Tools in den einzelnen Editionen finden Sie in der Funktionsmatrix auf der {{Company}} {{Delphi}}-Webseite oder der {{Company}} {{CBuilder}}-Webseite.&lt;br /&gt;
&lt;br /&gt;
{{f|radstudio|&lt;br /&gt;
&lt;br /&gt;
===VCL- und andere Anwendungen für Windows===&lt;br /&gt;
&lt;br /&gt;
Sie können Windows-Anwendungen mit der VCL (Visual Component Library), einer umfangreichen Bibliothek mit Komponenten und Funktionen, erstellen, die Sie für Ihr Projekt oder Formular auswählen können. Neben den herkömmlichen Einsatzmöglichkeiten können Windows-Anwendungen auch mit Konstrukten des .NET Framework verwendet werden. Beispielsweise ist es möglich, eine Windows-Anwendung als Web-Serveranwendung einzusetzen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Geräteübergreifende Anwendungen (FireMonkey)===&lt;br /&gt;
&lt;br /&gt;
Sie können geräteübergreifende Anwendungen mit der [[FireMonkey|FireMonkey-Komponentenbibliothek]] erstellen, die eine umfassende Bibliothek mit geräteübergreifenden Komponenten und Funktionen enthält, die Sie für Projekte für die folgenden Zielplattformen einsetzen können:&lt;br /&gt;
&lt;br /&gt;
* OS X-Systeme&lt;br /&gt;
* iOS-Geräte&lt;br /&gt;
* Android-Geräte&lt;br /&gt;
&lt;br /&gt;
Beispielsweise können Sie mit der Laufzeitbibliothek &#039;&#039;&#039;[[Verwenden von App-Tethering|Geräte-Tethering]]&#039;&#039;&#039; von Anwendungen über die Bluetooth-Technologie implementieren. &lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter &#039;&#039;&#039;[[Geräteübergreifende Anwendungen - Index|Geräteübergreifende Anwendungen]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Webdienstanwendungen===&lt;br /&gt;
&lt;br /&gt;
Sie können Webdienstanwendungen erstellen, die Inhalte, wie HTML-Seiten oder XML-Dokumente, über das Web bereitstellen. Webdienste sind eine Internet-basierte Integrationstechnik, mit der verschiedene Anwendungen via Web verbunden und Informationen über Standard-Nachrichtenprotokolle ausgetauscht werden können.&lt;br /&gt;
&lt;br /&gt;
{{Variables|Product}} vereinfacht die Erstellung von Webdiensten durch die Bereitstellung von Methoden für die Entwicklung von SOAP-Serveranwendungen. Die &amp;lt;font face=&amp;quot;courier new,courier,monospace&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#004A80&amp;quot;&amp;gt;.dll&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/font&amp;gt;-Dateien werden dabei automatisch erzeugt, und der Webdienst lässt sich in der IDE testen, ohne dass dafür eine Client-Anwendung erstellt werden müsste.&lt;br /&gt;
&lt;br /&gt;
===Datenbank/Konnektivitätsanwendungen===&lt;br /&gt;
&lt;br /&gt;
Gleichgültig, ob Ihre Anwendungen Web Forms&amp;lt;f s=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt;, VCL-Formulare&amp;lt;f e=&amp;quot;radstudio&amp;quot; t=&amp;quot;span&amp;quot; /&amp;gt; oder FireMonkey-Formulare verwendet, {{Variables|Product}} verfügt über die notwendigen Tools, um eine Datenbankverbindung herzustellen, eine Datenbank zu durchsuchen und zu bearbeiten, SQL-Abfragen durchzuführen sowie die aktuellen Daten live zur Entwurfszeit anzuzeigen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[FireDAC|FireDAC]]&#039;&#039;&#039; ist unsere bedeutendste Datenbanklösung, die eine beispiellose Leistung und [[Datenbankkonnektivität (FireDAC)|Konnektivität]] bietet.&lt;br /&gt;
&lt;br /&gt;
Des Weiteren bieten wir unter anderem die folgenden Technologien [[Überblick zu REST|REST]], [[JSON|JSON]] und [[Enterprise Mobility Services (EMS)|Enterprise Mobility Services (EMS)]].&lt;br /&gt;
&lt;br /&gt;
Mit dbExpress können Sie eine Verbindung zu [[InterBase|InterBase]]-, Oracle-, MS SQL-, Informix-, DB2-, Sybase- und MySQL-Datenbanken herstellen. Durch Erweiterung der Klassen des dbExpress-Frameworks haben Sie zudem die Möglichkeit, Datenbanktreiber zu entwickeln. Mit dbExpress kann sowohl nativer als auch verwalteter Code verwendet werden.&lt;br /&gt;
&lt;br /&gt;
===Modellierungsprojekte===&lt;br /&gt;
&lt;br /&gt;
Mit dem Begriff &#039;&#039;UML-Modellierung&#039;&#039; wird der Prozess des objektorientierten Entwurfs von Softwaresystemen mit grafischen UML-Diagrammen bezeichnet. Ein UML-Modell für ein Softwaresystem ist ungefähr mit den Plänen vergleichbar, die ein Ingenieur für ein großes Entwicklungsprojekt anfertigt. Wie Pläne stellt ein UML-Modell ein System nicht nur im Ganzen dar, sondern bietet auch die Möglichkeit, sich auf spezielle Aspekte, wie Struktur- und Verhaltensdetails, zu konzentrieren. Unabhängig von der jeweiligen Programmiersprache (und bis zu einem gewissen Grad auch von bestimmten Technologien) können alle am Entwicklungszyklus Beteiligten mit Hilfe des UML-Modells in derselben Sprache kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Die UML-Modellierung stellt einen Ansatz für das Software-Engineering dar, bei dem die UML-Modellierungstools vollständig in die Entwicklungsumgebung von {{Variables|Product}} integriert sind. Die UML-Modellierung baut auf Interfaces, Klassen und benutzerdefinierten Attributen auf. Dieser Ansatz sorgt für die Kommunikation zwischen dem Quelltexten eines Softwaresystems, das in der IDE programmiert wird, und seinem UML-Modell, das gleichzeitig im Modellierungstool der IDE entworfen wird.&lt;br /&gt;
&lt;br /&gt;
Die Modellierung arbeitet im Kontext eines &#039;&#039;Modellierungsprojekts&#039;&#039;. Die Modellierung erweitert ein normales Projekt von {{Variables|Product}} durch Hinzufügen von Dateien, die UML-Diagramme des Modellierungsprojekts beschreiben. Die Modellierung fügt den &#039;&#039;Modellierungsprojektdateien&#039;&#039; Verweise auf diese Modellierungsdateien hinzu. Die Modellierung arbeitet mit den Modellierungsprojekttypen &#039;&#039;&#039;Implementierung&#039;&#039;&#039; und &#039;&#039;&#039;Design&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Implementierungsprojekt&#039;&#039;&#039; – Implementierungsprojekte sind sprachspezifische Projekte. Implementierungsprojekte unterstützen nur UML 1.5-Modelle. Eine Implementierungsprojektdatei legt die {{Delphi}}- oder C++-Quellcodedateien und die Dateien der in diesem Projekt erstellten UML-Diagramme fest. Sie können UML 1.5-Modelle für sprachspezifische Projekte in {{Delphi}} und C++ erstellen. Die Dateinamenserweiterungen von Implementierungsprojektdateien lauten &amp;lt;code&amp;gt;.dproj&amp;lt;/code&amp;gt; (für {{Delphi}}-Projekte) und &amp;lt;code&amp;gt;.cbproj&amp;lt;/code&amp;gt; (für C++-Projekte). &lt;br /&gt;
* &#039;&#039;&#039;Designprojekt&#039;&#039;&#039; – Designprojekte sind sprachneutral und mit den UML 1.5- oder UML 2.0-Spezifikationen konform. Die Dateinamenserweiterung von Designprojektdateien lautet &amp;lt;code&amp;gt;.tgproj&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Die IDE von {{Variables|Product}} nutzt die Modellierungsfunktionen, um für die Entwicklung des UML-Modells der Anwendung eine integrierte Oberfläche bereitzustellen. Zu den Modellierungsfunktionen gehören:&lt;br /&gt;
&lt;br /&gt;
* [[Ein Projekt erstellen (Modellierung)|Erstellen von Projekten, die die UML-Modellierung unterstützen]] und [[UML-Modellierungsunterstützung für Projekte aktivieren|Aktivieren der UML-Modellierungsunterstützung für vorhandene Projekte]].&lt;br /&gt;
* Erstellen der unterstützten Typen von UML-Modellierungsdiagrammen und Bearbeiten von Modellelementen (Diagramme, Packages, Klassen, Beziehungen usw.) direkt in der &#039;&#039;&#039;Diagrammansicht&#039;&#039;&#039; oder der &#039;&#039;&#039;Modellansicht&#039;&#039;&#039;.&lt;br /&gt;
* Direktes Hinzufügen, Entfernen und Ändern von Attributen, Operationen, Datentypen und anderer Klassen-Member in Klassendiagrammen in der &#039;&#039;&#039;Diagrammansicht&#039;&#039;&#039; oder über die entsprechenden Knoten in der &#039;&#039;&#039;Modellansicht&#039;&#039;&#039;.&lt;br /&gt;
* Klassendiagramme ermöglichen die wechselseitige Synchronisierung zwischen sprachspezifischem Quellcode und dem UML-Modell. Änderungen im Quellcode werden in der grafischen Abbildung sofort wiedergegeben und umgekehrt.&lt;br /&gt;
* Wechselseitige Navigationsmöglichkeit zwischen Modellelementen und dem Quellcode. Sie können von der grafischen Abbildung eines Modellelements in der &#039;&#039;&#039;Diagrammansicht&#039;&#039;&#039; oder der &#039;&#039;&#039;Modellansicht&#039;&#039;&#039; direkt zum Quellcode navigieren, der dieses Modellelement implementiert. Genauso können Sie auch von einer Klasse im Quellcode direkt zum entsprechenden Diagramm in der &#039;&#039;&#039;Diagrammansicht&#039;&#039;&#039; navigieren.&lt;br /&gt;
* Exportieren und Importieren von UML-Modellen unter Verwendung des XMI-Formats.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Einige Modellierungsfunktionen stehen in bestimmten Editionen von {{Variables|Product}} nicht zur Verfügung. Informationen zu den Modellierungsfunktionen, die in Ihrer Edition unterstützt werden, finden Sie in der Funktionsmatrix auf der {{Company}} {{Delphi}}-Webseite oder der {{Company}} {{CBuilder}}-Webseite.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Assemblies===&lt;br /&gt;
&lt;br /&gt;
Eine Assembly ist ein logisches Package, ähnlich einer DLL-Datei, die aus Manifesten, Modulen, portierbaren Anwendungsdateien (PE) und Ressourcen (&amp;lt;font face=&amp;quot;courier new,courier,monospace&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#004A80&amp;quot;&amp;gt;.html&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/font&amp;gt;, &amp;lt;font face=&amp;quot;courier new,courier,monospace&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#004A80&amp;quot;&amp;gt;.jpeg&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/font&amp;gt;, &amp;lt;font face=&amp;quot;courier new,courier,monospace&amp;quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#004A80&amp;quot;&amp;gt;.gif&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/font&amp;gt;) besteht und für die Bereitstellung und Versionierung verwendet wird. Eine Anwendung kann über eine oder mehrere Assemblies verfügen, die wiederum von einer oder mehreren Anwendungen referenziert werden können, je nachdem, ob die Assemblies sich in einem Anwendungsverzeichnis oder in dem globalen Assembly-Cache (GAC) befinden.&lt;br /&gt;
&lt;br /&gt;
==Weitere Projekte==&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den oben beschriebenen Projekttypen enthält {{Variables|Product}} Vorlagen für Klassenbibliotheken, Steuerelementbibliotheken, Konsolenanwendungen, Berichte, Textdateien, HTML-Dateien und andere. Diese Vorlagen befinden sich in der &#039;&#039;&#039;Objektablage&#039;&#039;&#039; und können mit &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt; &#039;&#039;&#039;Datei &amp;amp;gt; Neu &amp;amp;gt; Weitere&#039;&#039;&#039;&amp;lt;/font&amp;gt; geöffnet werden.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
*[[Ein Projekt erstellen|Ein Projekt erstellen]]&lt;br /&gt;
*[[Hinzufügen eines Projekts zu einer Projektgruppe|Hinzufügen eines Projekts zu einer Projektgruppe]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Ein Projekt starten - Uberblick}}&lt;br /&gt;
[[Category:Delphi]]&lt;br /&gt;
[[Category:C++]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
[[Category:Mit RAD Studio arbeiten]]&lt;br /&gt;
&lt;br /&gt;
[[en:Starting a Project - Overview]]&lt;br /&gt;
[[fr:Démarrage d&#039;un projet]]&lt;br /&gt;
[[ja:プロジェクトの開始]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Festlegen_von_Optionen_f%C3%BCr_den_Platform_Assistant&amp;diff=208891</id>
		<title>Festlegen von Optionen für den Platform Assistant</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Festlegen_von_Optionen_f%C3%BCr_den_Platform_Assistant&amp;diff=208891"/>
		<updated>2016-06-23T08:18:31Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|PAServer: Die Platform Assistant Server-Anwendung}}&lt;br /&gt;
&lt;br /&gt;
Bei der Ausführung des &#039;&#039;&#039;[[PAServer: Die Platform Assistant Server-Anwendung|Platform Assistant]]&#039;&#039;&#039; wird standardmäßig die folgende Konfiguration verwendet:&lt;br /&gt;
&lt;br /&gt;
* Die Port-Nummer &amp;lt;code&amp;gt;64211&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Kein Passwort.&lt;br /&gt;
* Das &amp;quot;scratch&amp;quot;-Verzeichnis befindet sich im Installationsverzeichnis des &amp;quot;Platform Assistant&amp;quot;. Weitere Informationen über dieses Verzeichnis finden Sie unter [[PAServer: Die Platform Assistant Server-Anwendung#Das Scratch-Verzeichnis|Das Scratch-Verzeichnis]].&lt;br /&gt;
&lt;br /&gt;
Führen Sie einen der folgenden Schritte aus, um die Optionen für den Port, das Passwort und das &amp;quot;scratch&amp;quot;-Verzeichnis bei der Ausführung des &amp;quot;Platform Assistant&amp;quot; von der Befehlszeile aus zu konfigurieren:&lt;br /&gt;
&lt;br /&gt;
* [[#Konfigurieren des Platform Assistant mit Befehlszeilenoptionen|Führen Sie den Platform Assistant mit Befehlszeilenoptionen aus, um die verschiedenen Optionen zu konfigurieren]].&lt;br /&gt;
* [[#Konfigurieren des Platform Assistant mit einer Konfigurationsdatei|Führen Sie den Platform Assistant mit Angabe einer Konfigurationsdatei aus]].&lt;br /&gt;
&lt;br /&gt;
Der Wert für eine Option wird folgendermaßen ermittelt:&lt;br /&gt;
&lt;br /&gt;
# Wenn Sie den Wert für eine Option in der &#039;&#039;&#039;Befehlszeile&#039;&#039;&#039; angeben, verwendet der &amp;quot;Platform Assistant&amp;quot; diesen Wert.&lt;br /&gt;
# Wenn Sie den Wert für eine Option in der angegebenen &#039;&#039;&#039;Konfigurationsdatei&#039;&#039;&#039; festlegen und Sie den Wert nicht in der Befehlszeile angeben, verwendet der &amp;quot;Platform Assistant&amp;quot; den in der Konfigurationsdatei angegebenen Wert.&lt;br /&gt;
# Wenn Sie den Wert für eine Option weder in der Befehlszeile noch in der angegebenen Konfigurationsdatei festlegen, verwendet der &amp;quot;Platform Assistant&amp;quot; den &#039;&#039;&#039;Standardwert&#039;&#039;&#039; für diese Option.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Optionen sind nur wirksam, wenn der &amp;quot;Platform Assistant&amp;quot; ausgeführt wird. Wenn Sie dieselben Optionen bei der nächsten Ausführung des &amp;quot;Platform Assistant&amp;quot; verwenden möchten, müssen Sie diese Optionen erneut in der Befehlszeile angeben. Sie können in einer [[#Konfigurieren des Platform Assistant mit einer Konfigurationsdatei|Konfigurationsdatei]] eine Gruppe von Optionen für eine einzelne Befehlszeilenoption festlegen.&lt;br /&gt;
&lt;br /&gt;
Sie können auch eine [[#Erzeugen und Verwenden einer .passfile-Datei|verschlüsselte Passwortdatei]] (&amp;lt;code&amp;gt;.passfile&amp;lt;/code&amp;gt;) verwenden, damit eine andere Person eine Verbindung mit dem &amp;quot;Platform Assistant&amp;quot; herstellen kann, ohne das für den &amp;quot;Platform Assistant&amp;quot; konfigurierte Passwort zu kennen.&lt;br /&gt;
&lt;br /&gt;
==Konfigurieren des &amp;quot;Platform Assistant&amp;quot; mit Befehlszeilenoptionen==&lt;br /&gt;
&lt;br /&gt;
===Konfigurieren der Port-Nummer in der Befehlszeile===&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie bei der Ausführung des &amp;quot;Platform Assistant&amp;quot; von der Befehlszeile aus &amp;lt;code&amp;gt;-port&amp;lt;/code&amp;gt;, um den Port anzugeben, an dem der &amp;quot;Platform Assistant&amp;quot; eingehende Verbindungen empfängt:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Windows:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;&amp;amp;gt; paserver -port=&#039;&#039;nnnnn&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;OS X:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;$ ./paserver -port=&#039;&#039;nnnnn&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Port-Nummer muss eine Zahl zwischen 1 und 65.535 sein.&lt;br /&gt;
&lt;br /&gt;
===Konfigurieren des Passworts in der Befehlszeile===&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;Platform Assistant&amp;quot; kann mit einem Passwort konfiguriert werden. Wenn Sie ein Passwort angeben, muss beim Versuch eines Clients (z. B. {{Variables|Product}}) eine Verbindung mit dem &amp;quot;Platform Assistant&amp;quot; herzustellen, der Client das Passwort bereitstellen.&lt;br /&gt;
&lt;br /&gt;
Bei der Ausführung des &amp;quot;Platform Assistant&amp;quot; werden Sie zur Eingabe eines Passworts (oder keines Passworts) aufgefordert. Sie können bei der Ausführung des &amp;quot;Platform Assistant&amp;quot; in der Befehlszeile mit der Befehlszeilenoption &amp;lt;code&amp;gt;-password&amp;lt;/code&amp;gt; alternativ ein Passwort (oder kein Passwort) festlegen:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Windows:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;&amp;amp;gt; paserver -password=&#039;&#039;B2C3d4!&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;OS X:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;$ ./paserver -password=&#039;&#039;B2C3d4!&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Konfigurieren des Scratch-Verzeichnisses in der Befehlszeile===&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;Platform Assistant&#039;&#039;&#039; speichert Projektausgabedateien in einem &amp;quot;scratch&amp;quot;-Verzeichnis, das Sie festlegen und konfigurieren können. &lt;br /&gt;
&lt;br /&gt;
====Festlegen des Speicherorts des Scratch-Verzeichnisses in der Befehlszeile====&lt;br /&gt;
&lt;br /&gt;
Bei der Ausführung des &amp;quot;Platform Assistant&amp;quot; von der Befehlszeile aus, können Sie mit der Option &amp;lt;code&amp;gt;-scratchdir&amp;lt;/code&amp;gt; einen benutzerdefinierten Speicherort für das [[PAServer: Die Platform Assistant Server-Anwendung#Das Scratch-Verzeichnis|&amp;quot;scratch&amp;quot;-Verzeichnis]] angeben:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Windows:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;&amp;amp;gt; paserver -scratchdir=&#039;&#039;NewScratchDirectory&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;OS X:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;$ ./paserver -scratchdir=&#039;&#039;NewScratchDirectory&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Pfad zu dem neuen &amp;quot;scratch&amp;quot;-Verzeichnis ist standardmäßig relativ zum Installationsverzeichnis des &amp;quot;Platform Assistant&amp;quot;. Unter OS X können Sie beim Start des &amp;quot;Platform Assistant&amp;quot; ein &amp;quot;scratch&amp;quot;-Verzeichnis relativ zur Ihrem Benutzerverzeichnis durch Angabe einer Tilde und eines Schrägstrichs (&amp;lt;code&amp;gt;~/&amp;lt;/code&amp;gt;) vor dem Verzeichnispfad festlegen:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 $ ./paserver -scratchdir=~/MyTestDir&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl konfiguriert das Verzeichnis &#039;&#039;&#039;/Users/&#039;&#039;MyUsername&#039;&#039;/MyTestDir&#039;&#039;&#039; als &amp;quot;scratch&amp;quot;-Verzeichnis auf dem Mac.&lt;br /&gt;
&lt;br /&gt;
Sie können auch einen absoluten Pfad angeben, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Windows:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;&amp;amp;gt; paserver -scratchdir=&#039;&#039;C:\PAServer\scratch-dir&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;OS X:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;$ ./paserver -scratchdir=&#039;&#039;C:\PAServer\scratch-dir&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exceptions des Scratch-Verzeichnisses====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen Pfad als &amp;quot;scratch&amp;quot;-Verzeichnis angeben, der nicht vorhandenen ist, aber erstellt werden kann (z. B. der Pfad enthält Verzeichnisse, die nicht vorhanden sind), erstellt PAServer automatisch die fehlenden Verzeichnisse. Wenn das nicht möglich ist, wird der Fehler [[E0009 Datei &amp;quot;Dateipfad&amp;quot; kann nicht erstellt werden. &amp;quot;Fehlertext&amp;quot;#Das System kann die angegebene Datei nicht finden|Das System kann die angegebene Datei nicht finden]] ausgelöst.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Exceptions können im Zusammenhang mit {{Code|scratch-dir}}-Einstellungen auftreten:&lt;br /&gt;
&lt;br /&gt;
* [[E0009 Datei &amp;quot;Dateipfad&amp;quot; kann nicht erstellt werden. &amp;quot;Fehlertext&amp;quot;#Zugriff verweigert|Zugriff verweigert.]]&lt;br /&gt;
* [[E0009 Datei &amp;quot;Dateipfad&amp;quot; kann nicht erstellt werden. &amp;quot;Fehlertext&amp;quot;#Der Prozess kann nicht auf die Datei zugreifen, weil sie von einem anderen Prozess verwendet wird|Der Prozess kann nicht auf die Datei zugreifen, weil sie von einem anderen Prozess verwendet wird.]]&lt;br /&gt;
* [[E0009 Datei &amp;quot;Dateipfad&amp;quot; kann nicht erstellt werden. &amp;quot;Fehlertext&amp;quot;#Das System kann die angegebene Datei nicht finden|Das System kann die angegebene Datei nicht finden.]]&lt;br /&gt;
&lt;br /&gt;
====Zulassen von Dateioperationen außerhalb des &amp;quot;scratch-&amp;quot;Verzeichnisses in der Befehlszeile====&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Die Verwendung des Modus &amp;lt;code&amp;gt;-unrestricted&amp;lt;/code&amp;gt; mit dem &amp;quot;Platform Assistant&amp;quot; wird nicht empfohlen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig arbeitet der &amp;quot;Platform Assistant&amp;quot; im &#039;&#039;&#039;eingeschränkten&#039;&#039;&#039; Modus. Das bedeutet, der &amp;quot;Platform Assistant&amp;quot; führt Dateioperationen (Hinzufügen und Entfernen) für Ihr [[Verbindungsprofil-Manager|Verbindungsprofil]] nur innerhalb des [[PAServer: Die Platform Assistant Server-Anwendung#Das Scratch-Verzeichnis|&amp;quot;scratch&amp;quot;-Verzeichnisses]] aus. Im Standardmodus (eingeschränkt) können {{Variables|Product}} und [[Paclient.exe: Die Client-Anwendung von Platform Assistant|paclient.exe]] Dateien nur innerhalb des &amp;quot;scratch&amp;quot;-Verzeichnisses hinzufügen oder löschen. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie aber beim Starten des &amp;quot;Platform Assistant&amp;quot; die Befehlszeilenoption &amp;lt;code&amp;gt;-unrestricted&amp;lt;/code&amp;gt; angeben, lässt der &amp;quot;Platform Assistant&amp;quot; Dateioperationen außerhalb des &amp;quot;scratch&amp;quot;-Verzeichnisses zu.&lt;br /&gt;
&lt;br /&gt;
==Konfigurieren des &amp;quot;Platform Assistant&amp;quot; mit einer Konfigurationsdatei==&lt;br /&gt;
&lt;br /&gt;
Mit der Befehlszeilenoption &amp;lt;code&amp;gt;-config&amp;lt;/code&amp;gt; können Sie eine benutzerdefinierte Konfigurationsdatei für den &amp;quot;Platform Assistant&amp;quot; angeben.&lt;br /&gt;
&lt;br /&gt;
Die Standardkonfigurationsdatei des &amp;quot;Platform Assistant&amp;quot;, &amp;lt;code&amp;gt;paserver.config&amp;lt;/code&amp;gt;, befindet sich im Installationsverzeichnis des &amp;quot;Platform Assistant&amp;quot;. Diese Konfigurationsdatei kann alle vom &amp;quot;Platform Assistant&amp;quot; akzeptierten Parameter, einschließlich der [[#Konfigurieren des Platform Assistant mit Befehlszeilenoptionen|oben beschriebenen]] enthalten. Rufen Sie die [[PAServer: Die Platform Assistant Server-Anwendung#Befehlszeilenhilfe des &amp;quot;Platform Assistant&amp;quot;|Befehlszeilenhilfe des Platform Assistant]] auf, um eine vollständige Liste aller verfügbaren Optionen anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig enthält die Datei &amp;lt;code&amp;gt;paserver.config&amp;lt;/code&amp;gt; nur die beiden folgenden Befehle, aber Sie können diese Befehle bearbeiten und andere &amp;quot;Platform Assistant&amp;quot;-Befehle hinzufügen (wie z. B. &amp;lt;code&amp;gt;passfile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;unrestricted&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 port=64211&lt;br /&gt;
 scratchdir=&lt;br /&gt;
&lt;br /&gt;
Diese beiden Befehle definieren:&lt;br /&gt;
&lt;br /&gt;
* Den Kommunikations-&#039;&#039;&#039;Port&#039;&#039;&#039; (der Standardwert lautet &amp;lt;code&amp;gt;64211&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Das &#039;&#039;&#039;scratch-Verzeichnis&#039;&#039;&#039; (wird für die &amp;quot;Platform Assistant&amp;quot;-Dateioperationen verwendet).&lt;br /&gt;
** Der Name des Standard-&amp;quot;scratch&amp;quot;-Verzeichnisses lautet &amp;lt;code&amp;gt;scratch-dir&amp;lt;/code&amp;gt;. Es befindet sich im Installationsverzeichnis des &amp;quot;Platform Assistant&amp;quot;. Für jedes Verbindungsprofil wird ein separater Ordner angelegt. Beispielsweise ist das Standard-&amp;quot;scratch&amp;quot;-Verzeichnis für das &#039;&#039;&#039;MyOSX&#039;&#039;&#039;-Verbindungsprofil: &amp;lt;code&amp;gt;Benutzername-MyOSX&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Sie können ein anderes &amp;lt;code&amp;gt;scratch-dir&amp;lt;/code&amp;gt;, entweder als absoluten oder relativen Pfad (relativ zum &amp;quot;Platform Assistant&amp;quot;-Installationsverzeichnis) angeben. Beispiele finden Sie unter [[#Festlegen des Speicherorts des Scratch-Verzeichnisses in der Befehlszeile|Festlegen des Speicherorts des Scratch-Verzeichnisses in der Befehlszeile]].&lt;br /&gt;
&lt;br /&gt;
==Erzeugen und Verwenden einer .passfile-Datei==&lt;br /&gt;
&lt;br /&gt;
Anstatt der Bereitstellung eines Passworts für die Verbindung zu dem ausgeführten &amp;quot;Platform Assistant&amp;quot; kann der &amp;quot;Platform Assistant&amp;quot; eine verschlüsselte Passwortdatei (&amp;lt;code&amp;gt;.passfile&amp;lt;/code&amp;gt;) generieren, die Sie an Ihre &amp;quot;Platform Assistant&amp;quot;-Clients (z. B. Instanzen von {{Variables|Product}}) für die Verbindung zum &amp;quot;Platform Assistant&amp;quot; weitergeben können. Wenn Sie paserver mit der Option &amp;lt;code&amp;gt;.passfile&amp;lt;/code&amp;gt; starten, benötigt paserver ein Verbindungsprofil, in dem das in der &amp;lt;code&amp;gt;.passfile&amp;lt;/code&amp;gt;-Datei verschlüsselte Passwort enthalten ist.&lt;br /&gt;
&lt;br /&gt;
===Erzeugen einer verschlüsselten Passwortdatei===&lt;br /&gt;
&lt;br /&gt;
Führen Sie den &amp;quot;Platform Assistant&amp;quot; unter [[Ausführen des Platform Assistant auf dem Mac|OS X]] oder [[Ausführen des Platform Assistant unter Windows|Windows]] aus, und geben Sie bei der Eingabeaufforderung den Befehl &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt; ein, um eine verschlüsselte Passwortdatei zu erzeugen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;amp;gt; g&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;Platform Assistant&amp;quot; generiert die verschlüsselte Passwortdatei und zeigt den Pfad zu dieser Datei an.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die verschlüsselte Passwortdatei in einer ausgeführten Instanz des &amp;quot;Platform Assistant&amp;quot; generieren, startet diese Instanz automatisch mit der verschlüsselten Passwortdatei. Beim nächsten Start des &amp;quot;Platform Assistant&amp;quot; müssen Sie aber [[#Starten des &amp;quot;Platform Assistant&amp;quot; mit einer verschlüsselten Passwortdatei|die verschlüsselte Passwortdatei in der Befehlszeile angeben]].&lt;br /&gt;
&lt;br /&gt;
===Starten des &amp;quot;Platform Assistant&amp;quot; mit einer verschlüsselten Passwortdatei===&lt;br /&gt;
&lt;br /&gt;
Um den &amp;quot;Platform Assistant&amp;quot; mit einer bestimmten verschlüsselten Passwortdatei zu starten, müssen Sie den &amp;quot;Platform Assistant&amp;quot; in der Befehlszeile mit der Option &amp;lt;code&amp;gt;-passfile&amp;lt;/code&amp;gt; und dem Pfad zu der verschlüsselten Passwortdatei als Wert starten:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Windows:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;&amp;amp;gt; paserver -passfile=&#039;&#039;Dateiname&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;OS X:&#039;&#039;&#039;&lt;br /&gt;
*:&amp;lt;code&amp;gt;$ ./paserver -passfile=&#039;&#039;Dateiname&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diese Instanz des &amp;quot;Platform Assistant&amp;quot; von {{Variables|Product}} aus zu verbinden, müssen Sie [[#Festlegen einer verschlüsselten Passwortdatei in einem Verbindungsprofil|die verschlüsselte Passwortdatei bei der Konfiguration des entsprechenden Verbindungsprofils angeben]].&lt;br /&gt;
&lt;br /&gt;
===Festlegen einer verschlüsselten Passwortdatei in einem Verbindungsprofil===&lt;br /&gt;
&lt;br /&gt;
Um eine Verbindung zu einem ausgeführten &amp;quot;Platform Assistant&amp;quot;, der eine verschlüsselte Passwortdatei verwendet, herzustellen, müssen Sie Ihr Verbindungsprofil für die Verwendung der verschlüsselten Passwortdatei konfigurieren:&lt;br /&gt;
&lt;br /&gt;
# Kopieren Sie die &amp;lt;code&amp;gt;.passfile&amp;lt;/code&amp;gt;-Datei vom Mac auf Ihren PC.&lt;br /&gt;
# Wählen Sie in {{Variables|Product}} &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Tools &amp;amp;gt; Optionen &amp;amp;gt; Umgebungsoptionen &amp;amp;gt; [[Verbindungsprofil-Manager|Verbindungsprofil-Manager]]&#039;&#039;&#039;&amp;lt;/font&amp;gt; aus.&lt;br /&gt;
# Wählen Sie im Dialogfeld [[Verbindungsprofil-Manager|Verbindungsprofil-Manager]] das Verbindungsprofil aus, das Sie mit der verschlüsselten Passwortdatei verwenden möchten.&lt;br /&gt;
# Klicken Sie im Feld &#039;&#039;&#039;Passwort&#039;&#039;&#039; auf die Ellipse &#039;&#039;&#039;[...]&#039;&#039;&#039;.&lt;br /&gt;
# Navigieren Sie zu der vom Mac kopierten &amp;lt;code&amp;gt;.passfile&amp;lt;/code&amp;gt;-Datei, und klicken Sie auf &#039;&#039;&#039;OK&#039;&#039;&#039;.&lt;br /&gt;
# Klicken Sie im Dialogfeld [[Verbindungsprofil-Manager|Verbindungsprofil-Manager]] auf &#039;&#039;&#039;OK&#039;&#039;&#039;, um die Änderungen zu speichern.&lt;br /&gt;
&lt;br /&gt;
Jetzt können Sie mit dem bearbeiteten Verbindungsprofil eine Verbindung mit dem &amp;quot;Platform Assistant&amp;quot; herstellen.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die obigen Schritte beschreiben die Bearbeitung eines vorhandenen Profils. Sie können auch [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|ein neues Profil erstellen]] und dessen &#039;&#039;&#039;Passwort&#039;&#039;&#039;-Feld wie oben beschrieben konfigurieren.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Ausführen des Platform Assistant auf dem Mac|Ausführen des Platform Assistant auf dem Mac]]&lt;br /&gt;
* [[Ausführen des Platform Assistant unter Windows|Ausführen des Platform Assistant unter Windows]]&lt;br /&gt;
&lt;br /&gt;
* [[Platform Assistant-Serverfehler - Index|Platform Assistant-Serverfehler - Index]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Festlegen von Optionen fur den Platform Assistant}}&lt;br /&gt;
[[Category:Geräteübergreifend]]&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
&lt;br /&gt;
[[en:Setting Options for the Platform Assistant]]&lt;br /&gt;
[[fr:Définition des options de Platform Assistant]]&lt;br /&gt;
[[ja:プラットフォーム アシスタントのオプションの設定]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verbindungsprofil_ausw%C3%A4hlen&amp;diff=208890</id>
		<title>Verbindungsprofil auswählen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Verbindungsprofil_ausw%C3%A4hlen&amp;diff=208890"/>
		<updated>2016-06-23T08:17:42Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Tools-Optionen (Dialogfeld)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Tools &amp;amp;gt; Optionen &amp;amp;gt; Umgebungsoptionen &amp;amp;gt; [[SDK-Manager|SDK-Manager]]&#039;&#039;&#039;&amp;lt;/font&amp;gt; | wählen Sie ein SDK für OS X, iOS-Gerät - 32 Bit, iOS-Gerät - 64 Bit oder den iOS-Simulator aus | &#039;&#039;&#039;Lokalen Dateizwischenspeicher aktualisieren&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Start &amp;amp;gt; [[Mit Prozess verbinden|Mit Prozess verbinden]]&#039;&#039;&#039;&amp;lt;/font&amp;gt; | &#039;&#039;&#039;Externer Rechner&#039;&#039;&#039; | &#039;&#039;&#039;[...]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Start &amp;amp;gt; Prozess verbinden &amp;amp;gt; [[Prozess laden: Extern|Extern]]&#039;&#039;&#039;&amp;lt;/font&amp;gt; | &#039;&#039;&#039;Externer Host&#039;&#039;&#039; | &#039;&#039;&#039;[...]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dieses Dialogfeld enthält ein Kombinationsfeld mit den Namen aller vorhandenen [[Verbindungsprofil-Manager|Verbindungsprofile]] für eine bestimmte Plattform. Der Name der Zielplattform wird im Titel des Dialogfeldes angezeigt, z.B. &#039;&#039;&#039;Verbindungsprofil für die Plattform &amp;quot;32-Bit-Windows&amp;quot; auswählen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie können in dem Kombinationsfeld entweder ein vorhandenes Verbindungsprofil auswählen oder &#039;&#039;&#039;Neue hinzufügen&#039;&#039;&#039; wählen, um den Experten [[Verbindungsprofil erstellen|Verbindungsprofil erstellen]] zu öffnen und ein neues Verbindungsprofil zu erstellen. Klicken Sie auf &#039;&#039;&#039;OK&#039;&#039;&#039;, um das Dialogfeld zu schließen und das ausgewählte Profil zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Variables|Product}} zeigt das Dialogfeld &#039;&#039;&#039;Verbindungsprofil auswählen&#039;&#039;&#039; auch an, wenn Sie versuchen, eine Aktion durchzuführen, für die ein Verbindungsprofil erforderlich ist, wie z.B. Ausführen einer OS X-Anwendung, und der aktuellen Zielplattform kein Verbindungsprofil zugewiesen ist.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC]]&lt;br /&gt;
* [[Verbindungsprofil-Manager|Verbindungsprofil-Manager]] (Seite in Tools-Optionen)&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Verbindungsprofil auswahlen}}&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Select Connection Profile]]&lt;br /&gt;
[[fr:Sélectionner un profil de connexion]]&lt;br /&gt;
[[ja:［接続プロファイルの選択］]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Sichern_von_Indy-Netzwerkverbindungen&amp;diff=208889</id>
		<title>Sichern von Indy-Netzwerkverbindungen</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Sichern_von_Indy-Netzwerkverbindungen&amp;diff=208889"/>
		<updated>2016-06-23T08:17:07Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Sichern der Netzwerkverbindungen von geräteübergreifenden Apps}}&lt;br /&gt;
&lt;br /&gt;
In diesem Thema wird gezeigt, wie Sie Ihren [[Indy|Indy]]-Netzwerkverbindungen die Unterstützung für TLS/SSL-Sicherheit hinzufügen.&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
&lt;br /&gt;
Laden Sie das neueste [[OpenSSL|OpenSSL]]-Archiv für Ihre Entwicklungsplattform von [http://indy.fulgan.com/SSL/ http://indy.fulgan.com/SSL/] herunter, um TLS/SSL mit Indy auf Ihrem Entwicklungscomputer zu verwenden:&lt;br /&gt;
&lt;br /&gt;
* 32-Bit-Windows: {{Path|openssl-{{Placeholder|version}}-i386-win32.zip}}.&lt;br /&gt;
* 64-Bit-Windows: {{Path|openssl-{{Placeholder|version}}-x64_86-win64.zip}}.&lt;br /&gt;
&lt;br /&gt;
Extrahieren Sie den Inhalt des heruntergeladenen Archivs, und suchen Sie die folgenden Bibliotheksdateien:&lt;br /&gt;
&lt;br /&gt;
* {{Path|libeay32.dll}}&lt;br /&gt;
* {{Path|ssleay32.dll}}&lt;br /&gt;
&lt;br /&gt;
Kopieren Sie diese Dateien in den Ordner, in dem {{Product}} die ausführbare Datei Ihrer Anwendung erstellt. Zum Beispiel in {{Path|{{Placeholder|Projektordner}}/Win32/Debug}} für 32-Bit-Windows.&lt;br /&gt;
&lt;br /&gt;
Bevor Sie Ihre Anwendung auf einem Remote-Computer ausführen oder Ihre Anwendung an andere Benutzer verteilen können, müssen Sie für &#039;&#039;&#039;Windows&#039;&#039;&#039; die Bereitstellungskonfiguration Ihrer Anwendung ändern, um diese Bibliotheksdateien in den Pfad der ausführbaren Datei Ihrer Anwendung aufzunehmen:&lt;br /&gt;
&lt;br /&gt;
# Wählen Sie {{Menu|Projekt &amp;amp;gt; Bereitstellung}}.&lt;br /&gt;
# Öffnen Sie das Kombinationsfeld oben im &#039;&#039;&#039;[[Bereitstellungs-Manager|Bereitstellungs-Manager]]&#039;&#039;&#039;, und wählen Sie unter &#039;&#039;&#039;Alle Konfigurationen&#039;&#039;&#039; die Zielplattform (32-Bit-Windows oder 64-Bit-Windows) aus.&lt;br /&gt;
# Klicken Sie auf [[File:DMgrAddFiles.png|Dateien hinzufügen]].&lt;br /&gt;
# Wählen Sie die erforderlichen, zuvor heruntergeladenen Bibliotheksdateien aus, und klicken Sie auf &#039;&#039;&#039;OK&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;OS X&#039;&#039;&#039; und &#039;&#039;&#039;Android&#039;&#039;&#039; muss Ihre Anwendung keine Voraussetzungen für die TLS/SSL-Unterstützung erfüllen. Die erforderliche [[OpenSSL|OpenSSL]]-Bibliothek ist standardmäßig in diesen Betriebssystemen verfügbar.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;iOS&#039;&#039;&#039; finden Sie unter [[Erstellen von iOS-Apps#OpenSSL-Unterstützung|Erstellen von iOS-Apps, OpenSSL-Unterstützung]] Informationen zum Konfigurieren Ihrer Anwendung für die Unterstützung der TLS/SSL-Verschlüsselung.&lt;br /&gt;
&lt;br /&gt;
Für &#039;&#039;&#039;weitere Plattformen&#039;&#039;&#039; siehe [[OpenSSL|OpenSSL-Bibliotheken]].&lt;br /&gt;
&lt;br /&gt;
==Implementieren der TLS/SSL-Unterstützung in Ihrem Indy-Client==&lt;br /&gt;
&lt;br /&gt;
Von [http://www.indyproject.org/docsite/html/frames.html?frmname=topic&amp;amp;frmfile=TIdTCPConnection.html TIdTCPConnection] abgeleitete Klassen, wie [http://www.indyproject.org/docsite/html/frames.html?frmname=topic&amp;amp;frmfile=TIdHTTP.html TIdHTTP], stellen die Eigenschaft [http://www.indyproject.org/docsite/html/frames.html?frmname=topic&amp;amp;frmfile=TIdTCPConnection_IOHandler.html IOHandler] bereit.&lt;br /&gt;
&lt;br /&gt;
Zur Sicherung einer Indy-Netzwerkverbindung ziehen Sie eine [http://www.indyproject.org/docsite/html/frames.html?frmname=topic&amp;amp;frmfile=TIdSSLIOHandlerSocketOpenSSL.html TIdSSLIOHandlerSocketOpenSSL]-Komponente in den &#039;&#039;&#039;[[Formular-Designer|Formular-Designer]]&#039;&#039;&#039; und doppelklicken im &#039;&#039;&#039;[[Objektinspektor|Objektinspektor]]&#039;&#039;&#039; auf die Eigenschaft {{Code|IOHandler}} der Indy-Client-Komponente, damit Ihre neue {{Code|TIdSSLIOHandlerSocketOpenSSL}}-Komponente als Eingabe-/Ausgabe-Behandlungsroutine ausgewählt wird.&lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie die Netzwerkverbindungen des Indy-Clients auch über den Code sichern:&lt;br /&gt;
&amp;lt;l s=&amp;quot;delphi&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{{Delphi}}:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Client.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;delphi&amp;quot; /&amp;gt;&amp;lt;l s=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;C++:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Client-&amp;gt;IOHandler = new TIdSSLIOHandlerSocketOpenSSL();&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;l e=&amp;quot;cpp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie können jetzt mit Ihrem Client sichere Anforderungen an einen Server, der die TLS/SSL-Verschlüsselung unterstützt, über das HTTPS-Protokoll senden. Um beispielsweise &amp;quot;&amp;lt;nowiki&amp;gt;http://www.example.com&amp;lt;/nowiki&amp;gt;&amp;quot; mit der TLS/SSL-Verschlüsselung abzurufen, erhalten Sie mit Ihrem Client &amp;quot;http&#039;&#039;&#039;s&#039;&#039;&#039;://www.example.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Indy|Indy]]&lt;br /&gt;
* [http://www.indyproject.org/docsite/html/ Dokumentation der Indy-Referenz]&lt;br /&gt;
&lt;br /&gt;
[[Category:XE7]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Securing Indy Network Connections]]&lt;br /&gt;
[[fr:Sécurisation des connexions réseau Indy]]&lt;br /&gt;
[[ja:Indy ネットワーク接続のセキュリティ保護]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=SDK-Manager&amp;diff=208888</id>
		<title>SDK-Manager</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=SDK-Manager&amp;diff=208888"/>
		<updated>2016-06-23T08:16:58Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|Umgebungsoptionen}}&lt;br /&gt;
&lt;br /&gt;
{{Menu|Tools &amp;amp;gt; Optionen &amp;amp;gt; Umgebungsoptionen &amp;amp;gt; SDK-Manager}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Projektverwaltung|Projektverwaltung]]&#039;&#039;&#039; | mit der rechten Maustaste auf eine Plattform in &#039;&#039;&#039;[[Projektverwaltung#Kontextmenü für Zielplattformen|Zielplattformen]]&#039;&#039;&#039; klicken | &#039;&#039;&#039;SDK bearbeiten&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zeigt die vorhandenen SDKs an und ermöglicht das Hinzufügen und Verwalten von SDKs für [[Hinzufügen von SDKs für OS X oder iOSOS X, iOS]] und [[Hinzufügen von Android-SDKs|Android]].&lt;br /&gt;
&lt;br /&gt;
==Funktionen von SDKs==&lt;br /&gt;
&lt;br /&gt;
Ein SDK (Software Development Kit) stellt die Software bereit, die zum Erzeugen von Anwendungen für eine Zielplattform benötigt wird. Die SDK-Informationen, anhand derer &#039;&#039;&#039;{{Variables|Product}}&#039;&#039;&#039; die erforderliche Software auf Ihrem System sucht, werden auf der Seite &#039;&#039;&#039;SDK-Manager&#039;&#039;&#039; bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
OS X- und iOS-SDKs enthalten:&lt;br /&gt;
&lt;br /&gt;
* Eine Liste mit absoluten Pfaden und Ordnern auf dem Mac, die zum Erzeugen von Anwendungen für die SDK-Zielplattform erforderlich sind.&lt;br /&gt;
* Eine Kopie derjenigen Dateien, die von der Zielplattform oder der Zwischenplattform mithilfe eines [[Verbindungsprofil-Manager|Verbindungsprofils]] übernommen werden können.&lt;br /&gt;
&lt;br /&gt;
Android-SDKs enthalten die Pfade zu der erforderlichen Software auf Ihrem System.&lt;br /&gt;
&lt;br /&gt;
Auf der Seite &#039;&#039;&#039;SDK-Manager&#039;&#039;&#039; wird für jede Zielplattform, der ein SDK zugeordnet ist, ein SDK als Standard-SDK in Fettschrift angezeigt. Windows-Plattformen haben kein Standard-SDK.&lt;br /&gt;
&lt;br /&gt;
==Plattformen und Anwendungstypen, die ein SDK erfordern==&lt;br /&gt;
&lt;br /&gt;
SDKs sind für die folgenden Plattformen und Anwendungstypen &#039;&#039;&#039;erforderlich&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Geräteübergreifende C++-Anwendungen für die &#039;&#039;&#039;OS X&#039;&#039;&#039;-Plattform.&lt;br /&gt;
* Geräteübergreifende Anwendungen für die Plattform &#039;&#039;&#039;iOS-Gerät - 32 Bit&#039;&#039;&#039;.&lt;br /&gt;
* Geräteübergreifende Anwendungen für die Plattform &#039;&#039;&#039;iOS-Gerät - 64 Bit&#039;&#039;&#039;.&lt;br /&gt;
* Geräteübergreifende Anwendungen für die &#039;&#039;&#039;Android&#039;&#039;&#039;-Plattform.&lt;br /&gt;
*:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Wenn Ihr Android SDK und NDK vom Installationsprogramm von {{Variables|Product}} installiert wurden, dann sind dem [[SDK-Manager|SDK-Manager]] die Installationsverzeichnisse bekannt. In diesem Fall sollten die SDK-Felder automatisch ausgefüllt worden sein, und Sie müssen kein SDK für Ihre Android-Apps hinzufügen.&lt;br /&gt;
&lt;br /&gt;
==Dateinamen und Dateierweiterung für SDKs==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SDK-Namen&#039;&#039;&#039; unterliegen – außer dass sie gültige Dateinamen gemäß [[lib_de:System.IOUtils.TPath.HasValidFileNameChars|System.IOUtils.TPath.HasValidFileNameChars]] sein müssen – kaum Beschränkungen. Doppelte SDK-Namen führen zu einem Fehler (beim Hinzufügen und Importieren).&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;Erweiterung von SDK-Dateien&#039;&#039;&#039; lautet &amp;lt;code&amp;gt;.sdk&amp;lt;/code&amp;gt;. Sie wird automatisch beim Speichern des SDK als Datei hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
Beispiele für SDK-Namen:&lt;br /&gt;
&lt;br /&gt;
* MyFirstOSXSdk&lt;br /&gt;
* Gr8daZ!&lt;br /&gt;
&lt;br /&gt;
Jedes definierte SDK wird als &amp;lt;code&amp;gt;.sdk&amp;lt;/code&amp;gt;-Datei in Ihrem Ordner &#039;&#039;&#039;Anwendungsdaten&#039;&#039;&#039; (der von [[lib_de:DesignIntf.IDesigner170.GetAppDataDirectory|DesignIntf.IDesigner170.GetAppDataDirectory]] zurückgegeben wird) gespeichert, wie z. B. unter Windows 7 in folgendem Ordner:&lt;br /&gt;
&lt;br /&gt;
{{Path|{{AppDataPath}}}}&lt;br /&gt;
&lt;br /&gt;
Die Datei enthält die [[#Funktionen von SDKs|Informationen über das SDK]], wie die Pfade zu der Software, die zum Erzeugen von Anwendungen für die SDK-Zielplattform benötigt wird.&lt;br /&gt;
&lt;br /&gt;
Die eigentlichen SDK-Dateien (der &#039;&#039;&#039;lokale SDK-Dateizwischenspeicher&#039;&#039;&#039;) werden standardmäßig im Verzeichnis {{Path|{{UserDocumentsPath}}\SDKs}} gespeichert.&lt;br /&gt;
&lt;br /&gt;
Zum Ändern des Speicherorts des lokalen SDK-Dateizwischenspeichers eines SDKs, befolgen Sie die nachstehenden Anweisungen:&lt;br /&gt;
&lt;br /&gt;
* Für Android legen Sie im &#039;&#039;&#039;SDK-Manager&#039;&#039;&#039; die Pfade fest, damit diese zum neuen Speicherort führen.&lt;br /&gt;
* Für OS X oder iOS lesen Sie &#039;&#039;&#039;[[Ändern des lokalen Stammverzeichnisses von SDKs für OS X, iOS-Geräte oder den iOS-Simulator|Ändern des lokalen Stammverzeichnisses von SDKs für OS X, iOS-Geräte oder den iOS-Simulator]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bereich &amp;quot;SDK&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
SDK-Versionen&lt;br /&gt;
|&lt;br /&gt;
Listet die definierten SDKs zusammen mit den zugewiesenen Plattformen auf. Das Standard-SDK für eine Plattform wird in &#039;&#039;&#039;Fettschrift&#039;&#039;&#039; angezeigt.&lt;br /&gt;
* Führen Sie einen der folgenden Schritte aus, um das Standard-SDK für eine Plattform festzulegen:&lt;br /&gt;
** Klicken Sie mit der rechten Maustaste auf den SDK-Eintrag, und wählen Sie &#039;&#039;&#039;Als Standard&#039;&#039;&#039;.&lt;br /&gt;
** Doppelklicken Sie auf den SDK-Eintrag.&lt;br /&gt;
* Um ein SDK zu bearbeiten, wählen Sie es in der Liste &#039;&#039;&#039;SDK-Versionen&#039;&#039;&#039; aus, nehmen Änderungen an den &#039;&#039;&#039;SDK-Eigenschaften&#039;&#039;&#039; vor und klicken dann auf &#039;&#039;&#039;OK&#039;&#039;&#039; (wenn Sie nicht auf &#039;&#039;&#039;OK&#039;&#039;&#039; klicken, werden die Änderungen nicht gespeichert).&lt;br /&gt;
&lt;br /&gt;
Durch Klicken auf ein SDK werden die Schaltflächen zur Verwaltung von SDKs (&#039;&#039;&#039;Löschen&#039;&#039;&#039; und &#039;&#039;&#039;Exportieren&#039;&#039;&#039;) aktiviert.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
SDK-Eigenschaften&lt;br /&gt;
|&lt;br /&gt;
Zeigt die aktuellen Einstellungen des ausgewählten SDK an.&lt;br /&gt;
&lt;br /&gt;
Der Inhalt dieses Frames ist von der SDK-Plattform abhängig: [[#Eigenschaften für OS X- und iOS-SDKs|&#039;&#039;&#039;OS X&#039;&#039;&#039;, &#039;&#039;&#039;iOS&#039;&#039;&#039;]] oder &#039;&#039;&#039;[[#Eigenschaften von Android-SDK, -NDK und Java|Android]]&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Eigenschaften für OS X- und iOS-SDKs===&lt;br /&gt;
&lt;br /&gt;
Diese Felder werden im Frame &#039;&#039;&#039;SDK-Eigenschaften&#039;&#039;&#039; angezeigt, wenn Sie ein &#039;&#039;&#039;OS X&#039;&#039;&#039;- oder &#039;&#039;&#039;iOS&#039;&#039;&#039;-SDK auswählen.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Lokales Stammverzeichnis&lt;br /&gt;
|&lt;br /&gt;
Zeigt das Verzeichnis auf dem lokalen Computer an, in dem die Dateien von dem Remote-Computer zwischengespeichert werden. Der Vorgabewert lautet:&lt;br /&gt;
&lt;br /&gt;
 $(BDSPLATFORMSDKSDIR)\&amp;amp;lt;sdk-Name&amp;amp;gt;&lt;br /&gt;
Der Wert für die Variable $(BDSPLATFORMSDKSDIR) wird auf der Seite &amp;lt;font color=&amp;quot;#598527&amp;quot;&amp;gt;&#039;&#039;&#039;Tools &amp;amp;gt; Optionen &amp;amp;gt; Umgebungsoptionen &amp;amp;gt; [[Umgebungsvariablen|Umgebungsvariablen]]&#039;&#039;&#039;&amp;lt;/font&amp;gt; festgelegt.&lt;br /&gt;
&lt;br /&gt;
In C++ wird dieses Verzeichnis mit der Option &amp;lt;code&amp;gt;--sysroot&amp;lt;/code&amp;gt; an den Compiler übergeben. Den Remote-Pfadangaben wird implizit das lokale Stammverzeichnis vorangestellt.&lt;br /&gt;
&lt;br /&gt;
Sie können die aktuellen Werte durch Klicken auf [[File:SavePaths.png]] &#039;&#039;&#039;Pfade als Vorgabe für die ausgewählte Plattform speichern&#039;&#039;&#039; im Bereich &#039;&#039;&#039;Remote-Pfade&#039;&#039;&#039; als neue Standardwerte festlegen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Remote-Pfade&lt;br /&gt;
|&lt;br /&gt;
Zeigt die Liste der Pfade auf dem Remote-Computer an, die auf den lokalen Computer übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Ein Remote-Pfad besteht aus:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnis&#039;&#039;&#039;. Gibt das Verzeichnis auf der Zielplattform oder der Zwischenplattform an.&lt;br /&gt;
* &#039;&#039;&#039;Dateifilter&#039;&#039;&#039;. Repräsentiert entweder den Dateinamen (für eine einzelne Datei) oder den Platzhalter * (Sternchen), was allen Dateien in dem angegebenen Verzeichnis entspricht. Beispiel: OpenGL.&lt;br /&gt;
* &#039;&#039;&#039;Unterverzeichnisse&#039;&#039;&#039;. Gibt an, ob Unterverzeichnisse einbezogen werden sollen.&lt;br /&gt;
&lt;br /&gt;
Es gibt vier Kategorien von Remote-Pfaden. Wie die Pfade/Einträge an den C++-Compiler und -Linker übergeben werden, wird durch die jeweilige Kategorie festgelegt:&lt;br /&gt;
* &#039;&#039;&#039;Include-Pfade&#039;&#039;&#039; werden an den Compiler als Teil des &amp;lt;code&amp;gt;--sysinc&amp;lt;/code&amp;gt;-Pfads (der Include-Dateisuchpfad des Systems mit dem vorangestellten Stammverzeichnis) übergeben.&lt;br /&gt;
* &#039;&#039;&#039;Bibliothekspfade&#039;&#039;&#039; werden an den Linker als Teil des &amp;lt;code&amp;gt;--syslib&amp;lt;/code&amp;gt;-Pfads (der Bibliothekssuchpfad des Systems mit dem vorangestellten Stammverzeichnis) übergeben.&lt;br /&gt;
* &#039;&#039;&#039;Frameworks&#039;&#039;&#039; werden an den Compiler (mit der Option &amp;lt;code&amp;gt;--framework&amp;lt;/code&amp;gt;) und an den Linker (mit der Option &amp;lt;code&amp;gt;--Ff&amp;lt;/code&amp;gt;) übergeben.&lt;br /&gt;
* &#039;&#039;&#039;Andere Pfade&#039;&#039;&#039; werden nicht standardmäßig an den Compiler/Linker übergeben, aber auf den lokalen Computer übernommen.&lt;br /&gt;
&lt;br /&gt;
Alle angegebenen Elemente werden auf den lokalen Computer übernommen. Siehe [[Paclient.exe: Die Client-Anwendung von Platform Assistant|PAClient]].&lt;br /&gt;
&lt;br /&gt;
Alle Pfade müssen das für den Ziel-Host-Computer geeignete Format aufweisen. Verwenden Sie beispielsweise Schrägstriche (/) als Trennzeichen für Mac-Hosts. Bestimmte Zeichen, wie z. B. die Tilde (~), werden für Mac erkannt.&lt;br /&gt;
&lt;br /&gt;
Folgende Schaltflächen sind im Feld &#039;&#039;&#039;Remote-Pfade&#039;&#039;&#039; vorhanden:&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Schaltfläche&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[File:New.png]] Neuen Pfadeintrag hinzufügen&lt;br /&gt;
|&lt;br /&gt;
Zeigt das Dialogfeld &#039;&#039;&#039;[[Remote-Pfadeintrag hinzufügen oder Remote-Pfadeintrag bearbeiten|Remote-Pfadeintrag hinzufügen]]&#039;&#039;&#039; an. Sie können ein neues SDK auch durch Drücken der Taste &#039;&#039;&#039;EINFG&#039;&#039;&#039; in der Liste &#039;&#039;&#039;Remote-Pfade&#039;&#039;&#039; einfügen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[File:EditPathItem.png]] Ausgewählten Pfadeintrag bearbeiten&lt;br /&gt;
|&lt;br /&gt;
Zeigt das Dialogfeld &#039;&#039;&#039;[[Remote-Pfadeintrag hinzufügen oder Remote-Pfadeintrag bearbeiten|Remote-Pfadeintrag bearbeiten]]&#039;&#039;&#039; an.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[File:DeletePathItem.png]] Ausgewählten Pfadeintrag löschen&lt;br /&gt;
|&lt;br /&gt;
Zeigt ein Bestätigungsdialogfeld an und löscht nach einer Bestätigung den ausgewählten Pfadeintrag. Sie können einen Pfad auch durch Drücken der Taste &#039;&#039;&#039;ENTF&#039;&#039;&#039; bei ausgewähltem Pfadeintrag in der Liste &#039;&#039;&#039;Remote-Pfade&#039;&#039;&#039; löschen.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[File:ResetPaths.png]] Pfade auf Vorgabe für die ausgewählte Plattform zurücksetzen&lt;br /&gt;
|&lt;br /&gt;
Zeigt ein Bestätigungsdialogfeld an und überschreibt nach der Bestätigung alle Pfadeinträge mit den Standardwerten des SDK für die ausgewählte Plattform. Bezieht das &#039;&#039;&#039;Lokale Stammverzeichnis&#039;&#039;&#039; nur mit ein, wenn es leer ist.&lt;br /&gt;
&lt;br /&gt;
Die wiederhergestellten Werte werden folgendermaßen ermittelt:&lt;br /&gt;
* Wenn Sie die Vorgaben nicht zurückgesetzt haben, sind die Werte die Standardwerte von {{Variables|Product}}.&lt;br /&gt;
* Nach dem Zurücksetzen auf die Standardwerte werden die neuen Werte zu den Standardwerten und werden in der Datei {{Path|&amp;amp;lt;Plattform&amp;amp;gt;.defaultsdkpaths}} in Ihrem {{Path|{{AppDataPath}}}}-Verzeichnis gespeichert. Daher werden durch Klicken auf [[File:ResetPaths.png]] die neuen Standardwerte wiederhergestellt.&lt;br /&gt;
* Löschen Sie zum Wiederherstellen der ursprünglichen Standardwerte die Datei {{Path|.defaultsdkpaths}} für die Zielplattform. Die ursprünglichen Standardpfade erscheinen jetzt in Ihren neuen SDKs.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[File:SavePaths.png]] Pfade als Standard für die ausgewählte Plattform speichern&lt;br /&gt;
|&lt;br /&gt;
Überschreibt die Standardpfadangaben mit den angegebenen SDK-Werten für Pfadeinträge für die ausgewählte Plattform. Nach dem Speichern der Pfade als Standardwerte werden die hier eingegebenen neuen Werte wiederhergestellt, wenn Sie auf [[File:ResetPaths.png]] (&#039;&#039;&#039;Pfade auf Vorgabe zurücksetzen&#039;&#039;&#039;) klicken.&lt;br /&gt;
&lt;br /&gt;
Beim Speichern von Standardpfaden wird für die Vorgaben eine Datei erstellt. Der Dateiname ist der Plattformname mit der Erweiterung &amp;lt;code&amp;gt;.defaultsdkpaths&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Macintosh OS X&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;OSX32.defaultsdkpaths&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Win32&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;Win32.defaultsdkpaths&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Win64&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;Win64.defaultsdkpaths&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um Ihre Einstellungen zu verwerfen und die ursprünglichen Standardwerte wiederherzustellen, löschen Sie zuerst die Datei &amp;lt;code&amp;gt;.defaultsdkpaths&amp;lt;/code&amp;gt; aus dem Verzeichnis, zu dem &amp;lt;code&amp;gt;%APPDATA%&amp;lt;/code&amp;gt; erweitert wird ({{Path|{{AppDataPath}}}}) und klicken dann auf [[File:ResetPaths.png]] (&#039;&#039;&#039;Pfade auf Vorgabe zurücksetzen&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[File:UpArrow.png]] Schaltfläche &amp;quot;Nach oben&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Verschiebt den ausgewählten Pfadeintrag in der Pfadgruppe nach oben. Sie können den Eintrag auch durch Drücken der Tastenkombination &amp;lt;code&amp;gt;STRG+AUF&amp;lt;/code&amp;gt; in der Liste &#039;&#039;&#039;Remote-Pfade&#039;&#039;&#039; nach oben verschieben.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[File:DownArrow.png]] Schaltfläche &amp;quot;Nach unten&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Verschiebt den ausgewählten Pfadeintrag in der Pfadgruppe nach unten. Sie können den Eintrag auch durch Drücken der Tastenkombination &amp;lt;code&amp;gt;STRG+AB&amp;lt;/code&amp;gt; in der Liste &#039;&#039;&#039;Remote-Pfade&#039;&#039;&#039; nach unten verschieben.&lt;br /&gt;
|}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Lokalen Dateizwischenspeicher aktualisieren&lt;br /&gt;
|&lt;br /&gt;
[[Verbindungsprofil auswählen|Fordert Sie zur Angabe eines Verbindungsprofils]] auf und übernimmt alle in dem aktuellen Verbindungsprofil angegebenen Dateien vom lokalen (Entwicklungs-)Computer auf den Remote-Zielcomputer. Nur Dateien mit unterschiedlichen Größen oder Zeitstempeln als diejenigen, die sich bereits im lokalen SDK-Dateizwischenspeicher befinden, werden übernommen. Ein Fortschrittsdialogfeld wird während der Übernahme angezeigt, in dem Sie den Vorgang abbrechen können. Zudem wird vor dem Überschreiben von lokalen Dateien eine Bestätigungsmeldung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Sie sollten auf diese Schaltfläche klicken, nachdem Sie Änderungen an den Pfaden im Dialogfeld &#039;&#039;&#039;SDK-Manager&#039;&#039;&#039; vorgenommen haben.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Hinzufügen&lt;br /&gt;
|&lt;br /&gt;
Öffnet das Dialogfeld &#039;&#039;&#039;[[Neues SDK hinzufügen|Neues SDK hinzufügen]]&#039;&#039;&#039;, in dem Sie ein SDK als Verbindungsprofil für die Zielplattform auswählen können. Durch Drücken der Taste &amp;lt;code&amp;gt;EINFG&amp;lt;/code&amp;gt; in der Liste &#039;&#039;&#039;SDKs&#039;&#039;&#039; wird dieses Dialogfeld ebenfalls geöffnet.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Löschen&lt;br /&gt;
|&lt;br /&gt;
Zeigt ein Bestätigungsdialogfeld an und löscht nach einer Bestätigung das aktuell ausgewählte SDK. Sie können ein SDK auch durch Drücken der Taste &amp;lt;code&amp;gt;ENTF&amp;lt;/code&amp;gt; löschen, wenn ein SDK in der Liste &#039;&#039;&#039;SDKs&#039;&#039;&#039; den Fokus hat.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Exportieren&lt;br /&gt;
|&lt;br /&gt;
Zeigt ein Dialogfeld zur Eingabe eines Dateinamens an und speichert die SDK-Einstellungen an dieser Position (der Standarddateiname lautet &amp;quot;&amp;amp;lt;sdk-Name&amp;amp;gt;.sdk&amp;quot;).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Importieren&lt;br /&gt;
|&lt;br /&gt;
Zeigt ein Dialogfeld zur Eingabe eines SDK-Dateinamens an und importiert die enthaltenen SDK-Einstellungen in die IDE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Eigenschaften von Android-SDK, -NDK und Java===&lt;br /&gt;
&lt;br /&gt;
Diese Felder werden im Fenster &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; angezeigt, wenn Sie ein &#039;&#039;&#039;Android&#039;&#039;&#039;-SDK auswählen. Das Fenster &amp;quot;Eigenschaften&amp;quot; enthält drei Registerkarten: &#039;&#039;&#039;SDK&#039;&#039;&#039;, &#039;&#039;&#039;NDK&#039;&#039;&#039; und &#039;&#039;&#039;Java&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Registerkarte &amp;quot;SDK&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
SDK-Basispfad&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des Ordners für das Android-SDK.&lt;br /&gt;
&lt;br /&gt;
Damit &#039;&#039;&#039;{{Variables|Product}}&#039;&#039;&#039; Ihren Android-SDK-Ordner als gültigen Ordner erkennen kann, muss dieser Ordner einen Unterordner namens &amp;lt;code&amp;gt;tools&amp;lt;/code&amp;gt; mit der Datei &amp;lt;code&amp;gt;source.properties&amp;lt;/code&amp;gt; enthalten. In der Datei &amp;lt;code&amp;gt;source.properties&amp;lt;/code&amp;gt; ist die Version (&amp;lt;code&amp;gt;Pkg.Revision&amp;lt;/code&amp;gt;) Ihres Android-SDK angegeben.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
ZipAlign-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des SDK-Tools &amp;quot;ZipAlign.exe&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
* {{Path|{{Placeholder|Android SDK base path}}\tools\ZipAlign.exe}}&lt;br /&gt;
* {{Path|{{Placeholder|Android SDK base path}}\build-tools\{{Placeholder|version}}\zipalign.exe}}&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Android-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des SDK-Tools &amp;quot;Android.bat&amp;quot;.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Adb-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des SDK-Plattformtools &amp;quot;Adb.exe&amp;quot;.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Aapt-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des SDK-Erzeugungstools &amp;quot;aapt.exe&amp;quot;.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
SDK-API-Level-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des zu verwendenden SDK-API-Level-Ordners. Jede Version ist geeignet (z. B. &amp;lt;code&amp;gt;&amp;amp;lt;SDK-Ordner&amp;amp;gt;\platforms\android-17&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Damit &#039;&#039;&#039;{{Variables|Product}}&#039;&#039;&#039; Ihren SDK-API-Level-Ordner als gültigen Ordner erkennen kann, muss dieser Ordner die Datei &amp;lt;code&amp;gt;android.jar&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Registerkarte &amp;quot;NDK&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
NDK-Basispfad&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des Ordners für das Android-NDK.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Speicherort von arm-linux-androideabi-ld.exe&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des Linkers arm-linux-androideabi-ld.exe (beispielsweise &amp;lt;code&amp;gt;&amp;amp;lt;NDK-Ordner&amp;amp;gt;\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Speicherort von arm-linux-androideabi-strip.exe&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des Linkers arm-linux-androideabi-ld.exe (beispielsweise &amp;lt;code&amp;gt;&amp;amp;lt;NDK-Ordner&amp;amp;gt;\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{{Variables|Product}}&#039;&#039;&#039; verringert mithilfe dieser ausführbaren Datei die Größe Ihrer Android-Anwendungspakete.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
gdbserver-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des GDB-Servers im Android-NDK-Ordner (z. B. &amp;lt;code&amp;gt;&amp;amp;lt;NDK-Ordner&amp;amp;gt;\prebuilt\android-arm\gdbserver&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
NDK-API-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des API-Ordners im Android-NDK-Ordner (z. B. &amp;lt;code&amp;gt;&amp;amp;lt;NDK-Ordner&amp;amp;gt;\platforms\android-14&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Damit &#039;&#039;&#039;{{Variables|Product}}&#039;&#039;&#039; Ihren NDK-API-Ordner als gültigen Ordner erkennen kann, muss dieser Ordner eine Datei mit dem Pfad &amp;lt;code&amp;gt;arch-arm\usr\lib\libandroid.so&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Bibliothekspfad für {{CBuilder}}-NDK&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort der C++-Bibliothek im Android-NDK-Ordner (z. B. &amp;lt;code&amp;gt;&amp;amp;lt;NDK-Ordner&amp;amp;gt;\platforms\android-14\arch-arm\usr\lib&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf die Ellipse ([[Image:ProjectOptionsEllipsis.jpg]]), um das Dialogfeld [[Listen Dialogfeld|&#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;]] zu öffnen, wenn Sie Bibliothekspfade hinzufügen, ersetzen oder löschen möchten.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Bibliothekspfad für das Delphi-NDK&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des Delphi-Bibliotheksordners im Android-NDK-Ordner (z. B. &amp;lt;code&amp;gt;&amp;amp;lt;NDK-Ordner&amp;amp;gt;\sources\cxx-stl\stlport\libs\armeabi-v7a&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf die Ellipse ([[Image:ProjectOptionsEllipsis.jpg]]), um das Dialogfeld [[Listen Dialogfeld|&#039;&#039;&#039;Verzeichnisse&#039;&#039;&#039;]] zu öffnen, wenn Sie Bibliothekspfade hinzufügen, ersetzen oder löschen möchten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Registerkarte &amp;quot;Java&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; frame=&amp;quot;hsides&amp;quot; rules=&amp;quot;rows&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Beschreibung&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
KeyTool-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des JDK-Tools &amp;quot;KeyTool.exe&amp;quot;.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
JarSigner-Speicherort&lt;br /&gt;
|&lt;br /&gt;
Der Speicherort des JDK-Tools &amp;quot;JarSigner.exe&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; In den Android-SDK-Eigenschaften können Sie keine Netzwerkadressen als Speicherorte verwenden, die mit einem doppelten Backslash beginnen. Beispielsweise ist &amp;lt;code&amp;gt;\\mycompany.com\android\sdk&amp;lt;/code&amp;gt; hier kein gültiger Wert. Verwenden Sie stattdessen ein [http://windows.microsoft.com/en-us/windows7/create-a-shortcut-to-map-a-network-drive Netzwerklaufwerk].&lt;br /&gt;
&lt;br /&gt;
==Fehlerbehebung (OS X und iOS)==&lt;br /&gt;
&lt;br /&gt;
===Behandlung mehrerer Xcode-Installationen===&lt;br /&gt;
&lt;br /&gt;
Bei mehreren Installationen von Xcode müssen Sie sicherstellen, dass das Befehlszeilentool &amp;lt;code&amp;gt;xcode-select&amp;lt;/code&amp;gt; auf den Xcode-Hauptinstallationsordner zeigt. Geben Sie &amp;lt;code&amp;gt;xcode-select -p&amp;lt;/code&amp;gt; ein, um den Pfad zum aktuell ausgewählten Entwicklerverzeichnis anzuzeigen:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 MacOS yourname $ xcode-select -p&lt;br /&gt;
 /Applications/Xcode.app/Contents/Developer&lt;br /&gt;
&lt;br /&gt;
Wenn das Befehlszeilentool auf einen Ordner zeigt, der nicht Ihr Xcode-Hauptinstallationsordner ist, geben Sie &amp;lt;code&amp;gt;xcode-select -s &amp;amp;lt;Pfad&amp;amp;gt;&amp;lt;/code&amp;gt; ein, um das Entwicklerverzeichnis festzulegen, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 MacOS yourname $ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie in der [https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcode-select.1.html Apple-Dokumentation für xcode-select (EN)].&lt;br /&gt;
&lt;br /&gt;
===Fehlende SDK-Versionen aufgrund eines falschen Xcode-Verzeichnisses===&lt;br /&gt;
&lt;br /&gt;
Nach der Auswahl eines Verbindungsprofils im Dialogfeld &#039;&#039;&#039;[[Neues SDK hinzufügen|Neues SDK hinzufügen]]&#039;&#039;&#039; wird die Dropdown-Liste &#039;&#039;&#039;SDK-Version auswählen&#039;&#039;&#039; mit den vom [[PAServer: Die Platform Assistant Server-Anwendung|Platform Assistant]] auf dem Remote-Computer ermittelten SDK-Versionen gefüllt.&lt;br /&gt;
&lt;br /&gt;
Wenn die Dropdown-Liste &#039;&#039;&#039;SDK-Version auswählen&#039;&#039;&#039; leer ist, eine erwartete SDK-Version nicht aufgeführt ist oder der folgende Fehler angezeigt wird:&lt;br /&gt;
&lt;br /&gt;
 No SDKs could be found for the iOS Device/Simulator platform. Did you install the Command Line Tools on your Xcode?&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie die Xcode-Installation auf Ihrem Mac, und stellen Sie sicher, dass das Befehlszeilentool &amp;lt;code&amp;gt;xcode-select&amp;lt;/code&amp;gt; auf Ihren Xcode-Installationsordner zeigt. Siehe [[#Behandlung mehrerer Xcode-Installationen|Behandlung mehrerer Xcode-Installationen]].&lt;br /&gt;
&lt;br /&gt;
Wenn der Pfad, auf den von &amp;lt;code&amp;gt;xcode-select&amp;lt;/code&amp;gt; gezeigt wird, korrekt ist, überprüfen Sie den Inhalt des folgenden Verzeichnisses:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;amp;lt;Xcode-Entwicklerverzeichnis&amp;amp;gt;/Platforms/&amp;amp;lt;Plattform&amp;amp;gt;.platform/Developer/SDKs/&amp;lt;/code&amp;gt;&lt;br /&gt;
: Wie z. B.: &amp;lt;code&amp;gt;/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Plattform&#039;&#039; ist hierbei:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;OSX&amp;lt;/code&amp;gt; für die OS X-Plattform&lt;br /&gt;
* &amp;lt;code&amp;gt;iPhoneOS&amp;lt;/code&amp;gt; für die Plattformen &amp;quot;iOS-Gerät - 32 Bit&amp;quot; und &amp;quot;iOS-Gerät - 64 Bit&amp;quot;&lt;br /&gt;
* &amp;lt;code&amp;gt;iPhoneSimulator&amp;lt;/code&amp;gt; für die Plattform &amp;quot;iOS-Simulator&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;Platform Assistant&amp;quot; liest die SDK-Versionen aus diesem Verzeichnis, und die Dropdown-Liste &#039;&#039;&#039;SDK-Version auswählen&#039;&#039;&#039; enthält nur diese SDK-Versionen.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der &amp;quot;Platform Assistant&amp;quot; stellt ein zusätzliches SDK, &#039;&#039;&#039;Befehlszeilentools&#039;&#039;&#039; (Command Line Tools), bereit, das Sie nur für die OS X-Plattform installieren müssen.&lt;br /&gt;
&lt;br /&gt;
===Fehler &amp;quot;Unbekannter Compiler&amp;quot; nach Aktualisierung von XCode===&lt;br /&gt;
&lt;br /&gt;
Nach der Aktualisierung von XCode auf OS X könnte der Fehler &amp;lt;code&amp;gt;[bccosx Schwerer Fehler]... unbekannter Compiler &amp;lt;/code&amp;gt; auftreten. &lt;br /&gt;
&lt;br /&gt;
Führen Sie die folgenden Schritte aus, um dieses Problem zu beheben:&lt;br /&gt;
&lt;br /&gt;
* Löschen Sie das SDK aus dem [[SDK-Manager|SDK-Manager]]. &lt;br /&gt;
** Öffnen Sie {{Menu|Tools &amp;amp;gt; Optionen &amp;amp;gt; [[Umgebungsoptionen|Umgebungsoptionen]] &amp;amp;gt; SDK-Manager}}.&amp;lt;br /&amp;gt;&lt;br /&gt;
**: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Sie können den [[SDK-Manager|SDK-Manager]] auch mit &#039;&#039;&#039;[[Projektverwaltung|Projektverwaltung]]&#039;&#039;&#039; | mit der rechten Maustaste auf die OS X-Plattform in &#039;&#039;&#039;[[Projektverwaltung#Kontextmenü für Zielplattformen|Zielplattformen]]&#039;&#039;&#039; klicken | &#039;&#039;&#039;SDK bearbeiten&#039;&#039;&#039; öffnen.&lt;br /&gt;
** Wählen Sie im Abschnitt &#039;&#039;&#039;OS X&#039;&#039;&#039; die SDK-Version aus, und klicken Sie auf &#039;&#039;&#039;Löschen&#039;&#039;&#039;.&lt;br /&gt;
* Entfernen Sie den gesamten Inhalt aus dem SDK-Ordner auf dem Computer, auf dem {{product}} installiert ist.&lt;br /&gt;
** Der SDK-Ordner befindet sich unter {{path | Dokumente\Embarcadero\Studio\SDKs\}}.&lt;br /&gt;
* Entfernen Sie den Ordner &amp;quot;scratch-dir&amp;quot; aus dem PAServer-Verzeichnis auf OS X.&lt;br /&gt;
&lt;br /&gt;
Rufen Sie anschließend die Anwendung erneut auf, um ein neues SDK hinzuzufügen. &lt;br /&gt;
&lt;br /&gt;
==Themen==&lt;br /&gt;
&lt;br /&gt;
* [[Neues SDK hinzufügen|Neues SDK hinzufügen]]&lt;br /&gt;
* [[Remote-Pfadeintrag hinzufügen oder Remote-Pfadeintrag bearbeiten|Remote-Pfadeintrag hinzufügen oder Remote-Pfadeintrag bearbeiten]]&lt;br /&gt;
* [[Neues Android SDK erstellen|Neues Android SDK erstellen]]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Plattformvoraussetzungen für FireMonkey|Plattformvoraussetzungen für FireMonkey]]&lt;br /&gt;
* [[Geräteübergreifende Anwendungen - Index|Geräteübergreifende Anwendungen]]&lt;br /&gt;
* [[Hinzufügen von SDKs für OS X oder iOS|Hinzufügen von SDKs für OS X oder iOS]]&lt;br /&gt;
* [[Hinzufügen von Android-SDKs|Hinzufügen von Android-SDKs]]&lt;br /&gt;
* [[Ändern des lokalen Stammverzeichnisses von SDKs für OS X, iOS-Geräte oder den iOS-Simulator|Ändern des lokalen Stammverzeichnisses von SDKs für OS X, iOS-Geräte oder den iOS-Simulator]]&lt;br /&gt;
* [[Verbindungsprofil auswählen|Verbindungsprofil auswählen]]&lt;br /&gt;
* [[Verbindungsprofil-Manager|Verbindungsprofil-Manager]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
[[Category:Geräteübergreifend]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:SDK Manager]]&lt;br /&gt;
[[fr:Gestionnaire de SDK]]&lt;br /&gt;
[[ja:［SDK マネージャ］]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Manuelles_Sandboxing_der_macOS-Anwendung&amp;diff=208887</id>
		<title>Manuelles Sandboxing der macOS-Anwendung</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Manuelles_Sandboxing_der_macOS-Anwendung&amp;diff=208887"/>
		<updated>2016-06-23T08:15:36Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|OS X-Anwendungsentwicklung}}&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Hinweis:&#039;&#039;&#039; [[Sandboxing der OS X-Anwendung|Die Verwendung der IDE]] wird für das Sandboxing empfohlen. Manuelle Schritte sind viel komplexer als die Verwendung der IDE und werden hier nur für diejenigen kurz umrissen, die außerhalb der IDE arbeiten müssen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nicht mit der {{Product}}-IDE ein Sandbox-Anwendungspaket einer OS X-Anwendung erstellen, können Sie die erforderlichen Schritte auf Ihrem Mac ausführen. Dieser Abschnitt enthält eine grundlegende Einführung in diesen Vorgang, die Details finden Sie in der [https://developer.apple.com/library/mac/documentation/Security/Conceptual/AppSandboxDesignGuide/AboutAppSandbox/AboutAppSandbox.html Apple-Dokumentation] (siehe die entsprechenden Links).&lt;br /&gt;
&lt;br /&gt;
Auf dem Mac müssen Sie eine [[Apple-Anwendungsberechtigungsdatei (*.entitlements)|{{Placeholder|Projekt}}.entitlements]]-Datei erstellen und diese in das Anwendungspaket platzieren, das Paket mit einer Codesignatur versehen, es komprimieren und bei Apple einreichen.&lt;br /&gt;
&lt;br /&gt;
==Anforderungen von Apple==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden sind die erforderlichen Elemente und die relevanten Informationen von Apple aufgeführt:&lt;br /&gt;
&lt;br /&gt;
* Die zugehörige [[Apple-Anwendungsberechtigungsdatei (*.entitlements)|{{Placeholder|Projekt}}.entitlements]]-Datei.&lt;br /&gt;
* Befehl &amp;quot;codesign&amp;quot;:&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/codesign.1.html man page for code-sign command (EN)]&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html Code Signing Guide]&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/OSXWorkflowGuide/CodeSigning/CodeSigning.html#//apple_ref/doc/uid/TP40011201-CH7-SW1 Code Signing Your App]&lt;br /&gt;
** Beispiel:&lt;br /&gt;
**:&amp;lt;code&amp;gt;codesign -s&amp;quot;Name des Zertifikats&amp;quot; -f &amp;quot;Name des Anwendungspakets&amp;quot; &amp;lt;/code&amp;gt;&lt;br /&gt;
* Befehl &amp;quot;productbuild&amp;quot;&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/productbuild.1.html man page for productbuild command (EN)]&lt;br /&gt;
** [https://developer.apple.com/library/mac/#releasenotes/General/SubmittingToMacAppStore/_index.html Submitting Your Application Using Application Loader]&lt;br /&gt;
* Befehl &amp;quot;installer&amp;quot; (zum Testen der Installation Ihrer Anwendung)&lt;br /&gt;
** [https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/installer.8.html man page for installer command (EN)]&lt;br /&gt;
&lt;br /&gt;
==Manuelles Signieren des Codes und Erzeugen einer OS X-Anwendung auf dem Mac==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Ihre Anwendung im Mac App Store bereitstellen möchten, ist eine Codesignatur und eine Bereitstellung der Voraussetzungen erforderlich. Sie können diese Schritte entweder in der IDE (weiter oben beschrieben) oder manuell (indem Sie die folgenden allgemeinen Anleitungen befolgen) durchführen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
:* Sie müssen zum Bereitstellen von Apps im Mac App Store [[Bereitstellen von OS X-Anwendungen|ein Distributionszertifikat anfordern]].&lt;br /&gt;
:* Für das Mac-Sandboxing ist eine [[Apple-Anwendungsberechtigungsdatei (*.entitlements)|{{Placeholder|Projekt}}.entitlements]]-Datei erforderlich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;So signieren Sie Ihren Code und erzeugen ein Produktinstallationsprogramm für Ihre OS X-Anwendung manuell:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Erzeugen Sie die Anwendung in der IDE, und stellen Sie sie in OS X bereit.&lt;br /&gt;
# Öffnen Sie auf dem Mac ein Terminalfenster.&lt;br /&gt;
# Wechseln Sie in das Verzeichnis &amp;quot;scratch-dir&amp;quot; von PAServer:&lt;br /&gt;
#: {{Path|Applications/{{Company}}/PAServer/{{VersionNumber}}/scratch-dir/machinename-remoteprofilename/}}&lt;br /&gt;
# Führen Sie die folgenden Befehle aus:&lt;br /&gt;
#*Codesignatur für die Anwendung:&lt;br /&gt;
#*: {{Code|sudo codesign -f -v -s &amp;quot;Mac-Entwickler: Vorname Nachname&amp;quot; &amp;quot;App-Name.app&amp;quot;}}&lt;br /&gt;
#* Führen Sie &amp;quot;productbuild&amp;quot; aus, um ein Installationspaket zu erstellen:&lt;br /&gt;
#*: {{Code|sudo productbuild --component &amp;quot;App-Name.app&amp;quot; /Applications --sign &amp;quot;Mac-Entwickler: Vorname Nachname&amp;quot; --product &amp;quot;App-Name.app/Contents/info.plist&amp;quot; AppName.pkg}}&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Sandboxing der OS X-Anwendung|Sandboxing einer OS X-Anwendung]] mit {{Product}}&lt;br /&gt;
* [https://developer.apple.com/library/mac/#referencelibrary/GettingStarted/RoadMapOSX/books/RM_PrepareForAppStore_Mac/PrepareForAppStore/PrepareForAppStore.html OS X Roadmap for Mac App Store]&lt;br /&gt;
&lt;br /&gt;
[[Category:OS X]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Sandboxing Your OS X Application Manually]]&lt;br /&gt;
[[fr:Sandboxing manuel de votre application OS X]]&lt;br /&gt;
[[ja:Mac OS X アプリケーションの手動でのサンドボックス化]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Sandboxing_der_macOS-Anwendung&amp;diff=208886</id>
		<title>Sandboxing der macOS-Anwendung</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Sandboxing_der_macOS-Anwendung&amp;diff=208886"/>
		<updated>2016-06-23T08:15:10Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|OS X-Anwendungsentwicklung}}&lt;br /&gt;
&lt;br /&gt;
Per &#039;&#039;&#039;Sandboxing&#039;&#039;&#039; wird der Zugriff einer Anwendung auf Systemressourcen beschränkt, und Apple kann damit verhindern, dass Apps unsicher sind oder Malware enthalten. Sie müssen für Ihre OS X-Anwendungen ein Sandboxing durchführen, wenn Sie sie [[Übermittlung der App an den Mac App Store|an den Mac App Store übermitteln möchten]].&lt;br /&gt;
&lt;br /&gt;
In diesem Thema wird beschrieben, wie Sie ein Sandboxing für Ihre OS X-Anwendungen mit der {{Product}}-IDE durchführen. Wenn Sie die IDE nicht für den Sandboxing-Prozess verwenden können, lässt sich alternativ [[Manuelles Sandboxing der OS X-Anwendung|für Ihre Anwendung manuell ein Sandboxing durchführen]].&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
&lt;br /&gt;
Vor dem Sandboxing Ihrer OS X-Anwendung müssen Sie Folgendes ausführen:&lt;br /&gt;
&lt;br /&gt;
* [[Vorbereiten einer OS X-Anwendung für die Bereitstellung|Bereiten Sie Ihre Anwendung für die Bereitstellung vor]].&lt;br /&gt;
* [[Bereitstellen von OS X-Anwendungen|Stellen Sie Ihre Anwendung bereit]].&lt;br /&gt;
&lt;br /&gt;
==Generieren eines Sandbox-Anwendungspakets==&lt;br /&gt;
&lt;br /&gt;
[[Image:MacOSXApplicationStoreDeploymentProjectManager.png|thumb|300px|Für das Generieren eines Sandbox-Pakets vorbereitetes Projekt]]&lt;br /&gt;
&lt;br /&gt;
So generieren Sie eine Sandbox-Anwendungspaketdatei für Ihre OS X-Anwendung:&lt;br /&gt;
&lt;br /&gt;
# [[Ausführen des Platform Assistant auf dem Mac|Führen Sie den Platform Assistant auf dem Mac aus]].&lt;br /&gt;
# Führen Sie in der &#039;&#039;&#039;[[Projektverwaltung|Projektverwaltung]]&#039;&#039;&#039; folgende Schritte aus:&lt;br /&gt;
## Erweitern Sie den Knoten &#039;&#039;&#039;Build-Konfigurationen&#039;&#039;&#039;, und doppelklicken Sie auf die &#039;&#039;&#039;Release&#039;&#039;&#039;-Konfiguration bzw. eine andere plattformunabhängige Konfiguration, die Sie zum Erstellen des Sandbox-Anwendungspakets verwenden möchten.&lt;br /&gt;
## Erweitern Sie den Knoten &#039;&#039;&#039;Zielplattformen&#039;&#039;&#039;, und doppelklicken Sie auf die Zielplattform &#039;&#039;&#039;OS X&#039;&#039;&#039;, um diese Plattform auszuwählen. Die ausgewählte Zielplattform wird in Fettschrift angezeigt.&lt;br /&gt;
## Erweitern Sie den Knoten &#039;&#039;&#039;OS X&#039;&#039;&#039;, erweitern Sie darin den Knoten &#039;&#039;&#039;Konfiguration&#039;&#039;&#039;, und doppelklicken Sie auf den Plattformkonfigurationsknoten &#039;&#039;&#039;Anwendungs-Store&#039;&#039;&#039;, um diese Plattformkonfiguration auszuwählen. Die ausgewählte Plattformkonfiguration wird in Fettschrift angezeigt.&lt;br /&gt;
# [[Projekt erzeugen|Erzeugen]] Sie das Projekt in {{Product}}.&lt;br /&gt;
# Wählen Sie {{Menu|Projekt &amp;amp;gt; [[Bereitstellungs-Manager|Bereitstellung]]}}, und klicken Sie auf die Schaltfläche &#039;&#039;&#039;Bereitstellen&#039;&#039;&#039; [[Image:DMgrDeploy.png]], um die Anwendung bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
{{Product}} erzeugt Ihre Anwendung mit dem [[SDK-Manager|SDK]], das Sie zuvor in der IDE hinzugefügt haben, stellt eine Verbindung zu Ihrem Mac mit dem [[Verbindungsprofil-Manager|Verbindungsprofil]] her, das Sie für die Plattform &#039;&#039;&#039;OS X&#039;&#039;&#039; konfiguriert haben, und der auf dem Mac ausgeführte &#039;&#039;&#039;[[PAServer: Die Platform Assistant Server-Anwendung|Platform Assistant]]&#039;&#039;&#039; generiert eine Sandbox-Anwendungspaketdatei für Ihre Anwendung.&lt;br /&gt;
&lt;br /&gt;
Sie können [[Übermittlung der App an den Mac App Store|dieses Paket an den Mac App Store übermitteln]].&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Manuelles Sandboxing der OS X-Anwendung|Manuelles Sandboxing der OS X-Anwendung]]&lt;br /&gt;
* [[Konfigurieren eines Anwendungseintrags in iTunes Connect für das Hochladen|Konfigurieren eines Anwendungseintrags in iTunes Connect für das Hochladen]]&lt;br /&gt;
* [[Vorbereiten einer OS X-Anwendung für die Bereitstellung|Vorbereiten einer OS X-Anwendung für die Bereitstellung]]&lt;br /&gt;
* [[Übermittlung der App an den Mac App Store|Übermittlung der App an den Mac App Store]]&lt;br /&gt;
* [https://developer.apple.com/devcenter/mac/app-sandbox/ App Sandboxing]&lt;br /&gt;
* [https://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandboxDesignGuide/AboutAppSandbox/AboutAppSandbox.html#//apple_ref/doc/uid/TP40011183 App Sandbox Design Guide]&lt;br /&gt;
* [https://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxQuickStart/AppSandboxQuickStart.html#//apple_ref/doc/uid/TP40011183-CH2-SW3 App Sandbox Quick Start]&lt;br /&gt;
* [[Bereitstellen von iOS-Anwendungen für die Übermittlung an den App Store|Bereitstellen von iOS-Anwendungen für die Übermittlung an den App Store]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OS X]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Sandboxing Your OS X Application]]&lt;br /&gt;
[[fr:Sandboxing de votre application Mac OS X]]&lt;br /&gt;
[[ja:Mac OS X アプリケーションのサンドボックス化]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
	<entry>
		<id>https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Ausf%C3%BChren_des_Platform_Assistant_auf_dem_Mac&amp;diff=208885</id>
		<title>Ausführen des Platform Assistant auf dem Mac</title>
		<link rel="alternate" type="text/html" href="https://docwiki.embarcadero.com/RADStudio/Athens/d/index.php?title=Ausf%C3%BChren_des_Platform_Assistant_auf_dem_Mac&amp;diff=208885"/>
		<updated>2016-06-23T08:14:36Z</updated>

		<summary type="html">&lt;p&gt;Esabatell: Updated. LOC-22885&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Parent|PAServer: Die Platform Assistant Server-Anwendung}}&lt;br /&gt;
__TOC__&lt;br /&gt;
Den &amp;quot;Platform Assistant&amp;quot; können Sie auf dem Mac auf eine der beiden folgenden Weisen starten:&lt;br /&gt;
&lt;br /&gt;
* Doppelklicken Sie [[#Ausführen von &amp;quot;Platform Assistant&amp;quot; im Finder|im &#039;&#039;&#039;Finder&#039;&#039;&#039;]] auf &#039;&#039;&#039;{{PAServerOSXAppFile}}&#039;&#039;&#039; (grafisch).&lt;br /&gt;
* Führen Sie die ausführbare Datei &#039;&#039;&#039;paserver&#039;&#039;&#039; im [[#Ausführen von paserver in einem Terminal-Fenster|&#039;&#039;&#039;Terminal&#039;&#039;&#039;-Fenster (Befehlszeile) aus.]] &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; &lt;br /&gt;
:*Im Finder können Sie Optionen in einer .config-Datei festlegen.&lt;br /&gt;
:*Im Terminal-Fenster können Sie den &amp;quot;Platform Assistant&amp;quot; mit angepassten Optionen starten. &lt;br /&gt;
: Unter [[Festlegen von Optionen für den Platform Assistant|Festlegen von Optionen für den Platform Assistant]] finden Sie Informationen zum Festlegen von Optionen für PAServer.&lt;br /&gt;
&lt;br /&gt;
==Ausführen von &amp;quot;Platform Assistant&amp;quot; im Finder==&lt;br /&gt;
&lt;br /&gt;
Aktivieren Sie auf dem Mac im Finder die .app-Datei ({{PAServerOSXAppFile}}) wie folgt:&lt;br /&gt;
&lt;br /&gt;
# Navigieren Sie zum obersten &#039;&#039;&#039;Applications&#039;&#039;&#039;-Ordner.&lt;br /&gt;
#:&#039;&#039;&#039;Tipps:&#039;&#039;&#039; &lt;br /&gt;
#:*Wenn Sie ein anderes Installationsziel verwendet haben, wählen Sie den entsprechenden Datenträger aus, bevor Sie zum obersten Applications-Ordner wechseln.&lt;br /&gt;
#:* Ein Beispiel finden Sie unter [[#Beispiel: Navigieren zum Installationsverzeichnis von paserver (MacOS-Ordner)|Beispiel: Navigieren zum Installationsverzeichnis von paserver (MacOS-Ordner)]]&lt;br /&gt;
# Doppelklicken Sie auf &#039;&#039;&#039;{{PAServerOSXAppFile}}&#039;&#039;&#039;, um den &amp;quot;Platform Assistant&amp;quot; zu starten. &lt;br /&gt;
#:[[Image:SelectNewRADPAServer.png]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#::&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Informationen zu &#039;&#039;&#039;PAServer Manager&#039;&#039;&#039; finden Sie unter [[Ausführen von PAServer Manager auf dem Mac|Ausführen von PAServer Manager auf dem Mac]].&lt;br /&gt;
#:Das Terminal-Fenster wird mit dem &amp;quot;Platform Assistant&amp;quot;-Banner und der Passworteingabeaufforderung angezeigt:&amp;lt;br /&amp;gt;&lt;br /&gt;
#::&amp;lt;code&amp;gt;Verbindungsprofil-Passwort &amp;amp;lt;Eingabetaste für kein Passwort&amp;amp;gt;:&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Die Reaktion auf die Eingabeaufforderung ist unter [[Ausführen des Platform Assistant auf dem Mac#Anmelden beim Platform Assistant|Anmelden beim Platform Assistant]] beschrieben.&lt;br /&gt;
#* Als Nächstes werden Sie nach Ihrem Passwort gefragt, um das Debuggen von Apps auf dem Mac zuzulassen. &amp;lt;br /&amp;gt;Nachdem Sie die [[Übernahme der Berechtigung zur Debugging-Unterstützung auf einem Mac|Berechtigung zum Debugging auf dem Mac erworben haben]], sollte das Terminal-Fenster wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
  MyMac:~ myname$ /Applications/PAServer-16.0.app/Contents/MacOS/paserver ; exit;&lt;br /&gt;
  Platform Assistant Server  Version 7.0.1.40&lt;br /&gt;
  Copyright (c) 2009-2015 Embarcadero Technologies, Inc.&lt;br /&gt;
 &lt;br /&gt;
  Connection Profile password &amp;amp;lt;press Enter for no password&amp;amp;gt;:&lt;br /&gt;
  &lt;br /&gt;
  Acquiring permission to support debugging...succeeded&lt;br /&gt;
 &lt;br /&gt;
  Starting Platform Assistant Server on port 64211&lt;br /&gt;
  &lt;br /&gt;
  Type ? for available commands&lt;br /&gt;
  &amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Um die ausführbare Datei &#039;&#039;&#039;paserver&#039;&#039;&#039; im Finder anzuzeigen, klicken Sie mit der rechten Maustaste auf die Datei &#039;&#039;&#039;PAServer {{VersionNumber}}.app&#039;&#039;&#039;, und wählen &#039;&#039;&#039;Paketinhalt anzeigen&#039;&#039;&#039;. Dadurch werden die Verzeichnisse &#039;&#039;&#039;Contents&#039;&#039;&#039; und &#039;&#039;&#039;MacOS&#039;&#039;&#039; im Finder angezeigt. Im Terminal-Fenster werden diese Verzeichnisse immer angezeigt. Die ausführbare Datei &#039;&#039;&#039;paserver&#039;&#039;&#039; befindet sich im Verzeichnis &amp;quot;MacOS&amp;quot;:&lt;br /&gt;
::&amp;lt;code&amp;gt; Applications/{{PAServerOSXAppFile}}/Contents/MacOS/paserver &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ausführen von paserver in einem Terminal-Fenster==&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;&#039;paserver&#039;&#039;&#039; ist die ausführbare Befehlszeilendatei für den &amp;quot;Platform Assistant&amp;quot;, und der Pfad zu paserver lautet:&lt;br /&gt;
&lt;br /&gt;
  Applications yourname $ /Applications/{{PAServerOSXAppFile}}/Contents/MacOS/paserver &lt;br /&gt;
&lt;br /&gt;
Das heißt, dass sich die ausführbare Datei &#039;&#039;&#039;paserver&#039;&#039;&#039; &#039;&#039;&#039;im&#039;&#039;&#039; Paket &#039;&#039;&#039;{{PAServerOSXAppFile}}&#039;&#039;&#039; im Ordner &#039;&#039;&#039;Contents/MacOS&#039;&#039;&#039; befindet.   Sie können die ausführbare paserver-Datei direkt im Terminal-Fenster ausführen.&lt;br /&gt;
&lt;br /&gt;
Die folgende Anleitung zeigt zwei grundlegende Möglichkeiten zum Starten von paserver von der Befehlszeile aus: Durch Eingabe einer einzigen Befehlszeile im Ordner &amp;quot;Applications&amp;quot; oder durch Navigieren zum Ordner &amp;quot;MacOS&amp;quot;. Bei dieser Methode haben Sie die Möglichkeit, die Dateieigenschaften im Verzeichnis &#039;&#039;&#039;{{PAServerOSXAppFile}}/Contents/MacOS&#039;&#039;&#039;, einschließlich von &#039;&#039;&#039;paserver&#039;&#039;&#039;, zu überprüfen.&lt;br /&gt;
&lt;br /&gt;
===Beispiel: Eingeben einer einzelnen Befehlszeile im Ordner &amp;quot;Applications&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Im Mac-Terminal-Fenster können Sie mit einem einzigen Befehl den Inhalt der Datei &#039;&#039;&#039;{{PAServerOSXAppFile}}&#039;&#039;&#039; durchsuchen und paserver starten:&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie auf dem Mac ein Terminal-Fenster, und wechseln Sie mit &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; zum obersten &amp;quot;Applications&amp;quot;-Ordner. &lt;br /&gt;
#: Geben Sie beispielsweise den oder die Anfangsbuchstaben des &amp;quot;Applications&amp;quot;-Ordners ein, und drücken Sie dann die Taste &#039;&#039;&#039;TAB&#039;&#039;&#039;. Wenn ein Verzeichnis und nur ein Verzeichnis vorhanden ist, dessen Name mit den eingegebenen Buchstaben beginnt, wird der Verzeichnisname angezeigt:&lt;br /&gt;
#:&amp;lt;code&amp;gt;IhrName $ &#039;&#039;&#039;cd /A&#039;&#039;&#039;&amp;lt;/code&amp;gt; &amp;amp;lt;TAB&amp;amp;gt;&lt;br /&gt;
#:&amp;lt;code&amp;gt;IhrName $ &#039;&#039;&#039;cd /Applications&#039;&#039;&#039;&amp;lt;/code&amp;gt; &amp;amp;lt;EINGABE&amp;amp;gt;&lt;br /&gt;
#:&amp;lt;code&amp;gt;Applications IhrName $ &amp;lt;/code&amp;gt;&lt;br /&gt;
#*Geben Sie einen &amp;quot;cd&amp;quot;-Befehl mit den Anfangsbuchstaben der aufeinanderfolgenden Teile des Pfades ein, und drücken Sie nach jeder Eingabe die Taste &#039;&#039;&#039;TAB&#039;&#039;&#039;, um den Teil zu vervollständigen.&lt;br /&gt;
#: Die komplette Befehlszeile für den Pfad sollte ungefähr wie folgt aussehen:&lt;br /&gt;
#: &amp;lt;code&amp;gt;Applications IhrName $ /Applications/PAServer\ &amp;amp;amp;{{VersionNumber}}.app/Contents/MacOS/paserver&amp;lt;/code&amp;gt;&lt;br /&gt;
# Drücken Sie die &#039;&#039;&#039;EINGABE&#039;&#039;&#039;-Taste.&lt;br /&gt;
&lt;br /&gt;
===Beispiel: Navigieren zum Installationsverzeichnis von paserver (MacOS-Ordner)===&lt;br /&gt;
&lt;br /&gt;
Sie müssen zu folgendem PAServer-Verzeichnis navigieren:&lt;br /&gt;
&lt;br /&gt;
  mymac:~ myname$ &#039;&#039;&#039;cd Applications&#039;&#039;&#039;&lt;br /&gt;
  mymac:Applications myname$ &#039;&#039;&#039;cd PAServer 16.0&#039;&#039;&#039;&lt;br /&gt;
  mymac:PAServer 16.0 myname$&lt;br /&gt;
&lt;br /&gt;
Im Mac-Terminal-Fenster können Sie mit einer Reihe von &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt;-Befehlen den Inhalt der Datei &#039;&#039;&#039;{{PAServerOSXAppFile}}&#039;&#039;&#039; durchsuchen und &#039;&#039;&#039;paserver&#039;&#039;&#039; starten:&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt;-Befehle und die &#039;&#039;&#039;TAB&#039;&#039;&#039;-Taste. Um beispielsweise den Ordner &amp;quot;Applications&amp;quot; (vom Benutzerverzeichnis auf dem Mac aus) zu starten, geben Sie Folgendes ein:&lt;br /&gt;
#:&amp;lt;code&amp;gt;IhrName $ &#039;&#039;&#039;cd /A&#039;&#039;&#039;&amp;lt;/code&amp;gt; &amp;amp;lt;TAB&amp;amp;gt; &amp;amp;lt;EINGABE&amp;amp;gt;&lt;br /&gt;
# Zeigen Sie den Inhalt des &amp;quot;Applications&amp;quot;-Ordners durch folgende Eingabe an:&lt;br /&gt;
#:  &amp;lt;code&amp;gt; Applications IhrName $ &#039;&#039;&#039;ls&#039;&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
#: Im &amp;quot;Applications&amp;quot;-Verzeichnis sollte &#039;&#039;&#039;{{PAServerOSXAppFile}}&#039;&#039;&#039; angezeigt werden.&lt;br /&gt;
# Navigieren Sie durch das &#039;&#039;&#039;PAServer {{VersionNumber}}&#039;&#039;&#039;-Paket, indem Sie die Anfangsbuchstaben jedes Ordners eingeben und die Taste &#039;&#039;&#039;TAB&#039;&#039;&#039; drücken:&lt;br /&gt;
#:&amp;lt;code&amp;gt;Applications IhrName $ &#039;&#039;&#039;cd PAS&#039;&#039;&#039;&amp;lt;/code&amp;gt; &amp;amp;lt;TAB&amp;amp;gt;&lt;br /&gt;
#::&lt;br /&gt;
#:::&#039;&#039;&#039;&amp;lt;code&amp;gt;Con&amp;lt;/code&amp;gt;&#039;&#039;&#039;  &amp;amp;lt;TAB&amp;amp;gt;&lt;br /&gt;
#::::&#039;&#039;&#039;&amp;lt;code&amp;gt;Mac&amp;lt;/code&amp;gt;&#039;&#039;&#039; &amp;amp;lt;TAB&amp;amp;gt;&lt;br /&gt;
#::::: &#039;&#039;&#039;&amp;lt;code&amp;gt;pas&amp;lt;/code&amp;gt; &amp;amp;lt;TAB&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
#:Nun sollte die folgende Befehlszeile angezeigt werden:&lt;br /&gt;
#:&amp;lt;code&amp;gt; Applications IhrName $ /Applications/PAServer\ &amp;amp;lt;Version&amp;amp;gt;.app/Contents/MacOS/paserver&amp;lt;/code&amp;gt;&lt;br /&gt;
# Drücken Sie die &#039;&#039;&#039;EINGABE&#039;&#039;&#039;-Taste, um den Befehl auszuführen.&lt;br /&gt;
# Im MacOS-Verzeichnis wird &amp;quot;paserver&amp;quot; angezeigt.  Geben Sie folgenden Befehl ein:&lt;br /&gt;
#: &amp;lt;code&amp;gt;MacOS IhrName $ &#039;&#039;&#039;./paserver&#039;&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
#:&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Auf dem Mac müssen Sie jedem Ausführen-Befehl die Zeichen &#039;&#039;&#039;&amp;lt;code&amp;gt;./&amp;lt;/code&amp;gt;&#039;&#039;&#039; voranstellen.&lt;br /&gt;
# Drücken Sie die &#039;&#039;&#039;EINGABE&#039;&#039;&#039;-Taste.&lt;br /&gt;
&lt;br /&gt;
===Beispiel: Festlegen der Port-Nummer beim Starten von PAServer von der Befehlszeile===&lt;br /&gt;
&lt;br /&gt;
Sie können mehrere Instanzen von PAServer ausführen, solange jeder Server eine eindeutige Port-Nummer verwendet.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie die Befehlszeilenoption &amp;lt;code&amp;gt;-port&amp;lt;/code&amp;gt; hinzu, wenn Sie PAServer ausführen:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;MacOS IhrName $ &#039;&#039;&#039;./paserver -port=64444&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen finden Sie unter [[Festlegen von Optionen für den Platform Assistant|Festlegen von Optionen für den Platform Assistant]].&lt;br /&gt;
&lt;br /&gt;
==Anmelden beim Platform Assistant==&lt;br /&gt;
&lt;br /&gt;
Nach dem Start von paserver zeigt der &amp;quot;Platform Assistant&amp;quot; ein Banner und dann die Passworteingabeaufforderung an:&lt;br /&gt;
&lt;br /&gt;
  Connection Profile password &amp;amp;lt;press Enter for no password&amp;amp;gt;: &lt;br /&gt;
&lt;br /&gt;
# Bei der Passworteingabeaufforderung haben Sie folgende Möglichkeiten:&lt;br /&gt;
#* Geben Sie ein Passwort Ihrer Wahl ein, und drücken Sie die &#039;&#039;&#039;EINGABE&#039;&#039;&#039;-Taste. Für die Verbindung zu diesem &amp;quot;Platform Assistant&amp;quot; ist dann dieses Passwort erforderlich.&lt;br /&gt;
#* Wenn Sie kein Passwort für die Verbindung zu diesem &amp;quot;Platform Assistant&amp;quot; festlegen möchten, drücken Sie die &#039;&#039;&#039;EINGABE&#039;&#039;&#039;-Taste.&lt;br /&gt;
# Wird der &amp;quot;Platform Assistant&amp;quot; während einer Sitzung auf dem Mac zum ersten Mal gestartet, wird das Dialogfeld &#039;&#039;&#039;Developer Tools Access&#039;&#039;&#039; angezeigt:&lt;br /&gt;
#:[[Image:TakeControl.png|400px]]&lt;br /&gt;
#* Geben Sie das Passwort für den Mac ein, und klicken Sie auf &#039;&#039;&#039;Take Control&#039;&#039;&#039; (Steuerung übernehmen), um das Debuggen mit dem &amp;quot;Platform Assistant&amp;quot; zuzulassen.  Dieses Passwort ist dasselbe, das Sie eingeben, wenn Sie sich beim System anmelden; Administratorzugriff ist erforderlich. &lt;br /&gt;
#*:Sie können die Anmeldung entweder mit dem in diesem Dialogfeld angezeigten Benutzernamen fortsetzen oder einen anderen Benutzernamen eingeben.&lt;br /&gt;
#*&#039;&#039;&#039;Erneuter Versuch:&#039;&#039;&#039; Wenn Sie nicht das richtige Passwort eingeben oder den Vorgang abbrechen, startet der &amp;quot;Platform Assistant&amp;quot; normal, aber beim nächsten Versuch, eine Anwendung von {{Variables|Product}} aus mit dem &amp;quot;Platform Assistant&amp;quot; zu debuggen, werden Sie wieder zur Eingabe des Administratorpassworts aufgefordert. &lt;br /&gt;
#*: Siehe [[Übernahme der Berechtigung zur Debugging-Unterstützung auf einem Mac|Übernahme der Berechtigung zur Debugging-Unterstützung auf einem Mac]].&lt;br /&gt;
&lt;br /&gt;
Nach Ausführung dieser Schritte werden im Terminal-Fenster die beiden folgenden Zeilen angezeigt:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 Starting Platform Assistant Server on port 64211 &lt;br /&gt;
 &amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Eingabeaufforderung &amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt; gibt an, dass sich der &#039;&#039;&#039;Platform Assistant&#039;&#039;&#039; im Empfangsmodus für den angegebenen Port (standardmäßig Port &amp;lt;code&amp;gt;64211&amp;lt;/code&amp;gt;) befindet. Geben Sie den Befehl &amp;lt;code&amp;gt;h&amp;lt;/code&amp;gt; ein (geben Sie &amp;quot;h&amp;quot; ein, und drücken Sie die &#039;&#039;&#039;EINGABE&#039;&#039;&#039;-Taste), um die Liste der verfügbaren Befehle zusammen mit einer Beschreibung anzuzeigen. Geben Sie den Befehl &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; ein, um den &amp;quot;Platform Assistant&amp;quot; zu beenden.&lt;br /&gt;
&lt;br /&gt;
==Verbindungsprobleme==&lt;br /&gt;
&lt;br /&gt;
===Ausführen von PAServer bei aktivierter Mac-Firewall===&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Mac die Firewall aktiviert ist, wird beim Start von PAServer auf dem Mac nach &amp;quot;Berechtigung zur Debugging-Unterstützung wird übernommen&amp;quot; folgende Meldung angezeigt:&lt;br /&gt;
&lt;br /&gt;
  Do you want the application &amp;quot;paserver&amp;quot; to accept incoming network connections?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Auch wenn Sie hier auf &amp;quot;Allow&amp;quot; (Zulassen) klicken, kann PAServer keine Verbindung von Ihrem Entwicklungssystem zu dem Mac herstellen.&lt;br /&gt;
Sie müssen PAServer ausdrücklich die Verwendung einer der folgenden Lösungen einräumen: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösung 1:&#039;&#039;&#039; Deaktivieren der Firewall auf dem Mac.  Gehen Sie dazu folgendermaßen vor:&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie auf dem Mac im Apple-Menü &#039;&#039;&#039;Systemeinstellungen&#039;&#039;&#039;.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Sicherheit&#039;&#039;&#039; und dann die Registerkarte &#039;&#039;&#039;Firewall&#039;&#039;&#039;.&lt;br /&gt;
# Klicken Sie auf das &#039;&#039;&#039;Schloss&#039;&#039;&#039;-Symbol in der linken unteren Ecke.&lt;br /&gt;
# Klicken Sie auf die Schaltfläche &#039;&#039;&#039;Stopp&#039;&#039;&#039;.&lt;br /&gt;
# Klicken Sie auf das &#039;&#039;&#039;Schloss&#039;&#039;&#039;-Symbol, und schließen Sie das Fenster &#039;&#039;&#039;Sicherheit&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösung 2:&#039;&#039;&#039; Zulassen, dass PAServer durch die Firewall auf den Mac zugreift. Gehen Sie dazu folgendermaßen vor:&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie auf dem Mac im Apple-Menü &#039;&#039;&#039;Systemeinstellungen&#039;&#039;&#039;.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;Sicherheit&#039;&#039;&#039; und dann die Registerkarte &#039;&#039;&#039;Firewall&#039;&#039;&#039;.&lt;br /&gt;
# Klicken Sie auf &#039;&#039;&#039;Firewall&#039;&#039;&#039;. (Wenn diese Schaltfläche deaktiviert ist, klicken Sie auf das &#039;&#039;&#039;Schloss&#039;&#039;&#039;-Symbol in der linken, unteren Ecke.)&lt;br /&gt;
# Klicken Sie auf das Plus-Zeichen (+), und navigieren Sie zum &#039;&#039;&#039;Applications&#039;&#039;&#039;-Ordner.&lt;br /&gt;
# Wählen Sie &#039;&#039;&#039;{{PAServerOSXAppFile}}&#039;&#039;&#039;, und klicken Sie dann auf &#039;&#039;&#039;Hinzufügen&#039;&#039;&#039;. Dadurch wird &#039;&#039;&#039;PAServer &amp;amp;lt;Version&amp;amp;gt;.app&#039;&#039;&#039; den in den &#039;&#039;&#039;FireWall-Optionen&#039;&#039;&#039; aufgeführten Apps hinzugefügt.&lt;br /&gt;
# So fügen Sie die binäre paserver-Datei hinzu:&lt;br /&gt;
## Klicken Sie auf das Pluszeichen (+).&lt;br /&gt;
## Drücken Sie die Tasten &amp;lt;code&amp;gt;BEFEHL-UMSCHALT-G&amp;lt;/code&amp;gt;.&lt;br /&gt;
## Geben Sie in &#039;&#039;&#039;Gehe zum Ordner:&#039;&#039;&#039; den vollständigen Pfad zu &#039;&#039;&#039;paserver&#039;&#039;&#039; ein. Zum Beispiel:&lt;br /&gt;
##:&amp;lt;code&amp;gt; /Applications/PAServer &amp;amp;lt;Version&amp;amp;gt;.app/Contents/MacOS &amp;lt;/code&amp;gt;&lt;br /&gt;
## Der Inhalt des MacOS-Verzeichnisses wird angezeigt. Suchen Sie &#039;&#039;&#039;paserver&#039;&#039;&#039;, und doppelklicken Sie darauf. Damit wird die binäre paserver-Datei den Apps in den &#039;&#039;&#039;FireWall-Optionen&#039;&#039;&#039; hinzugefügt.&lt;br /&gt;
# Klicken Sie auf das &#039;&#039;&#039;Schloss&#039;&#039;&#039;-Symbol, und schließen Sie das Fenster &#039;&#039;&#039;Sicherheit&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[Ausführen des Platform Assistant auf dem Mac|Ausführen des Platform Assistant auf dem Mac]].&lt;br /&gt;
&lt;br /&gt;
===Herstellen einer Verbindung zu einem PAServer, wenn der Port verwendet wird===&lt;br /&gt;
&lt;br /&gt;
Möglicherweise wird der folgende Fehler angezeigt, wenn Sie versuchen, PAServer auf dem Mac auszuführen und der Socket verwendet wird (vielleicht von einer Instanz von PAServer, die bereits ausgeführt wird oder auf die nicht mehr zugegriffen werden kann):&lt;br /&gt;
&lt;br /&gt;
 Message: Could not bind socket. Address and port are already in use.&lt;br /&gt;
&lt;br /&gt;
Führen Sie zur Lösung dieses Problems einen der folgenden Schritte aus:&lt;br /&gt;
&lt;br /&gt;
* Verwenden der vorhandenen Instanz von PAServer.&lt;br /&gt;
* Anhalten der vorhandenen Instanz von PAServer.&lt;br /&gt;
* Beenden der vorhandenen Instanz von PAServer wie folgt:&lt;br /&gt;
*# Geben Sie im Terminalfenster &amp;lt;code&amp;gt;ps -a&amp;lt;/code&amp;gt; ein.&lt;br /&gt;
*# Suchen Sie die Instanz von PAServer und deren PID-Nummer.&lt;br /&gt;
*# Geben Sie folgenden Befehl ein: &amp;lt;code&amp;gt;kill &amp;amp;lt;pid&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
&lt;br /&gt;
* [[Mobile-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Mac (iOS)|Mobile-Tutorial: Konfigurieren der Entwicklungsumgebung auf dem Mac (iOS)]]&lt;br /&gt;
* [[Installieren des Platform Assistant auf dem Mac|Installieren des Platform Assistant auf dem Mac]]&lt;br /&gt;
* [[Ausführen des Platform Assistant unter Windows|Ausführen des Platform Assistant unter Windows]]&lt;br /&gt;
* [[Ausführen von iOS-Anwendungen auf einem iOS-Gerät|Ausführen von iOS-Anwendungen auf einem iOS-Gerät]]&lt;br /&gt;
* [[Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC|Erstellen und Testen eines Verbindungsprofils auf dem Entwicklungs-PC]]&lt;br /&gt;
* [[Ausführen von PAServer Manager auf dem Mac|Ausführen von PAServer Manager auf dem Mac]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Ausfuhren des Platform Assistant auf dem Mac}}&lt;br /&gt;
[[Category:IOS]]&lt;br /&gt;
[[Category:OS X]]&lt;br /&gt;
[[Category:XE4]]&lt;br /&gt;
[[Category:AMMigrate]]&lt;br /&gt;
&lt;br /&gt;
[[en:Running the Platform Assistant on a Mac]]&lt;br /&gt;
[[fr:Exécution de Platform Assistant sur un Mac]]&lt;br /&gt;
[[ja:Mac でのプラットフォーム アシスタントの実行]]&lt;/div&gt;</summary>
		<author><name>Esabatell</name></author>
	</entry>
</feed>