Einfaches umschalten zwischen diversen Gadget Listen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
double7
Beiträge: 55
Registriert: 20.09.2004 00:40
Kontaktdaten:

Einfaches umschalten zwischen diversen Gadget Listen

Beitrag von double7 »

Hi,

ich hab mal ne ganz dumme Frage, aber nicht lachen :oops:

Über ein Menü möchte ich diverse Gadgets im Fenster anzeigen lassen.

Gibt es eine Möglichkeit zwischen zuvor erstellten Gadget Listen hin und her zu schalten ?

z.B. wenn man den Menüpunkt Preferences auswählt, sollen alle Preferences Gadgets
angezeigt werden und wenn man den Menüpunkt Logs auswählt sollen diese verschwinden
und die entsprechenden neuen Gadgets angezeigt werden.

Muss ich die Gadgets jedesmal löschen und neu erstellen, oder gibt es einen
kompfortableren Trick ?

Gruß, d7
[0d1n6 15 n07 @ j0b 17´5 |1f357y|3
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Naja, ich denke du meinst, man drückt Button A (B,C..) und alle A (B,C...) Gadgets sollen angezeigt werden.

Das macht man allerdings nicht über mehrere Gadgetlisten, sondern über ein PanelGadget oder Container Gadget. Steht in der Hilfe alles sehr gut erklärt, am besten auch noch mal die Befehle:

CreateGadgetList() und UseGadgetList()

anschauen, dann sollte der Unterschied deutlich werden.

Kann sein, dass es mit mehreren Gadget Listen geht (noch nie probiert) aber sauberer und übersichtlicher wärs aufjedenfall mit den oben genannten.


Die Idee mit dem Gadgets "überspeichern" ist nicht gut, da wäre eher HideGadget() zu empfehlen ;)
Benutzeravatar
double7
Beiträge: 55
Registriert: 20.09.2004 00:40
Kontaktdaten:

Beitrag von double7 »

CreateGadgetlist(), UseGadgetlist etc ist klar /:->

PanelGadgets gehen zwar in die Richtung, nur ich will die Reiter nicht ^^

Kann ich die Container während der Laufzeit verschieben und unsichtbar machen ? Händeln die sich wie normale Gadgets ?

Hmm oder muss ich mir doch wohl eigene Funktionen machen ?

Zusatzfrage:
Ist es nicht Speicher freundlicher, wenn ich die Gadgets destroye? Sonst sind ja immer alle mit Ihren Funktionen und Werten im Speicher?

PS: Linux OS
[0d1n6 15 n07 @ j0b 17´5 |1f357y|3
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

double7 hat geschrieben:CreateGadgetlist(), UseGadgetlist etc ist klar /:->
irgendwie habe ich bei diesem Smiley immer das Gefühl, als ob man sich
für die profane Antwort entschuldigen müsste...
double7 hat geschrieben:Kann ich die Container während der Laufzeit verschieben und unsichtbar machen ? Händeln die sich wie normale Gadgets ?
ja und ja
double7 hat geschrieben:Zusatzfrage:
Ist es nicht Speicher freundlicher, wenn ich die Gadgets destroye? Sonst sind ja immer alle mit Ihren Funktionen und Werten im Speicher?
es mag speicherfreundlicher sein (ungetestet), aber vom
Programmieraufwand würde ich persönlich nicht benötigtes einfach
ausblenden. Halte ich auch für weniger (programmier-)fehleranfällig.

Wenn Du so viele Gadgets hast, kannst Du vielleicht alternativ auch
darüber nachdenken, diese (sofern sinnvoll) auf andere Fenster zu
verteilen.

Grüße ... Kiffi
a²+b²=mc²
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

Wenn du es aus irgendeinem Grund in deinem Programm nicht mit Panels lösen kannst oder willst, dann kannst du auch eine eigene Funktion dafür benutzen. Hier mal ein kleines Beispiel wie sowas aussehen könnte:

Code: Alles auswählen

EnableExplicit

#app = "Gadgets gruppieren"

#width = 300
#height = 350

Define event.l
Global i.l
Global cntA.l = 0
Global cntB.l = 0

#unchecked = 0
#checked = 1

#show = 0
#hide = 1

Enumeration 1 ;0 bleibt frei
  #chkA
  #chkB
  #text1
  #text2
  #text3
  #text4
  #text5
  #text6
  #text7
  #text8
  #text9
  #text10
  #text11
  #text12
  #maxAnzahl ;Dieser Eintrag muss in dieser Enumeration IMMER als letztes stehen!
EndEnumeration

;Arrays für die Gruppen
Global Dim gadgetsA.l(#maxAnzahl)
Global Dim gadgetsB.l(#maxAnzahl)

Procedure switchGadgets()
  If GetGadgetState(#chkA) = #checked
    For i = 0 To cntA
      If IsGadget(gadgetsA(i)) <> 0
        HideGadget(gadgetsA(i),#show)
      EndIf
    Next
  Else
    For i = 0 To cntA
      If IsGadget(gadgetsA(i)) <> 0
        HideGadget(gadgetsA(i),#hide)
      EndIf
    Next
  EndIf
  If GetGadgetState(#chkB) = #checked
    For i = 0 To cntB
      If IsGadget(gadgetsB(i)) <> 0
        HideGadget(gadgetsB(i),#show)
      EndIf
    Next
  Else
    For i = 0 To cntB
      If IsGadget(gadgetsB(i)) <> 0
        HideGadget(gadgetsB(i),#hide)
      EndIf
    Next
  EndIf
EndProcedure

OpenWindow(0, 0, 0, #width, #height, #app, #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)

CreateGadgetList(WindowID(0))

;Gadgets zum Umschalten der Gruppen
CheckBoxGadget(#chkA, 5, 5, 40, 20, "A") : SetGadgetState(#chkA,#checked)
CheckBoxGadget(#chkB, 5, 25, 40, 20, "B") : SetGadgetState(#chkB,#checked)

;Initialisieren
For i = 0 To #maxAnzahl
  gadgetsA(i) = 0
  gadgetsB(i) = 0
Next

;Restliche Gadgets automatisch erzeugen und einer Gruppe zuordnen
For i = #text1 To #text10
  TextGadget(i, 50, 20*i, 20, 20, Str(i-2))
  If i <= #text5
    gadgetsA(cntA) = i
    cntA + 1
  Else
    gadgetsB(cntB) = i
    cntB + 1
  EndIf
Next

;Gadgets per Hand einer Gruppe zuordnen
TextGadget(#text11,100,10,20,20,"11")
TextGadget(#text12,100,30,20,20,"12")
gadgetsA(cntA) = #text11 : cntA + 1
gadgetsB(cntB) = #text12 : cntB + 1

Repeat
  event = WaitWindowEvent()

  Select event
    Case #PB_Event_Gadget
      switchGadgets()
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

End
Benutzeravatar
double7
Beiträge: 55
Registriert: 20.09.2004 00:40
Kontaktdaten:

Beitrag von double7 »

Danke für eure Hilfe, so etwas in der Art stellte ich mir vor. :allright:

@Kiffi und gnase -> das smily war nicht böse gemeint :)
[0d1n6 15 n07 @ j0b 17´5 |1f357y|3
Antworten