1 Como detectar um mouse com rodinha Qua Fev 16, 2011 7:44 am
mistiyoda
Membro
Como detectar um mouse com rodinha
1 - Código Completo
Alguns componentes do Delphi, tais como TRichEdit e TForm permitem a você detectar a rolagem da rodinha do mouse e disparar uma ação de sua preferência. Porém, é sempre uma boa idéia verificar se o usuário está usando um mouse com rodinha.
O trecho de código a seguir usa a função GetSystemMetrics para verificar se um botão com rodinha está presente no sistema. Para testar, coloque um botão em um formulário, dê duplo-clique no botão e escreva o código abaixo no seu evento OnClick:
procedure TForm1.Button1Click(Sender: TObject);
begin
if GetSystemMetrics(SM_MOUSEWHEELPRESENT) <> 0 then
ShowMessage('Um mouse com rodinha está presente.')
else
ShowMessage('Um mouse com rodinha não foi detectado.');
end;
Execute o aplicativo e clique no botão. Se um mouse com rodinha estiver presente você verá a seguinte mensagem:
Um mouse com rodinha está presente
Se o mouse instalado não tiver a rodinha, a seguinte mensagem será exibida:
Um mouse com rodinha não foi detectado
2 - Entendendo a função GetSystemMetrics
A função GetSystemMetrics está definida no arquivo Windows.pas, (geralmente localizado em "C:\Arquivo de programas\Borland\Delphi#\Source\Rtl\Win\Windows.pas"). Vamos abrir este arquivo e procurá-la. Veja o protótipo:
function GetSystemMetrics(nIndex: Integer): Integer; stdcall;
Podemos ver que esta função pede um argumento do tipo inteiro e retorna um valor inteiro. Como você deve se lembrar, stdcall especifica que os parâmetros para a função serão passados da direita para a esquerda. Vamos agora procurar a definição desta função. Rolamos um pouco o arquivo Windows.pas e a encontramos:
function GetSystemMetrics; external user32 name 'GetSystemMetrics';
Hum! Mais uma chamada à API do Windows. Vamos aos arquivos de ajuda da API Win32 então. Veja o que encontramos:
int GetSystemMetrics(
int nIndex // system metric or configuration setting
);
De acordo com os arquivos de ajuda, esta função serve para obter várias medidas do sistema (largura e altura de elementos de exibição, por exemplo) e configurações do sistema. Todas as dimensões obtidas estão em pixels. Para o caso de configurações, a função retorna o valor 0 se o elemento testado não estiver presente. No caso do mouse com rodinha, o valor 0 indica que o mouse instalado não apresenta esta funcionalidade.
Para nossa sorte, o arquivo Windows.pas contém ainda todas as constantes necessárias para informarmos à função GetSystemMetrics o que queremos que ela nos retorne. Sem estas constantes, teríamos que fornecer valor inteiros, o que não seria nada prático.
Pesquisando a constante SM_MOUSEWHEELPRESENT no arquivo Windows.pas vemos que seu valor inteiro é 75. Desta forma, podemos fazer uma pequena modificação no código a título de exercício. Veja:
procedure TForm1.Button1Click(Sender: TObject);
begin
if GetSystemMetrics(75) <> 0 then
ShowMessage('Um mouse com rodinha está presente.')
else
ShowMessage('Um mouse com rodinha não foi detectado.');
end;
1 - Código Completo
Alguns componentes do Delphi, tais como TRichEdit e TForm permitem a você detectar a rolagem da rodinha do mouse e disparar uma ação de sua preferência. Porém, é sempre uma boa idéia verificar se o usuário está usando um mouse com rodinha.
O trecho de código a seguir usa a função GetSystemMetrics para verificar se um botão com rodinha está presente no sistema. Para testar, coloque um botão em um formulário, dê duplo-clique no botão e escreva o código abaixo no seu evento OnClick:
procedure TForm1.Button1Click(Sender: TObject);
begin
if GetSystemMetrics(SM_MOUSEWHEELPRESENT) <> 0 then
ShowMessage('Um mouse com rodinha está presente.')
else
ShowMessage('Um mouse com rodinha não foi detectado.');
end;
Execute o aplicativo e clique no botão. Se um mouse com rodinha estiver presente você verá a seguinte mensagem:
Um mouse com rodinha está presente
Se o mouse instalado não tiver a rodinha, a seguinte mensagem será exibida:
Um mouse com rodinha não foi detectado
2 - Entendendo a função GetSystemMetrics
A função GetSystemMetrics está definida no arquivo Windows.pas, (geralmente localizado em "C:\Arquivo de programas\Borland\Delphi#\Source\Rtl\Win\Windows.pas"). Vamos abrir este arquivo e procurá-la. Veja o protótipo:
function GetSystemMetrics(nIndex: Integer): Integer; stdcall;
Podemos ver que esta função pede um argumento do tipo inteiro e retorna um valor inteiro. Como você deve se lembrar, stdcall especifica que os parâmetros para a função serão passados da direita para a esquerda. Vamos agora procurar a definição desta função. Rolamos um pouco o arquivo Windows.pas e a encontramos:
function GetSystemMetrics; external user32 name 'GetSystemMetrics';
Hum! Mais uma chamada à API do Windows. Vamos aos arquivos de ajuda da API Win32 então. Veja o que encontramos:
int GetSystemMetrics(
int nIndex // system metric or configuration setting
);
De acordo com os arquivos de ajuda, esta função serve para obter várias medidas do sistema (largura e altura de elementos de exibição, por exemplo) e configurações do sistema. Todas as dimensões obtidas estão em pixels. Para o caso de configurações, a função retorna o valor 0 se o elemento testado não estiver presente. No caso do mouse com rodinha, o valor 0 indica que o mouse instalado não apresenta esta funcionalidade.
Para nossa sorte, o arquivo Windows.pas contém ainda todas as constantes necessárias para informarmos à função GetSystemMetrics o que queremos que ela nos retorne. Sem estas constantes, teríamos que fornecer valor inteiros, o que não seria nada prático.
Pesquisando a constante SM_MOUSEWHEELPRESENT no arquivo Windows.pas vemos que seu valor inteiro é 75. Desta forma, podemos fazer uma pequena modificação no código a título de exercício. Veja:
procedure TForm1.Button1Click(Sender: TObject);
begin
if GetSystemMetrics(75) <> 0 then
ShowMessage('Um mouse com rodinha está presente.')
else
ShowMessage('Um mouse com rodinha não foi detectado.');
end;