Seite 1 von 1

GroupBoxGadget (bekannt aus z.b. Delphi die GroupBox)

Verfasst: 29.05.2005 22:40
von nicolaus
habe hier mal als "abfallprodukt" aus nem project von mir nen beispiel für ne GroupBox. Die leute die mit Delphi arbeiten kennen die ja eigentlich.

Was ist eine GroupBox?
- eine GroupBox ist ein aus PB als Frame3DGadget() bekanntes element das jedoch nicht nur zur verschönerung gedacht ist.
alles was sich innerhalb dieses Frame3DGadget´s befindet hat als parent das Frame3DGadget und man kann z.b. alle steuerelemente einer GroupBox mit einmal disablen oder Enablen.

so hier nun der code:

Code: Alles auswählen

Structure GROUPBOX
  Parent.l
  gadget.l
EndStructure

NewList GroupGadgets.GROUPBOX()

Procedure GroupBoxGadget(gadget.l,x.l,y.l,width.l,height.l,Text.s)
  ContainerGadget(gadget,x,y,width,height)
  Frame3DGadget(#PB_Any,0,0,width,height,Text)
  CloseGadgetList()
EndProcedure
Procedure DisableGroupBox(GroupBox,stat)
  FirstElement(GroupGadgets())
  For I = 0 To CountList(GroupGadgets())
    SelectElement(GroupGadgets(),I)
    If GroupBox = GroupGadgets()\Parent 
      DisableGadget(GroupGadgets()\gadget,stat)
    EndIf
  Next
  LastElement(GroupGadgets())
EndProcedure
Procedure AddGroupBoxItem(GroupBox,gadget)
  AddElement(GroupGadgets())
  GroupGadgets()\Parent = GroupBox
  GroupGadgets()\gadget = gadget
EndProcedure

OpenWindow(0,0,0,500,500,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"GroupBoxTest")
CreateGadgetList(WindowID())
Frame3DGadget(0,0,0,240,490,"Normal")
ButtonGadget(1,10,20,150,20,"Disable GrouBox")
ButtonGadget(5,10,50,150,20,"Enable GroupBox")
GroupBoxGadget(2,250,50,240,440,"GroupBoxTest")
OpenGadgetList(2)
ButtonGadget(3,5,20,150,20,"in groupbox 1")
AddGroupBoxItem(2,3)
ButtonGadget(4,5,50,150,20,"in groupbox 2")
AddGroupBoxItem(2,4)
TextGadget(6,5,80,150,20,"in groupbox")
AddGroupBoxItem(2,6)
StringGadget(7,5,110,150,20,"in groupbox")
AddGroupBoxItem(2,7)
CloseGadgetList()

Repeat
  
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    GadgetID = EventGadgetID()
    If GadgetID = 1
      DisableGroupBox(2,1)
    EndIf
    If GadgetID = 5
      DisableGroupBox(2,0)
    EndIf
  EndIf 
  
Until Event = #PB_Event_CloseWindow
  
gruß nico

Verfasst: 06.06.2005 12:26
von tranquil
Kommt meinem Feature Request im engl. Forum recht nahe:

http://forums.purebasic.com/english/vie ... hp?t=15457

Verfasst: 06.06.2005 16:03
von nicolaus
hatte ich noch garnich gelesen. habe hier in der GroupBox aber noch nen fehler entdeckt und werd das noch mal neu machen per api. so kann man dann ja auch ne lib draus machen.
ein prob ist z.b. das wenn ich die von mir gemacht Groupbox in ein Containergadget lege dann verschwindet das Fram3DGadget() und auch resize mit nem Splittergadget geht in dem obigen beispiel nich. wie gesagt werds mal neu schrieben und hier posten

Ich bin eigentlich der meinung das das in PB fehlt und unbedingt mit aufgenommen werden sollte den ich benutze die GroupBox auch in delphi sehr oft und is echt ne feine sache!

Verfasst: 06.06.2005 16:16
von Ynnus
Es gibt doch auch die WinAPI Fenster-Klasse BUTTON welche als Style BS_GROUPBOX annehmen kann. Ist das denn das gleiche, was du da auch zu Erstellen versuchst?

Verfasst: 06.06.2005 16:25
von nicolaus
nee das is nich das gleiche. ne GroupBox is wie ein container der auch gleich noch ein Frame3D hat und alle darin liegenden gadgets kannst du mit nur einem befehlsaufruf z.b. disablen oder enablen u.s.w. das heist du mußt die aufrufe nicht für alle gadgets in dem container einzeln machen.

Verfasst: 06.06.2005 17:20
von Ynnus
Na dann ist das doch nichts anderes als eine Groupbox (die WinAPI-Groupbox) wobei dann alle darinliegenden Buttons und Controls als Childwindows von diesem Fenster angegeben werden müssen. Dann kann man auch durch enable oder disable des Parent-Window's alle Childs darin beeinflussen.

Verfasst: 08.06.2005 05:00
von Danilo
Sunny hat geschrieben:Es gibt doch auch die WinAPI Fenster-Klasse BUTTON welche als Style BS_GROUPBOX annehmen kann.
Das *ist* ein Frame3DGadget().

Code: Alles auswählen

OpenWindow(0,200,200,200,200,#PB_Window_SystemMenu,"GroupBox")
  CreateGadgetList(WindowID())
  ButtonGadget( 0,10, 10,180,85,"Button",#BS_GROUPBOX)
  Frame3DGadget(1,10,105,180,85,"Frame3D")

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Sunny hat geschrieben:Ist das denn das gleiche, was du da auch zu Erstellen versuchst?
Das Frame3DGadget nützt ihm alleine nichts.