|
|
INCLUDE |
PLBEQU.INC |
|
|
INCLUDE |
PLBMETH.INC |
|
* |
|
|
|
.Define the objects and variables |
|
. |
|
|
|
MAXWINS |
CONST |
"5" |
|
PARENT |
WINDOW |
|
|
CHILD |
WINDOW |
(MAXWINS) |
|
OBJECTIDS |
INTEGER |
1(MAXWINS) |
|
ETEXT |
EDITTEXT |
(MAXWINS) |
|
TOOL1 |
TOOLBAR |
|
|
MENU |
MENU |
(4) |
|
. |
|
|
|
RESULT |
FORM |
9 |
|
TEXT |
DIM |
32767 |
|
STRING |
DIM |
1024 |
|
FITEM |
INIT |
"&File;&New;&Open...;-;E&xit" |
|
EITEM |
INIT |
"&Edit;Cu&t;&Copy;&Paste" |
|
WITEM |
INIT |
"&Window;Cascade;Tile &Vertical;Tile &Horizontal" |
|
HITEM |
INIT |
"&Help;&About" |
|
ZERO |
FORM |
"0" |
|
NAME |
DIM |
100 |
|
PATH |
DIM |
100 |
|
FNAME |
DIM |
200 |
|
SEQ |
FORM |
"-1" |
|
NL |
INIT |
0x7F |
|
HEIGHT |
FORM |
7 |
|
WIDTH |
FORM |
7 |
|
INDEX |
INTEGER |
1 |
|
WININDEX |
FORM |
1 |
|
WINDOWS |
FORM |
1(MAXWINS) |
|
. |
|
|
|
FILE |
FILE |
|
|
*........................................................................ |
|
.Hide the main window |
|
. |
|
|
|
|
WINHIDE |
|
|
* |
|
|
|
.Create the Parent Window |
|
. |
|
|
|
|
CREATE |
PARENT=100:450:100:500: |
|
|
|
TITLE="Notes",WINTYPE=$MDICLIENT: |
|
|
|
BGCOLOR=$BTNFACE,MDIBORDER=$ON: |
|
|
|
MDITOP=30,MDIHEIGHT=0,MDILEFT=10,MDIWIDTH=0 |
|
* |
|
|
|
.Register the Parent Window Events |
|
. |
|
|
|
|
EVENTREGISTER |
PARENT,$CLOSE,EXIT |
|
* |
|
|
|
.Add the Menus |
|
. |
|
|
|
|
CREATE |
PARENT;MENU(1),FITEM |
|
|
CREATE |
PARENT;MENU(2),EITEM,MENU(1) |
|
|
CREATE |
PARENT;MENU(3),WITEM,MENU(2) |
|
|
CREATE |
PARENT;MENU(4),HITEM,MENU(3) |
|
* |
|
|
|
.Create the Toolbar |
|
. |
|
|
|
|
CREATE |
PARENT;TOOL1=55:80:10:390,SHOWTIPS=$ON: |
|
|
|
APPEARANCE=$3D,DOCK=$WINDOCKTOP |
|
. |
|
|
|
|
TOOL1.ADDBUTTON |
USING *IMAGEINDEX=1,*Tooltip="New",*Tag=1 |
|
|
TOOL1.ADDBUTTON |
USING *IMAGEINDEX=2,*Tooltip="Open",*Tag=2 |
|
|
TOOL1.ADDBUTTON |
USING *BtnStyle=$TBSTYLESEP |
|
|
TOOL1.ADDBUTTON |
USING *IMAGEINDEX=4,*Tooltip="Cut",*Tag=3 |
|
|
TOOL1.ADDBUTTON |
USING *IMAGEINDEX=5,*Tooltip="Copy",*Tag=4 |
|
|
TOOL1.ADDBUTTON |
USING *IMAGEINDEX=6,*Tooltip="Paste",*Tag=5 |
|
* |
|
|
|
.Activate the objects |
|
. |
|
|
|
|
ACTIVATE |
PARENT |
|
|
EVENTREGISTER |
PARENT,$CLOSE,EXIT |
|
|
ACTIVATE |
MENU(1),FILE,RESULT |
|
|
ACTIVATE |
MENU(2),EDIT,RESULT |
|
|
ACTIVATE |
MENU(3),WINDOW,RESULT |
|
|
ACTIVATE |
MENU(4) |
|
|
ACTIVATE |
TOOL1,TOOLCMD,RESULT |
|
* |
|
|
|
.Wait for an Event to Occur |
|
. |
|
|
|
|
LOOP |
|
|
|
EVENTWAIT |
|
|
|
REPEAT |
|
|
*........................................................................ |
|
. |
|
|
|
.File Menu |
|
|
|
. |
|
|
|
FILE |
|
|
|
|
BRANCH |
RESULT TO NEW,OPEN |
|
|
STOP |
|
|
* |
|
|
|
.Edit Menu |
|
. |
|
|
|
EDIT |
|
|
|
|
BRANCH |
RESULT TO CUT,COPY,PASTE |
|
|
STOP |
|
|
* |
|
|
|
.Window Menu |
|
. |
|
|
|
WINDOW |
|
|
|
|
BRANCH |
RESULT TO CASCADE,TILEVERT,TILEHORZ |
|
|
STOP |
|
|
* |
|
|
|
.Toolbar Button Clicked |
|
. |
|
|
|
TOOLCMD |
|
|
|
|
BRANCH |
RESULT TO NEW,OPEN,CUT,COPY,PASTE |
|
|
RETURN |
|
|
*......................................................................... |
|
. |
|
|
|
.New Function |
|
|
|
. |
|
|
|
NEW |
|
|
|
|
CALL |
OPENCHILD USING "1" |
|
|
RETURN |
|
|
*.......................................................................... |
|
. |
|
|
|
.Open Function |
|
. |
|
|
|
OPEN |
|
|
|
|
CALL |
OPENCHILD USING "0" |
|
|
RETURN |
|
|
*.......................................................................... |
|
. |
|
|
|
.Common open child window routine |
|
. |
|
|
|
. Enter with: 0 = Open Requested |
|
. 1 = New Requested |
|
. |
|
|
|
OPENCHILD |
ROUTINE |
INDEX |
|
. |
|
|
|
.Locate an unused entry |
|
. |
|
|
|
|
FOR |
WININDEX FROM "1" TO MAXWINS |
|
|
BREAK |
IF (OBJECTIDS(WININDEX) = 0) |
|
|
REPEAT |
|
|
* |
|
|
|
.Check for maximum windows open |
|
. |
|
|
|
|
IF |
(WININDEX = MAXWINS + 1) |
|
|
ALERT |
PARENT;CAUTION,"Maximum number of windows already open.": |
|
|
|
RESULT,"Error" |
|
|
RETURN |
|
|
|
ENDIF |
|
|
* |
|
|
|
.Flag the entry as in use |
|
. |
|
|
|
|
MOVE |
WININDEX,OBJECTIDS(WININDEX) |
|
* |
|
|
|
.Conditional Open Logic |
|
. |
|
|
|
|
IF |
(INDEX = 1) // New ? |
|
|
CLEAR |
TEXT // Start with a blank window |
|
|
ELSE |
// Otherwise, select file and
open |
|
* |
|
|
|
.Select a File |
|
. |
|
|
|
|
GETFNAME |
PARENT;OPEN,"Open",NAME,PATH,"PLS" |
|
|
RETURN |
IF OVER |
|
|
|
|
|
* |
|
|
|
.Load the file |
|
. |
|
|
|
|
PACK |
FNAME WITH PATH,NAME |
|
|
OPEN |
FILE,FNAME,READ |
|
. |
|
|
|
|
CLEAR |
TEXT |
|
|
LOOP |
|
|
|
READ |
FILE,SEQ;STRING |
|
|
WHILE |
NOT OVER |
|
. |
|
|
|
|
APPEND |
STRING,TEXT |
|
|
APPEND |
NL,TEXT |
|
|
REPEAT |
|
|
. |
|
|
|
|
CLOSE |
FILE |
|
|
RESET |
TEXT |
|
. |
|
|
|
|
ENDIF |
// End of Open Logic |
|
* |
|
|
|
.Create the Child Window |
|
. |
|
|
|
|
CREATE |
CHILD(WININDEX)=(WININDEX * 20):(230+(WININDEX * 20)):(WININDEX * 20):(320+(WININDEX * 20)): |
|
|
|
PARENTWIN=PARENT,WINTYPE=$MDICHILD,TITLE=NAME,OBJECTID=WININDEX |
|
* |
|
|
|
.Register the Child Window Events |
|
|
|
|
|
|
EVENTREGISTER |
CHILD(WININDEX),$CLOSE,EXITC |
|
. |
EVENTREGISTER |
CHILD(WININDEX),$RESIZE,RESIZEC |
|
* |
|
|
|
.Create the Edittext Field |
|
. |
|
|
|
|
CREATE |
CHILD(WININDEX);ETEXT(WININDEX)=0:230:0:320: |
|
|
|
BORDER=$ON,MULTILINE,SCROLLBAR |
|
|
SETITEM |
ETEXT(WININDEX),0,TEXT |
|
* |
|
|
|
.Activate the child window objects |
|
. |
|
|
|
|
ACTIVATE |
ETEXT(WININDEX) |
|
|
ACTIVATE |
CHILD(WININDEX) |
|
|
SETFOCUS |
CHILD(WININDEX) |
|
|
SETFOCUS |
ETEXT(WININDEX) |
|
. |
|
|
|
|
RETURN |
|
|
*............................................................. |
|
. |
|
|
|
.Cut Function |
|
. |
|
|
|
CUT |
|
|
|
|
PARENT.GetActiveMDIChild GIVING INDEX |
|
|
GETITEM |
ETEXT(INDEX),1,STRING |
|
|
CLIPSET |
STRING |
|
|
SETITEM |
ETEXT(INDEX),1,"" |
|
|
RETURN |
|
|
*.............................................................. |
|
. |
|
|
|
.Copy Function |
|
. |
|
|
|
COPY |
|
|
|
|
PARENT.GetActiveMDIChild GIVING INDEX |
|
|
GETITEM |
ETEXT(INDEX),1,STRING |
|
|
CLIPSET |
STRING |
|
|
RETURN |
|
|
*.............................................................. |
|
. |
|
|
|
.Paste Function |
|
. |
|
|
|
PASTE |
|
|
|
|
PARENT.GetActiveMDIChild GIVING INDEX |
|
|
CLIPGET |
STRING |
|
|
SETITEM |
ETEXT(INDEX),1,STRING |
|
|
RETURN |
|
|
*.............................................................. |
|
. |
|
|
|
.Cascade Function |
|
. |
|
|
|
CASCADE |
|
|
|
|
PARENT.MDILayOut USING $Cascade |
|
|
CALL |
RESIZEALL |
|
|
RETURN |
|
|
*.............................................................. |
|
. |
|
|
|
.Tile Horizontally |
|
. |
|
|
|
TILEHORZ |
|
|
|
|
PARENT.MDILayOut USING $TileHorizontal |
|
|
CALL |
RESIZEALL |
|
|
RETURN |
|
|
*.............................................................. |
|
. |
|
|
|
.Tile Vertically |
|
. |
|
|
|
TILEVERT |
|
|
|
|
PARENT.MDILayOut USING $TileVertical |
|
|
CALL |
RESIZEALL |
|
|
RETURN |
|
|
*.............................................................. |
|
. |
|
|
|
.Close a Child Window |
|
. |
|
|
|
EXITC |
|
|
|
|
PARENT.GetActiveMDIChild GIVING INDEX |
|
|
DESTROY |
ETEXT(INDEX) |
|
|
DESTROY |
CHILD(INDEX) |
|
|
MOVE |
"0",OBJECTIDS(INDEX) |
|
|
RETURN |
|
|
*............................................................... |
|
. |
|
|
|
.Exit Requested |
|
. |
|
|
|
EXIT |
|
|
|
|
STOP |
|
|
*.............................................................. |
|
. |
|
|
|
.Resize the parent |
|
. |
|
|
|
RESIZEP |
|
|
|
|
GETPROP |
PARENT,HEIGHT=HEIGHT |
|
|
GETPROP |
PARENT,WIDTH=WIDTH |
|
|
SETPROP |
PARENT,MDIHEIGHT=(HEIGHT - 60) |
|
|
SETPROP |
PARENT,MDIWIDTH=(WIDTH - 20) |
|
|
RETURN |
|
|
*.............................................................. |
|
. |
|
|
|
.Resize a child |
|
. |
|
|
|
RESIZEC |
|
|
|
|
PARENT.GetActiveMDIChild GIVING INDEX |
|
|
GETPROP |
CHILD(WININDEX),HEIGHT=HEIGHT |
|
|
GETPROP |
CHILD(WININDEX),WIDTH=WIDTH |
|
|
SETPROP |
ETEXT(WININDEX),HEIGHT=HEIGHT |
|
|
SETPROP |
ETEXT(WININDEX),WIDTH=WIDTH |
|
|
RETURN |
|
|
*.............................................................. |
|
. |
|
|
|
.Resize all child windows |
|
. |
|
|
|
RESIZEALL |
|
|
|
|
FOR |
INDEX FROM "1" TO MAXWINS |
|
|
IF |
(OBJECTIDS(INDEX) > 0) |
|
|
GETPROP |
CHILD(INDEX),HEIGHT=HEIGHT |
|
|
GETPROP |
CHILD(INDEX),WIDTH=WIDTH |
|
|
SETPROP |
ETEXT(INDEX),HEIGHT=HEIGHT |
|
|
SETPROP |
ETEXT(INDEX),WIDTH=WIDTH |
|
|
ENDIF |
|
|
|
REPEAT |
|
|
|
RETURN |
|
This is an example of a MDI application. As each file is opened, a MDI child window is opened within
the parent.