Suuuper Toolbar / Rebar / Menu. ProGUI Library V0.56 für PB
Wollte nur mal wissen was erfahrene programmierer davon halten.
Ich programmiere noch nicht sehr lange commerziel.
D.h. ich bin mir noch etwas unsicher wie soetwas klassisch unter
PB umgesetzt wird.
In C# gibts da ja fast alle vorgefertigt.
Das beispiel auf das TS-soft hingewiesen hat ist auch ganz nett.
Ich finde aber das die ProGui lib was z.B. bei verschieben eines
Gadgets in der Rebar die breite der Combobox und Stringgadgets
angeht etwas professioneller.
Naja, jedenfalls ist das beispiel mit PB doch etwas komplizierter.
Jedenfalls für mich.
Kommt in dem Bsp. die API zum einsatz?
MFG
Ich programmiere noch nicht sehr lange commerziel.
D.h. ich bin mir noch etwas unsicher wie soetwas klassisch unter
PB umgesetzt wird.
In C# gibts da ja fast alle vorgefertigt.
Das beispiel auf das TS-soft hingewiesen hat ist auch ganz nett.
Ich finde aber das die ProGui lib was z.B. bei verschieben eines
Gadgets in der Rebar die breite der Combobox und Stringgadgets
angeht etwas professioneller.
Naja, jedenfalls ist das beispiel mit PB doch etwas komplizierter.
Jedenfalls für mich.
Kommt in dem Bsp. die API zum einsatz?
MFG
achso. Hätt ich fast vergessen.
Der entwickler dieser lib entwickelt das teil
jedenfalls noch weiter.
Geplant sind Menues im Office stil usw.
Von ihm sind in absehbarer zeite weitere libs zu erwarten.
Sehr netter kontakt.
Ich denke mit diesem Herrn könnte sich pureare usw. durchaus
arrangieren.
Was denkt Ihr darüber?
Der entwickler dieser lib entwickelt das teil
jedenfalls noch weiter.
Geplant sind Menues im Office stil usw.
Von ihm sind in absehbarer zeite weitere libs zu erwarten.
Sehr netter kontakt.
Ich denke mit diesem Herrn könnte sich pureare usw. durchaus
arrangieren.
Was denkt Ihr darüber?
Geil![img]C:\Dokumente%20und%20Einstellungen\anonym\Desktop\ProProGui.jpg[/img]


(Tipp: www.imageshack.us )
Also ich werde mir diese Lib auf jeden Fall kaufen, wenn es den OfficeXP|Office 2003|Whidbey style unterstützt.
Geht nicht, aber vielleicht insperiert es ja
Meine ersten Gedanken zu der ToolBar-Problematik.
Nächster Ansatz:
Hier noch eine Methode für die individuelle Menü-Anordnung:
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.
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
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)

Hoffe, es nützt jemandem was.

Kinder an die Macht http://scratch.mit.edu/
Burner
Code: Alles auswählen
EnableExplicit
Enumeration
#MainWin
EndEnumeration
Define Event.l
Define EventType.l
Define GadgetNr.l
Define MausA.POINT
Define MausE.POINT
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
Until Event=#PB_Event_CloseWindow
CreatePreferences("FLFenster4.ini")
WritePreferenceLong("WINDOW_XPOS_MAIN",WindowX(#MainWin))
WritePreferenceLong("WINDOW_YPOS_MAIN",WindowY(#MainWin))
ClosePreferences()
CloseWindow(#MainWin)
Nur mit PB-Befehlen. Und wenn erstmal PB 4.1 mit Drag'n'Drop da ist


Kinder an die Macht http://scratch.mit.edu/
hier ist auch ne anständige Toolbar-Lösung oder sowas in der Art
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Alter Komiker 
Hatte mich fast schon gefreut, dass es da eine vernünftfge LIB zu gibt.
Kann doch nicht so schwer sein, zu mindest für die Hardcore-Programmierer.
Das gibt es im Office doch schon seit 2000 oder so.
Und jedes einiger maßen vernünftige Programm bietet heute sowas auch.
Naja, oder man konfiguriert seine Menüs in einem ListViewGadget()
je nach dem in welcher Reihenfolge sie dort drin stehen, setzt man sie dann auch in das Menü.


Hatte mich fast schon gefreut, dass es da eine vernünftfge LIB zu gibt.
Kann doch nicht so schwer sein, zu mindest für die Hardcore-Programmierer.
Das gibt es im Office doch schon seit 2000 oder so.
Und jedes einiger maßen vernünftige Programm bietet heute sowas auch.
Naja, oder man konfiguriert seine Menüs in einem ListViewGadget()
je nach dem in welcher Reihenfolge sie dort drin stehen, setzt man sie dann auch in das Menü.

Kinder an die Macht http://scratch.mit.edu/