Help re: flushebents, kill and systemwindow
Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller, robinmiller
-
- Posts: 4
- Joined: Wed Apr 12, 2006 3:15 pm
- Location: Australia
Help re: flushebents, kill and systemwindow
Hi,
I am fairly new to revolution and need some help to ensure an application loaded via the shell is always the top window, even if the user clicks on another window. I have searched the list and looked through the rev docs but can't find a solution which will work on all platforms.
The specific issue is....
I have an application which acts as a main menu (containing buttons) to load other applications I have made with rev. When I click on a button an application is loaded via the shell function and the do command. Howver, the application that is being loaded takes a couple of seconds to load. If I click on the main menu window (application) while the other application is loading the new application window will load behind the menu. The menu and the other applications do not have a title bar or controls (eg. minimize).
Is there a way to work around this?
I have tried putting flushevents("mousedown") as well as mouseup, system and activate in the handler. I have also tried to set the menu's systemwindow property to false if the user clicks on it while a linked application is loading. I tried to set the linked application's systemwindow to true once it is loaded - the application comes to the front for a split second then disappears behind the menu. I have tried to use the
click command to activate the new application as soon as it is loaded. Last, I have tried to use the kill command (when the menu is closed) to close the applications I know may have been loaded but are sitting behind the menu's window. I must not have been using this correctly as it didn't work. Can the kill command really close an application if the process image name is known? I have tried to use all of the above with the launch command as well.
Any help would be greatly appreciated.
Thanks,
Christina
I am fairly new to revolution and need some help to ensure an application loaded via the shell is always the top window, even if the user clicks on another window. I have searched the list and looked through the rev docs but can't find a solution which will work on all platforms.
The specific issue is....
I have an application which acts as a main menu (containing buttons) to load other applications I have made with rev. When I click on a button an application is loaded via the shell function and the do command. Howver, the application that is being loaded takes a couple of seconds to load. If I click on the main menu window (application) while the other application is loading the new application window will load behind the menu. The menu and the other applications do not have a title bar or controls (eg. minimize).
Is there a way to work around this?
I have tried putting flushevents("mousedown") as well as mouseup, system and activate in the handler. I have also tried to set the menu's systemwindow property to false if the user clicks on it while a linked application is loading. I tried to set the linked application's systemwindow to true once it is loaded - the application comes to the front for a split second then disappears behind the menu. I have tried to use the
click command to activate the new application as soon as it is loaded. Last, I have tried to use the kill command (when the menu is closed) to close the applications I know may have been loaded but are sitting behind the menu's window. I must not have been using this correctly as it didn't work. Can the kill command really close an application if the process image name is known? I have tried to use all of the above with the launch command as well.
Any help would be greatly appreciated.
Thanks,
Christina
Re: Help re: flushebents, kill and systemwindow
Hi Christina,
With so little information, it is really difficult to come up with a good reply.
Why don't you use the launch command or, if the menu is a Revolution application, why don't you build just one standalone that includes all applications?
On which are you trying to use the shell? I guess it is Mac OS X, since you are trying to use the kill command (while 2.7.1 is not available for Linux yet and being a new user you probably have 2.7 or later?).
Are the applications you made normal standalones, or did you take the executable out of the application package, since you're launching them from the shell?
Can't you just hide the menu until the application that was launched quits? Something like
hide me
get shell() -- add commands to launch app
show me
might work.
Why is it a problem that the menu appears in front of the application that is being launched?
To answer you question about the kill command, it really kills an application, it does not shut it down properly. I believe you will need to know the process id to kill a running application. So, you really need to know that the application is running to 'kill'.
Generally, I think you need to re-think your approach. Using the shell like this is really not necessary. I recommend making one application, possibly with a number of stack files. Your menu really asks for a "splash" style standalone. If you really feel you need a separate menu app, you could let it launch other applications, then let it quit and launch it again when one of the sattelite applications quits. Make sure to launch and quit correctly, don't use the kill command for that.
Best and good luck,
Mark
With so little information, it is really difficult to come up with a good reply.
Why don't you use the launch command or, if the menu is a Revolution application, why don't you build just one standalone that includes all applications?
On which are you trying to use the shell? I guess it is Mac OS X, since you are trying to use the kill command (while 2.7.1 is not available for Linux yet and being a new user you probably have 2.7 or later?).
Are the applications you made normal standalones, or did you take the executable out of the application package, since you're launching them from the shell?
Can't you just hide the menu until the application that was launched quits? Something like
hide me
get shell() -- add commands to launch app
show me
might work.
Why is it a problem that the menu appears in front of the application that is being launched?
To answer you question about the kill command, it really kills an application, it does not shut it down properly. I believe you will need to know the process id to kill a running application. So, you really need to know that the application is running to 'kill'.
Generally, I think you need to re-think your approach. Using the shell like this is really not necessary. I recommend making one application, possibly with a number of stack files. Your menu really asks for a "splash" style standalone. If you really feel you need a separate menu app, you could let it launch other applications, then let it quit and launch it again when one of the sattelite applications quits. Make sure to launch and quit correctly, don't use the kill command for that.
Best and good luck,
Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
-
- Posts: 4
- Joined: Wed Apr 12, 2006 3:15 pm
- Location: Australia
[img]Hi Tom and Mark,
Sorry I haven't posted a reply until now. I appreciate the time you took and the effort made. I had given up on receiving a reply to my question as I had submitted it to the list a month or so ago and it didn't even get approved. I guess the people at RunRev were busy setting up this forum. After posting on the forum and receiving no reply initially, I stopped checking my email account where notifications are sent.
I ended up working it out using the following in the card script of the menu
global gclick
on mouseup
if gclick = 1 then
then set the systemwindow of this stack to false
end if
end mouseup
The variable gclick is set to 1 when a menu item is selected and 0 when the specific linked application has opened. If the user clicks on the menu card while an app is loading, there is a slight screen flicker however, the new app loads in front.... not perfect but it will do. Previously, the user would not see the launched app if they had clicked on the menu app while the second app was loading. My menu is a full screen app.
The reason I chose to not include all the applications in a single standalone is because the menu is linked to over 80 different applications, which are heavily loaded with images, animations and sounds. At first I tried using the launch command but my menu application would crash on Windows. The shell hasn't caused me any problems as yet.
Last, thanks for the information about ‘kill’.
Thanks again, I promise I won’t be so tardy in future…..don’t want a bad reputation or anything
[/img]
Sorry I haven't posted a reply until now. I appreciate the time you took and the effort made. I had given up on receiving a reply to my question as I had submitted it to the list a month or so ago and it didn't even get approved. I guess the people at RunRev were busy setting up this forum. After posting on the forum and receiving no reply initially, I stopped checking my email account where notifications are sent.
I ended up working it out using the following in the card script of the menu
global gclick
on mouseup
if gclick = 1 then
then set the systemwindow of this stack to false
end if
end mouseup
The variable gclick is set to 1 when a menu item is selected and 0 when the specific linked application has opened. If the user clicks on the menu card while an app is loading, there is a slight screen flicker however, the new app loads in front.... not perfect but it will do. Previously, the user would not see the launched app if they had clicked on the menu app while the second app was loading. My menu is a full screen app.
The reason I chose to not include all the applications in a single standalone is because the menu is linked to over 80 different applications, which are heavily loaded with images, animations and sounds. At first I tried using the launch command but my menu application would crash on Windows. The shell hasn't caused me any problems as yet.
Last, thanks for the information about ‘kill’.
Thanks again, I promise I won’t be so tardy in future…..don’t want a bad reputation or anything
[/img]
Hi Christina,
Take your time, nobody expects an instant reply. Right? ;-)
I still don't understand somthing. If those other 80 apps are made with Revolution, why don't you just open them as a stack, within your menu app?
Best,
Mark
Take your time, nobody expects an instant reply. Right? ;-)
I still don't understand somthing. If those other 80 apps are made with Revolution, why don't you just open them as a stack, within your menu app?
Best,
Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
-
- Posts: 4
- Joined: Wed Apr 12, 2006 3:15 pm
- Location: Australia
Hi Mark,
Thanks for your reply. Will still aim to be prompt....I have standalones so that my apps are copy protected. I use PCGuard to protect my Windows executables.
Currently I'm donating my software to universities and want to try to ensure it is not used outside them. I know you can lock to the Mac Address on Macs and the HD serial on PCs via revolution, but I don't trust myself re: creating an activation system around this. I think I'll leave the key generation etc algorithms to the professionals
Thanks for your support.
Christina
Thanks for your reply. Will still aim to be prompt....I have standalones so that my apps are copy protected. I use PCGuard to protect my Windows executables.
Currently I'm donating my software to universities and want to try to ensure it is not used outside them. I know you can lock to the Mac Address on Macs and the HD serial on PCs via revolution, but I don't trust myself re: creating an activation system around this. I think I'll leave the key generation etc algorithms to the professionals
Thanks for your support.
Christina
Hi Christina,
A common approach is to have a library with most of the scripts of the project, while the other stacks call the handlers in that library. The library is often attached to the standalone, though not always.
Your sattelite applications could all use the scripts in a library, which is part of the standalone. When you open the standalone, it should start using that library. That would make it impossible to run the sattelite applications without the standalone and the standalone would need a license key to run. That should sufficiently secure your software and allows you to have just one standalone with a menu. Additionally, you can protect the stacks with a password.
Two more remarks: first, you don't need to be very suspicious about people stealing your stacks and, second, if people really want to, they will always find a way to hack your work. Providing a challenge only attracks more hackers.
I still think that having one standalone with a menu window and a number of stacks that are opened by the standalone is the right approach for you. You could still use PCGuard for the executable which includes the library.
Best,
Mark
A common approach is to have a library with most of the scripts of the project, while the other stacks call the handlers in that library. The library is often attached to the standalone, though not always.
Your sattelite applications could all use the scripts in a library, which is part of the standalone. When you open the standalone, it should start using that library. That would make it impossible to run the sattelite applications without the standalone and the standalone would need a license key to run. That should sufficiently secure your software and allows you to have just one standalone with a menu. Additionally, you can protect the stacks with a password.
Two more remarks: first, you don't need to be very suspicious about people stealing your stacks and, second, if people really want to, they will always find a way to hack your work. Providing a challenge only attracks more hackers.
I still think that having one standalone with a menu window and a number of stacks that are opened by the standalone is the right approach for you. You could still use PCGuard for the executable which includes the library.
Best,
Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
-
- Posts: 4
- Joined: Wed Apr 12, 2006 3:15 pm
- Location: Australia
Thanks for the direction
Hi Mark,
If only I have chatted to you seven months ago. The approach you recommend would have reduced the size of the software by about 100 MB. I will definitely use such an approach in the future. I think I need to do a programming course
Cheers,
Christina
If only I have chatted to you seven months ago. The approach you recommend would have reduced the size of the software by about 100 MB. I will definitely use such an approach in the future. I think I need to do a programming course
Cheers,
Christina
Well, instead of doing an expensive course, you can always ask here, before you start a new project. Btw, there are also several professional consultants around, as you can see on the runrev.com web site ;-) Good luck with the release of your software!
Best,
Mark
Best,
Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode