Mausklicks werden aus 2. Fenster nicht angenommen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kapege
Beiträge: 39
Registriert: 28.12.2004 17:35
Computerausstattung: AMD Ryzen 7 3700X 8-Core Processor 3.60 GHz
Windows 10 Pro 64bit
14 GB Ram

PureBasic 6.00 LTS (Windows - x64)
Wohnort: Trostberg

Mausklicks werden aus 2. Fenster nicht angenommen

Beitrag von kapege »

Hallo Gemeinde,

ich habe ein Window1 1280x1024 mit Screenshot
und ein window 2 800x500 mit ImageGadget(2)
Im ImageGadget(2) habe ich mehrere ButtonImageGadgets.
Mit der Tab-Taste kann ich die ButtonImageGadgets erreichen, jedoch nicht mit der Maus.
Irgendwie werden die Maus Events nicht durchgereicht.
(Es ist zum Mäusemelken)
Mit Window Callback kenne ich mich noch nicht aus.
Ich hoffe Ihr könnt mir helfen, anbei der Code.

mfg Peter

edit: mit F1 wird window 2 ein und ausgeschaltet
mit ESC Programm verlassen

Code: Alles auswählen


Global MLC.l 
Global mausX 
Global MausY 
Global Text.s
Global TextH
Global TextB

Global choose
Global GadgetNr

Global Width
Global Height

Global hdc_1 ; Desktop Screenshot
Global hdc_2 ; reserviert für Bildausschnitt

Global hImage_1
Global hImage_2
Global Image_ID

Global hWin
Global HG_Fenster.s
Global Fenster_2_hdc.l

Global Fadenkreuz_Farbe = RGB(255, 0, 0)
Global Fadenkreuz_VG_Farbe = RGB(0, 0, 255)
Global Fadenkreuz_HG_Farbe = RGB(255, 255, 0)
Global Fadenkreuz_Transparenz.i = 1


Global Font_Default_T.s = "Arial"
Global Font_Default_G.i = 10

Global Font_User_T.s = "Arial"
Global Font_User_G.i = 24


#CC_ANYCOLOR = $100 
#CC_FULLOPEN = $2 
#CC_RGBINIT  = $1 




;- Image Plugins
UsePNGImageDecoder()


;- Image laden für F1 Fenster

;HG_Fenster = "Fenster-HG\Fenster_BG_800x500.png"


Structure CustomColorList 
	RGB.l[16] 
EndStructure 

;- Fonts

Enumeration
	#Font_Default
	#Font_User 
EndEnumeration



