an Office like toolbar ...

Just starting out? Need help? Post your questions and find answers here.
xaby
User
User
Posts: 16
Joined: Tue May 15, 2007 12:41 pm
Location: Germany - Berlin

an Office like toolbar ...

Post by xaby »

Code: Select all

EnableExplicit

Enumeration
  #MainWin
EndEnumeration

Define Event.l
Define EventType.l
Define GadgetNr.l
Define MausA.POINT
Define MausE.POINT

Define StartTime, EndTime


Define LGD.l, FGD, GD1, GD2, Tausche
Define *FirstElement, *SecondElement

NewList Gadgets()


Procedure CreateMenuButton(Text$,Breite.l,List(),F.l,Start=0)
  Static GD.l,x
  If CountList(List())<>0
    LastElement(List())
    GD=List()
    x=GadgetX(GD)+GadgetWidth(GD)
  Else
    GD=Start-1
  EndIf  
    AddElement(List())
    List()=GD+1
    CreateImage(GD+1,Breite-5,20)
    StartDrawing(ImageOutput(GD+1))
      Box(0,0,ImageWidth(GD+1),ImageHeight(GD+1),#Gray)
      Box(1,1,ImageWidth(GD+1)-2,ImageHeight(GD+1)-2,F)
      DrawText(4,2,Text$,0,F); #LightGray
    StopDrawing()
    ImageGadget(GD+1,  x, 0, Breite, 35, ImageID(GD+1))
  
EndProcedure


OpenPreferences("FLFenster4.ini")
Define WinPosX_MainWin.l=ReadPreferenceLong("WINDOW_XPOS_MAIN",50);
Define WinPosY_MainWin.l=ReadPreferenceLong("WINDOW_YPOS_MAIN",50);
ClosePreferences()

OpenWindow(#MainWin,WinPosX_MainWin,WinPosY_MainWin, 750,550,":: FL :: FL-Fenster 4")

CreateGadgetList(WindowID(#MainWin))


CreateMenuButton("Menu 1",60,Gadgets(),#Yellow,100) ; GadgetID startet bei 100
CreateMenuButton("Menu 2",60,Gadgets(),#Red)
CreateMenuButton("Menu Nummer 3",120,Gadgets(),RGB(128,128,255))
CreateMenuButton("Menu vier",80,Gadgets(),RGB(192,192,192))
CreateMenuButton("M V",40,Gadgets(),#Green)
;CreateMenuButton("",10,Gadgets(),#Gray)


Repeat
  
  Event= WaitWindowEvent()
  
  If Event=#PB_Event_Gadget
    GadgetNr=EventGadget()
    Debug GadgetNr
    
    LastElement(Gadgets())
    LGD.l=Gadgets() ; letztes Element
    FirstElement(Gadgets())
    FGD.l=Gadgets() ; Erstes Element
    ResetList(Gadgets())
    
    While NextElement(Gadgets())
      If GadgetNr=Gadgets(); Letzter Schieber soll nicht funktionieren
        
        EventType=EventType()
        
        Debug EventType ; MouseDown und MouseUp wäre noch nützlich, damit ziehen vom Klicken unterschieden werden kann
        ; 0 = erste Maustaste einfach geklickt
        ; 1 = zweite Maustaste einfach geklickt
        ; 2 = erste Maustaste zweifach geklickt
        ; 3 = zweite Maustaste zweifach geklickt
        ; 14002 = erste Maustaste klicken und dabei ziehen
        
        If EventType = 0
          MausA\x=WindowMouseX(#MainWin)
          MausA\y=WindowMouseY(#MainWin) 
        EndIf
        If EventType = 14002
          MausE\x=WindowMouseX(#MainWin)
          MausE\y=WindowMouseY(#MainWin)
          
          If MausA\x-MausE\x>0
            Debug "<--- nach links geschoben" ; Tausch erfolgt mit 5-Breit-Knopf auf linker Seite vom ImageButton, außer wenn erster
            
            If Gadgets()<>FGD ; erstes Element in der Liste
              Tausche.l=1
              GD2=Gadgets()
              *SecondElement=@Gadgets()
              PreviousElement(Gadgets())
              *FirstElement = @Gadgets() 
              GD1=Gadgets()
            Else
            Tausche.l=0
            EndIf
          Else  
            Debug "nach rechtss geschoben --->" ; Tausch erfolgt mit 5-Breit-Knopf auf rechter Seite vom ImageButton, außer wenn letzter
            If Gadgets()<> LGD; letztes Element in der Liste
            Tausche=1
            GD1=Gadgets()
            *FirstElement = @Gadgets()
             NextElement(Gadgets())
            *SecondElement=@Gadgets()
            GD2=Gadgets()
            Else
              Tausche.l=0
            EndIf
          
          EndIf 
          
        EndIf 
        
        
        ; kleiner Knopf neben Menu-Eintrag !Breite = 5; Anzahl + 100, weil Gadget-IDs bei 100 Beginnen
        If Tausche
        ResizeGadget(GD2,GadgetX(GD1),#PB_Ignore,#PB_Ignore,#PB_Ignore) ; hinterer nach vorn
        SetGadgetState(GD2, ImageID(GD2)) ; Gibt sonst Darstellungsfehler
        ResizeGadget(GD1,GadgetX(GD2)+GadgetWidth(GD2),#PB_Ignore,#PB_Ignore,#PB_Ignore) ; vorderer nach hinten
        SetGadgetState(GD1, ImageID(GD1)) ; Gibt sonst Darstellungsfehler
         
        SwapElements(Gadgets(),*FirstElement,*SecondElement)
        Tausche=0
        GadgetNr=-1
        Debug "getauscht Tausche"   
        EndIf  
      EndIf 
      
    Wend
    
  EndIf
  
    EventType=EventType()
    EndTime=ElapsedMilliseconds()
    If EventType<>-1 Or EndTime-StartTime>100
      Debug EventType
      StartTime=ElapsedMilliseconds()
    EndIf 
    
  
  
Until Event=#PB_Event_CloseWindow

CreatePreferences("FLFenster4.ini")
WritePreferenceLong("WINDOW_XPOS_MAIN",WindowX(#MainWin))
WritePreferenceLong("WINDOW_YPOS_MAIN",WindowY(#MainWin))

ClosePreferences()


CloseWindow(#MainWin)
Do you know the following:
second mouse-button clicking on the menu in the explorer.
make a hook on : Links
Know you have your links from the FAVORITEs (when not, put a link there)

If you klick and drag one of these links, you can decide there position in the menu.

In Word, Excel and other Office products it is nearly the same.
You can also drop it away. And there is a hole in your menu :lol:

Do you know, what I mean?

I tried this too, but how you can see, it is not the same.

Do I wait for PB V. 4.1. or is there another possibility?

Thanks for trying my code. Folker :P