Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

ScrollBar funktioniert nicht

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 24.09.2011, 12:29    Titel: ScrollBar funktioniert nicht Antworten mit Zitat

Ich hätte da auch mal ein Problem.

In meinem Dialog habe ich eine ScrollBar erstellt. Die Range ist von 0 - 100 eingestellt und die Position beim Start auf 50 eingestellt. Da die ScrollBox der ScrollBar somit beim Start in der Mitte sitzt, sind die Einstellungen wohl ok.

Soweit so gut. Ich bekomme beim Drag oder Click auch ne Message und kann die Position der ScrollBar abfragen (50) - soweit erstmal alles bestens...

...aber, sobald ich den Drag oder Clickvorgang beende, also die Maustaste loslasse, springt die ScrollBar wieder auf ihren eingestellten Wert (50), er ändert sich also nicht und ich bekomme als Positionswert auch immer 50 ???

Kann mir das jemand erklären? Danke vielmals.

Code:
Function DlgProc (ByVal hWnd As HWND, ByVal uMsg As UINT, ByVal wParam As WPARAM, ByVal lParam As LPARAM) As Integer

   Dim As Long id, event
   
   Select Case uMsg
      Case WM_HSCROLL
         widgetSize = SendDlgItemMessage( dlg_hwnd, IDC_SCB_SIZE, SBM_GETPOS, 0, 0 ) / 500
.
.
.
         Return 0
.
.

_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 26.09.2011, 16:13    Titel: Antworten mit Zitat

Hi,

bei einem VSCROLL Event musst du die neue Position der Scrollbar manuell setzen. Wenn ich es noch richtig in Erinnerung habe, muss man sogar den Bereich der Scrollbar neu zeichnen (Bereich für ungültig erklären -> WM_PAINT auslösen). Das müsstest du ausprobieren. Schau dir mal folgenden Code an. Es ist ein Ausschnitt aus der WindowProc():

Code:

    Static hScrollRed(2) As HWND
    Static hScrollGreen(2) As HWND
    Static hScrollBlue(2) As HWND

    Static siRed(2) As SCROLLINFO
    Static siGreen(2) As SCROLLINFO
    Static siBlue(2) As SCROLLINFO
    Static RctStatus As RECT      ' Bereich, der neu gezeichnet wird, wenn eine Scrollbar bewegt wurde.
    Dim cfRichEdit As CHARFORMAT

(...)



    Case WM_VSCROLL
        Dim nScrollCode = CInt(LoWord(wParam))
        Dim nPos = CShort(HiWord(wParam))
        Dim hwndScrollBar As HWND = Cast(HWND, lParam)

        Select Case hwndScrollBar
        ' Einfache Scrollbars
        Case hScrollRed(0)
            siRed(0).cbSize = SizeOf(SCROLLINFO)
            siRed(0).fMask = SIF_ALL
            GetScrollInfo(hScrollRed(0), SB_CTL, @siRed(0))
            Select Case LoWord(wParam)
            Case SB_LINEUP
                If siRed(0).nPos > 0 Then siRed(0).nPos -= 1
            Case SB_LINEDOWN
                If siRed(0).nPos < 255 Then siRed(0).nPos += 1
            Case SB_PAGEUP
                If siRed(0).nPos > 9 Then siRed(0).nPos -= 10 Else siRed(0).nPos = 0
            Case SB_PAGEDOWN
                If siRed(0).nPos < 246 Then siRed(0).nPos += 10 Else siRed(0).nPos = 255
            Case SB_THUMBTRACK
                siRed(0).nPos = siRed(0).nTrackPos
            End Select

(...)

        ' Scrollbars auf die vom Benutzer gewählten Wert setzen.
        siRed(0).fMask = SIF_POS
        siGreen(0).fMask = SIF_POS
        siBlue(0).fMask = SIF_POS
        SetScrollInfo(hScrollRed(0), SB_CTL, @siRed(0), TRUE)
        SetScrollInfo(hScrollGreen(0), SB_CTL, @siGreen(0), TRUE)
        SetScrollInfo(hScrollBlue(0), SB_CTL, @siBlue(0), TRUE)

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 26.09.2011, 16:16    Titel: Antworten mit Zitat

Na das erklärt einiges - vielen Dank.
_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz