Seite 1 von 3

Mausclick in ListIcon "zündet" doppelt ?? GELÖST!

Verfasst: 23.09.2006 04:51
von Captn. Jinguji
Ich hab hier was ganz Komisches, ein Mausclick in einem ListIconGadget,
die mit

Code: Alles auswählen

ListIconGadget(#LIV_SOURCE, 15, 25, 550, 340, "Sel.", 30, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect |#PB_ListIcon_FullRowSelect      | #PB_ListView_ClickSelect|#PB_ListIcon_GridLines)
definiert ist, führt offenbar zu zwei Events

Das ist meine Hauptschleife:

Code: Alles auswählen

Repeat
  
   Event                = WaitWindowEvent()
   WinNum               = EventWindow()
   Select WinNum
   
   Case 0
      ; bestimme Anzahl der Listeinträge, wird fast immer gebraucht
       *WorkParams\NumItems = CountGadgetItems( #LIV_SOURCE )
     
        Select Event   

         Case #PB_Event_Gadget ; wenn es ein Gadgetevent war....
              HandlingCode   =  EventGadget( )
              Handle_Gadgets( HandlingCode, *WorkParams.WP )
    
         Case #PB_Event_Menu   ; wenn es ein Menuevent war
              HandlingCode   =  EventMenu( ) 
              Handle_Menues( HandlingCode, *WorkParams.WP )
        
         Case #WM_TIMER        ; wenn es ein Timerevent war....
               If *WorkParams\CP\autoRfsh >999
                  Refresh_ListIV( *WorkParams.WP )
               EndIf

        EndSelect

        Set_TVFTStatusBar( *workparams )
    

   Case 1    ; Playlist


   Case 2    ;
   
   EndSelect
   

Until Event = #PB_Event_CloseWindow
und die springt erstmal auch richtig hier rein (vom Kopf der Prozedur bis zum "Case 0" habe ich nur ca.30 Defines entfernt, um die Lesbarkeit zu verbessern

Code: Alles auswählen


Procedure.l Handle_Gadgets( HandlingCode.l, *WorkParams.WP )
; Diese Routine wickelt die BUTTON-Events ab
; es gibt noch eine ähnliche Routine, die die Menü-Events behandelt
; Über die Buttons erledigt man die laufenden Funktionen

Define AbsFileName.s = ""
Define vlc.s  = "D:\Programme\Tools\App\Multimedia\VLC\vlc.exe"
Define wdir.s = "."
Define ext.s
Define hold.s
Define idx
Define pp.s 

NewList Deletable()


; Zunächst die Aktionen unabhängig von Markierungen durchführen
Select HandlingCode

  Case  0             : EvCt = 1 :
                        idx = GetGadgetState( #LIV_SOURCE )
                        AbsFileName = GetGadgetItemText( #LIV_SOURCE, idx, 4)            
                        pp = GetPathPart(absfilename)
                        AbsFileName = Chr(34)+Absfilename+Chr(34)
                        RunProgram(vlc,        AbsFileName, pp) 
 
Case  #T1_TDIR      : EvCt = 1  
; ...                                  
... und so soll es ja auch sein.

Nur tut sie das bei jedem Mausclick 2x, und so soll es nicht sein.

Jetzt habe ich erst gedacht, meine Maus bzw. Touchpad "prellen",
dem ist aber wahrscheinlich nicht so, denn unterm Debugger sieht das so aus :
Das Programm rotiert in der Hauptschleife,
bis ich auf eine Zeile des ListIconGadgets clicke,
springt dann in handle_gadgets(),
holt sich auch die richtige Dateispezifikation aus der 4. Spalte
und startet das Abspielprogramm.
Dann geht er korrekt in die Hauptschleife zurück,
durchläuft sie einmal offenbar ohne Event,
UM DANN BEIM NÄCHSTEN DURCHLAUF nochmal in handle_gadget() zu gehen und den Player nochmal zu starten,
und sich danach dann völlig normal zu verhalten.

Ja, wieso DAS denn ?

HAbe ich es mit den geoderten Flags bei der Definition des LIG übertrieben, oder was ?

Das ganze hat seit Wochen mit den checkboxes sehr sauber funktioniert, allerdings ohne die Flags

Code: Alles auswählen

  |#PB_ListIcon_FullRowSelect | #PB_ListView_ClickSelect 
.
Ich fand es dann blöd, jedesmal für Einzeldateien die Checkbox anzuklicken und einen "Ausführen" Button nutzen zu müssen

Danke für Eure Tips
CJ

Verfasst: 23.09.2006 09:05
von Ja!
Hi,

ich habe mir Deinen Code erstmal nicht angeschaut.

Ein Mausklick verursacht immer 2 Events, den ersten beim draufdrücken und den zweiten beim loslassen der Taste..

Vielleicht hilft Dir das..

Verfasst: 23.09.2006 09:23
von Captn. Jinguji
Ja! hat geschrieben:Hi,

ich habe mir Deinen Code erstmal nicht angeschaut.

Ein Mausklick verursacht immer 2 Events, den ersten beim draufdrücken und den zweiten beim loslassen der Taste..

Vielleicht hilft Dir das..
ja, das ist mir schon klar. ich frage aber keine mouseevents, sondern gadgetevents ab, weisst du ?

Verfasst: 23.09.2006 09:35
von ts-soft
Bevor ich jetzt was ähnliches mit 3 Fenstern und Listicon bastel, um zu
testen, warte ich lieber ab. Der gepostete Source sagt nicht allzuviel aus und
ist nicht testbar :freak:

Verfasst: 23.09.2006 11:09
von Captn. Jinguji
ts-soft hat geschrieben:Bevor ich jetzt was ähnliches mit 3 Fenstern und Listicon bastel, um zu
testen, warte ich lieber ab. Der gepostete Source sagt nicht allzuviel aus und
ist nicht testbar :freak:
ja nee... Danke erstmal; dass Du da selbst noch was drumherum bastelst, war ja gar nicht gewollt.

Ich dachte eher, dass ich einen generellen Denk-/ Verständnisfehler gemacht hatte -weil ich die Flags-Kombination bzw. Effekte daraus im Verdacht habe -, den mir die Profis hier aufzeigen, so nach dem Motto
"Ja, wenn Du ListIconGadgets mit #PB_ListIcon_FullRowSelect | #PB_ListView_ClickSelect definierst, dann musst Du im Gegensatz zur Nutzung der Selectboxen noch beachten, dass....."
oder gar "Clickselect UND Checkbox darf man halt so gar nicht zusammenbringen, weil ...".

Der Gesamtcode ist viel zu gross, über ein Dutzend Files verteilt, alles andere ist wirklich für den Fall irrelevant -insbesondere die anderen Fenster, die noch gar nicht "open" und auch sonst nicht gefüllt sind ;) -, weil es sich eben unter dem Debugger (stepmode) genauso abspielt wie beschrieben, und es läuft auch nur durch die gezeigten Codepassagen.

Ich hätt' ja noch vielleicht verstanden, wenn die Events DIREKT hintereinander doppelt kommen, aber der eine "Leerlauf" von Event = WaitWindowEvent() is schon irritierend; wenn
ein Event VERSCHLUCKT würde, hätte ich ja noch den Verdacht, dass
es ein echter Programmierfehler ist, aber eines zuviel ???

Ich WEISS ja nicht einmal, wie ich aus dem Programm heraus ein Event generieren könnte (ausser vielleicht einem Timerevent, und das fällt hier aus! )

----------edit

Nachtrag : es ist immer genau ein Leerlauf und ein Event zuviel, nicht : mal eines , mal zwei, mal vier, mal gar nix.

Verfasst: 23.09.2006 13:15
von AND51
Ich habe eventuell eine "zündende" Idee, woran es liegt!

Erstens:
ListIconGadget gibt es
ListViewGadget gibt es auch
ListIconView gibt es nicht! Hier stehen Icon und View im Gegensatz!
Es sei denn, du definierst ein völlig neues Gadget :lol:

Zweitens:
Jetzt wo wir wissen, dass du ListIcongadget und ListViewgadget durcheinanderschmeißt, fällt mir auch auf, dass du einem ListIconGadget die Flags eines ListViewGadget Gadgets zuweist! Geht das denn bzw. was stellst du die vor, entsteht daraus? /:->

Drittens:
Der Finale Zünder (Die gegensätze sind fett dargestellt):
ListIconGadget(#LIV_SOURCE, 15, 25, 550, 340, "Sel.", 30, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect |#PB_ListIcon_FullRowSelect | #PB_ListView_ClickSelect|#PB_ListIcon_GridLines)



Edit:
Ein ListViewGadget wird nicht mit ListIconGadget definiert, wie du gaz oben im ersten Satz behauptest!

Verfasst: 23.09.2006 15:48
von Captn. Jinguji
AND51 hat geschrieben:Ich habe eventuell eine "zündende" Idee, woran es liegt!

Erstens:
ListIconGadget gibt es
ListViewGadget gibt es auch
ListIconView gibt es nicht! Hier stehen Icon und View im Gegensatz!
Es sei denn, du definierst ein völlig neues Gadget :lol:

Zweitens:
Jetzt wo wir wissen, dass du ListIcongadget und ListViewgadget durcheinanderschmeißt, fällt mir auch auf, dass du einem ListIconGadget die Flags eines ListViewGadget Gadgets zuweist! Geht das denn bzw. was stellst du die vor, entsteht daraus? /:->

Drittens:
Der Finale Zünder (Die gegensätze sind fett dargestellt):
ListIconGadget(#LIV_SOURCE, 15, 25, 550, 340, "Sel.", 30, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect |#PB_ListIcon_FullRowSelect | #PB_ListView_ClickSelect|#PB_ListIcon_GridLines)



Edit:
Ein ListViewGadget wird nicht mit ListIconGadget definiert, wie du gaz oben im ersten Satz behauptest!

Ja... das ist doch schonmal was. Gemeint sind in der Tat nur ListIconGadgets, listviews habe ich garnicht. Die Sprachverwirrung "ListIconView Gadget stammt daher, dass das -wie mal an anderer Stelle gesagt - mein ersters WinGui Programm ist.
Unglücklich-(für diesen meinen Fall) aber logischerweise liegen die onlinehelp-entries für ListIcon- und ListView Gadgets unmittelbar zusammen und die Konstanten heissen logischerweise auch so ähnlich...

So muss das wohl passiert sein, sorry, dass ich "eigenblind" war und das nicht selbst gesehen habe.

Bin halt faul gewesen, hab die neuen Flags mitsamt der oderung per cut auch mal herausgenommen, dann lief es ja wie früher sauber - dann per paste wieder rein, anstatt die Konstantennamen nochmal einzutippern.

Wenn's einen Absturz gegeben hätte oder der call aufgrund der falschen Konstante was GANZ anderes gemacht hätte statt nur der "unexpected functionality", hätte ich es vielleicht doch bemerkt.

Danke, werds gleich korrigieren !

achso.:

Geht das denn bzw. was stellst du die vor, entsteht daraus? /:->
Ja gar nix, es war halt nur ein HelpLookup&Tippfehler

-------Edit:

Ich hoffe aber, dass spätestens nach meiner Antwort an TS-SOFT schon klar war , dass ich den Fehler durchaus von vornherein BEI MIR gesucht - aber nicht gefunden - hatte, nicht bei WIN oder PB oder sonstwem.

Re: Mausclick in Listiconview "zündet" doppelt ??

Verfasst: 23.09.2006 16:15
von AND51
Captn. Jinguji hat geschrieben:Ich hab hier was ganz Komisches, ein Mausclick in einer ListIconview,
die mit

Code: Alles auswählen

ListIconGadget(#LIV_SOURCE, 15, 25, 550, 340, "Sel.", 30, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect |#PB_ListIcon_FullRowSelect      | #PB_ListView_ClickSelect|#PB_ListIcon_GridLines)
definiert ist, führt offenbar zu zwei Events
Das reichte mir schon, um den Fehler zu entdecken 8)

Ich habs halt drauf (edel, das war IRONIE!!!) 8)

Hmmm. "our situation has not rrrrreally improved"

Verfasst: 23.09.2006 16:19
von Captn. Jinguji
Schönchen, ich habe die falsche Konstante #PB_ListView_ClickSelect herausgenommen. Das Programm läuft, macht aber nach wie vor wieder zwei Fensterchen auf...dabei ist noch gar nicht Dezember....
Edit---------
Was aber nix daran ändert, dass AND51's Tip dennoch wichtig und richtig war!

edit II -------
Ja klar habe ich den gesamten Source nun gescanned, ob da noch irnxwo
ListIconView [statt ListIconGadget] steht ;)

Verfasst: 23.09.2006 17:11
von ts-soft
Nur zur Info:
ListIconGadget entspricht in Windows dem ListView
ListViewGadget entspricht in Windows der ListBox

Da kann man schon mal ins stolpern geraten :mrgreen: