If you want to manipulate child forms in relation to [color blue]_SCREEN[color black] and [color blue]_SCREEN[color black] in relation to child forms, and start your application in the last position on screen, you need to add both [color blue].Resize()[color black] and [color blue].Moved()[color black] methods to [color blue]_SCREEN[color black].
In the root of main.prg put
[color blue]
DO ScreenResizeClass
[color black]
Then create a procedure :-
[color green]
* *********************************
* Procedure: ScreenResizeClass
* Syntax: DO ScreenResizeClass
* *********************************[color blue]
PROC ScreenResizeClass
[color green]
* IF you are using VFP 8.0 SP1, replace the first 6 lines of the procedure with the following code
* PUBLIC oScreenHandler
* oScreenHandler = NEWOBJECT([ScreenHandler])
IF VARTYPE(oMain) = [O]
WITH oMain
.LockScreen = .T.
[color green]&& Code[color blue]
.LockScreen = .F.
ENDW
ENDI
IF VARTYPE(oChild1) = [O]
WITH oChild1
.LockScreen = .T.
[color green]&& Code[color blue]
.LockScreen = .F.
ENDW
ENDI
IF VARTYPE(oChild2) = [O]
WITH oChild2
.LockScreen = .T.
[color green]&& Code[color blue]
.LockScreen = .F.
ENDW
ENDI
IF VARTYPE(oStatusBar) = [O]
WITH oStatusBar
.LockScreen = .T.
[color green]&& Code[color blue]
.LockScreen = .F.
ENDW
ENDI
ENDPROC
ENDDEFINE
[color black]
If you are not using VFP 8.0 SP1, in the [color blue].Load()[color black] event of your main form put :-
[color blue]
WITH _SCREEN
.AddObject([oResizer],[Resizer])
.AddObject([oScreenMoved],[ScreenMoved])
ENDW
[color black]
As you can see, you can add a [color blue].Moved()[color black] method which enables you to write the coordinates of [color blue]_SCREEN[color black] to a table so that the app always starts in the last position.
The code for the procedure, [color blue]ScreenMovedClass[color black], ([color blue]_SCREEN.Moved()[color black]), should follow the style of the [color blue]ScreenResizeClass[color black] procedure, excepting that you only need a code segment for [color blue]_SCREEN[color black].
In the example code above, you will find a reference to [color blue]oStatusBar[color black] - see 'How can I create my own statusbar?' - faq184-3155 for details.
What other code do you put in these methods?
[color blue]_SCREEN.Resize()[color black] should only be called from a resizable child forms' [color blue].Resize()[color black] event so that [color blue]_SCREEN[color black] can be resized in relation to the dimensions of the child form.
You will find it easier to perform the resizing/positioning of controls in all the child forms of an application in the [color blue]_SCREEN.Resize()[color black] method.
Equally, [color blue]_SCREEN.Resize()[color black] should contain code to resize all child forms when you resize [color blue]_SCREEN[color black].
To prevent recursive calls to resizable child forms, add a new property, [color blue].lInProcess[color black], to each resizable child form.
In the [color blue].Resize()[color black] event of the resizable child form, put :-
[color blue]
IF THIS.lInProcess = .F.
[tab]_SCREEN.Resize()
ENDI
[color black]
In the first line of [color blue]_SCREEN.Resize()[color black], put :-
[color blue]
oChild1.lInProcess = .T.
[color black]
In the last line of [color blue]_SCREEN.Resize()[color black], put :-
[color blue]
oChild1.lInProcess = .F.
[color black]
After the code segments for the individual objects in [color blue]_SCREEN.Resize()[color black], you can write the relevant coordinates of child forms and their controls and [color blue]_SCREEN[color black] to a table.
When you initialise the application next time, use the coordinates from the table to position and size[color blue] _SCREEN[color black], position and size child forms, and position and size controls in child forms.
Additional discussion of this FAQ can be found at thread184-742923
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.