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

Anfängerfragen zum Programmieren mit PureBasic.
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

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

Beitrag 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
Zuletzt geändert von Captn. Jinguji am 24.09.2006 19:49, insgesamt 3-mal geändert.
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag 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..
PureBasic 3.94 ; 4.2 ; 4.3
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 »

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 ?
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
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 »

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.
Zuletzt geändert von Captn. Jinguji am 24.09.2006 23:06, insgesamt 1-mal geändert.
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
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 »

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.
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

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

Beitrag 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)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
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

Hmmm. "our situation has not rrrrreally improved"

Beitrag 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 ;)
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten