home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / PROG / PASCAL / SPEED2 / SRC / RESEDIT / RESEDIT.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-10-06  |  51.4 KB  |  1,635 lines

  1. PROGRAM ResEdit;
  2.  
  3. {$M 32768}
  4.  
  5. RESOURCE ResEdit;
  6.  
  7. USES PmTypes,PMObject,Crt,PmDialog,ResDlg;
  8.  
  9.  
  10. CONST
  11.      CM_GROUPBOX=500;
  12.      CM_LISTBOX=501;
  13.      CM_BUTTON=502;
  14.      CM_ICON=503;
  15.      CM_CHECKBOX=504;
  16.      CM_RADIOBOX=505;
  17.      CM_ENTRYFIELD=506;
  18.      CM_TEXT=507;
  19.      CM_NEWRES=508;
  20.      CM_DELETERES=509;
  21.      CM_SELECTRES=510;
  22.      CM_EDITSTYLE=511;
  23.      CM_EDITCOLORS=512;
  24.      CM_EDITPRESPARAMS=513;
  25.      CM_ARRANGE=514;
  26.      CM_OPTION=515;
  27.      cm_help1=516;
  28.  
  29. TYPE PDlgList=^TDlgList;
  30.      TDlgList=RECORD
  31.                     Typ:LONGWORD;
  32.                     Text:STRING;
  33.                     Flags:LONGWORD;
  34.                     Color,BackColor:INTEGER;
  35.                     x,y,cx,cy:LONGINT;
  36.                     id:LONGWORD;
  37.                     idConstName:STRING;
  38.                     Next:PDlgList;
  39.               END;
  40.  
  41.      PResList=^TResList;
  42.      TResList=RECORD
  43.                     Typ:WORD;
  44.                     Data:POINTER;
  45.                     Next:PResList;
  46.               END;
  47.  
  48.      TArcParams=RECORD
  49.                       lp,lq,lr,ls:LONGWORD;
  50.                 END;
  51.  
  52. TYPE TMyApp=OBJECT(TMDIApplication)
  53.                   Grid:BYTE;
  54.                   Options:LONGWORD;
  55.                   Untitled:BOOLEAN;
  56.                   FileName:STRING;
  57.                   DlgCount:LONGWORD;
  58.                   DlgList:PDlgList;
  59.                   ActualDlg:PDlgList;
  60.                   DlgWin,DlgFrWin:HWND;
  61.                   SelectedDlg:HWND;
  62.                   DlgActive,DragActive:BOOLEAN;
  63.                   Dragx,Dragy,Dragcx,Dragcy:INTEGER;
  64.                   Selection:BOOLEAN;
  65.                   Selectx,Selecty,Selectcx,Selectcy:INTEGER;
  66.                   MoveMode,MoveStart:BOOLEAN;
  67.                   SizeLowNS,SizeHighNS:BOOLEAN;
  68.                   SizeLeftWE,SizeRightWE:BOOLEAN;
  69.                   SizeLeftUp,SizeLeftDown:BOOLEAN;
  70.                   SizeRightUp,SizeRightDown:BOOLEAN;
  71.                   CONSTRUCTOR Init;
  72.                   DESTRUCTOR Done;
  73.                   PROCEDURE HandleCommand(Win:HWND;Command:WORD):VIRTUAL;
  74.                   PROCEDURE MDICreateNotify(MDIFrWin,MDIWin:HWND;Data:POINTER):VIRTUAL;
  75.                   PROCEDURE MDIWMMouseMove(Win:HWND;x,y:INTEGER;Data:POINTER):VIRTUAL;
  76.                   PROCEDURE DrawRec;
  77.                   PROCEDURE WMButton1Down(Win:HWND;x,y:INTEGER):VIRTUAL;
  78.                   PROCEDURE MDIWMButton1DoubleClick(Win:HWND;x,y:INTEGER;Data:POINTER):VIRTUAL;
  79.                   PROCEDURE MDIWMButton1Down(Win:HWND;x,y:INTEGER;Data:POINTER):VIRTUAL;
  80.                   PROCEDURE WMMenuSelect(Win:HWND;para1:POINTER):VIRTUAL;
  81.                   PROCEDURE MakePermanent;
  82.                   PROCEDURE NewDlgItem(Typ:LONGWORD);
  83.                   PROCEDURE MDIRedraw(rc:RECTL;_hps:HPS;Win:HWND;data:POINTER):VIRTUAL;
  84.                   FUNCTION MDIHandleEvent(Win:HWND;Msg:LONGWORD;
  85.                                           para1,para2:POINTER;
  86.                                           VAR Handled:BOOLEAN;
  87.                                           Data:POINTER):LONGWORD:VIRTUAL;
  88.                   PROCEDURE DrawElement(Dlg:PDlgList;_hps:HPS);
  89.                   PROCEDURE DrawDlgString(Dlg:PDlgList;x,y:INTEGER;_hps:HPS);
  90.                   FUNCTION CheckSelection(x,y:INTEGER):PDlgList;
  91.                   PROCEDURE MakeSelection(Dlg:PDlgList);
  92.                   PROCEDURE UnsetSelection;
  93.                   PROCEDURE MDIWMButton1Up(Win:HWND;x,y:INTEGER;Data:POINTER):VIRTUAL;
  94.                   PROCEDURE WMButton1Up(Win:HWND;x,y:INTEGER):VIRTUAL;
  95.                   PROCEDURE UnsetMoveMode;
  96.                   PROCEDURE MDIHandleScanEvent(Win:HWND;scan:Word;Data:POINTER):VIRTUAL;
  97.                   PROCEDURE SaveProject;
  98.                   PROCEDURE EraseProject;
  99.                   PROCEDURE WMClose(VAR Msg:TMessage):VIRTUAL WM_CLOSE;
  100.                   PROCEDURE WMMDIClose(Win:HWND;Data:POINTER):VIRTUAL;
  101.                   PROCEDURE NewResource(Typ:WORD;Data:POINTER);
  102.                   PROCEDURE DisableControls;
  103.                   PROCEDURE EnableControls;
  104.                   PROCEDURE AppCreateNotify(AppFrWin,AppWin:HWND):VIRTUAL;
  105.                   PROCEDURE NewDlgEntry;
  106.                   PROCEDURE EditStyle;
  107.                   PROCEDURE Arrange;
  108.                   PROCEDURE WMSize(VAR Msg:TMessage):VIRTUAL WM_SIZE;
  109.                   PROCEDURE MDIWMSize(Win:HWND;Data:POINTER):VIRTUAL;
  110.             END;
  111.  
  112. VAR MyApp:TMyApp;
  113.  
  114.     MovePtr:LONGWORD;
  115.     ArrowPtr:LONGWORD;
  116.     SIZENWSEPtr:LONGWORD;
  117.     SIZENESWPtr:LONGWORD;
  118.     SIZEWEPtr:LONGWORD;
  119.     SIZENSPtr:LONGWORD;
  120.     Resources:PResList;
  121.  
  122. TYPE TSizel=RECORD
  123.                   x,y:LONGWORD;
  124.             END;
  125.  
  126. IMPORTS
  127.        FUNCTION WinDrawBorder(flCmd,clrBack,ClrFore,cy,cx:LONGWORD;
  128.                                VAR rec:RECTL;hp:HPS):LONGWORD:   PMWIN index 731;
  129.        PROCEDURE WinReleasePS(_hps:HPS):                         PMWIN index 848;
  130.        FUNCTION  WinGetPS(Win:HWND):HPS:                         PMWIN index 757;
  131.        FUNCTION WinCreateWindow(pPresParams:POINTER;
  132.                                 pCtlData:POINTER;
  133.                                 id:LONGWORD;
  134.                                 hwndInsertBehind:HWND;
  135.                                 hwndOwner:HWND;
  136.                                 cy,cx,y,x:LONGWORD;
  137.                                 flStyle:LONGWORD;
  138.                                 pszName:PSZ;
  139.                                 Class:LONGWORD;
  140.                                 hwndParent:HWND):HWND:          PMWIN index 909;
  141.        FUNCTION WinSetWindowPos(fl:LONGWORD;
  142.                                  cy,cx,y,x:LONGWORD;
  143.                                  hwndInsertBehind:HWND;
  144.                                  _hwnd:HWND):LONGWORD:           PMWIN index 875;
  145.        FUNCTION WinQueryWindow(cmd:LONGWORD;
  146.                                _hwnd:HWND):LONGWORD:            PMWIN index 834;
  147.        FUNCTION WinSubClassWindow(Proc:POINTER;
  148.                                   Win:HWND):POINTER:            PMWIN index 929;
  149.        FUNCTION WinDefWindowProc(para2,para1:POINTER;msg:LONGWORD;
  150.                                   Win:HWND):LONGWORD:           PMWIN index 911;
  151.        FUNCTION WinFillRect(lColor:LONGWORD;
  152.                             VAR prcl:RECTL;
  153.                             _hps:HPS):LONGWORD:                 PMWIN index 743;
  154.        FUNCTION GpiSetColor(lColor:LONGWORD;
  155.                             _hps:HPS):LONGINT:                  PMGPI index 517;
  156.        FUNCTION GpiSetBackColor(lColor:LONGINT;
  157.                                 _hps:HPS):LONGWORD:             PMGPI index 504;
  158.        FUNCTION GpiSetBackMix(lMixMode:LONGINT;
  159.                               _hps:HPS):LONGWORD:               PMGPI index 505;
  160.        FUNCTION GpiCharStringAt(VAR pchString;
  161.                                 lCount:LONGWORD;
  162.                                 VAR pptlPoint:POINTL;
  163.                                 _hps:HPS):LONGWORD:             PMGPI index 359;
  164.        PROCEDURE WinSetPointer(hptr:LONGWORD;
  165.                                Desktop:HWND):                   PMWIN index 866;
  166.        FUNCTION WinQuerySysPointer(Copy:LONGWORD;Ident:LONGWORD;
  167.                                    Desktop:HWND):LONGWORD:      PMWIN index 828;
  168.        FUNCTION WinLoadPointer(id:LONGWORD;
  169.                                hmod:LONGWORD;
  170.                                Desktop:HWND):LONGWORD:          PMWIN index 780;
  171.        FUNCTION WinDestroyWindow(_hwnd:HWND):
  172.                                   LONGWORD:                     PMWIN index 728;
  173.        PROCEDURE GpiSetArcParams(VAR p:TArcParams;_hps:HPS):    PMGPI index 502;
  174.        PROCEDURE GpiFullArc(fix,dro:LONGWORD;_hps:HPS):         PMGPI index 393;
  175.        FUNCTION GpiMove(VAR Point:POINTL;hp:HPS):LONGWORD:      PMGPI index 404;
  176.        FUNCTION GpiConvert(VAR p:POINTL;c:LONGWORD;
  177.                             Dest,Sourc:LONGWORD;
  178.                             _hps:HPS):LONGWORD:                 PMGPI index 364;
  179.        FUNCTION WinOpenWindowDC(Win:HWND):LONGWORD:             PMWIN index 794;
  180.        FUNCTION GpiCreatePS(fl:LONGWORD;VAR g:TSIZEL;
  181.                             _hdc:LONGWORD;hab:LONGWORD):HPS:    PMGPI index 369;
  182.        FUNCTION WinQuerySysValue(iSysValue:LONGWORD;
  183.                                   hwndDesktop:HWND):
  184.                                   LONGWORD:                      PMWIN index 829;
  185.        FUNCTION WinSetWindowText(psztext:PSZ;
  186.                                 _hwnd:HWND):LONGWORD:            PMWIN index 877;
  187.        PROCEDURE GpiLine(point:POINTL;_hps:HPS):                 PMGPI index 398;
  188. END;
  189.  
  190. CONST
  191.      {WinDrawBorder() flags}
  192.  
  193.      DB_PATCOPY     =$0000;
  194.      DB_PATINVERT   =$0001;
  195.      DB_DESTINVERT  =$0002;
  196.      DB_AREAMIXMODE =$0003;
  197.      DB_RAISED      =$0400;
  198.      DB_DEPRESSED   =$0800;
  199.  
  200.      {Dialog Window Classes}
  201.      WC_NULL        =0;
  202.      WC_BUTTON      =1;
  203.      WC_GROUPBOX    =2;
  204.      WC_CHECKBOX    =3;
  205.      WC_RADIOBOX    =4;
  206.      WC_ENTRYFIELD  =5;
  207.      WC_TEXT        =6;
  208.      WC_LISTBOX     =7;
  209.  
  210.      {System pointers}
  211.  
  212.      SPTR_ARROW     =1;
  213.      SPTR_TEXT      =2;
  214.      SPTR_WAIT      =3;
  215.      SPTR_SIZE      =4;
  216.      SPTR_MOVE      =5;
  217.      SPTR_SIZENWSE  =6;
  218.      SPTR_SIZENESW  =7;
  219.      SPTR_SIZEWE    =8;
  220.      SPTR_SIZENS    =9;
  221.      SPTR_APPICON   =10;
  222.      SPTR_CPTR      =39;
  223.  
  224.  { co-ordinates space for GpiConvert }
  225. CONST
  226.    CVTC_WORLD               =1;
  227.    CVTC_MODEL               =2;
  228.    CVTC_DEFAULTPAGE         =3;
  229.    CVTC_PAGE                =4;
  230.    CVTC_DEVICE              =5;
  231.  
  232.    {implicit associate flag for GpiCreatePS}
  233.    GPIA_NOASSOC             =0;
  234.    GPIA_ASSOC               =$4000;
  235.  
  236.    {format for GpiCreatePS}
  237.    GPIF_DEFAULT             =0;
  238.    GPIF_SHORT               =$0100;
  239.    GPIF_LONG                =$0200;
  240.  
  241.    {units for GpiCreatePS and others}
  242.    PU_ARBITRARY             =$0004;
  243.    PU_PELS                  =$0008;
  244.    PU_LOMETRIC              =$000C;
  245.    PU_HIMETRIC              =$0010;
  246.    PU_LOENGLISH             =$0014;
  247.    PU_HIENGLISH             =$0018;
  248.    PU_TWIPS                 =$001C;
  249.  
  250. PROCEDURE ConvertPoints(VAR x,y,cx,cy:LONGINT);
  251. VAR t:LONGINT;
  252. BEGIN
  253.      cx:=cx div 3;
  254.      cx:=cx*2;
  255.      cy:=cy div 2;
  256.  
  257.      x:=x div 3;
  258.      x:=x*2;
  259.      y:=y div 2;
  260. END;
  261.  
  262. PROCEDURE TMyApp.Arrange;
  263. VAR dummy:PDlgList;
  264. BEGIN
  265.      IF not DlgActive THEN exit;
  266.      IF DlgList=NIL THEN exit;
  267.      Dummy:=DlgList^.next;
  268.      WHILE dummy<>NIL DO
  269.      BEGIN
  270.           inc(dummy^.x,grid DIV 2);
  271.           dummy^.x:=dummy^.x DIV Grid;
  272.           dummy^.x:=dummy^.x*Grid;
  273.           inc(dummy^.y,Grid DIV 2);
  274.           dummy^.y:=dummy^.y DIV Grid;
  275.           dummy^.y:=dummy^.y*Grid;
  276.           dummy:=dummy^.next;
  277.      END;
  278.      UnsetSelection;
  279.      InvalidateMDIWindow(DlgWin);
  280. END;
  281.  
  282. PROCEDURE TMyApp.NewResource(Typ:WORD;Data:POINTER);
  283. VAR Dummy:PResList;
  284. BEGIN
  285.      IF Resources=NIL THEN
  286.      BEGIN
  287.           New(Resources);
  288.           dummy:=Resources;
  289.      END
  290.      ELSE
  291.      BEGIN
  292.           dummy:=Resources;
  293.           while dummy^.next<>NIL DO dummy:=dummy^.Next;
  294.           new(dummy^.Next);
  295.           dummy:=dummy^.next;
  296.      END;
  297.      dummy^.typ:=typ;
  298.      dummy^.Data:=Data;
  299.      dummy^.Next:=NIL;
  300. END;
  301.  
  302. PROCEDURE SortGroups;
  303. VAR res:PResList;
  304.     Dlg,dummy,dummy1,Last,Group:PDlgList;
  305. BEGIN
  306.      res:=Resources;
  307.      WHILE res<>NIL DO
  308.      BEGIN
  309.           IF res^.typ=R_DIALOG THEN
  310.           BEGIN
  311.                Dlg:=res^.Data;
  312.                WHILE Dlg<>NIL DO
  313.                BEGIN
  314.                     CASE Dlg^.Typ OF
  315.                     WC_GROUPBOX:
  316.                     BEGIN
  317.                          {Look for all controls lying in this Groupbox}
  318.                          group:=Dlg;
  319.                          Last:=Dlg;
  320.                          dummy:=Last^.next;
  321.                          WHILE dummy<>NIL DO
  322.                          BEGIN
  323.                              IF dummy^.x>=group^.x then if dummy^.y>=group^.y then
  324.                              IF dummy^.x<=group^.x+group^.cx then
  325.                              IF dummy^.y<=group^.y+group^.cy then
  326.                              BEGIN
  327.                                   Last^.Next:=Dummy^.Next;
  328.                                   Dummy^.Next:=Dlg^.next;
  329.                                   Dlg^.next:=dummy;
  330.                                   Dlg:=Dlg^.next;
  331.                              END;
  332.                              last:=dummy;
  333.                              dummy:=dummy^.next;
  334.                         END;
  335.                     END;
  336.                   END; {case}
  337.                   Dlg:=Dlg^.Next;
  338.                END;
  339.           END;
  340.           Res:=Res^.Next;
  341.      END;
  342. END;
  343.  
  344. PROCEDURE TMyApp.WMSize(VAR Msg:TMessage);
  345. VAR Save:BYTE;
  346. BEGIN
  347.      UnsetSelection;
  348.      Save:=ChildCount;
  349.      ChildCount:=0;
  350.      Inherited.WMSize(Msg);
  351.      ChildCount:=Save;
  352. END;
  353.  
  354. PROCEDURE TMyApp.MDIWMSize(Win:HWND;Data:POINTER);
  355. BEGIN
  356.      UnsetSelection;
  357. END;
  358.  
  359. PROCEDURE TMyApp.SaveProject;
  360. VAR f:TEXT;
  361.     Res:PResList;
  362.     Dlg:PDlgList;
  363.     s:string;
  364. Label l;
  365. BEGIN
  366.      FileSaveDlgWildCards:='*.rc';
  367.      IF Untitled THEN
  368.      BEGIN
  369. l:
  370.           IF not FileSaveDialog(AppWinHandle,FileName) THEN exit;
  371.      END;
  372.      Untitled:=FALSE;
  373.      Assign(f,FileName);
  374.      reset(f,1);
  375.      if ioresult=0 THEN
  376.      BEGIN
  377.           close(f);
  378.           IF not ConfirmBox(MB_ICONQUESTION,'File exists. Overwrite ??')
  379.            THEN goto l;
  380.      END;
  381.      rewrite(f,1);
  382.      IF ioresult<>0 THEN
  383.      BEGIN
  384.           ErrorBox(MB_ICONHAND,'Could not write file !');
  385.           exit;
  386.      END;
  387.      Writeln(f,'/* Speed-386 Dialog editor */');
  388.      Writeln(f,'/* Source file for RCOMP */');
  389.      Writeln(f,'');
  390.  
  391.      SortGroups;
  392.      Res:=Resources;
  393.      WHILE Res<>NIL DO
  394.      BEGIN
  395.           CASE Res^.Typ OF
  396.              R_DIALOG:
  397.              BEGIN
  398.                   Dlg:=Res^.Data;
  399.                   IF Dlg^.idConstName<>'' THEN s:=Dlg^.idConstName
  400.                   ELSE s:=tostr(Dlg^.id);
  401.                   Writeln(f,'DLGTEMPLATE '+s);
  402.                   Writeln(f,'BEGIN');
  403.                   Writeln(f,'     DIALOG "'+Dlg^.text+'",'+s+','+
  404.                          tostr(Dlg^.x)+','+tostr(Dlg^.y)+','+
  405.                          tostr(Dlg^.cx)+','+tostr(Dlg^.cy));
  406.                   Writeln(f,'     STYLE FS_DLGBORDER|WS_VISIBLE');
  407.                   Writeln(f,'     FLAGS FCF_NOBYTEALIGN|FCF_TITLEBAR|FCF_SYSMENU');
  408.                   Writeln(f,'     PRESPARAMS PP_FONTNAMESIZE, "8.Helv"');
  409.                   Writeln(f,'     BEGIN');
  410.                   Dlg:=Dlg^.Next;
  411.                   WHILE Dlg<>NIL DO
  412.                   BEGIN
  413.                        IF Dlg^.idConstName<>'' THEN s:=Dlg^.idConstName
  414.                        ELSE s:=tostr(Dlg^.id);
  415.                        ConvertPoints(Dlg^.x,Dlg^.y,Dlg^.cx,Dlg^.cy);
  416.                        CASE Dlg^.Typ OF
  417.                           WC_GROUPBOX:
  418.                           BEGIN
  419.                                Writeln(f,'');
  420.                                Writeln(f,'          GROUPBOX "'+Dlg^.Text+'",'+s+','+
  421.                                        tostr(Dlg^.x)+','+tostr(Dlg^.y)+','+
  422.                                        tostr(Dlg^.cx)+','+tostr(Dlg^.cy));
  423.                                s:='';
  424.                                CalcBasicStyles(Dlg^.Flags,s);
  425.                                IF s='' THEN s:='NO_STYLE';
  426.                                Writeln(f,'          STYLE '+s);
  427.                           END;
  428.                           WC_BUTTON:
  429.                           BEGIN
  430.                                Writeln(f,'          DEFPUSHBUTTON "'+
  431.                                        Dlg^.Text+'",'+s+','+
  432.                                        tostr(Dlg^.x)+','+tostr(Dlg^.y)+','+
  433.                                        tostr(Dlg^.cx)+','+tostr(Dlg^.cy));
  434.                                s:='';
  435.                                CalcBasicStyles(Dlg^.Flags,s);
  436.                                IF s='' THEN s:='NO_STYLE';
  437.                                Writeln(f,'          STYLE '+s);
  438.                           END;
  439.                           WC_LISTBOX:
  440.                           BEGIN
  441.                                Writeln(f,'          CONTROL "'+
  442.                                        Dlg^.Text+'",'+s+','+
  443.                                        tostr(Dlg^.x)+','+tostr(Dlg^.y)+','+
  444.                                        tostr(Dlg^.cx)+','+tostr(Dlg^.cy));
  445.                                Writeln(f,'          TYPE WC_LISTBOX');
  446.                                s:='';
  447.                                CalcBasicStyles(Dlg^.Flags,s);
  448.                                s:=s+'|CBS_DROPDOWNLIST';
  449.                                IF s='' THEN s:='NO_STYLE';
  450.                                Writeln(f,'          STYLE '+s);
  451.                                Writeln(f,'          FLAGS NO_FLAGS');
  452.                           END;
  453.                           WC_RADIOBOX:
  454.                           BEGIN
  455.                                Writeln(f,'          AUTORADIOBUTTON "'+
  456.                                       Dlg^.Text+'",'+s+','+
  457.                                       tostr(Dlg^.x)+','+tostr(Dlg^.y)+','+
  458.                                       tostr(Dlg^.cx)+','+tostr(Dlg^.cy));
  459.                                s:='';
  460.                                CalcBasicStyles(Dlg^.Flags,s);
  461.                                IF s='' THEN s:='NO_STYLE';
  462.                                Writeln(f,'          STYLE '+s);
  463.                           END;
  464.                           WC_CHECKBOX:
  465.                           BEGIN
  466.                               Writeln(f,'          AUTOCHECKBOX "'+
  467.                                       Dlg^.Text+'",'+s+','+
  468.                                       tostr(Dlg^.x)+','+tostr(Dlg^.y)+','+
  469.                                       tostr(Dlg^.cx)+','+tostr(Dlg^.cy));
  470.                               s:='';
  471.                               CalcBasicStyles(Dlg^.Flags,s);
  472.                               IF s='' THEN s:='NO_STYLE';
  473.                               Writeln(f,'          STYLE '+s);
  474.                           END;
  475.                           WC_ENTRYFIELD:
  476.                           BEGIN
  477.                               Writeln(f,'          ENTRYFIELD "'+
  478.                                       Dlg^.Text+'",'+s+','+
  479.                                       tostr(Dlg^.x)+','+tostr(Dlg^.y)+','+
  480.                                       tostr(Dlg^.cx)+','+tostr(Dlg^.cy));
  481.                               s:='';
  482.                               CalcBasicStyles(Dlg^.Flags,s);
  483.                               CalcEditStyles(Dlg^.Flags,s);
  484.                               IF s='' THEN s:='NO_STYLE';
  485.                               Writeln(f,'          STYLE '+s);
  486.                           END;
  487.                           WC_TEXT:
  488.                           BEGIN
  489.                                Writeln(f,'          LTEXT "'+
  490.                                        Dlg^.Text+'",'+s+','+
  491.                                        tostr(Dlg^.x)+','+tostr(Dlg^.y)+','+
  492.                                        tostr(Dlg^.cx)+','+tostr(Dlg^.cy));
  493.                                s:='';
  494.                                CalcBasicStyles(Dlg^.Flags,s);
  495.                                IF s='' THEN s:='NO_STYLE';
  496.                                Writeln(f,'          STYLE '+s);
  497.                           END;
  498.                        END; {case}
  499.                        Dlg:=Dlg^.Next;
  500.                   END;
  501.                   Writeln(f,'     END');
  502.                   Writeln(f,'END');
  503.              END;
  504.           END; {case}
  505.           Writeln(f,'');
  506.           Writeln(f,'');
  507.           Res:=Res^.Next;
  508.      END;
  509.      Writeln(f,'');
  510.      Writeln(f,'/* End of resource file */');
  511.      Writeln(f,'END');
  512.      close(f);
  513. END;
  514.  
  515. PROCEDURE TMyApp.EraseProject;
  516. VAR dummy,dummy1:PResList;
  517.     dlgdummy1,dlgdummy2:PDlgList;
  518. BEGIN
  519.      DlgActive:=FALSE;  {No dialog window opened}
  520.      DragActive:=FALSE; {No drag active}
  521.      Selection:=FALSE;
  522.      MoveMode:=FALSE;
  523.      MoveStart:=FALSE;
  524.      SizeLowNS:=FALSE;
  525.      SizeHighNS:=FALSE;
  526.      SizeLeftWE:=FALSE;
  527.      SizeRightWE:=FALSE;
  528.      SizeLeftUp:=FALSE;
  529.      SizeLeftDown:=FALSE;
  530.      SizeRightUp:=FALSE;
  531.      SizeRightDown:=FALSE;
  532.      dummy:=Resources;
  533.      WHILE dummy<>NIL DO
  534.      BEGIN
  535.           dummy1:=dummy^.next;
  536.           CASE dummy^.typ OF
  537.               R_DIALOG:
  538.               BEGIN
  539.                    dlgdummy1:=dummy^.Data;
  540.                    WHILE dlgdummy1<>NIL DO
  541.                    BEGIN
  542.                         dlgDummy2:=DlgDummy1^.Next;
  543.                         Dispose(DlgDummy1);
  544.                         DlgDummy1:=DlgDummy2;
  545.                    END;
  546.               END;
  547.           END; {case}
  548.           dispose(dummy);
  549.           dummy:=dummy1;
  550.      END;
  551.      Resources:=NIL;
  552. END;
  553.  
  554.  
  555. PROCEDURE TMyApp.MDIHandleScanEvent(Win:HWND;scan:Word;Data:POINTER);
  556. VAR dummy,Last:PDlgList;
  557. BEGIN
  558.      CASE Scan OF
  559.         kbDel:
  560.         BEGIN
  561.              IF Selection THEN
  562.              BEGIN
  563.                   {Delete the selected Control}
  564.                   Last:=NIL;
  565.                   dummy:=DlgList;
  566.                   WHILE dummy<>NIL DO
  567.                   BEGIN
  568.                        IF dummy=ActualDlg THEN
  569.                        BEGIN
  570.                             IF Last=NIL THEN DlgList:=Dummy^.Next
  571.                             ELSE Last^.Next:=dummy^.Next;
  572.                             dispose(dummy);
  573.                             UnsetSelection;
  574.                             InvalidateMDIWindow(DlgWin);
  575.                             exit;
  576.                        END;
  577.                        Last:=dummy;
  578.                        dummy:=dummy^.next;
  579.                   END;
  580.              END;
  581.         END;
  582.      END; {case}
  583. END;
  584.  
  585. PROCEDURE TMyApp.DrawDlgString(Dlg:PDlgList;x,y:INTEGER;_hps:HPS);
  586. VAR
  587.     pt:POINTL;
  588.     FaceName:STRING;
  589.     s:STRING;
  590. BEGIN
  591.      facename:='Helv';
  592.      CreateLogFont(_hps,facename,13,5,0);
  593.      GpiSetColor(Dlg^.Color,_hps);
  594.      GpiSetBackColor(Dlg^.BackColor,_hps);
  595.      GpiSetBackMix(2,_hps); {BM_OverPaint}
  596.      pt.x:=x;
  597.      pt.y:=y;
  598.      s:=Dlg^.text;
  599.      WHILE pos('~',s)<>0 DO delete(s,pos('~',s),1);
  600.      GpiCharStringAt(s[1],Length(s),pt,_hps);
  601. END;
  602.  
  603.  
  604. PROCEDURE DrawScroller(x,y:INTEGER;_hps:HPS);
  605. VAR rc:RECTL;
  606. BEGIN
  607.      rc.yBottom:=y;
  608.      rc.xleft:=x;
  609.      rc.ytop:=y+14;
  610.      rc.xright:=x+12;
  611.      WinDrawBorder(DB_RAISED,CLR_PALEGRAY,CLR_BLACK,1,1,rc,_hps);
  612.      inc(rc.xLeft);
  613.      inc(rc.yBottom);
  614.      dec(rc.XRight);
  615.      dec(rc.yTop);
  616.      WinFillRect(CLR_PALEGRAY,rc,_hps);
  617. END;
  618.  
  619. PROCEDURE DrawUpperScroller(x,y:INTEGER;_hps:HPS);
  620. VAR Start,Endp:POINTL;
  621. BEGIN
  622.      DrawScroller(x,y,_hps);
  623.      GpiSetColor(CLR_WHITE,_hps);
  624.      Start.x:=x+3;
  625.      Start.y:=y+5;
  626.      GpiMove(Start,_hps);
  627.      Endp.x:=x+6;
  628.      Endp.y:=y+8;
  629.      GpiLine(Endp,_hps);
  630.      GpiMove(Endp,_hps);
  631.      inc(Endp.x,3);
  632.      Endp.y:=y+5;
  633.      GpiLine(Endp,_hps);
  634. END;
  635.  
  636. PROCEDURE DrawLowerScroller(x,y:INTEGER;_hps:HPS);
  637. VAR Start,Endp:POINTL;
  638. BEGIN
  639.      DrawScroller(x,y,_hps);
  640.      GpiSetColor(CLR_WHITE,_hps);
  641.      Start.x:=x+3;
  642.      Start.y:=y+8;
  643.      GpiMove(Start,_hps);
  644.      Endp.x:=x+6;
  645.      Endp.y:=y+5;
  646.      GpiLine(Endp,_hps);
  647.      GpiMove(Endp,_hps);
  648.      inc(Endp.x,3);
  649.      Endp.y:=y+8;
  650.      GpiLine(Endp,_hps);
  651. END;
  652.  
  653. PROCEDURE DrawVScrollBar(Dlg:PDlgList;_hps:HPS);
  654. VAR rc:RECTL;
  655.     x,y:LONGINT;
  656. BEGIN
  657.      rc.yBottom:=Dlg^.y;
  658.      rc.yTop:=Dlg^.y+Dlg^.cy;
  659.      rc.XLeft:=Dlg^.x+Dlg^.cx;
  660.      dec(rc.xleft,15);
  661.      rc.XRight:=rc.xleft+16;
  662.      inc(rc.XLeft,1);
  663.      dec(rc.XRight,1);
  664.      dec(rc.YTop,1);
  665.      WinDrawBorder(DB_DEPRESSED,CLR_PALEGRAY,CLR_BLACK,1,1,rc,_hps);
  666.  
  667.      inc(rc.xLeft);
  668.      inc(rc.yBottom);
  669.      dec(rc.XRight);
  670.      dec(rc.yTop);
  671.      WinFillRect(CLR_PALEGRAY,rc,_hps);
  672.  
  673.      x:=Dlg^.x+Dlg^.cx;
  674.      dec(x,13);
  675.      y:=Dlg^.y+Dlg^.cy;
  676.      dec(y,16);
  677.      DrawUpperScroller(x,y,_hps);
  678.      y:=Dlg^.y;
  679.      inc(y);
  680.      DrawLowerScroller(x,y,_hps);
  681. END;
  682.  
  683. PROCEDURE TMyApp.DrawElement(Dlg:PDlgList;_hps:HPS);
  684. VAR rc:RECTL;
  685.     arcp:TArcParams;
  686.     point:POINTL;
  687.     sp:PString;
  688. BEGIN
  689.      CASE Dlg^.Typ OF
  690.             WC_NULL:
  691.             BEGIN
  692.                  sp:=Dlg^.Text;
  693.                  WinSetWindowText(sp,DlgWin);
  694.             END;
  695.             WC_BUTTON:
  696.             BEGIN
  697.                  {Draw the button}
  698.                  rc.yBottom:=Dlg^.y;
  699.                  rc.yTop:=Dlg^.y+Dlg^.cy;
  700.                  rc.XLeft:=Dlg^.x;
  701.                  rc.XRight:=Dlg^.x+Dlg^.cx;
  702.                  inc(rc.XLeft,1);
  703.                  dec(rc.XRight,1);
  704.                  dec(rc.YTop,1);
  705.                  WinDrawBorder(DB_RAISED,CLR_PALEGRAY,CLR_BLACK,1,1,rc,_hps);
  706.                  inc(rc.xLeft);
  707.                  inc(rc.yBottom);
  708.                  dec(rc.XRight);
  709.                  dec(rc.yTop);
  710.                  WinFillRect(CLR_PALEGRAY,rc,_hps);
  711.                  rc.yBottom:=Dlg^.y-1;
  712.                  rc.yTop:=Dlg^.y+Dlg^.cy;
  713.                  rc.XLeft:=Dlg^.x;
  714.                  rc.XRight:=Dlg^.x+Dlg^.cx;
  715.                  WinDrawBorder(DB_PATCOPY,CLR_PALEGRAY,CLR_DARKGRAY,1,1,rc,_hps);
  716.                  DrawDlgString(Dlg,Dlg^.x+10,Dlg^.y+10,_hps);
  717.             END;
  718.             WC_CHECKBOX:
  719.             BEGIN
  720.                  {Draw the button}
  721.                  rc.yBottom:=Dlg^.y+(Dlg^.cy DIV 2);
  722.                  dec(rc.yBottom,2);
  723.                  rc.yTop:=rc.yBottom+12;
  724.                  rc.XLeft:=Dlg^.x;
  725.                  rc.XRight:=rc.xLeft+13;
  726.                  inc(rc.XLeft,1);
  727.                  dec(rc.XRight,1);
  728.                  dec(rc.YTop,1);
  729.                  WinDrawBorder(DB_RAISED,CLR_PALEGRAY,CLR_BLACK,1,1,rc,_hps);
  730.                  inc(rc.xLeft);
  731.                  inc(rc.yBottom);
  732.                  dec(rc.XRight);
  733.                  dec(rc.yTop);
  734.                  WinFillRect(CLR_PALEGRAY,rc,_hps);
  735.                  rc.yBottom:=Dlg^.y+(Dlg^.cy div 2);
  736.                  dec(rc.yBottom,3{7});
  737.                  rc.yTop:=rc.yBottom+13;
  738.                  rc.XLeft:=Dlg^.x;
  739.                  rc.XRight:=rc.xLeft+13;
  740.                  WinDrawBorder(DB_PATCOPY,CLR_PALEGRAY,CLR_DARKGRAY,1,1,rc,_hps);
  741.                  DrawDlgString(Dlg,Dlg^.x+15,rc.yBottom+2,_hps);
  742.             END;
  743.             WC_RADIOBOX:
  744.             BEGIN
  745.                  {Draw the button}
  746.                  rc.yBottom:=Dlg^.y+(Dlg^.cy DIV 2);
  747.                  dec(rc.yBottom,2);
  748.                  rc.yTop:=rc.yBottom+12;
  749.                  rc.XLeft:=Dlg^.x;
  750.                  rc.XRight:=rc.xLeft+13;
  751.                  inc(rc.XLeft,1);
  752.                  dec(rc.XRight,1);
  753.                  dec(rc.YTop,1);
  754.                  arcp.lp:=6;
  755.                  arcp.lq:=6;
  756.                  arcp.lr:=0;
  757.                  arcp.ls:=0;
  758.                  point.x:=rc.xleft+6;
  759.                  point.y:=rc.yBottom+6;
  760.                  GpiMove(point,_hps);
  761.                  GpiSetArcParams(arcp,_hps);
  762.                  GpiSetColor(CLR_DARKGRAY,_hps);
  763.                  GpiFullArc(65536,DRO_OUTLINE,_hps);
  764.                  arcp.lp:=5;
  765.                  arcp.lq:=5;
  766.                  arcp.lr:=0;
  767.                  arcp.ls:=0;
  768.                  point.x:=rc.xleft+6;
  769.                  point.y:=rc.yBottom+6;
  770.                  GpiMove(point,_hps);
  771.                  GpiSetArcParams(arcp,_hps);
  772.                  GpiSetColor(CLR_DARKGRAY,_hps);
  773.                  GpiFullArc(65536,DRO_OUTLINE,_hps);
  774.                  arcp.lp:=4;
  775.                  arcp.lq:=4;
  776.                  arcp.lr:=0;
  777.                  arcp.ls:=0;
  778.                  point.x:=rc.xleft+6;
  779.                  point.y:=rc.yBottom+6;
  780.                  GpiMove(point,_hps);
  781.                  GpiSetArcParams(arcp,_hps);
  782.                  GpiSetColor(CLR_WHITE,_hps);
  783.                  GpiFullArc(65536,DRO_OUTLINE,_hps);
  784.                  DrawDlgString(Dlg,Dlg^.x+17,rc.yBottom+2,_hps);
  785.             END;
  786.             WC_ENTRYFIELD:
  787.             BEGIN
  788.                  rc.xleft:=Dlg^.x;
  789.                  rc.xright:=Dlg^.x+Dlg^.cx;
  790.                  rc.yBottom:=Dlg^.y;
  791.                  rc.yTop:=Dlg^.y+Dlg^.cy;
  792.                  WinDrawBorder(DB_DEPRESSED,CLR_PALEGRAY,CLR_DARKGRAY,1,1,rc,_hps);
  793.                  inc(rc.xLeft);
  794.                  inc(rc.yBottom);
  795.                  dec(rc.XRight);
  796.                  dec(rc.yTop);
  797.                  WinFillRect(CLR_WHITE,rc,_hps);
  798.             END;
  799.             WC_LISTBOX:
  800.             BEGIN
  801.                  rc.xleft:=Dlg^.x;
  802.                  rc.xright:=Dlg^.x+Dlg^.cx;
  803.                  rc.yBottom:=Dlg^.y;
  804.                  rc.yTop:=Dlg^.y+Dlg^.cy;
  805.                  WinDrawBorder(DB_DEPRESSED,CLR_PALEGRAY,CLR_DARKGRAY,1,1,rc,_hps);
  806.                  inc(rc.xLeft);
  807.                  inc(rc.yBottom);
  808.                  dec(rc.XRight);
  809.                  dec(rc.yTop);
  810.                  WinFillRect(CLR_WHITE,rc,_hps);
  811.                  DrawVScrollBar(Dlg,_hps);
  812.             END;
  813.             WC_TEXT:DrawDlgString(Dlg,Dlg^.X,Dlg^.y+4,_hps);
  814.             WC_GROUPBOX:
  815.             BEGIN
  816.                  {Draw the GroupBox}
  817.                  rc.yBottom:=Dlg^.y;
  818.                  rc.yTop:=Dlg^.y+Dlg^.cy;
  819.                  rc.XLeft:=Dlg^.x;
  820.                  rc.XRight:=Dlg^.x+Dlg^.cx;
  821.                  WinDrawBorder(DB_DEPRESSED,CLR_PALEGRAY,CLR_BLACK,1,1,rc,_hps);
  822.                  inc(rc.xLeft);
  823.                  inc(rc.yBottom);
  824.                  dec(rc.xRight);
  825.                  dec(rc.yTop);
  826.                  {WinFillRect(CLR_PALEGRAY,rc,_hps);}
  827.                  rc.yBottom:=Dlg^.y;
  828.                  rc.yTop:=Dlg^.y+Dlg^.cy;
  829.                  rc.XLeft:=Dlg^.x;
  830.                  rc.XRight:=Dlg^.x+Dlg^.cx;
  831.                  inc(rc.xleft,1);
  832.                  dec(rc.xright,1);
  833.                  inc(rc.yBottom,1);
  834.                  dec(rc.yTop,1);
  835.                  WinDrawBorder(DB_RAISED,CLR_PALEGRAY,CLR_DARKGRAY,1,1,rc,_hps);
  836.                  DrawDlgString(Dlg,Dlg^.X+10,Dlg^.y+Dlg^.CY-5,_hps);
  837.             END;
  838.      END; {case}
  839. END;
  840.  
  841. PROCEDURE TMyApp.MDIRedraw(rc:RECTL;_hps:HPS;Win:HWND;Data:POINTER);
  842. VAR dummy:PDlgList;
  843.     bcol:INTEGER;
  844.     _hps1:HPS;
  845. BEGIN
  846.      _hps1:=WinGetPS(DlgWin);  {Create New presentation space}
  847.      dummy:=DlgList;
  848.      WHILE dummy<>NIL DO
  849.      BEGIN
  850.           DrawElement(Dummy,_hps1);
  851.           dummy:=dummy^.next;
  852.      END;
  853.      WinReleasePS(_hps1);
  854. END;
  855.  
  856.  
  857. PROCEDURE TMyApp.MDICreateNotify(MDIFrWin,MDIWin:HWND;Data:POINTER);
  858. BEGIN
  859.      DlgFrWin:=MDIFrWin;
  860.      DlgWin:=MDIWin;
  861.      SetWindowPos(MDIFrWin,20,20,300,200);
  862. END;
  863.  
  864.  
  865. PROCEDURE TMyApp.DrawRec;
  866. VAR _hps:HPS;
  867.     rc:RECTL;
  868.     x,y,cx,cy:LONGINT;
  869. BEGIN
  870.      GetWindowPos(DlgWin,x,y,cx,cy);
  871.      IF Dragy+Dragcy>cy-30 THEN
  872.      BEGIN
  873.           Dragy:=cy-Dragcy-30;
  874.      END;
  875.  
  876.      IF Dragx+Dragcx>cx-10 THEN
  877.      BEGIN
  878.           Dragx:=cx-Dragcx-10;
  879.      END;
  880.  
  881.      IF Dragx<10 THEN Dragx:=10;
  882.      IF Dragy<10 THEN Dragy:=10;
  883.  
  884.      rc.xleft:=Dragx;
  885.      rc.ybottom:=Dragy;
  886.      rc.xright:=Dragx+Dragcx;
  887.      rc.ytop:=Dragy+Dragcy;
  888.      _hps:=WinGetPS(DlgWin);
  889.      WinDrawBorder(DB_DESTINVERT,CLR_PALEGRAY,CLR_BLACK,2,2,rc,_hps);
  890.      WinReleasePS(_hps);
  891. END;
  892.  
  893.  
  894. PROCEDURE TMyApp.MakePermanent;
  895. VAR
  896.     _hps:HPS;
  897. BEGIN
  898.      IF not DragActive THEN exit;
  899.      DrawRec;  {Delete rec}
  900.      ActualDlg^.x:=DragX;
  901.      ActualDlg^.y:=DragY;
  902.      ActualDlg^.CX:=DragCX;
  903.      ActualDlg^.CY:=DragCY;
  904.      DragActive:=FALSE;
  905.      _hps:=WinGetPS(DlgWin);
  906.      DrawElement(ActualDlg,_hps);
  907.      WinReleasePS(_hps);
  908. END;
  909.  
  910. PROCEDURE TMyApp.WMMenuSelect(Win:HWND;para1:POINTER);
  911. BEGIN
  912.      MakePermanent;
  913. END;
  914.  
  915.  
  916. PROCEDURE DrawSelRec(Win:HWND;x,y:INTEGER);
  917. VAR rc:RECTL;
  918.     _hps:HPS;
  919. BEGIN
  920.      rc.xleft:=x;
  921.      rc.ybottom:=y;
  922.      rc.xright:=x+8;
  923.      rc.ytop:=y+8;
  924.      _hps:=WinGetPS(Win);
  925.      WinDrawBorder(DB_DESTINVERT,CLR_PALEGRAY,CLR_BLACK,8,8,rc,_hps);
  926.      WinReleasePS(_hps);
  927. END;
  928.  
  929. PROCEDURE TMyApp.UnsetSelection;
  930. VAR LenX,LenY:INTEGER;
  931. BEGIN
  932.      IF not Selection THEN Exit;
  933.      Selection:=FALSE;
  934.      DrawSelRec(DlgWin,SelectX-4,SelectY+Selectcy-4);
  935.      DrawSelRec(DlgWin,Selectx-4,Selecty-4);
  936.      DrawSelRec(DlgWin,Selectx+Selectcx-4,Selecty-4);
  937.      DrawSelRec(DlgWin,Selectx+Selectcx-4,Selecty+Selectcy-4);
  938.      LenY:=(SelectY+SelectCY DIV 2)-4;
  939.      DrawSelRec(DlgWin,SelectX-4,LenY);
  940.      DrawSelRec(DlgWin,SelectX+SelectCX-4,LenY);
  941.      LenX:=(SelectX+SelectCX DIV 2)-4;
  942.      DrawSelRec(DlgWin,LenX,SelectY-4);
  943.      DrawSelRec(DlgWin,LenX,SelectY+SelectCY-4);
  944.      MoveMode:=FALSE;
  945. END;
  946.  
  947. PROCEDURE TMyApp.MakeSelection(Dlg:PDlgList);
  948. VAR LenX,LenY:INTEGER;
  949. BEGIN
  950.      IF Selection THEN UnsetSelection;
  951.      Selection:=TRUE;
  952.      SelectX:=Dlg^.x;
  953.      SelectY:=Dlg^.y;
  954.      Selectcx:=Dlg^.cx;
  955.      Selectcy:=Dlg^.cy;
  956.      DrawSelRec(DlgWin,SelectX-4,SelectY+Selectcy-4);
  957.      DrawSelRec(DlgWin,Selectx-4,Selecty-4);
  958.      DrawSelRec(DlgWin,Selectx+Selectcx-4,Selecty-4);
  959.      DrawSelRec(DlgWin,Selectx+Selectcx-4,Selecty+Selectcy-4);
  960.      LenY:=(SelectY+SelectCY DIV 2)-4;
  961.      DrawSelRec(DlgWin,SelectX-4,LenY);
  962.      DrawSelRec(DlgWin,SelectX+SelectCX-4,LenY);
  963.      LenX:=(SelectX+SelectCX DIV 2)-4;
  964.      DrawSelRec(DlgWin,LenX,SelectY-4);
  965.      DrawSelRec(DlgWin,LenX,SelectY+SelectCY-4);
  966. END;
  967.  
  968. FUNCTION TMyApp.CheckSelection(x,y:INTEGER):PDlgList;
  969. VAR Dummy,Selected:PDlgList;
  970. BEGIN
  971.      Dummy:=DlgList;
  972.      Selected:=NIL;
  973.      WHILE dummy<>NIL DO
  974.      BEGIN
  975.           IF x>=Dummy^.x THEN IF y>=Dummy^.y THEN IF
  976.            x<=Dummy^.x+Dummy^.cx THEN IF y<=Dummy^.y+Dummy^.cy THEN
  977.             Selected:=Dummy;
  978.           Dummy:=Dummy^.Next;
  979.      END;
  980.      IF Selected<>NIL THEN MakeSelection(Selected);
  981.      CheckSelection:=Selected;
  982. END;
  983.  
  984. PROCEDURE TMyApp.UnsetMoveMode;
  985. VAR _hps:HPS;
  986. BEGIN
  987.      IF not MoveMode THEN exit;
  988.      MoveMode:=FALSE;
  989.      UnsetSelection;
  990.      DrawRec;  {Delete rec}
  991.      ActualDlg^.X:=DragX;
  992.      ActualDlg^.Y:=DragY;
  993.      ActualDlg^.CX:=DragCX;
  994.      ActualDlg^.CY:=DragCY;
  995.  
  996.      InvalidateMDIWindow(DlgWin);
  997.      MakeSelection(ActualDlg);
  998.      WinSetPointer(ArrowPtr,HWND_DESKTOP);
  999. END;
  1000.  
  1001.  
  1002. PROCEDURE TMyApp.MDIWMButton1Up(Win:HWND;x,y:INTEGER;Data:POINTER);
  1003. BEGIN
  1004.      MoveStart:=FALSE;
  1005.      SizeLowNS:=FALSE;
  1006.      SizeLeftWE:=FALSE;
  1007.      SizeHighNS:=FALSE;
  1008.      SizeRightWE:=FALSE;
  1009.      SizeLeftUp:=FALSE;
  1010.      SizeLeftDown:=FALSE;
  1011.      SizeRightUp:=FALSE;
  1012.      SizeRightDown:=FALSE;
  1013.      IF MoveMode THEN UnsetMoveMode;
  1014. END;
  1015.  
  1016. PROCEDURE TMyApp.EditStyle;
  1017. BEGIN
  1018.      IF not DlgActive THEN exit;
  1019.      IF Selection THEN
  1020.      BEGIN
  1021.           CASE ActualDlg^.Typ OF
  1022.              WC_BUTTON:ButtonDlg(ActualDlg^.Text,ActualDlg^.IdConstName,
  1023.                                  ActualDlg^.Flags,ActualDlg^.id);
  1024.              WC_CHECKBOX:CheckBoxDlg(ActualDlg^.Text,ActualDlg^.IdConstName,
  1025.                                      ActualDlg^.Flags,ActualDlg^.id);
  1026.              WC_RADIOBOX:RadioBoxDlg(ActualDlg^.Text,ActualDlg^.IdConstName,
  1027.                                      ActualDlg^.Flags,ActualDlg^.id);
  1028.              WC_GROUPBOX:GroupBoxDlg(ActualDlg^.Text,ActualDlg^.IdConstName,
  1029.                          ActualDlg^.Flags,ActualDlg^.id);
  1030.              WC_TEXT:TextDlg(ActualDlg^.Text,ActualDlg^.IdConstName,
  1031.                              ActualDlg^.Flags,ActualDlg^.id);
  1032.              WC_ENTRYFIELD:EntryDlg(ActualDlg^.Text,ActualDlg^.IdConstName,
  1033.                              ActualDlg^.Flags,ActualDlg^.id);
  1034.              WC_LISTBOX:ListBoxDlg(ActualDlg^.Text,ActualDlg^.IdConstName,
  1035.                                    ActualDlg^.Flags,ActualDlg^.id);
  1036.              ELSE Beep(500,50);
  1037.           END; {case}
  1038.           UnsetSelection;
  1039.           InvalidateMDIWindow(DlgWin);
  1040.      END
  1041.      ELSE
  1042.      BEGIN
  1043.           DialogDlg(DlgList^.Text,DlgList^.IdConstName,DlgList^.Flags,
  1044.                     DlgList^.id);
  1045.           UnsetSelection;
  1046.           InvalidateMDIWindow(DlgWin);
  1047.      END;
  1048. END;
  1049.  
  1050. PROCEDURE TMyApp.MDIWMButton1DoubleClick(Win:HWND;x,y:INTEGER;Data:POINTER);
  1051. VAR Dlg:PDlgList;
  1052. BEGIN
  1053.      IF not DlgActive THEN exit;
  1054.      IF Selection THEN
  1055.      BEGIN
  1056.           Dlg:=CheckSelection(x,y);
  1057.           IF Dlg=ActualDlg THEN EditStyle;
  1058.      END
  1059.      ELSE EditStyle;
  1060. END;
  1061.  
  1062. PROCEDURE TMyApp.WMButton1Up(Win:HWND;x,y:INTEGER);
  1063. BEGIN
  1064.      MoveStart:=FALSE;
  1065.      IF MoveMode THEN UnsetMoveMode;
  1066. END;
  1067.  
  1068.  
  1069. PROCEDURE TMyApp.WMButton1Down(Win:HWND;x,y:INTEGER);
  1070. BEGIN
  1071.      MakePermanent;
  1072. END;
  1073.  
  1074. PROCEDURE TMyApp.MDIWMButton1Down(Win:HWND;x,y:INTEGER;Data:POINTER);
  1075. VAR Dlg:PDlgList;
  1076. BEGIN
  1077.      IF DragActive THEN
  1078.      BEGIN
  1079.           MakePermanent;
  1080.           MakeSelection(ActualDlg);
  1081.           MoveMode:=TRUE;
  1082.           DragX:=ActualDlg^.Y;
  1083.           DragY:=ActualDlg^.Y;
  1084.           DragCX:=ActualDlg^.CX;
  1085.           DragCY:=ActualDlg^.CY;
  1086.           ActualDlg:=ActualDlg;
  1087.           DrawRec;
  1088.           exit;
  1089.      END;
  1090.      IF ((SizeLowNS)OR(SizeHighNS)OR(SizeLeftWE)OR(SizeRightWE)
  1091.          OR(SizeLeftUp)OR(SizeLeftDown)OR(SizeRightUp)OR(SizeRightDown)) THEN
  1092.      BEGIN
  1093.           MoveStart:=TRUE;
  1094.           DragX:=SelectX;
  1095.           DragY:=SelectY;
  1096.           DragCX:=SelectCX;
  1097.           DragCY:=SelectCY;
  1098.           exit;
  1099.      END;
  1100.      Dlg:=CheckSelection(x,y);
  1101.      IF Dlg<>NIL THEN
  1102.      BEGIN
  1103.           MoveStart:=TRUE;
  1104.           DragX:=x;
  1105.           DragY:=y;
  1106.           DragCX:=Dlg^.CX;
  1107.           DragCY:=Dlg^.CY;
  1108.           ActualDlg:=Dlg;
  1109.           exit;
  1110.      END;
  1111.      UnsetSelection;
  1112.      WinSetPointer(ArrowPtr,HWND_DESKTOP);
  1113. END;
  1114.  
  1115. PROCEDURE TMyApp.MDIWMMouseMove(Win:HWND;x,y:INTEGER;Data:POINTER);
  1116. VAR _hps:HPS;
  1117.     rc:RECTL;
  1118.     _hptr:LONGWORD;
  1119.     temp:INTEGER;
  1120. LABEL l;
  1121. BEGIN
  1122.      IF DragActive THEN
  1123.      BEGIN
  1124.           WinSetPointer(ArrowPtr,HWND_DESKTOP);
  1125.           DrawRec;  {Delete old rec}
  1126.           Dragx:=x;
  1127.           Dragy:=y;
  1128.           DrawRec;
  1129.           exit;
  1130.      END;
  1131.      IF MoveMode THEN
  1132.      BEGIN
  1133. l:
  1134.           IF SizeHighNS THEN
  1135.           BEGIN
  1136.                DrawRec;
  1137.                IF DragY+8<y THEN DragCY:=y-DragY;
  1138.                DrawRec;
  1139.                exit;
  1140.           END;
  1141.           IF SizeLowNS THEN
  1142.           BEGIN
  1143.                DrawRec;
  1144.                temp:=DragY+DragCY;
  1145.                IF temp>DragY+8 THEN
  1146.                BEGIN
  1147.                     DragY:=y;
  1148.                     DragCY:=temp-DragY;
  1149.                END;
  1150.                DrawRec;
  1151.                exit;
  1152.           END;
  1153.           IF SizeLeftWE THEN
  1154.           BEGIN
  1155.                DrawRec;
  1156.                temp:=DragX+DragCX;
  1157.                IF temp>DragX+8 THEN
  1158.                BEGIN
  1159.                     DragX:=x;
  1160.                     DragCX:=temp-DragX;
  1161.                END;
  1162.                DrawRec;
  1163.                exit;
  1164.           END;
  1165.           IF SizeRightWE THEN
  1166.           BEGIN
  1167.                DrawRec;
  1168.                IF DragX+8<x THEN DragCX:=x-DragX;
  1169.                DrawRec;
  1170.                exit;
  1171.           END;
  1172.           IF SizeLeftUp THEN
  1173.           BEGIN
  1174.                DrawRec;
  1175.                temp:=DragX+DragCX;
  1176.                IF temp>DragX+8 THEN
  1177.                BEGIN
  1178.                     DragX:=x;
  1179.                     DragCX:=temp-DragX;
  1180.                END;
  1181.                IF DragY+8<y THEN DragCY:=y-DragY;
  1182.                DrawRec;
  1183.                exit;
  1184.           END;
  1185.           IF SizeRightDown THEN
  1186.           BEGIN
  1187.                DrawRec;
  1188.                IF DragX+8<x THEN DragCX:=x-DragX;
  1189.                temp:=DragY+DragCY;
  1190.                IF temp>DragY+8 THEN
  1191.                BEGIN
  1192.                     DragY:=y;
  1193.                     DragCY:=temp-DragY;
  1194.                END;
  1195.                DrawRec;
  1196.                exit;
  1197.           END;
  1198.           IF SizeRightUp THEN
  1199.           BEGIN
  1200.                DrawRec;
  1201.                IF DragY+8<y THEN DragCY:=y-DragY;
  1202.                IF DragX+8<x THEN DragCX:=x-DragX;
  1203.                DrawRec;
  1204.                exit;
  1205.           END;
  1206.           IF SizeLeftDown THEN
  1207.           BEGIN
  1208.                DrawRec;
  1209.                temp:=DragY+DragCY;
  1210.                IF temp>DragY+8 THEN
  1211.                BEGIN
  1212.                     DragY:=y;
  1213.                     DragCY:=temp-DragY;
  1214.                END;
  1215.                temp:=DragX+DragCX;
  1216.                IF temp>DragX+8 THEN
  1217.                BEGIN
  1218.                     DragX:=x;
  1219.                     DragCX:=temp-DragX;
  1220.                END;
  1221.                DrawRec;
  1222.                exit;
  1223.           END;
  1224.           WinSetPointer(MovePtr,HWND_DESKTOP);
  1225.           DrawRec;  {Delete old rec}
  1226.           DragX:=x;
  1227.           DragY:=y;
  1228.           DrawRec;
  1229.           exit;
  1230.      END;
  1231.      IF MoveStart THEN
  1232.      BEGIN
  1233.           IF x<>DragX THEN
  1234.           BEGIN
  1235.                MoveStart:=FALSE;
  1236.                MoveMode:=TRUE;
  1237.                DrawRec;
  1238.                goto l;
  1239.           END;
  1240.           IF y<>DragY THEN
  1241.           BEGIN
  1242.                MoveStart:=FALSE;
  1243.                MoveMode:=TRUE;
  1244.                DrawRec;
  1245.                goto l;
  1246.           END;
  1247.      END;
  1248.      SizeLowNS:=FALSE;
  1249.      SizeHighNS:=FALSE;
  1250.      SizeLeftWE:=FALSE;
  1251.      SizeRightWE:=FALSE;
  1252.      SizeLeftUp:=FALSE;
  1253.      SizeLeftDown:=FALSE;
  1254.      SizeRightUp:=FALSE;
  1255.      SizeRightDown:=FALSE;
  1256.      IF Selection THEN
  1257.      BEGIN
  1258.           IF x>=SelectX-6 THEN IF x<=SelectX THEN
  1259.           BEGIN
  1260.                IF y>=SelectY-6 THEN IF y<=SelectY THEN
  1261.                BEGIN
  1262.                     SizeLeftDown:=TRUE;
  1263.                     WinSetPointer(SIZENESWPtr,HWND_DESKTOP);
  1264.                     exit;
  1265.                END;
  1266.                IF y>=SelectY+SelectCY-6 THEN IF y<=SelectY+SelectCY THEN
  1267.                BEGIN
  1268.                     SizeLeftUp:=TRUE;
  1269.                     WinSetPointer(SIZENWSEPtr,HWND_DESKTOP);
  1270.                     exit;
  1271.                END;
  1272.                temp:=SelectY+SelectCY DIV 2;
  1273.                IF y>=temp-6 THEN IF y<=temp THEN
  1274.                BEGIN
  1275.                     SizeLeftWE:=TRUE;
  1276.                     WinSetPointer(SIZEWEPtr,HWND_DESKTOP);
  1277.                     exit;
  1278.                END;
  1279.           END;
  1280.           IF x>=SelectX+SelectCX-6 THEN IF x<=SelectX+SelectCX THEN
  1281.           BEGIN
  1282.                IF y>=SelectY-6 THEN IF y<=SelectY THEN
  1283.                BEGIN
  1284.                     SizeRightDown:=TRUE;
  1285.                     WinSetPointer(SIZENWSEPtr,HWND_DESKTOP);
  1286.                     exit;
  1287.                END;
  1288.                IF y>=SelectY+SelectCY-6 THEN IF y<=SelectY+SelectCY THEN
  1289.                BEGIN
  1290.                     SizeRightUp:=TRUE;
  1291.                     WinSetPointer(SIZENESWPtr,HWND_DESKTOP);
  1292.                     exit;
  1293.                END;
  1294.                temp:=SelectY+SelectCY DIV 2;
  1295.                IF y>=temp-6 THEN IF y<=temp THEN
  1296.                BEGIN
  1297.                     SizeRightWE:=TRUE;
  1298.                     WinSetPointer(SIZEWEPtr,HWND_DESKTOP);
  1299.                     exit;
  1300.                END;
  1301.           END;
  1302.           temp:=SelectX+SelectCX DIV 2;
  1303.           IF x>=temp-6 THEN IF x<=temp THEN
  1304.           BEGIN
  1305.                IF y>=SelectY-6 THEN IF y<=SelectY THEN
  1306.                BEGIN
  1307.                     SizeLowNS:=TRUE;
  1308.                     WinSetPointer(SIZENSPtr,HWND_DESKTOP);
  1309.                     exit;
  1310.                END;
  1311.                IF y>=SelectY+SelectCY-6 THEN IF y<=SelectY+SelectCY THEN
  1312.                BEGIN
  1313.                     SizeHighNS:=TRUE;
  1314.                     WinSetPointer(SIZENSPtr,HWND_DESKTOP);
  1315.                     exit;
  1316.                END;
  1317.           END;
  1318.      END;
  1319.      WinSetPointer(ArrowPtr,HWND_DESKTOP);
  1320. END;
  1321.  
  1322. PROCEDURE TMyApp.NewDlgItem(Typ:LONGWORD);
  1323. VAR Dummy:PDlgList;
  1324.     s:STRING;
  1325.     Flags:LONGWORD;
  1326. BEGIN
  1327.      DragX:=20;
  1328.      DragY:=10;
  1329.      Flags:=0;
  1330.      CASE Typ OF
  1331.         WC_NULL:
  1332.         BEGIN
  1333.              DragCX:=0;
  1334.              DragCY:=0;
  1335.              s:='Dialog window';
  1336.              Flags:=WS_VISIBLE OR WS_SAVEBITS OR FCF_TITLEBAR OR
  1337.                     FCF_SYSMENU OR FS_DLGBORDER OR FS_WINDOWALIGN;
  1338.         END;
  1339.         WC_BUTTON:
  1340.         BEGIN
  1341.              DragCX:=60;
  1342.              DragCY:=30;
  1343.              s:='Push';
  1344.              Flags:=WS_VISIBLE OR WS_TABSTOP;
  1345.         END;
  1346.         WC_LISTBOX:
  1347.         BEGIN
  1348.              DragCX:=100;
  1349.              DragCY:=80;
  1350.              s:='';
  1351.              Flags:=WS_VISIBLE OR WS_TABSTOP;
  1352.         END;
  1353.         WC_GROUPBOX:
  1354.         BEGIN
  1355.              DragCX:=80;
  1356.              DragCY:=60;
  1357.              s:='Group';
  1358.              Flags:=WS_VISIBLE OR WS_GROUP;
  1359.         END;
  1360.         WC_CHECKBOX:
  1361.         BEGIN
  1362.              DragCX:=60;
  1363.              DragCY:=20;
  1364.              s:='Check';
  1365.              Flags:=WS_VISIBLE OR WS_TABSTOP;
  1366.         END;
  1367.         WC_RADIOBOX:
  1368.         BEGIN
  1369.              DragCX:=60;
  1370.              DragCY:=20;
  1371.              s:='Radio';
  1372.              Flags:=WS_VISIBLE OR WS_TABSTOP;
  1373.         END;
  1374.         WC_ENTRYFIELD:
  1375.         BEGIN
  1376.              DragCX:=60;
  1377.              DragCY:=14;
  1378.              s:='';
  1379.              Flags:=WS_VISIBLE OR WS_TABSTOP OR ES_MARGIN OR ES_AUTOSCROLL;
  1380.         END;
  1381.         WC_TEXT:
  1382.         BEGIN
  1383.              DragCX:=60;
  1384.              DragCY:=20;
  1385.              s:='Text';
  1386.              Flags:=WS_VISIBLE OR WS_GROUP;
  1387.         END;
  1388.      END; {case}
  1389.  
  1390.      IF DlgList=NIL THEN
  1391.      BEGIN
  1392.           New(DlgList);
  1393.           dummy:=DlgList;
  1394.      END
  1395.      ELSE
  1396.      BEGIN
  1397.           dummy:=DlgList;
  1398.           WHILE dummy^.Next<>NIL DO dummy:=dummy^.next;
  1399.           New(Dummy^.Next);
  1400.           dummy:=dummy^.Next;
  1401.      END;
  1402.  
  1403.      Dummy^.Typ:=Typ;
  1404.      Dummy^.Color:=CLR_BLACK;
  1405.      Dummy^.Flags:=Flags;
  1406.      Dummy^.BackColor:=CLR_PALEGRAY;
  1407.      Dummy^.Text:=s;
  1408.      Dummy^.x:=Dragx;
  1409.      Dummy^.y:=Dragy;
  1410.      Dummy^.cx:=Dragcx;
  1411.      Dummy^.cy:=Dragcy;
  1412.      IF Typ=WC_NULL THEN
  1413.      BEGIN
  1414.           Dummy^.id:=DlgCount;
  1415.           inc(DlgCount);
  1416.      END
  1417.      ELSE Dummy^.id:=100;
  1418.      IF Typ=WC_GROUPBOX THEN Dummy^.Color:=CLR_BLUE;
  1419.      Dummy^.idConstName:='';
  1420.      Dummy^.Next:=NIL;
  1421.  
  1422.      IF Typ<>WC_NULL THEN
  1423.      BEGIN
  1424.           ActualDlg:=Dummy;
  1425.           DrawRec;
  1426.           DragActive:=TRUE;
  1427.      END;
  1428. END;
  1429.  
  1430. FUNCTION TMyApp.MDIHandleEvent(Win:HWND;Msg:LONGWORD;
  1431.                                 para1,para2:POINTER;
  1432.                                 VAR Handled:BOOLEAN;Data:POINTER):LONGWORD;
  1433. VAR r:LONGWORD;
  1434.     H:BOOLEAN;
  1435. BEGIN
  1436.      r:=Inherited.MDIHandleEvent(Win,Msg,para1,para2,Handled,Data);
  1437.      H:=FALSE;
  1438.      IF not Handled THEN Handled:=H;
  1439.      MDIHandleEvent:=r;
  1440. END;
  1441.  
  1442. PROCEDURE TMyApp.NewDlgEntry;
  1443. VAR x,y,cx,cy:LONGINT;
  1444.     xtemp,ytemp:LONGINT;
  1445.     pt:POINTL;
  1446.     _hps:HPS;
  1447.     _hdc:LONGWORD;
  1448.     g:TSizel;
  1449. BEGIN
  1450.      GetWindowPos(DlgWin,x,y,cx,cy);
  1451.      ConvertPoints(x,y,cx,cy);
  1452.      dec(cx,6);
  1453.      dec(cy,14);
  1454.      DlgList^.x:=x;
  1455.      DlgList^.y:=y;
  1456.      DlgList^.cx:=cx;
  1457.      DlgList^.cy:=cy;
  1458.      NewResource(R_DIALOG,DlgList);
  1459.      DlgList:=NIL;
  1460.      DlgActive:=FALSE;
  1461.      WinDestroyWindow(DlgWin);
  1462. END;
  1463.  
  1464. PROCEDURE TMyApp.HandleCommand(Win:HWND;Command:WORD);
  1465. VAR x,y,cx,cy:LONGINT;
  1466.     _hps:HPS;
  1467.     rc:RECTL;
  1468.     Dlg:TDialog;
  1469.     ResType:WORD;
  1470. BEGIN
  1471.      Inherited.HandleCommand(Win,Command);
  1472.      CASE Command OF
  1473.          CM_NEWRES:
  1474.          BEGIN
  1475.               IF DlgActive THEN UnsetSelection;
  1476.               ResType:=NewResDlg;
  1477.               IF ResType<>0 THEN
  1478.               BEGIN
  1479.                    IF DlgActive THEN NewDlgEntry;  {Append actual resource to list}
  1480.                    DlgActive:=FALSE;
  1481.                    EnableControls;
  1482.                    CASE ResType OF
  1483.                     R_DIALOG:
  1484.                     BEGIN
  1485.                        {Dlg Resource}
  1486.                        DlgWin:=CreateMDIChild(0,'Dialog window',NIL,0,CLR_BLACK,CLR_PALEGRAY);
  1487.                        IF DlgWin<>0 THEN DlgActive:=TRUE;
  1488.                        NewDlgItem(WC_NULL);
  1489.                     END;
  1490.                   END; {case}
  1491.  
  1492.              END;
  1493.          END;
  1494.          CM_NEW:
  1495.          BEGIN
  1496.               IF DlgActive THEN UnsetSelection;
  1497.               IF Resources<>NIL THEN
  1498.                IF ConfirmBox(MB_ICONQUESTION,'Save modified project ??')
  1499.                  THEN SaveProject;
  1500.               EraseProject;
  1501.               SetMenuState(CM_NEWRES,TRUE);
  1502.               SetMenuState(CM_DELETERES,TRUE);
  1503.               SetMenuState(CM_SELECTRES,TRUE);
  1504.               DlgCount:=1000;
  1505.          END;
  1506.          CM_BUTTON:NewDlgItem(WC_BUTTON);
  1507.          CM_LISTBOX:NewDlgItem(WC_LISTBOX);
  1508.          CM_GROUPBOX:NewDlgItem(WC_GROUPBOX);
  1509.          CM_CHECKBOX:NewDlgItem(WC_CHECKBOX);
  1510.          CM_RADIOBOX:NewDlgItem(WC_RADIOBOX);
  1511.          CM_ENTRYFIELD:NewDlgItem(WC_ENTRYFIELD);
  1512.          CM_TEXT:NewDlgItem(WC_TEXT);
  1513.          CM_EDITSTYLE:
  1514.          BEGIN
  1515.               IF DlgActive THEN UnsetSelection;
  1516.               EditStyle;
  1517.          END;
  1518.          CM_ARRANGE:Arrange;
  1519.          CM_OPTION:
  1520.          BEGIN
  1521.               IF DlgActive THEN UnsetSelection;
  1522.               OptionsDlg(Grid,Options);
  1523.          END;
  1524.          CM_ABOUT:
  1525.          BEGIN
  1526.               IF DlgActive THEN UnsetSelection;
  1527.               Dlg.Init(1,AppWinFrameHandle,0,500,NIL);
  1528.               Dlg.ExecDialog(x);
  1529.               Dlg.Done;
  1530.          END;
  1531.      END; {case}
  1532. END;
  1533.  
  1534. PROCEDURE TMyApp.WMClose(VAR Msg:TMessage);
  1535. BEGIN
  1536.      IF DlgActive THEN NewDlgEntry;
  1537.  
  1538.      IF Resources<>NIL THEN
  1539.       IF ConfirmBox(MB_ICONQUESTION,'Save modified project ??')
  1540.         THEN SaveProject;
  1541.      EraseProject;
  1542.      Inherited.WMClose(Msg);
  1543. END;
  1544.  
  1545. PROCEDURE TMyApp.WMMDIClose(Win:HWND;Data:POINTER);
  1546. BEGIN
  1547.      IF DlgActive THEN NewDlgEntry;
  1548.      DisableControls;
  1549.      Inherited.WMMDIClose(Win,Data);
  1550. END;
  1551.  
  1552. PROCEDURE TMyApp.DisableControls;
  1553. BEGIN
  1554.      SetMenuState(CM_GROUPBOX,FALSE);
  1555.      SetMenuState(CM_LISTBOX,FALSE);
  1556.      SetMenuState(CM_BUTTON,FALSE);
  1557.      SetMenuState(CM_ICON,FALSE);
  1558.      SetMenuState(CM_CHECKBOX,FALSE);
  1559.      SetMenuState(CM_RADIOBOX,FALSE);
  1560.      SetMenuState(CM_ENTRYFIELD,FALSE);
  1561.      SetMenuState(CM_TEXT,FALSE);
  1562.      SetMenuState(CM_EDITSTYLE,FALSE);
  1563.      SetMenuState(CM_EDITCOLORS,FALSE);
  1564.      SetMenuState(CM_EDITPRESPARAMS,FALSE);
  1565.      SetMenuState(CM_ARRANGE,FALSE);
  1566. END;
  1567.  
  1568. PROCEDURE TMyApp.EnableControls;
  1569. BEGIN
  1570.      SetMenuState(CM_GROUPBOX,TRUE);
  1571.      SetMenuState(CM_LISTBOX,TRUE);
  1572.      SetMenuState(CM_BUTTON,TRUE);
  1573.      SetMenuState(CM_ICON,TRUE);
  1574.      SetMenuState(CM_CHECKBOX,TRUE);
  1575.      SetMenuState(CM_RADIOBOX,TRUE);
  1576.      SetMenuState(CM_ENTRYFIELD,TRUE);
  1577.      SetMenuState(CM_TEXT,TRUE);
  1578.      SetMenuState(CM_EDITSTYLE,TRUE);
  1579.      SetMenuState(CM_EDITCOLORS,TRUE);
  1580.      SetMenuState(CM_EDITPRESPARAMS,TRUE);
  1581.      SetMenuState(CM_ARRANGE,TRUE);
  1582. END;
  1583.  
  1584.  
  1585. CONSTRUCTOR TMyApp.Init;
  1586. BEGIN
  1587.      Inherited.Init;
  1588.      InsertResources(TRUE,FALSE,TRUE);
  1589.      Untitled:=TRUE;
  1590.      FileName:='Untitled.rc';
  1591.      DlgActive:=FALSE;  {No dialog window opened}
  1592.      DragActive:=FALSE; {No drag active}
  1593.      Selection:=FALSE;
  1594.      MoveMode:=FALSE;
  1595.      MoveStart:=FALSE;
  1596.      SizeLowNS:=FALSE;
  1597.      SizeHighNS:=FALSE;
  1598.      SizeLeftWE:=FALSE;
  1599.      SizeRightWE:=FALSE;
  1600.      SizeLeftUp:=FALSE;
  1601.      SizeLeftDown:=FALSE;
  1602.      SizeRightUp:=FALSE;
  1603.      SizeRightDown:=FALSE;
  1604.      MovePtr:=WinQuerySysPointer(0,SPTR_MOVE,HWND_DESKTOP);
  1605.      ArrowPtr:=WinQuerySysPointer(0,SPTR_ARROW,HWND_DESKTOP);
  1606.      SIZENWSEPtr:=WinQuerySysPointer(0,SPTR_SIZENWSE,HWND_DESKTOP);
  1607.      SIZENESWPtr:=WinQuerySysPointer(0,SPTR_SIZENESW,HWND_DESKTOP);
  1608.      SIZEWEPtr:=WinQuerySysPointer(0,SPTR_SIZEWE,HWND_DESKTOP);
  1609.      SIZENSPtr:=WinQuerySysPointer(0,SPTR_SIZENS,HWND_DESKTOP);
  1610.      DlgList:=NIL;
  1611.      Resources:=NIL;
  1612.      DlgCount:=1000;
  1613.      Grid:=6;
  1614. END;
  1615.  
  1616. PROCEDURE TMyApp.AppCreateNotify(AppFrWin,AppWin:HWND);
  1617. BEGIN
  1618.      Inherited.AppCreateNotify(AppFrWin,AppWin);
  1619.      DisableControls;
  1620.      SetMenuState(CM_NEWRES,FALSE);
  1621.      SetMenuState(CM_DELETERES,FALSE);
  1622.      SetMenuState(CM_SELECTRES,FALSE);
  1623. END;
  1624.  
  1625. DESTRUCTOR TMyApp.Done;
  1626. BEGIN
  1627. END;
  1628.  
  1629.  
  1630. BEGIN
  1631.      MyApp.Init;
  1632.      MyApp.Run(1000,'Speed-Resource Editor ALPHA (Oct 94)',CLR_BLACK,CLR_WHITE);
  1633.      MyApp.Done;
  1634. END.
  1635.