Procurando uma maneira de ter um “botão Hover” para expandir uma seção

StackOverflow https://stackoverflow.com/questions/159262

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um painel de fluxo que estou adicionando itens extras para ele em tempo de execução com base em se eles escolheram para mostrar todos os itens. isso é tudo funciona bem; a expansão é controlado por um botão da barra de ferramentas.

o problema é que gostaríamos que o usuário seja capaz de mover seu mouse sobre o sinal "+" para expandir a seção.

text alt

Inicialmente, eu olhei para TSpeedButton (OnMouseEnter), mas mesmo quando é "Flat", o retângulo de foco ainda mostra e assim o glifo não é centralizado. O principal problema com esta solução é a sua aparência.

Então olhei para fazer um descendente de TImage. que é um pouco "não convencional", mas ele iria trabalhar. em OnMouseEnter ou OnClick, seria alternar um boolean interna bandeira "Expanded" e, em seguida, carregar a imagem apropriada de um recurso. eu tenho uma antipatia para soluções não convencionais como essa.

i precisa adicioná-lo a algumas telas diferentes, por isso é provavelmente prudente para mim ter / construir um componente para isso. eu tenho JVCL mas eu não vejo nada de improviso adequado.

Obrigado por seus comentários / help!

Foi útil?

Solução

Eu sempre gostei da abordagem usada pelo ModelMaker Código Explorer.

Por exemplo, quando você está adicionando um novo método, algumas coisas raramente utilizado é exibido em colapso ( 'Opções e directivas' na imagem abaixo).

text alt
(fonte: 17slon.com )

Quando você passar o mouse sobre o texto, você percebe que ele é realmente um botão plana. (Exceto que não é - eu acredito que Gerrit faz alguma mágica pintura feita sob encomenda aqui).

text alt
(fonte: 17slon.com )

Quando você clica neste botão, aparece um painel. Botão ainda está lá, mas com uma nova imagem. Você pode clicar nele para fechar o painel.

text alt
(fonte: 17slon.com )

O estado deste botão de alternância é preservado entre as sessões. IOW, mesmo se você reiniciar o Delphi, próximo tima você invocar 'Adicionar método', o 'Opções e directivas' painel irá aparecer exatamente como você deixou a última vez.

Outras dicas

Eu tenho uma antipatia para soluções não convencionais como essa.

Ao longo dos últimos anos, tenho crescido um pouco suspeito de não convencional UI soluções - que é o que você parece estar criando aqui. Porque não usar um botão que o usuário realmente tem que clique ? Isso parece ser muito mais comum no uso de software I, seja MS Office ou utilitários de programação. Além disso, eu faria o botão um pouco maior: na imagem, ele realmente parece ser uma coisa pequenina que você tem a meta com o cursor do mouse. Oh bem, e se eu estou incomodando com conselhos que você não pediu qualquer maneira, por que não dar-lhe ">>" como uma legenda em vez de "+"? E se você quiser dar-lhe uma legenda textual com um mnemônico assim, seria realmente ser teclado acessível. Tudo isso deve fazer a sua UI melhor e mais intuitiva. Eu acho.

Peço desculpas por não responder a sua pergunta, mas eu espero que você vai gastar 2 minutos pensando se seus usuários seria realmente preferem esta solução: -)

Boa sorte!

Na verdade, acho que usando um TImage nesta situação é bastante convencional. Tenho visto muitas pessoas sugerem usando o TImage, quando quer o TButton, ou qualquer um dos seus associados não têm a quantidade certa de controle para o que o desenvolvedor estava tentando fazer.

Você tentou uma TBitBtn? Eu acho que quando você se livrar do texto centra-se qualquer imagem que você tenha associados. Eu verifiquei apenas em Delphi 6, tudo o que tenho instalado nesta máquina, e tinha o evento MouseMove.

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