AutoItObject - OOP für AutoIt

  • [Blockierte Grafik: http://www.abload.de/img/autoitobjecttextxsvw.png]
    Version 1.1.0 von AutoItObject wurde veröffentlicht!

    Diese UDF ermöglicht es, Objekte mit AutoIt zu erstellen. Ein Objekt besteht aus Eigenschaften, Methoden und Destruktoren.

    • Eine Eigenschaft kann mit 3 verchiedenen Optionen erstllet werden: Vollzugriff, Nur lesen und Privat. Innerhalb des Objekts hat man aber kompletten Zugriff darauf.
    • Einer Methode wird eine AutoIt-Funktion zugeordnet, die dann aufgerufen wird. Sie kann als öffentlich oder Privat erstellt werden.
    • Destruktoren schließlich werden aufgerufen, wenn ein Objekt gelöscht wird und sind dazu gedacht, z.B: Dateien zu schließen oder ähnliches, was beim Löschen des Objekts getan werden muss.


    Ein paar Sachen müssen jedoch beachet werden:

    • Destruktoren von Objekten, die beim Skriptende noch existieren, werden nicht aufgerufen. Das ist aus technischen Gründen nicht möglich.
    • Die Haupschleife darf nicht innerhalb eines Objekts liegen, da durch die Verwendeung von DLLCallbacks die GUI während der Ausführung von Objektmethoden blockiert wird.
    • Nach dem Aufruf einer Objekt-Methode ist @error nicht gesetzt. Stattdessen kann $oObjekt.__error__ verwendet werden, um einen Fehler festzustellen.

    Hier noch ein kleines Beispiel für die Verwendung der Funktionen:

    [autoit]

    #include "AutoItObject.au3"

    [/autoit][autoit][/autoit][autoit]

    _AutoItObject_Startup()

    [/autoit][autoit][/autoit][autoit]

    $oMsgBox = _AutoItObject_Create()
    _AutoItObject_AddProperty($oMsgBox, "title")
    _AutoItObject_AddProperty($oMsgBox, "text")
    _AutoItObject_AddProperty($oMsgBox, "flags", $ELSCOPE_PUBLIC, 64)
    _AutoItObject_AddMethod($oMsgBox, "show", "_oMsgBox_Show")

    [/autoit][autoit][/autoit][autoit]

    Func _oMsgBox_Show($oSelf, $sText='')
    If $sText='' Then $sText = $oSelf.text
    Return MsgBox($oSelf.flags, $oSelf.title, $sText)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    $oMsgBox.title = "Eine Messagebox mit Objekt"
    $oMsgBox.text = "Eine kleine Demostration von AutoItObject"
    $oMsgBox.show()

    [/autoit][autoit][/autoit][autoit]

    $oMsgBox.show("Der Text kann auch so übergeben werden")

    [/autoit]

    Seid ihr neugierig geworden? Dann könnt ihr euch unter folgendem Link AutoItObject downloaden:


    Edit BugFix: Da z.Zt. beide Links nicht erreichbar sind, noch folgende verfügbare Links:

    Lizenzbestimmungen

    ; #INDEX# =======================================================================================================================
    ; Title .........: AutoItObject
    ; AutoIt Version : 3.3
    ; Language ......: English (language independent)
    ; Description ...: Brings Objects to AutoIt.
    ; Author(s) .....: monoceres, trancexx, Kip, ProgAndy
    ; Copyright .....: Copyright (C) The AutoItObject-Team. All rights reserved.
    ; License .......: Artistic License 2.0, see Artistic.txt
    ;
    ; This file is part of AutoItObject.
    ;
    ; AutoItObject is free software; you can redistribute it and/or modify
    ; it under the terms of the Artistic License as published by Larry Wall,
    ; either version 2.0, or (at your option) any later version.
    ;
    ; This program is distributed in the hope that it will be useful,
    ; but WITHOUT ANY WARRANTY; without even the implied warranty of
    ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    ; See the Artistic License for more details.
    ;
    ; You should have received a copy of the Artistic License with this Kit,
    ; in the file named "Artistic.txt". If not, you can get a copy from
    ; <http://www.perlfoundation.org/artistic_license_2_0> OR
    ; <http://www.opensource.org/licenses/artistic-license-2.0.php>
    ;
    ; ------------------------ AutoItObject CREDITS: ------------------------
    ; Copyright (C) by:
    ; The AutoItObject-Team:
    ; Andreas Karlsson (monoceres)
    ; Dragana R. (trancexx)
    ; Dave Bakker (Kip)
    ; Andreas Bosch (progandy, Prog@ndy)
    ;
    ; ===============================================================================================================================


    Fehler können im Bugtracker eingestellt werden, sollten sie dort noch nicht gelistet sein
    Den Bugtracker aber nicht für allgemeine Hilfe missbrauchen sondern nur bei Fehlern in der UDF verwenden.

    By trancexx [->], ProgAndy, monoceres [->], Kip [->]

    4 Mal editiert, zuletzt von BugFix (23. Dezember 2012 um 14:24)

  • Wow, bin beeindruckt.
    Muss ja ein riesen Projekt sein ^^
    Finds ne tolle Idee, habe mir heute noch so gedacht, man, für das Prog brauch ich n Object, und dann kommt dieser Thread :thumbup: :thumbup:
    Haut mich echt aus den Socken ^^
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Wow, bin beeindruckt.
    Muss ja ein riesen Projekt sein ^^
    Finds ne tolle Idee, habe mir heute noch so gedacht, man, für das Prog brauch ich n Object, und dann kommt dieser Thread :thumbup: :thumbup:
    Haut mich echt aus den Socken ^^
    MfG. PrideRage


    Danke. Das sind "nur" ~3300 Codezeilen inklusive Kommentare, 1700 davon in AutoIt, der Rest C++. Das ist aber ein gemeinsames Projekt von monoceres, trancexx, Kip und mir :D

  • Coole Sache OOP mit AutoIt! Jetzt muss ich mir nur noch OOP reinziehen und verstehen!

    Mal sehen, ob man damit auch GDI+ mit Klassen verwenden kann! Aber bis dahin ist noch ein langer weg für mich...

    Danke für die OOP Implementierung :thumbup: :!:

    Warum wurde eine DLL hinzugefügt? Ursprünglich war dich keine dabei oder?


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Sehr geil OOP hat mir bei Autoit schon immer gefehlt :).

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • 1. Sind Objecte nicht *.ocx Dateien?
    2. Kann mann die Fertigen Objekte irgendwie Kompilieren und als *.ocx Nutzen?

    Objekte sind nicht Objekte :D Es gibt viele verschiedene Arten, OCX ist eine davon. /genauer gesagt ist es eine DLL, die ActiveX-Objekte enthält) Mit AutoIt können aber keine OCX-Dateien erstellt werden.

    Weitere häufige Fragen findet ihr in der FAQ

  • Coole Sache :).
    Aber kannst du noch mal ein bisschen den Unterschied zwischen Klassen und Instanzen in der Implementierung herausheben? Ich sehe ihn noch nicht so ganz :S.


    In dieser Implementierung kann man nicht wirklich Klassen erstellen, sondern nur direkt die Instanz. Um sozusagen eine Klasse zu erstellen, brauchst du deine eigene Funktion, die das Objekt einrichtet und dann zurückgibt, also so:

    [autoit]

    Func _MeinObjekt()
    Local $o = _AutoItObject_Create()
    _AutoItObject_Add...
    Return $o
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    $Objekt = _MeinObjekt

    [/autoit]


    Statische Eigenschaften kann man mit einem Trick erreichen: Erstelle eine Funktion, die nur eine Local Static-Variable setzt und liest:

    Spoiler anzeigen
    [autoit]

    #include "AutoitObject.au3"
    _AutoItObject_Startup()
    Func _MeinObjekt()
    Local $o = _AutoItObject_Create()
    _AutoItObject_AddMethod($o, "statisch", "_MeinObjekt_statisch")
    _AutoItObject_AddProperty($o, "lokal")
    Return $o
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _MeinObjekt_statisch($oSelf, $vData='')
    Local Static $vStatic
    Switch $oSelf.__propcall__
    Case 1
    $vStatic = $vData
    Case Else
    Return $vStatic
    EndSwitch
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    $o1 = _MeinObjekt()
    $o2 = _MeinObjekt()

    [/autoit] [autoit][/autoit] [autoit]

    $o2.lokal = "Objekt 2"
    $o2.statisch = "!!!Objekt 1"

    [/autoit] [autoit][/autoit] [autoit]

    $o1.lokal = "!!!Objekt 1"
    $o1.statisch = "!!!Objekt 1"

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, 'lokal', $o2.lokal)
    MsgBox(0, 'statisch', $o2.statisch)

    [/autoit]
  • Hi,

    [autoit]

    Local Static $vStatic

    [/autoit]

    Habe den Thread im engl. Forum bzgl. der statischen Variablen nicht mehr weiter verfolgt, aber soweit ich mich erinnere, sind lt. den Dev´s statische Variablen in AuoIt auch in Zukunft nicht vorgesehen. Kann man nun statische Variablen nutzen ohne die OO-Funktionen einzusetzen (Einbindung der "AutoitObject.au3" vorausgesetzt) ?

  • Zwei Fragen habe ich nicht:

    1. Muss die AutoItObject.dll und AutoItObject_X64.dll ins include oder scriptverzeichniss
    2. Werden diese zwei Dateien beim compilieren des Scriptes mit in die exe eingebunden oder muss man sie selber mit FileInstall hinzufügen?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Zitat

    Also, bisher sind Static-Variablen in AutoIt eingebaut

    :thumbup: man dankt...

  • Zwei Fragen habe ich nicht:

    1. Muss die AutoItObject.dll und AutoItObject_X64.dll ins include oder scriptverzeichniss
    2. Werden diese zwei Dateien beim compilieren des Scriptes mit in die exe eingebunden oder muss man sie selber mit FileInstall hinzufügen?


    Die UDF verwendet standardmäßig schon integrierte UDFs mit der Speicher-Technik von trancexx. wenn du normale DLLs verwenden willst, musst du die Parameter bei _AutoItObjet_Startup mal anschauen ;)

  • Mh also sind die zwei DLLs die im Downloadpack unnötigerweise drin?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Mh also sind die zwei DLLs die im Downloadpack unnötigerweise drin?


    Nein. Du kannst sie verwenden, musst aber nicht. Das ist jedem selbst überlassen, deshalb sind sie drin. Außerdem könnte es sein, dass die Memory-DLL Technik mal nicht funktioniert. (bisher ist uns nichts bekannt, aber man weiß ja nie ;) ) Falls dann Fehler auftreten kann man die DLLs verwenden.