here, too.
Sorry that I don't have a better 'subject', but I also didn't want to post
them all in seperate threads.
Free for use, credits are always nice
Vector-Class
For calculating with vectors.
Code: Select all
; Example below! Function description can be found in the interface declaration
Structure cOVECTORVT
; Functions
fSetXYZ.l
fSetV.l
fGetX.l
fGetY.l
fGetZ.l
fGetLength.l
fGetLengthSqr.l
fSetX.l
fSetY.l
fSetZ.l
fAddV.l
fAddXYZ.l
fSubV.l
fSubXYZ.l
fGetDotPV.l
fCrossPV.l
fCpy2OV.l
fMul.l
fDiv.l
fNormalize.l
fGetDataPtr.l
fGetDataFromMem.l
fRotateAroundX.l
fRotateAroundY.l
fRotateAroundZ.l
fRotateAroundV.l
EndStructure
Structure cOVECTOR
VTable.l
; Data
x.f
y.f
z.f
EndStructure
Interface iOVECTOR
SetXYZ(x.f, y.f, z.f) ;Set x, y, z parts of vector seperately
SetV(*v.cOVECTOR) ;Set x,y,z like the vector as parameter
GetX.f() ;Get x part
GetY.f() ;Get y part
GetZ.f() ;Get z part
GetLength.f() ;Get length of vector (norm)
GetLengthSqr.f() ;Get the length in square
SetX(x.f) ;Set x part
SetY(y.f) ;Set y part
SetZ(z.f) ;Set z part
AddV(*v.cOVECTOR) ;Add a vector
AddXYZ(x.f, y.f, z.f) ;Add a vector
SubV(*v.cOVECTOR) ;Sub a vector
SubXYZ(x.f, y.f, z.f) ;Sub a vector
GetDotPV.f(*v.cOVECTOR) ;Get dotproduct (scalar) with *v
CrossPV(*v.cOVECTOR) ;Get crossproduct (vector) with *v
Cpy2OV.l() ;Creates a copy of the vector (allocates a new object!)
Mul(Factor.f) ;Multiply with a factor (stretch)
Div(Divisor.f) ;Divide by a divisor (compress)
Normalize() ;Recalculates vector to length of 1.0
GetDataPtr.l() ;Gets pointer to XYZ in memory (3 floats in memory)
GetDataFromMem(*mem) ;Sets XYZ like in *mem
RotateAroundX(a.f) ;Rotates around x axis
RotateAroundY(a.f) ;Rotates around y axis
RotateAroundZ(a.f) ;Rotates around z axis
RotateAroundV(*v.cOVECTOR, a.f) ;Rotates around a vector
EndInterface
Procedure vect_SetXYZ(*this.cOVECTOR, x.f, y.f, z.f)
*this\x = x
*this\y = y
*this\z = z
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_SetV(*this.cOVECTOR, *v.cOVECTOR)
If *v
*this\x = *v\x
*this\y = *v\y
*this\z = *v\z
EndIf
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure.f vect_GetX(*this.cOVECTOR)
ProcedureReturn *this\x
EndProcedure
Procedure.f vect_GetY(*this.cOVECTOR)
ProcedureReturn *this\y
EndProcedure
Procedure.f vect_GetZ(*this.cOVECTOR)
ProcedureReturn *this\z
EndProcedure
Procedure.f vect_GetLength(*this.cOVECTOR)
ProcedureReturn Sqr(*this\x * *this\x + *this\y * *this\y + *this\z * *this\z)
EndProcedure
Procedure.f vect_GetLengthSqr(*this.cOVECTOR)
ProcedureReturn *this\x * *this\x + *this\y * *this\y + *this\z * *this\z
EndProcedure
Procedure vect_SetX(*this.cOVECTOR, x.f)
*this\x = x
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_SetY(*this.cOVECTOR, y.f)
*this\y = y
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_SetZ(*this.cOVECTOR, z.f)
*this\z = z
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_AddV(*this.cOVECTOR, *v.cOVECTOR)
If *v
*this\x + *v\x
*this\y + *v\y
*this\z + *v\z
EndIf
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_AddXYZ(*this.cOVECTOR, x.f, y.f, z.f)
*this\x + x
*this\y + y
*this\z + z
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_SubV(*this.cOVECTOR, *v.cOVECTOR)
If *v
*this\x - *v\x
*this\y - *v\y
*this\z - *v\z
EndIf
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_SubXYZ(*this.cOVECTOR, x.f, y.f, z.f)
*this\x - x
*this\y - y
*this\z - z
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure.f vect_GetDotPV(*this.cOVECTOR, *v.cOVECTOR)
If *v
ProcedureReturn *this\x * *v\x + *this\y * *v\y + *this\z * *v\z
EndIf
ProcedureReturn 0
EndProcedure
Procedure vect_CrossPV(*this.cOVECTOR, *v.cOVECTOR)
Protected vx.f, vy.f, tx.f, ty.f, tz.f
If *v
tx = *this\x
ty = *this\y
tz = *this\z
*this\x = ty * *v\z - tz * *v\y
*this\y = tz * *v\x - tx * *v\z
*this\z = tx * *v\y - ty * *v\x
EndIf
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Declare new_ovector()
Procedure vect_Cpy2OV(*this.cOVECTOR)
Protected *v.iOVECTOR
*v.iOVECTOR = new_ovector()
*v\SetV(*this)
ProcedureReturn *v
EndProcedure
Procedure vect_Mul(*this.cOVECTOR, Factor.f)
*this\x * Factor
*this\y * Factor
*this\z * Factor
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_Div(*this.cOVECTOR, Divisor.f)
Protected f.f
f = 1.0 / Divisor
*this\x * f
*this\y * f
*this\z * f
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_Normalize(*this.cOVECTOR)
Protected Len.f
Len = 1.0 / vect_GetLength(*this)
*this\x * Len
*this\y * Len
*this\z * Len
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure.l vect_GetDataPtr(*this.cOVECTOR)
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_GetDataFromMem(*this.cOVECTOR, *mem)
CopyMemory(*mem, *this + OffsetOf(cOVECTOR\x), 3 * 4)
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_RotateAroundX(*this.cOVECTOR, a.f)
Protected x.f, y.f, z.f
x = *this\x
y = *this\y
z = *this\z
; M * *this
*this\x = x
*this\y = Cos(a) * y - Sin(a) * z
*this\z = Sin(a) * y + Cos(a) * z
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_RotateAroundY(*this.cOVECTOR, a.f)
Protected x.f, y.f, z.f
x = *this\x
y = *this\y
z = *this\z
; M * *this
*this\x = Cos(a) * x + Sin(a) * z
*this\y = y
*this\z = -Sin(a) * x + Cos(a) * z
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_RotateAroundZ(*this.cOVECTOR, a.f)
Protected x.f, y.f, z.f
x = *this\x
y = *this\y
z = *this\z
; M * *this
*this\x = Cos(a) * x - Sin(a) * y
*this\y = Sin(a) * x + Cos(a) * y
*this\z = z
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure vect_RotateAroundV(*this.cOVECTOR, *v.cOVECTOR, a.f) ; *v has to be normalized
Protected x.f, y.f, z.f, cosa.f, sina.f, ecosa.f
cosa = Cos(a)
sina = Sin(a)
ecosa = 1.0 - cosa
x = *this\x
y = *this\y
z = *this\z
; M * *this
*this\x = x * (cosa + *v\x * *v\x * ecosa) + y * (*v\x * *v\y * ecosa - *v\z * sina) + z * (*v\x * *v\z * ecosa + *v\y * sina)
*this\y = x * (*v\y * *v\x * ecosa + *v\z * sina) + y * (cosa + *v\y * *v\y * ecosa) + z * (*v\y * *v\z * ecosa - *v\x * sina)
*this\z = x * (*v\z * *v\x * ecosa - *v\y * sina) + y * (*v\z * *v\y * ecosa + *v\x * sina) + z * (cosa + *v\z * *v\z * ecosa)
ProcedureReturn *this + OffsetOf(cOVECTOR\x)
EndProcedure
Procedure.l new_ovector()
Protected *v.cOVECTOR
Static *VTable.cOVECTORVT
If *VTable = 0
*VTable = AllocateMemory(SizeOf(cOVECTORVT))
*VTable\fSetXYZ = @vect_SetXYZ()
*VTable\fSetV = @vect_SetV()
*VTable\fGetX = @vect_GetX()
*VTable\fGetY = @vect_GetY()
*VTable\fGetZ = @vect_GetZ()
*VTable\fGetLength = @vect_GetLength()
*VTable\fGetLengthSqr = @vect_GetLengthSqr()
*VTable\fSetX = @vect_SetX()
*VTable\fSetY = @vect_SetY()
*VTable\fSetZ = @vect_SetZ()
*VTable\fAddV = @vect_AddV()
*VTable\fAddXYZ = @vect_AddXYZ()
*VTable\fSubV = @vect_SubV()
*VTable\fSubXYZ = @vect_SubXYZ()
*VTable\fGetDotPV = @vect_GetDotPV()
*VTable\fCrossPV = @vect_CrossPV()
*VTable\fCpy2OV = @vect_Cpy2OV()
*VTable\fMul = @vect_Mul()
*VTable\fDiv = @vect_Div()
*VTable\fNormalize = @vect_Normalize()
*VTable\fGetDataPtr = @vect_GetDataPtr()
*VTable\fGetDataFromMem = @vect_GetDataFromMem()
*VTable\fRotateAroundX = @vect_RotateAroundX()
*VTable\fRotateAroundY = @vect_RotateAroundY()
*VTable\fRotateAroundZ = @vect_RotateAroundZ()
*VTable\fRotateAroundV = @vect_RotateAroundV()
EndIf
*v = AllocateMemory(SizeOf(cOVECTOR))
*v\VTABLE = *VTable
ProcedureReturn *v
EndProcedure
; DefType.iOVECTOR a, b
;
; a = new_ovector()
; b = new_ovector()
;
; a\SetXYZ(1, 2, 0)
; b\SetXYZ(2, 3, 0)
; a\SubV(b)
;
; Debug a\GetX()
; Debug a\GetY()
; Debug a\GetZ()
;
; a\Normalize()
; Debug a\GetX()
; Debug a\GetY()
; Debug a\GetZ()
;
; Debug a\GetLength()
; Debug a\GetLengthSqr()
; NewList vec.iOVECTOR()
; AddElement(vec())
; vec() = new_ovector()
; vec()\SetXYZ(1, 2, 0)
;
; AddElement(vec())
; vec() = new_ovector()
; vec()\SetXYZ(3, 21, 0)
;
; Debug vec()\GetX()
; DefType.iOVECTOR a, b
;
; a = new_ovector()
; b = new_ovector()
;
; a\SetXYZ(0, 10, 0)
; b\SetXYZ(1, 0, 0) ; X-Achse ^^
; b\Normalize() ; wäre nicht nötig hier
;
; Debug a\GetX()
; Debug a\GetY()
; Debug a\GetZ()
;
; Debug "RotateX"
; a\RotateAroundX(3.1415926 / 2.0)
; Debug a\GetX()
; Debug a\GetY()
; Debug a\GetZ()
;
; Debug "RotateY"
; a\RotateAroundY(3.1415926 / 2.0)
; Debug a\GetX()
; Debug a\GetY()
; Debug a\GetZ()
;
; Debug "RotateZ"
; a\RotateAroundZ(3.1415926 / 2.0)
; Debug a\GetX()
; Debug a\GetY()
; Debug a\GetZ()
;
; Debug "RotateV = RotateX"
; a\RotateAroundV(b, 3.1415926 / 2.0)
; Debug a\GetX()
; Debug a\GetY()
; Debug a\GetZ()
How does one interface inherit functions and datas from another.
Code: Select all
;- BASE class
; this class will be inherited by iOBJ with all its methods and data fields
Interface iBASE
SetS(s.s)
GetS.s()
SetL(l.l)
GetL.l()
SetF(f.f)
GetF.f()
EndInterface
Structure cBASEVT
SetS.l
GetS.l
SetL.l
GetL.l
SetF.l
GetF.l
EndStructure
; only iBASE can have a VT pointer because it has to be the first LONG
; in the object stucture!
Structure cBASE
*VTable.cBASEVT
;Data
s.s
l.l
f.f
EndStructure
;- OBJ class
; this class will inherit iBASE and so will get new functions and data fields
; the structure/interface of iBASE will be inserted just at the start of the
; iOBJ structure/interface -> VT pointer will be from iBASE and the first
; field in the structure
Interface iOBJ Extends iBASE
SetW(w.w)
GetW.w()
SetB(b.b)
GetB.b()
EndInterface
Structure cOBJVT Extends cBASEVT
SetW.l
GetW.l
SetB.l
GetB.l
EndStructure
Structure cOBJ Extends cBASE
w.w
b.b
EndStructure
;- BASE functions
Procedure base_SetS(*this.cBASE, s.s)
*this\s = s
EndProcedure
Procedure.s base_GetS(*this.cBASE)
ProcedureReturn *this\s
EndProcedure
Procedure base_SetL(*this.cBASE, l.l)
*this\l = l
EndProcedure
Procedure.l base_GetL(*this.cBASE)
ProcedureReturn *this\l
EndProcedure
Procedure base_SetF(*this.cBASE, f.f)
*this\f = f
EndProcedure
Procedure.f base_GetF(*this.cBASE)
ProcedureReturn *this\f
EndProcedure
;- BASE constructor
Procedure.l new_base()
Protected *p.cBASE
Static *VTable.cBASEVT
If *VTable = 0
; just allocate for its own functions!
*VTable = AllocateMemory(SizeOf(cBASEVT))
*VTable\SetS = @base_SetS()
*VTable\GetS = @base_GetS()
*VTable\SetL = @base_SetL()
*VTable\GetL = @base_GetL()
*VTable\SetF = @base_SetF()
*VTable\GetF = @base_GetF()
EndIf
*p = AllocateMemory(SizeOf(cBASE))
*p\VTable = *VTable
ProcedureReturn *p
EndProcedure
;- OBJ functions
Procedure obj_SetW(*this.cOBJ, w.w)
*this\w = w
EndProcedure
Procedure.w obj_GetW(*this.cOBJ)
ProcedureReturn *this\w
EndProcedure
Procedure obj_SetB(*this.cOBJ, b.b)
*this\b = b
EndProcedure
Procedure.b obj_GetB(*this.cOBJ)
ProcedureReturn *this\b
EndProcedure
;- OBJ constructor
Procedure.l new_obj()
Protected *p.cOBJ, *vt.cOBJVT
; grow up the VT to make place for obj_-functions!
*p = ReAllocateMemory(new_base(), SizeOf(cOBJ))
*p\VTable = ReAllocateMemory(*p\VTable, SizeOf(cOBJVT))
If *p\VTable <> 0
*vt = *p\VTable
*vt\SetW = @obj_SetW()
*vt\GetW = @obj_GetW()
*vt\SetB = @obj_SetB()
*vt\GetB = @obj_GetB()
EndIf
ProcedureReturn *p
EndProcedure
Debug "### The BASE-Class ###"
; will be only of type iBASE!
DefType.iBASE b
b = new_base()
b\SetS("hallo")
b\SetL(20)
b\SetF(21.023)
Debug b\GetS()
Debug b\GetL()
Debug b\GetF()
Debug "### Now the object ###"
; could also be accessed through a iBASE interface pointer
; iOBJ is MORE than iBASE but CONTAINS iBASE
DefType.iOBJ o
o = new_obj()
o\SetS("obj")
o\SetL(666)
o\SetF(616)
o\SetB(11)
o\SetW(12)
CallDebugger
Debug o\GetS()
Debug o\GetL()
Debug o\GetF()
Debug o\GetB()
Debug o\GetW()
Some extended functions for treeview-gadget.
Code: Select all
; See MSDN for more information about each function
Interface cTreeView
InsertItem(lpis.l)
DeleteItem(hItem.l)
DeleteAllItems()
Expand(hItem.l, Flag.l)
GetItemRect(hItem.l, prc.l, fItemRect.l)
GetCount()
GetIndent()
SetIndent(Indent.l)
GetImageList(iImage.l)
SetImageList(himl.l, iImage.l)
GetNextItem(hItem.l, Flag.l)
GetChild(hItem.l)
GetNextSibling(hItem.l)
GetPrevSibling(hItem.l)
GetParent(hItem)
GetFirstVisible()
GetNextVisible(hItem.l)
GetPrevVisible(hItem.l)
GetSelection()
GetDropHilight()
GetRoot()
GetLastVisible()
Select(hItem.l, Flag.l)
SelectItem(hItem.l)
SelectDropTarget(hItem.l)
SelectSetFirstVisible(hItem.l)
GetItem(pitem.l)
SetItem(pitem.l)
EditLabel(hItem.l)
GetEditControl()
GetVisibleCount()
HitTest(lpht.l)
CreateDragImage(hItem.l)
SortChildren(hItem.l, fRecurse.l)
EnsureVisible(hItem.l)
SortChildrenCB(psort.l, fRecurse.l)
EndEditLabelNow(fCancel.l)
GetISearchString(lpsz.l)
SetToolTips(hwndTT.l)
GetToolTips()
SetInsertMark(hItem.l, fAfter.l)
SetUnicodeFormat(fUnicode.l)
SetItemHeight(iHeight.l)
GetItemHeight()
SetBkColor(clr.l)
SetTextColor(clr.l)
GetBkColor()
GetTextColor()
SetScrollTime(uTime.l)
GetScrollTime()
SetInsertMarkColor(clr.l)
GetInsertMarkColor()
SetItemState(hItem.l, Datan.l, _mask.l)
SetCheckState(hItem.l, fCheck.l)
GetItemState(hItem.l, mask.l)
GetCheckState(hItem.l)
SetLineColor(clr.l)
GetLineColor()
MapHTREEITEMToAccID(HTREEITEM.l)
MapAccIDToHTREEITEM(ID.l)
EndInterface
Structure cTreeViewOBJ
VTable.l
f.l[60] ; [SizeOf(cTreeView) / 4]
hGadget.l
EndStructure
#TVM_SETTOOLTIPS = $1100 + 24
#TVM_GETTOOLTIPS = $1100 + 25
#TVM_SETINSERTMARK = $1100 + 26
#TVM_SETUNICODEFORMAT = $2000 + 5
#TVM_GETUNICODEFORMAT = $2000 + 5
#TVM_SETITEMHEIGHT = $1100 + 27
#TVM_GETITEMHEIGHT = $1100 + 28
#TVM_SETBKCOLOR = $1100 + 29
#TVM_SETTEXTCOLOR = $1100 + 30
#TVM_GETBKCOLOR = $1100 + 31
#TVM_GETTEXTCOLOR = $1100 + 32
#TVM_SETSCROLLTIME = $1100 + 33
#TVM_GETSCROLLTIME = $1100 + 34
#TVM_SETINSERTMARKCOLOR = $1100 + 37
#TVM_GETINSERTMARKCOLOR = $1100 + 38
#TVM_GETITEMSTATE = $1100 + 39
#TVM_SETLINECOLOR = $1100 + 40
#TVM_GETLINECOLOR = $1100 + 40
#TVM_MAPHTREEITEMTOACCID = $1100 + 43
#TVM_MAPACCIDTOHTREEITEM = $1100 + 42
#TVGN_LASTVISIBLE = $A
Structure TVITEM
mask.l
hItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
iSelectedImage.l
cChildren.l
LPARAM.l
EndStructure
Procedure TreeView_InsertItem(*Gadget.cTreeViewOBJ, lpis.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_INSERTITEM, 0, lpis)
EndProcedure
Procedure TreeView_DeleteItem(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_DELETEITEM, 0, hItem)
EndProcedure
Procedure TreeView_DeleteAllItems(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_DELETEITEM, 0, #TVI_ROOT)
EndProcedure
Procedure TreeView_Expand(*Gadget.cTreeViewOBJ, hItem.l, Flag.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_EXPAND, Flag, hItem)
EndProcedure
Procedure TreeView_GetItemRect(*Gadget.cTreeViewOBJ, hItem.l, prc.l, fItemRect.l)
;-?
PokeL(prc, hItem)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETITEMRECT, fItemRect, prc)
EndProcedure
Procedure TreeView_GetCount(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETCOUNT, 0, 0)
EndProcedure
Procedure TreeView_GetIndent(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETINDENT, 0, 0)
EndProcedure
Procedure TreeView_SetIndent(*Gadget.cTreeViewOBJ, Indent.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETINDENT, Indent, 0)
EndProcedure
Procedure TreeView_GetImageList(*Gadget.cTreeViewOBJ, iImage.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETIMAGELIST, iImage, 0)
EndProcedure
Procedure TreeView_SetImageList(*Gadget.cTreeViewOBJ, himl.l, iImage.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETIMAGELIST, iImage, himl)
EndProcedure
Procedure TreeView_GetNextItem(*Gadget.cTreeViewOBJ, hItem.l, Flag.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETNEXTITEM, Flag, hItem)
EndProcedure
Procedure TreeView_GetChild(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, hItem, #TVGN_CHILD)
EndProcedure
Procedure TreeView_GetNextSibling(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, hItem, #TVGN_NEXT)
EndProcedure
Procedure TreeView_GetPrevSibling(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, hItem, #TVGN_PREVIOUS)
EndProcedure
Procedure TreeView_GetParent(*Gadget.cTreeViewOBJ, hItem)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, hItem, #TVGN_PARENT)
EndProcedure
Procedure TreeView_GetFirstVisible(*Gadget.cTreeViewOBJ)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, #Null, #TVGN_FIRSTVISIBLE)
EndProcedure
Procedure TreeView_GetNextVisible(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, hItem, #TVGN_NEXTVISIBLE)
EndProcedure
Procedure TreeView_GetPrevVisible(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, hItem, #TVGN_PREVIOUSVISIBLE)
EndProcedure
Procedure TreeView_GetSelection(*Gadget.cTreeViewOBJ)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, #Null, #TVGN_CARET)
EndProcedure
Procedure TreeView_GetDropHilight(*Gadget.cTreeViewOBJ)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, #Null, #TVGN_DROPHILITE)
EndProcedure
Procedure TreeView_GetRoot(*Gadget.cTreeViewOBJ)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, #Null, #TVGN_ROOT)
EndProcedure
Procedure TreeView_GetLastVisible(*Gadget.cTreeViewOBJ)
ProcedureReturn TreeView_GetNextItem(*Gadget\hGadget, #Null, #TVGN_LASTVISIBLE)
EndProcedure
Procedure TreeView_Select(*Gadget.cTreeViewOBJ, hItem.l, Flag.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SELECTITEM, Flag, hItem)
EndProcedure
Procedure TreeView_SelectItem(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn TreeView_Select(*Gadget\hGadget, hItem, #TVGN_CARET)
EndProcedure
Procedure TreeView_SelectDropTarget(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn TreeView_Select(*Gadget\hGadget, hItem, #TVGN_DROPHILITE)
EndProcedure
Procedure TreeView_SelectSetFirstVisible(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn TreeView_Select(*Gadget\hGadget, hItem, #TVGN_FIRSTVISIBLE)
EndProcedure
Procedure TreeView_GetItem(*Gadget.cTreeViewOBJ, pitem.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETITEM, 0, pitem)
EndProcedure
Procedure TreeView_SetItem(*Gadget.cTreeViewOBJ, pitem.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETITEM, 0, pitem)
EndProcedure
Procedure TreeView_EditLabel(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_EDITLABEL, 0, hItem)
EndProcedure
Procedure TreeView_GetEditControl(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETEDITCONTROL, 0, 0)
EndProcedure
Procedure TreeView_GetVisibleCount(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETVISIBLECOUNT, 0, 0)
EndProcedure
Procedure TreeView_HitTest(*Gadget.cTreeViewOBJ, lpht.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_HITTEST, 0, lpht)
EndProcedure
Procedure TreeView_CreateDragImage(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_CREATEDRAGIMAGE, 0, hItem)
EndProcedure
Procedure TreeView_SortChildren(*Gadget.cTreeViewOBJ, hItem.l, fRecurse.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SORTCHILDREN, fRecurse, hItem)
EndProcedure
Procedure TreeView_EnsureVisible(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_ENSUREVISIBLE, 0, hItem)
EndProcedure
Procedure TreeView_SortChildrenCB(*Gadget.cTreeViewOBJ, psort.l, fRecurse.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SORTCHILDREN, fRecurse, psort)
EndProcedure
Procedure TreeView_EndEditLabelNow(*Gadget.cTreeViewOBJ, fCancel.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_ENDEDITLABELNOW, fCancel, 0)
EndProcedure
Procedure TreeView_GetISearchString(*Gadget.cTreeViewOBJ, lpsz.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETISEARCHSTRING, 0, lpsz)
EndProcedure
Procedure TreeView_SetToolTips(*Gadget.cTreeViewOBJ, hwndTT.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETTOOLTIPS, hwndTT, 0)
EndProcedure
Procedure TreeView_GetToolTips(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETTOOLTIPS, 0, 0)
EndProcedure
Procedure TreeView_SetInsertMark(*Gadget.cTreeViewOBJ, hItem.l, fAfter.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETINSERTMARK, fAfter, hItem)
EndProcedure
Procedure TreeView_SetUnicodeFormat(*Gadget.cTreeViewOBJ, fUnicode.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETUNICODEFORMAT, fUnicode, 0)
EndProcedure
Procedure TreeView_GetUnicodeFormat(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETUNICODEFORMAT, 0, 0)
EndProcedure
Procedure TreeView_SetItemHeight(*Gadget.cTreeViewOBJ, iHeight.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETITEMHEIGHT, iHeight, 0)
EndProcedure
Procedure TreeView_GetItemHeight(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETITEMHEIGHT, 0, 0)
EndProcedure
Procedure TreeView_SetBkColor(*Gadget.cTreeViewOBJ, clr.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETBKCOLOR, 0, clr)
EndProcedure
Procedure TreeView_SetTextColor(*Gadget.cTreeViewOBJ, clr.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETTEXTCOLOR, 0, clr)
EndProcedure
Procedure TreeView_GetBkColor(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETBKCOLOR, 0, 0)
EndProcedure
Procedure TreeView_GetTextColor(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETTEXTCOLOR, 0, 0)
EndProcedure
Procedure TreeView_SetScrollTime(*Gadget.cTreeViewOBJ, uTime.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETSCROLLTIME, uTime, 0)
EndProcedure
Procedure TreeView_GetScrollTime(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETSCROLLTIME, 0, 0)
EndProcedure
Procedure TreeView_SetInsertMarkColor(*Gadget.cTreeViewOBJ, clr.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETINSERTMARKCOLOR, 0, clr)
EndProcedure
Procedure TreeView_GetInsertMarkColor(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETINSERTMARKCOLOR, 0, 0)
EndProcedure
Procedure TreeView_SetItemState(*Gadget.cTreeViewOBJ, hItem.l, Datan.l, _mask.l)
_ms_TVi.TVITEM
_ms_TVi\mask = #TVIF_STATE
_ms_TVi\hItem = hItem
_ms_TVi\stateMask = _mask
_ms_TVi\state = Datan
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETITEM, 0, @TreeView__ms_TVi)
EndProcedure
Procedure TreeView_SetCheckState(*Gadget.cTreeViewOBJ, hItem.l, fCheck.l)
;- ?
If fCheck
ProcedureReturn TreeView_SetItemState(*Gadget\hGadget, hItem, 2<<12, #TVIS_STATEIMAGEMASK)
Else
ProcedureReturn TreeView_SetItemState(*Gadget\hGadget, hItem, 1<<12, #TVIS_STATEIMAGEMASK)
EndIf
EndProcedure
Procedure TreeView_GetItemState(*Gadget.cTreeViewOBJ, hItem.l, mask.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETITEMSTATE, hItem, mask)
EndProcedure
Procedure TreeView_GetCheckState(*Gadget.cTreeViewOBJ, hItem.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETITEMSTATE, hItem, #TVIS_STATEIMAGEMASK) >> 12 - 1
EndProcedure
Procedure TreeView_SetLineColor(*Gadget.cTreeViewOBJ, clr.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_SETLINECOLOR, 0, clr)
EndProcedure
Procedure TreeView_GetLineColor(*Gadget.cTreeViewOBJ)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_GETLINECOLOR, 0, 0)
EndProcedure
Procedure TreeView_MapHTREEITEMToAccID(*Gadget.cTreeViewOBJ, HTREEITEM.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_MAPHTREEITEMTOACCID, HTREEITEM, 0)
EndProcedure
Procedure TreeView_MapAccIDToHTREEITEM(*Gadget.cTreeViewOBJ, ID.l)
ProcedureReturn SendMessage_(*Gadget\hGadget, #TVM_MAPACCIDTOHTREEITEM, ID, 0)
EndProcedure
Procedure.l TreeViewNew(GadgetNr.l)
Protected *g.cTreeViewOBJ
*g = AllocateMemory(SizeOf(cTreeViewOBJ))
*g\VTable = *g + OffsetOf(cTreeViewOBJ\f)
*g\hGadget = GadgetID(GadgetNr)
*g\f[0] = @TreeView_InsertItem()
*g\f[1] = @TreeView_DeleteItem()
*g\f[2] = @TreeView_DeleteAllItems()
*g\f[3] = @TreeView_Expand()
*g\f[4] = @TreeView_GetItemRect()
*g\f[5] = @TreeView_GetCount()
*g\f[6] = @TreeView_GetIndent()
*g\f[7] = @TreeView_SetIndent()
*g\f[8] = @TreeView_GetImageList()
*g\f[9] = @TreeView_SetImageList()
*g\f[10] = @TreeView_GetNextItem()
*g\f[11] = @TreeView_GetChild()
*g\f[12] = @TreeView_GetNextSibling()
*g\f[13] = @TreeView_GetPrevSibling()
*g\f[14] = @TreeView_GetParent()
*g\f[15] = @TreeView_GetFirstVisible()
*g\f[16] = @TreeView_GetNextVisible()
*g\f[17] = @TreeView_GetPrevVisible()
*g\f[18] = @TreeView_GetSelection()
*g\f[19] = @TreeView_GetDropHilight()
*g\f[20] = @TreeView_GetRoot()
*g\f[21] = @TreeView_GetLastVisible()
*g\f[22] = @TreeView_Select()
*g\f[23] = @TreeView_SelectItem()
*g\f[24] = @TreeView_SelectDropTarget()
*g\f[25] = @TreeView_SelectSetFirstVisible()
*g\f[26] = @TreeView_GetItem()
*g\f[27] = @TreeView_SetItem()
*g\f[28] = @TreeView_EditLabel()
*g\f[29] = @TreeView_GetEditControl()
*g\f[30] = @TreeView_GetVisibleCount()
*g\f[31] = @TreeView_HitTest()
*g\f[32] = @TreeView_CreateDragImage()
*g\f[33] = @TreeView_SortChildren()
*g\f[34] = @TreeView_EnsureVisible()
*g\f[35] = @TreeView_SortChildrenCB()
*g\f[36] = @TreeView_EndEditLabelNow()
*g\f[37] = @TreeView_GetISearchString()
*g\f[38] = @TreeView_SetToolTips()
*g\f[39] = @TreeView_GetToolTips()
*g\f[40] = @TreeView_SetInsertMark()
*g\f[41] = @TreeView_SetUnicodeFormat()
*g\f[42] = @TreeView_SetItemHeight()
*g\f[43] = @TreeView_GetItemHeight()
*g\f[44] = @TreeView_SetBkColor()
*g\f[45] = @TreeView_SetTextColor()
*g\f[46] = @TreeView_GetBkColor()
*g\f[47] = @TreeView_GetTextColor()
*g\f[48] = @TreeView_SetScrollTime()
*g\f[49] = @TreeView_GetScrollTime()
*g\f[50] = @TreeView_SetInsertMarkColor()
*g\f[51] = @TreeView_GetInsertMarkColor()
*g\f[52] = @TreeView_SetItemState()
*g\f[53] = @TreeView_SetCheckState()
*g\f[54] = @TreeView_GetItemState()
*g\f[55] = @TreeView_GetCheckState()
*g\f[56] = @TreeView_SetLineColor()
*g\f[57] = @TreeView_GetLineColor()
*g\f[58] = @TreeView_MapHTREEITEMToAccID()
*g\f[59] = @TreeView_MapAccIDToHTREEITEM()
ProcedureReturn *g
EndProcedure
; IncludeFile "ooptreeview.pbi"
;
;
;
; OpenWindow(0, 500, 500, 500, 500, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "TreeView-Test")
; CreateGadgetList(WindowID())
; TreeGadget(1, 0, 0, 500, 500, #PB_Tree_AlwaysShowSelection)
;
;
; AddGadgetItem(1, -1, "Root1")
; OpenTreeGadgetNode(1)
; AddGadgetItem(1, -1, "child2")
; AddGadgetItem(1, -1, "child1")
; CloseTreeGadgetNode(1)
;
; AddGadgetItem(1, -1, "Root2")
; OpenTreeGadgetNode(1)
; AddGadgetItem(1, -1, "child1")
;
; AddGadgetItem(1, -1, "child3")
; OpenTreeGadgetNode(1)
; AddGadgetItem(1, -1, "child8")
; AddGadgetItem(1, -1, "child7")
; CloseTreeGadgetNode(1)
;
; AddGadgetItem(1, -1, "child2")
; CloseTreeGadgetNode(1)
;
;
; SetFocus_(GadgetID(1))
;
; *tv.cTreeView = TreeViewNew(1)
;
; ; Anzahl Elemente
; count.l = *tv\GetCount()
; ; Itemhöhe auf 33 stellen
; *tv\SetItemHeight(33)
; ; Hintergrundfarbe setzen
; *tv\SetBkColor($FEFFAF)
; ; Rot schreiben
; *tv\SetTextColor($FF)
; ; Pinke Linien
; *tv\SetLineColor($FF00FF)
; ; Einrückung 'etwas' höher stellen
; *tv\SetIndent(100)
; ; Sortiere 2. Root
; *tv\SortChildren(GadgetItemID(1, 3), 0)
; ; Markieren wir mal ne Stelle
; *tv\SetInsertMark(GadgetItemID(1, 5), 0)
; ; Aber in blau!
; *tv\SetInsertMarkColor($FF0000)
;
;
; Repeat
;
;
; Until WaitWindowEvent() = #PB_Event_CloseWindow