Seite 1 von 1

Trackbar-Gadget und Schieberegler

Verfasst: 20.02.2010 14:55
von Angelo
Guten Tag!

Ich habe eine Frage zum Code für das Trackbar-Gadget aus dem Code-Archiv. Den Schieberegler kann ich gut mit der Maus auf der Leiste verschieben. Aber wenn ich eine bestimmte Stelle auf der Leiste mit der Maus anklicke, dann springt der Schieberegler nicht genau dahin. Gibt's da eine Möglichkeit, das man das kann? Kann mir jemand helfen?

Code: Alles auswählen

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=775&highlight=
; Author: Mischa (updated for PB4.00 by blbltheworm)
; Date: 27. April 2003
; OS: Windows
; Demo: No

Procedure MyWindowCallback(WindowID, Message, wParam, lParam) 
  Result = #PB_ProcessPureBasicEvents 
  Select EventGadget() 
    Case 6 
      SetFocus_(WindowID(1)) 
    Case 7 
      SetFocus_(WindowID(1)) 
  EndSelect 
  ProcedureReturn Result 
EndProcedure 


OpenWindow(1, 0, 0, 1024, 768, "Trackbar probleme", #PB_Window_SystemMenu) 
CreateGadgetList(WindowID(1)) 
  
TrackBarGadget(6, 210, 490, 200, 50, 4, 20,#PB_TrackBar_Ticks) 
TrackBarGadget(7, 400, 300, 50, 200, 4, 20,#PB_TrackBar_Ticks|#PB_TrackBar_Vertical) 

horizontal=10 
vertical=10 

TextGadget(9, 280, 410, 50, 30, Str(horizontal)+" x "+Str(vertical))  
gad=SetGadgetState(6,10) 
SetGadgetState(7,10) 

SetWindowCallback(@MyWindowCallback()) 

Repeat 

  event.l=WaitWindowEvent() 
  If event.l = #PB_Event_Gadget 
    If EventGadget()=6 
      horizontal=GetGadgetState(6) 
      SetGadgetText(9,Str(horizontal)+" x "+Str(vertical)) 
    EndIf    
    If EventGadget()=7 
      vertical=GetGadgetState(7) 
      SetGadgetText(9,Str(horizontal)+" x "+Str(vertical)) 
    EndIf 
  EndIf 
  
Until event.l = #WM_CLOSE
End

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
; EnableXP

Re: Trackbar-Gadget und Schieberegler

Verfasst: 20.02.2010 15:24
von WPö
Willkommen, Angelo!

Wenn es viele Raster auf dieser Klickfläche gibt und Du z.B. 1/2 weiter als die aktuelle Position klickst, springt der Griff 3 oder 4 Raster weiter. Wie Du das änderst, weiß ich jetzt aber auch nicht auswendig. Vielleicht findet noch ein Anderer etwas zu dem Thema.

Gruß - WPö

Re: Trackbar-Gadget und Schieberegler

Verfasst: 20.02.2010 16:48
von Josh
also für mich ist das ein bug. wenn der schieberegler an einer bestimmten position stehen bleiben kann, dann sollte er an die nächste mögliche position in der nähe des mauszeigers springen. so ergibt das für mich keinen sinn.

Re: Trackbar-Gadget und Schieberegler

Verfasst: 20.02.2010 17:08
von ts-soft
Josh hat geschrieben:also für mich ist das ein bug.
Den mußte dann aber bei support@microsoft.com melden :mrgreen:

Re: Trackbar-Gadget und Schieberegler

Verfasst: 20.02.2010 17:54
von STARGÅTE
wieso ist das ein Bug ?

Scrollleisten funktionieren nach dem glichen Prinzip.

Klick man dort "neben" den Schieber so gibt es einen Bildlauf in die jeweilige richtung.
der Schieber springt also nicht an genau die Stelle wo man hingeklickt hat.

Und wie WPo schon richtig geschrieben hat, ist es bei TrackBarGadget "ähnlich".

Kannst dir ja die in Windows vorhandenen ansehen:
Systemsteuerung > Sounds und Audio > Gerätelautstärke
wennn du dort auf 0% klickt ist der regler auch nicht bei 0%, sonden 2-3 Schritte in die richtung.

Das was du willst, erreicht man dadurch, indem man die Schieber gedrückt hält und dann zur Position schiebt

Re: Trackbar-Gadget und Schieberegler

Verfasst: 20.02.2010 18:01
von Angelo
Habe das in der Systemsteuerung ausprobiert. Du hast Recht. Ich hatte den Mediaplayer im Auge, wo man ja genau an die Stelle springen kann, wo man die Maus klickt. Das hat dann wohl nichts mit dem Trackbar-Gadget zu tun. :cry:

Re: Trackbar-Gadget und Schieberegler

Verfasst: 20.02.2010 18:50
von STARGÅTE
jo du kannst solch ein "eigenes" gadget schnell selber bauen:

Einfach ein Image gadget nutzen, bei dem kannst du ein Mausklick abfragen, und über die Mauskoordinaten und gadgetKoordinaten ermittelst du dann die neue Position und zeichnest das Gadget neu ...

Re: Trackbar-Gadget und Schieberegler

Verfasst: 20.02.2010 23:49
von hjbremer
vielleicht etwa so

Code: Alles auswählen

#trackbarlg = 200
#trackbarmin = 4
#trackbarmax = 20

Enumeration
 #window
 #trackbarV
 #trackbarH
 #textgadet1
EndEnumeration  

Procedure MyWindowCallback(hwnd, msg, wParam, lParam) 
  Result = #PB_ProcessPureBasicEvents 
  
  Select msg
    
     Case #WM_VSCROLL:        
          ;die Zahlen 20 bzw 13 stehen für den Abstand des Schiebereglers vom Rand
          ;je nach #trackbarmax muß man den Wert etwas verändern, damit es klappt.
          If lparam = GadgetID(#trackbarV)
             GetCursorPos_(p.point)
             ScreenToClient_(lparam,p)
             trackbardif = #trackbarmax - #trackbarmin + 1
             trackbartic.f = (#trackbarlg - 20) / trackbardif  
             pp = (#trackbarlg - 13 - p\y) / trackbartic 
             SetGadgetState(#trackbarV, pp + #trackbarmin)
          EndIf          
     
  EndSelect     
  
  
  
ProcedureReturn Result 
EndProcedure 


OpenWindow(#window, 50, 50, 300, 300, "Trackbar probleme", #PB_Window_SystemMenu) 
;CreateGadgetList(WindowID(#window)) 
  
TrackBarGadget(#trackbarH, 10, 20, 200, 50, 1, 20,#PB_TrackBar_Ticks) 
TrackBarGadget(#trackbarV, 220, 30, 50, #trackbarlg, #trackbarmin, #trackbarmax,#PB_TrackBar_Ticks|#PB_TrackBar_Vertical) 

horizontal=10 
vertical=10 

TextGadget(#textgadet1, 20, 80, 50, 30, Str(horizontal)+" x "+Str(vertical))  
SetGadgetState(#trackbarH,horizontal) 
SetGadgetState(#trackbarV, vertical) 

SetWindowCallback(@MyWindowCallback()) 

Repeat 

  event = WaitWindowEvent() 
  If event = #PB_Event_Gadget
     button = EventGadget() 
     Select button  
         Case #trackbarH 
            horizontal=GetGadgetState(#trackbarH) 
            SetGadgetText(#textgadet1,Str(horizontal)+" x "+Str(vertical)) 
         Case #trackbarV 
            vertical=GetGadgetState(#trackbarV) 
            SetGadgetText(#textgadet1,Str(horizontal)+" x "+Str(vertical)) 
    EndSelect 
  EndIf 
  
Until event = #PB_Event_CloseWindow
End

siehe auch http://msdn.microsoft.com/en-us/library ... S.85).aspx

Re: Trackbar-Gadget und Schieberegler

Verfasst: 21.02.2010 01:23
von Angelo
An hjbremer: Das ist ja super. Genau das wollte ich. Vielen Dank!

Re: Trackbar-Gadget und Schieberegler

Verfasst: 21.02.2010 08:45
von Josh
STARGÅTE hat geschrieben:wieso ist das ein Bug ?

Scrollleisten funktionieren nach dem glichen Prinzip.
der vergleich mit den scrollleisten stimmt mal überhaupt nicht. scrollleisten springen offensichtlich immer an eine stelle in bestimmten sprüngen. der schieberegler springt nach lust und laune. wenn ich mit der maus zwischen dem 4. und 5. skalenstrich klicke, sollte man doch erwarten, dass der schieberegler auf 4 oder 5 springt und nicht auf 3 und beim nächsten klick ohne die maus zu bewegen auf 7.

was soll es sonst sein als ein bug, oder willst du mir erzählen, dass dieses komische verhalten so gewollt ist? wenn es allgemein in windows so ist, dann ist es halt ein windows-bug und kein pb-bug. aber damit muss man (und kann auch) wohl damit leben.
ts-soft hat geschrieben:Den mußte dann aber bei support@microsoft.com melden :mrgreen:
ich kenn mich da nicht aus. kannst du das nicht übernehmen :mrgreen: :mrgreen: :mrgreen: