Seite 1 von 1

Ermitteln der ausgewählten Option, Scrollen in Listen-Gadget

Verfasst: 06.03.2018 17:42
von Tanaghra
Hallo,

ich bin bei meinem letzten Programm auf vier Probleme gestoßen, und poste sie jetzt der Einfachheit halber mal zusammen, anstatt drei Themen daraus zu machen. Falls das nicht zulässig sein sollte, bitte ich um eine entsprechende Info.

1. Ich habe im Hauptfenster einen Gruppe von 8 OptionGadgets, bei der erfragt werden soll, welche der 8 Optionen ausgewählt ist. Gibt es einen eleganteren Weg, die aktivierte Option zu ermitteln, als über eine If-Kaskade wie

Code: Alles auswählen

If GetGadgetState(#Op_1)=1
  …
ElseIf GetGadgetState(#Op_2)=1
  …
.
.
.
ElseIf GetGadgetState(#Op_7)=1
  …
Else
  …
EndIf
2. Wenn ein ListIcon-Gadget mehr Einträge enthält, als gleichzeitig angezeigt werden können, verpaßt PureBasic dem Gadget automatisch einen vertikalen Scrollbalken. Mein Problem: Fügt man mit AddGadgetItem(#Gadget, -1, …) der Liste einen weiteren Eintrag am Ende der Liste hinzu, so kann man ihn nicht sehen, d.h. das Programm scrollt nicht von selbst nach unten, um den unten angefügten Eintrag sichtbar zu machen. Daran ändert sich auch dann nichts, wenn man das ListIcon-Gadget zum aktiven Gadget macht und den unten hinzugefügten Eintrag mittels

Code: Alles auswählen

SetGadgetItemState(#Gadget, CountGadgetItems(#Gadget)-1, #PB_ListIcon_Selected)
selektiert. Wie bringt man PureBasic dazu, die Liste nach unten zu scrollen, damit der letzte Eintrag sichtbar wird?

3. Wie stellt man fest, ob ein Gadget deaktiviert (disabled) ist? Weder der GetGadgetState() noch der DisableGadget() scheinen hier weiterzuhelfen. In meinem Fall muß erfragt werden, ob ein TextGadget deaktiviert ist.

4. Gibt es eine Möglichkeit, den Standardzeichensatz für ein gesamtes Fenster festzulegen, so daß man nicht unter jeden Gadget-Befehl SetGadgetFont(…) schreiben muß?

Vielen Dank

Re: Ermitteln der ausgewählten Option, Scrollen in Listen-Ga

Verfasst: 06.03.2018 17:54
von RSBasic
Tanaghra hat geschrieben:1. Ich habe im Hauptfenster einen Gruppe von 8 OptionGadgets, bei der erfragt werden soll, welche der 8 Optionen ausgewählt ist. Gibt es einen eleganteren Weg, die aktivierte Option zu ermitteln, als über eine If-Kaskade wie
Entweder so:

Code: Alles auswählen

EnableExplicit

Define Gadget

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  OptionGadget(1, 10, 10, 200, 20, "Option 1")
  OptionGadget(2, 10, 30, 200, 20, "Option 2")
  OptionGadget(3, 10, 50, 200, 20, "Option 3")
  OptionGadget(4, 10, 70, 200, 20, "Option 4")
  OptionGadget(5, 10, 90, 200, 20, "Option 5")
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Gadget = EventGadget()
        Select Gadget
          Case 1, 2, 3, 4, 5
            Debug Gadget
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Oder:

Code: Alles auswählen

EnableExplicit

Procedure OptionGadgetEvent()
  Debug EventGadget()
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  OptionGadget(1, 10, 10, 200, 20, "Option 1")
  OptionGadget(2, 10, 30, 200, 20, "Option 2")
  OptionGadget(3, 10, 50, 200, 20, "Option 3")
  OptionGadget(4, 10, 70, 200, 20, "Option 4")
  OptionGadget(5, 10, 90, 200, 20, "Option 5")
  
  BindGadgetEvent(1, @OptionGadgetEvent())
  BindGadgetEvent(2, @OptionGadgetEvent())
  BindGadgetEvent(3, @OptionGadgetEvent())
  BindGadgetEvent(4, @OptionGadgetEvent())
  BindGadgetEvent(5, @OptionGadgetEvent())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Tanaghra hat geschrieben:2. Wenn ein ListIcon-Gadget mehr Einträge enthält, als gleichzeitig angezeigt werden können, verpaßt PureBasic dem Gadget automatisch einen vertikalen Scrollbalken. Mein Problem: Fügt man mit AddGadgetItem(#Gadget, -1, …) der Liste einen weiteren Eintrag am Ende der Liste hinzu, so kann man ihn nicht sehen, d.h. das Programm scrollt nicht von selbst nach unten, um den unten angefügten Eintrag sichtbar zu machen. Daran ändert sich auch dann nichts, wenn man das ListIcon-Gadget zum aktiven Gadget macht und den unten hinzugefügten Eintrag mittels
http://www.rsbasic.de/aktualisierung/wi ... oscroll.pb

Tanaghra hat geschrieben:3. Wie stellt man fest, ob ein Gadget deaktiviert (disabled) ist? Weder der GetGadgetState() noch der DisableGadget() scheinen hier weiterzuhelfen. In meinem Fall muß erfragt werden, ob ein TextGadget deaktiviert ist.
Entweder mit einer eigenen Variable, die du separat auf #True oder #False setzt, was nicht die schönere Lösung ist, oder du machst es mit WinAPI:

Code: Alles auswählen

If IsWindowEnabled_(GadgetID(#DeineGadgetnummerHierEingeben))=1
    MessageRequester("","Gadget ist aktiviert.",0)
  Else
    MessageRequester("","Gadget ist deaktiviert.",0)
  EndIf
Tanaghra hat geschrieben:4. Gibt es eine Möglichkeit, den Standardzeichensatz für ein gesamtes Fenster festzulegen, so daß man nicht unter jeden Gadget-Befehl SetGadgetFont(…) schreiben muß?
Ja:
PB-Hilfe hat geschrieben:SetGadgetFont(#Gadget, FontID): Das zu verwendende Gadget. Wenn dieser Parameter auf #PB_Default gesetzt wird, dann wird der Zeichensatz für alle neu erzeugten Gadgets geändert.

Re: Ermitteln der ausgewählten Option, Scrollen in Listen-Ga

Verfasst: 06.03.2018 22:50
von mk-soft
So kommt nur eine Änderung.

Code: Alles auswählen

EnableExplicit

Define Gadget
Define Option

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  OptionGadget(11, 10, 10, 200, 20, "Option 1")
  OptionGadget(12, 10, 30, 200, 20, "Option 2")
  OptionGadget(13, 10, 50, 200, 20, "Option 3")
  OptionGadget(14, 10, 70, 200, 20, "Option 4")
  OptionGadget(15, 10, 90, 200, 20, "Option 5")
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Gadget = EventGadget()
        Select Gadget
          Case 11 To 15
            If Option <> (Gadget - 10)
              Option = Gadget -10
              Debug Option
            EndIf
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf

Re: Ermitteln der ausgewählten Option, Scrollen in Listen-Ga

Verfasst: 07.03.2018 05:32
von Tanaghra
RSBasic und mk-Soft – vielen Dank für Eure Hilfe. Auf sowas wie die API-Funktionen für das Scrollen und die Disabled-Abfrage kommt man als Anfänger natürlich nicht. Auch den Wink "lies doch einfach mehr in der Hilfe" habe ich verstanden.