(here the first one)
Don't know if this Gadget is a part of a WinOS DLL or Outlook itself.
What I know is that PureBasic doesn't have it.
Code: Select all
; OutlookGadget For PureBasic 
; (c) 2003 - Franco
; Uses my EventConnection Library :)
;
; works with PureBasic v3.7
;
; USAGE:
;
; OutlookGadget(id,x,y,w,h,max_groups) 
; AddOutlookGadgetGroup(id,position,String$) - don't mix the positions! 
; AddOutlookGadgetItem(id,position,image$,parent_group) - don't mix the positions! 
; ActivateOutlookGadgetGroup(group_position)
;
;
; Use max_groups in OutlookGadget as it should be used!
; If max_groups is < the actual number of groups = not all groups will be shown
; If max_groups is > the actual number of groups = ActivateOutlookGadgetGroup will crash
;
; Don't mix the positions with AddOutlookGadgetGroup and AddOutlookGadgetItem!
; Start always with 1 and than 2,3,4... and so on.
; You can't use -1 (as position value) for adding Groups or Items!
;
; FOR NOW YOU CAN'T RESIZE THE OUTLOOKGADGET 
;
;- Start Main
#MainWindow = 1
Outlook.l   = OnEvent(?EventType_LeftClick)
OutlookButton1.l = OnEvent(?Activate1)
ScrollArea1Button1 = OnEvent(?EventType_LeftClick)
ScrollArea1Button2 = OnEvent(?EventType_LeftClick)
ScrollArea1Button3 = OnEvent(?EventType_LeftClick)
ScrollArea1Button4 = OnEvent(?EventType_LeftClick)
OutlookButton2.l = OnEvent(?Activate2)
ScrollArea2Button1 = OnEvent(?EventType_LeftClick)
ScrollArea2Button2 = OnEvent(?EventType_LeftClick)
ScrollArea2Button3 = OnEvent(?EventType_LeftClick)
ScrollArea2Button4 = OnEvent(?EventType_LeftClick)
OutlookButton3.l = OnEvent(?Activate3)
ScrollArea3Button1 = OnEvent(?EventType_LeftClick)
ScrollArea3Button2 = OnEvent(?EventType_LeftClick)
ScrollArea3Button3 = OnEvent(?EventType_LeftClick)
ScrollArea3Button4 = OnEvent(?EventType_LeftClick)
OutlookButton4.l = OnEvent(?Activate4)
ScrollArea4Button1 = OnEvent(?EventType_LeftClick)
ScrollArea4Button2 = OnEvent(?EventType_LeftClick)
ScrollArea4Button3 = OnEvent(?EventType_LeftClick)
ScrollArea4Button4 = OnEvent(?EventType_LeftClick)
Procedure OutlookGadget(id,x,y,w,h,max)
  If max < 1 : ProcedureReturn 0 : EndIf
  
  Structure Gadget
    x.l  ;this is used for the main gadget
    StructureUnion 
      y.l  ;this is used for the main gadget
      uy.l ;this is used for the upper y of the groups
    EndStructureUnion 
    StructureUnion 
      w.l  ;this is used for the main gadget
      ly.l ;this is used for the lower y of the groups
    EndStructureUnion
    StructureUnion 
      h.l  ;this is used for the main gadget
      idg.l ;this is used for the id of the groups
    EndStructureUnion
    StructureUnion 
      m.l  ;this is used for the main gadget
      ids.l ;this is used for the id of the scrollarea
    EndStructureUnion
  EndStructure
  
  Dim Outlook.Gadget(max)
  ; ZERO is always the main OutlookGadget!
  ; >=1 is always used for OutlookGadgetGroups!
  Outlook(0)\x = x
  Outlook(0)\y = y
  If w < 90 : w = 90 : EndIf
  Outlook(0)\w = w
  If h < max * 25 + 75 : h = max * 25 + 75 : EndIf
  Outlook(0)\h = h
  Outlook(0)\m = max ; max positions
  
  hGadget = ContainerGadget(id,Outlook(0)\x,Outlook(0)\y,Outlook(0)\w,Outlook(0)\h,#PB_Container_Single)
  hBrush = CreateSolidBrush_(GetSysColor_(#COLOR_APPWORKSPACE ) ) 
  SetClassLong_(hGadget, #GCL_HBRBACKGROUND, hBrush) 
  ProcedureReturn hGadget
EndProcedure
Procedure AddOutlookGadgetGroup(id,pos,String$)
  If pos > Outlook(0)\m : ProcedureReturn 0 : EndIf
  x=0
  
  If pos = 1 : y=0 : EndIf
  Outlook(pos)\uy = y
  Outlook(pos)\ly = y
  
  ;calculate upper y for pos > 1
  If pos > 1 : y=pos*25+0-25 : EndIf
  Outlook(pos)\uy = y ;this is used to store the upper y of the button so we can move it...
  
  ;calculate lower y for pos > 1
  If pos > 1 : y=Outlook(0)\h - (((Outlook(0)\m-pos+1)*25)+1) : EndIf
  Outlook(pos)\ly = y ;this is not used for width info, but to store the lower y of the button so we can move it...
  
  w = Outlook(0)\w - 1
  
  ButtonGadget(id,x,y,w,25,String$)
  Outlook(pos)\idg = id ;this is not used for height info, but to store the id of the button so we can move it...
  y=pos*25+2
  ScrollArea.l = NoEvent()
; different values are possible...  
  Scroll.l = ScrollAreaGadget(ScrollArea, 6, y, Outlook(0)\w-12, Outlook(0)\h - ((Outlook(0)\m+1)*25)+15, Outlook(0)\w-32, Outlook(0)\h - ((Outlook(0)\m+1)*25)+15, 42,#PB_ScrollArea_BorderLess)
  Outlook(pos)\ids = ScrollArea ;this is not used for max info, but to store the id of the scrollarea so we can move it...
  HideGadget(ScrollArea,1)
  ;colorize all this stuff...
  Area.l = GetWindow_(Scroll, #GW_CHILD)
  hBrush = CreateSolidBrush_(GetSysColor_(#COLOR_APPWORKSPACE ) ) 
  SetClassLong_(Area, #GCL_HBRBACKGROUND, hBrush) 
  SetClassLong_(Scroll, #GCL_HBRBACKGROUND, hBrush) 
  ProcedureReturn ScrollArea
EndProcedure
Procedure AddOutlookGadgetItem(id,pos,image$,parent)
  If pos = 1 : y=10 : EndIf
  If pos > 1 : y=pos*52-42 : EndIf
  x=((Outlook(0)\w)/2-36)
  ButtonImageGadget(id,x,y,42,42,LoadImage(NoEvent(),image$))   ; Y is 2 = first one doesn't move
  scroll.l = GetWindow_(GadgetID(parent), #GW_CHILD)
  y=pos*52+10
  MoveWindow_(scroll, 0, 0, Outlook(0)\w-32, y, #TRUE)
  ;have to change the parent somehow, otherwise the scrollarea is not repaint...
  ResizeGadget(parent, -1, -1, -1, Outlook(0)\h - (Outlook(0)\m*25)+pos)
  ;now I bring the parent back to the 'normal' size...
  ResizeGadget(parent, -1, -1, -1, Outlook(0)\h - ((Outlook(0)\m+1)*25) +15)
EndProcedure
Procedure ActivateOutlookGadgetGroup(pos)
  
  ;move the buttons...
  For i.l = 1 To Outlook(0)\m
    If i < pos
      MoveWindow_(GadgetID(Outlook(i)\idg), 0,Outlook(i)\uy,Outlook(0)\w-1,25,#TRUE) 
    Else
      MoveWindow_(GadgetID(Outlook(i)\idg), 0,Outlook(i)\ly,Outlook(0)\w-1,25,#TRUE) 
    EndIf
  Next
  MoveWindow_(GadgetID(Outlook(pos)\idg), 0,Outlook(pos)\uy,Outlook(0)\w-1,25,#TRUE) 
  
  ;hide the scrollareas...
  For i.l = 1 To Outlook(0)\m
    HideGadget(Outlook(i)\ids, 1) 
  Next
  HideGadget(Outlook(pos)\ids, 0)
  
EndProcedure
;- start example
If OpenWindow(#MainWindow,100,200,320,320,#PB_Window_SystemMenu | #PB_Window_SizeGadget,"Test") = 0 : End : EndIf
CreateGadgetList(WindowID(1))
If OutlookGadget(Outlook,50,10,10,250,4)
  ScrollArea1 = AddOutlookGadgetGroup(OutlookButton1,1,"Button 1")
  If ScrollArea1
    AddOutlookGadgetItem(ScrollArea1Button1,1,"GeeBee2.bmp",ScrollArea1)
    AddOutlookGadgetItem(ScrollArea1Button2,2,"GeeBee2.bmp",ScrollArea1)
    AddOutlookGadgetItem(ScrollArea1Button3,3,"GeeBee2.bmp",ScrollArea1)
    AddOutlookGadgetItem(ScrollArea1Button4,4,"GeeBee2.bmp",ScrollArea1)
    CloseGadgetList() ; this closes the Gadgetlist of ScrollArea1
  EndIf
  ScrollArea2 = AddOutlookGadgetGroup(OutlookButton2,2,"Button 2")
  If ScrollArea2
    AddOutlookGadgetItem(ScrollArea2Button1,1,"GeeBee2.bmp",ScrollArea2)
    AddOutlookGadgetItem(ScrollArea2Button2,2,"GeeBee2.bmp",ScrollArea2)
    AddOutlookGadgetItem(ScrollArea2Button3,3,"GeeBee2.bmp",ScrollArea2)
    AddOutlookGadgetItem(ScrollArea2Button4,4,"GeeBee2.bmp",ScrollArea2)
    CloseGadgetList() ; this closes the Gadgetlist of ScrollArea2
  EndIf
  ScrollArea3 = AddOutlookGadgetGroup(OutlookButton3,3,"Button 3")
  If ScrollArea3
    AddOutlookGadgetItem(ScrollArea3Button1,1,"GeeBee2.bmp",ScrollArea3)
    AddOutlookGadgetItem(ScrollArea3Button2,2,"GeeBee2.bmp",ScrollArea3)
    AddOutlookGadgetItem(ScrollArea3Button3,3,"GeeBee2.bmp",ScrollArea3)
    AddOutlookGadgetItem(ScrollArea3Button4,4,"GeeBee2.bmp",ScrollArea3)
    CloseGadgetList() ; this closes the Gadgetlist of ScrollArea3
  EndIf
  ScrollArea4 = AddOutlookGadgetGroup(OutlookButton4,4,"Button 4")
  If ScrollArea4
    AddOutlookGadgetItem(ScrollArea4Button1,1,"GeeBee2.bmp",ScrollArea4)
    AddOutlookGadgetItem(ScrollArea4Button2,2,"GeeBee2.bmp",ScrollArea4)
    AddOutlookGadgetItem(ScrollArea4Button3,3,"GeeBee2.bmp",ScrollArea4)
    AddOutlookGadgetItem(ScrollArea4Button4,4,"GeeBee2.bmp",ScrollArea4)
    CloseGadgetList() ; this closes the Gadgetlist of ScrollArea4
  EndIf
  CloseGadgetList() ; this closes the Gadgetlist of the OutlookGadget
  ActivateOutlookGadgetGroup(1)
EndIf
Repeat
  Event.l = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      CallEventFunction(EventGadgetID())
      
  EndSelect
  
Until Event = #PB_Event_CloseWindow And EventWindowID() = #MainWindow
End
;- User Functions
Activate1:
  ActivateOutlookGadgetGroup(1)
Return
Activate2:
  ActivateOutlookGadgetGroup(2)
 
Return
Activate3:
  ActivateOutlookGadgetGroup(3)
Return
Activate4:
  ActivateOutlookGadgetGroup(4)
Return
EventType_LeftClick:
  Debug "#PB_EventType_LeftClick"
;  MessageRequester("Test PB_EventType_LeftClick", "Gadget #: " + Str(EventGadgetID()),0)
Return
Have fun with it and use it accordingly.
Forgot to mention: it uses my EventConnection library (you can change this though...).




