[#1] Dwuklik na LISTVIEW (gadtools)
Czesc,
jak wychwycic dwuklik na liscie?
Na razie mam tylko klawaiture i RETURN (to juz mi dziala).

Dzieki
[#2] Re: Dwuklik na LISTVIEW (gadtools)

@peceha, post #1

Do sprawdzenia czy dany odcinek czasu kwalifikuje się jako dwuklik służy funkcja DoubleClick() z biblioteki intuition.

Nie jestem jednak pewien, czy jak już zaznaczony zostanie element w ListView, to ponowne kliknięcie w ten sam element wygeneruje wiadomość IDCMP_GADGETDOWN.
[#3] Re: Dwuklik na LISTVIEW (gadtools)

@Hexmage960, post #2

Dzieki za nakierowanie.

Bede "eksperymentowal"
[#4] Re: Dwuklik na LISTVIEW (gadtools)

@peceha, post #3

ListView jest troszkę "brzydki". Możesz w razie czego skorzystać z gotowych klas BOOPSI, które być może obsługują podwójne kliknięcie, albo zrobić własną.

Tutaj np.: http://aminet.net/package/dev/gui/ListViewClass
[#5] Re: Dwuklik na LISTVIEW (gadtools)

@Hexmage960, post #4

No niestety ale ListView nie przepuszcza IDCMP_GADGETDOWN.
Wymaga go do poprawnego funkcjonowania ale nie ma mozliwosci ustawienia by wysylal sygnal dalej (GA_Immediate nie istnieje dla ListView).
Bede probowal z GADGETUP (to dziala) ale to bedzie dosc "dziwny" dwuklik, hehe.
Ewentualnie pozniej siegne bo zewnetrzne rozwiazania np te ktore zalinkowales
[#6] Re: Dwuklik na LISTVIEW (gadtools)

@peceha, post #5

Znalazłem jeszcze jakiś przykład, ale dla języka Amiga E. Jest to plugin do pakietu EasyGUI, który - zgodnie z opisem - powinien udostępniać dwuklik dla ListView gadtools. Nie wgłębiałem się w szczegóły.

Proszę, tutaj (powtarzam, że to dla języka Amiga E):
EasyGUI PLUGIN: Dbl-clickable listview

No niestety ale ListView nie przepuszcza IDCMP_GADGETDOWN.
Wymaga go do poprawnego funkcjonowania ale nie ma mozliwosci ustawienia by wysylal sygnal dalej (GA_Immediate nie istnieje dla ListView).

Z tego co się orientuję czasami IDCMP_GADGETDOWN jest używany przez Gadtools.

Sprawdziłem - tak, nawet ListView z niego korzysta. Podajesz LISTVIEWIDCMP jako parametr dla WA_IDCMP okienka.
#define LISTVIEWIDCMP	(IDCMP_GADGETUP | IDCMP_GADGETDOWN |\
	IDCMP_MOUSEMOVE | ARROWIDCMP)

Nie daje to gwarancji, że ten komunikat pojawi się przy wciskaniu elementów listy, choć może tak być.

Ostatnia aktualizacja: 14.09.2019 20:36:39 przez Hexmage960
[#7] Re: Dwuklik na LISTVIEW (gadtools)

@peceha, post #5

Musisz zapamiętać gdzieś dane dane pierwszego kliknięcia (czas i który element listy byl kliknięty), żeby moc potem stwierdzić czy bieżące klikniecie to to "dwuklik".

W GoADF zrobiłem to tak - nie wiem czy idealnie zgodnie z wytycznymi systemowymi, ale działa na zwykłym Listview z gadtools:

/*	poczatek programu*/

/* 	definuję obiekt, w ktorym bedą dane wczesniwjszego klikniecia na liscie:
	sekundy, mikrosekundy i klikniety element listy  */
	
OBJECT ListClick
	  seconds 
	  micros
	  item
ENDOBJECT

/* tworze zmienna typu ListClick i inicjuje ją zerami */
DEF 	lastListClick=NIL:PTR TO ListClick
lastListClick:=[0,0,0]



/*	petla obslugujaca komunikaty z okna */

WaitPort(mainWnd.userport)
WHILE imsg:=Gt_GetIMsg(mainWnd.userport)
      class:=    imsg.class
      code:=     imsg.code
      gadget:= 	 imsg.iaddress
      seconds:=	 imsg.seconds
      micros:=   imsg.micros

      Gt_ReplyIMsg( imsg)

	 SELECT class
       
		CASE IDCMP_GADGETUP
				
			SELECT gadgetid
          
				CASE LV_ENTRIES
					
					/* ktora pozycja na liscie kliknieta */
					iListItem:= code
					/* sprawdzam DoubleClick oraz czy ten doubleclick jest na tym samym elemecie listy */
					IF ( DoubleClick (lastListClick.seconds, lastListClick.micros, seconds, micros )  AND (lastListClick.item = iListItem ))
						
						/* !!! jest double click na elemencie listy !!! */
							
					ENDIF
						
					/* zapamietuje dane ostatniego kliku na liscie, do kolejnej werydikacji */
					lastListClick.seconds := seconds
					lastListClick.micros := micros
					lastListClick.item := iListItem
						
				CASE ...
					
			ENDSELECT
				
		CASE ...
	ENDSELECT 
		
ENDWHILE
[#8] Re: Dwuklik na LISTVIEW (gadtools)

@Hexmage960, post #6

To co napisales to wczesniej sprawdzilem. Mimo ze IDCMP_GADGETDOWN znajduje sie w #LISTVIEWIDCMP to nie bedzie on oblsugiwany jesli gadget nie ma flagi GA_Immediate (ta flaga jest dostepna dla kilku gadgetow ale nie dla ListView).

Mimo wszystsko dwuklik z GADGETUP sprawuje sie bardzo dobrze jak widac na filmiku.

Czas ladowania pierwszej piosenki po uruchomieniu programu jest dosc dlugi ale na to nic nie poradze bo wszytsko trzeba poinicjowac itd
Musze jeszcze tylko wymyslec dlaczego pierwsza piosenka ma czasami uciety poczatek (nie zawsze).
[#9] Re: Dwuklik na LISTVIEW (gadtools)

@vojo, post #7

Wlasnie widze ze tez masz na GADGETUP
Czyli jest OK szeroki uśmiech
[#10] Re: Dwuklik na LISTVIEW (gadtools)

@peceha, post #9

IDCMP_GADGETDOWN ma glownie zastosowanie przy suwakach, przesuwaniu obiektow itp natomiast IDCMP_GADGETUP ma gleboki sens w tym przypadku - potrzebujesz informacji kiedy uzytkownik zwolnil przycisk myszki w obszarze danego przycisku (to jest faktyczne klikniecie) a nie kiedy go nacisnal. W przypadku nacisniecia, trzymajac przycisk myszki mozna wskaznik przesunac poza obszar przycisku i wtedy puscic - takie klikniecie przy IDCMP_GADGETDOWN zostanie zaliczone, choc nie jest faktycznym kliknieciem.
Do wykrycia podwojnego klikniecia uzyj DoubleClick z Intuition.
[#11] Re: Dwuklik na LISTVIEW (gadtools)

@docent, post #10

Dwuklik juz mam ogarniety.
GDAGETUP + DoubleClick() i dziala jak dzialac powinno.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem