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

QNA-4/8/91
Turbo Pascal for Windows
1.0
Local Heap and Global Heap
TPW's New, GetMem, Dispose and Freemem all use Window's global heap.

[[[]]]

The Local Heap is very small, and not used by TPW, and is occasionally used
by Windows functions (like edit controls).

The Global Heap is generally very big, and is where your pascal program's
"heap" is stored.  The GetMem, FreeMem, New, and Dispose procedures all
operate on the Global Heap.

<<<>>>
QNA-4/8/91
Turbo Pascal for Windows
1.0
Exec from within a TPW program.
Use WinExec in the WinDOS to launch DOS and WinApp programs.

[[[]]]
Question:
   I want to be able to EXEC a DOS or Windows program in Windows. How do I
  do that?
Answer:
   Take a look at the WinExec procedure in your Windows Reference Guide.
  You can use Exec on both WinApps and DOSApps.


<<<>>>
QNA-4/8/91
Turbo Pascal for Windows
1.0
TPW New and GetMem procedures
New, GetMem, HeapBlock, HeapLimit in TPW

[[[]]]
The way memory allocation works for new and getmem is as follows:

There are two system variables:  HeapBlock and HeapLimit.

When memory is allocated for a size less than HeapBlock (Default is 1k)
then the memory will be suballocated in a block of size HeapBlock
(default is 8k).
Allocation of blocks larger than HeapLimit will have there own block.  All
allocations will be in global memory.

You will not be able to change the way this works.


<<<>>>
QNA-4/8/91
Turbo Pascal Windows
1.0
WinCrt and Windows 3.0
WinCrt cannot be used with OWL.

[[[]]]

 WinCrt is an emulation of the Dos and Crt units.  Basically, it provides a
quick and dirty means of output to a Windows window.  It's not intended
to be a Dos to Windows porting service - WinCrt apps are not full Windows
apps - just a Windows window with some text, key scanning loops, and
scrollbars.

  Note that writelns to the 'screen' will cause a runtime error in TPW
unless the WinCrt unit is used. (WinCrt opens the standard Input and
Output files, which are closed by default in TPW).  The Readln, Keypressed,
procedures, etc., are also only valid under the WinCrt umbrella. The text
colors and text inverse are not supported.  And since WinCrt takes control of
the message loop and dispatch services of your windows app, WinCrt cannot be
used in conjunction with OWL. You can call Windows API functions directly,
however.


<<<>>>
QNA-4/8/91
Turbo Pascal Windows
1.0
PChars in TPW.
What is a PChar type?

[[[]]]

  PChar is a special pointer type that has been added to the Pascal
