<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.aquasoft.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Steffen.binas</id>
	<title>AquaSoft Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.aquasoft.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Steffen.binas"/>
	<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php/Spezial:Beitr%C3%A4ge/Steffen.binas"/>
	<updated>2026-05-16T07:06:35Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Bildobjekt&amp;diff=1217</id>
		<title>Bildobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Bildobjekt&amp;diff=1217"/>
		<updated>2017-01-06T10:58:31Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Bildobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IPicture&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IPicture &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function Filename: [[IFilename]];&lt;br /&gt;
    function Sound: [[ISound]];&lt;br /&gt;
    function Content: [[IPictureContent]];&lt;br /&gt;
    property Properties: TPictureProperties read GetProperties write SetProperties;&lt;br /&gt;
  end; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  TPictureProperties = record&lt;br /&gt;
    Width, Height: Integer;&lt;br /&gt;
    Orientation: TImageOrientation;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Objekt Erzeugung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function CreatePictureObject: IPicture;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ein Bildobjekt benötigt einen Dateinamen zu dem gespeicherten Bild. Dieser ist als &amp;#039;&amp;#039;&amp;#039;[[IFilename]]&amp;#039;&amp;#039;&amp;#039; im Bild gespeichert:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Filename: IFilename;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ein Bildobjekt kann eine Soundspur enthalten. Der Datentyp dieser ist ein &amp;#039;&amp;#039;&amp;#039;[[ISound]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Sound: ISound;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zugriff auf Inhalt Bildobjekt (also das Bild selbst, ohne Metadaten) vom Typ &amp;#039;&amp;#039;&amp;#039;[[IPictureContent]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Content: IPictureContent;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Shaderobjekt&amp;diff=1214</id>
		<title>Shaderobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Shaderobjekt&amp;diff=1214"/>
		<updated>2016-09-09T14:18:01Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Bildobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IShader&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IShader &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function Filename: [[IFilename]];&lt;br /&gt;
    procedure SetTechnique(TechniqueName: string);&lt;br /&gt;
    procedure SetParamInt(ParamName: string; Value: Integer);&lt;br /&gt;
    procedure SetParamFloat(ParamName: string; Value: Float);&lt;br /&gt;
    procedure SetParamFloat2(ParamName: string; V1, V2: Single);&lt;br /&gt;
    procedure SetParamFloat3(ParamName: string; V1, V2, V3: Single);&lt;br /&gt;
    procedure SetParamFloat4(ParamName: string; V1, V2, V3, V4: Single);&lt;br /&gt;
    procedure SetParamRangeValue(ParamName: string; Value: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue2(ParamName: string; V1, V2: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue3(ParamName: string; V1, V2, V3: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue4(ParamName: string; V1, V2, V3, V4: IRangeValue);&lt;br /&gt;
    function GetPostProcessing: Boolean;&lt;br /&gt;
    procedure SetPostProcessing(const Value: Boolean);&lt;br /&gt;
    function GetMeshColumns: Integer;&lt;br /&gt;
    procedure SetMeshColumns(const P: Integer);&lt;br /&gt;
    function GetMeshRows: Integer;&lt;br /&gt;
    procedure SetMeshRows(const P: Integer);&lt;br /&gt;
    procedure SetMesh(const Mesh: TVertexArray; const Indices: TIndexArray);&lt;br /&gt;
    procedure AddTexture(const Texture: ICanvas);&lt;br /&gt;
    procedure SetTexture(const TextureIndex: Integer; const Texture: ICanvas);&lt;br /&gt;
    function GetTexture(const TextureIndex: Integer): ICanvas;&lt;br /&gt;
    procedure DeleteTexture(const TextureIndex: Integer);&lt;br /&gt;
    procedure ClearTextures;&lt;br /&gt;
    function TextureCount: Integer;&lt;br /&gt;
    property DrawPersistent: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Objekt Erzeugung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function CreateShaderObject: IShader;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der Dateiname des Shaders. Hierbei ist eine konkreter Quelltextdatei eines [[HLSL-Shader|HLSL-Shaders]] für DirectX 9 gemeint (meist *.fx).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Falls im Shaderquelltext mehr als eine Shader-Technik enthalten ist, kann sie über SetTechnique gesetzt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetTechnique(TechniqueName: string);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ein Shader benötigt verschiedene Parameter. Welche das sind und hängt vom tatsächlich verwendeten Shader ab. Über die SetParamXXX-Funktionen können entsprechende Werte an den Shader übergeben werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetParamInt(ParamName: string; Value: Integer);&lt;br /&gt;
  procedure SetParamFloat(ParamName: string; Value: Float);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DrawPersistent: Damit ein Bildgebendes ShaderObjekt liegen bleibt, muss DrawPersistent = True sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
== Pixelshader-Effekte ==&lt;br /&gt;
&lt;br /&gt;
Verpixeln: Presets\Scripts\Pixelate.sss&lt;br /&gt;
&lt;br /&gt;
== Eigene Geometrie übergeben == &lt;br /&gt;
&lt;br /&gt;
Vollständiger Code, siehe Toolbox-Objekt &amp;quot;Dreieck&amp;quot;: Presets\Scripts\GeometryTriangle.sss&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Mesh: TVertexArray;&lt;br /&gt;
  &lt;br /&gt;
  // Dreieck:&lt;br /&gt;
  //&lt;br /&gt;
  // (-0.5, 0.5)----(0, 0.5)----(0.5, 0.5)&lt;br /&gt;
  // |                /\                 |&lt;br /&gt;
  // |             /      \              |&lt;br /&gt;
  // |           /          \            |&lt;br /&gt;
  // |        /                \         |&lt;br /&gt;
  // |      /       (0, 0)       \       |&lt;br /&gt;
  // |   /                         \     |&lt;br /&gt;
  // | /                             \   |&lt;br /&gt;
  // (-0.5, -0.5)--------------(0.5, -0.5)&lt;br /&gt;
  &lt;br /&gt;
  // Mesh := [Vertex(0, 0.5), Vertex(0.5, 0.5), Vertex(-0.5, 0.5)];&lt;br /&gt;
  Mesh.SetLength(3);&lt;br /&gt;
  Mesh[0] := Vertex(0, 0.5);&lt;br /&gt;
  Mesh[1] := Vertex(0.5, -0.5);&lt;br /&gt;
  Mesh[2] := Vertex(-0.5, -0.5);&lt;br /&gt;
  Shader.SetMesh(Mesh, []);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Bildinhalt-Objekt&amp;diff=1213</id>
		<title>Bildinhalt-Objekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Bildinhalt-Objekt&amp;diff=1213"/>
		<updated>2016-07-20T15:21:18Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Bildinhalt-Objejt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IPictureContent&amp;#039;&amp;#039;&amp;#039;. Es leitet vom &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Das Bildinhalt ist das konkrete Bild. Während das [[Bildobjekt]] beispielsweise zusätzlich zu seinem Inhalt auch diverse Metadaten, wie den Dateinamen hält, sind mit dem Inhalt die konkreten Bilddaten gemeint. Das [[Collagenobjekt]] wird ebenfalls als ein zusammengefasstes Bild behandelt und hat als solches auch ein Bildinhalt-Objekt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IPictureContent &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    procedure AppendEffect (const Item: [[IEffect]]);&lt;br /&gt;
    procedure SetStretchMode(sm: Integer);&lt;br /&gt;
    function GetStretchMode: Integer;&lt;br /&gt;
    procedure SetFillBackground(fillBG: Integer);&lt;br /&gt;
    function GetFillBackground: Integer;&lt;br /&gt;
    function GetFace (const Index: Integer): [[IFace]];&lt;br /&gt;
    function GetFaceCount: Integer;&lt;br /&gt;
    function GetFillColor: Integer;&lt;br /&gt;
    function SetFillColor(Value: Integer);&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Auf Bildobjekte können Effekte angewendet werden. Diese sind vom Typ &amp;#039;&amp;#039;&amp;#039;[[IEffect]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AppendEffect (const Item: IEffect);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Die Anpassung des Bildes an das DiaShow-Bildverhältnis festlegen&lt;br /&gt;
** Wert &amp;#039;&amp;#039;0&amp;#039;&amp;#039;: Seitenverhältnis des Bildes erhalten&lt;br /&gt;
** Wert &amp;#039;&amp;#039;1&amp;#039;&amp;#039;: zuschneiden&lt;br /&gt;
** Wert &amp;#039;&amp;#039;2&amp;#039;&amp;#039;: verzerren&lt;br /&gt;
** Wert &amp;#039;&amp;#039;3&amp;#039;&amp;#039;: intelligent zuschneiden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetStretchMode(sm: Integer);&lt;br /&gt;
  function GetStretchMode: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Hintergrund füllen: Ausgeschaltet bleiben die vorher gezeichneten Bilder liegen.&lt;br /&gt;
** Wert &amp;#039;&amp;#039;0&amp;#039;&amp;#039;: Aus&lt;br /&gt;
** Wert &amp;#039;&amp;#039;1&amp;#039;&amp;#039;: An&lt;br /&gt;
** Wert &amp;#039;&amp;#039;2&amp;#039;&amp;#039;: Automatisch&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetFillBackground(fillBG: Integer);&lt;br /&gt;
  function GetFillBackground: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Auf Bildobjekten können Gesichter erkannt werden. &amp;#039;&amp;#039;GetFace&amp;#039;&amp;#039; gibt das x-te Gesicht als &amp;#039;&amp;#039;&amp;#039;[[IFace]]&amp;#039;&amp;#039;&amp;#039; zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetFace (const Index: Integer): IFace;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Die Anzahl der erkannten Gesichter&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetFaceCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Gallery&amp;diff=1206</id>
		<title>Gallery</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Gallery&amp;diff=1206"/>
		<updated>2015-09-22T07:58:18Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;Gallery&amp;#039;&amp;#039; ist eine möglicher Wert, den das &amp;#039;&amp;#039;&amp;#039;Type&amp;#039;&amp;#039;&amp;#039;-Element des [[Dokumentation der GUI-API|GUI-Strings]] erhalten kann. Es wird eine Bilderanzeige generiert.&lt;br /&gt;
&lt;br /&gt;
Speichert einen Wert des Typs &amp;#039;&amp;#039;&amp;#039;String&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
= Optionen =&lt;br /&gt;
* &amp;quot;ImageDir&amp;quot;: Pfad zu den einzufügenden Bildern, relativ zum Diashow-Presets-Ordner. Datentyp: String&lt;br /&gt;
Das ImageDir kann einen einfachen Ordner angeben, zum Beispiel &amp;quot;MyImagePath&amp;quot;. Dann werden einfach alle gefundenen und unterstützten Bilder in die Galerie geladen. Gibt man hingegen &amp;quot;MyImagePath\\*&amp;quot; (Achten Sie auf das doppelte Backslash!) an, dann erstellt die Galerie Unterkategorien aus den Unterordnern. Haben sie also in &amp;quot;MyImagePath&amp;quot; die Ordner &amp;quot;Privates&amp;quot;, &amp;quot;Tiere&amp;quot; und &amp;quot;Urlaub&amp;quot;, dann sehen Sie in der Galerie die Kategorien &amp;quot;Privates&amp;quot;, &amp;quot;Tiere&amp;quot; und &amp;quot;Urlaub&amp;quot;, in denen die direkt aus den entsprechenden Ordnern befindlichen Bilder angezeigt werden. Die Galerie arbeitet nicht rekursiv.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;NonePicture&amp;quot;: true/false - lässt die Option &amp;quot;kein Bild&amp;quot; zu bzw. nicht zu&lt;br /&gt;
* &amp;quot;OwnPicture&amp;quot;: true/false - lässt die Option ein eigenes Bild aus dem Dateisystem auszuwählen zu bzw. nicht zu&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;Key&amp;quot; : &amp;quot;ImgComboBox1&amp;quot;,&lt;br /&gt;
    &amp;quot;Type&amp;quot; : &amp;quot;ImageComboBox&amp;quot;,&lt;br /&gt;
    &amp;quot;Caption&amp;quot; : &amp;quot;MyImgComboBox&amp;quot;,&lt;br /&gt;
    &amp;quot;Options&amp;quot; :&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;ImageDir&amp;quot; : &amp;quot;MyImagePath\\*&amp;quot;,&lt;br /&gt;
        &amp;quot;NonePicture&amp;quot;: true,&lt;br /&gt;
        &amp;quot;OwnPicture&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Gallery&amp;diff=1205</id>
		<title>Gallery</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Gallery&amp;diff=1205"/>
		<updated>2015-09-22T07:57:43Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;Gallery&amp;#039;&amp;#039; ist eine möglicher Wert, den das &amp;#039;&amp;#039;&amp;#039;Type&amp;#039;&amp;#039;&amp;#039;-Element des [[Dokumentation der GUI-API|GUI-Strings]] erhalten kann. Es wird eine Bilderanzeige generiert.&lt;br /&gt;
&lt;br /&gt;
Speichert einen Wert des Typs &amp;#039;&amp;#039;&amp;#039;String&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
= Optionen =&lt;br /&gt;
* &amp;quot;ImageDir&amp;quot;: Pfad zu den einzufügenden Bildern, relativ zum Diashow-Presets-Ordner. Datentyp: String&lt;br /&gt;
Das ImageDir kann einen einfachen Ordner angeben, zum Beispiel &amp;quot;MyImagePath&amp;quot;. Dann werden einfach alle gefundenen und unterstützten Bilder in die Galerie geladen. Gibt man hingegen &amp;quot;MyImagePath\\*&amp;quot; (Achten Sie auf das doppelte Backslash!) an, dann erstellt die Galerie Unterkategorien aus den Unterordnern. Haben sie also in &amp;quot;MyImagePath&amp;quot; die Ordner &amp;quot;Privates&amp;quot;, &amp;quot;Tiere&amp;quot; und &amp;quot;Urlaub&amp;quot;, dann sehen Sie in der Galerie die Kategorien &amp;quot;Privates&amp;quot;, &amp;quot;Tiere&amp;quot; und &amp;quot;Urlaub&amp;quot;, in denen die direkt aus den entsprechenden Ordnern befindlichen Bilder angezeigt werden. Die Galerie arbeitet nicht rekursiv.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;NonePicture&amp;quot;: true/false - lässt die Option &amp;quot;kein Bild&amp;quot; zu bzw. nicht zu&lt;br /&gt;
* &amp;quot;OwnPicture&amp;quot;: true/false - lässt die Option ein eigenes Bild aus dem Dateisystem auszuwählen zu bzw. nicht zu&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;Key&amp;quot; : &amp;quot;ImgComboBox1&amp;quot;,&lt;br /&gt;
    &amp;quot;Type&amp;quot; : &amp;quot;ImageComboBox&amp;quot;,&lt;br /&gt;
    &amp;quot;Caption&amp;quot; : &amp;quot;MyImgComboBox&amp;quot;,&lt;br /&gt;
    &amp;quot;Options&amp;quot; :&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;ImageDir&amp;quot; : &amp;quot;MyImagePath\\*&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1204</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1204"/>
		<updated>2015-08-17T12:59:11Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt. Die Werte verstehen sich als Winkeladditionen eines Basisvektoren, der die Standardrichtung angibt. Bei X = 0, Y = 0 und Z = 0 zeigt dieser Basisvektor nach rechts. Als erstes wird um Z rotiert, dann um Y, dann um X.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Maximale Stärke der Abweichungsbewegung. Die Stärke ist in Prozent der maximalen Partikelgröße angegeben. Stärke = 100 heißt also, dass ein Partikel nach oben unten so weit ausschlägt, wie es selbst groß ist. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt die Anzahl der Bildwechsel pro Sekunde an&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird. Mindestwert = 100ms&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet. Angabe in Prozent des Bildschirms.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Exclude: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen. Einige Optionen sind nur für [[TParticleEnvironment|Environment]] = peGlobal sinnvoll:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel 1 =&lt;br /&gt;
&lt;br /&gt;
Wird dieses Script einem Partikelobjekt zugeordnet, wird das Partikelsystem wie folgt konfiguriert:&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure OnExpandSlideShow(SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    var Particle := SlideShowObject as IParticle;&lt;br /&gt;
    Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
    Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
    Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
    Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
    Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
    Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel 2 =&lt;br /&gt;
&lt;br /&gt;
Wird dieses Script einem Partikelobjekt zugeordnet, lässt es die Partikel um die X-Achse im 3D-Raum rotieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure OnExpandSlideShow(SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    var ParticleObject: IParticle = SlideShowObject as IParticle;&lt;br /&gt;
    &lt;br /&gt;
    ParticleObject.InitialRotationFrequency.SetValueX(0, 0, 0.8); // Angabe in Hz   &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1203</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1203"/>
		<updated>2015-08-12T09:43:37Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Beispiel: Spuren untereinander anordnen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\&amp;lt;Benutzername&amp;gt;\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag. Falls der Ordner nicht vorhanden ist, legen Sie ihn einfach an.&lt;br /&gt;
&lt;br /&gt;
= Bearbeiten und Debuggen =&lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten nutzen Sie die integrierte Entwicklungsumgebung die Sie über &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; öffnen können, sofern der [[Entwicklermodus]] aktiviert ist. Sie können Scripts hier schreiben, Syntaxfehler ansehen aber auch die Ausführung debuggen, mit Haltepunkten, Schrittweiser ausführung und Werteüberwachung.&lt;br /&gt;
&lt;br /&gt;
= Beispiel: Spuren untereinander anordnen =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i; // Spurnummer setzen&lt;br /&gt;
      Item.Offset := 0; // Abstand zum Spuranfang entfernen)&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: [[IParameters]]);&lt;br /&gt;
  begin&lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks(Item as ISlideShowObject);  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel: Zugriff auf Parameter =&lt;br /&gt;
&lt;br /&gt;
In diesem Scriptlet definiert die GUI zwei Werte, die vom Anwender eingebbar sind. Hier wird die GUI über die Hilfsfunktion [[GUIControl]] zusammengebaut, was etwas übersichtlicher ist, als direkt einen JSON-Script zu konstruieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
    + GUIControl(&amp;#039;&amp;#039;, &amp;#039;Scriptlet-Titel&amp;#039;, cGUITitle)&lt;br /&gt;
    + &amp;#039;,&amp;#039; + GUIControl(&amp;#039;&amp;#039;, &amp;#039;Scriptlet-Beschreibung&amp;#039;, cGUIDescription) // verwenden Sie &amp;#039;Description&amp;#039; anstelle von cGUIDescription, falls die Konstante noch nicht definiert ist.&lt;br /&gt;
    + &amp;#039;,&amp;#039; + GUIControl(&amp;#039;key1&amp;#039;, &amp;#039;Ein String-Wert&amp;#039;, cGUIEdit)&lt;br /&gt;
    + &amp;#039;,&amp;#039; + GUIControl(&amp;#039;key2&amp;#039;, &amp;#039;Ein anderer Wert&amp;#039;, cGUISlider, &amp;#039;&amp;quot;Min&amp;quot;:0, &amp;quot;Max&amp;quot;:100, &amp;quot;Increment&amp;quot;:5, &amp;quot;Center&amp;quot;:25, &amp;quot;Unit&amp;quot;: &amp;quot;%&amp;quot;, &amp;quot;Decimals&amp;quot;: 1&amp;#039;)&lt;br /&gt;
    + &amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: [[IParameters]]);&lt;br /&gt;
  begin&lt;br /&gt;
    var wert1 := Parameters.GetValueAsString(&amp;#039;key1&amp;#039;);&lt;br /&gt;
    var wert2 := Parameters.GetValueAsFloat(&amp;#039;key2&amp;#039;);&lt;br /&gt;
    &lt;br /&gt;
    // ...&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1200</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1200"/>
		<updated>2015-03-23T16:50:40Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: Beispiel für Parameterzugriff hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\&amp;lt;Benutzername&amp;gt;\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag. Falls der Ordner nicht vorhanden ist, legen Sie ihn einfach an.&lt;br /&gt;
&lt;br /&gt;
= Bearbeiten und Debuggen =&lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten nutzen Sie die integrierte Entwicklungsumgebung die Sie über &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; öffnen können, sofern der [[Entwicklermodus]] aktiviert ist. Sie können Scripts hier schreiben, Syntaxfehler ansehen aber auch die Ausführung debuggen, mit Haltepunkten, Schrittweiser ausführung und Werteüberwachung.&lt;br /&gt;
&lt;br /&gt;
= Beispiel: Spuren untereinander anordnen =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i; // Spurnummer setzen&lt;br /&gt;
      Item.Offset := 0; // Abstand zum Spuranfang entfernen)&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: [[IParameters]]);&lt;br /&gt;
  begin&lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks(Item as ISlideShowObject);  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel: Zugriff auf Parameter =&lt;br /&gt;
&lt;br /&gt;
In diesem Scriptlet definiert die GUI zwei Werte, die vom Anwender eingebbar sind. Hier wird die GUI über die Hilfsfunktion [[GUIControl]] zusammengebaut, was etwas übersichtlicher ist, als direkt einen JSON-Script zu konstruieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
    + GUIControl(&amp;#039;&amp;#039;, &amp;#039;Scriptlet-Titel&amp;#039;, cGUITitle)&lt;br /&gt;
    + &amp;#039;,&amp;#039; + GUIControl(&amp;#039;&amp;#039;, &amp;#039;Scriptlet-Beschreibung&amp;#039;, cGUIDescription) // verwenden Sie &amp;#039;Description&amp;#039; anstelle von cGUIDescription, falls die Konstante noch nicht definiert ist.&lt;br /&gt;
    + &amp;#039;,&amp;#039; + GUIControl(&amp;#039;key1&amp;#039;, &amp;#039;Ein String-Wert&amp;#039;, cGUIEdit)&lt;br /&gt;
    + &amp;#039;,&amp;#039; + GUIControl(&amp;#039;key2&amp;#039;, &amp;#039;Ein anderer Wert&amp;#039;, cGUISlider, &amp;#039;&amp;quot;Min&amp;quot;:0, &amp;quot;Max&amp;quot;:100, &amp;quot;Increment&amp;quot;:5, &amp;quot;Center&amp;quot;:25, &amp;quot;Unit&amp;quot;: &amp;quot;%&amp;quot;, &amp;quot;Decimals&amp;quot;: 1&amp;#039;)&lt;br /&gt;
    + &amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: [[IParameters]]);&lt;br /&gt;
  begin&lt;br /&gt;
    var wert1 := Parameters.GetValueAsString(&amp;#039;key1&amp;#039;);&lt;br /&gt;
    var wert2 := Parameters.GetValueAsFloat(&amp;#039;key2&amp;#039;);&lt;br /&gt;
    &lt;br /&gt;
    // ...&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=IParameters&amp;diff=1199</id>
		<title>IParameters</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=IParameters&amp;diff=1199"/>
		<updated>2015-03-23T16:29:23Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: Die Seite wurde neu angelegt: „&amp;lt;code&amp;gt;   IParameters     procedure SetValueAsString(const Key: String; const Value: String);     function GetValueAsString(const Key: String): String;         …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  IParameters&lt;br /&gt;
    procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
    function GetValueAsString(const Key: String): String;&lt;br /&gt;
    &lt;br /&gt;
    procedure SetValueAsFloat(const Key: String; const Value: Single);&lt;br /&gt;
    function GetValueAsFloat(const Key: String): Single;&lt;br /&gt;
    &lt;br /&gt;
    procedure SetValueAsInteger(const Key: String; const Value: Int64);&lt;br /&gt;
    function GetValueAsInteger(const Key: String): Int64;&lt;br /&gt;
    &lt;br /&gt;
    procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
    function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1198</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1198"/>
		<updated>2015-03-23T16:27:33Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\&amp;lt;Benutzername&amp;gt;\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag. Falls der Ordner nicht vorhanden ist, legen Sie ihn einfach an.&lt;br /&gt;
&lt;br /&gt;
= Bearbeiten und Debuggen =&lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten nutzen Sie die integrierte Entwicklungsumgebung die Sie über &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; öffnen können, sofern der [[Entwicklermodus]] aktiviert ist. Sie können Scripts hier schreiben, Syntaxfehler ansehen aber auch die Ausführung debuggen, mit Haltepunkten, Schrittweiser ausführung und Werteüberwachung.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i; // Spurnummer setzen&lt;br /&gt;
      Item.Offset := 0; // Abstand zum Spuranfang entfernen)&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: [[IParameters]]);&lt;br /&gt;
  begin&lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks(Item as ISlideShowObject);  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekte&amp;diff=1197</id>
		<title>DiaShow-Objekte</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekte&amp;diff=1197"/>
		<updated>2015-02-27T16:54:49Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Neben den [http://code.google.com/p/dwscript/wiki/Language Befehlen], die Ihnen die Programmiersprache direkt zur Verfügung stellt, gibt haben Sie Zugriff auf die Objekte der Diashow (sonst wäre das ganze ja auch ziemlich sinnlos). Objekte der DiaShow sind die Bilder, Texte, Videos etc. eben alles aus dem sich eine Diashow zusammensetzen kann.&lt;br /&gt;
&lt;br /&gt;
= Verfügbare DiaShow-Objekte =&lt;br /&gt;
&lt;br /&gt;
* [[IPicture]] - Bilder&lt;br /&gt;
* [[IText]] - Text&lt;br /&gt;
* [[ISound]] - Sounds&lt;br /&gt;
* [[IVideo]] - Videos/Filme&lt;br /&gt;
* [[IParticle]] - Partikel&lt;br /&gt;
* [[IChapter]] - Kapitel&lt;br /&gt;
* [[ICollage]] - Statische Collage&lt;br /&gt;
* [[ITransformation]] - Flexi-Collage&lt;br /&gt;
* [[IPath]] - Animierter Pfad / Routenanimation&lt;br /&gt;
* [[IShader]] - Pixelshadereffekte, die auf der GPU laufen&lt;br /&gt;
* [[IBlackboxContainer]] - Kapitelobjekte, die als Kindelemente Container für Effektinhalte dienen&lt;br /&gt;
&lt;br /&gt;
Es gibt für jedes Objekt eine Create-Methode, z.B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var pic: IPicture;&lt;br /&gt;
  pic := CreatePicture;&lt;br /&gt;
  var text: IText;&lt;br /&gt;
  text := CreateText;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Allgemeinere Objekte =&lt;br /&gt;
* [[ISlideShowObject]] - DiaShow-Objekt - Basis für alle Objekte.&lt;br /&gt;
* [[ICanvas]] - Leinwandobjekt/Zeichenfläche zum Zeichnen bzw. Pixelzugriff auf Bilder&lt;br /&gt;
* [[IMoveable]], [[IPanable]] - Zugriff auf Bewegungspfad und Kameraschwenk&lt;br /&gt;
&lt;br /&gt;
= Entwickler-Objekte =&lt;br /&gt;
&lt;br /&gt;
Folgende Objekte stehen in der Toolbox nur zur Verfügung, wenn der Entwicklermodus aktiviert wurde:&lt;br /&gt;
&lt;br /&gt;
* Transparentes Kapitel&lt;br /&gt;
* &amp;quot;Laufende Linie&amp;quot;&lt;br /&gt;
* Blackbox&lt;br /&gt;
* Blackbox, horizontal&lt;br /&gt;
* Blackbox, vertikal&lt;br /&gt;
* Geometrische Form&lt;br /&gt;
* Shader&lt;br /&gt;
&lt;br /&gt;
Diese Objekte haben keine richtige Benutzeroberfläche und sind auf die Steuerung per Script angewiesen bzw. haben selbst steuernde Wirkung. Manche Objekte funktionieren nur in einem ganz bestimmten Kontext. Die Entwickler-Objekte werden nun genauer beschrieben:&lt;br /&gt;
&lt;br /&gt;
== Blackbox == &lt;br /&gt;
&lt;br /&gt;
Eine Blackbox verhält sich wie eine Flexi-Collage, aber ohne Überblendung und ohne Hintergrundfarbe. Was bleibt ist die Möglichkeit, einen Bewegungspfad und einen Kameraschwenk zuzuweisen. Alle in einer Blackbox befindlichen Objekten erben diesen Pfad und Schwenk, so wie es auch bei Flexi-Collagen der Fall ist. &lt;br /&gt;
&lt;br /&gt;
Eine Blackbox wird normalerweise Container für beliebige weitere Objekte verwendet. Ein an die Blackbox angehängtes Script, manipuliert dann den Inhalt in beliebiger Weise. Meist enthält das Script auch eine [[GUI-API|Benutzeroberfläche]], um den Nutzer verschiedene Parameter zur Verfügung zu stellen.&lt;br /&gt;
&lt;br /&gt;
Im Script ist das Blackbox-Objekt einfach nur ein [[ISlideShowObject]], dass aber die Interfaces [[IMoveable]] und [[IPanable]] implementiert.&lt;br /&gt;
&lt;br /&gt;
== Blackbox, horizontal == &lt;br /&gt;
&lt;br /&gt;
Wie &amp;quot;Blackbox&amp;quot; nur erlaupt die Timeline es nicht, in diesem Objekt mehrere Spuren anzulegen. Ebenso sind Abstände zwischen den Objekten nicht erlaubt. Dieses Objekt wird z.B. als Container für Bilder innerhalb von &amp;quot;Intelligen Vorlagen&amp;quot; eingesetzt. Hier soll der Nutzer keine komplexen Strukturen ablegen dürfen, da diese in die Vorlagen nicht übernommen werden könnten.&lt;br /&gt;
&lt;br /&gt;
== Blackbox, vertikal ==&lt;br /&gt;
&lt;br /&gt;
Wie &amp;quot;Blackbox&amp;quot; nur werden alle eingefügten Objekte auf die Dauer des vertikalen Blackbox gestreckt und jedes erscheint auf einer eigenen Spur.&lt;br /&gt;
&lt;br /&gt;
== Transparentes Kapitel ([[IBlackboxContainer]]) ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;quot;Transparentes Kapitel&amp;quot; ist kein Objekt mit Funktion innerhalb der Präsentation, sondern dient als Hilfselement für die Benutzeroberfläche, nämlich zur Beschriftung der Spuren. Es ist dafür ausgelegt innerhalb eines Blackbox-Objekts verwendet zu werden. Außerhalb davon ist die Funktionsweise undefiniert. Ein &amp;quot;Transparentes Kapitel&amp;quot; hat immer mindestens die Dauer seines Elternelements, kann aber selbst größer werden. Ansonsten verhält es sich wie ein normales Kapitel, d.h. es unterstützt beliebig viele Spuren und Abstände zwischen den Objekten. Aus Scriptingsicht ist das Objekt ein [[IBlackboxContainer]].&lt;br /&gt;
&lt;br /&gt;
Als Anwendungsbeispiel dient z.B. die &amp;quot;Dynamische Maske&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:TransparentesKapitel.png]]&lt;br /&gt;
&lt;br /&gt;
Dieser Effekt besteht aus einer Blackbox, der ein Script angehängt wurde, und zwei transparenten Kapiteln. Die beiden &amp;quot;Transparenten Kapitel&amp;quot; bieten einfach nur Platz für die zwei unterschiedlichen Funkionen (Maske und Inhalt). Das Script schaut in die beiden &amp;quot;Transparenten Kapitel&amp;quot; und macht damit &amp;quot;etwas&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Geometrische Form ==&lt;br /&gt;
&lt;br /&gt;
Objekt hat keine Funktion. Es war ursprünglich dafür Gedacht, Dreicke oder andere Formen darzustellen. Dafür kann aber das [[IShader|Shader-Objekt]] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Shader ([[IShader]]) ==&lt;br /&gt;
&lt;br /&gt;
Über das Shader-Objekt lassen sich Pixelshader ausführen. Ein Shader-Objekt wird immer per Script angelegt und konfiguriert (ist also niemals in der Timeline zu sehen). Es benötigt zum Wirken mindestens den Dateinamen eines [[HLSL-Shader|Pixelshaders (HLSL)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Shaderobjekt&amp;diff=1196</id>
		<title>Shaderobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Shaderobjekt&amp;diff=1196"/>
		<updated>2015-02-27T16:52:18Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Bildobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IShader&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IShader &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function Filename: [[IFilename]];&lt;br /&gt;
    procedure SetTechnique(TechniqueName: string);&lt;br /&gt;
    procedure SetParamInt(ParamName: string; Value: Integer);&lt;br /&gt;
    procedure SetParamFloat(ParamName: string; Value: Float);&lt;br /&gt;
    procedure SetParamFloat2(ParamName: string; V1, V2: Single);&lt;br /&gt;
    procedure SetParamFloat3(ParamName: string; V1, V2, V3: Single);&lt;br /&gt;
    procedure SetParamFloat4(ParamName: string; V1, V2, V3, V4: Single);&lt;br /&gt;
    procedure SetParamRangeValue(ParamName: string; Value: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue2(ParamName: string; V1, V2: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue3(ParamName: string; V1, V2, V3: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue4(ParamName: string; V1, V2, V3, V4: IRangeValue);&lt;br /&gt;
    function GetPostProcessing: Boolean;&lt;br /&gt;
    procedure SetPostProcessing(const Value: Boolean);&lt;br /&gt;
    function GetMeshColumns: Integer;&lt;br /&gt;
    procedure SetMeshColumns(const P: Integer);&lt;br /&gt;
    function GetMeshRows: Integer;&lt;br /&gt;
    procedure SetMeshRows(const P: Integer);&lt;br /&gt;
    procedure SetMesh(const Mesh: TVertexArray; const Indices: TIndexArray);&lt;br /&gt;
    procedure AddTexture(const Texture: ICanvas);&lt;br /&gt;
    procedure SetTexture(const TextureIndex: Integer; const Texture: ICanvas);&lt;br /&gt;
    function GetTexture(const TextureIndex: Integer): ICanvas;&lt;br /&gt;
    procedure DeleteTexture(const TextureIndex: Integer);&lt;br /&gt;
    procedure ClearTextures;&lt;br /&gt;
    function TextureCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Objekt Erzeugung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function CreateShaderObject: IShader;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der Dateiname des Shaders. Hierbei ist eine konkreter Quelltextdatei eines [[HLSL-Shader|HLSL-Shaders]] für DirectX 9 gemeint (meist *.fx).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Falls im Shaderquelltext mehr als eine Shader-Technik enthalten ist, kann sie über SetTechnique gesetzt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetTechnique(TechniqueName: string);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ein Shader benötigt verschiedene Parameter. Welche das sind und hängt vom tatsächlich verwendeten Shader ab. Über die SetParamXXX-Funktionen können entsprechende Werte an den Shader übergeben werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetParamInt(ParamName: string; Value: Integer);&lt;br /&gt;
  procedure SetParamFloat(ParamName: string; Value: Float);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
== Pixelshader-Effekte ==&lt;br /&gt;
&lt;br /&gt;
Verpixeln: Presets\Scripts\Pixelate.sss&lt;br /&gt;
&lt;br /&gt;
== Eigene Geometrie übergeben == &lt;br /&gt;
&lt;br /&gt;
Vollständiger Code, siehe Toolbox-Objekt &amp;quot;Dreieck&amp;quot;: Presets\Scripts\GeometryTriangle.sss&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Mesh: TVertexArray;&lt;br /&gt;
  &lt;br /&gt;
  // Dreieck:&lt;br /&gt;
  //&lt;br /&gt;
  // (-0.5, 0.5)----(0, 0.5)----(0.5, 0.5)&lt;br /&gt;
  // |                /\                 |&lt;br /&gt;
  // |             /      \              |&lt;br /&gt;
  // |           /          \            |&lt;br /&gt;
  // |        /                \         |&lt;br /&gt;
  // |      /       (0, 0)       \       |&lt;br /&gt;
  // |   /                         \     |&lt;br /&gt;
  // | /                             \   |&lt;br /&gt;
  // (-0.5, -0.5)--------------(0.5, -0.5)&lt;br /&gt;
  &lt;br /&gt;
  // Mesh := [Vertex(0, 0.5), Vertex(0.5, 0.5), Vertex(-0.5, 0.5)];&lt;br /&gt;
  Mesh.SetLength(3);&lt;br /&gt;
  Mesh[0] := Vertex(0, 0.5);&lt;br /&gt;
  Mesh[1] := Vertex(0.5, -0.5);&lt;br /&gt;
  Mesh[2] := Vertex(-0.5, -0.5);&lt;br /&gt;
  Shader.SetMesh(Mesh, []);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Shaderobjekt&amp;diff=1195</id>
		<title>Shaderobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Shaderobjekt&amp;diff=1195"/>
		<updated>2015-02-27T16:46:38Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Bildobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IShader&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IShader &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function Filename: [[IFilename]];&lt;br /&gt;
    procedure SetTechnique(TechniqueName: string);&lt;br /&gt;
    procedure SetParamInt(ParamName: string; Value: Integer);&lt;br /&gt;
    procedure SetParamFloat(ParamName: string; Value: Float);&lt;br /&gt;
    procedure SetParamFloat2(ParamName: string; V1, V2: Single);&lt;br /&gt;
    procedure SetParamFloat3(ParamName: string; V1, V2, V3: Single);&lt;br /&gt;
    procedure SetParamFloat4(ParamName: string; V1, V2, V3, V4: Single);&lt;br /&gt;
    procedure SetParamRangeValue(ParamName: string; Value: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue2(ParamName: string; V1, V2: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue3(ParamName: string; V1, V2, V3: IRangeValue);&lt;br /&gt;
    procedure SetParamRangeValue4(ParamName: string; V1, V2, V3, V4: IRangeValue);&lt;br /&gt;
    function GetPostProcessing: Boolean;&lt;br /&gt;
    procedure SetPostProcessing(const Value: Boolean);&lt;br /&gt;
    function GetMeshColumns: Integer;&lt;br /&gt;
    procedure SetMeshColumns(const P: Integer);&lt;br /&gt;
    function GetMeshRows: Integer;&lt;br /&gt;
    procedure SetMeshRows(const P: Integer);&lt;br /&gt;
    procedure SetMesh(const Mesh: TVertexArray; const Indices: TIndexArray);&lt;br /&gt;
    procedure AddTexture(const Texture: ICanvas);&lt;br /&gt;
    procedure SetTexture(const TextureIndex: Integer; const Texture: ICanvas);&lt;br /&gt;
    function GetTexture(const TextureIndex: Integer): ICanvas;&lt;br /&gt;
    procedure DeleteTexture(const TextureIndex: Integer);&lt;br /&gt;
    procedure ClearTextures;&lt;br /&gt;
    function TextureCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Objekt Erzeugung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function CreateShaderObject: IShader;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der Dateiname des Shaders. Hierbei ist eine konkreter Quelltextdatei eines [[HLSL-Shader|HLSL-Shaders]] für DirectX 9 gemeint (meist *.fx).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Falls im Shaderquelltext mehr als eine Shader-Technik enthalten ist, kann sie über SetTechnique gesetzt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetTechnique(TechniqueName: string);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ein Shader benötigt verschiedene Parameter. Welche das sind und hängt vom tatsächlich verwendeten Shader ab. Über die SetParamXXX-Funktionen können entsprechende Werte an den Shader übergeben werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetParamInt(ParamName: string; Value: Integer);&lt;br /&gt;
  procedure SetParamFloat(ParamName: string; Value: Float);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Beispiel, um dem Shader eigene Geometrie zu übergeben, siehe Toolbox-Objekt &amp;quot;Dreieck&amp;quot;: Presets\Scripts\GeometryTriangle.sss&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Mesh: TVertexArray;&lt;br /&gt;
  &lt;br /&gt;
  // Dreieck:&lt;br /&gt;
  //&lt;br /&gt;
  // (-0.5, 0.5)----(0, 0.5)----(0.5, 0.5)&lt;br /&gt;
  // |                /\                 |&lt;br /&gt;
  // |             /      \              |&lt;br /&gt;
  // |           /          \            |&lt;br /&gt;
  // |        /                \         |&lt;br /&gt;
  // |      /       (0, 0)       \       |&lt;br /&gt;
  // |   /                         \     |&lt;br /&gt;
  // | /                             \   |&lt;br /&gt;
  // (-0.5, -0.5)--------------(0.5, -0.5)&lt;br /&gt;
  &lt;br /&gt;
  // Mesh := [Vertex(0, 0.5), Vertex(0.5, 0.5), Vertex(-0.5, 0.5)];&lt;br /&gt;
  Mesh.SetLength(3);&lt;br /&gt;
  Mesh[0] := Vertex(0, 0.5);&lt;br /&gt;
  Mesh[1] := Vertex(0.5, -0.5);&lt;br /&gt;
  Mesh[2] := Vertex(-0.5, -0.5);&lt;br /&gt;
  Shader.SetMesh(Mesh, []);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Datei:TransparentesKapitel.png&amp;diff=1194</id>
		<title>Datei:TransparentesKapitel.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Datei:TransparentesKapitel.png&amp;diff=1194"/>
		<updated>2015-02-27T16:18:23Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: Steffen.binas lud eine neue Version von „Datei:TransparentesKapitel.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Datei:TransparentesKapitel.png&amp;diff=1193</id>
		<title>Datei:TransparentesKapitel.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Datei:TransparentesKapitel.png&amp;diff=1193"/>
		<updated>2015-02-27T16:11:46Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekte&amp;diff=1192</id>
		<title>DiaShow-Objekte</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekte&amp;diff=1192"/>
		<updated>2015-02-27T16:11:12Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Neben den [http://code.google.com/p/dwscript/wiki/Language Befehlen], die Ihnen die Programmiersprache direkt zur Verfügung stellt, gibt haben Sie Zugriff auf die Objekte der Diashow (sonst wäre das ganze ja auch ziemlich sinnlos). Objekte der DiaShow sind die Bilder, Texte, Videos etc. eben alles aus dem sich eine Diashow zusammensetzen kann.&lt;br /&gt;
&lt;br /&gt;
= Verfügbare DiaShow-Objekte =&lt;br /&gt;
&lt;br /&gt;
* [[IPicture]] - Bilder&lt;br /&gt;
* [[IText]] - Text&lt;br /&gt;
* [[ISound]] - Sounds&lt;br /&gt;
* [[IVideo]] - Videos/Filme&lt;br /&gt;
* [[IParticle]] - Partikel&lt;br /&gt;
* [[IChapter]] - Kapitel&lt;br /&gt;
* [[ICollage]] - Statische Collage&lt;br /&gt;
* [[ITransformation]] - Flexi-Collage&lt;br /&gt;
* [[IPath]] - Animierter Pfad / Routenanimation&lt;br /&gt;
* [[IShader]] - Pixelshadereffekte, die auf der GPU laufen&lt;br /&gt;
* [[IBlackboxContainer]] - Kapitelobjekte, die als Kindelemente Container für Effektinhalte dienen&lt;br /&gt;
&lt;br /&gt;
Es gibt für jedes Objekt eine Create-Methode, z.B. so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var pic: IPicture;&lt;br /&gt;
  pic := CreatePicture;&lt;br /&gt;
  var text: IText;&lt;br /&gt;
  text := CreateText;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Allgemeinere Objekte =&lt;br /&gt;
* [[ISlideShowObject]] - DiaShow-Objekt - Basis für alle Objekte.&lt;br /&gt;
* [[ICanvas]] - Leinwandobjekt/Zeichenfläche zum Zeichnen bzw. Pixelzugriff auf Bilder&lt;br /&gt;
* [[IMoveable]], [[IPanable]] - Zugriff auf Bewegungspfad und Kameraschwenk&lt;br /&gt;
&lt;br /&gt;
= Entwickler-Objekte =&lt;br /&gt;
&lt;br /&gt;
Folgende Objekte stehen in der Toolbox nur zur Verfügung, wenn der Entwicklermodus aktiviert wurde:&lt;br /&gt;
&lt;br /&gt;
* Transparentes Kapitel&lt;br /&gt;
* &amp;quot;Laufende Linie&amp;quot;&lt;br /&gt;
* Blackbox&lt;br /&gt;
* Blackbox, horizontal&lt;br /&gt;
* Blackbox, vertikal&lt;br /&gt;
* Geometrische Form&lt;br /&gt;
* Shader&lt;br /&gt;
&lt;br /&gt;
Diese Objekte haben keine richtige Benutzeroberfläche und sind auf die Steuerung per Script angewiesen bzw. haben selbst steuernde Wirkung. Manche Objekte funktionieren nur in einem ganz bestimmten Kontext. Die Entwickler-Objekte werden nun genauer beschrieben:&lt;br /&gt;
&lt;br /&gt;
== Blackbox == &lt;br /&gt;
&lt;br /&gt;
Eine Blackbox verhält sich wie eine Flexi-Collage, aber ohne Überblendung und ohne Hintergrundfarbe. Was bleibt ist die Möglichkeit, einen Bewegungspfad und einen Kameraschwenk zuzuweisen. Alle in einer Blackbox befindlichen Objekten erben diesen Pfad und Schwenk, so wie es auch bei Flexi-Collagen der Fall ist.&lt;br /&gt;
&lt;br /&gt;
== Blackbox, horizontal == &lt;br /&gt;
&lt;br /&gt;
Wie &amp;quot;Blackbox&amp;quot; nur erlaupt die Timeline es nicht, in diesem Objekt mehrere Spuren anzulegen. Ebenso sind Abstände zwischen den Objekten nicht erlaubt. Dieses Objekt wird z.B. als Container für Bilder innerhalb von &amp;quot;Intelligen Vorlagen&amp;quot; eingesetzt. Hier soll der Nutzer keine komplexen Strukturen ablegen dürfen, da diese in die Vorlagen nicht übernommen werden könnten.&lt;br /&gt;
&lt;br /&gt;
== Blackbox, vertikal ==&lt;br /&gt;
&lt;br /&gt;
Wie &amp;quot;Blackbox&amp;quot; nur werden alle eingefügten Objekte auf die Dauer des vertikalen Blackbox gestreckt und jedes erscheint auf einer eigenen Spur.&lt;br /&gt;
&lt;br /&gt;
== Transparentes Kapitel ==&lt;br /&gt;
&lt;br /&gt;
Ein Transparentes Kapitel ist kein Objekt mit Funktion innerhalb der Präsentation, sondern dient als Hilfselement für die Benutzeroberfläche. Es ist dafür ausgelegt innerhalb eines Blackbox-Objekts verwendet zu werden. Außerhalb davon ist die Funktionsweise undefiniert.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1190</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1190"/>
		<updated>2014-12-16T19:43:25Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\&amp;lt;Benutzername&amp;gt;\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag. Falls der Ordner nicht vorhanden ist, legen Sie ihn einfach an.&lt;br /&gt;
&lt;br /&gt;
= Bearbeiten und Debuggen =&lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten nutzen Sie die integrierte Entwicklungsumgebung die Sie über &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; öffnen können, sofern der [[Entwicklermodus]] aktiviert ist. Sie können Scripts hier schreiben, Syntaxfehler ansehen aber auch die Ausführung debuggen, mit Haltepunkten, Schrittweiser ausführung und Werteüberwachung.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i; // Spurnummer setzen&lt;br /&gt;
      Item.Offset := 0; // Abstand zum Spuranfang entfernen)&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: IParameters);&lt;br /&gt;
  begin&lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks(Item as ISlideShowObject);  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1186</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1186"/>
		<updated>2014-09-12T17:21:54Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Einbinden von Scriptlets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\&amp;lt;Benutzername&amp;gt;\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag. Falls der Ordner nicht vorhanden ist, legen Sie ihn einfach an.&lt;br /&gt;
&lt;br /&gt;
= Bearbeiten und Debuggen =&lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten nutzen Sie die integrierte Entwicklungsumgebung die Sie über &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; öffnen können, sofern der [[Entwicklermodus]] aktiviert ist. Sie können Scripts hier schreiben, Syntaxfehler ansehen aber auch die Ausführung debuggen, mit Haltepunkten, Schrittweiser ausführung und Werteüberwachung.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i;&lt;br /&gt;
      Item.Offset := 0; &lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: IParameters);&lt;br /&gt;
  begin&lt;br /&gt;
    if DocumentController.GetFirstSelected = nil then&lt;br /&gt;
      Exit;&lt;br /&gt;
    &lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks((Item as ISlideShowObject));  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1185</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1185"/>
		<updated>2014-09-12T12:47:06Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Einbinden von Scriptlets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\&amp;lt;Benutzername&amp;gt;\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag. Falls Ordner nicht vorhanden ist, legen Sie ihn einfach an.&lt;br /&gt;
&lt;br /&gt;
= Bearbeiten und Debuggen =&lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten nutzen Sie die integrierte Entwicklungsumgebung die Sie über &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; öffnen können, sofern der [[Entwicklermodus]] aktiviert ist. Sie können Scripts hier schreiben, Syntaxfehler ansehen aber auch die Ausführung debuggen, mit Haltepunkten, Schrittweiser ausführung und Werteüberwachung.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i;&lt;br /&gt;
      Item.Offset := 0; &lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: IParameters);&lt;br /&gt;
  begin&lt;br /&gt;
    if DocumentController.GetFirstSelected = nil then&lt;br /&gt;
      Exit;&lt;br /&gt;
    &lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks((Item as ISlideShowObject));  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1184</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1184"/>
		<updated>2014-09-12T12:44:36Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Einbinden von Scriptlets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\&amp;lt;Benutzername&amp;gt;\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag.&lt;br /&gt;
&lt;br /&gt;
= Bearbeiten und Debuggen =&lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten nutzen Sie die integrierte Entwicklungsumgebung die Sie über &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; öffnen können, sofern der [[Entwicklermodus]] aktiviert ist. Sie können Scripts hier schreiben, Syntaxfehler ansehen aber auch die Ausführung debuggen, mit Haltepunkten, Schrittweiser ausführung und Werteüberwachung.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i;&lt;br /&gt;
      Item.Offset := 0; &lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: IParameters);&lt;br /&gt;
  begin&lt;br /&gt;
    if DocumentController.GetFirstSelected = nil then&lt;br /&gt;
      Exit;&lt;br /&gt;
    &lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks((Item as ISlideShowObject));  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Entwicklermodus&amp;diff=1183</id>
		<title>Entwicklermodus</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Entwicklermodus&amp;diff=1183"/>
		<updated>2014-09-12T07:22:44Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Performance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Entwicklermodus bietet die DiaShow zusätzliche Bearbeitungsmöglichkeiten, die insbesondere der Erstellung von Vorlagen dienen.&lt;br /&gt;
&lt;br /&gt;
= Achtung =&lt;br /&gt;
&lt;br /&gt;
Der Entwicklermodus ist nicht für den täglichen Gebrauch bestimmt und kein &amp;quot;offizieller&amp;quot; Teil des Programms. Bei auftretende Problemen und Fragen können wir Ihnen keinen Support anbieten.&lt;br /&gt;
&lt;br /&gt;
= Entwicklermodus aktivieren =&lt;br /&gt;
&lt;br /&gt;
Sie aktivieren den Entwicklermodus über den Menüpunkt: &amp;#039;&amp;#039;Hilfe / Entwicklermodus&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
= Features des Entwicklermodus =&lt;br /&gt;
&lt;br /&gt;
* neues &amp;quot;Entwickler&amp;quot;-Tab bei den Objekt-Eigenschaften &lt;br /&gt;
* Scripting-Entwicklungsumgebung: &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; (siehe auch: [[Dokumentation der Scripting-API]])&lt;br /&gt;
* Vorlagen-Editor im DiaShow-Manager aktiviert&lt;br /&gt;
* Eine neue Kategorie namens &amp;quot;Developer&amp;quot; steht in der Toolbox zur Verfügung. Diese Objekte sind nur im Zusammenhang mit Scripts sinnvoll nutzbar.&lt;br /&gt;
&lt;br /&gt;
= Performance =&lt;br /&gt;
&lt;br /&gt;
Im Entwicklermodus sind einige wenige Optimierungsmaßnahmen ausgeschaltet, sodass die Arbeit mit dem Programm etwas langsamer ist als bei deaktiviertem Entwicklermodus.&lt;br /&gt;
&lt;br /&gt;
* Deaktivierter Cache beim Ausführen von Scripts&lt;br /&gt;
* Deaktivierter Cache für Pixelshader&lt;br /&gt;
&lt;br /&gt;
Nur so ist es möglich, dass Änderungen an Scripts oder Shadern gleich Auswirkungen beim nächsten Abspielen haben. Mit aktivierten Caches müsste sonst das Programm neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1182</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1182"/>
		<updated>2014-09-12T07:09:48Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\steffen.binas\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag.&lt;br /&gt;
&lt;br /&gt;
= Bearbeiten und Debuggen =&lt;br /&gt;
&lt;br /&gt;
Zum Bearbeiten nutzen Sie die integrierte Entwicklungsumgebung die Sie über &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; öffnen können, sofern der [[Entwicklermodus]] aktiviert ist. Sie können Scripts hier schreiben, Syntaxfehler ansehen aber auch die Ausführung debuggen, mit Haltepunkten, Schrittweiser ausführung und Werteüberwachung.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i;&lt;br /&gt;
      Item.Offset := 0; &lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: IParameters);&lt;br /&gt;
  begin&lt;br /&gt;
    if DocumentController.GetFirstSelected = nil then&lt;br /&gt;
      Exit;&lt;br /&gt;
    &lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks((Item as ISlideShowObject));  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1181</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1181"/>
		<updated>2014-09-12T07:04:24Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? [http://support.aquasoft.de Fragen Sie uns], denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
&lt;br /&gt;
= Einbinden von Scriptlets =&lt;br /&gt;
&lt;br /&gt;
Damit Scriptlets als Menüeintrag sichtbar werden, können Sie in einem der folgenden Ordner liegen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\Users\steffen.binas\AppData\Roaming\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets nur für den aktuellen Nutzer&lt;br /&gt;
* &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\&amp;lt;/code&amp;gt; - Scriptlets die hier liegen, sind für alle Nutzer des gleichen Computers sichtbar&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;DiaShowInstallationsverzeichnis&amp;gt;\Presets\Scriptlets&amp;lt;/code&amp;gt; - Achtung: Es wird nicht empfohlen hier eigenen Scriptlets zu speichern, denn 1. haben Sie in diesem Ordner normalerweise keine Schreibrechte und 2. verschwinden die Dateien nach jedem Programm-Update&lt;br /&gt;
 &lt;br /&gt;
Legen Sie einfach eine Datei mit der Endung .sss (also z.B. MeinScript.sss) in einem der o.g. Ordner an und starten Sie das Programm neu. Nur dann erscheint der Menüeintrag.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an.&lt;br /&gt;
Speichern Sie diesen Quelltext zum Ausprobieren hier ab: &amp;lt;code&amp;gt;c:\ProgramData\AquaSoft\DiaShow9\Scriptlets\SpurenUntereinander.sss&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i;&lt;br /&gt;
      Item.Offset := 0; &lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: IParameters);&lt;br /&gt;
  begin&lt;br /&gt;
    if DocumentController.GetFirstSelected = nil then&lt;br /&gt;
      Exit;&lt;br /&gt;
    &lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks((Item as ISlideShowObject));  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1180</id>
		<title>Scriptlets</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scriptlets&amp;diff=1180"/>
		<updated>2014-09-12T06:54:28Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: Die Seite wurde neu angelegt: „= Einführung = Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einführung =&lt;br /&gt;
Scriptlets sind kleine Erweiterungen des DiaShow-Programms. Sie können selbst kleine Erweiterungen schreiben, die dann als Menüpunkt sichtbar werden.&lt;br /&gt;
&lt;br /&gt;
= Möglichkeiten =&lt;br /&gt;
&lt;br /&gt;
Solche Erweiterungen können z.B. folgende Dinge mit Ihrer Show anstellen:&lt;br /&gt;
* EXIF-Daten auslesen&lt;br /&gt;
* Dauer und Position verändert&lt;br /&gt;
* Bewegungspfad und Kameraschwenk modifizieren&lt;br /&gt;
* Gestaltungsvorlagen laden und anwenden&lt;br /&gt;
* u.v.m.&lt;br /&gt;
* Fehlt Ihnen etwas? Frage Sie uns, denn entweder geht es bereits oder es lohnt sich vielleicht die API entsprechend zu erweitert.&lt;br /&gt;
 &lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Dieses Scriptlet ordnet alle Objekte innerhalb des markierten Kapitels untereinander an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // GUI&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  // Name und Beschreibung des Menüeintrags&lt;br /&gt;
  function OnGetGUI: string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;[&amp;#039;&lt;br /&gt;
  	  +&amp;#039;{&amp;quot;Caption&amp;quot;:&amp;quot;Untereinander anordnen&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Title&amp;quot;}&amp;#039;&lt;br /&gt;
  	  +&amp;#039;,{&amp;quot;Caption&amp;quot;:&amp;quot;Platziert alle Objekte eines Containers untereinander.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;Description&amp;quot;}&amp;#039;&lt;br /&gt;
    +&amp;#039;]&amp;#039;; &lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  // Ausführung&lt;br /&gt;
  //////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  procedure SetTracks(const SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    if SlideShowObject.Count = 0 then&lt;br /&gt;
      Exit;&lt;br /&gt;
  &lt;br /&gt;
    for var i := 0 to SlideShowObject.Count - 1 do&lt;br /&gt;
    begin&lt;br /&gt;
      var Item := SlideShowObject[i];&lt;br /&gt;
      Item.Track := i;&lt;br /&gt;
      Item.Offset := 0; &lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
  &lt;br /&gt;
  procedure OnExecute(Parameters: IParameters);&lt;br /&gt;
  begin&lt;br /&gt;
    if DocumentController.GetFirstSelected = nil then&lt;br /&gt;
      Exit;&lt;br /&gt;
    &lt;br /&gt;
    var Item := DocumentController.GetFirstSelected;&lt;br /&gt;
    while Item &amp;lt;&amp;gt; nil do&lt;br /&gt;
    begin&lt;br /&gt;
      SetTracks((Item as ISlideShowObject));  // Spuren für alle Kindelemente neu setzen&lt;br /&gt;
      Item := DocumentController.GetNextSelected(Item); // weiter zum nächsten markierten Eintrag&lt;br /&gt;
    end;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Installation/Deinstallation&amp;diff=1177</id>
		<title>Installation/Deinstallation</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Installation/Deinstallation&amp;diff=1177"/>
		<updated>2014-08-19T17:47:00Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Unvollständige Deinstallation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Seite wird Hinweise zur Installation und Deinstallation von AquaSoft-Produkten enthalten. &lt;br /&gt;
&lt;br /&gt;
= Problemfälle  =&lt;br /&gt;
&lt;br /&gt;
== Unvollständige Deinstallation  ==&lt;br /&gt;
&lt;br /&gt;
Führt man das Setup eines AquaSoft-Produktes aus, dessen Vorversion bereits auf dem selben Rechner installiert ist, so wird als erstes deren Deinstallation ausgeführt.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Gelegentlich machen Anwender dabei die Erfahrung, dass sie zum Ende der Deinstallation eine Benachrichtigung erhalten mit dem Wortlaut:  &lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;Das Installationspaket für AquaSoft &amp;amp;lt;Produktname&amp;amp;gt; stimmt nicht mehr mit dm Clientpaket überein. Wiederholen Sie die Installation mit einer gültigen Kopie des Installationspaketes &amp;#039;Setup.msi&amp;#039;.&amp;quot;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Als Ursache für diese Meldung und die im Anschluss daran erfolglosen Versuche, die neue Version zu installieren, hat sich das Löschen von für die Deinstallation der Vorversion benötigten Dateien herausgestellt. Sei es durch manuellen Eingriff durch den Anwender oder die Benutzung diverser Festplattenreinigungstools, diese wichtigen Ordner fallen des Öfteren dem Papierkorb anheim. Sie befinden sich unter Windows XP unter &amp;#039;&amp;#039;\Dokumente und Einstellungen\All Users\Anwendungsdaten\ &amp;#039;&amp;#039;und haben Bezeichnungen wie &amp;#039;&amp;#039;{5B8B7FD2-53B4-4000-88F2-B89FBBAA0C48}&amp;#039;&amp;#039;. Wenn solch ein Ordner Dateien enthält, sollte er nicht gelöscht werden. Leider lässt es sich nicht verhindern, dass das doch hin und wieder passiert. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wenn Sie das zuletzt installierte Installationspaket aufbewahrt haben, können Sie damit zuerst eine nochmalige Installation versuchen. Nach erfolgreichem Durchlauf wird im Anschluss auch das neue Setup funktionieren.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass das nicht funktioniert, enthält jedes AquaSoft-Produkt einen Support-Ordner und dieser eine Datei mit dem Namen &amp;#039;&amp;#039;&amp;#039;Uninstall_&amp;amp;lt;Programmname&amp;amp;gt;.bat&amp;#039;&amp;#039;&amp;#039;. Führt man diese Datei aus, werden überflüssige installationsspezifische Einträge aus der Registry gelöscht, und einer Neuinstallations ist der Weg geebnet. Es ist jedoch der Fall, dass zu dem Zeitpunkt, da die oben genannte Meldung auftaucht, der Installationsordner, und somit auch der Support-Ordner, bereits von der Festplatte entfernt sind und nur die hinderlichen Registrierungseinträge zurückgeblieben sind. D.h., es gibt keinen Zugriff auf die &amp;#039;&amp;#039;&amp;#039;Uninstall_&amp;amp;lt;Programmname&amp;amp;gt;.bat&amp;#039;&amp;#039;&amp;#039; mehr.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Als Lösung zu diesem Problem bieten wir zu jedem Programm auch einen kleinen Download an, der die &amp;#039;&amp;#039;&amp;#039;Uninstall_&amp;amp;lt;Programmname&amp;amp;gt;.bat&amp;#039;&amp;#039;&amp;#039; und eine Datei namens &amp;#039;&amp;#039;&amp;#039;RegTool.exe&amp;#039;&amp;#039;&amp;#039; enthält. Es ist jeweil eine ZIP-Datei, die entpackt werden muss, bevor die &amp;#039;&amp;#039;&amp;#039;Uninstall_&amp;amp;lt;Programmname&amp;amp;gt;.bat&amp;#039;&amp;#039;&amp;#039; gestartet werden kann.&amp;lt;br&amp;gt;&lt;br /&gt;
Wichtig ist, dass Sie die .bat-Datei &amp;lt;span style=&amp;quot;color:#DD5F2E&amp;quot;&amp;gt; &amp;#039;&amp;#039;&amp;#039;mit Administratorrechten starten&amp;#039;&amp;#039;&amp;#039; &amp;lt;/span&amp;gt;, weil sonst nicht alle Registryeinträge entfernt werden können. &lt;br /&gt;
&lt;br /&gt;
Es folgt eine Liste von Links zu den jeweiligen Downloads:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow8/UninstallDS8Easy.zip] DiaShow Easy&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow8/UninstallDS8EasyBeta.zip] DiaShow Easy Beta&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow8/UninstallDS8Ultimate.zip] DiaShow 8 Ultimate&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow8/UninstallDS8Premium.zip] DiaShow 8 Premium&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7BlueNet.zip] DiaShow 7 Blue Net&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7Ultimate.zip] DiaShow 7 Ultimate&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7UltimateBeta.zip] DiaShow 7 Ultimate Beta&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7Premium.zip] DiaShow 7 Premium&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7PremiumBeta.zip] DiaShow 7 Premium Beta&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow6/UninstallDSStudio6.zip] DiaShow Studio 6&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow6/UninstallDSDeluxe6.zip] DiaShow Deluxe 6&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow6/UninstallDSYouTube6.zip] DiaShow 6 für YouTube&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.aquasoft.de/download/files/discmenu2/UninstallDiscMenu2.zip] DiscMenu 2 &amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/earthpilot/UninstallEarthPilot.zip] Earth Pilot &amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.aquasoft.de/download/files/photoalbum3/UninstallPhotoAlbum3.zip] PhotoAlbum 3 &amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/photoalbum4/UninstallFotoszumAnfassen.zip] Fotos zum Anfassen &amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.aquasoft.de/download/files/photokalender3/UninstallPhotoKalender3.zip] PhotoKalender 3&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/screenshow3/UninstallScreenShow3.zip] ScreenShow 3&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/screenshow4/UninstallScreenShow4.zip] ScreenShow 4&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/webshow3/UninstallWebShow3.zip] WebShow 3&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:Allgemeines]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Vorlagen-Entwicklung&amp;diff=1102</id>
		<title>Vorlagen-Entwicklung</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Vorlagen-Entwicklung&amp;diff=1102"/>
		<updated>2014-04-14T09:58:46Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Einstellungsdialog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die AquaSoft DiaShow bietet vielfältige Möglichkeiten, intelligente Vorlagen zu entwickeln. Leider kann man nicht einfach eine beliebige Animation mit einem Klick zu einer wiederverwendbaren Vorlagen machen. &lt;br /&gt;
