Seite 1 von 1

Schönheitsfehler: ComboBox unter Linux

Verfasst: 13.05.2021 23:54
von Plenz
Wenn die ComboBox so viele Einträge hat, dass nicht sämtliche Einträge angezeigt werden können, dann wird die Liste mit den Einträgen nach dem Ausklappen nach oben verschoben, um den Platz besser auszunutzen. Das ist ja eigentlich völlig OK, aber weil die Liste sich dabei über die ComboBox schiebt, geraten die Einträge zwangsläufig unter den Mauszeiger, und schon wird ein anderer Eintrag aktiviert als der ursprünglich vorgewählte Eintrag.

Also angenommen, die ComboBox hat nur 10 Einträge und der 5. Eintrag ist vorgewählt. Wenn man auf den Pfeil klickt, klappt die Liste UNTERHALB der ComboBox auf, und der 5. Eintrag ist "gehighlightet".

Angenommen, die ComboBox hat 70 Einträge und der 30. Eintrag ist vorgewählt. Wenn man auf den Pfeil klickt, klappt die Liste auf, und weil sie so lang ist, wird nur ein Teil der Liste dargestellt, und das obere Ende davon wird so hoch platziert, dass die ComboBox von der Liste bedeckt ist und der Cursor dadurch zwangsläufig einen der obersten Einträge "highlightet". Wenn man jetzt z.B. den 31. Eintrag auswählen möchte, muss man erst wieder entsprechend weit runterscrollen.

Ich hoffe, ich habe mich verständlich ausgedrückt, anderenfalls müsste ich irgendwo einen Screenshot hochladen.

Unter Windows tritt dies nicht auf, da werden auch lange Listen je nach Platz verkleinert und korrekt über oder unter der ComboBox dargestellt, ohne sie zu überdecken.

Ein weiterer Schönheitsfehler, der nur unter Linux (Mint 19.3) auftritt: die Einträge der ausgeklappten Liste haben unnötig größe Zwischenräume.

Re: Schönheitsfehler: ComboBox unter Linux

Verfasst: 14.05.2021 10:11
von Waldixxl
Hallo Plenz
Kann das von dir beschrieben Verhalten nicht nachvollziehen. Ich verwende Ubuntu Mate
das Beisiel aus der Hilfe öffnet immer den voreingestellten Eintrag.

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ComboBoxGadget(2, 10, 70, 250, 21)
      For a = 0 To 100
        AddGadgetItem(2, -1,"ComboBox item " + Str(a))
      Next
    
	SetGadgetState(2, 49)
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
  
Sollt das nicht so gehen liegt das Problem an Mint 19.3
Walter

Re: Schönheitsfehler: ComboBox unter Linux

Verfasst: 15.05.2021 00:59
von Plenz
liegt das Problem an Mint 19.3
Zugegeben, ich weiß nicht viel über Linux, aber es würde mich sehr wundern, wenn Sachen wie die Darstellung einer Combobox bei jeder Distribution neu programmiert werden müsste.

Re: Schönheitsfehler: ComboBox unter Linux

Verfasst: 15.05.2021 08:57
von Waldixxl
mich auch?
was hat der Test mit meinem Code ergeben??
Walter

Re: Schönheitsfehler: ComboBox unter Linux

Verfasst: 15.05.2021 11:53
von mk-soft
Bei Ubuntu, das eigentlich auch die Basic von Mint ist, tritt diese nicht auf.
Auch bei einer sehr langen liste, ist das vorgewählte Item aktiv.

Nicht vergessen auch den EventType() beim Gadget Event abzufragen.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(2, 10, 70, 250, 21)
  For a = 0 To 50
    AddGadgetItem(2, -1,"ComboBox item " + Str(a))
  Next
  
  SetGadgetState(2, 25)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 2
            Select EventType()
              Case #PB_EventType_Change
                Debug "Change: " + GetGadgetState(2)
                
              Case #PB_EventType_Focus
                Debug "Focus"
                
              Case #PB_EventType_LostFocus
                Debug "LostFocus"
                
            EndSelect
            
        EndSelect
        
    EndSelect
    
  ForEver
  
