StickyWindow Problem

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

StickyWindow Problem

Beitrag von tft »

Hallo,

ich habe folgendes Problem. Ich benutzt ein Window Screen mit Full HD und ohne Border. Darüber platziere ich 1 Sticky Window.
Wenn der Screen den Focus hat, werden in den Windows die Mouse Position nicht angezeigt, aber sobald man die Mouse Taste betätigt erscheint der Mouse Zeiger wenn sich die Screen Mouse Position unter oder über dem Stiky Window befindet und das will ich nicht. Ich nehme an das ist ein Bug. Das will ich nun umgehen. Also Disable ich das Window wenn der Fokus auf dem Screen liegt. Das funktioniert fast. Denn nun macht das System einen 'Pling' jedesmal wenn die Mouse Position über dem deaktivierten Window Positioniert ist und die Mouse Taste gedrückt wird. Kann man das 'Pling' irgendwie abschalten?

Thx Temucin alias tft

Edit by NicTheQuick: Threadtitel korrigiert, damit man ihn in der Suche besser finden kann.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: StikyWindow Problem

Beitrag von Bisonte »

Ein lauffähiger Code, der genau das macht, was du da sagst, wäre jetzt echt hilfreich, für die Helfer...

Vielleicht hast du ja bloss irgendwo 'nen kleinen Schnitzer ....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Re: StikyWindow Problem

Beitrag von tft »

Hallo,

der code ist noch recht simple. Aber er ist für 3 Monitore gedacht. Daher fileicht an einigen stellen komisch
aber eigentlich ist da nichts besonderes drann.

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   Test 001, StartUp, MultiDesk Unterstützung
;
;    (c) 2013 - TFT Optima-Code
;
; ------------------------------------------------------------
;


#CameraSpeed = 1

Define.f KeyX, KeyY, MouseX, MouseY

