Come rilevare che il mouse è impassibile e il pulsante ancora premuto?
-
22-08-2019 - |
Domanda
In Delphi, ho aggiunto un componente Scrollbar (orientata in verticale) sul lato destro della mia forma.
Ho aggiunto un evento Scrollbar OnChange in modo da poter modificare la visualizzazione della forma e la posizione della barra di scorrimento del pollice, quando l'utente fa clic sul tasto Freccia su o Freccia giù con il suo mouse, e questo funziona bene.
Ma l'evento OnChange sembra solo per ottenere innescato quando il pulsante del mouse viene inizialmente premuto sulla freccia.
Ho notato tutti i controlli barra di scorrimento ripetere il comando e continuare a scorrere mentre il mouse rimane premuto sulla freccia, e mi piacerebbe implementare questo comportamento.
Così come posso facilmente rilevare se l'utente non si è mosso il mouse e continua a premere il pulsante del mouse mentre il mouse rimane sopra la freccia?
Conclusione. In qualche modo qualcosa nella barra di scorrimento nel mio progetto ha danneggiato. Dopo che ho cancellato la ScrollBar, e ha aggiunto di nuovo, il problema scomparve.
Questa è una di quelle difficili che mi ha portato un sacco di tempo per risolvere. Grazie per l'aiuto. Sto chiudendo questa domanda.
Soluzione
Utilizzare la OnScroll evento.
Il codice seguente aggiunge 'xxx' per un promemoria fino a quando il mouse viene tenuto premuto il pulsante di scorrimento freccia. Testato con Delphi 6.
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
Memo1.Lines.Add( 'xxx' );
end;
Altri suggerimenti
Il solito modo di gestire l'auto-ripetizione è quello di consentire un TTimer e il check-in OnTimer () gestore di eventi se l'azione deve essere nuovamente eseguito, e per disattivare il timer, se non. Se avete bisogno di codice di esempio, mi sembra di ricordare che il href="http://synedit.sourceforge.net/" rel="nofollow noreferrer"> SynEdit controllo
Se un componente non incapsulare il comportamento che stai cercando e non si può facilmente simulare il comportamento con i metodi disponibili si dovrebbe davvero sottoclasse la componente più vicina che fa la maggior parte di ciò che è necessario e aggiungere i comportamenti che mancano.
So che qualche lavoro extra è coinvolto, ma è davvero il modo migliore per andare. Ora con Delphi, mi sembra di ricordare che i componenti sottoclassi bisogno di un po 'di lavoro extra oltre ad essere in grado di essere utilizzato dall'IDE per la progettazione forma, forse questo è cambiato dalla versione 7.