|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
E-P-S
Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 24.09.2011, 13:29 Titel: ScrollBar funktioniert nicht |
|
|
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 |
|
|
Dominik
Anmeldungsdatum: 22.12.2004 Beiträge: 172
|
Verfasst am: 26.09.2011, 17:13 Titel: |
|
|
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 |
|
|
E-P-S
Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 26.09.2011, 17:16 Titel: |
|
|
Na das erklärt einiges - vielen Dank. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
|
|
|
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.
|
|