2009-08-14 15 views
6

Una volta ogni tanto ho bisogno di una GUI per impostare intervalli numerici, ma finora non ho mai trovato nessun componente che lo faccia bene.GUI per impostare intervalli numerici in Delphi

Ho tentato i seguenti:

  • 2 TTrackbars: 1 per min, 1 per max

  • 2 TTackbars: 1 per min, 1 per la gamma

  • 2 TSpinEdit controlli per digitare manualmente i numeri

  • ttrackbar with range 1 TTrackbar control, con un pulsante sottile per passare dalla modalità min alla modalità max. Nella modalità min ho impostato selStart e in modalità max ho impostato selEnd (con ShowSelRange impostato su true).

La maggior parte delle opzioni richiede più spazio sullo schermo di quanto mi piacerebbe e non sono intuitive.

Idealmente, vorrei qualcosa che funziona come la barra di scorrimento in Sony ACID. È possibile fare clic e trascinare 3 diversi punti al min, max, o entrambi:

Awesome mspaint drawing

c'è qualche componente libero a disposizione per impostare un intervallo, o può qualcosa di simile essere fatto utilizzando out-of-the -box componenti VCL in modo creativo?


Aggiornamento

ho modificato TMkRangeSlider per soddisfare le mie esigenze. Funziona come un fascino ora. Ho inviato il componente modificato e la demo all'autore originale.

TMkRangeSlider 1.1

risposta

5

ne dite qualcosa come Range Slider, by Michael Kochiashvili. E 'freeware con source, scritto in Delphi 5 e viene fornito con una demo:

alt text http://www.kochini.com/dcomp/rs/ttrian.jpg

Non si muoverà min e max contemporaneamente, ma dal momento che hai la fonte, probabilmente si potrebbe aggiungere che la funzionalità se ne hai davvero bisogno.

+0

Cool, mai visto prima. L'ho appena scaricato e ci giocherò. –

+0

Ho seguito il tuo consiglio prendendo TMkRangeSlider e modificandolo. Fa esattamente quello che stavo cercando ora. Grazie! –

1

Utilizzando uno standard TScrollBox, è tecnicamente possibile fare qualche fiddling manuale delle sue proprietà pageSize e Position mentre trascini il pollice muoversi (ScrollCode = scTrack nell'evento OnScroll) per simulare il tipo di interfaccia utente hai mostrato nello screenshot ACID. Il problema è che 1) non è possibile il proprietario: disegnare un TScrollBar per aggiungere le linee di trascinamento e 2) non esiste un modo diretto per determinare quale porzione del pollice l'utente sta tenendo premuto con il mouse (le estremità rispetto al centro). A meno che non sia possibile ottenere calcoli abbastanza affidabili per calcolare gli offset dei pixel dei lati sinistro e destro del pollice in base alla posizione corrente e al valore di PageSize in relazione al rettangolo del client, allora probabilmente è meglio scrivere semplicemente i propri componente invece, e quindi puoi farlo sembrare e comportarti in ogni caso.

+0

OK, grazie per il consiglio. È strano che Delphi non abbia nulla di simile, perché impostare intervalli numerici è qualcosa che devo fare sempre, in ogni tipo di applicazione ... –

+0

Il tipo di interfaccia utente che stai descrivendo non è standard. Questo è il motivo per cui TScrollBox non lo supporta in modo nativo (perché il sistema operativo sottostante non lo supporta in modo nativo) –