Seite 1 von 2

Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 28.10.2014 16:55
von derschutzhund
Vermutlich sehe ich den Wald vor lauter Bäumen nicht aber wie kann ich ermitteln wieviele Zeilen im angezeigten Listiconfenster dargestellt werden können?
Das ändert sich ja evtl. mit der Größe des Windows!
Es muss doch eine einfache Lösung mit PB-Mitteln geben oder geht das nur mit API?

LG

Wolfgang

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 28.10.2014 16:56
von RSBasic
Nur mit API. Beispielsweise unter Windows: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 28.10.2014 20:36
von derschutzhund
RSBasic hat geschrieben:Nur mit API. Beispielsweise unter Windows: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Ok, so würde es funktionieren.
Kann man mit PB abfragen ob Scroller rechts aktiviert ist oder nicht?
Man könnte dann so lange neue Elemente in das listicon einfügen bis der scroller aktiviert wird und zieht dann von der Anzahl eins ab.

LG

Wolfgang

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 28.10.2014 23:58
von RSBasic

Code: Alles auswählen

EnableExplicit

Define a

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(1, 0, 0, 500, 360, "Spalte", 400, 0)
  For a=1 To 25;15
    AddGadgetItem(1, -1, "Item " + Str(a), 0, 0)
  Next
  ButtonGadget(2, 10, 370, 200, 20, "Ist vertikale Scrollleiste sichtbar?", 0)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 2
            If GetWindowLongPtr_(GadgetID(1), #GWL_STYLE) & #WS_VSCROLL
              Debug "Ja"
            Else
              Debug "Nein"
            EndIf
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 29.10.2014 00:07
von derschutzhund
Schade, ist ja wieder eine Windowsfunktion! :cry:

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 29.10.2014 23:52
von Vera
Hallo Wolfgang,
ich hab mal gegrübelt und mich gefragt, ob sich die Spaltenweite ändert in Abhängigkeit eines Scrollbalkens. JA!

Hier ein Probier-Beispiel

Code: Alles auswählen

Window_0 = OpenWindow(#PB_Any, 238, 83, 543, 300, "List Width changed by scrollbar", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
If Window_0
  ListIcon_0 = ListIconGadget(#PB_Any, 10, 20, 420, 250, "column 100", 100, #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines | #PB_ListIcon_MultiSelect | #PB_ListIcon_FullRowSelect)
  AddGadgetColumn(ListIcon_0, 1, "right column", 200)
  Button_1 = ButtonGadget(#PB_Any, 445, 20, 80, 25, "clear list")
  Button_2 = ButtonGadget(#PB_Any, 445, 50, 80, 25, "add item")
  Button_3 = ButtonGadget(#PB_Any, 445, 120, 80, 25, "debug width")
  Button_7 = ButtonGadget(#PB_Any, 445, 80, 80, 25, "Delete")
EndIf

Repeat
  Event = WaitWindowEvent(1)
  Select Event

    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType   = EventType()
      If EventGadget = ListIcon_0
      ElseIf EventGadget = Button_1
        ClearGadgetItems(ListIcon_0)

      ElseIf EventGadget = Button_2
        AddGadgetItem(ListIcon_0, -1, Str(Random(99999999)) + Chr(10) + "more... " + Str(Random(99999999)) )

      ElseIf EventGadget = Button_3
        Debug GetGadgetItemAttribute(ListIcon_0, 0, #PB_ListIcon_ColumnWidth, 0 )
        Debug GetGadgetItemAttribute(ListIcon_0, 0, #PB_ListIcon_ColumnWidth, 1)

      ElseIf EventGadget = Button_7
        RemoveGadgetItem(ListIcon_0, 1)

      EndIf

    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = Window_0
        CloseWindow(Window_0)
        Window_0 = 0
        Break
      EndIf

  EndSelect
ForEver
Tip: ein toller crossplattform Code von minimy - List Manager

viel Erfolg ~ Vera

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 30.10.2014 00:09
von derschutzhund
Hallo Vera,

mir ist jetzt nicht ganz klar wie mir das bei meiner Aufgabenstellung helfen kann.
Ich möchte wissen wieviele Zeilen in ein bestehendes listiconfenster passen damit ich nur die aus einer großen Liste mit mehreren hunderttausend Einträgen laden kann und das möglichst mit PB Funktionen.

LG

Wolfgang

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 30.10.2014 00:27
von Vera
Mhh?
Du fragst doch wieviele Einträge in ein gegebenes ListIcon-Feld hineinpassen. Wenn die Menge überschritten wird, dann wird ein Scrollbalken hinzugefügt und die Spaltenbreite ändert sich.

Der Eintrag, der die bestehende Breite verschmälert ist doch der 'Grenzeintrag', den Du suchst, ab dem nicht mehr angezeigt werden soll.

Man könnte doch das ListFeld verborgen füllen lassen, bis sich die Weite ändert und die Einträge-Anzahl -1 dann als maximale Füllmenge festlegen. ... und dementsprechend die anzeigbaren Listeinträge pro Ansicht/Aufruf aus der Gesamtliste aufteilen.

Wenn die ListIcon-Ansichstgröße variabel ist, dann müßen Höhe und Füllmenge eben immer neu ermittelt werden.

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 31.10.2014 01:06
von derschutzhund
Also wenn ein Scrollbalken eingefügt wird ändert sich an den mit debug angezeigten Werten bei mir nichts.

LG

Wolfgang

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Verfasst: 31.10.2014 08:59
von Bisonte
Die Spaltenbreite ändert sich nicht. Nur die Optik ändert sich (ein Scrollbalken) aber der Wert von z.B. 200 ändert sich ja nicht.
Daher sind die Werte immer gleich.

Meines Wissens ist nur die API eine Lösung. Etwas OS-Unabhängiges hab ich leider noch nicht gesehen... evt. die Frage im englischen
Forum posten und vielleicht weiss Shardik Rat (öfters von ihm Windos API für Linux und Mac umgesetzt gesehen (mit deren API))