Suuuper Toolbar / Rebar / Menu. ProGUI Library V0.56 für PB

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
persepole
Beiträge: 36
Registriert: 14.04.2005 22:56

Beitrag von persepole »

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
persepole
Beiträge: 36
Registriert: 14.04.2005 22:56

Beitrag von persepole »

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?
persepole
Beiträge: 36
Registriert: 14.04.2005 22:56

Beitrag von persepole »

Hat vielleicht jemand ne Idee zu der Lib was
noch verbessert oder erweitert werden könnte?

MFG

Persepole

(Hört ihr das singen der Vögel)
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

persepole hat geschrieben:(Hört ihr das singen der Vögel)
Nö, aber gleich singt Kearu das du keine 3-fach Postings erzeugen sollst! :wink:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

[img]C:\Dokumente%20und%20Einstellungen\anonym\Desktop\ProProGui.jpg[/img]
Geil! :lol:
:bounce:

(Tipp: www.imageshack.us )

Also ich werde mir diese Lib auf jeden Fall kaufen, wenn es den OfficeXP|Office 2003|Whidbey style unterstützt.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Geht nicht, aber vielleicht insperiert es ja

Beitrag von Xaby »

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 :allright:

Hoffe, es nützt jemandem was. :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Burner

Beitrag von Xaby »

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)
Menüs verschieben, fast wie die Links im Arbeitsplatz (File/I-Explorer)

Nur mit PB-Befehlen. Und wenn erstmal PB 4.1 mit Drag'n'Drop da ist :o :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

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.
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

bobobo hat geschrieben:hier ist auch ne anständige Toolbar-Lösung oder sowas in der Art
ROFL !!!!
Danke, das war der krönenden Abschluss heute :)
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Alter Komiker :mrgreen:
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ü.

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