Ich habe hier ein LIG mit vielen (variable Anzahl) Spalten..
-> Wie kann ich am einfachsten ermitteln, welche Spalten gerade (wenn auch nur zum Teil) sichtbar sind?
Schöne Grüße
PS: Betriebssystem ausschließlich Windows - d.h. API erlaubt..
Code: Alles auswählen
EnableExplicit
Define EventID
Define a
Define b
Define r.RECT
Define header
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(0, 10, 10,480,250, "Column 1", 100,#PB_ListIcon_GridLines)
For a = 1 To 25
AddGadgetColumn(0,a, "Column " + Str(a+1), Random(100)+50)
Next
For b = 0 To 6
AddGadgetItem(0, -1, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
Next
header = SendMessage_(GadgetID(0), #LVM_GETHEADER, 0, 0)
Repeat
GetWindowRect_(header, @r)
Debug "r\left: "+Str(r\left)+" | r\right: "+Str(r\right)
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIfCode: Alles auswählen
Case #WM_NOTIFY
*WmNotify=lParam
....
Select *WmNotify\code
....
Case #CDDS_ITEMPREPAINT
....
GetColFromCoord(ListIconGadget, *pnmcd, @CellInfo)
Code: Alles auswählen
Protected I.LVHITTESTINFO
....
I\pt\x = *pnmcd\rc\left - GetScrollPos_(GadgetID(Gadget), #SB_HORZ)
I\pt\y = *pnmcd\rc\top
....
SendMessage_(GadgetID(Gadget), #LVM_SUBITEMHITTEST, 0, @I)
....
Code: Alles auswählen
For column = 0 To GetColumnCount(Gadget) - 1
If *pnmcd\rc\left <= x_offset : Break : EndIf
x_offset + GetColumnWidth(Gadget, column)
Next
*Data\Column = column