Pergunta

Em Delphi, eu adicionei um componente da barra de rolagem (orientada vertical) para o lado direito do meu formulário.

Eu adicionei um evento de barra de rolagem OnChange para que eu possa alterar a vista da forma e da posição do polegar barra de rolagem quando o usuário clica no botão UpArrow ou DownArrow com o mouse, e isso funciona bem.

Mas o evento OnChange só parece se desencadeou quando o botão do mouse é pressionado inicialmente na seta.

Eu observo todos os controles de barra de rolagem repetir o comando e continuar a rolagem enquanto os restos do mouse pressionado sobre a seta, e eu gostaria de implementar esse comportamento.

Assim como eu posso facilmente detectar se o usuário não se moveu o mouse e continua a pressionar o botão do mouse, enquanto os restos do mouse sobre a seta?


Conclusão. De alguma forma, algo na barra de rolagem no meu projeto foi corrompido. Depois eu apaguei o ScrollBar, e acrescentou que, novamente, o problema desapareceu.

Este é um daqueles complicados que me levou muito tempo para resolver. Obrigado pela ajuda. Estou fechando esta questão.

Foi útil?

Solução

Use o OnScroll evento.

O código a seguir adiciona 'xxx' com um memorando enquanto o mouse é pressionado sobre o botão de seta de rolagem. Testado com Delphi 6.

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
    Memo1.Lines.Add( 'xxx' );
end;

Outras dicas

A maneira usual de alça auto-repetição é permitir que um TTimer e verificar na OnTimer () manipulador de eventos se as necessidades de ação a ser executada novamente, e para desactivar o temporizador se não. Se você precisa de código de exemplo, eu me lembro que o SynEdit controle usou uma técnica semelhante para deslocamento automático no arrasto e operações de cair.

Se um componente não encapsular o comportamento que você está procurando e você não pode facilmente simular o comportamento com os métodos disponíveis você deve realmente subclasse o componente mais próximo que faz a maioria do que você precisa e adicionar os comportamentos que estão faltando.

Eu sei que algum trabalho extra está envolvido, mas é realmente o melhor caminho a percorrer. Agora com Delphi, eu me lembro que componentes subclasse necessário um pouco de trabalho extra, assim como para poder ser utilizado a partir do IDE para o projeto forma, talvez isso mudou desde a versão 7.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top