morgen,
ich verzweifle hier gerade an einer (für c++ verhältnisse) geradezu lächerlich banalen sache.
Ich möchte einfach nur ein Objekt erstellen Namens "book",welches Elemente des Typs "node" hat. Also lege ich ein feld vom typ "node" an (als member des Objekts "book"). Nun Soll das objekt books ausserdem eine methode "addNode" enthalten,die zu diesem Objekt weitere "nodes" anlegt. Das geschieht mithilfe einer hilfsfunktion createNode deren rückgabewert anschließen mit _ArrayAdd an das "nodes"-Feld angehängt werden soll.
Eigentlich ganz einfach....Aber auch nur für C++ verhältnisse. Ich krieg es einfach nicht gebacken mit Autoit.Ist das irgendwie zu realisieren??
Hier mein Code:
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <TreeViewConstants.au3>
#include <GuiTreeView.au3>
#include<Array.au3>
#include "AutoItObject.au3"
Opt("MustDeclareVars", 1)
[/autoit][autoit][/autoit][autoit]; Initialize AutoItObject
_AutoItObject_Startup()
Global $hGui = GUICreate("Hello World", 500, 500, -1, -1)
GUISetState(@SW_SHOW)
Global $treeview = GUICtrlCreateTreeView(100, 100, 200, 300)
GUISetState()
Func createBook($Filename, $Name)
Local $oNode = _AutoItObject_Create()
;Public Members
[/autoit][autoit][/autoit][autoit]_AutoItObject_AddProperty($oNode, "NAME", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "PAGE", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "ID", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "FILENAME", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "NODES", $ELSCOPE_PUBLIC) ;ISt ein FELD, oder sollte eins sein...
_AutoItObject_AddMethod($oNode, "addNode", "addNode") ;die funktion,obj selbst
;"noch" Public Members
_AutoItObject_AddProperty($oNode, "CurrentNodes", $ELSCOPE_PUBLIC)
Local $hCtrlID
$hCtrlID = GUICtrlCreateTreeViewItem($Name, $treeview)
With $oNode
.NODES = 0
.NAME = $Name
.Page = 1
.ID = $hCtrlID
.FILENAME = $Filename
.CurrentNodes = 0
EndWith
Return $oNode
EndFunc ;==>createBook
Func createNode(ByRef $oParent, _
$ParentID, _
$Type, _
$Name, _
$Page)
Local $oNode = _AutoItObject_Create()
;Public Members
[/autoit][autoit][/autoit][autoit]_AutoItObject_AddProperty($oNode, "TYPE", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "NAME", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "PAGE", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "ID", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "PARENTID", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "FILENAME", $ELSCOPE_PUBLIC)
_AutoItObject_AddProperty($oNode, "NODES[10]", $ELSCOPE_PUBLIC) ;ISt ein FELD
_AutoItObject_AddMethod($oNode, "addNode", "addNode")
; Private Members
_AutoItObject_AddProperty($oNode, "CurrentNodes", $ELSCOPE_PRIVATE)
Local $hCtrlID
$hCtrlID = GUICtrlCreateTreeViewItem($Name & " S." & $Page, $ParentID)
With $oNode
.TYPE = $Type
.NAME = $Name
.Page = $Page
.ID = $hCtrlID
.CurrentNodes = 0
.PARENTID = $ParentID
.FILENAME = $oParent.FILENAME
EndWith
return $oNode
EndFunc ;==>createNode
Func addNode(ByRef $oParent, $Type, $Name, $Page)
Local $oNode = 0
With $oParent
$oNode = createNode($oParent, .ID, $Type, $Name, $Page)
_ArrayAdd(.NODES, $oNode)
EndWith
EndFunc ;==>addNode
Global $books[10]
$books[0] = createBook("test.pdf", "Buch 1")
$books[0] .addNode($books[0], 1, "test", 20)
ConsoleWrite($books[0] .Name)
_AutoItObject_Shutdown()
edit:habe eben noch etwas gestöbert und meine,dass ich mein problem mit Enmus lösen muss. Wusste bis vor einigen minuten nicht einmal was das ist. Hat jemand vielleicht eine Erklärung parat,was diese enumfunktionen machen und was der iterator ist?