Seite 1 von 2

ListIConGadget liefert "unzuverlässige" Ergebnisse

Verfasst: 24.09.2007 20:25
von Hartmut
Hallo Leute,

ich will bei einem Listicongadget auswerten, auf welche Zeile mit der linken Maustaste geklickt wurde.
Das funktioniert allerdings nur, wenn man die Maus nicht gleichzeitig bewegt, sondern fein stille über der Zeile hält.
Bewegt man die Maus (horizontal) beim Klicken, bekomme ich einen Eventtype 14200 vom Windows geliefert.
Gelegentlich erfreut mich Windows auch mit einer -1 :?

Bild

Was macht dieses Programm falsch ?

Code: Alles auswählen

Enumeration 
  #win
  #list
EndEnumeration

; Fenster öffnen
OpenWindow(#win,100,100,600,400,"ListIconProblem")

; ein Listicon dazu
CreateGadgetList(WindowID(#win))
ListIconGadget(#List,0,0,550,250,"Spalte 1",190,#PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
; eine 2. Spalte anlegen
AddGadgetColumn(#List, 1, "Spalte 2", 100)
      
;Liste füllen mit 10 Testzeilen
For i=0 To 9
  AddGadgetItem(#List,-1,"Zeile "+Str(i)+Chr(10)+"Zeile "+Str(i))
Next

ende=0

; Eventschleife und Zeilenerkennung
Repeat
  ev=WaitWindowEvent()
  
  Select ev
    Case #PB_Event_CloseWindow
      ende=1
    Case #PB_Event_Gadget
      ; was ist passiert ?
      Evt=EventType()
      Select Evt
        Case #PB_EventType_Change; geändert => anderes Element ausgewählt
          Debug "Zeile : "+Str(GetGadgetState(#list))+" erkannt !"
        Default
          If Evt<>0; unbekanntes Ereignis
            Debug "unbekannt: "+Str(evt)
            ; Keine Zeile selektieren
            SetGadgetState(#list,-1)
          EndIf
      EndSelect
      
  EndSelect
Until ende


Vielen Dank und viele Grüße

Hartmut

Verfasst: 24.09.2007 20:46
von jpd
Hi Hartmut,

beim ziehen wird id 14002 erzeugt!

Ciao

jpd

Verfasst: 24.09.2007 20:53
von Hartmut
Hi jpd,

soweit klar, aber die Frage ist :
Wie komme ich an meinen Mausklick heran, der quasi "unter" der 14002 liegt ?

Re: ListIConGadget liefert "unzuverlässige" Ergebn

Verfasst: 24.09.2007 20:58
von Kiffi
Hartmut hat geschrieben:Was macht dieses Programm falsch ?
Du solltest auf #PB_EventType_LeftClick testen; nicht auf #PB_EventType_Change.

Grüße ... Kiffi

P.S.: Du plenkst

Verfasst: 24.09.2007 21:08
von Captn. Jinguji
Hi Hartmut,
das Prob habe ich auch seit Monaten - vielleicht tröstet Dich das ja;).

Vermutlich muss man die unerwünschten Events alle ausfiltern, allerdings sieht man ja, dass da immer noch ein unbekanntes Event mehr dazukommt, wenn man meint, sie alle erwischt zu haben (soll auch user geben, die mal mit rechts dazwischen klicken). Ausserdem habe ich dasGefühl, dass das noch schlimmer wird, wenn man wíe ich die sonst sehr hilfreiche PureLVSort-Library mit nutzt (auf die ich auch nicht verzichten möchte).

Aber nur auf die Zahlenwerte zu reagieren, ist auch nicht das Wahre. Schön wäre, wenn es eine List aller #PB.... event-konstanten gäbe; zumindest würde man dann auch ahnen, worauf man da (nicht) reagiert.

Na, vielleicht kriegen wir ja ne Hilfestellung...

EDIT: ooh Kiffi war schon da ...

"Gehelft" hat das aber auch nicht, als ich das damals eingführt habe mit der Abfrage auf #PB_EventType_LeftDoubleClick und #PB_EventType_LeftClick

Verfasst: 24.09.2007 21:17
von roherter
Das hat nix damit zu tun das es unzuverlässige Ergebnisse sind.

1. "-1" Kommt nur zu stande wenn du nachdem du eine Zeile makiert hast, irgendwo auf ein feld welches nich gefüllt ist klickst.

2. Es wir doch erkannt welche zeile ausgewählt wurde.14002 hat da gar nix mit zu tun.

Verfasst: 24.09.2007 21:27
von Hartmut
Danke für eure Kommentare bisher ! :allright:

@Kiffi :
Sorry, aber das hilft mir so nicht weiter - kannst du das in Coding ausdrücken ? P.S.: Ja ! Ich bin bekennender Plenker ! :wink:

@Captn. Jinguji :
2 Seelen - 1 Problem :mrgreen:
Hier habe ich nur ein Beispiel geposted. Mein echter Code geht in die Richtung, die du beschreibst und fragt erheblich mehr EventTypes ab.
Aber "wasserdicht" ist der eben leider auch nicht ...

@roherter :
zu 1. Jetzt weiss ich wenigstens, wie die -1 zustande kommt ! :allright:
zu 2. Ich weiss, das Problem ist nicht ganz einfach nachzustellen.
Versuch bitte mal die Maus horizontal zu bewegen und dann in der Bewegung einen LinksKlick abzusetzen - dann kommt eine freundliche 14002 ...

Ciao : Hartmut

Verfasst: 24.09.2007 21:31
von Captn. Jinguji
roherter hat geschrieben:Das hat nix damit zu tun das es unzuverlässige Ergebnisse sind.

1. "-1" Kommt nur zu stande wenn du nachdem du eine Zeile makiert hast, irgendwo auf ein feld welches nich gefüllt ist klickst.

2. Es wir doch erkannt welche zeile ausgewählt wurde.12002 hat da gar nix mit zu tun.
ja, neee ich kann ihn schon nachvollziehen, auch wenn "unzuverlässig" sicher nicht das "richtige" Wort ist. Ich bin sogar soweit gegangen, die erste Spalte als checkboxspalte zu erzeugen, wobei streckenweise, OBWOHL man das häkchen SIEHT, dieAbfrage ergibt, dass die checkbox unchecked sein soll... vermutlich mache ich einen Denkfehler, aber ich sehe ihn einfach nicht.

Verfasst: 24.09.2007 21:45
von Kiffi
Plenker hat geschrieben:@Kiffi :
Sorry, aber das hilft mir so nicht weiter - kannst du das in Coding ausdrücken ?

Code: Alles auswählen

Enumeration
  #win
  #list
EndEnumeration

; Fenster öffnen
OpenWindow(#win,100,100,600,400,"ListIconProblem")

; ein Listicon dazu
CreateGadgetList(WindowID(#win))
ListIconGadget(#list,0,0,550,250,"Spalte 1",190,#PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
; eine 2. Spalte anlegen
AddGadgetColumn(#list, 1, "Spalte 2", 100)
     
;Liste füllen mit 10 Testzeilen
For i=0 To 9
  AddGadgetItem(#list,-1,"Zeile "+Str(i)+Chr(10)+"Zeile "+Str(i))
Next

ende=0

; Eventschleife und Zeilenerkennung
Repeat
  ev=WaitWindowEvent()
  
  Select ev
    Case #PB_Event_CloseWindow
      ende=1
    Case #PB_Event_Gadget
      ; was ist passiert ?
      Evt=EventType()
      Select Evt
        Case #PB_EventType_LeftClick
          Debug "Zeile : "+Str(GetGadgetState(#list))+" erkannt !"
      EndSelect
      
  EndSelect
Until ende
@Captn. Jinguji:
OBWOHL man das häkchen SIEHT, dieAbfrage ergibt, dass die checkbox unchecked sein soll...

Code: Alles auswählen

If GetGadgetItemState(#myListIconGadget, Item) & #PB_ListIcon_Checked
Grüße ... Kiffi

Verfasst: 24.09.2007 21:56
von Captn. Jinguji
Kiffi hat geschrieben: @Captn. Jinguji:
OBWOHL man das häkchen SIEHT, dieAbfrage ergibt, dass die checkbox unchecked sein soll...

Code: Alles auswählen

If GetGadgetItemState(#myListIconGadget, Item) & #PB_ListIcon_Checked
Grüße ... Kiffi
Hmmm.... ahja. Stimmt, das ist in der Tat nur FAST das gleiche wie

Code: Alles auswählen

isChckd     = GetGadgetItemState( #LIG_SOURCE, idx )
If isChckd  = #PB_ListIcon_Checked  
..aber natürlich präzise. Das werde ich dann wohl in verschiedenen Varianten so haben.

Danke!