GadgetList Spaltenbreite ändern
Verfasst: 04.12.2018 15:03
				
				Hallo Leute,
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
wenn ich nun die Änderung auf das zweite ListGadget übertragen will gibt es das Problem, das diese auch einen Event für Veränderung der Spaltenbreite sendet, 
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
			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
EndProcedurewas 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