[Back to FAQ SWAG index] [Back to Main SWAG index] [Original]

    SECTION 18 - Turbo Vision
    --------------------------------

    This document contains information that is most often provided
    to users of this section.  There is a listing (when available)
    of common Technical Information Documents and example files that
    can be downloaded from the libraries, and a listing of the most
    frequently asked questions and their answers.

    TECHNICAL INFORMATION DOCUMENTS AND EXAMPLE FILES
    -------------------------------------------------

    TI1721   Determining input focus on Turbo Vision
    TI1725   Local Menus in Turbo Vision
    TI1729   Simultaneous Dialogs in Turbo Vision
    TI1779   Adding and Removing items from a Turbo Vision Listbox
    TI469    Turbo Vision program to go into 132 column mode
    TI991    Multiple variations of TInputLine for Turbo Vision
    TI993    Use different color combinations in Turbo Vision

    TVG110.ZIP   Graphics Mode Version of Turbo Vision

    FREQUENTLY ASKED QUESTIONS AND ANSWERS
    --------------------------------------

    Q:   "Can Turbo Vision be run in graphics mode?"

    A:   Turbo Vision was not designed to support graphics. However,
         there is a file in this library 1 (TVG110.ZIP), which gives
         you a graphics-mode version of Turbo Vision.  There may be
         others uploaded periodically, it's best to search the
         libraries.

    Q:   "Are there any books that cover Turbo Vision?"

    A:   Books that cover Turbo Vision are:

          "A Programmer Guide to Turbo Vision"
             by Freddy Etrl, Ralph Machholz and Andi Golgath
             Addison-Wesley ISBN 0-201-62401-X

          "Turbo Pascal 6.0 Techniques and Utilities"
             by Neil J. Rubenking
             Ziff Davis Press ISBN 1-56276-010-6

          "Clean Coding in Turbo Pascal 6"
             by Amrik Dhillon
             M&T Books ISBN 1-55851-228-4

    Q:   "I don't seem to be getting all the memory used by
         collections after disposing them.  What could be going
         wrong?"

    A:   If you don't seem to be getting back all your memory when
         disposing of a collection, then there are several things you
         may be doing wrong:

         *  You are allocating the collection with

                 MyColl := New(PMyColl, init(...))

            but are only destroying it with

                 MyColl^.Done

            instead of

                 Dispose(MyColl, Done).

         *  You have a memory leak in your TObject descendant that
            you are placing in the collection (check your allocations
            in the Init constructor and the deallocs in your Done
            destructor).

         *  You are not putting TObject descendants in the
            collection at all (this generally creates program
            crashes.

         *  If you call the delete method, the delete method just
            removes the object from the collection but does NOT
            destroy the object, Free removes the object from the
            collection and then destroys it by calling FreeItem
            (which normally calls Dispose(Item, Done)).

    Q:   "What is the proper way to switch from TVision to graphics
         and back?"

    A:   For an example you can ook at the DosShell code in APP.PAS
         (or in TVDEMO, if you're using TP6). Follow the same steps,
         but replace the Exec statement with your graphics stuff.
         If you're using TP7/BP7, you may find that you need to
         replace the DoneDosMem/InitDosMem with
         DoneMemory/InitMemory.

    Q:   "How do you make change the default background of a TVision
         application?"

    A:   The TBackground object is designed to use only 1 ascii
         character. You could create a new type of background
         object.

        Type
           PMyBackground = ^TMyBackground;
           TMyBackground = Object(TView)
             { Variables go here to support your box or text or whatever }
            Procedure Draw; virtual;
            Function GetPalette: PPalette; virtual; { You override this }
             { Other methods here like Load and Store }
           End;

        Procedure TMyBackground.Draw;
        Begin
          { Your drawing routine which draws over the whole view }
        End;

        Also, you will have to override TDesktop.

        Type
           PMyDesktop = TMyDesktop;
           TMyDesktop = Object(TDesktop)
            Procedure InitBackground; virtual;
        End;

        Procedure TMyDesktop.InitBackground;
        Var
           P: PView;
           R: TRect;
        Begin
           GetExtent(R);
           P := New(PMyBackground, Init(R));
           If ValidView(P) Then
               Insert(P);
        End;

        You must also override InitDesktop in your main TApplication.

        Type
           PMyApp = ^TMyApp;
           TMyApp = Object(TApplication)
            Procedure InitDesktop; virtual;
           End;

        Procedure TMyApp.InitDesktop;
        Var
           P: PView;
        Begin
           GetExtent(R);
           Inc(R.A.Y);
           Dec(R.B.Y);
           P := New(PDesktop, Init(R));
           If ValidView(P) Then
               Insert(P);
        End;

[Back to FAQ SWAG index] [Back to Main SWAG index] [Original]