Ich habe da mal wieder ein Problem zu meinen Projekt,
und zwar möchte ich eine Spaltenbreite vom ListGadget ändern, und diese
auf ein zweites ListGadget übertragen.
Soweit so Gut, mit Hilfe von WinApi kann ich die Spaltenbreitenänderung abfragen,
und diese Via PostEvent() meinen Programm übergeben
Code: Alles auswählen
Procedure ListCB(hWnd, Message, wParam, lParam)
Protected *HD_NOTIFY.HD_NOTIFY
Protected Result = CallWindowProc_(ListCB, hWnd, Message, wParam, lParam)
Select Message
Case #WM_NOTIFY
*HD_NOTIFY = lParam
If *HD_NOTIFY\hdr\code = #HDN_ITEMCHANGED ; änderung auf Spaltenbreite abfragen
MyData\Gadget=GetGadgetNr(hWnd)
MyData\Parm01=*HD_NOTIFY\iItem
MyData\Parm02=GetGadgetItemAttribute(GetGadgetNr(hWnd),0,#PB_ListIcon_ColumnWidth ,*HD_NOTIFY\iItem)
PostEvent(#PB_Event_Gadget,#Pure_Commander,GetGadgetNr(hWnd),#ListHeaderSpaltennBreite)
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
was zur einer EndlosEventschleife führt sobald das übergeben auf beiden ListGadget ausgeführt wird.
Ich hoffe das war verständlich beschrieben
hierzu ein laufähiger Code
Code: Alles auswählen
EnableExplicit
; Import für auffinden der GadgetNr aus einer GadgetID
Import ""
PB_Object_EnumerateStart(*object)
PB_Object_EnumerateNext(*object,*id.Integer)
PB_Object_EnumerateAbort(*object)
PB_Gadget_Objects.i
EndImport
Structure MyData
Gadget.i
Parm01.l
Parm02.l
EndStructure
Enumeration ; hauptfenster
#Pure_Commander
#List01
#List02
EndEnumeration
Enumeration #PB_EventType_FirstCustomValue
#ListHeaderSpaltennBreite
EndEnumeration
Global MyData.MyData,ListCB
;gibt die GadgetID zurück
Procedure GetGadgetNr(hWnd.i)
Protected id
PB_Object_EnumerateStart(PB_Gadget_Objects)
While PB_Object_EnumerateNext(PB_Gadget_Objects, @id)
If hWnd = GadgetID(id)
PB_Object_EnumerateAbort(PB_Gadget_Objects)
ProcedureReturn id
EndIf
Wend
ProcedureReturn -1
EndProcedure
;callback für Listenbreite
Procedure ListCB(hWnd, Message, wParam, lParam)
Protected *HD_NOTIFY.HD_NOTIFY
Protected Result = CallWindowProc_(ListCB, hWnd, Message, wParam, lParam)
Select Message
Case #WM_NOTIFY
*HD_NOTIFY = lParam
If *HD_NOTIFY\hdr\code = #HDN_ITEMCHANGED ; änderung auf Spaltenbreite abfragen
MyData\Gadget=GetGadgetNr(hWnd)
MyData\Parm01=*HD_NOTIFY\iItem
MyData\Parm02=GetGadgetItemAttribute(GetGadgetNr(hWnd),0,#PB_ListIcon_ColumnWidth ,*HD_NOTIFY\iItem)
PostEvent(#PB_Event_Gadget,#Pure_Commander,GetGadgetNr(hWnd),#ListHeaderSpaltennBreite)
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(#Pure_Commander,0,0,640,400,"ListIcon Demo",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(#List01, 10, 0, 300,300, "Spalte01", 100 , #PB_ListIcon_FullRowSelect )
AddGadgetColumn(#List01,1,"Spalte02",100)
AddGadgetColumn(#List01,2,"Spalte03",100)
ListIconGadget(#List02, 320, 0, 300,300, "Spalte01", 100 , #PB_ListIcon_FullRowSelect )
AddGadgetColumn(#List02,1,"Spalte02",100)
AddGadgetColumn(#List02,2,"Spalte03",100)
EndIf
;starten des Callbacks für jedes ListGadget
ListCB = SetWindowLongPtr_(GadgetID(#List01), #GWL_WNDPROC, @ListCB())
ListCB = SetWindowLongPtr_(GadgetID(#List02), #GWL_WNDPROC, @ListCB())
Repeat
Define event = WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow
Define exit=#True
Case #PB_Event_Gadget
Select EventGadget()
Case #List01 ; ListGadget 1
Select EventType()
Case #ListHeaderSpaltennBreite
Debug "Event List01 Spaltenbreite"
Debug "ListGadget 1 ist GadgetNr="+Str(MyData\Gadget)
Debug "SpaltenNr die verändert wird="+Str(MyData\Parm01)
Debug "Größe der Spaltenbreite="+Str(MyData\Parm02)
SetGadgetItemAttribute(#List02,0,#PB_Explorer_ColumnWidth,MyData\Parm02,MyData\Parm01)
EndSelect
Case #List02 ;ListGadget 2
Select EventType()
Case #ListHeaderSpaltennBreite
Debug "Event List02 Spaltenbreite"
Debug "ListGadget 2 ist GadgetNr="+Str(MyData\Gadget)
Debug "SpaltenNr die verändert wird="+Str(MyData\Parm01)
Debug "Größe der Spaltenbreite="+Str(MyData\Parm02)
;SetGadgetItemAttribute(#List01,0,#PB_Explorer_ColumnWidth,MyData\Parm02,MyData\Parm01)
EndSelect
EndSelect
EndSelect
Until exit=#True