Windows language definition.  A PChar is a pointer to an array of
characters with a maximum size of 64K and terminated by a null character
(#0).  This is a C string, and comes with all the memory management hassles
and pointer arithmetic advantages of C. The PChars and arrays of char are
type compatible, and a Strings unit is devoted to C-string manipulation
functions (all start with "STR").  When passing a string literal to a
procedure, the compiler will figure out whether the string literal
should be stored in c-string format or in pascal string format, or both.


<<<>>>
QNA-4/8/91
Turbo Pascal for Windows
1.0
TDW popping in dual mode in TPW.
How to make TDW come up in dual mode from within TPW.

[[[]]]
Question:
 I want to make TDW come up in dual mode from within the TPW.
Answer:
  Add the following lines to the tpw.ini file:

  [Debugger]
  Exepath=<pathname>
  Switches=<command-line options>

  where <pathname> is the path to the TDW.EXE and <command-line options>
  are the options you normally want to use with TDW, this will do it.  The
  command-line option for the dual display is -do.


<<<>>>
QNA-4/8/91
Turbo Pascal for Windows
1.0
Changing Button Text
Use SetCaption method in OWL or SendMessage API to change button text.

[[[]]]
Question:
How do you change the text on a button?

Answer:
To change the text on a button, send a WM_SETTEXT message with the string for
the lParam.  For example:

  SendMessage(btnWindow, WM_SETTEXT, 0, 'New Button Title');

Or if you are using OWL, call the SetCaption method of TButton.


<<<>>>
QNA-4/8/91
Turbo Pascal for Windows
1.0
Status line in a MDI Application.
How can I have a status line in an MDI Application?

[[[]]]

To have a status line in an MDI application, override the windows MDI
WMSize method like this:

  TGDIDemoWindow.WMSize(var Message: TMessage);
  begin
    TMDIWindow.WMSize(Message);
    {Calculate the new size of the client area}
    MoveWindow(ClientWnd^.HWindow, size of the new client area)
  end;

This will keep the client window from obscuring your status line or other
controls you might like to have in your window.


<<<>>>
QNA-4/8/91
Turbo Pascal for Windows
1.0
TPW  1.0 Hot Sheet.
Feature set of TPW 1.0.

[[[]]]
Turbo Pascal for Windows 1.0 Hot Sheet.

Feature Highlights
----------------------
NEW! state-of-the-art Windows integrated development environment
(IDE).

        Runs under Windows
        Multiple editor windows
        Full Mouse Support
        Supports TP6 type hot keys
        Multi-file editor that can edit files up to 1MB
        complete save and restore of desktop

NEW! ObjectWindow library - Built in support for Windows, Menus,
Dialogs, Buttons, List boxes, Edit fields, Icons and more.  All
for use in your applications.

NEW! Full access to all Windows API functions and messages.

NEW! Fully Supports creation of DLLs.

NEW! Turbo Debugger for Windows

        Supports Windows messages
        Advanced breakpoints
        Reverse execution
        Automatic DLL debugging
        Object browser and inspectors
        Single and dual monitor support

INCLUDED! Whitewater Resource Toolkit - Visually create Dialogs,
Menus, Icons, Bitmaps and String resources.

INCLUDED! Resource Compiler

INCLUDED! Windows Help Compiler

Full featured inline assembler (BASM)

Private fields and methods in object declarations

Extended syntax directive ($X) that lets you treat functions like
procedures (and ignore function results)

286 code generation

Address references in typed constants

Far and near procedures directives ($F)

Link in initialized data ($L) from object (OBJ) files

Smart linker removes unused objects and code

complete math coprocessor emulation and support -
8087/80287/80387

NEW! Turbo Help hypertext on-line help facilities, including
references to all Windows API finctions and messages.

Turbo Pascal for Windows includes everything you need to create
Windows applications.  It does not require the Microsoft Windows
SDK.

System Requirements
---------------------
IBM PC or PS/2 and all 100% compatibles
Microsoft Windows 3.0 or later
2Mb of memory
EGA, Hercules or VGA graphics
Mouse or other pointing device
Hard Disk (Requires 6.5 Meg for full product)

Benchmarks
-----------
Machine                                Lines/Min
Compaq DeskPro 386/33        84,000

Documentation
----------------
1. User's Guide
2. Programmer's Guide
3. Windows Reference Guide
4. Windows Programming Guide
5. Whitwater Resource Toolkit Users Guide
6. Turbo Debugger for Windows Users Guide
7. Help Compiler Reference Guide

Pricing Information
-------------------------
Turbo Pascal for Windows   $249.95


Special Offer Information
---------------------------
Registered user of ANY BORLAND LANGUAGE PRODUCT $99.95 ***


***Turbo Pascal for Windows is exclusively for Windows
Development and does not replace Turbo Pascal version 6.0.  TP6
is the current product for standard DOS development.  The offer
is not an upgrade it is a limited special offer to our current
Turbo Pascal Customers.

<<<>>>
QNA-4/8/91
Turbo Pascal for Windows
1.0
The $G+ directive, 286 code generation, and Real Mode.
How can I detect if Windows is in Real mode?

[[[]]]
Question:

If I use the $G+ 286 code generation directive, how can I be sure that
Windows is running in Real mode?

Answer:
  The 286 code generation option allows the compiler to substitute more
efficient 286 instructions in place of normal 8088 instructions for things
like loops, jumps and memory operations.  If you compile your program with
$G+, then you should call GetWinFlags early in the startup of your
application - such as in your Application.Init.  Check for the wf_PtMode
flag set.  If it's not set, then you're not running in protected mode, and
you should display a message box and exit your program.  Setting the
Application's status variable to a non-zero value should also work, although
that would cause more code to be executed, implying greater risk of hitting a
286 instruction.

  All the precompiled units in TPW will run in real mode and are not
affected by the $G+ directive.  The $G+ directive only affects code that you
compile yourself.

<<<>>>
QNA-4/8/91
Turbo Pascal for Windows
1.0
Using the 80X87 emulator in TPW.
Do I need a coprocessor to run TPW?

[[[]]]
Question:
 Must TPW a the math coprocessor?

Answer:
  Windows implements its own 80x87 instruction emulator as a DLL that is
loaded when an 80x87 instruction is detected.  The reason that the '87 code
generation is an option is speed:  emulators are always slower than the
real hardware, and slower than using the 6 byte reals.  If you need double,
or  extended reals, or Comp integers, then you must turn on '87
code generation, and Windows will adjust itself to compensate if there
is no '87 hardware when the program is running.  You do not need a
coprocessor to compile or run the program.

<<<>>>

TN-4/8/91
Turbo Pascal for Windows
1.0
TPW "Can't find Debugger" error message
"Can't find Debugger" error message can be caused by not enough memory
available.
[[[]]]
With Turbo Pascal for Windows you can get the Can't Find Debugger error
message when there is not enough memory to load the debugger.  There
must be at lease 250K free in order to load the debugger.

If you have checked that TDW is in the path etc., and this error is still
displayed,  check the memory free...


<<<>>>
TN-4/8/91
Turbo Pascal for Windows
1.0
TPW Strings literals in the Data Segment
TPW String literals are stored in the Data Segment.

[[[]]]
Unlike the DOS version of Pascal, String Literals are stored in the data
segment along with all global variables etc.  If customer is running out
of data segment space, suggest using pointers to strings instead of
string literals.


<<<>>>

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