Jak ustawić pozycję w TScrollBar po kliknięciu w niego

0

Witajcie,

Mam dość nietypowy problem (pewnie banalny i albo jest zbyt późno i mózg mi się wyłączył albo używam niewłaściwego komponentu). Mianowicie potrzebowałbym w mojej aplikacji zrobić bardzo prostą rzecz. W aplikacji jest komponent TScrollBar, który ma np wartość od 1 do 100. Gdy nacisnę suwaczek lub przyciski strzałek to bez problemu się przewija, a zdarzenie OnScroll odpala właściwy kod. Nie mniej jednak potrzebowałbym aby jeśli użytkownik kliknie np na połowie szerokości paska aby TScrollBar.Position ustawił się na ... np 50?
Coś na wzór paska postępu na Youtube. Jak ktoś kliknie w połowie to się film przewija do połowy. Banalna rzecz ale niestety TScrollBar nie posiada zdarzenia, które zwracałoby odpowiednie koordynaty/pozycję klikniętą. Co prawda kombinuję z odczytem parametrów myszki MouseCoord ale jest to trochę sztuka dla sztuki i wierzę, że da się to zrobić prościej. Czekam na wasze sugestie.

Pytanie nr dwa. Standardowy TScrollBar posiada strzałki. Czy da się jakoś je zastąpić np + i - lub ikonkami bez nadpisywania zdarzenia OnPaint? Może polecicie jakiś lepszy komponent niż TScrollBar? Finalnie moje pytanie może wydawać się jako straszne podstawy ale jako programista doszedłem już do etapu gdzie nie chce mi się wymyślać koła od nowa i czasami wolę nawet zapłacić za komponent niż poświęcić x godzin na oprogramowanie standardowego narzędzia (jak już kiedyś wspominałem trzeba w każdym projekcie oszacować co się bardziej opłaca - koszt zakupu narzędzia czy ilość roboczo(płacowo)godzin na zrobienie tego po swojemu).

Będę wdzięczny za wszelkie instrukcje

0

Wiele nie pomogę, bo z tego komponentu nie korzystałem (nawet nie mam go na palecie komponentów), ale IMHO szybciej było by napisać własny komponent, niż próbować przerobić ten istniejący, skoro potrzebujesz i customową funkcjonalność, i customowy wygląd.

1

@woolfik: byyyuuuooo. No żeby stara gwardia nie szukała. Dokładnie o to samo pytałem tutaj:
ScrollBar z symulowanym naciśnięciem Shifta. :)

0

ScrollBar ma właściwość LargeChange - możesz zmienić ze skoku 1 na np. 10 to będziesz szybciej przy 50.
Jak nie pasuje ci taki wygląd to może jeszcze przypadnie ci do gustu TrackBar - ma on też kilka właściwości do ustawiania wyglądu i działa tak jak chcesz (zaznaczenie jest natychmiastowe po kliku).

//pośpieszyłem się trochę z tym zaznaczaniem - też dawno tego komponentu nie używałem :P

2

Można też użyć gotowego rozwiązania. Jest darmowy komponent ATScrollBar http://www.torry.net/pages.php?id=160 który przewija po kliknięciu i obsługuje OwnerDraw (dla wszystkich elementów w tym strzałek oczywiście) więc zapewne łatwo byłoby także zmienić strzałki na coś innego.

0

Olesio muszę przyznać, że Twój sposób (z Twojego linka) działa bez problemu co prawda wymaga to odrobinę roboty aby przerobić to na Vertical ale się da ... nie mniej jednak nie podoba mi się to rozwiązanie nie pytaj dlaczego bo zbyt długo tłumaczyć. kAzek tutaj już bliżej. Niestety ATScrollBar to zwykły Panel więc rzeźba jeszcze większa niż w przypadku mojego i Olesia rozwiązania ale dzięki Twojemu linkowi z pewnością wybiorę coś dla siebie. Jak znajdę jakiś fajny komponencik (lub przerobię swój) to wrzucę go w temacie.

2

No i znalazłem rozwiązanie. Ten pakiet komponentów: http://www.tmssoftware.com/site/
posiada komponent o nazwie TAdvSmoothScrollBar do którego dorobiłem tylko zdarzenie OnClick i mam to co potrzebowałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1