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

Anfängerfragen zum Programmieren mit PureBasic.
Tanaghra
Beiträge: 28
Registriert: 13.05.2017 01:44

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

Beitrag 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
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

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

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

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

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Tanaghra
Beiträge: 28
Registriert: 13.05.2017 01:44

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

Beitrag 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.
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
Antworten