This article and demo programs will help you handle multiple windows flawlessly.
There are only a few things to remember, but they are important.
(1) Don't try to open a window that is already open.
(2) Don't try to close a window that is already closed.
(3) As your program is quitting, close all open windows.
We are going to show two methods. The first one uses a dedicated variable to
remember the condition of each window. Think of it as a flag. When the flag is up,
the window is open, and when it is down the window is closed. This method is
good when dealing with a limited number of windows.
' Managing Multiple Windows' using dedicated variables
nomainwin
win1Open =0' windows closed
win2Open =0' Let's open our first window
UpperLeftX =100
UpperLeftY =50
Open "Window One"For graphics As #win1
#win1, "trapclose [exitprogram]"
win1Open =1' Let's open our second window
UpperLeftX =450
Open "Window Two"For graphics As #win2
#win2, "trapclose [exitprogram]"
win2Open =1
#win2, "place 30 60 ; down"
#win2, "\Click Red Close button to exit."
#win2, "flush"
Wait
[exitprogram]If win1Open=1Then Close #win1
If win2Open=1Then Close #win2
END
The second method we will look at is very similar to the previous one but uses
an array rather than separate variables. This is better for keeping track of a
larger number of windows.
' Managing Multiple Windows' using a array' Avoid using REDIM on this array because it' resets all array elements to 0.Dim winOpen(10)' our array of flags
nomainwin
' Let's open our first window
UpperLeftX =100
UpperLeftY =50
Open "Window One"For graphics As #win1
#win1, "trapclose [exitprogram]"
winOpen(1)=1' Let's open our second window
UpperLeftX =450
Open "Window Two"For graphics As #win2
#win2, "trapclose [exitprogram]"
winOpen(2)=1
#win2, "place 30 60 ; down"
#win2, "\Click Red Close button to exit."
#win2, "flush"
Wait
[exitprogram]If winOpen(1)=1Then Close #win1
If winOpen(2)=1Then Close #win2
END
In this final example, we have a window that contains a button.
When the button is clicked we open a window that has us choose
where our program's output is to be sent or stored. If the window
is already open we bring it to the top with an API call. (Thanks Alyce)
' Managing Multiple Windows' a window demo with a button.
nomainwin
' win2 handle is used in Subs, so needs to be global.Global reporTo$, win2
' Avoid using REDIM on this array because it' resets all array elements to 0.Dim winOpen(10)' our array of flags' Let's open our first window
UpperLeftX =100
UpperLeftY =50
Button #win1.btn, "Send Report To", sendTo, UL, 100, 250, 120, 25
Open "Main Window"For window As #win1
#win1, "trapclose [exitprogram]"
winOpen(1)=1
Wait
[exitprogram]If winOpen(1)=1Then Close #win1
If winOpen(2)=1Then Close #win2
END' If window 2 closed, open it else bring it to front.Sub sendTo handle$
If winOpen(2)=0Then
UpperLeftX =450
UpperLeftY =100
wide =70 : high =25
Groupbox #win2.gb, "Select:", 20, 20, 100, 130
Radiobutton #win2.rb1, "File", set, nil, 30, 40, wide, high
Radiobutton #win2.rb2, "Printer", set, nil, 30, 70, wide, high
Radiobutton #win2.rb3, "Screen", set, nil, 30,100, wide, high
statictext #win2.st, " ", 20, 160, 250, 25
Open "Send Report to:"For window As #win2
#win2, "trapclose win2close"
winOpen(2)=1
#win2, "font Arial 10"Else
hWindow = hwnd(#win2)
CallDLL #user32, "BringWindowToTop",_
hWindow asuLong, _
result AsBooleanEndifEndSub
Also, Carl has shared his own method of managing multiple windows.
It's called multiwin.bas and comes with LB.
by harmonv -- June 2007
This article and demo programs will help you handle multiple windows flawlessly.
There are only a few things to remember, but they are important.
(1) Don't try to open a window that is already open.
(2) Don't try to close a window that is already closed.
(3) As your program is quitting, close all open windows.
We are going to show two methods. The first one uses a dedicated variable to
remember the condition of each window. Think of it as a flag. When the flag is up,
the window is open, and when it is down the window is closed. This method is
good when dealing with a limited number of windows.
The second method we will look at is very similar to the previous one but uses
an array rather than separate variables. This is better for keeping track of a
larger number of windows.
In this final example, we have a window that contains a button.
When the button is clicked we open a window that has us choose
where our program's output is to be sent or stored. If the window
is already open we bring it to the top with an API call. (Thanks Alyce)
Also, Carl has shared his own method of managing multiple windows.
It's called multiwin.bas and comes with LB.