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