ListView im PanelGadget

Anfängerfragen zum Programmieren mit PureBasic.
friedelinde
Beiträge: 12
Registriert: 15.02.2010 16:46

ListView im PanelGadget

Beitrag 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?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ListView im PanelGadget

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: ListView im PanelGadget

Beitrag von Andesdaf »

Allgemein ist das Übereinanderlegen von Gadgets nie eine gute Idee.
Win11 x64 | PB 6.20
friedelinde
Beiträge: 12
Registriert: 15.02.2010 16:46

Re: ListView im PanelGadget

Beitrag 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?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ListView im PanelGadget

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: ListView im PanelGadget

Beitrag von Andesdaf »

wenn es möglichst simpel sein soll und du nur eine reine Auswahlliste brauchst,
kannst du auch ein PopupMenu öffnen lassen.
Win11 x64 | PB 6.20
friedelinde
Beiträge: 12
Registriert: 15.02.2010 16:46

Re: ListView im PanelGadget

Beitrag 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.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ListView im PanelGadget

Beitrag von RSBasic »

Naja, PureBasic kann ja nicht alles vorgefertigt bereitstellen, sondern man muss auch was entwickeln (Hauptaufgabe eines Entwicklers). :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: ListView im PanelGadget

Beitrag 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.
friedelinde
Beiträge: 12
Registriert: 15.02.2010 16:46

Re: ListView im PanelGadget

Beitrag 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.
Antworten