  | 
					
						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, 12: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, 16: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, 16: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.
  | 
   
 
     |