Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ScrollBar Delphi - problem

01 Sty 2008 13:08 3860 11
  • Poziom 13  
    Witam Wszystkich

    Mam problem ze zrobieniem pewnej rzeczy w Delphi.
    Otóż chodzi mi oto żeby przy obliczaniu przesunięcia względnego scrollbar'a w lewa stronę delta była ze znakiem dodatnim a w prawą ze znakiem ujemnym. Na razie do tego celu używam przycisku ale chciałbym go wyeliminować ponieważ trzeba go klikać przy każdej zmianie kierunku przesuwania.
  • Użytkownik usunął konto  
  • Spec od GSM
    A jeśli chcesz mieć tylko względny wynik (lewo/prawo od poprzedniego położenia) z liczbach ujemno/dodatnich to zapamietaj poprzednie położenie i odejmuj nową wartość od poprzedniej - wtedy kierunek ruchu odpowiada znakowi.
  • Poziom 13  
    Roch Brada napisał:
    Nie bardzo rozumie co masz na myśli ;)

    Przesuwając scrollbar w lewo chcesz mieć wartości ujemne, a przesuwając w prawo wartości dodatnie?
    To ustaw właściwość min na -100, a max na 100 i masz problem z głowy.


    No tak o tej możliwości doskonale wiem, ale to i tak jest odczyt bezwzględnego położenia scorllbara. Pozatym nie zawsze przesuwanie scorllbara w lewą stronę da znak ujemny np w przedziale 50-75 przesuniecie scrollbara od 75 do 50 nie spowoduje wyświetlenia wartości ujemnej. Może nie do końca zbyt jasno wyraziłem mój problem, postaram sie jaśniej napisać.

    Odczyt bezwzględny polega na tym że bezpośrednio odczytujemy pozycje scrollbara. Wtedy jeśli mamy zakres ruchu od -100 do 100 jednostek, to na przykład jeżeli przesuwamy scroollbar w prawo to zawsze mamy wartości większe od zera i rosną one wraz ze wzrostem położenia suwaka w prawą stronę. Odwrotnie jest kiedy przesuniemy suwak w stronę lewą poniżej punktu 0.

    Fyszo napisał:

    A jeśli chcesz mieć tylko względny wynik (lewo/prawo od poprzedniego położenia) z liczbach ujemno/dodatnich to zapamietaj poprzednie położenie i odejmuj nową wartość od poprzedniej - wtedy kierunek ruchu odpowiada znakowi.


    Dokładnie chodzi mi o takie rozwiązanie problemu jak napisałeś, już to zastosowałem w załączonym przykładzie w moim pierwszym poście.
    Owe "zapamiętywanie" właśnie realizuje za pomocą przycisku, ale klikanie przyciskiem przy każdej zmianie położenia suwaka jest dość kłopotliwe i dlatego proszę Was o pomoc w tej sprawie. Mój problem rozwiązało by oddanie opcji OnMouseDown ew. OnMouseUp ale scorllbar niestety nie posiada tych zdarzeń w swojej palecie. Dlatego właśnie muszę korzystać kłopotliwego butona.

    Poniżej zamieszczam krótki przykład, obliczania przesunięcia względnego suwaka.

    1: wartość suwaka (0)
    2: przesuwamy suwak w prawo o 10; przesunięcie względne 10-0=10; aktualna pozycja 10
    3: znowu przesuwamy suwak w prawo tym razem o 30; przesunięcie względne 40-10=30; aktualna pozycja 40
    4: przesuwamy suwak w lewo o 10; przesunięcie względne 30-40=-10; aktualna pozycja 30
    5: przesuwamy suwak w lewo o 60; przesunięcie względne 30-30+(-60)=-60; aktualna pozycja -30


    Proszę samemu spróbować postępować według moich wskazówek z przykładu podanego powyżej, przy czym przy przechodzeniu między punktami 1-5 proszę zawsze klikać przycisk ZAPISZ.
    Od matematycznej strony jest to banalne ponieważ liczymy tylko zmianę względną położenia w płaszczyźnie jednowymiarowej.
    Mój problem polega na tym aby to obliczanie zautomatyzować, aby obliczanie odbywało się bez żądnego klikania czy tym podobnych czynności, ale przy samym przesuwaniu suwaka.

    Mam nadzieje że bardziej przybliżyłem mój problem nie będę się wdawał w dodatkowe wyjaśnienia aby nie zapętlić problemu.
    Poniżej zamieszczam bardziej obrazową wersję.
  • Poziom 20  
    witam , skorzystaj z "wydarzenia" dla scrollbar1 : OnMouseEnter , u mnie działa
  • Poziom 13  
    A mógłby kolega zamieścić kawałek kodu, albo krótki opis jak sie do tego dostać. Bo na zakładce Events (scrollbar) nie mogę z najść tego zdarzenia dla scrollbar'a'
  • Pomocny post
    Poziom 20  
    pod tym zdarzeniem zostawiłem przypisane to Twoje a:=scrollbar1.position;
    Zdarzenie to jest w zakładce events. Ja korzystam z Turbo Delphi 2005.

    Dołączam źródła.

    Pozdrawiam.
  • Poziom 13  
    Kolego Stepel klikam pomógł ponieważ przedstawiłeś mi takie rozwiązanie o jakie mi chodzi, oczywiście zdarzenie OnMouseEnter rozwiązuje mój kłopot.

    Jednak pojawił się mały problem z tym związany kolega korzysta z Turbo Delphi 2005 (widocznie jest bardziej zaawansowany od niektórych szkolnych wersji testowych delphi) ja osobiście korzystam z Delphi 7 (jakaś wersja testowa) i tam niestety na zakładce events nie ma tej opcji. A przy kompilacji wyskakuje błąd, brak obsługi zdarzenia OnMouseEnter.

    Mam do kolegi jeszcze takie pytania:
    -Czy programowanie w Turbo Delphi bardzo się rożni od pisania programów w tradycyjnym Delphi i jakie są możliwości Turbo Delphi ?
    -Jak wygląda sprawa edytowania projektów napisanych w tradycyjnym delphi w Turbo Delphi, czy niema jakiś niezgodności czy problemów ?

    No cóż pozostaje mi probować dale,j szukać dalej jak rozwiązać mój problem w moich warunkach to znaczy przy barku OnMouseEnter :-(. Ewentualnie przerzucić sie na Turbo Delphi.
  • Pomocny post
    Poziom 20  
    Turbo Delphi nie różni się przy pisaniu programów i nie miałem problemów z otworzeniem projektu np z Twojej wersji programu. Dodatkowo Turbo Delphi jest w pełni darmowym programem w wersji pełnej. Jego mankamentem jest chyba brak możliwości instalowania komponentów. Być może dlatego u Ciebie nie ma tego zdarzenia ponieważ jest to właśnie wersja testowa.

    Kolego, ewentualnie dodać do zdarzenia formy:

    TForm1.FormMouseActivate

    też przypisanie wartości Scrollbar1 do zmiennej a.

    Pozdrawiam.
  • Poziom 13  
    FormMouseActivate - niestety tej opcji tez nie mogę użyć bo jej nie mam.

    Już pobieram sobie Turbo Delphi, za kilka dni będę miał chwilkę czasu to sie pobawię i mam nadzieje ze TD mi sie spodoba.


    Pozdrawiam
  • Poziom 20  
    Myślę, że Ci się spodoba. Poza tym przyczyną braku tych wydarzeń chyba było to, że miałeś wersje testową. Wydaje mi się, że powinny być jeśli byłaby pełna.

    Pozdrawiam
  • Poziom 13  
    Też tak myślę, a brak niektórych zdarzeń powoduje czasami problemy nie do rozwiązania :-)