Project by FirePanther
1c6bdde2e1dc69a5ffb9533dea92be7f

Nicht angemeldet.

Das Tutorial wurde noch nicht zuvor von Ihnen gelesen.

Tutorials

Hier finden Sie Tutorials von und für Euch

Tutorialinformationen
1085 Zugriffe / 3 Kommentare

Zeichnen in AutoIt

Kurzbeschreibung
In diesem Tutorial möchte ich euch ein FlashObjekt zeigen, mit dem ihr eine Zeichenplatte erstellen könnt und mit AutoIt Befehle senden könnt.
Mit AutoIt könnt ihr der Zeichenplatte verschiedene Befehle senden. Ihr könnt die Farbe des Pinsels ändern, die Dicke des Pinsels, die Transparenz der Farbe und die Hintergrundfarbe. Außerdem könnt ihr ihm befehlen, dass er den letzten Schritt rückgängig machen soll und ihr könnt Bilder importieren.

In diesem Tutorial wird ihnen dies alles und noch mehr erklärt.

Zeichenobjekt erstellen

Als erstes müsst ihr natürlich das Objekt erstellen. Dafür benötigt ihr erstmal die Flash-Datei (draw.swf).
Hier der Downloadlink: draw.swf

Um FlashObjekte einzubinden, gibt es dafür eine einfache UDF:

AutoIt-Quelltext



dann benutzt ihr folgenden AutoIt-Code um eine GUI für das Objekt zu erstellen:

AutoIt-Quelltext


Dabei muss die draw.swf-Datei im selben Verzeichnis sein, wie die AutoIt-Datei.
Die $Breite- und $Hoehe-Variablen setzen die Größe der Zeichenplatte. Beim GUI werden zur Höhe auch noch 30 Pixel dazuaddiert, da unter der Platte noch ein Bedienungsmenü in Höhe von 30 Pixeln eingebaut werden.

Damit sich das Skript nicht sofort beendet, nachdem man es startet, benötigen wir noch eine Schleife.
Schreibt also nach dem GuiSetState()-Befehl noch folgenden Code:

AutoIt-Quelltext

While 1
$gMsg=GUIGetMsg()
If $gMsg=-3 Then Exit
Wend


Wenn ihr das Skript jetzt abspeichert und ausführt, könnt ihr einen weißen Feld sehen, jedoch kann man nichts zeichnen.
Um was zeichnen zu können, muss man zwei Variablen bearbeiten, und zwar die Transparenz des Pinsels und die Dicke.
Die Variablen heißen t für Transparenz und d für Dicke.
Schreibt also vor eurer While-Schleife folgenden Code:

AutoIt-Quelltext

$Obj.SetVariable("t", 100) ; Setzt die Sichtbarkeit auf 100%
$Obj.SetVariable("d", 10) ; Setzt die Dicke auf 10 Pixel


Wenn ihr euer Quelltext jetzt speichert und ausführt, solltet ihr bereits auf eurer Platte zeichnen können.

Gesamtquelltext bisher:

AutoIt-Quelltext



Variablen von draw.swf

Die beiden Variablen "t" und "d" habt ihr jetzt kennengelernt.
Hier die komplette Liste mit Erklärung:
  • t - Transparenz (0-100, 0 = unsichtbar)
  • d - Dicke (1-50, 1 = sehr fein)
  • c - Farbe [color] (0x000000 = schwarz)
  • loadimg - Bild importieren (Pfad zur JPG-Datei mit Slashes -> keine Backslashes)
  • saveable - Gibt zurück, ob das Bild speicherbar ist oder nicht
  • nosavereason - Falls nicht speicherbar ist, gibt diese Variable den Grund zurück
  • ruck - Wenn auf "1" gesetzt wurde, wird der letzte Schritt rückgängig gemacht und die Variable geht automatisch wieder auf "0" zurück


Befehlsleiste erstellen

Pinselfarbe ändern

Bei der Befehlsleiste beginnen wir mal mit der Pinselfarbe. Die Variable dafür heißt "c" für Color.
Schreibt vor eurem GuiSetState-Befehl folgenden Code:

AutoIt-Quelltext

$clabel1 = GUICtrlCreateLabel("", 10, $Hoehe+5, 20, 20)
GUICtrlSetTip(-1, "Farbe")
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlSetCursor(-1, 0)

Dadurch wird ein rechteckiges Label erstellt.

Ganz am Anfang eures Skriptes kommen die includes und die Deklarierung von Variablen.
Inkludiert die "misc.au3"-Datei und definiert die Variable "$color":

AutoIt-Quelltext

#include <misc.au3>
$color = "0x000000" ; Farbe: Schwarz


Innerhalb der While-Schleife (vor dem Wend-Befehl) müssen wir dem Label noch eine Aktion geben, welches die Pinselfarbe des FlashObjektes ändert.
Schreibt also folgenden Befehl vor dem Wend-Befehl:

AutoIt-Quelltext


Dieser Code erstellt ein Farbauswahldialog, sobald auf den Label geklickt wurde.
Nachdem die Farbe in $color gespeichert wurde, wird die Hintergrundfarbe des Labels in die Farbe geändert und die Variable "c" vom FlashObjekt wird geändert.

Jetzt solltet ihr die Farbe des Pinsels ändern können.

Änderung der Hintergrundfarbe

Das FlashObjekt hat keine Variable, womit ihr die Hintergrundfarbe ändern könnt, jedoch könnt ihr folgendermaßen trotzdem die Hintergrundfarbe ändern.
Dafür erstellt ihr noch ein Label in eurer GUI (vor dem GuiSetState):

AutoIt-Quelltext

$clabel2 = GUICtrlCreateLabel("", 35, $Hoehe+5, 20, 20)
GUICtrlSetTip(-1, "Hintergrundfarbe")
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetCursor(-1, 0)

und vor dem Wend-Befehl schreibt ihr folgendes:

AutoIt-Quelltext


Durch $Obj.bgcolor wird die Hintergrundfarbe geändert. Beachtet hierbei, dass die Farbe kein Hex-Code (0x.....) sein soll, sondern ein HTML-Code (#.......).
Wenn ihr das habt, vergisst aber nicht ganz oben bei eurem Quelltext die Variable $color2 zu definieren. Schreibt also unter eurem $color = "..." noch folgendes: $color2 = "0xFFFFFF" ; Hintergrundfarbe: Weiß

So sollte es jetzt möglich sein die Hintergrundfarbe des Flashobjektes zu ändern.

Dicke des Pinsels ändern

Schreibt in eure GUI (vor dem GuiSetState) folgenden Code:

AutoIt-Quelltext

$dicke = GUICtrlCreateSlider(190, $Hoehe+5, 70, 20)
GUICtrlSetTip(-1, "Pinselstärke: 10")
GUICtrlSetLimit(-1, 50, 1)
GUICtrlSetData(-1, 10)

Dies erstellt einen Pegel der von 1 bis 50 geht. Der Pegel steht Standardmäßig bei 10 (Pixel).
Die Aktionen kommen wieder vor dem Wend-Befehl und sieht so aus:

AutoIt-Quelltext

If $gMsg = $dicke Then
GUICtrlSetTip($dicke, "Pinselstärke: " & GUICtrlRead($dicke) )
$Obj.SetVariable("d", GUICtrlRead($dicke))
EndIf

und falls ihr alles richtig gemacht habt, solltet ihr die Dicke des Pinsels bearbeiten können.


fortsetzung folgt...
Kommentare
Der Kommentar wurde noch nicht zuvor von Ihnen gelesen. von @night@ (30.06.10, 08:42)
das mit der SWF ist mir neu^^
Sieht gut aus und hat auch nicht so viele Rechtschreibefehler. Gutes gelingen beim Weiterschreiben ;) :thumbup:
Der Kommentar wurde noch nicht zuvor von Ihnen gelesen. von FirePanther (08.04.10, 06:16)
@Network: welche meinst du? meinst du draw.swf? die hab ich bereits zum download angeboten... und wenn du die quelltexte meinst, die werd ich dann nächstens zum download anbieten ^^
Der Kommentar wurde noch nicht zuvor von Ihnen gelesen. von Network (07.04.10, 23:04)
:D Die ganzen Dateien als Download währen nicht schlecht!
:thumbsup: