ListIConGadget liefert "unzuverlässige" Ergebnisse

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Hartmut
Beiträge: 56
Registriert: 15.09.2006 22:22
Kontaktdaten:

ListIConGadget liefert "unzuverlässige" Ergebnisse

Beitrag 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
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hi Hartmut,

beim ziehen wird id 14002 erzeugt!

Ciao

jpd
PB 5.10 Windows 7 x64
Benutzeravatar
Hartmut
Beiträge: 56
Registriert: 15.09.2006 22:22
Kontaktdaten:

Beitrag von Hartmut »

Hi jpd,

soweit klar, aber die Frage ist :
Wie komme ich an meinen Mausklick heran, der quasi "unter" der 14002 liegt ?
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIConGadget liefert "unzuverlässige" Ergebn

Beitrag 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
a²+b²=mc²
Benutzeravatar
Captn. Jinguji
Beiträge: 397
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Beitrag 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
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von roherter am 24.09.2007 21:32, insgesamt 1-mal geändert.
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
Hartmut
Beiträge: 56
Registriert: 15.09.2006 22:22
Kontaktdaten:

Beitrag 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
Benutzeravatar
Captn. Jinguji
Beiträge: 397
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Beitrag 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.
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Captn. Jinguji
Beiträge: 397
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Beitrag 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!
Ist das Kunst hier, oder kann das weg ?
Antworten