Code: Select all
Global SelectGadget
Procedure GetGadgetFlag(Gadget.i)
CompilerIf #PB_Compiler_OS =#PB_OS_Windows
ProcedureReturn GetWindowLongPtr_(GadgetID(Gadget), #GWL_STYLE) ;| GetWindowLongPtr_(GadgetID(Gadget), #GWL_EXSTYLE)
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
ProcedureReturn 0
CompilerEndIf
EndProcedure
Procedure GetWindow(Gadget.i)
Static ID,hWnd
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
If IsGadget(Gadget)
If hWnd<>GadgetID(Gadget)
hWnd=GadgetID(Gadget)
ID=-1
EndIf
While ID =-1
hWnd=GetParent_(hWnd)
ID=GetProp_(hWnd,"PB_WindowID")-1
If IsWindow(ID)
ProcedureReturn ID
EndIf
Wend
EndIf
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
If IsGadget(Gadget)
ProcedureReturn Gtk_widget_get_toplevel_(GadgetID(Gadget))
EndIf
CompilerEndIf
EndProcedure
Procedure SetData(Gadget,GadgetData.s,gData)
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
g_object_set_data_(GadgetID(Gadget),GadgetData,gData))
CompilerElseIf #PB_Compiler_OS = #PB_OS_Windows
SetProp_(GadgetID(Gadget),GadgetData,gData)
CompilerEndIf
EndProcedure
Procedure GetData(Gadget,GadgetData.s)
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
ProcedureReturn g_object_get_data_(GadgetID(Gadget),GadgetData)
CompilerElseIf #PB_Compiler_OS = #PB_OS_Windows
ProcedureReturn GetProp_(GadgetID(Gadget),GadgetData)
CompilerEndIf
EndProcedure
Procedure PasteGadget(Gadget)
If IsGadget(Gadget)
Protected ID=Gadget
Protected Type=GadgetType(ID)
Protected w=GadgetWidth(ID)
Protected h=GadgetHeight(ID)
Define$ Caption=GetGadgetText(ID)
Protected Flag=GetGadgetFlag(ID)
Protected ParentWindow = GetData(ID,"Parent")
Protected OldGadgetList = UseGadgetList(WindowID(ParentWindow))
If Type=#PB_GadgetType_Unknown
Debug "пока не знаю что за гаджет"
ElseIf Type=#PB_GadgetType_Button ;1
ButtonGadget(ID, 0, 0, 0, 0,Caption,Flag)
ElseIf Type=#PB_GadgetType_String
StringGadget(ID, 0, 0, 0, 0,Caption,Flag)
ElseIf Type=#PB_GadgetType_Text
TextGadget(ID, 0, 0, 0, 0,Caption,Flag)
EndIf
ResizeGadget(ID,WindowMouseX(ParentWindow), WindowMouseY(ParentWindow), w,h)
UseGadgetList(OldGadgetList)
ProcedureReturn -1
EndIf
EndProcedure
Procedure CopyGadget(Gadget)
Protected ID=Gadget
Protected Type=GadgetType(ID)
Protected x=GadgetX(ID)
Protected y=GadgetY(ID)
Protected w=GadgetWidth(ID)
Protected h=GadgetHeight(ID)
Define$ Caption=GetGadgetText(ID)
Protected Flag=GetGadgetFlag(ID)
If Type=#PB_GadgetType_Unknown
Debug "пока не знаю что за гаджет"
ElseIf Type=#PB_GadgetType_Button ;1
ButtonGadget(ID, 0, 0, 0, 0,Caption,Flag)
ElseIf Type=#PB_GadgetType_String
StringGadget(ID, 0, 0, 0, 0,Caption,Flag)
ElseIf Type=#PB_GadgetType_Text
TextGadget(ID, 0, 0, 0, 0,Caption,Flag)
EndIf
ResizeGadget(ID,x, y, w,h)
SetData(Gadget,"Parent",GetWindow(Gadget))
EndProcedure
If OpenWindow(1, 0, 0, 600, 440, "Split Picture", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
StickyWindow(1, 1)
ButtonGadget(230, 15, 375, 80, 25, "ButtonGadget",#PB_Button_Toggle)
TextGadget(214, 95, 10, 60, 25, "TextGadget",#SS_NOTIFY);|#PB_Text_Border)
EndIf
Repeat
Event=WaitWindowEvent()
If Event =#PB_Event_Gadget
SelectGadget = EventGadget()
CopyGadget(SelectGadget)
EndIf
If Event =#PB_Event_LeftClick
SelectGadget= PasteGadget(SelectGadget)
EndIf
If Event=#PB_Event_CloseWindow And EventWindow()=1
End
EndIf
ForEver