Meine ersten Gedanken zu der ToolBar-Problematik.
Code: Alles auswählen
;/ EasyVent
XIncludeFile "EasyVENT.pbi" ;
; Link to Download: http://www.purebasic.fr/english/viewtopic.php?t=21136&highlight=easyvent
Declare.l DragItem(*sender.PB_Sender)
Declare.l DropItem(*sender.PB_Sender)
;/ EasyVent END
; http://www.purebasic.fr/german/viewtopic.php?t=10704&highlight=global+hotkeys
Declare.l AddHotkey(Window, fsModifiers, Keys, HotkeyID) ; Create a new global hotkey HotkeyID in specified Window.
Declare.l RemoveHotkey(Window, HotkeyID) ; Remove Specified HotkeyID in Window.
#MOD_WINDOWS = $8
#PB_Event_Hotkey = 786
; My Functions
Declare ByCTRL(j.l)
Enumeration
#MainWin
EndEnumeration
Define Event.l
Define GadgetNr.l
Define MerkeCTRL.l
OpenPreferences("FLFenster.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")
CreateGadgetList(WindowID(0))
ButtonGadget(0, 0, 0, 50, 20, "Menu 1")
ButtonGadget(1, 50, 0, 70, 20, "Menu 2")
ButtonGadget(2, 120, 0, 100, 20, "Menu Nummer 3")
If AddHotkey(0, #MOD_CONTROL,0, 0) = 0
MessageRequester("Error", "Cannot create hotkey 0.")
EndIf
SetActiveGadget(1)
;Set event handlers.
Repeat
Event= WaitWindowEvent()
If Event=#PB_Event_Gadget
GadgetNr=EventGadget()
Debug GadgetNr
EndIf
If Event = #PB_Event_Hotkey ; If an hotkey was called
If EventwParam()=0 ; For know what hotkey was called, no documentation on PureBasic for this function.
; Hotkey with ID 0 (STRG / CTRL)
If MerkeCTRL=0
MerkeCTRL=1
Else
MerkeCTRL=0
EndIf
Debug MerkeCTRL
ByCTRL(MerkeCTRL)
EndIf
EndIf
; Now we remove the hotkeys.
Until Event=#PB_Event_CloseWindow
RemoveHotkey(0, 0)
CreatePreferences("FLFenster.ini")
WritePreferenceLong("WINDOW_XPOS_MAIN",WindowX(#MainWin))
WritePreferenceLong("WINDOW_YPOS_MAIN",WindowY(#MainWin))
ClosePreferences()
CloseWindow(#MainWin)
;/ by Folker
Procedure ByCTRL(j.l)
Static P.l
If j=1
P=#OnDragItemStart
SetEventHandler(GadgetID(0), P, @DragItem())
SetEventHandler(GadgetID(1), P, @DragItem())
SetEventHandler(GadgetID(2), P, @DragItem())
Else
P=#OnDragItemEnd
SetEventHandler(GadgetID(0), P, @DropItem())
SetEventHandler(GadgetID(1), P, @DropItem())
SetEventHandler(GadgetID(2), P, @DropItem())
EndIf
EndProcedure
; GlobalHotkeys library
; By Gansta93
Procedure AddHotkey(Window, fsModifiers, Keys, HotkeyID) ; Create a new global hotkey HotkeyID in specified Window.
ProcedureReturn RegisterHotKey_(WindowID(Window), HotkeyID, fsModifiers, Keys)
EndProcedure
Procedure RemoveHotkey(Window, HotkeyID) ; Remove Specified HotkeyID in Window.
ProcedureReturn UnregisterHotKey_(WindowID(Window), HotkeyID)
EndProcedure
; From DragDropItems demo 1.pb by srod
;*********************************************************************************
; EVENT HANDLERS
;*********************************************************************************
;Here we simply return #PB_ProcessPureBasicEvents to enable the drag.
;To enable the drag simply place the drag text in *sender\text$
;If *sender\text$ is empty on return, then the drag/drop is cancelled.
Procedure.l DragItem(*sender.PB_Sender)
;Determine which gadget is being dragged from.
Select *sender\hwnd
Case GadgetID(0)
*sender\Text$=GetGadgetText(0) ; GetGadgetPosition
Case GadgetID(1)
*sender\Text$=GetGadgetText(1)
Case GadgetID(2)
*sender\Text$=GetGadgetText(2)
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
;The following handles drops from three gadgets.
Procedure.l DropItem(*sender.PB_Sender)
;First remove any line feed / carriage returns from the dragged string.
*sender\Text$=ReplaceString(*sender\Text$,Chr(10)+Chr(13)," ")
;Add to list view gadget.
AddGadgetItem(4,-1, *sender\Text$)
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Nächster Ansatz:
Code: Alles auswählen
Enumeration
#MainWin
EndEnumeration
Define Event.l
Define GadgetNr.l
OpenPreferences("FLFenster2.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 2")
CreateGadgetList(WindowID(0))
ListIconGadget(0,0,0,300,20,"Menu 1",50,#PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(0,1,"Menu 2",70)
AddGadgetColumn(0,2,"Menu Nummer 3",120)
Repeat
Event= WaitWindowEvent()
If Event=#PB_Event_Gadget
GadgetNr=EventGadget()
Debug GadgetNr
EndIf
;/ HIer geht auch nix :-(
EventType=EventType()
If EventType<>-1
Debug EventType
EndIf
Until Event=#PB_Event_CloseWindow
CreatePreferences("FLFenster2.ini")
WritePreferenceLong("WINDOW_XPOS_MAIN",WindowX(#MainWin))
WritePreferenceLong("WINDOW_YPOS_MAIN",WindowY(#MainWin))
ClosePreferences()
CloseWindow(#MainWin)
Hier noch eine Methode für die individuelle Menü-Anordnung:
Code: Alles auswählen
Enumeration
#MainWin
EndEnumeration
Define Event.l
Define GadgetNr.l
NewList Gadgets()
Procedure CreateMenuButton(Text$,Breite.l,List(),Start=0)
If CountList(List())<>0
LastElement(List())
GD=List()
x=GadgetX(GD)+GadgetWidth(GD)
Else
GD=Start-1
EndIf
AddElement(List())
List()=GD+1
ButtonGadget(GD+1, x, 0, Breite-5, 20, Text$)
AddElement(List())
List()=GD+2
ButtonGadget(GD+2, x+Breite-5, 0, 5, 20,"")
EndProcedure
OpenPreferences("FLFenster3.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 3")
CreateGadgetList(WindowID(0))
CreateMenuButton("Menu 1",50,Gadgets(),100) ; GadgetID startet bei 100
CreateMenuButton("Menu 2",70,Gadgets())
CreateMenuButton("Menu Nummer 3",100,Gadgets())
CreateMenuButton("Menu vier",70,Gadgets())
CreateMenuButton("M V",40,Gadgets())
Repeat
Event= WaitWindowEvent()
If Event=#PB_Event_Gadget
GadgetNr=EventGadget()
Debug GadgetNr
Anzahl=CountList(Gadgets())
ResetList(Gadgets())
While NextElement(Gadgets())
If GadgetNr=Gadgets() And GadgetWidth(Gadgets())=5 And Gadgets()<Anzahl+100-1 ; Letzter Schieber soll nicht funktionieren
; kleiner Knopf neben Menu-Eintrag !Breite = 5; Anzahl + 100, weil Gadget-IDs bei 100 Beginnen
PreviousElement(Gadgets())
*FirstElement = @Gadgets()
GD1=Gadgets()
NextElement(Gadgets())
*MenuSwap = @Gadgets()
GDM=Gadgets()
NextElement(Gadgets())
*SecondElement=@Gadgets()
GD2=Gadgets()
ResizeGadget(GD2,GadgetX(GD1),#PB_Ignore,#PB_Ignore,#PB_Ignore) ; hinterer nach vorn
ResizeGadget(GDM,GadgetX(GD2)+GadgetWidth(GD2),#PB_Ignore,#PB_Ignore,#PB_Ignore); kleiner Knopf in der Mitte
ResizeGadget(GD1,GadgetX(GDM)+5,#PB_Ignore,#PB_Ignore,#PB_Ignore)
SwapElements(Gadgets(),*FirstElement,*SecondElement)
;PreviousElement(Gadgets()) ; es kann sowieso nur jedes zweite Gadget ein MenuSwapper sein
Debug "Tausche"
GadgetNr=-1
EndIf
Wend
EndIf
Until Event=#PB_Event_CloseWindow
CreatePreferences("FLFenster3.ini")
WritePreferenceLong("WINDOW_XPOS_MAIN",WindowX(#MainWin))
WritePreferenceLong("WINDOW_YPOS_MAIN",WindowY(#MainWin))
ClosePreferences()
CloseWindow(#MainWin)
Wenn man meinen letzten Code mit dem ersten Versuch von EasyVent so verbinden würde, dass jedes 5-Breit-Gadget() zum Droppen gedacht ist und man alle anderen Draggen kann, und diese Trotzdem bei einfachem Klick (Doppelklick geht) eine GadgetNr wiedergeben, dann wäre es ja schon schön oder? + Bildchen natürlich. Aber mit ImageButtonGadget() geht es ja auch
Hoffe, es nützt jemandem was.
