(EDIT) 2 Listicons zusammenführen [kosmetische Frage offen]
Verfasst: 14.11.2008 12:55


http://www.purebasic.fr/german/viewtopi ... t=listicon
Wäre wohl sinnvoll wenn ihn mal einer der MODs verschieben würde
(sonst fehlt hier irgendwie der Zusammenhang)
Habe mich für die Variante mit den 2 Listicons entschieden.
War nicht so aufwendig wie ich anfangs dachte (s. Code)
Allerdings hat die Sache noch ein (eher kosmetisches) Problem:
Beim vertl. Scrollvorgang laufen die Zeilen (je nach Scrollrichtung) um +1 / -1 auseinander. Nach loslassen der Maus sind die Zeilen dann wieder in sysnc.
Die verwendete (old)CallBack Procedure habe ich aus einem anderen Thread "abgezogen" (mit einer "nromalen" CallBack Procedure hat`s nicht funktioniert).
Ich muß aber gestehen, dass ich nicht so genau verstehe was da mit SetWindowLong_ "abgeht".
Falls jemand eine Idee hat, wie man die Zeilen während des Scrollvorgangs "in sysnc" hält, wäre es schön
Code: Alles auswählen
; 2 Listicons "in Sync halten"
; Verwendte User LIBs
; PureLVSORT (von Gnozal)
Enumeration
#Window_0
#ListIcon_1
#ListIcon_0
EndEnumeration
Global oldCallback
; ######## Gadgets erzeugen und mit Daten befüllen ###################
If OpenWindow(#Window_0, 162, 29, 958, 700, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ListIconGadget(#ListIcon_0, 25, 45, 175, 580, "Spalte1", 150, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
ListIconGadget(#ListIcon_1, 200, 45, 725, 595, "Spalte2", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
EndIf
For i=2 To 10
AddGadgetColumn(#ListIcon_1, i, "Spalte"+Str(i+1), 100)
Next
counter=1
While counter <100
AddGadgetItem(#ListIcon_0, -1, "Konto"+Str(counter))
AddGadgetItem(#ListIcon_1, -1, "Wert"+Str(counter))
For i=0 To 9
SetGadgetItemText(#ListIcon_1, counter-1, "Zeile "+ Str(counter) + " / Spalte "+Str(i+2), i)
Next
counter=counter+1
Wend
EndIf
Procedure WindowCallback(hWnd,Msg,wParam,lParam)
If IsGadget(#ListIcon_0)
ShowScrollBar_(GadgetID(#ListIcon_0),#SB_VERT,#False)
EndIf
Select Msg
Case #WM_VSCROLL
TopIndex = SendMessage_(GadgetID(#ListIcon_1), #LVM_GETTOPINDEX,0,0)
PureLVSORT_ScrollToRow(#ListIcon_0, TopIndex)
Case #WM_MOUSEWHEEL
; to be.... coded
EndSelect
ProcedureReturn CallWindowProc_(oldCallback, hWnd, Msg, wParam, lParam)
EndProcedure
oldCallback=SetWindowLong_(GadgetID(#ListIcon_1), #GWL_WNDPROC, @WindowCallback())
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
If Event = #PB_Event_Gadget
If GadgetID = #ListIcon_0
SetGadgetState(#ListIcon_1, GetGadgetState(#ListIcon_0))
SendMessage_(GadgetID(#ListIcon_1),#LVM_ENSUREVISIBLE,GetGadgetState(#ListIcon_0),#True)
ElseIf GadgetID = #ListIcon_1
SetGadgetState(#ListIcon_0, GetGadgetState(#ListIcon_1))
SendMessage_(GadgetID(#ListIcon_0),#LVM_ENSUREVISIBLE,GetGadgetState(#ListIcon_1),#True)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End