Posted: Mon Aug 08, 2005 10:17 pm
looks nice! Code code code!
http://www.purebasic.com
https://www.purebasic.fr/english/
i didnt want to try that at first, but in working with CorelDraw12 today, i saw EXACTLY what you were talking about. on the right hand side of the MDI, there is sort of like a DUIhwnd where you click the top of a group, and a tabcontrol, or listbox, or whatever is on a window is hidden an shown. its pretty much like an outlook gadget for GADGETS.Henrik wrote: it would be even more perfect if "you = the user", could ad other gadgets but addDUIlink's
Henrik
Eheheh...localmotion34 wrote:@NUM3 can you post the code of HOW you modified my LIB. i like the gradient look, so can you just shoot the code back at me and ill work further and re-compile.
Code: Select all
DataSection
up1:IncludeBinary "up.bmp"
down:IncludeBinary "down.bmp"
EndDataSection
Procedure InitDUI()
;UseJPEGImageDecoder()
#duiup=$FF06
#duidown=$FF07
#WM_MOUSEHOVER = $2A1
#WM_MOUSELEAVE = $2A3
#BS_FLAT=$8000
#TME_HOVER = 1
#TME_LEAVE = 2
#clnavy=$00800000
Dim image.l(2)
Structure inf
gadgethght.l
scrollgadget.l
parent.l
duinum.l[10]
State.l[10]
hwnd.l[10]
parenthwnd.l[10]
imagehwnd.l[10]
button.l[10]
buttonstate.l[10]
width.l
height.l[10]
hyperlink.l[50]
textgad.l[10]
yvalue.l[10]
scrollheight.l
EndStructure
image(0)=CatchImage(#PB_Any,?up1)
image(1)=CatchImage(#PB_Any,?down)
NewList dui.inf()
Dim icon.l(100)
EndProcedure
Procedure checkscrollheight(DUIpane)
scrollmax=20
SelectElement(dui(),DUIpane)
For a=0 To 9
If dui()\height[a]=0
scrollmax=dui()\yvalue[a-1]+dui()\height[a-1]
Break
EndIf
Next
If scrollmax>dui()\scrollheight
SetGadgetAttribute(dui()\scrollgadget,#PB_ScrollArea_InnerHeight,scrollmax+10)
SetWindowPos_(GadgetID(dui()\scrollgadget),0,0,0,dui()\width+30,dui()\gadgethght,#SWP_NOMOVE)
RedrawWindow_(GadgetID(dui()\scrollgadget),0,0,#RDW_ALLCHILDREN)
Else
SetGadgetAttribute(dui()\scrollgadget,#PB_ScrollArea_InnerHeight,dui()\scrollheight)
SetWindowPos_(GadgetID(dui()\scrollgadget),0,0,0,dui()\width+13,dui()\gadgethght,#SWP_NOMOVE)
RedrawWindow_(GadgetID(dui()\scrollgadget),0,0,#RDW_ALLCHILDREN)
EndIf
EndProcedure
Procedure moveproc(hwnd,msg,wParam,lParam)
Select msg
Case #duiup
SelectElement(dui(),lParam)
heighttomove=dui()\height[wParam]-20
For a=wParam+1 To 9
height=dui()\height[a]-20
yval=dui()\yvalue[a]-heighttomove
SetWindowPos_(dui()\hwnd[a],0,5,yval,0,0,#SWP_NOSIZE)
dui()\yvalue[a]=yval
Next
checkscrollheight(lParam)
ProcedureReturn 0
Case #duidown
SelectElement(dui(),lParam)
heighttomove=dui()\height[wParam]-20
For a=wParam+1 To 9
height=dui()\height[a]
yval=dui()\yvalue[a]+heighttomove
SetWindowPos_(dui()\hwnd[a],0,5,yval,0,0,#SWP_NOSIZE)
dui()\yvalue[a]=yval
Next
checkscrollheight(lParam)
ProcedureReturn 0
EndSelect
ProcedureReturn CallWindowProc_(GetProp_(hwnd,"OldProc2"),hwnd,msg,wParam,lParam)
EndProcedure
Procedure clickproc(hwnd,msg,wParam,lParam)
Select msg
Case #WM_MOUSEMOVE
Structure myTRACKMOUSEEVENT
cbSize.l
dwFlags.l
hwndTrack.l
dwHoverTime.l
EndStructure
mte.myTRACKMOUSEEVENT
mte\cbSize = SizeOf(myTRACKMOUSEEVENT)
SendMessage_(hwnd,#BM_SETSTYLE,#BS_DEFPUSHBUTTON,#True)
mte\dwFlags = #TME_LEAVE
mte\hwndTrack = hwnd
TrackMouseEvent_(mte)
Case #WM_MOUSELEAVE
SendMessage_(hwnd,#BM_SETSTYLE,#BS_PUSHBUTTON,#True)
EndSelect
ProcedureReturn CallWindowProc_(GetProp_(hwnd,"OldProc3"),hwnd,msg,wParam,lParam)
EndProcedure
Procedure buttonproc(hwnd,msg,wParam,lParam)
Select msg
Case #WM_CTLCOLORSTATIC
SetBkMode_(wParam,#TRANSPARENT )
blue = CreatePatternBrush_(UseImage(200))
ForEach dui()
For a=0 To 9
If IsGadget(dui()\textgad[a])And lParam=GadgetID(dui()\textgad[a])
SetTextColor_(wParam,#White) ;Text colour
EndIf
Next
Next
ProcedureReturn blue
Case #WM_COMMAND
parent=GetParent_(hwnd)
ForEach dui()
For a=0 To 9
If parent=dui()\hwnd[a]
currentdui=ListIndex(dui())
scrollparent=GetParent_(dui()\hwnd[a])
If dui()\State[a]=1
SetWindowPos_(dui()\hwnd[a],0,0,0,dui()\width,22,#SWP_NOMOVE)
dui()\State[a]=0
PostMessage_(scrollparent,#duiup,a,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[a]),#BM_SETIMAGE,#IMAGE_BITMAP,UseImage(image(1)))
ElseIf dui()\State[a]=0
SetWindowPos_(dui()\hwnd[a],0,0,0,dui()\width,dui()\height[a],#SWP_NOMOVE)
dui()\State[a]=1
PostMessage_(scrollparent,#duidown,a,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[a]),#BM_SETIMAGE,#IMAGE_BITMAP,UseImage(image(0)))
EndIf
Break
EndIf
Next
Next
ProcedureReturn 0
Case #WM_LBUTTONDBLCLK
parent=GetParent_(hwnd)
ForEach dui()
For a=0 To 9
If parent=dui()\hwnd[a]
currentdui=ListIndex(dui())
scrollparent=GetParent_(dui()\hwnd[a])
If dui()\State[a]=1
SetWindowPos_(dui()\hwnd[a],0,0,0,dui()\width,20,#SWP_NOMOVE)
SendMessage_(GadgetID(dui()\button[a]),#BM_SETCHECK,#BST_UNCHECKED,0)
dui()\State[a]=0
PostMessage_(scrollparent,#duiup,a,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[a]),#BM_SETIMAGE,#IMAGE_BITMAP,UseImage(image(1)))
ElseIf dui()\State[a]=0
SetWindowPos_(dui()\hwnd[a],0,0,0,dui()\width,dui()\height[a],#SWP_NOMOVE)
SendMessage_(GadgetID(dui()\button[a]),#BM_SETCHECK,#BST_CHECKED,0)
PostMessage_(scrollparent,#duidown,a,ListIndex(dui()))
dui()\State[a]=1
SendMessage_(GadgetID(dui()\button[a]),#BM_SETIMAGE,#IMAGE_BITMAP,UseImage(image(0)))
EndIf
Break
EndIf
Next
Next
EndSelect
ProcedureReturn CallWindowProc_(GetProp_(hwnd,"OldProc1"),hwnd,msg,wParam,lParam)
EndProcedure
Procedure DUIpane(number,x,y,panewidth,height,border); Creates A Pane To House DUIhwnd's
If border=0
border=#PB_ScrollArea_Single
EndIf
AddElement(dui())
SelectElement(dui(),number)
dui()\gadgethght=height
dui()\width=panewidth-10
scroll=ScrollAreaGadget(#PB_Any,x,y,panewidth,height,panewidth-5,height-20,30,border )
dui()\scrollgadget=scroll
dui()\scrollheight=height-20
child=GetWindow_(GadgetID(scroll),#GW_CHILD)
dui()\parent=child
SetProp_(child,"OldProc2",SetWindowLong_(child, #GWL_WNDPROC, @moveproc()))
icon(number)=CreateImage(number+200,dui()\width,22)
i = dui()\width
Color1=RGB($80,$80,$80)
Color2=GetSysColor_(4)
sRed.f = Red(Color1) : r.f = (Red (Color1) - Red (Color2))/i
sGreen.f = Green(Color1) : g.f = (Green(Color1) - Green(Color2))/i
sBlue.f = Blue(Color1) : b.f = (Blue (Color1) - Blue (Color2))/i
StartDrawing(ImageOutput())
For a = 0 To i-1
xx.f = sRed - a*r
yy.f = sGreen - a*g
zz.f = sBlue - a*b
Line(a,0,0,25,RGB(xx,yy,zz))
Next a
StopDrawing()
ProcedureReturn scroll
EndProcedure
Procedure AddDUIhwnd(DUIpane,Position,text.s); Add A DUIhwnd that Can Contain Links To Commands
SelectElement(dui(),DUIpane)
dui()\duinum[Position]=Position
dui()\height[Position]=50
totalheight=20
If Position=0
dui()\yvalue[Position]=20
ElseIf Position<>0
For a=0 To Position-1
totalheight=totalheight+dui()\height[a]+20
Next
dui()\yvalue[Position]=totalheight
EndIf
mainhandle=OpenWindow(#PB_Any,5,dui()\yvalue[Position],dui()\width,50,#PB_Window_Invisible,"")
dui()\hwnd[Position]=WindowID(mainhandle)
SetWindowLong_(dui()\hwnd[Position],#GWL_STYLE, #WS_CHILD|#WS_BORDER|#WS_CLIPCHILDREN|#WS_CLIPSIBLINGS )
SetParent_(dui()\hwnd[Position],dui()\parent)
CreateGadgetList(dui()\hwnd[Position])
dui()\imagehwnd[Position]=ImageGadget(#PB_Any,0,0,dui()\width,20,0)
SetGadgetState(dui()\imagehwnd[Position],icon(DUIpane))
If region
SetWindowRgn_(dui()\hwnd[Position],region,#True)
EndIf
dui()\button[Position]=ButtonGadget(#PB_Any,dui()\width-22,2,16,16,"^")
style = GetWindowLong_(GadgetID(dui()\button[Position]), #GWL_STYLE)
toggleStyle=style|$1083|$8000|#BS_BITMAP
SetWindowLong_(GadgetID(dui()\button[Position]), #GWL_STYLE, toggleStyle)
SendMessage_(GadgetID(dui()\button[Position]),#BM_SETIMAGE,#IMAGE_BITMAP,UseImage(image(0)))
SetProp_(GadgetID(dui()\button[Position]),"OldProc3",SetWindowLong_(GadgetID(dui()\button[Position]), #GWL_WNDPROC, @clickproc()))
SetParent_(GadgetID(dui()\button[Position]),GadgetID(dui()\imagehwnd[Position]))
dui()\textgad[Position]=TextGadget(#PB_Any,0,4,dui()\width-19,20,text,#PB_Text_Center)
SetParent_(GadgetID(dui()\textgad[Position]),GadgetID(dui()\imagehwnd[Position]))
SendMessage_(GadgetID(dui()\button[Position]),#BM_SETCHECK,#BST_CHECKED,0)
SetProp_(GadgetID(dui()\imagehwnd[Position]),"OldProc1",SetWindowLong_(GadgetID(dui()\imagehwnd[Position]), #GWL_WNDPROC, @buttonproc()))
; region=Createroundrectrgn_(0,0,dui()\width+1,56,9,9)
; If region
; SetWindowRgn_(dui()\hwnd[Position],region,#True)
; EndIf
ShowWindow_(dui()\hwnd[Position],#SW_SHOW)
SetWindowPos_(dui()\hwnd[Position],0,0,0,dui()\width,50,#SWP_NOMOVE)
RedrawWindow_(dui()\hwnd[Position],0,0,#RDW_ALLCHILDREN )
UpdateWindow_(dui()\hwnd[Position])
dui()\State[Position]=1
checkscrollheight(DUIpane)
EndProcedure
Procedure addDUIlink(DUIpane,DuiHwnd,Position,text.s,color.l); Add A Link To Execute A Command Or List An Item You Want To Display
SelectElement(dui(),DUIpane)
UseGadgetList(dui()\hwnd[DuiHwnd])
hyperlink=HyperLinkGadget(#PB_Any, 5, (Position*20) +25,dui()\width,20,text, color)
RedrawWindow_(dui()\hwnd[DuiHwnd],0,0,#RDW_ALLCHILDREN )
ShowWindow_(dui()\hwnd[DuiHwnd],#SW_SHOWNORMAL)
UpdateWindow_(dui()\hwnd[DuiHwnd])
If Position =0
dui()\height[DuiHwnd]=50
ElseIf Position>0
dui()\height[DuiHwnd]=50+(Position*20)
; region=Createroundrectrgn_(0,0,dui()\width+1,dui()\height[DuiHwnd]+5,9,9)
; If region
; SetWindowRgn_(dui()\hwnd[DuiHwnd],region,#True)
; EndIf
SetWindowPos_(dui()\hwnd[DuiHwnd],0,0,0,dui()\width,dui()\height[DuiHwnd],#SWP_NOMOVE)
If Position>=1
For a=DuiHwnd+1 To 9
SetWindowPos_(dui()\hwnd[a],0,5,dui()\yvalue[a]+(20),0,0,#SWP_NOSIZE)
dui()\yvalue[a]=dui()\yvalue[a]+(20)
Next
EndIf
EndIf
checkscrollheight(DUIpane)
ProcedureReturn hyperlink
EndProcedure
Procedure HideDUI(DUIpane,DuiHwnd,State);Hide Or Show And Individial DUIhwnd
If State=0
If dui()\State[DuiHwnd]=0
SelectElement(dui(),DUIpane)
parent=GetParent_(dui()\hwnd[DuiHwnd])
SetWindowPos_(dui()\hwnd[DuiHwnd],0,0,0,dui()\width,dui()\height[DuiHwnd],#SWP_NOMOVE)
SendMessage_(GadgetID(dui()\button[DuiHwnd]),#BM_SETCHECK,#BST_CHECKED,0)
dui()\State[DuiHwnd]=1
PostMessage_(parent,#duidown,DuiHwnd,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[DuiHwnd]),#BM_SETIMAGE,#IMAGE_BITMAP,UseImage(image(0)))
EndIf
ElseIf State=1
If dui()\State[DuiHwnd]=1
SelectElement(dui(),DUIpane)
parent=GetParent_(dui()\hwnd[DuiHwnd])
SetWindowPos_(dui()\hwnd[DuiHwnd],0,0,0,dui()\width,20,#SWP_NOMOVE)
SendMessage_(GadgetID(dui()\button[DuiHwnd]),#BM_SETCHECK,#BST_UNCHECKED,0)
dui()\State[DuiHwnd]=0
PostMessage_(parent,#duiup,DuiHwnd,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[DuiHwnd]),#BM_SETIMAGE,#IMAGE_BITMAP,UseImage(image(1)))
EndIf
EndIf
EndProcedure
Procedure GetDUIstate(duinumber);Determine Whether a DUIhwnd is Expanded Or Collapsed
SelectElement(dui(),duinumber)
returnvalue=dui()\State[duinumber]
ProcedureReturn returnvalue
EndProcedure
; Procedure DUIExpand(DUIpane,State)
; If State= 0 Or State=1
; SelectElement(dui(),DUIpane)
; For a=0 To 9
; If IsWindow_(dui()\hwnd[a])
; HideDUI(DUIpane,a,State)
; EndIf
; Next
; EndIf
; EndProcedure
I guess I can:who can optimize the code of Num3 for PB4 ????
Code: Select all
Procedure InitDUI()
#duiup=$FF06
#duidown=$FF07
#WM_MOUSEHOVER = $2A1
#WM_MOUSELEAVE = $2A3
#BS_FLAT=$8000
#TME_HOVER = 1
#TME_LEAVE = 2
#clnavy=$00800000
Global Dim image.l(2)
Structure inf
gadgethght.l
scrollgadget.l
parent.l
duinum.l[10]
State.l[10]
hwnd.l[10]
parenthwnd.l[10]
imagehwnd.l[10]
button.l[10]
buttonstate.l[10]
width.l
height.l[10]
hyperlink.l[50]
textgad.l[10]
yvalue.l[10]
scrollheight.l
EndStructure
image(0)=CatchImage(#PB_Any,?up)
image(1)=CatchImage(#PB_Any,?down)
Global NewList dui.inf()
Global Dim icon.l(100)
EndProcedure
Procedure checkscrollheight(DUIpane)
scrollmax=20
SelectElement(dui(),DUIpane)
For a=0 To 9
If dui()\height[a]=0
scrollmax=dui()\yvalue[a-1]+dui()\height[a-1]
Break
EndIf
Next
If scrollmax>dui()\scrollheight
SetGadgetAttribute(dui()\scrollgadget,#PB_ScrollArea_InnerHeight,scrollmax+10)
SetWindowPos_(GadgetID(dui()\scrollgadget),0,0,0,dui()\width+30,dui()\gadgethght,#SWP_NOMOVE)
RedrawWindow_(GadgetID(dui()\scrollgadget),0,0,#RDW_ALLCHILDREN)
Else
SetGadgetAttribute(dui()\scrollgadget,#PB_ScrollArea_InnerHeight,dui()\scrollheight)
SetWindowPos_(GadgetID(dui()\scrollgadget),0,0,0,dui()\width+13,dui()\gadgethght,#SWP_NOMOVE)
RedrawWindow_(GadgetID(dui()\scrollgadget),0,0,#RDW_ALLCHILDREN)
EndIf
EndProcedure
Procedure moveproc(hwnd,msg,wParam,lParam)
Select msg
Case #duiup
SelectElement(dui(),lParam)
heighttomove=dui()\height[wParam]-20
For a=wParam+1 To 9
height=dui()\height[a]-20
yval=dui()\yvalue[a]-heighttomove
SetWindowPos_(dui()\hwnd[a],0,5,yval,0,0,#SWP_NOSIZE)
dui()\yvalue[a]=yval
Next
checkscrollheight(lParam)
ProcedureReturn 0
Case #duidown
SelectElement(dui(),lParam)
heighttomove=dui()\height[wParam]-20
For a=wParam+1 To 9
height=dui()\height[a]
yval=dui()\yvalue[a]+heighttomove
SetWindowPos_(dui()\hwnd[a],0,5,yval,0,0,#SWP_NOSIZE)
dui()\yvalue[a]=yval
Next
checkscrollheight(lParam)
ProcedureReturn 0
EndSelect
ProcedureReturn CallWindowProc_(GetProp_(hwnd,"OldProc2"),hwnd,msg,wParam,lParam)
EndProcedure
Procedure clickproc(hwnd,msg,wParam,lParam)
Select msg
Case #WM_MOUSEMOVE
Structure myTRACKMOUSEEVENT
cbSize.l
dwFlags.l
hwndTrack.l
dwHoverTime.l
EndStructure
mte.myTRACKMOUSEEVENT
mte\cbSize = SizeOf(myTRACKMOUSEEVENT)
SendMessage_(hwnd,#BM_SETSTYLE,#BS_DEFPUSHBUTTON,#True)
mte\dwFlags = #TME_LEAVE
mte\hwndTrack = hwnd
TrackMouseEvent_(mte)
Case #WM_MOUSELEAVE
SendMessage_(hwnd,#BM_SETSTYLE,#BS_PUSHBUTTON,#True)
EndSelect
ProcedureReturn CallWindowProc_(GetProp_(hwnd,"OldProc3"),hwnd,msg,wParam,lParam)
EndProcedure
Procedure buttonproc(hwnd,msg,wParam,lParam)
Select msg
Case #WM_CTLCOLORSTATIC
SetBkMode_(wParam,#TRANSPARENT )
blue = CreatePatternBrush_(ImageID(200))
ForEach dui()
For a=0 To 9
If IsGadget(dui()\textgad[a])And lParam=GadgetID(dui()\textgad[a])
SetTextColor_(wParam,#White) ;Text colour
EndIf
Next
Next
ProcedureReturn blue
Case #WM_COMMAND
parent=GetParent_(hwnd)
ForEach dui()
For a=0 To 9
If parent=dui()\hwnd[a]
currentdui=ListIndex(dui())
scrollparent=GetParent_(dui()\hwnd[a])
If dui()\State[a]=1
SetWindowPos_(dui()\hwnd[a],0,0,0,dui()\width,22,#SWP_NOMOVE)
dui()\State[a]=0
PostMessage_(scrollparent,#duiup,a,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[a]),#BM_SETIMAGE,#IMAGE_BITMAP,ImageID(image(1)))
ElseIf dui()\State[a]=0
SetWindowPos_(dui()\hwnd[a],0,0,0,dui()\width,dui()\height[a],#SWP_NOMOVE)
dui()\State[a]=1
PostMessage_(scrollparent,#duidown,a,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[a]),#BM_SETIMAGE,#IMAGE_BITMAP,ImageID(image(0)))
EndIf
Break
EndIf
Next
Next
ProcedureReturn 0
Case #WM_LBUTTONDBLCLK
parent=GetParent_(hwnd)
ForEach dui()
For a=0 To 9
If parent=dui()\hwnd[a]
currentdui=ListIndex(dui())
scrollparent=GetParent_(dui()\hwnd[a])
If dui()\State[a]=1
SetWindowPos_(dui()\hwnd[a],0,0,0,dui()\width,20,#SWP_NOMOVE)
SendMessage_(GadgetID(dui()\button[a]),#BM_SETCHECK,#BST_UNCHECKED,0)
dui()\State[a]=0
PostMessage_(scrollparent,#duiup,a,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[a]),#BM_SETIMAGE,#IMAGE_BITMAP,ImageID(image(1)))
ElseIf dui()\State[a]=0
SetWindowPos_(dui()\hwnd[a],0,0,0,dui()\width,dui()\height[a],#SWP_NOMOVE)
SendMessage_(GadgetID(dui()\button[a]),#BM_SETCHECK,#BST_CHECKED,0)
PostMessage_(scrollparent,#duidown,a,ListIndex(dui()))
dui()\State[a]=1
SendMessage_(GadgetID(dui()\button[a]),#BM_SETIMAGE,#IMAGE_BITMAP,ImageID(image(0)))
EndIf
Break
EndIf
Next
Next
EndSelect
ProcedureReturn CallWindowProc_(GetProp_(hwnd,"OldProc1"),hwnd,msg,wParam,lParam)
EndProcedure
Procedure DUIpane(number,x,y,panewidth,height,border); Creates A Pane To House DUIhwnd's
If border=0
border=#PB_ScrollArea_Single
EndIf
AddElement(dui())
SelectElement(dui(),number)
dui()\gadgethght=height
dui()\width=panewidth-10
scroll=ScrollAreaGadget(#PB_Any,x,y,panewidth,height,panewidth-5,height-20,30,border )
dui()\scrollgadget=scroll
dui()\scrollheight=height-20
child=GetWindow_(GadgetID(scroll),#GW_CHILD)
dui()\parent=child
SetProp_(child,"OldProc2",SetWindowLong_(child, #GWL_WNDPROC, @moveproc()))
icon(number)=CreateImage(number+200,dui()\width,22)
i = dui()\width
Color1=RGB($80,$80,$80)
Color2=GetSysColor_(4)
sRed.f = Red(Color1) : r.f = (Red (Color1) - Red (Color2))/i
sGreen.f = Green(Color1) : g.f = (Green(Color1) - Green(Color2))/i
sBlue.f = Blue(Color1) : b.f = (Blue (Color1) - Blue (Color2))/i
StartDrawing(ImageOutput(number+200))
For a = 0 To i-1
xx.f = sRed - a*r
yy.f = sGreen - a*g
zz.f = sBlue - a*b
Line(a,0,0,25,RGB(xx,yy,zz))
Next a
StopDrawing()
ProcedureReturn scroll
EndProcedure
Procedure AddDUIhwnd(DUIpane,Position,text.s); Add A DUIhwnd that Can Contain Links To Commands
SelectElement(dui(),DUIpane)
dui()\duinum[Position]=Position
dui()\height[Position]=50
totalheight=20
If Position=0
dui()\yvalue[Position]=20
ElseIf Position<>0
For a=0 To Position-1
totalheight=totalheight+dui()\height[a]+20
Next
dui()\yvalue[Position]=totalheight
EndIf
mainhandle=OpenWindow(#PB_Any,5,dui()\yvalue[Position],dui()\width,50,"",#PB_Window_Invisible)
dui()\hwnd[Position]=WindowID(mainhandle)
SetWindowLong_(dui()\hwnd[Position],#GWL_STYLE, #WS_CHILD|#WS_BORDER|#WS_CLIPCHILDREN|#WS_CLIPSIBLINGS )
SetParent_(dui()\hwnd[Position],dui()\parent)
CreateGadgetList(dui()\hwnd[Position])
dui()\imagehwnd[Position]=ImageGadget(#PB_Any,0,0,dui()\width,20,0)
SetGadgetState(dui()\imagehwnd[Position],icon(DUIpane))
If region
SetWindowRgn_(dui()\hwnd[Position],region,#True)
EndIf
dui()\button[Position]=ButtonGadget(#PB_Any,dui()\width-22,2,16,16,"^")
style = GetWindowLong_(GadgetID(dui()\button[Position]), #GWL_STYLE)
toggleStyle=style|$1083|$8000|#BS_BITMAP
SetWindowLong_(GadgetID(dui()\button[Position]), #GWL_STYLE, toggleStyle)
SendMessage_(GadgetID(dui()\button[Position]),#BM_SETIMAGE,#IMAGE_BITMAP,ImageID(image(0)))
SetProp_(GadgetID(dui()\button[Position]),"OldProc3",SetWindowLong_(GadgetID(dui()\button[Position]), #GWL_WNDPROC, @clickproc()))
SetParent_(GadgetID(dui()\button[Position]),GadgetID(dui()\imagehwnd[Position]))
dui()\textgad[Position]=TextGadget(#PB_Any,0,4,dui()\width-19,20,text,#PB_Text_Center)
SetParent_(GadgetID(dui()\textgad[Position]),GadgetID(dui()\imagehwnd[Position]))
SendMessage_(GadgetID(dui()\button[Position]),#BM_SETCHECK,#BST_CHECKED,0)
SetProp_(GadgetID(dui()\imagehwnd[Position]),"OldProc1",SetWindowLong_(GadgetID(dui()\imagehwnd[Position]), #GWL_WNDPROC, @buttonproc()))
; region=Createroundrectrgn_(0,0,dui()\width+1,56,9,9)
; If region
; SetWindowRgn_(dui()\hwnd[Position],region,#True)
; EndIf
ShowWindow_(dui()\hwnd[Position],#SW_SHOW)
SetWindowPos_(dui()\hwnd[Position],0,0,0,dui()\width,50,#SWP_NOMOVE)
RedrawWindow_(dui()\hwnd[Position],0,0,#RDW_ALLCHILDREN )
UpdateWindow_(dui()\hwnd[Position])
dui()\State[Position]=1
checkscrollheight(DUIpane)
EndProcedure
Procedure addDUIlink(DUIpane,DuiHwnd,Position,text.s,color.l); Add A Link To Execute A Command Or List An Item You Want To Display
SelectElement(dui(),DUIpane)
UseGadgetList(dui()\hwnd[DuiHwnd])
hyperlink=HyperLinkGadget(#PB_Any, 5, (Position*20) +25,dui()\width,20,text, color)
RedrawWindow_(dui()\hwnd[DuiHwnd],0,0,#RDW_ALLCHILDREN )
ShowWindow_(dui()\hwnd[DuiHwnd],#SW_SHOWNORMAL)
UpdateWindow_(dui()\hwnd[DuiHwnd])
If Position =0
dui()\height[DuiHwnd]=50
ElseIf Position>0
dui()\height[DuiHwnd]=50+(Position*20)
; region=Createroundrectrgn_(0,0,dui()\width+1,dui()\height[DuiHwnd]+5,9,9)
; If region
; SetWindowRgn_(dui()\hwnd[DuiHwnd],region,#True)
; EndIf
SetWindowPos_(dui()\hwnd[DuiHwnd],0,0,0,dui()\width,dui()\height[DuiHwnd],#SWP_NOMOVE)
If Position>=1
For a=DuiHwnd+1 To 9
SetWindowPos_(dui()\hwnd[a],0,5,dui()\yvalue[a]+(20),0,0,#SWP_NOSIZE)
dui()\yvalue[a]=dui()\yvalue[a]+(20)
Next
EndIf
EndIf
checkscrollheight(DUIpane)
ProcedureReturn hyperlink
EndProcedure
Procedure HideDUI(DUIpane,DuiHwnd,State);Hide Or Show And Individial DUIhwnd
If State=0
If dui()\State[DuiHwnd]=0
SelectElement(dui(),DUIpane)
parent=GetParent_(dui()\hwnd[DuiHwnd])
SetWindowPos_(dui()\hwnd[DuiHwnd],0,0,0,dui()\width,dui()\height[DuiHwnd],#SWP_NOMOVE)
SendMessage_(GadgetID(dui()\button[DuiHwnd]),#BM_SETCHECK,#BST_CHECKED,0)
dui()\State[DuiHwnd]=1
PostMessage_(parent,#duidown,DuiHwnd,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[DuiHwnd]),#BM_SETIMAGE,#IMAGE_BITMAP,ImageID(image(0)))
EndIf
ElseIf State=1
If dui()\State[DuiHwnd]=1
SelectElement(dui(),DUIpane)
parent=GetParent_(dui()\hwnd[DuiHwnd])
SetWindowPos_(dui()\hwnd[DuiHwnd],0,0,0,dui()\width,20,#SWP_NOMOVE)
SendMessage_(GadgetID(dui()\button[DuiHwnd]),#BM_SETCHECK,#BST_UNCHECKED,0)
dui()\State[DuiHwnd]=0
PostMessage_(parent,#duiup,DuiHwnd,ListIndex(dui()))
SendMessage_(GadgetID(dui()\button[DuiHwnd]),#BM_SETIMAGE,#IMAGE_BITMAP,ImageID(image(1)))
EndIf
EndIf
EndProcedure
Procedure GetDUIstate(duinumber);Determine Whether a DUIhwnd is Expanded Or Collapsed
SelectElement(dui(),duinumber)
returnvalue=dui()\State[duinumber]
ProcedureReturn returnvalue
EndProcedure
; Procedure DUIExpand(DUIpane,State)
; If State= 0 Or State=1
; SelectElement(dui(),DUIpane)
; For a=0 To 9
; If IsWindow_(dui()\hwnd[a])
; HideDUI(DUIpane,a,State)
; EndIf
; Next
; EndIf
; EndProcedure
;************************************************
; Test program - remove this
;************************************************
OpenWindow(0,0,0,800,600,"")
CreateGadgetList(WindowID(0))
InitDUI()
DUIPane(0,20,20,100,200,0)
addDUIHwnd(0,0,"test")
link=addDUIlink(0,0,0,"Message Box",$FF0000)
Repeat
ev=WaitWindowEvent()
If ev=#PB_Event_Gadget
If EventGadget()=link
MessageRequester("Notice", "You pressed a link that works!",$C0)
EndIf
EndIf
Until ev=#PB_Event_CloseWindow
;*************************************************
; End Test Program
;*************************************************
DataSection
up:
Data.b $42,$4D,$38,$03,$00,$00,$00,$00,$00,$00,$36,$00,$00,$00,$28,$00
Data.b $00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$01,$00,$18,$00,$00,$00
Data.b $00,$00,$02,$03,$00,$00,$12,$0B,$00,$00,$12,$0B,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$3D,$4D,$20,$3D,$4D,$20,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$36,$45,$1C,$3D,$4D,$23,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$41,$51,$23,$3D,$49,$20,$3D,$4D,$20,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$32,$3D,$1C,$45,$55,$23,$3D,$4D,$20,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$41,$51,$23,$3D,$4D,$20,$41,$51,$23,$2E,$3A
Data.b $19,$3A,$49,$20,$3D,$4D,$23,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$49,$59,$27,$41,$51,$23,$3A,$49
Data.b $20,$32,$3D,$1C,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$3A,$45,$1C,$3A,$49
Data.b $20,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$3A,$45,$20,$32,$41,$1C,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$45,$55,$23,$3A,$49,$20,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$3A,$45,$20,$32,$3D,$1C,$3A,$45,$20,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$4D,$61,$2B,$41,$51,$23,$3A,$49,$20,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$32,$3D,$1C,$32,$3D,$19,$32,$41,$1C,$45,$55
Data.b $27,$3A,$49,$20,$3D,$49,$20,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$2B,$36,$19,$49,$59,$27,$49,$59
Data.b $27,$32,$3D,$19,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$41,$51,$23,$45,$55
Data.b $23,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00
down:
Data.b $42,$4D,$38,$03,$00,$00,$00,$00,$00,$00,$36,$00,$00,$00,$28,$00
Data.b $00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$01,$00,$18,$00,$00,$00
Data.b $00,$00,$02,$03,$00,$00,$12,$0B,$00,$00,$12,$0B,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$45,$55,$23,$41,$51
Data.b $23,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$32,$3D,$19,$49,$59,$27,$49,$59
Data.b $27,$2B,$36,$19,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$3D,$49,$20,$3A,$49,$20,$45,$55,$27,$32,$41
Data.b $1C,$32,$3D,$19,$32,$3D,$1C,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$3A,$49,$20,$41,$51,$23,$4D,$61,$2B,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$3A,$45,$20,$32,$3D,$1C,$3A,$45,$20,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$3A,$49,$20,$45,$55,$23,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$32,$41,$1C,$3A,$45,$20,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$3A,$49,$20,$3A,$45
Data.b $1C,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$32,$3D,$1C,$3A,$49,$20,$41,$51
Data.b $23,$49,$59,$27,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$3D,$4D,$23,$3A,$49,$20,$2E,$3A,$19,$41,$51
Data.b $23,$3D,$4D,$20,$41,$51,$23,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$3D,$4D,$20,$45,$55,$23,$32,$3D,$1C,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$3D,$4D,$20,$3D,$49,$20,$41,$51,$23,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$3D,$4D,$23,$36,$45,$1C,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$3D,$4D,$20,$3D,$4D,$20,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9,$B9
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
Data.b $FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00
EndDataSection
I guess I can:netmaestro wrote:who can optimize the code of Num3 for PB4 ????
Code: Select all
Procedure InitDUI()
#duiup=$FF06
.....
thank you netmaestro !!!!
Greetings from old Europe, Germany