<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CodeBlog.ch &#187; Flash</title>
	<atom:link href="http://www.codeblog.ch/category/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codeblog.ch</link>
	<description>Coding and more - Concrete5, Flex, JavaScript</description>
	<lastBuildDate>Mon, 05 Dec 2011 16:10:29 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>WYSIWYG Editor mit Flex</title>
		<link>http://www.codeblog.ch/de/2008/10/wysiwyg-editor-mit-flex/</link>
		<comments>http://www.codeblog.ch/de/2008/10/wysiwyg-editor-mit-flex/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 08:04:09 +0000</pubDate>
		<dc:creator>Remo Laubacher</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codeblog.ch/?p=72</guid>
		<description><![CDATA[Adobe liefert Flex mit einem RichTextEditor aus. Dieser lässt sich sehr einfach einbinden und passt vom Layout her auch wunderbar zu den restlichen Flex Controls.  Dieser Editor hat aber leider eine ziemlich begrenzte Funktionalität. Bereits beim Einfügen eines Bildes scheitern wir! Dazu kommt, dass der generierte Code nicht HTML konform ist, ein direktes verwenden in [...]]]></description>
			<content:encoded><![CDATA[<p>Adobe liefert Flex mit einem RichTextEditor aus. Dieser lässt sich sehr einfach einbinden und passt vom Layout her auch wunderbar zu den restlichen Flex Controls. </p>
<p><a href="http://www.codeblog.ch/wp-content/uploads/2008/10/richtexteditor.png"><img class="alignnone size-medium wp-image-73" title="richtexteditor" src="http://www.codeblog.ch/wp-content/uploads/2008/10/richtexteditor.png" alt="" width="334" height="308" /></a></p>
<p>Dieser Editor hat aber leider eine ziemlich begrenzte Funktionalität. Bereits beim Einfügen eines Bildes scheitern wir! Dazu kommt, dass der generierte Code nicht HTML konform ist, ein direktes verwenden in einer HTML Ausgabe ist deswegen zum Beispiel nicht möglich.</p>
<p><span id="more-72"></span></p>
<p><strong>Alternative Lösungsmöglichkeit</strong></p>
<p>Die einzige flash-basierte Lösung die ich finden konnte, ist diese hier: <a href="http://flashtexteditor.com/flexdemo/full/">http://flashtexteditor.com/flexdemo/full</a> Sieht auf den ersten Blick nett aus, eingefügte Bilder verhalten sich aber nicht wie gewohnt und fliessen mit dem Text mit und zudem ist dieses Control inzwischen nur noch kommerziell verfügbar. </p>
<p>Wer sich mit HTML und JavaScript beschäftigt hat, wird sicherlich den einen oder anderen WYSIWYG HTML Editor gefunden haben. Um nur ein paar zu nennen:</p>
<ul>
<li><a href="http://tinymce.moxiecode.com/">http://tinymce.moxiecode.com/</a></li>
<li><a href="http://www.fckeditor.net/">http://www.fckeditor.net/</a></li>
<li><a href="http://www.wymeditor.org/">http://www.wymeditor.org/</a></li>
</ul>
<p>Wäre es nicht schön, wir könnten diese Editoren in Flex verwenden? Können wir!</p>
<p><strong>Flex mit Adobe AIR vs. Flex im Browser</strong></p>
<p>Es gibt einen Unterschied in der Art wie wir unsere Flex Anwendung starten bzw. ausführen lassen.</p>
<p>Es besteht die Möglichkeit mittels NPRuntime den Browser einzubinden, der das Flash aufgerufen hat. Details dazu findet man zum Beispiel bei Adobe: <a href="http://livedocs.adobe.com/flex/gumbo/langref/flash/external/ExternalInterface.html">http://livedocs.adobe.com/flex/gumbo/langref/flash/external/ExternalInterface.html</a></p>
<p>Auf derselben Seite findet man auch den Hinweis, dass diese Funktionalität mit Adobe AIR nicht funktioniert.</p>
<p><em>Note:</em> Adobe AIR currently does not support the ExternalInterface class.</p>
<p>In diesem Artikel wird nur eine mögliche Lösung beim Einsatz von Adobe AIR präsentiert. Der Lösungsweg über ExternalInterface dürfte aber ähnlich verlaufen.</p>
<p><a href="http://osflash.org/projects/wrapper">http://osflash.org/projects/wrapper</a></p>
<p><strong>HTML Code einbinden</strong></p>
<p>Bei einem AIR Projekt, haben wir ein zusätzliches Control zu Verfügung: mx:HTML. Dieses lässt sich wie jedes andere Control in Flex mit MXML verwenden.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">HTML</span> id=<span style="color: #ff0000;">&quot;html&quot;</span> location=<span style="color: #ff0000;">&quot;http://www.codeblog.ch&quot;</span><span style="color: #66cc66;">/&gt;</span></pre></td></tr></table></div>

<p>Wir können damit auch lokale HTML Files einbinden. Wir installieren als erstes die aktuelle TinyMCE Version. http://tinymce.moxiecode.com/download.php</p>
<p>Wir kopieren anschliessend sämtliche Files in unser Flex Projekt und erhalten diese Struktur:<br />
<a href="http://www.codeblog.ch/wp-content/uploads/2008/10/struct.png"><img src="http://www.codeblog.ch/wp-content/uploads/2008/10/struct.png" alt="" title="struct" width="156" height="166" class="alignnone size-medium wp-image-78" /></a></p>
<p>editor.html ist nicht Teil von TinyMCE und TinyMCE.mxml ist unser Flex Control &#8211; mehr dazu später.</p>
<p><strong>Der HTML Code</strong></p>
<p>Wir könnten den ganzen HTML Code für den TinyMCE Aufruf in unserem Flex Code speichern, ich hab mich jedoch entschieden den Code in einer HTML Datei abzulegen. Der Code ist fast 1:1 aus dem TinyMCE Beispiel entnommen.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt;&lt;/title&gt;
&nbsp;
&lt;style type=&quot;text/css&quot;&gt;
html, body {
	margin: 0px;
}
&lt;/style&gt;
&nbsp;
&lt;!-- TinyMCE --&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jscripts/tiny_mce/tiny_mce.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	tinyMCE.init({
		mode : &quot;textareas&quot;,
		theme : &quot;simple&quot;
	});
&lt;/script&gt;
&lt;!-- /TinyMCE --&gt;
&nbsp;
&lt;/head&gt;
&lt;body&gt;
	&lt;textarea id=&quot;elm&quot; name=&quot;elm&quot; rows=&quot;15&quot; cols=&quot;80&quot; style=&quot;width: 100%;&quot;&gt;&lt;/textarea&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Ich habe versucht den Code in ein neues MXML Control zu packen. Gleich zu Beginn der vollständige Code &#8211; sind ja nur ein paar Zeilen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">HTML</span> xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> location=<span style="color: #ff0000;">&quot;tinymce/editor.html&quot;</span> initialize=<span style="color: #ff0000;">&quot;init()&quot;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> htmlComplete:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> localHtmlCode:<span style="color: #0066CC;">String</span> = <span style="color: #000000; font-weight: bold;">null</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>: <span style="color: #0066CC;">void</span>
	<span style="color: #66cc66;">&#123;</span>
		addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, onHTMLLoadComplete<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> htmlCode <span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">// in case the html file hasn't been loaded yet, delay the call..</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>htmlComplete<span style="color: #66cc66;">&#41;</span>
			setHtml<span style="color: #66cc66;">&#40;</span>value<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">else</span>
			localHtmlCode = value;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> htmlCode<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">this</span>.<span style="color: #006600;">htmlLoader</span>.<span style="color: #006600;">window</span>.<span style="color: #006600;">tinyMCE</span>.<span style="color: #006600;">triggerSave</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">return</span> <span style="color: #0066CC;">this</span>.<span style="color: #006600;">htmlLoader</span>.<span style="color: #006600;">window</span>.<span style="color: #006600;">elm1</span>.<span style="color: #006600;">value</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> setHtml<span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>: <span style="color: #0066CC;">void</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">this</span>.<span style="color: #006600;">htmlLoader</span>.<span style="color: #006600;">window</span>.<span style="color: #006600;">tinyMCE</span>.<span style="color: #0066CC;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'elm'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">setContent</span><span style="color: #66cc66;">&#40;</span>value<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #0066CC;">this</span>.<span style="color: #006600;">htmlLoader</span>.<span style="color: #006600;">window</span>.<span style="color: #006600;">document</span>.<span style="color: #006600;">getElementById</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'elm'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">value</span> = value;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onHTMLLoadComplete<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
	<span style="color: #66cc66;">&#123;</span>
		htmlComplete = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>localHtmlCode <span style="color: #66cc66;">!</span>= <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>
			callLater<span style="color: #66cc66;">&#40;</span>setHtml,<span style="color: #66cc66;">&#91;</span>localHtmlCode<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:HTML<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>Als Basis für unser Control dient mx:HTML. Wir fügen lediglich die Eigenschaft htmlCode hinzu, um den Inhalt von TinyMCE zu ändern und auslesen.</p>
<p>Dazu müssen wir lediglich eine Methode mit dem Zusatz &#8220;get&#8221; ausstatten und eine mit &#8220;set&#8221;.</p>
<p>Nun hatte ich jedoch das Problem, dass TinyMCE noch nicht komplett geladen war, als ich versucht habe die Eigenschaft htmlCode zu verändern. Ich hab deswegen, eine noch nicht vollständig getestete, Lösung versucht umzusetzen &#8211; durch das abfangen des Events &#8220;COMPLETE&#8221;, wird uns mitgeteilt wann das HTML Control geladen ist, wurde die Eigenschaft htmlCode von vorher gesetzt (htmlComplete == false), so wird nachdem das Control geladen ist, der Code mittels callLater gesetzt. callLater sollte eigentlich schon selber erst ausgeführt werden, wenn das Control fertig geladen ist. In meinem Fall hat dies jedoch nicht gereicht. (bin für jeden Hinweis dankbar).</p>
<p>Alles speichern und schon haben wir im Flex Builder ein neues Control in der Rubrik &#8220;Custom&#8221; zur Verfügung. Per Drag&#8217;n'Drop einfügen, Projekt starten!<br />
<a href="http://www.codeblog.ch/wp-content/uploads/2008/10/tinymce.png"><img src="http://www.codeblog.ch/wp-content/uploads/2008/10/tinymce-475x145.png" alt="" title="tinymce" width="475" height="145" class="alignnone size-medium wp-image-86" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeblog.ch/de/2008/10/wysiwyg-editor-mit-flex/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Flash CS4 &#8211; Inverse Kinematics (IK)</title>
		<link>http://www.codeblog.ch/de/2008/10/flash-cs4-inverse-kinematics-ik/</link>
		<comments>http://www.codeblog.ch/de/2008/10/flash-cs4-inverse-kinematics-ik/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 11:28:34 +0000</pubDate>
		<dc:creator>Remo Laubacher</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[cs4]]></category>
		<category><![CDATA[inverse]]></category>
		<category><![CDATA[kinematics]]></category>
		<category><![CDATA[kinematik]]></category>
		<category><![CDATA[skeleton]]></category>
		<category><![CDATA[skelett]]></category>

		<guid isPermaLink="false">http://www.codeblog.ch/?p=59</guid>
		<description><![CDATA[Ich bin zufällig über Flash CS4 gestoplert. Nicht wirklich mein liebstes Tool, ich musste aber trotzdem ein paar Dinge ausprobieren &#8211; hat man doch im Vorfeld schon einiges darüber gelesen. Adobe hat zahlreiche Dinge geändert die mir sehr schnell aufgefallen sind. Ein paar Neuigkeiten auf einen Blick: Keyframes werden automatisch gesetzt. Ein Objekt bei Frame [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codeblog.ch/wp-content/uploads/2008/10/flash_logo.jpg"><img class="size-medium wp-image-60 alignleft" title="flash_logo" src="http://www.codeblog.ch/wp-content/uploads/2008/10/flash_logo.jpg" alt="" width="160" height="160" /></a></p>
<p>Ich bin zufällig über Flash CS4 gestoplert. Nicht wirklich mein liebstes Tool, ich musste aber trotzdem ein paar Dinge ausprobieren &#8211; hat man doch im Vorfeld schon einiges darüber gelesen.</p>
<p>Adobe hat zahlreiche Dinge geändert die mir sehr schnell aufgefallen sind. Ein paar Neuigkeiten auf einen Blick:</p>
<ul>
<li>Keyframes werden automatisch gesetzt. Ein Objekt bei Frame 1 erstellen, zu Frame 30 wechseln, das Objekt verschieben und schon hat man ein Keyframe. Macht das Animieren wesentlich einfacher</li>
<li>3D &#8211; Es gibt in der Toolbar zwei neue Werkzeuge um Objekte 3-Dimensional zu manipulieren. Positionieren und Drehen auf der X, Y und Z Achse.</li>
<li>Das &#8220;Knochen-Werkzeug&#8221; (Bone-Tool) mit welchem man die Skelette für die inverse Kinematik erstellen kann. Dieses Tool möchte ich in diesem Artikel kurz erklären</li>
</ul>
<div><span id="more-59"></span><strong>Was ist inverse Kinematik</strong></div>
<div>Bei der inversen Kinematik geht es darum, dass man starre Objekte mittels Gelenken verbindet. Dadurch erstellt man ein &#8220;Skelett&#8221; welches den physikalischen Gesetzen gehorcht. Mit IK können wir also sicherstellen dass unser Strichmännchen den Kopf nicht verliert.</div>
<div><a href="http://www.codeblog.ch/wp-content/uploads/2008/10/ik.png"><img class="alignnone size-medium wp-image-61" title="ik" src="http://www.codeblog.ch/wp-content/uploads/2008/10/ik.png" alt="" width="358" height="236" /></a></div>
<p> </p>
<p>Dies kann alles auch mathematisch abgebildet werden. Flash ist aber ein grafisches Werkzeug, weswegen ich es bei dieser stark vereinfachten Erklärung belassen.</p>
<p><strong>Flash CS4</strong></p>
<p>Wir erstellen im Flash ein paar &#8220;starre Objekte&#8221;. Es spielt dabei keine Rolle ob es sich um ein Movie Clip, eine simple Form oder einen Text handelt.</p>
<p><a href="http://www.codeblog.ch/wp-content/uploads/2008/10/flash_cs4-a.png"><img class="alignnone size-medium wp-image-62" title="flash_cs4-a" src="http://www.codeblog.ch/wp-content/uploads/2008/10/flash_cs4-a-475x315.png" alt="" width="475" height="315" /></a></p>
<p>In meinem Fall hab ich 5 Kreise erstellt. Wenn wir diese nun alle zusammen markieren, können wir das &#8220;Bone Tool&#8221; (siehe Screenshot) aktivieren.</p>
<p><a href="http://www.codeblog.ch/wp-content/uploads/2008/10/flash_cs4-b.png"><img class="alignnone size-medium wp-image-63" title="flash_cs4-b" src="http://www.codeblog.ch/wp-content/uploads/2008/10/flash_cs4-b-475x315.png" alt="" width="475" height="315" /></a></p>
<p>Wir erstellen von Objekt zu Objekt einen &#8220;Knochen&#8221;. Wenn wir nun ein einzelnes Objekt aus unserer kinetischen Kette bewegen, so &#8220;hängen&#8221; die weitern Objekte an dem Objekt das wir verschieben:</p>
<p><a href="http://www.codeblog.ch/wp-content/uploads/2008/10/flash_cs4-c.png"><img class="alignnone size-medium wp-image-64" title="flash_cs4-c" src="http://www.codeblog.ch/wp-content/uploads/2008/10/flash_cs4-c-475x315.png" alt="" width="475" height="315" /></a></p>
<p>Flash CS4 hat für IK einen eigenen Layer Typ erstellt &#8220;Armature&#8221;, wenn wir ihn markieren, erscheinen gewisse Optionen die wir verändern können. So ist es zum Beispiel möglich den Typ von &#8220;Authortime&#8221; auf &#8220;Runtime&#8221; umzustellen. Damit erstellt uns Flash für jedes Objekt einige Events, so dass wir zur Laufzeit (Runtime) die Objekte verschieben können.</p>
<p>Ideal um die eigene Mutter zu beeindrucken!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeblog.ch/de/2008/10/flash-cs4-inverse-kinematics-ik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

