Seite 1 von 1
ListIconGadget
Verfasst: 19.05.2012 17:19
von ProgOldie
Gibt's einen Weg, mit dem man bei einem ListiconGadget nach einem Event wie #PB_EventType_LeftDoubleClick ermitteln kann, auf welche Spalte der Doppelklick erfolgte? Ich möchte nämlich die angeklickte Zelle ermitteln, wobei man die Zeile ja mit GetGadgetState erhält. Es würde auch reichen, wenn man zur angeklickten Zelle die Bezeichnung des Spaltenkopfes zurückgereicht bekommt.
Gruß und Dank!
Re: ListIconGadget
Verfasst: 20.05.2012 03:28
von Bisonte
RSBasic's Winapi Library :
http://www.rsbasic.de/aktualisierung/wi ... swerten.pb
Ist es das was du suchst ?
Re: ListIconGadget
Verfasst: 20.05.2012 08:53
von Pelagio
Hallo ProgOldie,
ich habe einmal in meine alten Codeschnitzel nachgeschaut und dies gefunden:
Code: Alles auswählen
Enumeration
#Win
#LVG
EndEnumeration
Procedure LvMausclick(vID.i, *vP.Point)
Protected pLVH.LVHITTESTINFO
GetCursorPos_ (*vP) ;wo ist Maus
MapWindowPoints_(0, vID, *vP, 1)
pLVH\pt\x = *vP\x
pLVH\pt\y = *vP\y
SendMessage_(vID, #LVM_SUBITEMHITTEST, 0, pLVH)
*vP\y = pLVH\iItem ;row ab 0
*vP\x = pLVH\iSubItem ;col ab 0
EndProcedure
OpenWindow(#Win, 0, 0, 300,420,"ListIcon Gadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(#LVG, 10, 10, 280, 400, "Spalte 0", 140, #PB_ListIcon_GridLines);|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#LVG, 1,"Spalte 1",55)
AddGadgetColumn(#LVG,2,"Spalte 2",55)
For n=0 To 16
txt$ = "Text in Zeile " + LSet(Str(n), 3, " ") + " in Spalte 0" + #LF$ + Str(Random(99)) + #LF$ + Str(n)
AddGadgetItem(#LVG, -1, txt$)
Next n
;=====================================================
Repeat
Event = WaitWindowEvent(1)
If (Event=#PB_Event_Gadget) And (EventGadget()=#LVG)
If (EventType()=#PB_EventType_LeftClick)
LvMausclick(GadgetID(#LVG), p.Point)
Debug GetGadgetItemText(#LVG, p\y, p\x)
EndIf
EndIf
Until (Event=#PB_Event_CloseWindow)
End
am Ende ist dies nichts anderes als was bei RSBasic's Winapi Library steht wie Bisonte schon gelinkt hat.
Ich glaube/hoffe aber das es etwas verständlicher ist.

Re: ListIconGadget
Verfasst: 20.05.2012 14:33
von Stephan-X
Eventuell Hilft das ..
Code: Alles auswählen
Case #List_0
If EventType() = #PB_EventType_Focus
ElseIf EventType() = #PB_EventType_RightDoubleClick
; Reihe ermitteln die ausgewählt wird
Reihe.l = GetGadgetState(#List_0) ;Welcher Satz wurde angeklickt
If Reihe.l <> -1
ZeileP = Val(GetGadgetItemText(#List_0,Reihe.l,10)) ;hier wird die 11. Spalte gelesen
.... weiterer code
Endif
Endif
Re: ListIconGadget
Verfasst: 20.05.2012 14:43
von ts-soft
@Stephan-X
Den verstehe ich nicht, zu mal ein ListIcon gar kein #PB_EventType_Focus unterstützt.
Wo die Werte ermittelt werden kann ich auch nicht erkennen.
Vielleicht machste da mal eine ausführbare Version daraus, mit diesem Ausschnitt wird wohl niemand
klar kommen.
Ich bin jedenfalls der Meinung, Dein Vorschlag kann nicht funktionieren.
Gruß
Thomas
Re: ListIconGadget
Verfasst: 20.05.2012 18:45
von ProgOldie
Dank an Bisonte!
Übrigens ist
http://www.rsbasic.de/winapi-library/ eine super-WinAPI-Sammlung, auf die Anfänger 'mal generell unter 'Links' und 'Private Webseiten' hingewiesen werden könnten.
Re: ListIconGadget
Verfasst: 28.09.2012 15:59
von bobobo
geht das auch andersrum ?
ich habe ein Listicongadget und benötige
dort die Koordinaten der einzelnen Felder
Re: ListIconGadget
Verfasst: 28.09.2012 21:53
von hjbremer
bobobo hat geschrieben:geht das auch andersrum ?
ich habe ein Listicongadget und benötige
dort die Koordinaten der einzelnen Felder
siehe MSDN - LVM_GETSUBITEMRECT
Re: ListIconGadget
Verfasst: 29.09.2012 03:39
von BSP
Eine Möglichkeit:
Den Teil ab "Ergänzung" einfach in die Procedure einfügen.
Code: Alles auswählen
Procedure LvMausclick(vID.i, *vP.Point)
Protected pLVH.LVHITTESTINFO
GetCursorPos_ (*vP) ;wo ist Maus
MapWindowPoints_(0, vID, *vP, 1)
pLVH\pt\x = *vP\x
pLVH\pt\y = *vP\y
SendMessage_(vID, #LVM_SUBITEMHITTEST, 0, pLVH)
*vP\y = pLVH\iItem ;row ab 0
*vP\x = pLVH\iSubItem ;col ab 0
; --- Ergänzung
Protected rec.RECT , i
SendMessage_(vid, #LVM_GETSUBITEMRECT, *vp\y, rec)
rec\left=0
rec\right=rec\left+GetGadgetItemAttribute(#LVG,-1,#PB_ListIcon_ColumnWidth,0)
If *vP\x >0
For i=1 To *vP\x
rec\left+GetGadgetItemAttribute(#LVG,-1,#PB_ListIcon_ColumnWidth, i-1)
rec\right=rec\left+GetGadgetItemAttribute(#LVG,-1,#PB_ListIcon_ColumnWidth,i)
Next
EndIf
Debug "-----"
Debug rec\left
Debug rec\right
Debug rec\top
Debug rec\bottom
Debug " "
EndProcedure
Geht bestimmt noch besser, funktioniert aber.
Gruß: Bernd