Procedure MakeDesktopScreenshot(ImageNr,x,y,Width,Height) 
	hImage_1 = CreateImage(ImageNr,Width,Height) 
	hdc_1 = StartDrawing(ImageOutput(ImageNr)) 
		BitBlt_(hdc_1,0,0,Width,Height,GetDC_(GetDesktopWindow_()),x,y,#SRCCOPY) 
	StopDrawing() 
	ProcedureReturn hImage_1
EndProcedure 


Procedure SetWinOpacity (hWnd.l, Opacity.l) ; Opacity: Undurchsichtigkeit 0-255 
	SetWindowLong_(hWnd, #GWL_EXSTYLE, $00080000) 
	If OpenLibrary(1, "user32.dll") 
		CallFunction(1, "SetLayeredWindowAttributes", hWnd, 0, Opacity, 2) 
		CloseLibrary(1) 
  EndIf 
	;MakeToolWindow(hwnd, 1)   ; activate this line, if you want to have a ToolWindow  (need user-lib ToolBar Prof. from Danilo)
EndProcedure 



Procedure neuZeichnen(GadgetNr,ImageID)
	StartDrawing( ImageOutput(ImageID))
	StopDrawing()
	SetGadgetState(GadgetNr,ImageID(ImageID)) ; << nach dem zeichnen dem imagegadget das bild neu zuweisen
EndProcedure


Procedure Fadenkreuz()
	
	neuZeichnen(1,1)
	
	StartDrawing(WindowOutput(1)) 
		
		
	LineXY(0, WindowMouseY(1), Width, WindowMouseY(1),Fadenkreuz_Farbe)
		
	LineXY(WindowMouseX(1), 0 , WindowMouseX(1), Height,Fadenkreuz_Farbe)
	
	
	If IsFont(#Font_User)
		DrawingFont(FontID(#Font_User))
	Else
		MessageRequester("Fehler","Font nicht geladen!", #PB_MessageRequester_Ok)
	EndIf
	
	Text =  Str(WindowMouseX(1)) + "," + Str(WindowMouseY(1))
	TextH = TextHeight(Text)
	TextB = TextWidth(Text)
	
	mausX = WindowMouseX(1) + 20 ; 20px weg vom Kreuz nach rechts für Text
	MausY = WindowMouseY(1) - 25 - TextH ; 25px weg vom Kreuz nach oben für Text
	
	
	If mausX + TextB + 20 > = Width  
		mausX = WindowMouseX(1) - 20 - TextB ; 20px weg vom Kreuz nach links für Text
	EndIf  
	
	If MausY < = 0
		MausY = WindowMouseY(1) - 10 + TextH; 10px weg vom Kreuz nach unten für Text
	EndIf  
	
	FrontColor(Fadenkreuz_VG_Farbe) 
	BackColor(Fadenkreuz_HG_Farbe)
	
	If Fadenkreuz_Transparenz = 1
		DrawingMode(#PB_2DDrawing_Transparent) 
	EndIf
	
	DrawText(mausX, MausY, Text)

StopDrawing() 

EndProcedure


Procedure Preference_lesen()
	
	If OpenPreferences("Fadenkreuz.ini")
		
		
		Fadenkreuz_Farbe = Val(ReadPreferenceString("Fadenkreuz_Farbe" , ""))
		Fadenkreuz_VG_Farbe = Val(ReadPreferenceString("Fadenkreuz_VG_Farbe" , ""))
		Fadenkreuz_HG_Farbe = Val(ReadPreferenceString("Fadenkreuz_HG_Farbe" , ""))
		Fadenkreuz_Transparenz = Val(ReadPreferenceString("Fadenkreuz_Transparenz" , ""))
		
		
		Font_Default_T = Trim(ReadPreferenceString("Font_Default_T" , ""))
		Font_Default_G = Val(ReadPreferenceString("Font_Default_G" , ""))
		
		Font_User_T = Trim(ReadPreferenceString("Font_User_T" ,""))
		Font_User_G = Val(ReadPreferenceString("Font_User_G" , ""))
		
		ClosePreferences()
	EndIf
		
EndProcedure
	
Procedure Preference_schreiben()
		
		CreatePreferences("Fadenkreuz.ini")
		
		WritePreferenceString("Fadenkreuz_Farbe" , Str(Fadenkreuz_Farbe))
		WritePreferenceString("Fadenkreuz_VG_Farbe" , Str(Fadenkreuz_VG_Farbe))
		WritePreferenceString("Fadenkreuz_HG_Farbe" , Str(Fadenkreuz_HG_Farbe))
		WritePreferenceString("Fadenkreuz_Transparenz" ,Str(Fadenkreuz_Transparenz))
		
		
		WritePreferenceString("Font_Default_T" , Font_Default_T)
		WritePreferenceString("Font_Default_G" , Str(Font_Default_G))
		
		WritePreferenceString("Font_User_T" , Font_User_T)
		WritePreferenceString("Font_User_G" ,  Str(Font_User_G))
		
		ClosePreferences()
		
		
EndProcedure	

Procedure ChooseColor(Owner.l,startRGB,*cl.CustomColorList) 
	chc.choosecolor
	chc\LStructSize=SizeOf(choosecolor) 
	chc\hwndOwner=Owner
	chc\rgbResult=startRGB 
	chc\lpCustColors=*cl 
	chc\flags=#CC_ANYCOLOR|#CC_FULLOPEN|#CC_RGBINIT 
	If ChooseColor_(@chc)  
		ProcedureReturn chc\rgbResult 
	Else 
		ProcedureReturn -1 
	EndIf 
EndProcedure 

Procedure Farbe_wahlen()
	startColor.CustomColorList 
	startColor\RGB[0]=Fadenkreuz_Farbe
  startColor\RGB[1]=Fadenkreuz_VG_Farbe 
  startColor\RGB[2]=Fadenkreuz_HG_Farbe 
  
	choose=ChooseColor(200,0,@startColor) ;Als Owner die WindowID übergeben, wenn nicht vorhanden einfach 0
EndProcedure

Procedure.l MyImage(ImageNumber.l, Width.l, Height.l, Color.l)
  ImageID.l = CreateImage(ImageNumber, Width, Height)
  StartDrawing(ImageOutput(ImageNumber))
    Box(0, 0, Width, Height, Color)
  StopDrawing()
  ProcedureReturn ImageID
EndProcedure


Delay(1500)

Width  = GetSystemMetrics_(#SM_CXSCREEN) 
Height = GetSystemMetrics_(#SM_CYSCREEN) 


Preference_lesen()

OpenWindow(1,0,0,Width,Height,"",#PB_Window_Invisible|#PB_Window_BorderLess) 

;ShowCursor_(0) ; funkt nicht



CreateGadgetList(WindowID(1))
ImageGadget(0,0,0,Width,Height,MakeDesktopScreenshot(1,0,0,Width,Height)) 
ImageGadget(1,0,0,Width,Height, ImageID(1) ) 

;ShowCursor_(1) ; funkt nicht

Fenster_2_hdc = OpenWindow(2,240,260,800,500,"",#PB_Window_Invisible|#PB_Window_BorderLess)

CreateGadgetList(WindowID(2))
; 
; If LoadImage(2, HG_Fenster)
  ; ImageGadget(2,0,0,800,500, ImageID(2)) 
; EndIf
CreateImage(2, 800,500)
ImageGadget(2,0,0,800,500, ImageID(2)) 

SetWinOpacity (Fenster_2_hdc, 180)


ButtonImageGadget(105, 200, 100, 30, 30, MyImage(21, 30, 30, Fadenkreuz_Farbe))
ButtonImageGadget(106, 200, 150, 30, 30, MyImage(22, 30, 30, Fadenkreuz_VG_Farbe))
ButtonImageGadget(107, 200, 200, 30, 30, MyImage(23, 30, 30, Fadenkreuz_HG_Farbe))
   CheckBoxGadget(108, 200, 250, 30, 30, "")

ShowWindow_(WindowID(1),#SW_SHOWMAXIMIZED) 

AddKeyboardShortcut(1,#PB_Shortcut_F1, 15) ; Erstellt ein Tastaturkürzel F1 für das Fenster 0, Menu Ereignis 15
AddKeyboardShortcut(2,#PB_Shortcut_F1, 16) ; Erstellt ein Tastaturkürzel F2 für das Fenster 1, Menu Ereignis 16
AddKeyboardShortcut(1,#PB_Shortcut_Escape, 17) ; Erstellt ein Tastaturkürzel ESC zum beenden
 


;- Fonts laden

LoadFont(#Font_Default, Font_Default_T, Font_Default_G ) 
LoadFont(#Font_User, Font_User_T, Font_User_G) 

 
  
 

Repeat

  
   event = WaitWindowEvent(2) ; This line waits until an event is received from Windows
      
   WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
      
   GadgetID = EventGadget() ; Is it a gadget event?
      
   EventType = EventType() ; The event type
  
  
 
  Select event
      
       
    Case #WM_LBUTTONDOWN 
      Select WindowID
        Case 1
          MessageRequester("","window 1")
        Case 2
          MessageRequester("","Window 2")
          SendMessage_(Fenster_2_hdc, #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
      EndSelect
      
      
    Case #PB_Event_Menu
      Select EventMenu()

        Case 15   ; F1 Fenster1
          ShowWindow_(WindowID(2),#SW_SHOW) 
          SetWindowPos_(WindowID(2),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE) ; Fenster im Vordergrund
          Continue
          
        Case 16   ; F1 Fenster2
          ShowWindow_(WindowID(2),#SW_HIDE) 
          Continue
          
        Case 17   ; Escape Fenster1
          ClearClipboard()
          SetClipboardText(Text)
          Preference_schreiben()
          Quit = #True
          
      EndSelect
      
      
   
    Case #PB_Event_Gadget

      Select EventGadget()
          
        Case 105   
          Farbe_wahlen()
          FreeGadget(105)
          ButtonImageGadget(105, 200, 100, 30, 30, MyImage(21, 30, 30, choose))
          Fadenkreuz_Farbe = choose
          
        Case 106
          Farbe_wahlen()
          FreeGadget(106)
          ButtonImageGadget(106, 200, 150, 30, 30, MyImage(22, 30, 30, choose))
          Fadenkreuz_VG_Farbe = choose
          
        Case 107                                                   
          Farbe_wahlen()
          FreeGadget(107)
          ButtonImageGadget(107, 200, 200, 30, 30, MyImage(23, 30, 30, choose))
          Fadenkreuz_HG_Farbe = choose
          
          
      EndSelect
      
      
      
    Case 512
      Select WindowID
        Case 1
          Fadenkreuz()
          
        Case 2
          
      EndSelect
      
  EndSelect
Until Quit

Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Mausklicks werden aus 2. Fenster nicht angenommen

Beitrag von STARGÅTE »

Wie oft muss im Forum noch gesagt werden, dass PB keine übereinanderliegenden Gadgets erlaubt ?! :freak:

Disable das "Hintergrund" ImageGadget, und alles funktioniert!
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
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mausklicks werden aus 2. Fenster nicht angenommen

Beitrag von Kiffi »

STARGÅTE hat geschrieben:Wie oft muss im Forum noch gesagt werden, dass PB keine übereinanderliegenden Gadgets erlaubt ?!
ein Fall für die FAQ? ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Mausklicks werden aus 2. Fenster nicht angenommen

Beitrag von STARGÅTE »

das hast du schon das letzte mal gesagt ^^
http://www.purebasic.fr/german/viewtopi ... 16&t=23541

oke, bis zum Wochenende stehts drin, versprochen. :allright:
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
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mausklicks werden aus 2. Fenster nicht angenommen

Beitrag von Kiffi »

STARGÅTE hat geschrieben:oke, bis zum Wochenende stehts drin, versprochen. :allright:
Strrrike! :lol: :allright:

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
kapege
Beiträge: 39
Registriert: 28.12.2004 17:35
Computerausstattung: AMD Ryzen 7 3700X 8-Core Processor 3.60 GHz
Windows 10 Pro 64bit
14 GB Ram

PureBasic 6.00 LTS (Windows - x64)
Wohnort: Trostberg

Re: Mausklicks werden aus 2. Fenster nicht angenommen

Beitrag von kapege »

STARGÅTE hat geschrieben:das hast du schon das letzte mal gesagt ^^
http://www.purebasic.fr/german/viewtopi ... 16&t=23541

oke, bis zum Wochenende stehts drin, versprochen. :allright:
Danke für den Link

man muss aber auch erstmal draufkommen, wie man die Frage bei der Suche formuliert.
Hab heute über 8Std. hier im Forum gesucht und gelesen und getestet.

auf jeden Fall DANKE
Grüsse Peter
Antworten