Procedure UnHideAccessMenu(hwnd.l=0)
     Protected ingStyle.l
     lngStyle = GetWindowLong_(WindowID(hwnd), #GWL_STYLE)
     lngStyle = lngStyle | #WS_SYSMENU
     SetWindowLong_(WindowID(hwnd), #GWL_STYLE, lngStyle)
     SetWindowPos_(WindowID(hwnd), #HWND_TOP, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE |#SWP_DRAWFRAME )
EndProcedure
Procedure HideAccessMenu(hwnd.l=0)
     Protected ingStyle.l
     lngStyle = GetWindowLong_(WindowID(hwnd), #GWL_STYLE)
     lngStyle = lngStyle &~ #WS_SYSMENU
     SetWindowLong_(WindowID(hwnd), #GWL_STYLE, lngStyle)
     SetWindowPos_(WindowID(hwnd), #HWND_TOP, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE |#SWP_DRAWFRAME )
EndProcedure
Procedure SetWinTransparency(win,level) 
     If level>=0 And level<101 
          hLib = LoadLibrary_("user32.dll") 
          If hLib 
               adr = GetProcAddress_(hLib,"SetLayeredWindowAttributes") 
               If adr 
                    SetWindowLong_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|$00080000) ; #WS_EX_LAYERED = $00080000 
                    CallFunctionFast(adr,WindowID(win),0,255*level/100,2) 
               EndIf 
               FreeLibrary_(hLib) 
          EndIf 
     EndIf 
EndProcedure 

OpenConsole()

If InitEngine3D()
     
     UsePNGImageDecoder()
     
     Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
     
     InitSprite()
     InitSprite3D()
     InitKeyboard()
     InitMouse()
     
     AnzDesk=ExamineDesktops()
     PrintN("Sie haben "+Str(AnzDesk)+" Desktops.") 
     For i=1 To  AnzDesk
          ScreenX = DesktopWidth(i-1)
          ScreenY = DesktopHeight(i-1)
          ScreenD = DesktopDepth(i-1)
          ScreenF = DesktopFrequency(i-1)
          PrintN("Desktop "+i+" ( "+ScreenX+"/"+ScreenY+"/"+ScreenD+"/"+ScreenF+" )")
     Next  
     
     PrintN("Home directory : "+GetHomeDirectory())
     PrintN("Es stehen "+ Str(MemoryStatus(#PB_System_FreePhysical )/1024/1024) +" MByte Ram zur verfügung")
     
     ;FlipRate = 16;1000/ScreenF
     
     ;PrintN("FlipRate "+Str(FlipRate))
     
     ;sxPos=-ScreenX
     Window1=OpenWindow(#PB_Any, sxPos, 0,  ScreenX ,  ScreenY, "Optima Code , TFT 2013"  , #PB_Window_BorderLess)
     Screen = OpenWindowedScreen(WindowID(Window1), 0, 0,  ScreenX ,  ScreenY, 0, 0, 0, #PB_Screen_WaitSynchronization    )
         
     Window2=OpenWindow(#PB_Any,sxPos+20,20,400,300,"teset")
     HideAccessMenu(Window2)  
     StickyWindow(Window2, 1)  
     SetWinTransparency(Window2,100)
     SetWindowTitle(Window2,"SystemInfo")
     
     Window3=OpenWindow(#PB_Any,sxPos+20,380,400,300,"teset")
     HideAccessMenu(Window3)  
     StickyWindow(Window3, 1)  
     SetWinTransparency(Window3,100)
     SetWindowTitle(Window2,"Edit")  
     
     SetActiveWindow(Window1)
     DisableWindow(Window2, 1)
     DisableWindow(Window3, 1)
                                                
     AmbientColor(RGB(255, 255, 255))  ; Gray 'HUD' like color 
     
     Cam1=CreateCamera(#PB_Any, 0, 0, 100, 100)  ; Front camera
     MoveCamera(Cam1,0,0,1000,#PB_Absolute)
     RotateCamera(Cam1,0,0,0)
     CameraBackColor(Cam1, RGB(0, 0, 0))
     CameraFOV(Cam1, 20)
     
     Mesh=CreateCube(#PB_Any,1) ;CreateCube(#PB_Any,10) CreateSphere(#PB_Any, 2 
     Texture=LoadTexture(#PB_Any,"fenster01.png"):     If Texture=0 :End :EndIf
     StartDrawing(TextureOutput(Texture))
          DrawText(10,10,"Test",RGB(255,255,255),RGB(63,63,63))
     StopDrawing()
     Material=CreateMaterial(#PB_Any,TextureID(Texture))
     MaterialBlendingMode(Material, #PB_Material_Add        );  #PB_Material_Add  #PB_Material_AlphaBlend #PB_Material_Color      
     ;MaterialCullingMode(Material ,  #PB_Material_NoCulling      ); #PB_Material_NoCulling    #PB_Material_ClockWiseCull    #PB_Material_AntiClockWiseCull       
     
     Entity=CreateEntity(#PB_Any,MeshID(Mesh),MaterialID(Material),0,0,0,0)
     MoveEntity(Entity,0,0,0)
     ScaleEntity(Entity,427,357,1)
     ;HideEntity(Entity,1)
     
     For i2 = -5 To 5
          For i1 = -5 To 5
               For i = -5 To 5
                   ; k=CopyEntity(Entity, #PB_Any)
                    ;MoveEntity(k,i*20,i1*20,i2*20)
               Next
          Next
     Next
     ;FreeEntity(entity)
     
     sp=LoadSprite(#PB_Any,"Data/hand1.png",#PB_Sprite_Texture| #PB_Sprite_AlphaBlending       )
     If sp = 0 : End : EndIf
     sp3D = CreateSprite3D(#PB_Any,sp)
     ZoomSprite3D(sp3D,32,32)
     
     ;FPS_ControllTimer=ElapsedMilliseconds()+ FlipRate
     Repeat
          
          MouseB = 0
          If Fokus = 0
               
               If ExamineMouse()
                    MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
                    MouseY = -MouseDeltaY() * #CameraSpeed * 0.05     
                    MousePosX = MouseX()
                    MousePosY = MouseY()
                    If MouseButton(1) : MouseB = 1 : EndIf
                    If MouseButton(2) : MouseB = 2 : EndIf
               EndIf
               
               If ExamineKeyboard()
                    
                    If KeyboardPushed(#PB_Key_A)
                         KeyX = -#CameraSpeed 
                    ElseIf KeyboardPushed(#PB_Key_D)
                         KeyX = #CameraSpeed 
                    Else
                         KeyX = 0
                    EndIf
                    
                    If KeyboardPushed(#PB_Key_W)
                         KeyY = -#CameraSpeed 
                    ElseIf KeyboardPushed(#PB_Key_S)
                         KeyY = #CameraSpeed 
                    Else
                         KeyY = 0
                    EndIf
                    
               EndIf
               
               If KeyboardReleased(#PB_Key_Tab)
                    Fokus = Fokus + 1 :  If Fokus = 2 : Fokus = 0 : EndIf 
                    If Fokus = 1
                         SetActiveWindow(Window2)
                         DisableWindow(Window2, 0)
                         DisableWindow(Window3, 0)
                    EndIf
                    ReleaseMouse(Fokus): 
               EndIf  
               
          Else
                             
               MouseX=0.0
               MouseY=0.0
               KeyX=0.0
               KeyY=0.0
               
          EndIf
          
          AWin=GetActiveWindow()
           
          Repeat
               
               EventCount=0
               
               Event = WindowEvent()
               If Event>0
                    xPos =      EventlParam() & $FFFF     ; hole das Low Word (16 Bit)
                    yPos =      EventlParam()>>16         ; hole das High Word (16 Bit)
                    fwKeys =  EventwParam()           ; hole die Flags ggf. gedrückter Tasten 
                    win =         EventWindow()  
               EndIf
               
               Select Event
                         
                    Case #PB_Event_Menu
                         Select EventMenu()
                                   
                         EndSelect
                         
                    Case  #WM_KEYDOWN
                         Select fwKeys
                              Case    #VK_ESCAPE
                                   Quit=1
                              Case   #VK_TAB
                                   If Fokus = 1
                                        
                                        Fokus = Fokus + 1 :  If Fokus = 2 : Fokus = 0 : EndIf 
                                        If Fokus = 0
                                             SetActiveWindow(Window1)
                                             DisableWindow(Window2, 1)
                                             DisableWindow(Window3, 1)

                                        EndIf
                                        ReleaseMouse(Fokus) 
                                        
                                   EndIf                                   
                         EndSelect
                         PrintN("#WM_KEYDOWN "+Str(Event)+" "+Str(fwKeys)+" "+Str(win)) : EventCount=1
                    Case    #WM_KEYUP
                         PrintN("#WM_KEYUP "+Str(Event)+" "+Str(fwKeys)+" "+Str(win)): EventCount=1
                    Case    #WM_KEYDOWN
                         PrintN("#WM_KEYDOWN "+Str(Event)+" "+Str(fwKeys)): EventCount=1           
                    Case    #WM_SYSKEYUP  
                         PrintN("#WM_SYSKEYUP "+Str(Event)+" "+Str(fwKeys)): EventCount=1   
                    Case    #WM_SYSKEYDOWN  
                         PrintN("#WM_SYSKEYDOWN "+Str(Event)+" "+Str(fwKeys)): EventCount=1   
                    Case   #WM_CHAR  
                         PrintN("#WM_CHAR "+Str(Event)+" "+Chr(fwKeys)): EventCount=1  
                    Case #WM_MOUSEMOVE
                         ;PrintN("#WM_MOUSEMOVE "+Str(Event)+" x:" + Str(xPos) + " y:" + Str(yPos)+" "+Str(win))
                         EventCount=1
                         
                         If GetActiveWindow() = Window1
                              MousePosX=xPos
                              MousePosY=yPos
                         Else
                               MousePosX=-1
                              MousePosY=-1                          
                         EndIf
                         
                    Case 160 
                         ;PrintN("Mouse bewegung über der Titelzeile "+Str(Event)+" x:" + Str(xPos) + " y:" + Str(yPos)): EventCount=1           
                    Case #WM_MOUSEWHEEL 
                         PrintN("WM_MOUSEWEEL "+Str(Event)+" "+StrF(fwKeys)): EventCount=1
                    Case #WM_LBUTTONDOWN
                         PrintN("WM_LBUTTONDOWN "+Str(Event)): EventCount=1
                         MouseB = 1
                         If GetActiveWindow() = Window1
                              MousePosX=xPos
                              MousePosY=yPos
                         Else
                               MousePosX=-1
                              MousePosY=-1                          
                         EndIf
                    Case #WM_LBUTTONUP
                         PrintN("WM_LBUTTONUP "+Str(Event)): EventCount=1
                    Case    #PB_Event_LeftClick 
                         PrintN("PB_Event_LeftClick  "+Str(Event)+" "+StrF(fwKeys)+" "+Str(win)): EventCount=1
                    Case   #PB_Event_LeftDoubleClick
                         PrintN("PB_Event_LeftDoubleClick  "+Str(Event)): EventCount=1
                         MouseB = 1
                    Case #WM_RBUTTONDOWN
                         PrintN("WM_RBUTTONDOWN "+Str(Event)): EventCount=1 
                    Case #WM_RBUTTONUP   
                         PrintN("WM_RBUTTONUP "+Str(Event)): EventCount=1
                    Case    #PB_Event_RightClick 
                         PrintN("PB_Event_RightClick  "+Str(Event)): EventCount=1  
                    Case   #PB_Event_ActivateWindow 
                         PrintN("PB_Event_ActivateWindow  "+Str(Event)+" "+StrF(fwKeys)): EventCount=1  
                    Case #PB_Event_DeactivateWindow
                         PrintN("PB_Event_DeactivateWindow  "+Str(Event)+" "+StrF(fwKeys)): EventCount=1  
                    Case #PB_Event_Gadget
                         Select EventGadget()
                              Case 1 
                                   Select EventType()
                                        Case #PB_EventType_LeftClick        : Debug "Klick mit der linken Maustaste"
                                        Case #PB_EventType_RightClick       : Debug "Klick mit der rechten Maustaste"
                                        Case #PB_EventType_LeftDoubleClick  : Debug "Doppelklick mit der linken Maustaste"
                                        Case #PB_EventType_RightDoubleClick : Debug "Doppelklick mit der rechten Maustaste"
                                   EndSelect
                                   
                         EndSelect
                         
                    Case #WM_CLOSE
                         Quit = 1
               EndSelect
               
               If (Event>0 Or Event<0 ) And EventCount=0
                    PrintN("Event "+Str(Event)+" Type "+Str(EventType())+" x:" + Str(xPos) + " y:" + Str(yPos) + " Keys: " + fwKeys)
               EndIf
               
          Until Event = 0
          
          ent=0
          If Fokus = 0
               RotateCamera(Cam1, MouseY, MouseX, 0, #PB_Relative)  
               MoveCamera  (Cam1, KeyX, 0, KeyY)
          Else
                If MouseB=1 And MousePosX>-1 And MousePoxY>-1 And GetActiveWindow() = Window1
                    ;PrintN(Str(MouseX())+"/"+Str(MouseY()))
                    ent=MousePick(Cam1, MousePosX,MousePosY)
                    If ent>0
                         FreeEntity(ent)
                    EndIf
               EndIf
               If ent <>0
                    entold=ent
                    PrintN(Str(ent))
               EndIf                              
          EndIf
                    
          RenderWorld()
          
          ;While FPS_ControllTimer>ElapsedMilliseconds()
               ;Delay(1)
          ;Wend
          ;FPS_ControllTimer=ElapsedMilliseconds()+FlipRate
          
             ; DisplaySprite(sp, MousePosX, MousePosY)       ; Hintergrundbild darstellen
              Start3D() 
              DisplaySprite3D(sp3D, MousePosX,MousePosY, 255) 
              Stop3D() 

          FlipBuffers()
        
     Until  Quit = 1
     
EndIf

Delay (2000)

End

TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Antworten