Scrollbar



  • vielen Dank für die schnelle Antwort!

    funktioniert soweit alles gut.

    Hätte da noch eine weitere Frage:

    da meine Scrollbar dynamisch ist, ändert sich die Größe meiner Scrollbar bzw. der Maximale Positionswert ändert sich. Nun wollte ich diesen Wert abfragen.
    Hab das wie folgt versucht:

    int iMaxWert = ScrollBarHorizontal->Position->Max;

    Jedoch sagt mein Compiler folgendes dazu:

    [C++ Fehler]..: E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich

    hab gedacht der Positionswert sei ein Integer?



  • ok hat sich erledigt 🙂



  • Hallo,
    hab ein weiteres Problem mit dem Scrollbalken: ich möchte die Position des Balkens bestimmen indem ich über das Event OnScroll eine Zuweisung mache:

    Scrollbar->Position=Wert;

    Nun habe ich fogendes Problem: Sobald ich auf die Pfeiltasten des Scroll balkens klicke,
    wird das OnScroll Event ausgeführt was auch korrekt ist.
    Jedoch wird dieses Event 2 mal aufgerufen, obwohl ich nur einmal auf die Pfeiltaste geklickt habe.
    Durch diesen dopellten Aufruf wird dann Scrollbar->Position auf einen falschen Wert gesetzt.
    Jedoch kann ich über einen einfachen Klick event eines Buttons beispielsweise Scrollbar->Position richtig setzten, nur nicht über OnScroll.

    Hat jemand ein ähnliches Problem oder weiß jemand warum sich OnScroll so verhält?

    Gruß Crabs



  • mr_crabs schrieb:

    ich möchte die Position des Balkens bestimmen indem ich über das Event OnScroll eine Zuweisung mache:

    Scrollbar->Position=Wert;

    Ist das nicht genau verkehrt herum!?



  • die Zuweisung

    ScrollBar->Position=Wert;

    ist korrekt.

    Wert hat einen Wertebereich von 0-100.

    Dieser Wert wird mittels einer meiner Funktionen die unter OnScroll aufgerufen wird, zugewiesen. d.h. sobald eine Pfeiltaste gedrückt wird, wird OnScroll aufgerufen und in meiner eigenen Funktion möchte ich ScrollBar->Position mit dem neuen Wert zuweisen, was leider nicht funktioniert.



  • Was Jansen hier meint ist, solltest du nicht der variable Wert etwas zuweisen?
    etwa so

    Wert=ScrollBar->Position;
    


  • ich möchte ja die Position des Scrollbalkens beeinflußen, die ich zuvor berechnet habe und in der Variable Wert speichere. Diese Größe soll dann bei jedem OnScroll Event direkt zugewiesen werden. d.h. ich möchte nicht die Position auslesen, sondern ich möchte die Position schreiben.



  • Hallo,

    es macht doch aber keine Sinn IM OnScroll einen neuen OnScroll aufzurufen?!

    Sobald du ScrollBar->Position schreibst wird der OnScroll erneut ausgeführt! Das das keine Endlosschleife ergibt wundert mich.

    mfg, Micha



  • RandomAccess85 schrieb:

    Das das keine Endlosschleife ergibt wundert mich.

    Das ist wahrscheinlich sogar eine, nur eben keine Endlosrekursion, da für das Event eine Nachricht gesendet wird, und die Nachrichten werden sukzessiv abgearbeitet.



  • Bzw. wenn der Wert sich nicht geändert hat, wird kein OnScroll gesendet. Zumindest ist das an vielen anderen Stellen so implementiert...

    mfg
    xXx



  • Entweder ich habe meine Vorgehensweise falsch beschrieben oder ich habe die Sache mit OnScroll falsch verstanden.

    Ich erklärs mal von Anfang an:
    ich habe einen Scrollbalken, der hat 2 Pfeiltasten. Nun habe ich eine graphische Anwendung, die auf einen Mausklick auf einen dieser Pfeile entsprechend reagieren soll.
    Diese Reaktionen habe ich in Funktionen untergebracht, die im Event OnScroll aufgerufen werden. Hier ein Beispiel:

    [code]
    void __fastcall TfrmDiagramm::ScrollBarVertikalScroll(TObject *Sender,
    TScrollCode ScrollCode, int &ScrollPos)
    {

    //klick auf untere Pfeiltaste
    if( (ScrollCode==scLineDown)
    {

    Funktion();

    }

    //klick auf obere Pfeiltaste
    if(ScrollCode==scLineUp)
    {

    Funktion();

    }
    .
    .
    .

    }

    und in Funktion wird dann die Position ausgerechnet die der Balken haben sollte und direkt zugewiesen an ScrollBar->Position,
    nachdem der Benutzer die Pfeiltaste auf dem Scrollbalken geklickt hat.
    Nun bin ich zur Erkenntnis gekommen, dass die Zuweisung, die in Funktion ausgeführt wird,
    nicht angenommen wird. Außerhalb von OnScroll funtkioniert die Zuweisung.
    Also geh ich mal davon aus, dass in der Implemntierung etwas falsch ist, oder ic
    h dass nicht verstanden haben wie der Event OnScroll funktioniert.



  • Eigentlich ist das Prinzip der ScrollBar genau anders herum.
    Die ScrollBar bekommt einen neuen Wert und dein Programm ändert die Ansicht, was heißt, das die Funktion() von dir, basierend auf der neuen ScrollBar->Pos etwas anderes Zeigt.
    Du solltest nicht die ScrollBar verbiegen, sondern lieber für Ihr Max / Incement werte Finden, die zu deiner Anwendung passen, sodass Funktion() daraus die Anzeige neu macht.

    An dieser Stelle ist es evtl. besser wenn du genauer beschreibst, was du Scrollen möchtest...

    mfg
    xXx



  • Das wusste ich nicht, dass ich meine Funktionen an die Scrollbar anpassen muss.
    Ich habe eine eigene Diagrammkurve erstellt, die ich durch Betätigen der Pfeiltasten auf den Scrollbalken verändern kann bzw. nach oben und und scrollen kann. Daher hatte ich die Idee dies mit OnScroll zu lösen. Ich habe eine andere Lösung gefunden und diese scheint zu funktionieren.
    falls jemand ähnliche Probleme hat, kann ich gerne meinen Lösungsvorschlag erläutern.

    Ich bedanke mich für Eure Hilfe!

    Gruß Crabs


Anmelden zum Antworten