Trackbar-Gadget und Schieberegler

Anfängerfragen zum Programmieren mit PureBasic.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Trackbar-Gadget und Schieberegler

Beitrag 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
PB 5.50; Win 7
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Trackbar-Gadget und Schieberegler

Beitrag 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ö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Trackbar-Gadget und Schieberegler

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Trackbar-Gadget und Schieberegler

Beitrag 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:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Trackbar-Gadget und Schieberegler

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Trackbar-Gadget und Schieberegler

Beitrag 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:
PB 5.50; Win 7
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Trackbar-Gadget und Schieberegler

Beitrag 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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Trackbar-Gadget und Schieberegler

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Trackbar-Gadget und Schieberegler

Beitrag von Angelo »

An hjbremer: Das ist ja super. Genau das wollte ich. Vielen Dank!
PB 5.50; Win 7
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Trackbar-Gadget und Schieberegler

Beitrag 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:
Antworten