Newsgroup: it.comp.lang.delphi
Titolo: Click e Doppio Click





Ho notato che quando si genera un evento Dblclick, prima 
di esso viene COMUNQUE eseguito l'evento Click (se definito)


Stando così le cose non è possibile utilizzare entrambi gli 
eventi sullo stesso componente se questi devono essere eseguiti 
indipendentemente, perchè il doppio click chiama implicitamente il 
click.


Qualcuno sa dirmi se ho ragione econosce un "trucco"per 
evitare questo??


Grazie


    Francesco


    



Scusate x l'HTML

--
Posted from 
mta23-acc.tin.it
 [212.216.176.76] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG





Grazie
???
Il click semplice comporta un messaggio WM_LBUTTONDOWN, mentre un click
"doppio" comporta un WM_LBUTTONDBLCLK, quinti quanto stai dicendo non è
corretto.
Me sei sicuro che non sei tu a chiamare la procedura di click dall'evento
double click?
Posta il codice che ti da problemi e daremo un'occhiata.
Ciao
--
- Carlo -

corretto.
In Delphi, l'evento OnClick si scatena comunque prima dell'evento
OnDblClick, quindi quanto il nostro amico sta dicendo *e'* corretto.

> Qualcuno sa dirmi se ho ragione econosce un "trucco"per evitare questo??
Ciao, Potresti provare ad intercettare i messaggi wm_lbuttondown e
wm_lbuttondblclk
Non ho capito se ti interessa discriminare i due eventi sulla form o du un
componente.
Nel primo caso è abbastanza semplice e delphi ti viene incontro :
type TForm1 = Class (TForm)
   private
        procedure Click (Var M : TMessage); message wm_lbuttondown;
        procedure DBlClick (Var M : TMessage); message wm_lbuttondblclk;
  public
end;
Quelle 2 proc le implementi poi guardando la documentazione dei 2 messaggi.
Se invece devi discriminarle in un componente la cosa forse si complica un
po' perchè
devi subclassare la windowproc.
Non ho moltissimo tempo in questo momento e dato che non so esattamente cosa
ti serve,
se basta così bene, altrimenti perfavore riscrivi chiedendo info +
dettagliate (sorry!)
Ciao! Davide DG

OnDblClick, quindi quanto il nostro amico sta dicendo *e'* corretto.
Sinceramente ero talmente sicuro di quanto stavo dicendo che non ho
controllato...trattasi di Super-Bug!
In teoria prima di eseguire l'evento Click il compilatore dovrebbe attendere
il tempo "necessario" per eseguire un secondo click, tempo variabile e
settabile mediante il SO.
Chiedo scusa per l'errore, cmq mi sembra molto molto strano!


 via Mailgate.ORG Server - 
http://www.Mailgate.ORG
vedo quadruplo oppure ho letto già 4 volte questo msg?
--
Gna...@Wappi.com
ICQ# 76488613
http://gnaffy.tripod.com/





Ci vedi bene. Scusatemi ma ho fatto un po' di casino mentre lo 
spedivo.


Grazie per le vostre opinioni : in effetti io volevo non 
tirare in ballo i messaggi ma come pensavo non ho alternative per discriminare i 
2 eventi.


Grazie a tutti.



 controllato...trattasi di Super-Bug!
Dunque, se ben ricordo mi scontrai con 'sta cosa scrivendo
un'applicazioncina che si infilava nella TNA...
Non è un bug di Delphi, semplicemente il funzionamento standard di
Windows...
dal win32 SDK, voce WM_LBUTTONDBLCLK (nei remarks):
 Double-clicking the left mouse button actually generates four messages:
WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP again.
Io avevo aggiunto una variabile longint in cui mi annotavo l'ultimo click
del pulsante che mi interessava : ad ogni click controllavo il tempo (in ms
con la GetTickCount) trascorso dall'ultimo click, se era inferiore al tempo
di doppio click (che prendevo dal sistema, penso con la GetSystemMetrics o
SystemParametersInfo) allora lo consideravo doppio click...
Sinceramente non so dire quanto sia pulito come sistema ma funziona senza
problemi...
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

 devi subclassare la windowproc.
??? Puoi usare i message crackers anche all'interno di un componente...
e cmq, se lo fai dall'interno, al limite fai l'override della wndproc,
dubito che la sostituirei in toto...


 dubito che la sostituirei in toto...
Ummm ... si... forse comprendo... è un po' tardi e ormai ho già chiuso la
macchina con delphi...
ma credo di capire.. :)
Ciao! Davide DG

problemi...
Se ti consola ti posso dire che avrei agito allo stesso modo! :-)
Cmq non sapevo che anche GetSystemMetrics fornisse l'informazione relativa
al doppio click, in genere utilizzo SystemParametersInfo!
Ciao! :)
--
- Carlo -

 al doppio click, in genere utilizzo SystemParametersInfo!
No, infatti è solo la SystemParametersInfo che ti permette di ottenere quel
valore, non ero sicuro di quale delle due API fosse ma gran parte dei
parametri di sistema si possono accedere tramite quelle due quindi...


parametri di sistema si possono accedere tramite quelle due quindi...
Eh già, noto che anche GetSystemMetrics è bella grossa...
Ciao!
--
- Carlo -