Como Ocultar e Mostrar o Cursor do Mouse em Delphi

Como Ocultar e Mostrar o Cursor do Mouse em Delphi

Controlar a visibilidade do cursor do mouse pode ser útil em várias situações, como em jogos, aplicações de tela cheia, ou interfaces personalizadas. Em Delphi, podemos fazer isso utilizando a função ShowCursor da API do Windows. Este post mostrará como você pode ocultar e exibir o cursor do mouse programaticamente em Delphi.

Dicas de Delphi
Dicas de Delphi

Introdução

A função ShowCursor permite alterar a visibilidade do cursor do mouse. Ao passar True, você incrementa o contador interno do sistema que controla a visibilidade do cursor. Quando este contador é positivo, o cursor é exibido; quando é negativo, o cursor é oculto. A função MouseShowCursor que vamos implementar ajusta esse contador conforme necessário para garantir que o cursor esteja visível ou oculto.

Código-Fonte

Abaixo está a função MouseShowCursor, que recebe um valor booleano indicando se o cursor deve ser exibido (True) ou ocultado (False).

function MouseShowCursor(const Show: boolean): boolean;
// MouseShowCursor(false); { Oculta o cursor }
// MouseShowCursor(true); { Exibe o cursor }
var
  I: integer;
begin
  I := ShowCursor(LongBool(true));
  if Show then
  begin
    Result := I >= 0;
    while I < 0 do
    begin
      Result := ShowCursor(LongBool(true)) >= 0;
      Inc(I);
    end;
  end
  else
  begin
    Result := I < 0;
    while I >= 0 do
    begin
      Result := ShowCursor(LongBool(false)) < 0;
      Dec(I);
    end;
  end;
end;

Vamos analisar o código para entender como ele funciona.

Explicação do Código

  1. Declaração da Função
   function MouseShowCursor(const Show: boolean): boolean;

Esta linha declara a função MouseShowCursor, que recebe um parâmetro booleano (Show) e retorna um booleano indicando se a operação foi bem-sucedida.

  1. Variável de Controle
   var
     I: integer;

Aqui, declaramos uma variável I do tipo inteiro, que será usada para armazenar o estado do cursor.

  1. Chamada Inicial à API
   I := ShowCursor(LongBool(true));

Inicialmente, chamamos ShowCursor com LongBool(true) para obter o estado atual do cursor. Esta chamada também incrementa o contador interno do cursor.

  1. Bloco Condicional para Exibir ou Ocultar o Cursor
   if Show then
   begin
     Result := I >= 0;
     while I < 0 do
     begin
       Result := ShowCursor(LongBool(true)) >= 0;
       Inc(I);
     end;
   end
   else
   begin
     Result := I < 0;
     while I >= 0 do
     begin
       Result := ShowCursor(LongBool(false)) < 0;
       Dec(I);
     end;
   end;

O bloco if Show then trata da exibição do cursor:

  • Se o cursor deve ser exibido (Show é True), garantimos que o contador seja positivo.
  • Utilizamos um while loop para continuar chamando ShowCursor até que o contador seja positivo. O bloco else trata da ocultação do cursor:
  • Se o cursor deve ser ocultado (Show é False), garantimos que o contador seja negativo.
  • Utilizamos um while loop para continuar chamando ShowCursor até que o contador seja negativo.

Exemplo Prático

Vamos ver um exemplo de como usar essa função em um programa Delphi.

procedure TForm1.ButtonShowClick(Sender: TObject);
begin
  if MouseShowCursor(True) then
    ShowMessage('Cursor exibido com sucesso')
  else
    ShowMessage('Falha ao exibir o cursor');
end;

procedure TForm1.ButtonHideClick(Sender: TObject);
begin
  if MouseShowCursor(False) then
    ShowMessage('Cursor ocultado com sucesso')
  else
    ShowMessage('Falha ao ocultar o cursor');
end;

Neste exemplo, temos dois botões: um para exibir o cursor (ButtonShowClick) e outro para ocultar o cursor (ButtonHideClick). A função MouseShowCursor é chamada com True ou False conforme a ação desejada.

Conclusão

Controlar a visibilidade do cursor do mouse em Delphi é uma tarefa simples usando a função ShowCursor da API do Windows. Com a função MouseShowCursor, você pode facilmente ocultar ou exibir o cursor em suas aplicações, melhorando a experiência do usuário conforme necessário.

Esperamos que este tutorial tenha sido útil. Se tiver dúvidas ou sugestões, deixe um comentário abaixo!

Posts Similares