Seite 1 von 2

ListView im PanelGadget

Verfasst: 29.04.2015 17:08
von friedelinde
ListView im PanelGadget

Damit ein ListViewGadget die darunter liegenden Gadgets zuverlässig verdeckt, öffne ich das LV auf einem PanelGadget.
Das funktioniert auch gut.

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    ButtonGadget(2, 10, 15, 80, 24,"Button 1")
    ButtonGadget(3, 95, 15, 80, 24,"Button 2")

    ;   das PanelGadget soll beim Aufklappen des ListView die unterhalb liegenden Gadgets verdecken 
    ;   dabei dient das Panel nur dazu, einen deckenden Hintergrund für das Listview zu erhalten
    ;   ansonsten werden die unter dem ListView liegenden Gadgets durch Mausaktivität im ListView angezeigt
    PanelGadget     (9999, 8, 8, 200,100)
    ListViewGadget(10, -1, -1, 200+18,100+2)
    CloseGadgetList()
    
    For i = 0 To 200
      AddGadgetItem(10,-1,"das ist ein versuch "+Str(i))
    Next i

    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
So weit, so gut. Wenn aber das LV aber auf einem PanelGadget angezeigt werden soll, dann werden die auf dem darunter liegenden Panel befindlichen Gadgets sichtber, wenn man mit der Maus in den Bereich diese Gadgets kommt.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    ;   das PanelGadget soll beim Aufklappen des ListView die unterhalb liegenden Gadgets verdecken 
    ;   dabei dient das Panel nur dazu, einen deckenden Hintergrund für das Listview zu erhalten
    ;   ansonsten werden die unter dem ListView liegenden Gadgets durch Mausaktivität im ListView angezeigt
    
	PanelGadget     (9999, 8, 8, 200,100)
		ListViewGadget(10, -1, -1, 200+18,100+2)
    CloseGadgetList()
    
    For i = 0 To 200
      AddGadgetItem(10,-1,"das ist ein versuch "+Str(i))
    Next i
      
    PanelGadget     (0, 8, 8, 200, 100)
      AddGadgetItem (0, -1, "Panel 1")
        ButtonGadget(2, 10, 15, 80, 24,"Button 1")
        ButtonGadget(3, 95, 15, 80, 24,"Button 2")
    CloseGadgetList() 
;   
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
  
Außerdem muß merkwürdigerweise das unterste Panel als letztes deklariert werden, sonst wird das oberste Panel nicht angezeigt.

Sind das systembedingte Eigenschaften, oder mach ich da etwas falsch?
Wer weiß Rat?

Re: ListView im PanelGadget

Verfasst: 29.04.2015 17:12
von RSBasic
Wenn nur bestimmte Gadgets sichtbar sein sollen, dann musst du diese mit HideGadget() anzeigen oder verstecken.
Beispiel: Anfangs versteckst du die Gadgets, die nicht angezeigt werden sollen. Bei einem beliebigen Buttonklick sorgst du dafür, dass die versteckten Gadgets sichtbar gemacht werden und die anderen versteckt werden.

Re: ListView im PanelGadget

Verfasst: 29.04.2015 19:25
von Andesdaf
Allgemein ist das Übereinanderlegen von Gadgets nie eine gute Idee.

Re: ListView im PanelGadget

Verfasst: 29.04.2015 20:02
von friedelinde
Danke für die schnellen Antworten!

Das verstecken der unter dem LV liegenden Gadgets ist zwar eine einfache aber auch sehr unflexible Methode, da das LV - ähnlich wie eine Combobox - je nach Anzahl der Einträge nicht nur unterschiedlich lang sein kann, sondern sich auch in der Länge verändert je nach dem wie viele Einträge in dem LV mit dem Text in dem darüber befindlichen StrgGadget übereinstimmen. Darüberhinaus sind die unter dem LV liegenden Gadgets möglicherweise breiter als das LV, das sich in der Breite ja nach dem EingabeStringGadget richtet. Wenn diese dann durch HideGadget versteckt würden sieht das ziemlich doof aus.

