Seite 1 von 1

Toolbar mal wo anders ...

Verfasst: 04.06.2007 22:15
von edel
Einfach CreateTreeToolbar(id,hWnd) statt CreateToolbar(id,hWnd)
benutzen. Damit packt man die Toolbar in jedes beliebige Fenster,
das sich auf ein Containergadget setzen laesst.

Code: Alles auswählen

Prototype WndProc(hWnd,uMsg,wParam,lParam)

Structure AddWindowStruct 
	hWnd.l
  height.l
  cont.l
  WndProc.WndProc
EndStructure

Procedure _subclass_aw_cb_(hWnd,uMsg,wParam,lParam)
  Protected *EWindow.AddWindowStruct = getprop_(hWnd,"wichtiger_speicher")
  Protected rc2.rect,rc.rect,*rc.rect
  Protected result,pen,hdc
  
  If uMsg = #WM_SIZE 
    GetClientRect_(hWnd,rc)
    
    MapWindowPoints_(hWnd,GetParent_(*EWindow\cont),@rc,2)
    
    If getwindowlong_(hWnd,#GWL_STYLE) & #WS_VSCROLL
      rc\right-rc\left+GetSystemMetrics_(#SM_CXVSCROLL)
    Else
      rc\right-rc\left 
    EndIf

    BringWindowToTop_(*EWindow\cont)
    SetWindowPos_(*EWindow\hWnd,0,rc\left,rc\top-*EWindow\height-1,rc\right,*EWindow\height,#SWP_NOZORDER) 
  EndIf
  
  If uMsg = #WM_NCHITTEST  
    If *EWindow\WndProc(hWnd,uMsg,wParam,lParam)  = #HTNOWHERE
      ProcedureReturn #HTTRANSPARENT
    EndIf 
  EndIf
  

  If uMsg = #WM_NCPAINT
    pen = CreatePen_(#PS_SOLID,1,GetSysColor_(#COLOR_3DSHADOW ))	
    GetClientRect_(hWnd,rc) 
    hdc = GetWindowDC_(hWnd)
    SelectObject_(hdc,pen) 
    MoveToEx_(hdc,0,*EWindow\height+2,0) 
    
    If getwindowlong_(hWnd,#GWL_STYLE) & #WS_VSCROLL
      rc\right + GetSystemMetrics_(#SM_CXVSCROLL) + 2 
    Else
      rc\right + 2
    EndIf
    
    LineTo_(hdc,rc\right,*EWindow\height+2) 
    DeleteObject_(pen)
    ReleaseDC_(hWnd,hdc)
  EndIf
  
  If uMsg = #WM_NCCALCSIZE
    *EWindow\WndProc(hWnd,uMsg,wParam,lParam)
    
    *rc = lParam 
    *rc\top + *EWindow\height + 1
    
    ProcedureReturn 0
  EndIf 
  
  If uMsg = #WM_NCDESTROY
    DestroyWindow_(*EWindow\cont)
    FreeMemory(*EWindow)
    ProcedureReturn 0
  EndIf
  
  ProcedureReturn *EWindow\WndProc(hWnd,uMsg,wParam,lParam)
EndProcedure

Procedure AddExtraWindow(hWnd,hWnd2)
  Protected *EWindow.AddWindowStruct
  Protected rc.rect
  
  *EWindow = getprop_(hWnd,"wichtiger_speicher")
  
  If Not *EWindow
    *EWindow = AllocateMemory(SizeOf(AddWindowStruct)) 
    Setprop_(hWnd,"wichtiger_speicher",*EWindow)
    *EWindow\WndProc = setwindowlong_(hWnd,#GWL_WNDPROC,@_subclass_aw_cb_())  
  EndIf
  
  GetClientRect_(hWnd2,rc)
  *EWindow\hWnd   = hWnd2
  *EWindow\height = rc\bottom + 1
  *EWindow\cont   = hWnd2
  SetWindowPos_(hWnd, 0, 0, 0, 0, 0,#SWP_FRAMECHANGED|#SWP_NOMOVE|#SWP_NOSIZE|#SWP_NOACTIVATE|#SWP_NOZORDER) 
  
EndProcedure


Procedure CreateTreeToolbar(id,hWnd)
  Protected *con.long
  Protected tb.l,hTB.l
  Protected style
  
  *con = ContainerGadget(#PB_Any,0,0,0,21)
  CloseGadgetList()  
  tb   = CreateToolBar(id,*con\l) 
  
  If id = #PB_Any
    hTB = ToolBarID(tb)
  Else
    hTB = tb 
  EndIf
  
  style = getwindowlong_(hTB,#GWL_STYLE)
  setwindowlong_(hTB,#GWL_STYLE,style|#CCS_NODIVIDER) 
  
  AddExtraWindow(hWnd,*con\l) 
  
  ProcedureReturn tb
EndProcedure

Beispiel :

Code: Alles auswählen

;##################################################################
;#                                                                 
;#                        TEST                                     
;#                                                                 
;##################################################################

Procedure main()
  Protected hWnd 
  Protected event,item,count,i
  
  hWnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,320,240,"leer")
  
  CreateGadgetList(hWnd)
  TreeGadget(0,5,5,310,230,#PB_Tree_AlwaysShowSelection)
 
  CatchImage(0,?collapseall)
  CatchImage(1,?expandall)
  CatchImage(2,?delete)
  CatchImage(3,?enabled)
  
  If CreateTreeToolbar(0,GadgetID(0))   
    ToolBarImageButton(0, ImageID(0)) : ToolBarToolTip(0,0,"Alle einklappen") 
    ToolBarImageButton(1, ImageID(1)) : ToolBarToolTip(0,1,"Alle aufklappen") 
    ToolBarImageButton(2, ImageID(2)) : ToolBarToolTip(0,2,"Item loeschen") 
    ToolBarImageButton(3, ImageID(3),#PB_ToolBar_Toggle) : ToolBarToolTip(0,3,"Deaktivieren")
  EndIf
  
  For i = 0 To 10
    AddGadgetItem(0, -1, "Normal Item "+Str(i), 0, 0) 
    AddGadgetItem(0, -1, "Node "+Str(i), 0, 1)        
  Next

  Repeat
    event = WaitWindowEvent()
    
    If event = #PB_Event_Menu
      
      Select EventMenu()
        Case 0 :
          count = CountGadgetItems(0)
          For i = 0 To count -1
            SetGadgetItemState(0,i,#PB_Tree_Collapsed)
          Next 
        Case 1 : 
          count = CountGadgetItems(0)
          For i = 0 To count -1
            SetGadgetItemState(0,i,#PB_Tree_Expanded)
          Next 
        Case 2 :
          item = GetGadgetState(0)
          RemoveGadgetItem(0,item)
        Case 3 : 
          state = GetToolBarButtonState(0,3)
          DisableGadget(0,state)
          SetGadgetState(0,-1)
      EndSelect
    EndIf
    
  Until event = #PB_Event_CloseWindow
  
	
EndProcedure:main()

DataSection
collapseall:
Data.l $00010000,$10100001,$00000010,$01280004,$00160000,$00280000,$00100000,$00200000,$00010000,$00000004,$00C00000,$00000000
Data.l $00000000,$00000000,$00000000,$FCFF0000,$FAFF00FC,$94AC00F9,$AFC4008C,$FCFF00A6,$FAFF00FA,$F8FF00F6,$457C00F1,$F7FF0004
Data.l $F8FF00EC,$F0FF00EE,$000000D5,$00000000,$00000000,$00000000,$00000000,$BBBB0000,$BBBBBBBB,$BBBBBBBB,$22222222,$BBBB2B22
Data.l $0000002A,$33BB2B00,$4444442A,$3ABB2B44,$1111112A,$3ABB2B11,$AAAA5A2A,$3ABB2BAA,$7777772A,$3ABB2B76,$6666662A,$3ABB2B66
Data.l $9999992A,$3ABB2B99,$8888882A,$3ABB2B88,$AAAAAA2A,$3ABB2BAA,$22222222,$3ABB2B22,$AAAAAAAA,$33BBBB3B,$33333333,$BBBBBB3B
Data.l $BBBBBBBB,$BBBBBBBB,$BBBBBBBB,$FFFFBBBB,$01F00000,$01F00000,$01C00000,$01C00000,$01C00000,$01C00000,$01C00000,$01C00000
Data.l $01C00000,$01C00000,$01C00000,$07C00000,$07C00000,$FFFF0000,$FFFF0000
Data.b $00,$00
expandall:
Data.l $00010000,$10100001,$00000010,$01280004,$00160000,$00280000,$00100000,$00200000,$00010000,$00000004,$00C00000,$00000000
Data.l $00000000,$00000000,$00000000,$96AB0000,$B1C3008B,$467A00A5,$FDFF0001,$F3FF00F9,$FBFF00D5,$FAFF00F1,$FBFF00EC,$FDFF00EE
Data.l $FFFF00F6,$FFFF00FA,$FFFF00FC,$FFFF00FF,$FFFF00FF,$FFFF00FF,$000000FF,$FFFF0000,$FFFFFFFF,$FFFFFFFF,$00000000,$FFFF0F00
Data.l $4AAAAA04,$11FF0FAA,$49929904,$14FF0F99,$43323304,$14FF0F33,$44428404,$14FF0F44,$22222204,$14FF0F25,$45525504,$14FF0F55
Data.l $47727704,$14FF0F77,$66626604,$14FF0F66,$44444404,$14FF0F44,$00000000,$14FF0F00,$44444444,$11FFFF1F,$11111111,$FFFFFF1F
Data.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$01F00000,$01F00000,$01C00000,$01C00000,$01C00000,$01C00000,$01C00000,$01C00000
Data.l $01C00000,$01C00000,$01C00000,$07C00000,$07C00000,$FFFF0000,$FFFF0000
Data.b $00,$00
delete:
Data.l $00010000,$10100001,$00000000,$05680008,$00160000,$00280000,$00100000,$00200000,$00010000,$00000008,$01400000,$00000000
Data.l $00000000,$00000000,$00000000,$33350000,$717400C7,$737400F4,$727400F4,$737500F3,$2A2F00F3,$2C3400D8,$2C3300E0,$293000DF
Data.l $363E00C7,$363E00E6,$202B00E5,$303900C5,$556000E5,$636B00F2,$636A00F4,$636B00F3,$646B00F3,$182700F3,$192800C5,$192700C6
Data.l $202C00C5,$546000C6,$132500F2,$3F5200C5,$3F5100F1,$485800F0,$485800F2,$657400F1,$9CA800D4,$5D4900DF,$6E5E00CA,$574600CE
Data.l $584600CA,$584600CA,$887C00C9,$504300D5,$A6A000C9,$473E00DC,$473F00C9,$473F00C9,$3D3900C8,$615B00C7,$817D00E0,$3D3A00F5
Data.l $524F00C7,$807E00E3,$807E00F5,$C4C400F4,$000000E3,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$75000000,$76000075,$77000076,$78000077,$79000078
Data.l $7A000079,$7B00007A,$7C00007B,$7D00007C,$7E00007D,$7F00007E,$8000007F,$81000080,$82000081,$83000082,$84000083,$85000084
Data.l $86000085,$87000086,$88000087,$89000088,$8A000089,$8B00008A,$8C00008B,$8D00008C,$8E00008D,$8F00008E,$9000008F,$91000090
Data.l $92000091,$93000092,$94000093,$95000094,$96000095,$97000096,$98000097,$99000098,$9A000099,$9B00009A,$9C00009B,$9D00009C
Data.l $9E00009D,$9F00009E,$A000009F,$A10000A0,$A20000A1,$A30000A2,$A40000A3,$A50000A4,$A60000A5,$A70000A6,$A80000A7,$A90000A8
Data.l $AA0000A9,$AB0000AA,$AC0000AB,$AD0000AC,$AE0000AD,$AF0000AE,$B00000AF,$B10000B0,$B20000B1,$B30000B2,$B40000B3,$B50000B4
Data.l $B60000B5,$B70000B6,$B80000B7,$B90000B8,$BA0000B9,$BB0000BA,$BC0000BB,$BD0000BC,$BE0000BD,$BF0000BE,$C00000BF,$C10000C0
Data.l $C20000C1,$C30000C2,$C40000C3,$C50000C4,$C60000C5,$C70000C6,$C80000C7,$C90000C8,$CA0000C9,$CB0000CA,$CC0000CB,$CD0000CC
Data.l $CE0000CD,$CF0000CE,$D00000CF,$D10000D0,$D20000D1,$D30000D2,$D40000D3,$D50000D4,$D60000D5,$D70000D6,$D80000D7,$D90000D8
Data.l $DA0000D9,$DB0000DA,$DC0000DB,$DD0000DC,$DE0000DD,$DF0000DE,$E00000DF,$E10000E0,$E20000E1,$E30000E2,$E40000E3,$E50000E4
Data.l $E60000E5,$E70000E6,$E80000E7,$E90000E8,$EA0000E9,$EB0000EA,$EC0000EB,$ED0000EC,$EE0000ED,$EF0000EE,$F00000EF,$F10000F0
Data.l $F20000F1,$F30000F2,$F40000F3,$F50000F4,$F60000F5,$F70000F6,$F80000F7,$F90000F8,$FA0000F9,$FB0000FA,$FC0000FB,$FD0000FC
Data.l $FE0000FD,$FF0000FE,$000000FF,$00280000,$00000000,$00000000,$00000000,$31310000,$31313131,$31313131,$31313131,$31313131
Data.l $31313131,$31313131,$31313131,$31313131,$1C173031,$31313131,$30171C31,$31313131,$17061730,$3131311C,$1707171C,$31313130
Data.l $1918171D,$1C1D1C17,$17191817,$3131311D,$18131C31,$05120518,$1C141918,$31313131,$151C3131,$18181818,$311C0B18,$31313131
Data.l $08313131,$1A1A1B0C,$3131080C,$31313131,$00313131,$160D0D0A,$31310009,$31313131,$2C1C3131,$0E0F1011,$311C290F,$31313131
Data.l $04282331,$2A262A02,$23270103,$31313131,$2B2E2425,$1F251F24,$242B2F24,$31313125,$212D2130,$31313123,$202D2223,$31313130
Data.l $231E3031,$31313131,$301E2331,$31313131,$31313131,$31313131,$31313131,$31313131,$31313131,$31313131,$31313131,$FFFF3131
Data.l $FFFF0000,$E3E30000,$C1C10000,$01C00000,$03E00000,$07F00000,$0FF80000,$0FF80000,$07F00000,$03E00000,$01C00000,$C1C10000
Data.l $E3E30000,$FFFF0000,$FFFF0000
Data.b $00,$00
enabled:
Data.l $00010000,$10100001,$00000000,$05680008,$00160000,$00280000,$00100000,$00200000,$00010000,$00000008,$01400000,$00000000
Data.l $00000000,$00000000,$00000000,$ABB40000,$808A00BC,$C7D30092,$749200CB,$7492007D,$E1EA007C,$9AB800E2,$C3D5009C,$A7C200C4
Data.l $B5CB00A8,$CBDE00B6,$E7EE00CB,$639F00E7,$EAF4005D,$C1D900E9,$52AB00BE,$52AB003D,$79B3003E,$46B3006B,$B5E10028,$407800A9
Data.l $50900000,$80B00000,$A0C00040,$FFFF0070,$000000FF,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$96960000,$97970096,$98980097,$99990098,$9A9A0099
Data.l $9B9B009A,$9C9C009B,$9D9D009C,$9E9E009D,$9F9F009E,$A0A0009F,$A1A100A0,$A2A200A1,$A3A300A2,$A4A400A3,$A5A500A4,$A6A600A5
Data.l $A7A700A6,$A8A800A7,$A9A900A8,$AAAA00A9,$ABAB00AA,$ACAC00AB,$ADAD00AC,$AEAE00AD,$AFAF00AE,$B0B000AF,$B1B100B0,$B2B200B1
Data.l $B3B300B2,$B4B400B3,$B5B500B4,$B6B600B5,$B7B700B6,$B8B800B7,$B9B900B8,$BABA00B9,$BBBB00BA,$BCBC00BB,$BDBD00BC,$BEBE00BD
Data.l $BFBF00BE,$C0C000BF,$C1C100C0,$C2C200C1,$C3C300C2,$C4C400C3,$C5C500C4,$C6C600C5,$C7C700C6,$C8C800C7,$C9C900C8,$CACA00C9
Data.l $CBCB00CA,$CCCC00CB,$CDCD00CC,$CECE00CD,$CFCF00CE,$D0D000CF,$D1D100D0,$D2D200D1,$D3D300D2,$D4D400D3,$D5D500D4,$D6D600D5
Data.l $D7D700D6,$D8D800D7,$D9D900D8,$DADA00D9,$DBDB00DA,$DCDC00DB,$DDDD00DC,$DEDE00DD,$DFDF00DE,$E0E000DF,$E1E100E0,$E2E200E1
Data.l $E3E300E2,$E4E400E3,$E5E500E4,$E6E600E5,$E7E700E6,$E8E800E7,$E9E900E8,$EAEA00E9,$EBEB00EA,$ECEC00EB,$EDED00EC,$EEEE00ED
Data.l $EFEF00EE,$F0F000EF,$F1F100F0,$F2F200F1,$F3F300F2,$F4F400F3,$F5F500F4,$F6F600F5,$F7F700F6,$F8F800F7,$F9F900F8,$FAFA00F9
Data.l $FBFB00FA,$FCFC00FB,$FDFD00FC,$FEFE00FD,$FFFF00FE,$54F000FF,$54F00032,$00F80032,$00000000,$00000000,$00000000,$066C0000
Data.l $006B0000,$03240000,$00000003,$00000000,$55780000,$55A00032,$55C00032,$00000032,$00000000,$00200000,$000000CC,$13A80000
Data.l $4C240003,$13840032,$4C240003,$00000032,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$4C240000
Data.l $000F0032,$000B0085,$55740088,$55740032,$00740032,$D0080000,$55100002,$0E940032,$5548002B,$00080032,$00600000,$00280000
Data.l $00230000,$A4380000,$00000002,$D0280000,$55100002,$13CC0032,$5548002B,$00480032,$001F0000,$A5380000,$00000002,$D0480000
Data.l $55100002,$57340032,$5548002B,$3A8C0032,$3A8C0032,$00100032,$042C0000,$19190000,$19191919,$19191919,$19191919,$19191919
Data.l $19191919,$19191919,$19191919,$19191919,$12121211,$16131312,$19191919,$19191919,$18180A10,$14161818,$19191916,$19191919
Data.l $07070810,$1614170B,$19191714,$19191919,$0909060C,$0E170509,$19171517,$19191919,$09090604,$020D0909,$17151719,$19191919
Data.l $12121211,$00121212,$15171919,$19191919,$09090D10,$0F060909,$19191919,$19191919,$09090D10,$0F060909,$19191919,$19191919
Data.l $0707180C,$0C080707,$19191919,$19191919,$18180D04,$030A1818,$19191919,$19191919,$01010111,$00010101,$19191919,$19191919
Data.l $19191919,$19191919,$19191919,$19191919,$19191919,$19191919,$19191919,$19191919,$19191919,$19191919,$19191919,$FFFF1919
Data.l $FFFF0000,$3FC00000,$1FC00000,$0FC00000,$07C00000,$23C00000,$33C00000,$3FC00000,$3FC00000,$3FC00000,$3FC00000,$3FC00000
Data.l $FFFF0000,$FFFF0000,$FFFF0000
Data.b $00,$00
EndDataSection

Verfasst: 04.06.2007 22:24
von ts-soft
:allright: sehr brauchbar

Verfasst: 05.06.2007 13:01
von dige
Klasse Idee! Danke!

Verfasst: 05.06.2007 13:11
von Leonhard
Kann ich gut gebrauchen, danke :-)

Verfasst: 07.06.2007 15:57
von Xaby
Wie immer sehr edel Edel :allright: :allright: :allright: