Danke, dann ist alles klar. Werde dann gleich mal das erste Script in Angriff nehmen :).
AutoItObject - OOP für AutoIt
-
progandy -
19. Februar 2010 um 19:25
-
-
Kann man damit nun auch die D3D EndScene hooken?
Ist ja ein Beispiel dabei, dass sowas ähnliches macht, nur diese Graphic soll halt in Programme eingeschleust werden, die DirectX verwenden.
Geht das mit diesem AutoItObject? -
Kann man damit nun auch die D3D EndScene hooken?
Ist ja ein Beispiel dabei, dass sowas ähnliches macht, nur diese Graphic soll halt in Programme eingeschleust werden, die DirectX verwenden.
Geht das mit diesem AutoItObject?
Hooken geht mit AutoIt nicht. Dafür benötigt man eine DLL in dem Programm das man hooken will. Diese nimmt dann von deinem Skript Befehle an, die sie bei EndScene ausführt. Das ist aber schön kompliziert, da mach ich dir kein Beispiel.Es ist ein großer Unterschied, ob die Graphik intern dargestellt werden soll oder in ein andres Programm eingeschleust wird.
-
Hm ok : /
-
So hab nun etwas rumporbiert, OOP ist mir schon aus anderen Sprachen bekannt, allerdings habe ich noch etwas was mir nicht ganz verständlich ist.
Es gibt die funktion _AutoItObject_AddDestructor aber keine Funktion _AutoItObject_Destruct. So wie ich das nun verstanden habe löst sich das Objekt erst am Ende des Scriptes auf und man hat keine Möglichkeit es vorher aufzulösen, ist das richtig?
Ist der Einbau von Klassen und Klassenvererbungen noch geplant?
-
Einfach genial Ich werde mich in nächster Zeit mal reinarbeiten und schauen was ich damit anfangen kann, aber soetwas umzusetzen ist lobenswert.
-
Mal ne ganz dumme Frage, da ich mich mit OOP noch nie wirklich beschäftigt habe:
Welche Vorteile bringt mir das?
-
Vor allem bringt das Struktur in deine Programme Funktionen (Methoden) und Variablen (Properties) werden in einem Objekt zusammengefasst und diesem eindeutig zugeordnet.
Du kannst damit z.B. bei einem Spiel die Spieler als Objekte erstellen.
Willst du nun auf den Namen zugreifen, schreibst du einfach
$oSpieler.name
statt wie bei der Verwendung eines Arrays
_Benutzer_GetName($aSpieler) oder $aSpieler[$SPIELER_NAME_INDEX]Ist jetzt ein schlechtes Beispiel, aber mit dem erklären hab ichs nicht so
-
Zitat
Aufteilung der AbläufeWiederverwendbarkeit und die Darstellung der reelen Welt
Mit Objekten kann man die Umwelt (die das Programm unterstützt) darstellen und damit efiiziente und leichter lesbare und erweiterbare Software herstellen
die kapselung von Daten, bzw. Programmcode.
zB ein Objekt "Auto" und ein Objekt "Strasse".
Die Strasse muss sich nicht darum kümmern wie das Auto die Reifen bewegt,
und dem Auto ist egal ob die Strasse auf Zement oder Rasen gebaut ist.geringe Fehleranfälligkeit
Ein Objekt kontrolliert den Zugriff auf seine Daten selbst. Insbesondere kann es fehlerhafte Zugriffe abwehren.gute Wiederverwendbarkeit
Ein Objekt verwaltet sich selbst. Es kann deshalb wie ein Baustein in beliebigen Programmen eingesetzt werden.geringer Wartungsaufwand
Ein Objekt kann die interne Darstellung seiner Daten an neue Anforderungen anpassen, ohne dass ein Anwendungsprogramm etwas davon merkt. -
Danke, das hilft mir schonmal weiter. Progandys Beispiel erinnert mich an selbsterstellte Typen in BlitzBasic. Damit hätte ich schonmal einen Punkt, der mir vertraut vorkommt. Ich werde mal versuchen ein bisschen mit Objekten "rumzuspielen". Danke euch beiden für die Erklärung!
-
das is ziemlich geil... und ne richtig gute idee, oop für autoit
is dir wirklich gut gelungen, danke dirofftopic: wo is denn die autoit-datenbank hier im forum? nen bbcode gibts ja auch:
[db]1[/db] -
https://autoit.de/index.php?page=DownloadDB (Wurde aus dem Menü herausgenommen)
-
-
Dann lade dir AutoIt v3.3.4.0 -
Dann lade dir AutoIt v3.3.4.0Danke
Und noch eine Frage: Wie kann man ein Array als Property zuweisen und verwenden?
-
die udf ist klasse und ihr auch thx!
ich habe hier ein kleine funktion gemacht die das erstellen von objecte erleichtern soll
Spoiler anzeigen
[autoit]#include <AutoItObject.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
_AutoItObject_Startup()$oStringBetween = _ObjCreate('__StringBetween', 'StringBetween', 'String|Start|End')
[/autoit] [autoit][/autoit] [autoit]$oStringBetween.String = '<test>'
[/autoit] [autoit][/autoit] [autoit]
$oStringBetween.Start = '<'
$oStringBetween.End = '>'$String = $oStringBetween.StringBetween
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_ArrayDisplay($String)Func _ObjCreate($FuncName, $Name, $Propertys)
[/autoit] [autoit][/autoit] [autoit]
If $Propertys = '' Or $FuncName = '' Or $Name = '' Then Return SetError(1, @extended, -1)
Local $Obj = _AutoItObject_Create()
Switch StringInStr($Propertys, '|')
Case True
$sPropertys = StringSplit($Propertys, '|', 2)
Switch IsArray($sPropertys)
Case True
For $i = 0 To UBound($sPropertys) -1
_AutoItObject_AddProperty($Obj, $sPropertys[$i])
Next
_AutoItObject_AddMethod($Obj, $Name, $FuncName)
Return $Obj
Case Else
Return SetError(2, @extended, 0)
EndSwitch
Case Else
_AutoItObject_AddProperty($Obj, $Propertys)
_AutoItObject_AddMethod($Obj, $Name, $FuncName)
Return $Obj
EndSwitch
Return SetError(3, @extended, 1)
EndFuncFunc __StringBetween($oSelf)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
$reg = StringRegExp($oSelf.String, '(?s)' & $oSelf.Start & '(.+?)' & $oSelf.End, 3)
If @error Then Return SetError(1, @extended, 0)
Return $reg
EndFuncist auf die schnelle gemacht
geht sicher noch kürzer und besserich freu mich wenns jmd gebrauchen kann^^
-
Hallo,
wirklich schöne UDF. Gute Arbeit
Hab eine Frage. Kann ich die mit Deiner erstellten Objekte auch mit GUICtrlCreateObject benutzen? Wäre echt super!
-
Hallo,
wirklich schöne UDF. Gute Arbeit
Hab eine Frage. Kann ich die mit Deiner erstellten Objekte auch mit GUICtrlCreateObject benutzen? Wäre echt super!
Nein, du kannst keine GUI-Objekte erstellen, das wird auch nicht eingebaut werden.
Und noch eine Frage: Wie kann man ein Array als Property zuweisen und verwenden?
[autoit]
Ganz einfach:Dim $array[4]
[/autoit]
$object.property = $array
;Zugriff z.B.:
$array = $object.property
$v = $array[3]
; oder (bei 1D und 2D)
$v = $object.property(3) -
Zitat
Nein, du kannst keine GUI-Objekte erstellen, das wird auch nicht eingebaut werden.
Danke für die schnelle Antwort. Theoretisch könnte man mit AutoIt auch so was machen oder?
Noch eine Frage. Kann man die erstellte Objekte wie bei Java benutzen? Also mit verschiedenen Instanzen oder ist das jetzt total was anderes?
-
Ein erstelltes Objekt ist eine Instanz. Um weitere Objecte (Instanzen) zu erzeugen kannst du entweder das Objekt komplett neu erstellen oder du übergibst das erste Object an _AutoItObject_Create, dann hat das neue alle Funktionen und Methoden des ersten inklusive den Werten:
[autoit]$o1 = _AutoItObject_Create()
[/autoit]
_AutoItObject_Add...($o1, ....)
...
$o2 = _AutoItObject_Create($o1) -