tobe hat geschrieben:das mit den klicks verlieren passiert bei mir nur wenn ich einen Doppelklick auf ein item mache, daher kann man das einfach ignorieren

Yep, und wenn man eine Nacht drüber geschlafen hat, bekommt man manchmal (wieder) den richtigen Blickwinkel auf das Problem.
Ziel der ganzen Aktion ist, daß in meiner Video-Verwaltung bei bestimmten Aktionen eine neue Filterung ins ListIconGadget geladen wird. Das soll nur geschehen, wenn bewußt das Item (bzw das Lable, der Text zum Item) selektiert wird und nicht, wenn aus irgendwelchen Gründen der User den Teil einfaltete, in dem das gerade angezeigte Item liegt.
Aus dieser Anforderung heraus ist es IMHO sinnvoller, nicht auf
TVHT_ONITEMBUTTON sondern auf
TVHT_ONITEMLABEL, einem anderen Wert der
TV_HITTESTINFO Struktur zu checken.
Man wird zwar etwas rammdösig bei den ganzen Klick-Tests, aber AFAICS löst dieser Code das Problem so, wie ich es eigentlich erwartetete:
Code: Alles auswählen
#main_win = 1
#main_tree = 3
Procedure.L ugs_isTGitemtextclicked()
Protected ItemHandle.L
Protected TVHitTest.TV_HITTESTINFO
Protected TVItem.TV_ITEM
TVHitTest\Pt\x = WindowMouseX(#main_win) - GadgetX(#main_tree)
TVHitTest\Pt\y = WindowMouseY(#main_win) - GadgetY(#main_tree)
ItemHandle = SendMessage_(GadgetID(#main_tree), #TVM_HITTEST, 0, @TVHitTest)
If ItemHandle <> 0
If TVHitTest\Flags = #TVHT_ONITEMLABEL
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
If OpenWindow(#main_win, 50, 50, 355, 250, "TreeGadget", #PB_Window_SystemMenu ) And CreateGadgetList(WindowID(#main_win))
TreeGadget(#main_tree, 5, 5, 160, 230, #PB_Tree_AlwaysShowSelection )
AddGadgetItem(#main_tree, -1, "Normal Item 1", 0, 0)
AddGadgetItem(#main_tree, -1, "Node 1", 0, 0)
AddGadgetItem(#main_tree, -1, "Sub-Item 1-1", 0, 1)
AddGadgetItem(#main_tree, -1, "Sub-Item 1-2", 0, 1)
AddGadgetItem(#main_tree, -1, "Sub-Item 1-3", 0, 1)
AddGadgetItem(#main_tree, -1, "Sub-Item 1-4", 0, 1)
AddGadgetItem(#main_tree, -1, "Normal Item 2", 0, 0)
AddGadgetItem(#main_tree, -1, "Node 2", 0, 0)
AddGadgetItem(#main_tree, -1, "Sub-Item 2-1", 0, 1)
AddGadgetItem(#main_tree, -1, "Sub-Item 2-2", 0, 1)
AddGadgetItem(#main_tree, -1, "Sub-Node 3", 0, 1)
AddGadgetItem(#main_tree, -1, "Sub-Sub-item 3-1", 0, 2)
AddGadgetItem(#main_tree, -1, "Sub-Sub-Item 3-2", 0, 2)
AddGadgetItem(#main_tree, -1, "Sub-Sub-Item 3-3", 0, 2)
AddGadgetItem(#main_tree, -1, "Sub-Sub-Item 3-4", 0, 2)
StringGadget(#String,170,100,100,20,"")
SetActiveGadget(#main_tree)
SetGadgetState(#main_tree, 0)
SetGadgetText(#String, GetGadgetItemText(#main_tree, GetGadgetState(#main_tree)))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #main_tree
Select EventType()
Case #PB_EventType_LeftClick
If ugs_isTGitemtextclicked() = #True
Debug "item-text getroffen"
SetGadgetText(#String, GetGadgetItemText(#main_tree, GetGadgetState(#main_tree)))
Else
Debug "nicht den item-text getroffen"
EndIf
EndSelect
EndSelect
EndSelect; WaitWindowEvent()
ForEver
EndIf

an Shardik und tobe für deren Codes, aus denen zumindest ich etwas lernen konnte.