Hallo,
eine Frage an die API-Spezialisten :
Wie kann ich erfahren, welcher Spaltenbutton
einer Gridbox angeklickt wurde ?
Ich möchte gerne die Summe der Spalte Betrag
ausrechnen und unten dranhängen.
Code
$H Messages.ph
$H Windows.ph
$H commctrl.ph
$H structs.ph
Declare Handle hGrid
Proc Fuellen
AddString(hGrid, "Karl|4711|2300")
AddString(hGrid, "Peter|4712|2500")
AddString(hGrid, "Rosi|4713|3000")
EndProc
SubClassProc
Declare col&, HD_NOTIFY#
Struct HD_NOTIFY = hdr#(8),iItem&,iButton&, pitem&
Dim HD_NOTIFY#, HD_NOTIFY
' HD_NOTIFY = hdr#(8),iItem&,iButton&, pitem&;
If SubClassMessage(hGrid, ~wm_notify)
Set("WinProc", 0)
Dispose HD_NOTIFY#
EndIf
EndProc
WindowStyle 536
WindowTitle "TEST - FENSTER"
Window 800, 600
hGrid = @Create("Gridbox", %Hwnd, "Name;0;140;Nummer;2;60;Betrag;3;80", 0, 10, 50, 300, 200)
Fuellen
SubClass hGrid, 1
WhileNot %Key = 2
WaitInput
EndWhile
SubClass hGrid, 0
End
Alles anzeigen
Ausgegangen bin ich von folgendem PB_Code :
Code
EnableExplicit
Global MyOldList
Declare ListCB(hWnd, Message, wParam, lParam)
Declare GetListColumnClicked()
Procedure ListCB(hWnd, Message, wParam, lParam)
Protected *Header.HD_NOTIFY
Protected Result=CallWindowProc_(MyOldList, hWnd, Message, wParam, lParam)
Protected ListCB_Column_Clicked
Select Message
Case #WM_NOTIFY
*Header=lParam
If *Header\hdr\code=#HDN_ITEMCLICK
ListCB_Column_Clicked=*Header\iItem
MessageRequester("","Spalte "+Str(ListCB_Column_Clicked)+" wurde geklickt.",0)
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(0, 0, 0, 500, 250, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 10, 10, 480, 230, "Spalte 0", 100, 0)
AddGadgetColumn(1, 1, "Spalte 1", 100)
AddGadgetColumn(1, 2, "Spalte 2", 100)
MyOldList = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @ListCB())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Alles anzeigen
Da hier ja nur API und Strukturen verwendet werden, müßte
das doch in XProfan genauso gut machbar sein. Habs jetzt
mal über SubClass probiert, komme aber nicht weiter.