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

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

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

Beitrag 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
tranquil
Beiträge: 117
Registriert: 22.09.2004 22:07
Kontaktdaten:

Beitrag von tranquil »

Kommt meinem Feature Request im engl. Forum recht nahe:

http://forums.purebasic.com/english/vie ... hp?t=15457
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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!
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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?
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten