Seite 1 von 1

welche funktion ist der blaue auswahlrahmen von win7

Verfasst: 23.12.2012 18:33
von kapege
Hallo liebe PB-Gemeinde,

kann mir bitte jemand sagen mit welcher Funktion ich den blauen auswahlrahmen von win7 mit PB aufrufen kann?
Diese gefällt mir besser als folgende Funktion, die ich bis jetzt nutze.

Code: Alles auswählen

Procedure DrawMouseSelector(hWindow)
	Protected hDC
	Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX
	Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY
	Shared WindowProc_MouseSelectRect.RECT
	
	If WindowProc_MouseSelectStartX > WindowProc_MouseSelectLastX
		WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectLastX
		WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectStartX
	Else
		WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectStartX
		WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectLastX
	EndIf
	If WindowProc_MouseSelectStartY > WindowProc_MouseSelectLastY
		WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectLastY
		WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectStartY
	Else
		WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectStartY
		WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectLastY
	EndIf
	
 	hDC = GetDC_(hWindow)
	DrawFocusRect_(hDC,@WindowProc_MouseSelectRect)
  ReleaseDC_(hWindow,hDC)
  
EndProcedure
würde mich auf eine Antwort sehr freuen und wünsche der gesamten Gemeinde
ein schönes Weihnachtsfest

lg Peter

Re: welche funktion ist der blaue auswahlrahmen von win7

Verfasst: 28.12.2012 14:31
von _JON_
Meinst Du vielleicht das hier: Button Fokus?

PB unterstützt es leider nicht nativ, aber es lässt sich zumindest optisch nachrüsten :D

Re: welche funktion ist der blaue auswahlrahmen von win7

Verfasst: 28.12.2012 15:56
von kapege
Hallo _JON_,

vielen Dank für Deine Antwort.

wenn ich unter win7 auf den Desktop geklickt über meine Icons fahre,
erhalte ich einen blauen halbtransparenten Rahmen.
Diese Funktion hätte ich gerne.
momentan benutze ich die Funtion: DrawFocusRect_(...) = Gummiband oder auch InvertRect_(...) = Invers.

Hier nochmal ein funktionierendes Beispiel:

Code: Alles auswählen


EnableExplicit

Define WindowProc_MouseSelect
Define WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX
Define WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY
Define WindowProc_MouseSelectRect.RECT

Global Event

Procedure DrawMouseSelector(hWindow)
	Protected hDC
  
	Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX
	Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY
	Shared WindowProc_MouseSelectRect.RECT
	
	If WindowProc_MouseSelectStartX > WindowProc_MouseSelectLastX
		WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectLastX
		WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectStartX
  Else
		WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectStartX
		WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectLastX
  EndIf
	If WindowProc_MouseSelectStartY > WindowProc_MouseSelectLastY
		WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectLastY
		WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectStartY
  Else
		WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectStartY
		WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectLastY
  EndIf
	 
 	hDC = GetDC_(hWindow)
  
  InvertRect_(hDC,@WindowProc_MouseSelectRect)  

  ;DrawFocusRect_(hDC,@WindowProc_MouseSelectRect)
  
  ReleaseDC_(hWindow,hDC)
  
EndProcedure

Procedure WindowCallback(hWindow,Msg,wParam,lParam)
	Protected winrect.RECT
	Shared WindowProc_MouseSelect
	Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX
	Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY
	Shared WindowProc_MouseSelectRect.RECT
	
		Select Msg
      Case #WM_LBUTTONDOWN
        
				WindowProc_MouseSelect  = 1
				WindowProc_MouseSelectStartX = lParam&$FFFF
				WindowProc_MouseSelectStartY = (lParam>>16)&$FFFF
				GetClientRect_(hWindow,winrect.RECT)
				MapWindowPoints_(hWindow,0,winrect,2)
        
				
      Case #WM_MOUSEMOVE
				If WindowProc_MouseSelect > 0  And wParam & #MK_LBUTTON
					If WindowProc_MouseSelect > 1
						DrawMouseSelector(hWindow)
          Else
						WindowProc_MouseSelect + 1
          EndIf
					WindowProc_MouseSelectLastX = lParam&$FFFF
					WindowProc_MouseSelectLastY = (lParam>>16)&$FFFF
					DrawMouseSelector(hWindow)
        EndIf
        
        
      Case #WM_LBUTTONUP
				DrawMouseSelector(hWindow)
          
    EndSelect
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

OpenWindow(0, 0, 0, 400, 400, "Rahmen", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

SetWindowCallback(@WindowCallback())

Repeat
  Event = WaitWindowEvent()     
  
Until Event = #PB_Event_CloseWindow

LG Peter