Is there a way to get gadget num from gadgetid?
Is there a way to get gadget num from gadgetid?
GadgetNum( gadgetID )
ie:
A reverse of GadgetID( num ) ? (Either generically, or windows specific) Not a big of a deal, just trying to make my code as readable as possible.
ie:
A reverse of GadgetID( num ) ? (Either generically, or windows specific) Not a big of a deal, just trying to make my code as readable as possible.
Re: Is there a way to get gadget num from gadgetid?
I use #PB_Any on creation and keep track dynamically of both gadNumber & gadHandle in a structured array.
If you use #MY_GADGET_NUMBER, you could still do the same.
If you use #MY_GADGET_NUMBER, you could still do the same.
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
Re: Is there a way to get gadget num from gadgetid?
Use Enumeration for gadget constants and not #PB_Any
Base example:
Base example:
Code: Select all
;-TOP
#ProgramTitle = "Main Window"
#ProgramVersion = "v1.01.2"
Enumeration Windows
#Main
EndEnumeration
Enumeration MenuBar
#MainMenu
EndEnumeration
Enumeration MenuItems
#MainMenuAbout
#MainMenuExit
EndEnumeration
Enumeration Gadgets
#MainEdit
#MainButtonOk
#MainButtonCancel
EndEnumeration
Enumeration StatusBar
#MainStatusBar
EndEnumeration
Procedure UpdateWindow()
Protected dx, dy
dx = WindowWidth(#Main)
dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
; Resize gadgets
ResizeGadget(#MainEdit, 5, 5, dx - 10, dy - 45)
ResizeGadget(#MainButtonok, 10, dy - 35, 120, 30)
ResizeGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30)
EndProcedure
Procedure Main()
Protected dx, dy
#MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, #ProgramTitle , #MainStyle)
; Menu
CreateMenu(#MainMenu, WindowID(#Main))
MenuTitle("&File")
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
MenuItem(#PB_Menu_About, "")
CompilerElse
MenuItem(#MainMenuAbout, "About")
CompilerEndIf
; Menu File Items
CompilerIf Not #PB_Compiler_OS = #PB_OS_MacOS
MenuBar()
MenuItem(#MainMenuExit, "E&xit")
CompilerEndIf
; StatusBar
CreateStatusBar(#MainStatusBar, WindowID(#Main))
AddStatusBarField(#PB_Ignore)
; Gadgets
dx = WindowWidth(#Main)
dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
EditorGadget(#MainEdit, 5, 5, dx -10, dy - 45)
ButtonGadget(#MainButtonok, 10, dy - 35, 120, 30, "Ok")
ButtonGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30, "Abbruch")
; Bind Events
BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
; Event Loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Main
Break
EndSelect
Case #PB_Event_Menu
Select EventMenu()
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
Case #PB_Menu_About
PostEvent(#PB_Event_Menu, #Main, #MainMenuAbout)
Case #PB_Menu_Preferences
Case #PB_Menu_Quit
PostEvent(#PB_Event_CloseWindow, #Main, #Null)
CompilerEndIf
Case #MainMenuAbout
MessageRequester("About", #ProgramTitle + #LF$ + #ProgramVersion, #PB_MessageRequester_Info)
Case #MainMenuExit
PostEvent(#PB_Event_CloseWindow, #Main, #Null)
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #MainEdit
Select EventType()
Case #PB_EventType_Change
;
EndSelect
Case #MainButtonOk
;
Case #MainButtonCancel
;
EndSelect
EndSelect
ForEver
EndIf
EndProcedure : Main()
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Re: Is there a way to get gadget num from gadgetid?
Hi jassing,
I've used the following (posted by hallodri) with success (Windows only): viewtopic.php?p=201822&sid=d348bc8a3d8a ... f7#p201822
I've used the following (posted by hallodri) with success (Windows only): viewtopic.php?p=201822&sid=d348bc8a3d8a ... f7#p201822
If you're not investing in yourself, you're falling behind.
My PureBasic Stuff ➤ FREE STUFF, Scripts & Programs.
My PureBasic Forum ➤ Questions, Requests & Comments.
Re: Is there a way to get gadget num from gadgetid?
All good ideas, but unfortunately, none of them result in a GadgetNum() type result...
Windows API returns a gadgetID / windowsID, not a gadgetnum, or windowsnum, I'm trying to result back w/o enumerating gadgets & comparing gadgetid()
Thank you for your time.
Windows API returns a gadgetID / windowsID, not a gadgetnum, or windowsnum, I'm trying to result back w/o enumerating gadgets & comparing gadgetid()
Thank you for your time.
Re: Is there a way to get gadget num from gadgetid?
PERFECT! Thank you!!!JHPJHP wrote: Fri Apr 07, 2023 10:06 pm Hi jassing,
I've used the following (posted by hallodri) with success (Windows only): viewtopic.php?p=201822&sid=d348bc8a3d8a ... f7#p201822
Code: Select all
Macro WindowsNum(w) : GetProp_(w,"PB_WindowID")-1 : EndMacro
Macro GadgetNum(g) : GetProp_(g,"PB_ID") : EndMacro
; or
Macro GadgetNum(g) : GetDlgCtrlID_(g) : EndMacro
The GetDlgCtrlID() is substantially faster than GetPro_() if called a ridiculous amount of times. But for occasional use, I think it makes no difference.
Re: Is there a way to get gadget num from gadgetid?
I don't understand what you are trying to achieve.
The system handle/object is only needed to make OS specific enhancements. For PB management, the PB id's are enough to do everything else. Either by creating with constants or by creating with #PB_Any. With #PB_Any you get PB id's that are dynamic and have nothing to do with the OS specific handle/object.
Please read the help topics of Purebasic here
Various Topics
- PureBasic objects overview
- Handles and Numbers
The system handle/object is only needed to make OS specific enhancements. For PB management, the PB id's are enough to do everything else. Either by creating with constants or by creating with #PB_Any. With #PB_Any you get PB id's that are dynamic and have nothing to do with the OS specific handle/object.
Please read the help topics of Purebasic here
Various Topics
- PureBasic objects overview
- Handles and Numbers
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Re: Is there a way to get gadget num from gadgetid?
@jassing: i think that you are looking for is in the mksoft's multiplatform system module here
viewtopic.php?f=12&t=72980
M.
viewtopic.php?f=12&t=72980
M.
Re: Is there a way to get gadget num from gadgetid?
I'm fairly new to PB but in a running program If I need to get a gadget number and put it into an array I simply
Array_Buttons(Row,Col) = #Gadget_Form1_Button_Row14_Col4
or into a variable
x.i = #Gadget_Launch_VNC_Form1_Button_Row14_Col4
Array_Buttons(Row,Col) = #Gadget_Form1_Button_Row14_Col4
or into a variable
x.i = #Gadget_Launch_VNC_Form1_Button_Row14_Col4
Re: Is there a way to get gadget num from gadgetid?
Some windows API's return a window handle (or "WindowID"). If you created a window
OpenWindow(1, .....)
You aren't going to normally 'save' the resulting WindowID. If you happen to call an API that returns a handle, it's "cleaner" (IMHO) to have a function that is "WindowNum( 33943940202 )" to get that it's window #1 vs saving global variables or looping thru available windows to use WindowID() to compare. This is more true if you are creating generic procedures/modules you intend to reuse in other projects.
Sure, I could have
WindowHandle1 = openwindow(1, ....) and then re-use that handle later for comparison, but if the module is generic, it won't know what variable you used at the time, and would have to cycle thru the wndows...
It's a style preference vs "a problem".
OpenWindow(1, .....)
You aren't going to normally 'save' the resulting WindowID. If you happen to call an API that returns a handle, it's "cleaner" (IMHO) to have a function that is "WindowNum( 33943940202 )" to get that it's window #1 vs saving global variables or looping thru available windows to use WindowID() to compare. This is more true if you are creating generic procedures/modules you intend to reuse in other projects.
Sure, I could have
WindowHandle1 = openwindow(1, ....) and then re-use that handle later for comparison, but if the module is generic, it won't know what variable you used at the time, and would have to cycle thru the wndows...
It's a style preference vs "a problem".
Re: Is there a way to get gadget num from gadgetid?
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive