Anzahl der angezeigten Listiconzeilen ermitteln

Anfängerfragen zum Programmieren mit PureBasic.
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag 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
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag von RSBasic »

Nur mit API. Beispielsweise unter Windows: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag 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
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag von derschutzhund »

Schade, ist ja wieder eine Windowsfunktion! :cry:
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag 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
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag 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
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag 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.
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag von derschutzhund »

Also wenn ein Scrollbalken eingefügt wird ändert sich an den mit debug angezeigten Werten bei mir nichts.

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Anzahl der angezeigten Listiconzeilen ermitteln

Beitrag 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))
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten