Newsgroup: it.comp.lang.delphi
Titolo: Gestire il mouse

Ciao a tutti
Avrei bisogno di sapere, in qualsiasi momento dell'esecuzione del mio
programma, lo stato del mouse (coordinate e stato dei pulsanti) e quale
componente sta "sorvolando".
Grazie!
  Fodox

 componente sta "sorvolando".
Hai bisogno di un hook systemwide di tipo WH_MOUSE. Cerca SetWindowsHookEx()
sulla documentazione Microsoft.
--
- Carlo -
cbertu81(at)libero(dot)it


Va un po' fuori dalle mie capacita' gestirla in questo modo; credevo ci
fosse una procedura di Delphi ( io ho la versione 5 ) del tipo
GetMouseStatus chiamata diversamente.... vabe' grazie uguale!
Ciao
  Fodox

Esiste la variabile Mouse contenuta nella unit Controls, che riporta la
posizione del mouse con la proprietą CursorPos.
Se metti un Timer e una Label sulla form, puoi vedere come muovendo il mouse
su tutto lo schermo hai sempre la posizione aggiornata. Ti riporto l'evento
onTimer:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption:=IntToStr(Mouse.CursorPos.X)+' -
'+IntToStr(Mouse.CursorPos.Y)
end;
Ovviamente il resto dipende da cosa devi fare, potresti usare gli eventi del
mouse di ogni singolo componente o ricercare la posizione su un componente
per esempio scorrendoti tutti i componenti di una determinata Form per
vedere se la posizione si trovi nel range del componente stesso.
Altrimenti devi provare a cercare su Torrys ( 
http://it.torry.net
 ) qualcosa
a riguardo al mouse, ci sono dei componenti gią fatti che ti gestiscono il
mouse, ma devi cmq lavorarci vicino per adattarlo.
Ciao,
  Fabio

domanda:
hai cercato TMouse nella help in linea?
Hai letto le sue prop e i suoi metodi?
Bye
A.

programma, lo stato del mouse (coordinate e stato dei pulsanti) e >quale 
componente sta "sorvolando".
Scarsa in quanto a efficienza, se i componenti sono molti, ma puoi seguire 
la strada seguente, sfruttando l'evento OnIdle dell'applicazione (provato e 
funziona):
function GetComponentFromHandle(AHandle: HWND;
                                AParent: TComponent): TWinControl;
var
  I: Integer;
begin
  Result := nil;
  for I := 0 to AParent.ComponentCount-1 do
  begin
    if (AParent.Components[I] is TWinControl) and
       ((AParent.Components[I] as TWinControl).Handle = AHandle) then
    begin
      Result := AParent.Components[I] as TWinControl;
    end;
  end;
end;
{$J+}
procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
  var Done: Boolean);
const
  OldX: Integer = 0;
  OldY: Integer = 0;
var
  H: HWND;
  C: TComponent;
begin
  H := WindowFromPoint(Mouse.CursorPos);
  C := GetComponentFromHandle(H, Form1);
  with Mouse.CursorPos do
  begin
    if (OldX <> X) or
       (OldY <> Y) then
    begin
      OldX := X;
      OldY := Y;
      if C = nil then
        Label1.Caption := Format('Mouse: (x,y) = (%d,%d)',
                                 [X, Y])
      else
        Label1.Caption := Format('Mouse: (x,y) = (%d,%d) (%s)',
                                 [X, Y, C.Name])
    end;
  end;
end;
-------------------------------
Message Posted by  <dedGateway>
http://www.dedonline.com/forump

 ha scritto nel messaggio
news:ah698p$ku6$1...@newsreader.mailgate.org...

Si questo assomiglia a qualcosa che avevo in mente in maniera nebulosa.
Adesso ci provo, grazie per lo spunto!
Ciao
  Fodox