Seite 1 von 1

warum geht dieser code mit 3.9x nich mehr?

Verfasst: 16.11.2004 22:00
von nicolaus
Hi

Mal wieder ne frage ich habe hier ein stück code (leider kann ich nur das stück posten da 5000 zeilen ein wenig viel wären nur um zu testen) und der code ging bis zu dem linkerwechsel ohne probs.
In dem code mach ich ne mauspositionsabfrage und dabei noch ob die linke maustaste gedrückt ist und wenn dies bei einem bestimmten bereich der fall ist dann "sperr" ich die maus ein und man kann ein imagegadget bewegen so weit hoffe ich habt ihr die kurzvorm verstanden (in dem prog wo ich das nutze is das ein Volumenregler) so und das ging mit dem alten linker ohne probs uhnd ich habe auch die richtigen events bekommen.
Nun mit dem neuen linker geht das nich mehr und ich bekomme wenn ich über dem bereich des volumenreglers bin ne EventID die ich noch nich kenne und noc nie gesehen habe und nach dem durchsuchen der winuser.h auch nich gefunden habe. Die EventID (in PB v3.92) ist da $332C oder auch als normale zahl 13100.
so hier mal der code:

Code: Alles auswählen

  If GetTickCount_()-timer > 50   ;{  Volumeeinstellung
    VolLeft.f  = GetMasterVolume(0,0) 
    VolRight.f = GetMasterVolume(0,1) 
    If VolLeft<>OldVolLeft Or VolRight<>OldVolRight.f 
      OldVolLeft  = VolLeft 
      OldVolRight = VolRight 
      DrawBars(47-VolLeft/65535*47,47-VolRight/65535*47,0) 
    EndIf 
    timer=GetTickCount_() 
  EndIf
  Debug Hex(EventID)
  GetCursorPos_(mousepos.POINT)  
  If ChangePos
    If EventID = #WM_LBUTTONUP 
      ChangePos=0 
      ClipCursor_(0) 
      oldy=-1  
    Else 
      If mousepos\y<>oldy 
        oldy=mousepos\y 
        Position=oldy-Rect(0)\Top 
        DrawBars(Position,0,ChangePos) 
        Vol(0) = GetMasterVolume(0,0) 
        Vol(1) = GetMasterVolume(0,1) 
        Vol(ChangePos-1) = 65536/47*(47-Position) 
          Vol(1-(ChangePos-1))=Vol(ChangePos-1) 
          temp_vol = Vol(0)
          SetMasterVolume(0,Vol(0),Vol(1)) 
      EndIf
    EndIf 
  ElseIf EventID = #WM_LBUTTONDOWN
    GetWindowRect_(GadgetID(#VOLUMEN),Rect(0)) 
      If PtInRect_(Rect(0),mousepos\x,mousepos\y) 
        ChangePos=1 
        Rect(0)\Top+4:Rect(0)\bottom-4 
        Rect(0)\Left+7:Rect(0)\right-7 
        ClipCursor_(Rect(0))
      EndIf 
      If WindowFromPoint_(mousepos\x,mousepos\y)=wnd And ChangePos=0 
      ReleaseCapture_() 
      SendMessage_(wnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
    EndIf
  EndIf  ;}
hoffe ihr habt das soweit verstanden und es kann mir einer sagen was das sein soll das das auf einmal nich mehr geht.
beim kompilieren kommen KEINE fehler!!!

Danke euch schon mal.

MfG Nico

Verfasst: 16.11.2004 22:16
von nicolaus
hatte da auch mal was im alten forum gepostet als ich das gebaut hatte und darufhin hatte Mischa auch den code noch ein wenig optiemiert. da gibts nen beispiel das mit PB3.89 geht doch mit PB 3.92 nich mehr wieso das nich?
hier mal der link dazu:
TrackBar

bin für jede hilfe dankbar.

Verfasst: 16.11.2004 23:58
von Mischa
Manch Event scheint im MainLoop problematisch geworden zu sein, hm..
Im Callback ist's sicher möglich, habe aber den alten Code just mal von
den doofen Mausknopf-Ereignissen befreit. :wink:

Code: Alles auswählen

; - Lautstärkeregelung getrennt für beide Kanäle 
; - Gleichzeitiges drücken der rechten Maustaste und ziehen eines Schiebereglers
;   synchronisiert den anderen Kanal 
; - Lautstärke wird ständig abgefragt (20*sek) und die Regler entsprechend angepaßt. 

;Bilder erstellen 
trans=GetSysColor_(#COLOR_BTNFACE) 
CreateImage(0,15,120) 
StartDrawing(ImageOutput()) 
  Box(0,0,15,120,trans) 
  DrawingMode(4) 
  Box(0,0,15,120,0) 
StopDrawing() 
CreateImage(1,13,15) 
StartDrawing(ImageOutput()) 
  Box(0,0,13,15,0) 
  For i=2 To 14 Step 2 
    LineXY(0,i,13,i,RGB(128,0,0)) 
  Next i 
StopDrawing() 
;Ende der Bilderstellung 



Procedure DrawBars(l,r,mode) 
  Dim Pos.l(1) 
  Pos(0)=l : Pos(1)=r 
  If mode 
    Pos(mode-1)=l 
    Pos(1-(mode-1))=-1 
  EndIf 
  For i=0 To 1 
    If Pos(i)>-1 
      CopyImage(0,3+i) 
      StartDrawing(ImageOutput()) 
        DrawImage(UseImage(1),1,Pos(i)) 
      StopDrawing() 
      SetGadgetState(1+i,UseImage(3+i)) 
    EndIf 
  Next i 
EndProcedure 


wnd=OpenWindow(0,0,0,60,180,#ws_popup|#PB_Window_ScreenCentered,"Volume") 
region=CreateRoundRectRgn_(0,0,60,180,15,15) 
SetWindowRgn_(wnd,region,#True) 
CreateGadgetList(WindowID()) 
ButtonGadget(0,10,10,40,20,"eXit") 
ImageGadget(1,10,40,15,120,0) 
ImageGadget(2,35,40,15,120,0)
left=#VK_LBUTTON+GetSystemMetrics_(#SM_SWAPBUTTON)
right=#VK_RBUTTON-GetSystemMetrics_(#SM_SWAPBUTTON) 
OldVolLeft.f=-1 
Dim Rect.RECT(1) 
Dim Vol.l(1) 
Repeat 
  If GetTickCount_()-timer > 50 
    VolLeft.f  = GetMasterVolume(0,0) 
    VolRight.f = GetMasterVolume(0,1) 
    If VolLeft<>OldVolLeft Or VolRight<>OldVolRight.f 
      OldVolLeft  = VolLeft 
      OldVolRight = VolRight 
      DrawBars(104-VolLeft/65535*104,104-VolRight/65535*104,0) 
    EndIf 
    timer=GetTickCount_() 
  EndIf 
  GetCursorPos_(mousepos.POINT)
  GetAsyncKeyState_(left)
  GetAsyncKeyState_(right)
  Event = WindowEvent()
  If Event = #PB_EventGadget 
    Select EventGadgetID() 
      Case 0 
        quit=1 
    EndSelect 
  ElseIf ChangePos Or Press
    If GetAsyncKeyState_(left)=0
      ChangePos=0
      Press=0 
      ClipCursor_(0) 
      oldy=-1 
    Else 
      If mousepos\y<>oldy 
        oldy=mousepos\y 
        Position=oldy-Rect(ChangePos-1)\top 
        DrawBars(Position,0,ChangePos) 
        Vol(0) = GetMasterVolume(0,0) 
        Vol(1) = GetMasterVolume(0,1) 
        Vol(ChangePos-1) = 65536/104*(104-Position) 
        If GetAsyncKeyState_(right) 
          Vol(1-(ChangePos-1))=Vol(ChangePos-1) 
        EndIf 
        SetMasterVolume(0,Vol(0),Vol(1))  
      EndIf 
    EndIf 
  ElseIf GetAsyncKeyState_(left)
    For i=0 To 1 
      GetWindowRect_(GadgetID(i+1),Rect(i)) 
      If PtInRect_(Rect(i),mousepos\x,mousepos\y) And WindowFromPoint_(mousepos\x,mousepos\y)=GadgetID(i+1)
        ChangePos=i+1 
        Rect(i)\top+7:Rect(i)\bottom-8 
        Rect(i)\left+7:Rect(i)\right-7 
        ClipCursor_(Rect(i))
        Press=1
      EndIf 
    Next i 
    If ChangePos=0 And WindowFromPoint_(mousepos\x,mousepos\y)=wnd
      ReleaseCapture_() 
      SendMessage_(wnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0) 
    EndIf
  EndIf    
  Delay(4) 
Until quit=1 
DeleteObject_(region)
Gruß,
Mischa