&lt;br /&gt;
Die grobe Vorgehensweise sieht so aus:&lt;br /&gt;
* Eine Vorlage besteht aus einer Benutzeroberfläche (GUI) und der eigentlichen Animation. &lt;br /&gt;
* Ein Script, dass der GUI angehängt ist, überträgt die Einstellungen aus der GUI an die Animation.&lt;br /&gt;
&lt;br /&gt;
= Benutzeroberfläche =&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei verschiedene Arten von Benutzeroberflächen in der DiaShow.&lt;br /&gt;
&lt;br /&gt;
== Einstellungsdialog ==&lt;br /&gt;
Einen Dialog mit Eingabefeldern und Reglern etc. ist bereits hier beschrieben: [[GUI-API]]&lt;br /&gt;
&lt;br /&gt;
Was über einen solchen Dialog aber nicht realisiert werden kann, ist z.B. das Einfügen von beliebig vielen Bildern.&lt;br /&gt;
&lt;br /&gt;
== Timeline-GUI ==&lt;br /&gt;
Damit eine Vorlage Platzhalter zum Einfügen von einzelnen oder beliebig vielen Bildern/Texten/Videos bekommt, wird sie in der Timeline aus Blackbox-Objekten, Bild- und Text-Objekten zusammengesetzt. Um zu verhindern, dass beim Verwenden der Vorlage, versehentlich wichtige Teile gelöscht oder verschoben werden, kann das über den &amp;quot;Entwickler&amp;quot;-Tab in den Objekt-Eigenschaften verhindert werden. Zudem lassen sich weitere Einstellungen machen, die der DiaShow sagen, wie die Vorlage funktioniert.&lt;br /&gt;
&lt;br /&gt;
=== Config-Tags ===&lt;br /&gt;
&lt;br /&gt;
Jedes Objekt kann eine beliebige Anzahl von Config-Tags bekommen. Config-Tags sind Name-Wert-Paare, die entweder vom DiaShow-Programm oder von Scripts ausgewertet werden können.&lt;br /&gt;
&lt;br /&gt;
z.B. Zeichenketten (ohne Anführungszeichen)&lt;br /&gt;
&lt;br /&gt;
  Nahrung = Pizza&lt;br /&gt;
