Program Layout
Re: Program Layout
Only if you had declared the procedures called by 5. Else it would be like this:Hot Pockets wrote:Would it work as well if I reversed the order of items 4 and 5. (Just an idea.)
Code: Select all
RunMainProgram() ; 5
Procedure RunMainProgram() ;4
; Do something nice
EndProcedure
-
- User
- Posts: 51
- Joined: Mon Jun 01, 2009 3:56 am
Program Layout
Thanks for the Help All !! Reversing the order is the way I'll go(it just seems more logical(to me) and using an INclude file with Declarations is a Pretty good idea too, I would Think you put Enumerations and Costants in that same File. I think my program will not run correctly because i did't use the procedure word in either.
-
- User
- Posts: 51
- Joined: Mon Jun 01, 2009 3:56 am
Code that won't run one proc after another has run
When I run the code below it will not run the second procedure but it will run the 1st. If I remark out Splashscr() and run it, it will run the Menu and Menu works. Why can't I get the procedures to run concurrently? :roll:
Declare SplashScr()
Declare MainMenu()
Enumeration
#WIN_MAIN
#IMAGE_FILE
#IMAGE_DISPLAY
EndEnumeration;;;;;;;;;;;;
Global Quit.b = #False
SplashScr()
MainMenu()
Procedure SplashScr()
#FLAGS = #PB_Window_BorderLess | #PB_Window_ScreenCentered
If OpenWindow(#WIN_MAIN, 0, 0, 1024, 768, "Image", #FLAGS)
If LoadImage(#IMAGE_FILE, "StarMap3.bmp")
ImageGadget(#IMAGE_DISPLAY, 0, 0, 1024, 768, ImageID(#IMAGE_FILE))
StartTime = ElapsedMilliseconds() ; Get the actual value
Delay(1000) ; Wait 1000 milliseconds
ElapsedTime = ElapsedMilliseconds()-StartTime ; 'ElapsedTime' value should be about
Quit = #True
EndIf
EndIf
CloseWindow(Image)
MainMenu.s()
EndProcedure
; Create the menu. The indent is very important here for a good lisibility
Procedure MainMenu()
#Result = #PB_Window_TitleBar | #PB_Window_ScreenCentered
OpenWindow(1, 0, 0, 1024, 768, "Command")
If CreateMenu(1, WindowID(1))
MenuTitle("File")
MenuItem( 1, "&Load...")
MenuItem( 2, "Save")
MenuItem( 3, "Save As...")
MenuBar()
OpenSubMenu("Recents")
MenuItem( 5, "Pure.png")
MenuItem( 6, "Basic.jpg")
OpenSubMenu("Even more !")
MenuItem( 12, "Yeah")
CloseSubMenu()
MenuItem( 13, "Rocks.tga")
CloseSubMenu()
MenuBar()
MenuItem( 7, "&Quit")
MenuTitle("Edition")
MenuItem( 8, "Cut")
MenuItem( 9, "Copy")
MenuItem(10, "Paste")
MenuTitle("?")
MenuItem(11, "About")
EndIf
DisableMenuItem(1, 3, 1)
DisableMenuItem(1, 13, 1)
; This is the 'event loop'. All the user actions are processed here.
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 11 ; About
MessageRequester("About", "Cool Menu example", 0)
Default
MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndProcedure
End
Declare SplashScr()
Declare MainMenu()
Enumeration
#WIN_MAIN
#IMAGE_FILE
#IMAGE_DISPLAY
EndEnumeration;;;;;;;;;;;;
Global Quit.b = #False
SplashScr()
MainMenu()
Procedure SplashScr()
#FLAGS = #PB_Window_BorderLess | #PB_Window_ScreenCentered
If OpenWindow(#WIN_MAIN, 0, 0, 1024, 768, "Image", #FLAGS)
If LoadImage(#IMAGE_FILE, "StarMap3.bmp")
ImageGadget(#IMAGE_DISPLAY, 0, 0, 1024, 768, ImageID(#IMAGE_FILE))
StartTime = ElapsedMilliseconds() ; Get the actual value
Delay(1000) ; Wait 1000 milliseconds
ElapsedTime = ElapsedMilliseconds()-StartTime ; 'ElapsedTime' value should be about
Quit = #True
EndIf
EndIf
CloseWindow(Image)
MainMenu.s()
EndProcedure
; Create the menu. The indent is very important here for a good lisibility
Procedure MainMenu()
#Result = #PB_Window_TitleBar | #PB_Window_ScreenCentered
OpenWindow(1, 0, 0, 1024, 768, "Command")
If CreateMenu(1, WindowID(1))
MenuTitle("File")
MenuItem( 1, "&Load...")
MenuItem( 2, "Save")
MenuItem( 3, "Save As...")
MenuBar()
OpenSubMenu("Recents")
MenuItem( 5, "Pure.png")
MenuItem( 6, "Basic.jpg")
OpenSubMenu("Even more !")
MenuItem( 12, "Yeah")
CloseSubMenu()
MenuItem( 13, "Rocks.tga")
CloseSubMenu()
MenuBar()
MenuItem( 7, "&Quit")
MenuTitle("Edition")
MenuItem( 8, "Cut")
MenuItem( 9, "Copy")
MenuItem(10, "Paste")
MenuTitle("?")
MenuItem(11, "About")
EndIf
DisableMenuItem(1, 3, 1)
DisableMenuItem(1, 13, 1)
; This is the 'event loop'. All the user actions are processed here.
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 11 ; About
MessageRequester("About", "Cool Menu example", 0)
Default
MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndProcedure
End
- Kaeru Gaman
- Addict
- Posts: 4826
- Joined: Sun Mar 19, 2006 1:57 pm
- Location: Germany
-
- User
- Posts: 51
- Joined: Mon Jun 01, 2009 3:56 am
Why wont it work?
Mr Gaman
I've never seen a code Tag or heard of a code tag. Is that the same as COMMENTS? There are already comments with the code displayed. If you mean't comments then I don't think(Since I know nothing about purebasic } I could have any comments to make. Purebasic seems to be very far removed from any basic I've used before(That is neither bad or good) Just an observation! I still need to know why The 1st Procedure
works and the next will not follow. Thanks for trying to help me. This is very vexing because it seems to me it should be a simple problem. In some other basics they use the Call statement to force it to work, but I can not find an equivalent.
I've never seen a code Tag or heard of a code tag. Is that the same as COMMENTS? There are already comments with the code displayed. If you mean't comments then I don't think(Since I know nothing about purebasic } I could have any comments to make. Purebasic seems to be very far removed from any basic I've used before(That is neither bad or good) Just an observation! I still need to know why The 1st Procedure
works and the next will not follow. Thanks for trying to help me. This is very vexing because it seems to me it should be a simple problem. In some other basics they use the Call statement to force it to work, but I can not find an equivalent.

Just put
[ code ]
all your code here
[ / code ]
(without the spaces
and it will use a fixed width font and make it green like this
[ code ]
all your code here
[ / code ]
(without the spaces
and it will use a fixed width font and make it green like this
Code: Select all
Declare SplashScr()
Declare MainMenu()
Enumeration
#WIN_MAIN
#IMAGE_FILE
#IMAGE_DISPLAY
EndEnumeration;;;;;;;;;;;;
Global Quit.b = #False
SplashScr()
MainMenu()
Procedure SplashScr()
#FLAGS = #PB_Window_BorderLess | #PB_Window_ScreenCentered
If OpenWindow(#WIN_MAIN, 0, 0, 1024, 768, "Image", #FLAGS)
If LoadImage(#IMAGE_FILE, "StarMap3.bmp")
ImageGadget(#IMAGE_DISPLAY, 0, 0, 1024, 768, ImageID(#IMAGE_FILE))
StartTime = ElapsedMilliseconds() ; Get the actual value
Delay(1000) ; Wait 1000 milliseconds
ElapsedTime = ElapsedMilliseconds()-StartTime ; 'ElapsedTime' value should be about
Quit = #True
EndIf
EndIf
CloseWindow(Image)
MainMenu.s()
EndProcedure
; Create the menu. The indent is very important here for a good lisibility
Procedure MainMenu()
#Result = #PB_Window_TitleBar | #PB_Window_ScreenCentered
OpenWindow(1, 0, 0, 1024, 768, "Command")
If CreateMenu(1, WindowID(1))
MenuTitle("File")
MenuItem( 1, "&Load...")
MenuItem( 2, "Save")
MenuItem( 3, "Save As...")
MenuBar()
OpenSubMenu("Recents")
MenuItem( 5, "Pure.png")
MenuItem( 6, "Basic.jpg")
OpenSubMenu("Even more !")
MenuItem( 12, "Yeah")
CloseSubMenu()
MenuItem( 13, "Rocks.tga")
CloseSubMenu()
MenuBar()
MenuItem( 7, "&Quit")
MenuTitle("Edition")
MenuItem( 8, "Cut")
MenuItem( 9, "Copy")
MenuItem(10, "Paste")
MenuTitle("?")
MenuItem(11, "About")
EndIf
DisableMenuItem(1, 3, 1)
DisableMenuItem(1, 13, 1)
; This is the 'event loop'. All the user actions are processed here.
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 11 ; About
MessageRequester("About", "Cool Menu example", 0)
Default
MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndProcedure
End
Paul Dwyer
“In nature, it’s not the strongest nor the most intelligent who survives. It’s the most adaptable to change” - Charles Darwin
“If you can't explain it to a six-year old you really don't understand it yourself.” - Albert Einstein
“In nature, it’s not the strongest nor the most intelligent who survives. It’s the most adaptable to change” - Charles Darwin
“If you can't explain it to a six-year old you really don't understand it yourself.” - Albert Einstein
I've had this problem in the past... the not seeing the menu or any gadgets on a window that has a SDL (sprite) surface on it. I don't remember my solution, but it had something to do with the main loop. Try replacing yours with this and see if it helps:
Code: Select all
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
ForEver
-
- User
- Posts: 51
- Joined: Mon Jun 01, 2009 3:56 am
Why won't it work?
Thanks for the help to the last two gentleman. To Mr Gaman. Anybody who can make 3400 or so posts and can't answer my simple question because the code was not in the right color needs help. Your aditude is
atrocious. You could of simply showed me how to do it and I would of cheerrily complied. Since 1 of the gentlemen was gracious enuff to give me something I shall try, perhaps you could be gentleman enuff to look at the Now green code and try your hand at a possible solution.
atrocious. You could of simply showed me how to do it and I would of cheerrily complied. Since 1 of the gentlemen was gracious enuff to give me something I shall try, perhaps you could be gentleman enuff to look at the Now green code and try your hand at a possible solution.
Re: Why won't it work?
No one here is obliged to help you. Here, as other places, it's more likely that you get help if do your best to make it easy to help you.Hot Pockets wrote:Thanks for the help to the last two gentleman. To Mr Gaman. Anybody who can make 3400 or so posts and can't answer my simple question because the code was not in the right color needs help.
The code tag is not about the colour, it's about the indentation (spaces at the start of each line). Without it it's very hard to make sense of the code.
Additionally, you're posting the same question in two topics. This is like asking people for help, and when they don't help you, you just keep asking them. It's considered bad taste.
It's very hard to help you with the code because you seem to have a fundamental misunderstanding of how procedural programming (that's just normal programming) works. Each line is executed in succession, they don't execute all at once. You should start by writing your own codes rather than re-using code that you don't understand. That way you will learn faster.
I suggest you take a look here: http://www.xs4all.nl/~bluez/datatalk/pure1.htm
It's a beginner's guide to PureBasic, which also covers advanced topics. It will probably help you a lot.
Here is the program:
Code: Select all
Procedure SplashScr()
If LoadImage(0, "C:\map.bmp")
If OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Image", #PB_Window_BorderLess | #PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, 0, 0, ImageID(0))
Delay(1000)
EndIf
EndIf
CloseWindow(0)
EndProcedure
Procedure MainMenu()
OpenWindow(1, 0, 0, 512, 384, "Command", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
If CreateMenu(1, WindowID(1))
MenuTitle("File")
MenuItem( 1, "&Load...")
MenuItem( 2, "Save")
MenuItem( 3, "Save As...")
MenuBar()
OpenSubMenu("Recents")
MenuItem( 5, "Pure.png")
MenuItem( 6, "Basic.jpg")
OpenSubMenu("Even more !")
MenuItem( 12, "Yeah")
CloseSubMenu()
MenuItem( 13, "Rocks.tga")
CloseSubMenu()
MenuBar()
MenuItem( 7, "&Quit")
MenuTitle("Edition")
MenuItem( 8, "Cut")
MenuItem( 9, "Copy")
MenuItem(10, "Paste")
MenuTitle("?")
MenuItem(11, "About")
EndIf
DisableMenuItem(1, 3, 1)
DisableMenuItem(1, 13, 1)
; This is the 'event loop'. All the user actions are processed here.
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 11 ; About
MessageRequester("About", "Cool Menu example", 0)
Default
MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndProcedure
SplashScr()
MainMenu()
By the way, the point of a splash screen is to show something while the program loads. In this case the splash screen is bascially just wasted time because nothing happens while it's shown.
-
- User
- Posts: 51
- Joined: Mon Jun 01, 2009 3:56 am
Why won't it run?
My sincere apology to Mr Gaman. I overlooked the fact that My program lost its indentation because I saved it as Text. If I would of known how great Tags were I would of used them,(Great idea!)
Trend:
Thanks for setting me straight. I have already downloaded that book and printed all 350 Pages. Now I gusess it will end up in the dumper along with the money I spent buying PB.I don't think I'll ever be able to learn
PB. It is far more complicated from my point of view then Dark Basic or
Blitz Basic or Visual Basic 4. The only thing I almost learned that had almost as many constants was Ibasic. Again I am not really a programer. I wrote 1 very large Check register program in MS Basic7.11 That works well for me and I've been trying to re=write it for windows. Hah!! I doubt I'll ever suceed I am 80 years old, you never know tho, my health is good. Thanks for all your help!!
Trend:
Thanks for setting me straight. I have already downloaded that book and printed all 350 Pages. Now I gusess it will end up in the dumper along with the money I spent buying PB.I don't think I'll ever be able to learn
PB. It is far more complicated from my point of view then Dark Basic or
Blitz Basic or Visual Basic 4. The only thing I almost learned that had almost as many constants was Ibasic. Again I am not really a programer. I wrote 1 very large Check register program in MS Basic7.11 That works well for me and I've been trying to re=write it for windows. Hah!! I doubt I'll ever suceed I am 80 years old, you never know tho, my health is good. Thanks for all your help!!

- netmaestro
- PureBasic Bullfrog
- Posts: 8451
- Joined: Wed Jul 06, 2005 5:42 am
- Location: Fort Nelson, BC, Canada
That isn't true. You don't have to master the whole language to make use of PureBasic. In fact, few if any of us can honestly say we "know" PB in the sense that no part of it holds anything new for us. I know I can't. Displaying a basic window and putting some simple controls on it is a matter of a few easy lines in PureBasic, yet just this much can yield a very useful program. You can do it, believe me. I just have a few suggestions for you:I don't think I'll ever be able to learn PB.
1) Stick to programming challenges that you find really interesting.
2) Take your time, there's no rush.
3) Once you've mastered something, use it. Something you've used twelve times will be nearly second nature, no matter how hard it was to get that first one working.
4) Make yourself a sourcecode folder where you keep snippets of code that you can skim through when you want to remember how to do something. It's embarassing how many times I've had to search the forums for my own postings to refresh my memory on a given solution.
Lastly, feel free to PM me any time with coding questions or snippets you need help with. I'll do my best to help you in any way I can.
BERESHEIT