Ich würde gerne auf das zusätzliche PanelGad unter dem LV verzichten, wenn es eine andere Möglichkeit geben würde.

Die Frage ist also: Warum funktioniert die Methode - wie in dem ersten Beispiel dargestellt - in einem "normalen" Fenster, aber nicht mehr in einem PanelGadget, und warum wird das zuletzt deklarierte PanelGad durch das zuerst deklarierte PanelGad verdeckt?

Re: ListView im PanelGadget

Verfasst: 29.04.2015 20:10
von RSBasic
Weil es in PB keine Z-Order gibt. Dein erstes Beispiel würde ebenfalls nicht funktionieren, wenn du beispielsweise die Tab-Taste drückst.
Außerdem ist deine Vorgehensweise nicht optimal. Wenn du eine überlappende Aufklappliste (falls ich dich richtig verstanden haben sollte, dass du sowas machen möchtest) erstellen möchtest, dann erstelle ein zweites rahmenloses Fenster mit dem ListViewGadget(), welches du bei einem Event anzeigst.

Re: ListView im PanelGadget

Verfasst: 29.04.2015 20:31
von Andesdaf
wenn es möglichst simpel sein soll und du nur eine reine Auswahlliste brauchst,
kannst du auch ein PopupMenu öffnen lassen.

Re: ListView im PanelGadget

Verfasst: 29.04.2015 21:07
von friedelinde
Daß man die Reihenfolge der Gadgets nicht bestimmen kann ist schon bedauerlich.

PopupMenue ist schlecht, da man - so glaube ich wenigstens - weder den Ort noch die Länge des Menüs bestimmen kann.

Die Idee mit dem Fenster werde ich aufgreifen, auch wenn das Handling dieser "Aufklappliste" mE. damit deutlich komplizierter werden wird. Nun ja, PureBasic ist zwar sehr schnell aber auch sehr unkomfortabel, eben puristisch.

Re: ListView im PanelGadget

Verfasst: 29.04.2015 21:10
von RSBasic
Naja, PureBasic kann ja nicht alles vorgefertigt bereitstellen, sondern man muss auch was entwickeln (Hauptaufgabe eines Entwicklers). :D

Re: ListView im PanelGadget

Verfasst: 29.04.2015 21:22
von HeX0R
Keiner hat gesagt, dass man die Reihenfolge nicht bestimmen kann, es ging um die Z-Achse.

Überlappende Gadgets machen eigentlich niemals Sinn, ich kenne auch keine einzige Applikation, die so etwas nutzt.
Meistens ist es eher so, dass da ein völlig falscher Ansatz verfolgt wird.

Leider habe ich keine Ahnung, was Du eigentlich vor hast, kann Dir also auch keine Alternative anbieten.

Hört sich aber irgendwie so an, als wäre eine ComboBox hier sinnvoller.

Re: ListView im PanelGadget

Verfasst: 30.04.2015 00:10
von friedelinde
Nun ja, gedacht hatte ich an eine Aufklappliste die mit einem StrGadget verbunden ist. Also an eine Art Combobox (die Combobox ist doch der klassische Fall eine überlappenden Gadgtes) ohne Scrolleiste und Dropdownbutton.

Nebenbei bemerkt, die Combobox überdeckt die unterhalb liegenden Gadgets doch perfekt. Es muss also von Windows her eine Möglichkeit geben auch ein LIV-Gadget sozusagen "blickdicht" zu gestalten.

Übrigens, die ersten Versuche mit einem Fenster für das LIV-Gadget gestalten sich wie erwartet als schwierig unte Anderem zBsp. weil man ständig überprüfen muss, ob das Hauptfenster verschoben worden ist, um dann die Lage des LIV-Fensters dem auch anzupassen.