2009-08-14 9 views
6

De temps en temps, j'ai besoin d'une interface graphique pour définir plages numériques, mais jusqu'à présent, je n'ai jamais vraiment trouvé un composant qui le fait bien.GUI pour définir les plages numériques dans Delphi

J'avons essayé les suivantes:

  • 2 TTrackbars: 1 pour min, max 1 pour

  • 2 TTackbars: 1 pour min, 1 pour la gamme

  • 2 TSpinEdit commandes pour taper les numéros manuellement

  • ttrackbar with range 1 Contrôle TTrackbar, avec un li ttle pour basculer entre le mode min et le mode max. En mode min j'ai mis selStart et en mode max j'ai mis selEnd (avec ShowSelRange réglé sur true).

La plupart des options nécessitent plus d'écrans que je ne le souhaite et elles ne sont pas intuitives.

Idéalement, je voudrais quelque chose qui fonctionne comme la barre de défilement dans Sony ACID. Vous pouvez cliquer et faire glisser 3 différents points à la min, max, ou les deux:

Awesome mspaint drawing

Y at-il un composant gratuit disponible pour définir une plage, ou peut quelque chose de similaire se fait à l'aide hors du -les composants VCL de boîte de manière créative?


Mise à jour

J'ai modifié TMkRangeSlider pour répondre à mes besoins. Cela fonctionne comme un charme maintenant. J'ai envoyé le composant modifié et la démo à l'auteur original.

TMkRangeSlider 1.1

Répondre

5

Que diriez-vous de quelque chose comme Range Slider, by Michael Kochiashvili. Il est un logiciel gratuit avec source, écrit pour Delphi 5 et est livré avec une démo:

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

Il ne se déplace pas min et max en même temps, mais puisque vous avez la source, vous pouvez probablement ajouter cette fonctionnalité si tu en as vraiment besoin.

+0

Cool, jamais vu auparavant. Juste téléchargé, et je vais jouer avec. –

+0

J'ai suivi votre conseil en prenant TMkRangeSlider et en le modifiant. Il fait exactement ce que je cherchais maintenant. Merci! –

1

L'utilisation d'un TScrollBox standard, il est techniquement possible de faire quelques tripoter manuelle de ses propriétés PageSize et position tout en faisant glisser son pouce autour (ScrollCode = scTrack dans son cas OnScroll) pour simuler le type d'interface utilisateur vous avez montré dans la capture d'écran ACID. Le problème est que 1) vous ne pouvez pas dessiner un TScrollBar propriétaire pour ajouter les lignes de glisser, et 2) il n'y a pas de moyen direct de déterminer quelle partie du pouce l'utilisateur maintient la souris sur (les extrémités par rapport au milieu). À moins que vous puissiez trouver des calculs assez fiables pour comprendre les décalages de pixels des bords gauche et droit du pouce en fonction de la Position et de la Taille de page actuelles par rapport au rectangle global du client, il vaut probablement mieux écrire simplement le vôtre. composant à la place, et alors vous pouvez le faire regarder et se comporter comme vous le souhaitez.

+0

Très bien, merci pour les conseils. C'est étrange que Delphi n'ait rien de pareil, parce que la définition de plages numériques est quelque chose que je dois faire tout le temps, dans toutes sortes d'applications ... –

+0

Le type d'interface utilisateur que vous décrivez n'est pas standard. C'est pourquoi TScrollBox ne le supporte pas nativement (parce que le système d'exploitation sous-jacent lui-même ne le supporte pas nativement) –

Questions connexes