Toolbar mal wo anders ...

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Toolbar mal wo anders ...

Beitrag 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
Zuletzt geändert von edel am 07.06.2007 19:21, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

:allright: sehr brauchbar
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dige
Beiträge: 1241
Registriert: 08.09.2004 08:53

Beitrag von dige »

Klasse Idee! Danke!
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Kann ich gut gebrauchen, danke :-)
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Wie immer sehr edel Edel :allright: :allright: :allright:
Kinder an die Macht http://scratch.mit.edu/
Antworten