Newsgroup: it.comp.lang.delphi
Titolo: intercettare evento particolare

Come è possibile intercettare l'evento che intercorre alla pressione del 
tasto sinistro su di un bottone che non permette poi, tenendo premuto il 
tasto stesso di ottenere altri eventi spostandosi sugli altri bottoni?
Ho intercettato tutti gli eventi di pressione tasti e bottoni, ma non è 
tra questi.
Questo mi serve per creare una tastiera da modificare con il touch screen 
e quindi il click su un tasto non deve impedirmi di spostarmi sugli altri 
ed ottenere la loro selezione, per poi scrivere il risultato solo quando 
avviene un mouseup...
Spero di essere stato chiaro :(
--- posted by geoForum on 
http://www.delphiedintorni.it

 bottoni, ma non h tra questi.
Puoi provare con OnMouseDown/OnMouseUp.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto programmatore Delphi?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/


Già provati, ma non sono quelli...


 Gi` provati, ma non sono quelli...
Che cosa intendi per "gia' provati"?
Posta un po' di codice, perche' dalla descrizione che hai fatto,
OnMouseDown/OnMouseUp sono esattamente quello che cerchi.



Ho intercettato a mano tutti i messaggi di mousedown/up e click vari 
disabilitandoli, ma continua a fare lo stesso problema. In pratica metti 
due tasti su un form, clicca sul primo e senza rilasciare il tasto del 
mouse spostati sul secondo, fino a che non rilasci il bottone, non 
avviene nessun altro evento. Quindi devo inibire questo funzionamento, 
che non dipende da mousedown, o mouseup, ne da cliclk ne da 
doubleclick...


 ne da doubleclick...
Implementa i metodi OnMouseDown/OnMouseMove/OnMouseUp del primo bottone
e crea un codice per capire quando il mouse si sta muovendo sopra
all'altro bottone (es. PtInRect(()) ed eventualmente richiama il
relativo metodo OnClick().
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?



Non č semplice se i tasti diventano un centinaio, come nel caso di una 
tastiera, e poi quell'evento mi blocca gli altri eventi, quindi non posso 
piů utilizzare altri onclick


 non posso piy utilizzare altri onclick
In verita' e' piuttosto semplice, basta gestire la cosa con un po' di
logica ed, ovviamente, non creare i pulsanti a design time.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto sviluppatore Delphi?



Puoi farmi un esempio di codice funzionante anche con soli 3 tasti???



Quando premi un bottone viene eseguito un: SetCapture e un 
ReleaseCapture quando lo rilasci, per questo il mouse non ha alcune 
effetto sulle altre finestre fino a che non lo rilasci. Windows spedisce 
un messaggio WM_CAPTURECHANGED quando lo stato capture del mouse cambia.
Controlla la Guida Win32 Developer's References di Delphi.


 Puoi farmi un esempio di codice funzionante anche con soli 3 tasti???
No, mi dispiace.


Come intercetto questo SetCapture per dirgli di rilasciare sempre il 
controllo???



Devi intercettare il Messaggio: WM_CAPTURECHANGED.
Per rilasciare il mouse è sufficente richiamare la procedura 
ReleaseCapture.
Una volta rilasciato il mouse non verranno più gestiti gli eventi 
generati dal mouse sul bottone, es. onClick.


 tasto stesso di ottenere altri eventi spostandosi sugli altri bottoni?
tanto x iniziare, di che classe di bottoni stiamo parlando? :-|
A.


Non ha importanza, quello posso deciderlo tranquillamente io.


generati dal mouse sul bottone, es. onClick.
Non riesco a dargli il ReleaseCapture, che non è un comando :(


>Devi intercettare il Messaggio: WM_CAPTURECHANGED.
L'evento WM_CAPTURECHANGED no avviene sui tasti, ma solo sul form...


> Non ha importanza, quello posso deciderlo tranquillamente io.
lo speedbutton ha una property down...
A.


ReleaseCapture è una funzione Win32, prova questo codice:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
end;
Come ti dicevo questo ha l'inconveniente di annullare tutti gli eventi 
sul bottone (da qualsiasi classe esso derivi), quindi l'evento onClick 
non funzionerà più. 
Credo che tu ti debba creare un tuo componente!


Credo che tu ti debba creare un tuo componente!
Ci siamo quasi, solo che mi rimane comunque il tasto premuto, come faccio 
a farlo rialzare quando mi sposto fuori dal tasto???


Invia un semplice WM_LBUTTONUP al controllo con SendMessage, dovrebbe 
funzionare