&lt;br /&gt;
oder Zahlen (Dezimaltrennzeichen ist immer der Punkt &amp;quot;.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  Wert = 23.7&lt;br /&gt;
&lt;br /&gt;
Mehrere Config-Tags werden mit Semikolon getrennt &amp;quot;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nahrung = Pizza; Wert = 23.7&lt;br /&gt;
&lt;br /&gt;
Eine Sonderform von untergeordneten Werten ist möglich&lt;br /&gt;
&lt;br /&gt;
  Rechteck.Breite = 0.3; Rechteck.Höhe = 0.7;&lt;br /&gt;
&lt;br /&gt;
Werden untergeordnete Werte verwendet, ist es nicht möglich den Hauptnamen nocheinmal ohne . zu verwenden (also Rechteck = &amp;lt;Wert&amp;gt;).&lt;br /&gt;
==== Standard-Config-Tags ====&lt;br /&gt;
&lt;br /&gt;
Es gibt ein paar vordefinierte Tags, die eine besondere Bedeutung im Programm haben.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag&lt;br /&gt;
! Werte&lt;br /&gt;
! Eräuterung&lt;br /&gt;
|-&lt;br /&gt;
| control&lt;br /&gt;
| &lt;br /&gt;
| Gibt an, welches Steuerelement in der Programm-Oberfläche verwendet werden soll.&lt;br /&gt;
|-&lt;br /&gt;
| || textedit || Ein einzeiliges Texteingabefeld (z.B. für die Eingabe einer Überschrift) &lt;br /&gt;
|-&lt;br /&gt;
| || textmemo || Ein mehrzeiliges Texteingabefeld (z.B. für einen Abspannscroller)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Vorlagen-Entwicklung&amp;diff=1101</id>
		<title>Vorlagen-Entwicklung</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Vorlagen-Entwicklung&amp;diff=1101"/>
		<updated>2014-04-14T09:58:16Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: Die Seite wurde neu angelegt: „Die AquaSoft DiaShow bietet vielfältige Möglichkeiten, intelligente Vorlagen zu entwickeln. Leider kann man nicht einfach eine beliebige Animation mit einem …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die AquaSoft DiaShow bietet vielfältige Möglichkeiten, intelligente Vorlagen zu entwickeln. Leider kann man nicht einfach eine beliebige Animation mit einem Klick zu einer wiederverwendbaren Vorlagen machen. &lt;br /&gt;
&lt;br /&gt;
Die grobe Vorgehensweise sieht so aus:&lt;br /&gt;
* Eine Vorlage besteht aus einer Benutzeroberfläche (GUI) und der eigentlichen Animation. &lt;br /&gt;
* Ein Script, dass der GUI angehängt ist, überträgt die Einstellungen aus der GUI an die Animation.&lt;br /&gt;
&lt;br /&gt;
= Benutzeroberfläche =&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei verschiedene Arten von Benutzeroberflächen in der DiaShow.&lt;br /&gt;
&lt;br /&gt;
== Einstellungsdialog ==&lt;br /&gt;
Einen Dialog mit Eingabefeldern und Reglern etc. ist bereits hier beschrieben: [[GUI-API]]&lt;br /&gt;
Was über einen solchen Dialog aber nicht realisiert werden kann, ist z.B. das Einfügen von beliebig vielen Bildern.&lt;br /&gt;
&lt;br /&gt;
== Timeline-GUI ==&lt;br /&gt;
Damit eine Vorlage Platzhalter zum Einfügen von einzelnen oder beliebig vielen Bildern/Texten/Videos bekommt, wird sie in der Timeline aus Blackbox-Objekten, Bild- und Text-Objekten zusammengesetzt. Um zu verhindern, dass beim Verwenden der Vorlage, versehentlich wichtige Teile gelöscht oder verschoben werden, kann das über den &amp;quot;Entwickler&amp;quot;-Tab in den Objekt-Eigenschaften verhindert werden. Zudem lassen sich weitere Einstellungen machen, die der DiaShow sagen, wie die Vorlage funktioniert.&lt;br /&gt;
&lt;br /&gt;
=== Config-Tags ===&lt;br /&gt;
&lt;br /&gt;
Jedes Objekt kann eine beliebige Anzahl von Config-Tags bekommen. Config-Tags sind Name-Wert-Paare, die entweder vom DiaShow-Programm oder von Scripts ausgewertet werden können.&lt;br /&gt;
&lt;br /&gt;
z.B. Zeichenketten (ohne Anführungszeichen)&lt;br /&gt;
&lt;br /&gt;
  Nahrung = Pizza&lt;br /&gt;
&lt;br /&gt;
oder Zahlen (Dezimaltrennzeichen ist immer der Punkt &amp;quot;.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  Wert = 23.7&lt;br /&gt;
&lt;br /&gt;
Mehrere Config-Tags werden mit Semikolon getrennt &amp;quot;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nahrung = Pizza; Wert = 23.7&lt;br /&gt;
&lt;br /&gt;
Eine Sonderform von untergeordneten Werten ist möglich&lt;br /&gt;
&lt;br /&gt;
  Rechteck.Breite = 0.3; Rechteck.Höhe = 0.7;&lt;br /&gt;
&lt;br /&gt;
Werden untergeordnete Werte verwendet, ist es nicht möglich den Hauptnamen nocheinmal ohne . zu verwenden (also Rechteck = &amp;lt;Wert&amp;gt;).&lt;br /&gt;
==== Standard-Config-Tags ====&lt;br /&gt;
&lt;br /&gt;
Es gibt ein paar vordefinierte Tags, die eine besondere Bedeutung im Programm haben.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag&lt;br /&gt;
! Werte&lt;br /&gt;
! Eräuterung&lt;br /&gt;
|-&lt;br /&gt;
| control&lt;br /&gt;
| &lt;br /&gt;
| Gibt an, welches Steuerelement in der Programm-Oberfläche verwendet werden soll.&lt;br /&gt;
|-&lt;br /&gt;
| || textedit || Ein einzeiliges Texteingabefeld (z.B. für die Eingabe einer Überschrift) &lt;br /&gt;
|-&lt;br /&gt;
| || textmemo || Ein mehrzeiliges Texteingabefeld (z.B. für einen Abspannscroller)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Installation/Deinstallation&amp;diff=1098</id>
		<title>Installation/Deinstallation</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Installation/Deinstallation&amp;diff=1098"/>
		<updated>2014-03-14T09:55:15Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Unvollständige Deinstallation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Seite wird Hinweise zur Installation und Deinstallation von AquaSoft-Produkten enthalten. &lt;br /&gt;
&lt;br /&gt;
= Problemfälle  =&lt;br /&gt;
&lt;br /&gt;
== Unvollständige Deinstallation  ==&lt;br /&gt;
&lt;br /&gt;
Führt man das Setup eines AquaSoft-Produktes aus, dessen Vorversion bereits auf dem selben Rechner installiert ist, so wird als erstes deren Deinstallation ausgeführt.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Gelegentlich machen Anwender dabei die Erfahrung, dass sie zum Ende der Deinstallation eine Benachrichtigung erhalten mit dem Wortlaut &amp;quot;Das Installationspaket für AquaSoft &amp;amp;lt;Produktname&amp;amp;gt; stimmt nicht mehr mit dm Clientpaket überein. Wiederholen Sie die Installation mit einer gültigen Kopie des Installationspaketes &amp;#039;Setup.msi&amp;#039;.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Als Ursache für diese Meldung und die im Anschluss daran erfolglosen Versuche, die neue Version zu installieren, hat sich das Löschen von für die Deinstallation der Vorversion benötigten Dateien herausgestellt. Sei es durch manuellen Eingriff durch den Anwender oder die Benutzung diverser Festplattenreinigungstools, diese wichtigen Ordner fallen des Öfteren dem Papierkorb anheim. Sie befinden sich unter Windows XP unter &amp;#039;&amp;#039;\Dokumente und Einstellungen\All Users\Anwendungsdaten\ &amp;#039;&amp;#039;und haben Bezeichnungen wie &amp;#039;&amp;#039;{5B8B7FD2-53B4-4000-88F2-B89FBBAA0C48}&amp;#039;&amp;#039;. Wenn solch ein Ordner Dateien enthält, sollte er nicht gelöscht werden. Leider lässt es sich nicht verhindern, dass das doch hin und wieder passiert. Zu diesem Zweck enthält jedes AquaSoft-Produkt einen Support-Ordner und dieser eine Datei mit dem Namen &amp;#039;&amp;#039;&amp;#039;Uninstall_&amp;amp;lt;Programmname&amp;amp;gt;.bat&amp;#039;&amp;#039;&amp;#039;. Führt man diese Datei aus, werden überflüssige installationsspezifische Einträge aus der Registry gelöscht, und einer Neuinstallations ist der Weg geebnet. Es ist jedoch der Fall, dass zu dem Zeitpunkt, da die oben genannte Meldung auftaucht, der Installationsordner, und somit auch der Support-Ordner, bereits von der Festplatte entfernt sind und nur die hinderlichen Registrierungseinträge zurückgeblieben sind. D.h., es gibt keinen Zugriff auf die &amp;#039;&amp;#039;&amp;#039;Uninstall_&amp;amp;lt;Programmname&amp;amp;gt;.bat&amp;#039;&amp;#039;&amp;#039; mehr.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Als Lösung zu diesem Problem bieten wir zu jedem Programm einen kleinen Download an, der die &amp;#039;&amp;#039;&amp;#039;Uninstall_&amp;amp;lt;Programmname&amp;amp;gt;.bat&amp;#039;&amp;#039;&amp;#039; und eine Datei namens &amp;#039;&amp;#039;&amp;#039;RegTool.exe&amp;#039;&amp;#039;&amp;#039; enthält. Es ist jeweil eine ZIP-Datei, die entpackt werden muss, bevor die &amp;#039;&amp;#039;&amp;#039;Uninstall_&amp;amp;lt;Programmname&amp;amp;gt;.bat&amp;#039;&amp;#039;&amp;#039; gestartet werden kann. Wichtig ist, dass Sie die .bat-Datei &amp;#039;&amp;#039;&amp;#039;mit Administratorrechten starten&amp;#039;&amp;#039;&amp;#039;, weil sonst nicht alle Registryeinträge entfernt werden können. &lt;br /&gt;
&lt;br /&gt;
Es folgt eine Liste von Links zu den jeweiligen Downloads:&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow8/UninstallDS8Ultimate.zip] DiaShow 8 Ultimate&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow8/UninstallDS8Premium.zip] DiaShow 8 Premium&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7BlueNet.zip] DiaShow 7 Blue Net&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7Ultimate.zip] DiaShow 7 Ultimate&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7UltimateBeta.zip] DiaShow 7 Ultimate Beta&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7Premium.zip] DiaShow 7 Premium&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow7/UninstallDS7PremiumBeta.zip] DiaShow 7 Premium Beta&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow6/UninstallDSStudio6.zip] DiaShow Studio 6&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow6/UninstallDSDeluxe6.zip] DiaShow Deluxe 6&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/diashow6/UninstallDSYouTube6.zip] DiaShow 6 für YouTube&amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.aquasoft.de/download/files/discmenu2/UninstallDiscMenu2.zip] DiscMenu 2 &amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/earthpilot/UninstallEarthPilot.zip] Earth Pilot &amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.aquasoft.de/download/files/photoalbum3/UninstallPhotoAlbum3.zip] PhotoAlbum 3 &amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/photoalbum4/UninstallFotoszumAnfassen.zip] Fotos zum Anfassen &amp;lt;br&amp;gt;&lt;br /&gt;
*[http://www.aquasoft.de/download/files/photokalender3/UninstallPhotoKalender3.zip] PhotoKalender 3&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/screenshow3/UninstallScreenShow3.zip] ScreenShow 3&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/screenshow4/UninstallScreenShow4.zip] ScreenShow 4&amp;lt;br&amp;gt; &lt;br /&gt;
*[http://www.aquasoft.de/download/files/webshow3/UninstallWebShow3.zip] WebShow 3&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:Allgemeines]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1096</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1096"/>
		<updated>2013-09-04T14:28:58Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]): Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure CopyContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
    procedure MoveContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
    procedure Replace(const OldObject, NewObject: [[ISlideShowObject]]);&lt;br /&gt;
    function LoadASO(const Filename: string): [[ISlideShowObject]];&lt;br /&gt;
    function ResolveFilename(const RelativeFilename: string): string;&lt;br /&gt;
    function GetRatioX: Integer;&lt;br /&gt;
    function GetRatioY: Integer;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Toplevel-Objekte der Diashow&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Seitenverhältnis der Show abfragen (X:Y)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetRatioX: Integer;&lt;br /&gt;
  function GetRatioY: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Objekte einfügen, Kopieren oder verschieben&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure CopyContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
  procedure MoveContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ein Objekt gegen ein anderes Ersetzen. Das Neue Objekt darf noch nicht Teil der Diashow sein, sondern ist z.B. ein neu erzeugtes oder ein ober LoadASO geladenes.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Replace(const OldObject, NewObject: [[ISlideShowObject]]);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Eine Toolboxanimation laden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function LoadASO(const Filename: string): [[ISlideShowObject]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dateinamen auflösen (relativ nach absolut, wobei das Verzeichnis der Diashow mit einbezogen wird)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ResolveFilename(const RelativeFilename: string): string;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
* Fügt hinten an die Show ein (leeres) Bildobjekt an&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dieses Beispiel stellt die klassischen Form eine Intelligenten Vorlage dar. Eine ASO-Datei laden, Platzhalterbilder mit richtigen Dateinamen versehen und das aktuelle Objekt der Diashow gegen ASO austauschen. Dazu bedarf es folgender Voraussetzungen:&lt;br /&gt;
** Eine beliebige Animation/Collage etc. wird in der DiaShow gestaltet. Das auszutauschende Bild und Text bekommt auch Zugriffsnamen (hier &amp;quot;background_image&amp;quot; und &amp;quot;title&amp;quot;). Diese Animation wird in die Toolbox gezogen, sodass eine ASO-Datei daraus entsteht. Die ASO wird dann an einen Ort kopiert, auf den Scripte Zugriff haben.&lt;br /&gt;
** In der DiaShow wird ein Blackbox-Objekt mit z.B. einem Bild und einem Text erzeugt. Bild und Text bekommen einen &amp;quot;Zugriffsnamen&amp;quot; (hier &amp;quot;image&amp;quot; und &amp;quot;text&amp;quot;). Diesem Blackboxobjekt wird das hier gezeigte Script zugeordnet. Auch daraus wird eine ASO-Datei erzeugt. Die Vorlage kann nun durch Einfügen dieser ASO-Datei vom Anwender benutzt werden und stellt die &amp;quot;Benutzeroberfläche&amp;quot; für die Animation dar. Denn hieraus wird nur der Bilddateiname und der Textanteil übernommen und in die eigentliche Animation kopiert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure OnExpandSlideShow(SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    var ASO: ISlideShowObject = SlideShow.LoadASO(&amp;#039;meine_animation.aso&amp;#039;);&lt;br /&gt;
  &lt;br /&gt;
    // SlideShowObject ist das Blackbox-Objekt (also die &amp;quot;Benutzeroberfläche&amp;quot;)&lt;br /&gt;
    // Aufgabe: Übertrage Nutzereingaben aus der &amp;quot;Benutzeroberfläche&amp;quot; in die &lt;br /&gt;
    // Animation. Die Animation wird durch die ASO repräsentiert.    &lt;br /&gt;
    Inject.Filename.From(SlideShowObject).FindByName(&amp;#039;image&amp;#039;).To(ASO).FindByName(&amp;#039;background_image&amp;#039;).Execute;&lt;br /&gt;
    Inject.Text.From(SlideShowObject).FindByName(&amp;#039;text&amp;#039;).To(ASO).FindByName(&amp;#039;title&amp;#039;).Execute;&lt;br /&gt;
  &lt;br /&gt;
    [...] // weitere &amp;quot;Intelligenz&amp;quot; anwenden, z.B. Timing anpassen, Pfade berechnen etc.&lt;br /&gt;
  &lt;br /&gt;
    // die nun konfigurierte ASO in die Show einfügen und damit die &lt;br /&gt;
    // &amp;quot;Benutzeroberfläche&amp;quot; ersetzen.&lt;br /&gt;
    SlideShow.Replace(SlideShowObject, ASO);&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1095</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1095"/>
		<updated>2013-08-16T07:50:56Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]): Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure CopyContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
    procedure MoveContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
    procedure Replace(const OldObject, NewObject: [[ISlideShowObject]]);&lt;br /&gt;
    function LoadASO(const Filename: string): [[ISlideShowObject]];&lt;br /&gt;
    function GetRatioX: Integer;&lt;br /&gt;
    function GetRatioY: Integer;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Toplevel-Objekte der Diashow&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Seitenverhältnis der Show abfragen (X:Y)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetRatioX: Integer;&lt;br /&gt;
  function GetRatioY: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Objekte einfügen, Kopieren oder verschieben&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure CopyContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
  procedure MoveContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ein Objekt gegen ein anderes Ersetzen. Das Neue Objekt darf noch nicht Teil der Diashow sein, sondern ist z.B. ein neu erzeugtes oder ein ober LoadASO geladenes.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Replace(const OldObject, NewObject: [[ISlideShowObject]]);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Eine Toolboxanimation laden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function LoadASO(const Filename: string): [[ISlideShowObject]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
* Fügt hinten an die Show ein (leeres) Bildobjekt an&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dieses Beispiel stellt die klassischen Form eine Intelligenten Vorlage dar. Eine ASO-Datei laden, Platzhalterbilder mit richtigen Dateinamen versehen und das aktuelle Objekt der Diashow gegen ASO austauschen. Dazu bedarf es folgender Voraussetzungen:&lt;br /&gt;
** Eine beliebige Animation/Collage etc. wird in der DiaShow gestaltet. Das auszutauschende Bild und Text bekommt auch Zugriffsnamen (hier &amp;quot;background_image&amp;quot; und &amp;quot;title&amp;quot;). Diese Animation wird in die Toolbox gezogen, sodass eine ASO-Datei daraus entsteht. Die ASO wird dann an einen Ort kopiert, auf den Scripte Zugriff haben.&lt;br /&gt;
** In der DiaShow wird ein Blackbox-Objekt mit z.B. einem Bild und einem Text erzeugt. Bild und Text bekommen einen &amp;quot;Zugriffsnamen&amp;quot; (hier &amp;quot;image&amp;quot; und &amp;quot;text&amp;quot;). Diesem Blackboxobjekt wird das hier gezeigte Script zugeordnet. Auch daraus wird eine ASO-Datei erzeugt. Die Vorlage kann nun durch Einfügen dieser ASO-Datei vom Anwender benutzt werden und stellt die &amp;quot;Benutzeroberfläche&amp;quot; für die Animation dar. Denn hieraus wird nur der Bilddateiname und der Textanteil übernommen und in die eigentliche Animation kopiert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure OnExpandSlideShow(SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    var ASO: ISlideShowObject = SlideShow.LoadASO(&amp;#039;meine_animation.aso&amp;#039;);&lt;br /&gt;
  &lt;br /&gt;
    // SlideShowObject ist das Blackbox-Objekt (also die &amp;quot;Benutzeroberfläche&amp;quot;)&lt;br /&gt;
    // Aufgabe: Übertrage Nutzereingaben aus der &amp;quot;Benutzeroberfläche&amp;quot; in die &lt;br /&gt;
    // Animation. Die Animation wird durch die ASO repräsentiert.    &lt;br /&gt;
    Inject.Filename.From(SlideShowObject).FindByName(&amp;#039;image&amp;#039;).To(ASO).FindByName(&amp;#039;background_image&amp;#039;).Execute;&lt;br /&gt;
    Inject.Text.From(SlideShowObject).FindByName(&amp;#039;text&amp;#039;).To(ASO).FindByName(&amp;#039;title&amp;#039;).Execute;&lt;br /&gt;
  &lt;br /&gt;
    [...] // weitere &amp;quot;Intelligenz&amp;quot; anwenden, z.B. Timing anpassen, Pfade berechnen etc.&lt;br /&gt;
  &lt;br /&gt;
    // die nun konfigurierte ASO in die Show einfügen und damit die &lt;br /&gt;
    // &amp;quot;Benutzeroberfläche&amp;quot; ersetzen.&lt;br /&gt;
    SlideShow.Replace(SlideShowObject, ASO);&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1094</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1094"/>
		<updated>2013-08-16T07:32:28Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]): Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure CopyContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
    procedure MoveContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
    procedure Replace(const OldObject, NewObject: [[ISlideShowObject]]);&lt;br /&gt;
    function LoadASO(const Filename: string): [[ISlideShowObject]];&lt;br /&gt;
    function GetRatioX: Integer;&lt;br /&gt;
    function GetRatioY: Integer;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Toplevel-Objekte der Diashow&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Seitenverhältnis der Show abfragen (X:Y)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetRatioX: Integer;&lt;br /&gt;
  function GetRatioY: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Objekte einfügen, Kopieren oder verschieben&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  procedure CopyContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
  procedure MoveContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ein Objekt gegen ein anderes Ersetzen. Das Neue Objekt darf noch nicht Teil der Diashow sein, sondern ist z.B. ein neu erzeugtes oder ein ober LoadASO geladenes.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Replace(const OldObject, NewObject: [[ISlideShowObject]]);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Eine Toolboxanimation laden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function LoadASO(const Filename: string): [[ISlideShowObject]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
* Fügt hinten an die Show ein (leeres) Bildobjekt an&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Eine ASO-Datei laden, Platzhalterbilder mit richtigen Dateinamen versehen und das aktuelle Objekt der Diashow gegen ASO austauschen.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure OnExpandSlideShow(SlideShowObject: ISlideShowObject);&lt;br /&gt;
  begin&lt;br /&gt;
    var ASO: ISlideShowObject = LoadASO(&amp;#039;meine_animation.aso&amp;#039;);&lt;br /&gt;
  &lt;br /&gt;
    Inject.Filename.From(SlideShowObject).FindByName(&amp;#039;image&amp;#039;).To(ASO).FindByName(&amp;#039;background_image&amp;#039;).Execute;&lt;br /&gt;
  &lt;br /&gt;
    SlideShow.Replace(SlideShowObject, ASO);&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1093</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1093"/>
		<updated>2013-08-16T07:23:03Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]): Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure CopyContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
    procedure MoveContent(SrcContainer, DstContainer: [[ISlideShowObject]]);&lt;br /&gt;
    procedure Replace(const OldObject, NewObject: [[ISlideShowObject]]);&lt;br /&gt;
    function LoadASO(const Filename: string): [[ISlideShowObject]];&lt;br /&gt;
    function GetRatioX: Integer;&lt;br /&gt;
    function GetRatioY: Integer;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Toplevel-Objekte der Diashow&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Seitenverhältnis der Show abfragen (X:Y)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetRatioX: Integer;&lt;br /&gt;
  function GetRatioY: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture, 0, False); // Fügt hinten an die Show ein Bild an&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1092</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1092"/>
		<updated>2013-08-16T06:26:48Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]): Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure CopyContent(SrcContainer, DstContainer: ISlideShowObject);&lt;br /&gt;
    procedure MoveContent(SrcContainer, DstContainer: ISlideShowObject);&lt;br /&gt;
    procedure Replace(const OldObject, NewObject: IScripting_ISlideShowObject);&lt;br /&gt;
    function LoadASO(const Filename: string): IScripting_ISlideShowObject;&lt;br /&gt;
    function GetRatioX: Integer;&lt;br /&gt;
    function GetRatioY: Integer;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Toplevel-Objekte der Diashow&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Seitenverhältnis der Show abfragen (X:Y)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetRatioX: Integer;&lt;br /&gt;
  function GetRatioY: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture, 0, False); // Fügt hinten an die Show ein Bild an&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scripting-Entwicklungsumgebung&amp;diff=1091</id>
		<title>Scripting-Entwicklungsumgebung</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scripting-Entwicklungsumgebung&amp;diff=1091"/>
		<updated>2013-04-25T09:10:27Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sie finden die Scripting-Entwicklungsumgebung unter &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Die Scripting-Entwicklungsumgebung ist mehr als ein einfacher Editor. Sie können folgende Funktionen nutzen:&lt;br /&gt;
&lt;br /&gt;
* Scriptdatei einem DiaShow-Objekt zuordnen&lt;br /&gt;
* Scripts erstellen (mehrere Editortabs gleichzeitig)&lt;br /&gt;
* Ausgabe von Log-Meldungen&lt;br /&gt;
* Debugger&lt;br /&gt;
** Programm schrittweise ausführen&lt;br /&gt;
** Inhalte von Variablen auswerten&lt;br /&gt;
* Syntaxvervollständigung (Strg+Leertaste)&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scripting-Entwicklungsumgebung&amp;diff=1090</id>
		<title>Scripting-Entwicklungsumgebung</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scripting-Entwicklungsumgebung&amp;diff=1090"/>
		<updated>2013-04-25T09:05:24Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: Die Seite wurde neu angelegt: „Sie finden die Scripting-Entwicklungsumgebung unter &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039;.“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sie finden die Scripting-Entwicklungsumgebung unter &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039;.&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Entwicklermodus&amp;diff=1089</id>
		<title>Entwicklermodus</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Entwicklermodus&amp;diff=1089"/>
		<updated>2013-04-25T09:04:16Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Entwicklermodus bietet die DiaShow zusätzliche Bearbeitungsmöglichkeiten, die insbesondere der Erstellung von Vorlagen dienen.&lt;br /&gt;
&lt;br /&gt;
= Achtung =&lt;br /&gt;
&lt;br /&gt;
Der Entwicklermodus ist nicht für den täglichen Gebrauch bestimmt und kein &amp;quot;offizieller&amp;quot; Teil des Programms. Bei auftretende Problemen und Fragen können wir Ihnen keinen Support anbieten.&lt;br /&gt;
&lt;br /&gt;
= Entwicklermodus aktivieren =&lt;br /&gt;
&lt;br /&gt;
Sie aktivieren den Entwicklermodus über den Menüpunkt: &amp;#039;&amp;#039;Hilfe / Entwicklermodus&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
= Features des Entwicklermodus =&lt;br /&gt;
&lt;br /&gt;
* neues &amp;quot;Entwickler&amp;quot;-Tab bei den Objekt-Eigenschaften &lt;br /&gt;
* Scripting-Entwicklungsumgebung: &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; (siehe auch: [[Dokumentation der Scripting-API]])&lt;br /&gt;
* Vorlagen-Editor im DiaShow-Manager aktiviert&lt;br /&gt;
* Eine neue Kategorie namens &amp;quot;Developer&amp;quot; steht in der Toolbox zur Verfügung. Diese Objekte sind nur im Zusammenhang mit Scripts sinnvoll nutzbar.&lt;br /&gt;
&lt;br /&gt;
= Performance =&lt;br /&gt;
&lt;br /&gt;
Im Entwicklermodus sind einige wenige Optimierungsmaßnahmen ausgeschaltet, sodass die Arbeit mit dem Programm etwas langsamer sein könnte als bei deaktiviertem Entwicklermodus.&lt;br /&gt;
&lt;br /&gt;
* Deaktivierter Cache beim Ausführen von Scripts&lt;br /&gt;
* Deaktivierter Cache für Pixelshader&lt;br /&gt;
&lt;br /&gt;
Nur so ist es möglich, dass Änderungen an Scripts oder Shadern gleich Auswirkungen beim nächsten Abspielen haben. Mit aktivierten Caches müsste sonst das Programm neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Entwicklermodus&amp;diff=1088</id>
		<title>Entwicklermodus</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Entwicklermodus&amp;diff=1088"/>
		<updated>2013-04-25T09:04:00Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Performance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Entwicklermodus bietet die DiaShow zusätzliche Bearbeitungsmöglichkeiten, die insbesondere der Erstellung vor Vorlagen dienen.&lt;br /&gt;
&lt;br /&gt;
= Achtung =&lt;br /&gt;
&lt;br /&gt;
Der Entwicklermodus ist nicht für den täglichen Gebrauch bestimmt und kein &amp;quot;offizieller&amp;quot; Teil des Programms. Bei auftretende Problemen und Fragen können wir Ihnen keinen Support anbieten.&lt;br /&gt;
&lt;br /&gt;
= Entwicklermodus aktivieren =&lt;br /&gt;
&lt;br /&gt;
Sie aktivieren den Entwicklermodus über den Menüpunkt: &amp;#039;&amp;#039;Hilfe / Entwicklermodus&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
= Features des Entwicklermodus =&lt;br /&gt;
&lt;br /&gt;
* neues &amp;quot;Entwickler&amp;quot;-Tab bei den Objekt-Eigenschaften &lt;br /&gt;
* Scripting-Entwicklungsumgebung: &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; (siehe auch: [[Dokumentation der Scripting-API]])&lt;br /&gt;
* Vorlagen-Editor im DiaShow-Manager aktiviert&lt;br /&gt;
* Eine neue Kategorie namens &amp;quot;Developer&amp;quot; steht in der Toolbox zur Verfügung. Diese Objekte sind nur im Zusammenhang mit Scripts sinnvoll nutzbar.&lt;br /&gt;
&lt;br /&gt;
= Performance =&lt;br /&gt;
&lt;br /&gt;
Im Entwicklermodus sind einige wenige Optimierungsmaßnahmen ausgeschaltet, sodass die Arbeit mit dem Programm etwas langsamer sein könnte als bei deaktiviertem Entwicklermodus.&lt;br /&gt;
&lt;br /&gt;
* Deaktivierter Cache beim Ausführen von Scripts&lt;br /&gt;
* Deaktivierter Cache für Pixelshader&lt;br /&gt;
&lt;br /&gt;
Nur so ist es möglich, dass Änderungen an Scripts oder Shadern gleich Auswirkungen beim nächsten Abspielen haben. Mit aktivierten Caches müsste sonst das Programm neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Entwicklermodus&amp;diff=1087</id>
		<title>Entwicklermodus</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Entwicklermodus&amp;diff=1087"/>
		<updated>2013-04-25T09:03:10Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: Die Seite wurde neu angelegt: „Im Entwicklermodus bietet die DiaShow zusätzliche Bearbeitungsmöglichkeiten, die insbesondere der Erstellung vor Vorlagen dienen.  = Achtung =  Der Entwickle…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Entwicklermodus bietet die DiaShow zusätzliche Bearbeitungsmöglichkeiten, die insbesondere der Erstellung vor Vorlagen dienen.&lt;br /&gt;
&lt;br /&gt;
= Achtung =&lt;br /&gt;
&lt;br /&gt;
Der Entwicklermodus ist nicht für den täglichen Gebrauch bestimmt und kein &amp;quot;offizieller&amp;quot; Teil des Programms. Bei auftretende Problemen und Fragen können wir Ihnen keinen Support anbieten.&lt;br /&gt;
&lt;br /&gt;
= Entwicklermodus aktivieren =&lt;br /&gt;
&lt;br /&gt;
Sie aktivieren den Entwicklermodus über den Menüpunkt: &amp;#039;&amp;#039;Hilfe / Entwicklermodus&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
= Features des Entwicklermodus =&lt;br /&gt;
&lt;br /&gt;
* neues &amp;quot;Entwickler&amp;quot;-Tab bei den Objekt-Eigenschaften &lt;br /&gt;
* Scripting-Entwicklungsumgebung: &amp;#039;&amp;#039;Ansicht / Steuerelemente / Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; (siehe auch: [[Dokumentation der Scripting-API]])&lt;br /&gt;
* Vorlagen-Editor im DiaShow-Manager aktiviert&lt;br /&gt;
* Eine neue Kategorie namens &amp;quot;Developer&amp;quot; steht in der Toolbox zur Verfügung. Diese Objekte sind nur im Zusammenhang mit Scripts sinnvoll nutzbar.&lt;br /&gt;
&lt;br /&gt;
= Performance =&lt;br /&gt;
&lt;br /&gt;
Im Entwicklermodus sind einige wenige Optimierungsmaßnahmen ausgeschaltet, sodass die Arbeit mit dem Programm etwas langsamer sein könnte als bei deaktiviertem Entwicklermodus.&lt;br /&gt;
&lt;br /&gt;
* Deaktivierter Cache beim Ausführen von Scripts&lt;br /&gt;
* Deaktivierter Cache für Pixelshader&lt;br /&gt;
&lt;br /&gt;
Nur so ist es möglich, dass änderungen an Scripts oder Shadern gleich Auswirkungen beim nächsten Abspielen haben. Mit aktivierten Caches müsste sonst das Programm neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Scripting-API&amp;diff=1086</id>
		<title>Scripting-API</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Scripting-API&amp;diff=1086"/>
		<updated>2013-04-25T08:50:58Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die [[DiaShow 8]] führt die Möglichkeit ein, Vorlagen und Effekte für Bilder, Videos und andere Objekte per Skript zu erstellen und zu steuern. Die Entwicklungsumgebung kann nach Einschalten des Entwicklermodus (&amp;#039;&amp;#039;Hilfe / Entwicklermodus&amp;#039;&amp;#039;) über &amp;#039;&amp;#039;Menü Ansicht/Steuerelemente/Scripting-Entwicklungsumgebung&amp;#039;&amp;#039; aufgerufen werden. Die Skriptsprache ist [http://sourceforge.net/projects/dws/ DelphiWebScript], welche sich stark an Delphi orientiert, aber die Vorteile von Skriptsprachen einbringt.&lt;br /&gt;
&lt;br /&gt;
= Anfügen eines vorgefertigten Skripts an DiaShowObjekte =&lt;br /&gt;
&lt;br /&gt;
= Dokumentation der Script-API =&lt;br /&gt;
Eine ausführliche Dokumentation findet man unter [[Dokumentation der Scripting-API]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekt&amp;diff=1085</id>
		<title>DiaShow-Objekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekt&amp;diff=1085"/>
		<updated>2013-03-13T09:50:11Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das DiaShow-Objekt ist die Basis-Klasse für [[DiaShow-Objekte|alle Objekte]], die in der DiaShow Verwendung finden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShowObject&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
    function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
    function Text: [[IText]];&lt;br /&gt;
    function Clone: ISlideShowObject;&lt;br /&gt;
    function CloneWithChildren: ISlideShowObject;&lt;br /&gt;
    procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
    function GetValueAsString(const Key: String): String;&lt;br /&gt;
    procedure SetValueAsSingle(const Key: String; const Value: Single);&lt;br /&gt;
    function GetValueAsSingle(const Key: String): Single;&lt;br /&gt;
    procedure SetValueAsInteger(const Key: String; const Value: Integer);&lt;br /&gt;
    function GetValueAsInteger(const Key: String): Integer;&lt;br /&gt;
    procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
    function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
    function NameIs(const AName: string): Boolean;&lt;br /&gt;
    property Name: string;&lt;br /&gt;
    property Offset: Integer;&lt;br /&gt;
    property Duration: Integer;&lt;br /&gt;
    property Parent: ISlideShowObject;&lt;br /&gt;
    property Count: Integer;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Kindelemente. Alle Objekte können andere SlideShowObjekte als Kinder halten. Als herausragendes Beispiel kann man das Kapitel nennen, welches Bilder in sich vereint. Generell geht das aber mit allen anderen Objekten genauso.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure InsertItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  procedure AddItem(Item: ISlideShowObject);&lt;br /&gt;
  procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Gibt die Anzahl der Kindelemente zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Count: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Gibt das Elternelement zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Parent: ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ein SSO kann Text enthalten und ist vom Typ &amp;#039;&amp;#039;&amp;#039;[[IText]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Text: IText;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Abspiel-/Anzeigedauer eines Objektes in Millisekunden. Achtung, sollte nur in Ausnahmefällen geändert werden!&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Duration: Integer; // lesen und schreiben&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Der Offset des Objektes ist der Abstand zum Vorgänger-Objekt in Millisekunden. W&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Offset: Integer; // lesen und schreiben&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Kopiert das SSO ohne bzw. mit dessen Kindelemente(n)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Clone: ISlideShowObject;&lt;br /&gt;
  function CloneWithChildren: ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für [[GUI-API|GUI]]-Werte. Der &amp;#039;&amp;#039;&amp;#039;Key&amp;#039;&amp;#039;&amp;#039; gibt an, welches GUI-Element gemeint ist, &amp;#039;&amp;#039;&amp;#039;Value&amp;#039;&amp;#039;&amp;#039; setzt den entsprechenden Wert. Der Datentyp von Value ist dabei von Komponente zu Komponente unterschiedlich.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
  function GetValueAsString(const Key: String): String;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsSingle(const Key: String; const Value: Single);&lt;br /&gt;
  function GetValueAsSingle(const Key: String): Single;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsInteger(const Key: String; const Value: Integer);&lt;br /&gt;
  function GetValueAsInteger(const Key: String): Integer;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
  function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Objektbenennung: Objekte können im Hauptprogramm einen Zugriffsnamen bekommen. Dieser kann über das &amp;quot;Name&amp;quot;-Propery abgerufen werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Name: string;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Liefert True zurück, wenn der Name des Objekts AName entspricht. Dabei wird Groß-/Kleinschreibung vernachlässigt.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function NameIs(const AName: string): Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
Ein ISlideShowObject kommt niemals in reiner Form vor, sondern immer als spezielle Variante (z.B. ein [[IPicture|Bild]] oder [[IText|Text]]). Es ist die Basis für [[DiaShow-Objekte|alle Objekte]], die in der DiaShow Verwendung finden. Dementsprechenden leiten alle anderen von ihm ab und können in eine ISlideShowObject umgewandelt (gecastet) werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Pic: IPicture;&lt;br /&gt;
  var SSO: ISlideShowObject;&lt;br /&gt;
  Pic := CreatePicture;&lt;br /&gt;
  SSO := Pic as ISlideShowObject; // ein Bild lässt sich in das allgemeinere ISlideShowObject casten&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekt&amp;diff=1084</id>
		<title>DiaShow-Objekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekt&amp;diff=1084"/>
		<updated>2013-03-13T09:46:01Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das DiaShow-Objekt ist die Basis-Klasse für [[DiaShow-Objekte|alle Objekte]], die in der DiaShow Verwendung finden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShowObject&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
    function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    function GetParent: ISlideShowObject;&lt;br /&gt;
    function Text: [[IText]];&lt;br /&gt;
    function GetDuration: Integer;&lt;br /&gt;
    procedure SetDuration(const Value: Integer);&lt;br /&gt;
    function GetOffset: Integer;&lt;br /&gt;
    procedure SetOffset(const Value: Integer);&lt;br /&gt;
    function Clone: ISlideShowObject;&lt;br /&gt;
    function CloneWithChildren: ISlideShowObject;&lt;br /&gt;
    procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
    function GetValueAsString(const Key: String): String;&lt;br /&gt;
    procedure SetValueAsSingle(const Key: String; const Value: Single);&lt;br /&gt;
    function GetValueAsSingle(const Key: String): Single;&lt;br /&gt;
    procedure SetValueAsInteger(const Key: String; const Value: Integer);&lt;br /&gt;
    function GetValueAsInteger(const Key: String): Integer;&lt;br /&gt;
    procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
    function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
    function NameIs(const AName: string): Boolean;&lt;br /&gt;
    property Name: string;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Kindelemente. Alle Objekte können andere SlideShowObjekte als Kinder halten. Als herausragendes Beispiel kann man das Kapitel nennen, welches Bilder in sich vereint. Generell geht das aber mit allen anderen Objekten genauso.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure InsertItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  procedure AddItem(Item: ISlideShowObject);&lt;br /&gt;
  procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Gibt die Anzahl der Kindelemente zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Gibt das Elternelement zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetParent: ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ein SSO kann Text enthalten und ist vom Typ &amp;#039;&amp;#039;&amp;#039;[[IText]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Text: IText;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Abspiel-/Anzeigedauer eines Objektes in Millisekunden. Achtung, sollte nur in Ausnahmefällen geändert werden!&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetDuration: Integer;&lt;br /&gt;
  procedure SetDuration(const Value: Integer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Der Offset des Objektes ist der Abstand zum Vorgänger-Objekt in Millisekunden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetOffset: Integer;&lt;br /&gt;
  procedure SetOffset(const Value: Integer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Kopiert das SSO ohne bzw. mit dessen Kindelemente(n)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Clone: ISlideShowObject;&lt;br /&gt;
  function CloneWithChildren: ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für [[GUI-API|GUI]]-Werte. Der &amp;#039;&amp;#039;&amp;#039;Key&amp;#039;&amp;#039;&amp;#039; gibt an, welches GUI-Element gemeint ist, &amp;#039;&amp;#039;&amp;#039;Value&amp;#039;&amp;#039;&amp;#039; setzt den entsprechenden Wert. Der Datentyp von Value ist dabei von Komponente zu Komponente unterschiedlich.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
  function GetValueAsString(const Key: String): String;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsSingle(const Key: String; const Value: Single);&lt;br /&gt;
  function GetValueAsSingle(const Key: String): Single;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsInteger(const Key: String; const Value: Integer);&lt;br /&gt;
  function GetValueAsInteger(const Key: String): Integer;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
  function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Objektbenennung: Objekte können im Hauptprogramm einen Zugriffsnamen bekommen. Dieser kann über das &amp;quot;Name&amp;quot;-Propery abgerufen werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Name: string;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Liefert True zurück, wenn der Name des Objekts AName entspricht. Dabei wird Groß-/Kleinschreibung vernachlässigt.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function NameIs(const AName: string): Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
Ein ISlideShowObject kommt niemals in reiner Form vor, sondern immer als spezielle Variante (z.B. ein [[IPicture|Bild]] oder [[IText|Text]]). Es ist die Basis für [[DiaShow-Objekte|alle Objekte]], die in der DiaShow Verwendung finden. Dementsprechenden leiten alle anderen von ihm ab und können in eine ISlideShowObject umgewandelt (gecastet) werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Pic: IPicture;&lt;br /&gt;
  var SSO: ISlideShowObject;&lt;br /&gt;
  Pic := CreatePicture;&lt;br /&gt;
  SSO := Pic as ISlideShowObject; // ein Bild lässt sich in das allgemeinere ISlideShowObject casten&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1080</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=1080"/>
		<updated>2013-02-24T15:06:37Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]): Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure CopyContent(SrcContainer, DstContainer: ISlideShowObject);&lt;br /&gt;
    procedure MoveContent(SrcContainer, DstContainer: ISlideShowObject);&lt;br /&gt;
    procedure Replace(const OldObject, NewObject: IScripting_ISlideShowObject);&lt;br /&gt;
    function GetRatioX: Integer;&lt;br /&gt;
    function GetRatioY: Integer;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Toplevel-Objekte der Diashow&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Seitenverhältnis der Show abfragen (X:Y)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetRatioX: Integer;&lt;br /&gt;
  function GetRatioY: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture, 0, False); // Fügt hinten an die Show ein Bild an&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Shaderobjekt&amp;diff=881</id>
		<title>Shaderobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Shaderobjekt&amp;diff=881"/>
		<updated>2012-11-27T13:06:30Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Bildobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IShader&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IShader &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function Filename: [[IFilename]];&lt;br /&gt;
    procedure SetTechnique(TechniqueName: string);&lt;br /&gt;
    procedure SetParamInt(ParamName: string; Value: Integer);&lt;br /&gt;
    procedure SetParamFloat(ParamName: string; Value: Float);&lt;br /&gt;
    function GetPostProcessing: Boolean;&lt;br /&gt;
    procedure SetPostProcessing(const Value: Boolean);&lt;br /&gt;
    function GetMeshColumns: Integer;&lt;br /&gt;
    procedure SetMeshColumns(const P: Integer);&lt;br /&gt;
    function GetMeshRows: Integer;&lt;br /&gt;
    procedure SetMeshRows(const P: Integer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Objekt Erzeugung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function CreateShaderObject: IShader;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der Dateiname des Shaders. Hierbei ist eine konkreter Quelltextdatei eines [[HLSL-Shader|HLSL-Shaders]] für DirectX 9 gemeint (meist *.fx).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Falls im Shaderquelltext mehr als eine Shader-Technik enthalten ist, kann sie über SetTechnique gesetzt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetTechnique(TechniqueName: string);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ein Shader benötigt verschiedene Parameter. Welche das sind und hängt vom tatsächlich verwendeten Shader ab. Über die SetParamXXX-Funktionen können entsprechende Werte an den Shader übergeben werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetParamInt(ParamName: string; Value: Integer);&lt;br /&gt;
  procedure SetParamFloat(ParamName: string; Value: Float);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekt&amp;diff=866</id>
		<title>DiaShow-Objekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekt&amp;diff=866"/>
		<updated>2012-09-15T20:29:50Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das DiaShow-Objekt ist die Basis-Klasse für [[DiaShow-Objekte|alle Objekte]], die in der DiaShow Verwendung finden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShowObject&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
    function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    function GetParent: ISlideShowObject;&lt;br /&gt;
    function Text: [[IText]];&lt;br /&gt;
    function GetDuration: Integer;&lt;br /&gt;
    procedure SetDuration(const Value: Integer);&lt;br /&gt;
    function GetOffset: Integer;&lt;br /&gt;
    procedure SetOffset(const Value: Integer);&lt;br /&gt;
    function Clone: ISlideShowObject;&lt;br /&gt;
    function CloneWithChildren: ISlideShowObject;&lt;br /&gt;
    procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
    function GetValueAsString(const Key: String): String;&lt;br /&gt;
    procedure SetValueAsSingle(const Key: String; const Value: Single);&lt;br /&gt;
    function GetValueAsSingle(const Key: String): Single;&lt;br /&gt;
    procedure SetValueAsInteger(const Key: String; const Value: Integer);&lt;br /&gt;
    function GetValueAsInteger(const Key: String): Integer;&lt;br /&gt;
    procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
    function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Kindelemente. Alle Objekte können andere SlideShowObjekte als Kinder halten. Als herausragendes Beispiel kann man das Kapitel nennen, welches Bilder in sich vereint. Generell geht das aber mit allen anderen Objekten genauso.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure InsertItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  procedure AddItem(Item: ISlideShowObject);&lt;br /&gt;
  procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Gibt die Anzahl der Kindelemente zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Gibt das Elternelement zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetParent: ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ein SSO kann Text enthalten und ist vom Typ &amp;#039;&amp;#039;&amp;#039;[[IText]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Text: IText;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Abspiel-/Anzeigedauer eines Objektes in Millisekunden. Achtung, sollte nur in Ausnahmefällen geändert werden!&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetDuration: Integer;&lt;br /&gt;
  procedure SetDuration(const Value: Integer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Der Offset des Objektes ist der Abstand zum Vorgänger-Objekt in Millisekunden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetOffset: Integer;&lt;br /&gt;
  procedure SetOffset(const Value: Integer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Kopiert das SSO ohne bzw. mit dessen Kindelemente(n)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Clone: ISlideShowObject;&lt;br /&gt;
  function CloneWithChildren: ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für [[GUI-API|GUI]]-Werte. Der &amp;#039;&amp;#039;&amp;#039;Key&amp;#039;&amp;#039;&amp;#039; gibt an, welches GUI-Element gemeint ist, &amp;#039;&amp;#039;&amp;#039;Value&amp;#039;&amp;#039;&amp;#039; setzt den entsprechenden Wert. Der Datentyp von Value ist dabei von Komponente zu Komponente unterschiedlich.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
  function GetValueAsString(const Key: String): String;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsSingle(const Key: String; const Value: Single);&lt;br /&gt;
  function GetValueAsSingle(const Key: String): Single;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsInteger(const Key: String; const Value: Integer);&lt;br /&gt;
  function GetValueAsInteger(const Key: String): Integer;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
  function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
Ein ISlideShowObject kommt niemals in reiner Form vor, sondern immer als spezielle Variante (z.B. ein [[IPicture|Bild]] oder [[IText|Text]]). Es ist die Basis für [[DiaShow-Objekte|alle Objekte]], die in der DiaShow Verwendung finden. Dementsprechenden leiten alle anderen von ihm ab und können in eine ISlideShowObject umgewandelt (gecastet) werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Pic: IPicture;&lt;br /&gt;
  var SSO: ISlideShowObject;&lt;br /&gt;
  Pic := CreatePicture;&lt;br /&gt;
  SSO := Pic as ISlideShowObject; // ein Bild lässt sich in das allgemeinere ISlideShowObject casten&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=865</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=865"/>
		<updated>2012-09-15T20:21:39Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]): Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure Replace(const OldObject, NewObject: IScripting_ISlideShowObject);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture, 0, False); // Fügt hinten an die Show ein Bild an&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=864</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=864"/>
		<updated>2012-09-15T20:11:04Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]): Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture, 0, False); // Fügt hinten an die Show ein Bild an&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=863</id>
		<title>ISlideShow</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ISlideShow&amp;diff=863"/>
		<updated>2012-09-15T19:59:56Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: Die Seite wurde neu angelegt: „&amp;lt;code&amp;gt;   ISlideShow     function GetCount: Integer;     procedure SetItem(Index: Integer; Item: ISlideShowObject);     function GetItem(Index: Integer): [[ISl…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShow&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: [[ISlideShowObject]]);&lt;br /&gt;
    function GetItem(Index: Integer): [[ISlideShowObject]];&lt;br /&gt;
    function Remove(SlideShowObject: [[ISlideShowObject]]):Boolean;&lt;br /&gt;
    procedure InsertBefore(BeforeThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAfter(AfterThis, SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
    procedure InsertAsChild(Parent: [[ISlideShowObject]]; SlideShowObject: [[ISlideShowObject]]; Offset: Integer = 0; AsNewTrack: Boolean = False);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  var SlideShow: ISlideShow;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über ein ISlideShow-Objekt kann eine Diashow bearbeitet werden, d.h. es können Objekte eingefügt, gelöscht, etc. werden.&lt;br /&gt;
&lt;br /&gt;
Über die globale Variable &amp;lt;code&amp;gt;SlideShow&amp;lt;/code&amp;gt; steht immer ein SlideShow-Objekt zur Verfügung, dass die aktuelle Diashow referenziert.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  SlideShow.InsertAfter(nil, CreatePicture, 0, False); // Fügt hinten an die Show ein Bild an&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekt&amp;diff=862</id>
		<title>DiaShow-Objekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=DiaShow-Objekt&amp;diff=862"/>
		<updated>2012-09-15T19:44:28Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Methoden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das DiaShow-Objekt, eigentlich &amp;#039;&amp;#039;SlideShowObject&amp;#039;&amp;#039; vom Typ &amp;#039;&amp;#039;&amp;#039;ISlideShowObject&amp;#039;&amp;#039;&amp;#039; (Abk. SSO), bildet die Basis-Klasse für alle Objekte, die in der DiaShow Verwendung finden. Dementsprechenden leiten alle anderen von ihm ab und enthalten deshalb alle Methoden dessen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  ISlideShowObject&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
    function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
    function GetParent: ISlideShowObject;&lt;br /&gt;
    function Text: [[IText]];&lt;br /&gt;
    function GetDuration: Integer;&lt;br /&gt;
    procedure SetDuration(const Value: Integer);&lt;br /&gt;
    function GetOffset: Integer;&lt;br /&gt;
    procedure SetOffset(const Value: Integer);&lt;br /&gt;
    function Clone: ISlideShowObject;&lt;br /&gt;
    function CloneWithChildren: ISlideShowObject;&lt;br /&gt;
    procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
    function GetValueAsString(const Key: String): String;&lt;br /&gt;
    procedure SetValueAsSingle(const Key: String; const Value: Single);&lt;br /&gt;
    function GetValueAsSingle(const Key: String): Single;&lt;br /&gt;
    procedure SetValueAsInteger(const Key: String; const Value: Integer);&lt;br /&gt;
    function GetValueAsInteger(const Key: String): Integer;&lt;br /&gt;
    procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
    function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Kindelemente. Alle Objekte können andere SlideShowObjekte als Kinder halten. Als herausragendes Beispiel kann man das Kapitel nennen, welches Bilder in sich vereint. Generell geht das aber mit allen anderen Objekten genauso.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure InsertItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  procedure AddItem(Item: ISlideShowObject);&lt;br /&gt;
  procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Gibt die Anzahl der Kindelemente zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Gibt das Elternelement zurück&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetParent: ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ein SSO kann Text enthalten und ist vom Typ &amp;#039;&amp;#039;&amp;#039;[[IText]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Text: IText;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Abspiel-/Anzeigedauer eines Objektes in Millisekunden. Achtung, sollte nur in Ausnahmefällen geändert werden!&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetDuration: Integer;&lt;br /&gt;
  procedure SetDuration(const Value: Integer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Der Offset des Objektes ist der Abstand zum Vorgänger-Objekt in Millisekunden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetOffset: Integer;&lt;br /&gt;
  procedure SetOffset(const Value: Integer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Kopiert das SSO ohne bzw. mit dessen Kindelemente(n)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Clone: ISlideShowObject;&lt;br /&gt;
  function CloneWithChildren: ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für [[GUI-API|GUI]]-Werte. Der &amp;#039;&amp;#039;&amp;#039;Key&amp;#039;&amp;#039;&amp;#039; gibt an, welches GUI-Element gemeint ist, &amp;#039;&amp;#039;&amp;#039;Value&amp;#039;&amp;#039;&amp;#039; setzt den entsprechenden Wert. Der Datentyp von Value ist dabei von Komponente zu Komponente unterschiedlich.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValueAsString(const Key: String; const Value: String);&lt;br /&gt;
  function GetValueAsString(const Key: String): String;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsSingle(const Key: String; const Value: Single);&lt;br /&gt;
  function GetValueAsSingle(const Key: String): Single;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsInteger(const Key: String; const Value: Integer);&lt;br /&gt;
  function GetValueAsInteger(const Key: String): Integer;&lt;br /&gt;
&lt;br /&gt;
  procedure SetValueAsBoolean(const Key: String; const Value: Boolean);&lt;br /&gt;
  function GetValueAsBoolean(const Key: String): Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=GUI-API&amp;diff=861</id>
		<title>GUI-API</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=GUI-API&amp;diff=861"/>
		<updated>2012-09-15T19:28:38Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Einfügen der GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es ist manchmal notwendig, dass für Vorlagen und Effekte Einstellungen und Eingaben vom Benutzer gebraucht werden. Daher bietet die [[Scripting-API]] die Möglichkeit, einfache [https://de.wikipedia.org/wiki/Grafische_Benutzeroberfl%C3%A4che Grafische Benutzeroberflächen] (GUI) zu gestalten. &lt;br /&gt;
&lt;br /&gt;
= Einfügen der GUI =&lt;br /&gt;
Die Gestaltung geschieht innerhalb der vordefinierten Funktion (dem &amp;quot;Hook&amp;quot;) &amp;#039;&amp;#039;&amp;#039;GetGUI&amp;#039;&amp;#039;&amp;#039;, die irgendwo im betreffenden Skript eingefügt sein muss:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function OnGetGUI(SlideShowObject: ISlideShowObject): string;&lt;br /&gt;
  begin&lt;br /&gt;
    Result := &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Diese Funktion hält einen Parameter &amp;#039;&amp;#039;&amp;#039;SlideShowObject&amp;#039;&amp;#039;&amp;#039;. Dieses ist eine Referenz auf das Objekt, welches das Skript ausführt. Das ist in der Regel das Effekt- bzw. das BlackBox-Objekt selbst.&lt;br /&gt;
&lt;br /&gt;
Die Definition der GUI erfolgt mittels [https://de.wikipedia.org/wiki/JSON JSON]-Syntax. Die Funktion liefert also einen JSON-String zurück.&lt;br /&gt;
&lt;br /&gt;
= Struktur des JSON-Strings =&lt;br /&gt;
== Allgemeiner Aufbau ==&lt;br /&gt;
Das JSON-Objekt ist ein Array aus Komponenten-Objekten:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      # Komponente 1&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      # Komponente 2&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Jede Komponente benötigt das &amp;#039;&amp;#039;&amp;#039;Key&amp;#039;&amp;#039;&amp;#039;-Element, das &amp;#039;&amp;#039;&amp;#039;Caption&amp;#039;&amp;#039;&amp;#039;-Element und das &amp;#039;&amp;#039;&amp;#039;Type&amp;#039;&amp;#039;&amp;#039;-Element. Alle diese Elemente sind vom Datentyp &amp;#039;&amp;#039;String&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;Key&amp;#039;&amp;#039;: Eindeutige Kennung der Komponente, seine ID&lt;br /&gt;
* &amp;#039;&amp;#039;Type&amp;#039;&amp;#039;: Art der Komponente. Kann folgende Werte annehmen:&lt;br /&gt;
** &amp;#039;&amp;#039;[[Title]]&amp;#039;&amp;#039;: Title der Vorlage oder des Effekts&lt;br /&gt;
** &amp;#039;&amp;#039;[[Edit]]&amp;#039;&amp;#039;: Eingabefeld&lt;br /&gt;
** &amp;#039;&amp;#039;[[ListBox]]&amp;#039;&amp;#039;: Listenelement, enthält Strings&lt;br /&gt;
** &amp;#039;&amp;#039;[[ComboBox]]&amp;#039;&amp;#039;: Aufklappbarer Auswahldialog, enthält Strings&lt;br /&gt;
** &amp;#039;&amp;#039;[[CheckBox]]&amp;#039;&amp;#039;: Kästchen zur binären Auswahl&lt;br /&gt;
** &amp;#039;&amp;#039;[[ImageComboBox]]&amp;#039;&amp;#039;: Aufklappbarer Auswahldialog, enthält Bilder&lt;br /&gt;
** &amp;#039;&amp;#039;[[SpinEdit]]&amp;#039;&amp;#039;: Eingabefeld für Ganzzahlen, liefert Integer-Werte&lt;br /&gt;
** &amp;#039;&amp;#039;[[Slider]]&amp;#039;&amp;#039;: auch unter &amp;#039;&amp;#039;&amp;#039;TrackBar&amp;#039;&amp;#039;&amp;#039; bekannt, Schieberegler, liefert Integer-Werte&lt;br /&gt;
* &amp;#039;&amp;#039;Caption&amp;#039;&amp;#039;: Beschriftung der Komponente, kann leer sein.&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
Zusätzlich gibt es das optionale &amp;#039;&amp;#039;&amp;#039;Options&amp;#039;&amp;#039;&amp;#039;-Objekt, welches bei Bedarf bestimmte Zusatzinformationen enthalten kann - je nach Type.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # Beispiel für ein Edit-Feld und ein beschränktes Spin-Edit mit Optionen&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;Key&amp;quot; : &amp;quot;Edit1&amp;quot;,&lt;br /&gt;
      &amp;quot;Type&amp;quot; : &amp;quot;Edit&amp;quot;,&lt;br /&gt;
      &amp;quot;Caption&amp;quot; : &amp;quot;Dies ist eine Edit-Feld&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;Key&amp;quot; : &amp;quot;Spin1&amp;quot;,&lt;br /&gt;
      &amp;quot;Type&amp;quot; : &amp;quot;SpinEdit&amp;quot;,&lt;br /&gt;
      &amp;quot;Caption&amp;quot; : &amp;quot;Dies ist ein SpinEdit-Feld&amp;quot;,&lt;br /&gt;
      &amp;quot;Options&amp;quot; :&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;Min&amp;quot; : 1,&lt;br /&gt;
          &amp;quot;Max&amp;quot; : 10&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Layout ==&lt;br /&gt;
Standardmäßig werden die im Array aufgezählten Komponenten untereinander angeordnet und über die gesamte Breite des Eigenschaften-Fensters gezogen. Ist eine Caption angegegeben, erscheint diese vor der eigentlichen Komponente als Beschriftung.&lt;br /&gt;
&lt;br /&gt;
=== Schachtelung ===&lt;br /&gt;
Es ist möglich, Komponenten auch nebeneinander anzuordnen. Dafür müssen sich diese innerhalb eines Unterarrays befinden:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  # JSON-Array für die GUI&lt;br /&gt;
  [&lt;br /&gt;
    {&amp;lt;Ein Objekt in Zeile 1&amp;gt;},&lt;br /&gt;
    [{&amp;lt;Ein Objekt in Zeile 2&amp;gt;}, {&amp;lt;Noch ein Objekt in Zeile 2&amp;gt;}],&lt;br /&gt;
    {&amp;lt;Ein Objekt in Zeile 3&amp;gt;}&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Generell ist eine beliebige Schachtelung von Komponenten erlaubt. Jedes Unterarray wechselt das Layout von Horizontal zu Vertikal. Das erlaubt das Erstellen auch von komplizierteren Tabellenlayouts.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;Key&amp;quot; : &amp;quot;Edit1&amp;quot;,&lt;br /&gt;
      &amp;quot;Type&amp;quot; : &amp;quot;Edit&amp;quot;,&lt;br /&gt;
      &amp;quot;Caption&amp;quot; : &amp;quot;Name:&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&lt;br /&gt;
      [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;Key&amp;quot; : &amp;quot;Edit2&amp;quot;,&lt;br /&gt;
          &amp;quot;Type&amp;quot; : &amp;quot;Edit&amp;quot;,&lt;br /&gt;
          &amp;quot;Caption&amp;quot; : &amp;quot;Anschrift Teil 1:&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;Key&amp;quot; : &amp;quot;Edit3&amp;quot;,&lt;br /&gt;
          &amp;quot;Type&amp;quot; : &amp;quot;Edit&amp;quot;, &lt;br /&gt;
          &amp;quot;Caption&amp;quot; : &amp;quot;Anschrift Teil 2:&amp;quot;&lt;br /&gt;
        } &lt;br /&gt;
      ], &lt;br /&gt;
      [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;Key&amp;quot; : &amp;quot;Combo1&amp;quot;,&lt;br /&gt;
          &amp;quot;Type&amp;quot; : &amp;quot;ComboBox&amp;quot;,&lt;br /&gt;
          &amp;quot;Caption&amp;quot;: &amp;quot;Kontaktmöglichkeit:&amp;quot;,&lt;br /&gt;
          &amp;quot;Options&amp;quot;: &lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;Items&amp;quot; : [&amp;quot;eMail&amp;quot;, &amp;quot;Telefon&amp;quot;, &amp;quot;Rauchzeichen&amp;quot;]&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;Key&amp;quot; : &amp;quot;Edit4&amp;quot;,&lt;br /&gt;
          &amp;quot;Type&amp;quot; : &amp;quot;Edit&amp;quot;,&lt;br /&gt;
          &amp;quot;Caption&amp;quot; : &amp;quot;Eingabe Kontakt:&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel könnte zur Eingabe von Adressschemata geeignet sein - der Anwendungsfall für die konkrete DiaShow sei hierbei einmal vernachlässigt. Dieses Layout ergibt ein breites Edit-Feld (der Name), und darunter eine kleine 2x2-Tabelle (links untereinander die Anschrift mit Edit-Feldern und rechts untereinander die Combobox und das Edit-Feld für die Kontaktdaten).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Hooks&amp;diff=860</id>
		<title>Hooks</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Hooks&amp;diff=860"/>
		<updated>2012-09-15T19:28:30Z</updated>

		<summary type="html">&lt;p&gt;Steffen.binas: /* Benutzeroberfläche */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hooks =&lt;br /&gt;
Hooks, also Haken, sind vordefinierte Stellen, die genutzt werden, um ein Skript an die DiaShow zu koppeln. Sie bestimmen, wann welcher Code ausgeführt wird. Code, der in die Prozedur &amp;#039;&amp;#039;OnExpandSlideShow&amp;#039;&amp;#039; geschrieben wird, wird beispielsweise direkt vor dem Abspielen der Show ausgeführt. Hooks brauchen nicht definiert zu werden, die Skript-Engine kennt diese speziellen Methoden und reagiert entsprechend darauf.&lt;br /&gt;
&lt;br /&gt;
Alle Hooks haben als Parameter das aktuelle [[DiaShow-Objekt]] vom Typ &amp;#039;&amp;#039;&amp;#039;ISlideShowObject&amp;#039;&amp;#039;&amp;#039;. So kann direkt auf das Objekt zugegriffen werden, dem die Skript-Datei angehängt ist.&lt;br /&gt;
&lt;br /&gt;
== Abspielen / Player ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure [[OnExpandSlideShow]](SlideShowObject: ISlideShowObject);&lt;br /&gt;
  procedure [[Render]](SlideShowObject: ISlideShowObject; Bitmap: ICanvas);&lt;br /&gt;
  procedure [[OnConfigureShader]](SlideShowObject: ISlideShowObject; const Progress: Float);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Benutzeroberfläche ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function [[OnInsertPreset]](SlideShowObject: ISlideShowObject): Boolean;&lt;br /&gt;
  function [[OnCreateContextMenu]](SlideShowObject: ISlideShowObject): string;&lt;br /&gt;
  function [[OnGetGUI]](SlideShowObject: ISlideShowObject): string;&lt;br /&gt;
  procedure [[OnInitDesigner]](SlideShowObject: ISlideShowObject; Context: IDesignerContext);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Steffen.binas</name></author>
	</entry>
</feed>