EndIf
P.S.
Habe es mal mit Mint 19 (Cinnamon v3.8.9) getestet. Auch hier ist das aktive Item selektiert.
Muss also wo anders dran liegen.

Re: Schönheitsfehler: ComboBox unter Linux

Verfasst: 16.05.2021 16:06
von Plenz
Ich verstehe es nicht. Dein Beispiel funktioniert einwandfrei.

Auf die Repeat-Schleife kommt es gar nicht an, die kann ich komplett leer machen, es ändert nichts.

Versuche bitte mal meinen Code:

Code: Alles auswählen

If OpenWindow(0, 100, 100, 1010, 590, "Thumbnails", #PB_Window_SystemMenu)
  l = 5 : w = 100
  ButtonGadget(1, l, 5, w, 35, "Hintergrund")
  l = l + w + 5
  ButtonGadget(3, l, 5, w, 35, "neuer Text")
  l = l + w + 5 : w = 230
  StringGadget(4, l, 6, w, 34, "")
  l = l + w + 5 : w = 85
  ButtonGadget(5, l, 5, w, 35, "Textfarbe")
  l = l + w + 5 : w = 95
  ComboBoxGadget(6, l, 6, w, 34, #PB_ComboBox_Editable)
  For i = 0 To 90
    AddGadgetItem(6, -1, Str(i) + " Px")
  Next
  SetGadgetState(6, 30) 
  l = l + w + 5 : w = 75
  CheckBoxGadget(7, l, 2, w, 15, "Fett")
  CheckBoxGadget(8, l, 22, w, 15, "2. Zeile")
  l = l + w + 5 : w = 85
  ButtonGadget(9, l, 5, w, 35, "ordnen")
  w = 95 : l = 1010 - w - 105
  ButtonGadget(10, l, 5, w, 35, "alles neu")
  w = 95 : l = 1010 - w - 5
  ButtonGadget(13, l, 5, w, 35, "Speichern")
  CanvasGadget(12, 5, 45, 960, 540, #PB_Canvas_Border)
  TrackBarGadget(11, 970, 45, 30, 540, 0, 20, #PB_TrackBar_Vertical | #PB_TrackBar_Ticks)
       
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
EndIf
End
Bevor du auf die ComboBox klickst, schiebe das Fenster so weit nach unten, dass sein unterer Rand gerade noch sichtbar ist. Sollte das Phänomen nicht auftreten, verschiebe das Fenster mal eine halbe Zeile nach oben.
Bild

Re: Schönheitsfehler: ComboBox unter Linux

Verfasst: 16.05.2021 19:08
von mk-soft
Ist ne Macke mit dem Flag "#PB_ComboBox_Editable". Da funktioniert wohl die Auswahlbox etwas andern ...
Ne Lösung habe ich zur Zeit nicht. (Ausser das Flag "#PB_ComboBox_Editable" weg zu lassen)


Kleiner tipp noch.
GTK3 Erstellt die ButtonGadget größer als den angegebenen Wert, wenn der Text nicht rein Passt.
Daher sind manchmal die Gadget überlappend.

Re: Schönheitsfehler: ComboBox unter Linux

Verfasst: 18.05.2021 00:16
von Plenz
Also, ich sehe nicht, dass sich etwas ändert, wenn ich den Flag "#PB_ComboBox_Editable" weglasse.

Aber so wichtig ist das nicht, deshalb habe ich ja "Schönheitsfehler" geschrieben und nicht "Bug".

Die Lösung ist für mich, die Anzahl der Einträge zu reduzieren. Die Auswahl soll die Fontgröße für Texte festlegen, da kann man zwischen den größeren Zahlen ruhig ein paar Werte weglassen. Auf diese Weise komme ich jetzt auf ca. 20 Einträge, und dabei tritt dieses Phänomen nicht auf.