home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 2
/
ctrom_ii_b.zip
/
ctrom_ii_b
/
PROGRAM
/
PASCAL
/
TPBOOK
/
TPR8.TXT
< prev
next >
Wrap
Text File
|
1992-10-19
|
72KB
|
1,854 lines
Chapter 8
of the
Turbo Pascal Reference
The Turbo Vision Reference
(continued)
This chapter is part of the Turbo Pascal Reference electronic freeware book (C)
Copyright 1992 by Ed Mitchell. This freeware book contains supplementary
material to Borland Pascal Developer's Guide, published by Que Corporation,
1992. However, Que Corporation has no affiliation with nor responsibility for
the content of this free book. Please see Chapter 1 of the Turbo Pascal
Reference for important information about your right to distribute and use this
material freely. If you find this material of use, I would appreciate your
purchase of one my books, such as the Borland Pascal Developer's Guide or
Secrets of the Borland C++ Masters, Sams Books, 1992. Thank you.
For additional information on using Turbo Vision, including a detailed
tutorial, please see Chapters 11 through 16 of the Borland Pascal Developer's
Guide.
RepeatDelay variable
------------------------------------------------------------
Declaration: RepeatDelay: Word = 8;
Unit: Drivers
Purpose:
Determines the number of clock ticks that must occur before generating an
evMouseAuto event. evMouseAuto events are automatically generated while
the mouse button is held down. A clock tick is 1/18.2 seconds, so the
default value of 8/18.2 is set at approximately 1/2 second.
See: evXXXX constants, DoubleDelay
SaveCtrlBreak variable
------------------------------------------------------------
Declaration: SaveCtrlBreak: Boolean = False;
Unit: Drivers
Purpose:
This internal variable is set to the state of the DOS Ctrl-break checking
at program initialization; at program termination, DOS's Ctrl-break
trapping is restored to the value saved in SaveCtrlBreak.
See: InitSysError, DoneSysError
sbXXXX constants
------------------------------------------------------------
Scrollbar constants
Constant Value Usage
sbLeftArrow 0 The horizontal scroll bar's left arrow.
sbRightArrow 1 Horizontal scroll bar's right arrow.
sbPageLeft 2 The page area to the left of the position
indicator.
sbPageRight 3 The page indicator to the right of the
indicator.
sbUpArrow 4 Vertical scroll bar's up arrow.
sbDownArrow 5 Vertical scroll bar's down arrow.
sbPageUp 6 Paging area above the position indicator.
sbPageDown 7 Paging area below the position indicator.
sbIndicator 8 Position indicator on the scroll bar.
sbHorizontal $0000 The scroll bar is horizontal.
sbVertical $0001 The scroll bar is vertical.
sbHandleKeyboard $0002 Scroll bar accepts keyboard commands.
Use one of the first 9 sbXXXX constants as a parameter to
TScrollBar.ScrollStep. The last 3 sbXXXX constants, sbHorizontal, sbVertical,
sbHandleKeyboard are used to specify a horizontal, vertical, or keyboard
accessable scrollbar when a scroll bar is created using the
TWindow.StandardScrollBar function.
See: TScrollBar.ScrollStep, TScrollBar, TWindow.StandardScrollBar
ScreenBuffer variable
------------------------------------------------------------
Declaration: ScreenBuffer: Pointer;
Unit: Drivers
Purpose:
This internal pointer is initialized by InitVideo and keeps track of the
location of the video screen buffer.
ScreenHeight variable
------------------------------------------------------------
Declaration: ScreenHeight : Byte;
Unit: Drivers
Purpose:
Holds the current height of the screen, in lines. For example, 25, 43 or
50 would be typical values.
See: SetVideoMode
ScreenMode variable
------------------------------------------------------------
Declaration: ScreenMode : Word;
Unit: Drivers
Purpose:
Contains the current video mode as determined by the smXXXX constants
passed to the SetVideoMode procedure.
See: SetVideoMode, smXXXX constants
ScreenWidth variable
------------------------------------------------------------
Declaration: ScreenWidth : Byte;
Unit: Drivers
Holds the current width of the screen in number of characters per line
(for example, 80).
SetMemTop procedure
------------------------------------------------------------
Declaration:
procedure SetMemTop(MemTop : Pointer);
Unit: Memory
Purpose:
SetMemTop sets the top of the memory block allocated to an application.
Initially, MemTop is set to the top of the heap, stored in HeapEnd. By
resetting the top of memory to the HeapPtr, all the remaining free memory
is available for other uses. This is especially useful when shelling out
to another application, as shown in this example code from TVSHELL8.PAS
(see Chapters 11-12 in Borland Pascal Developer's Guide):
procedure TShell.RunProgram ( ProgName, ParamStr : String );
{ Launches the program in 'ProgName' with the command line
parameters in 'ParamStr' }
begin
ClrScr;
DoneSysError;
DoneEvents;
DoneVideo;
DoneMemory;
SetMemTop(HeapPtr);
SwapVectors;
Exec( ProgName, ParamStr );
SwapVectors;
SetMemTop(HeapEnd);
InitMemory;
InitVideo;
InitEvents;
InitSysError;
Shell.ReDraw;
end; { RunProgram }
SelectMode type
------------------------------------------------------------
Declaration:
SelectMode = (NormalSelect, EnterSelect, LeaveSelect);
Unit: Views
Purpose:
An internal value used by Turbo Vision.
SetVideoMode procedure
------------------------------------------------------------
Declaration:
procedure SetVideoMode( Mode: Word );
Unit: Drivers
Purpose:
Use this (or more commonly TProgram.SetScreenMode) to select 25 or 43/50
line screen height, in conjunction with selecting the color, black & white or
monochrome palettes. To change to the color palette, write,
SetVideoMode( smCO80 );
where smCO80 is one of the smXXXX screen mode constants. Optionally, to select
43/50 line mode, add the smFont8x8 constant to the color selection constant.
For example,
SetVideoMode( smMono + smFont8x8 );
Normally, you should use TProgram.SetScreenMode, which has the same parameter
value, to change the screen color or screen size. SetScreenMode properly
handles resetting of the application palettes, repositioning the mouse pointer
and so on.
See: TProgram.SetScreenMode, smXXXX constants
sfXXXX constants
------------------------------------------------------------
State Flag constants
Use TView.SetState to set the state bits, from the table below, into a
TView's State field. Example usage:
SetState( sfCursorIns, True );
where the first parameter is the state value to change, and the second
parameter is True to enable the selected condition, or False to disable the
selected condition. Some of the bits are not normally set by the programmer
but rather by methods in Turbo Vision. You can, however, read and test the
values in TView.State directly.
Constant Value Usage
sfVisible $0001
Set when the view is visible in front of its owner (for
example, a button on a dialog) but note that a visible
view's owner may itself be hidden from view. Call
TView.Exposed to determine if a view is actually visible on
the screen, and use TView.Hide to clear this bit and hide
the view, and TView.Show to set this bit and make the view
visible.
sfCursorVis $0002
Set when the view's cursor is visible. Use
TView.ShowCursor to make the cursor visible and set this
bit, or TView.HideCursor to hide the cursor and clear this
bit.
sfCursorIns $0004
Set when the cursor is a solid block (the "insert" cursor),
clear when the cursor is an underscore (the "overstrike"
cursor). Call TView.BlockCursor to set this bit, and
TView.NormalCursor to clear the bit.
sfShadow $0008
Set when the view has a shadow.
sfActive $0010
Set whenever the view is an active window or a subview
within an active window. For example, when using the IDE
to edit multiple files, only the editor that you are
currently using is the active window.
sfSelected $0020
Set when this view is selected. (See TView.Selected).
sfFocused $0040
If the view is part of the focus chain (see Chapter 13,
"More Turbo Vision Features" in the Borland Pascal
Developer's Guide), then this bit is set.
sfDragging $0080
Set whenever the view is being dragged.
sfDisabled $0100
Set if the view has been disabled and is no longer
processing events.
sfModal $0200
Whenever a view is displayed using the ExecView call, that
view becomes a modal view (as compared to a view that has
been inserted into the desktop). This bit is set when the
view is the modal view and controls how events are sent
through the view hierarchy.
sfExposed $0800
Set when a view is possibly visible on the screen. Don't
check this flag directly because a visible view can still
be hidden due to clipping. Instead, call TView.Exposed to
determine if the view is actually visible.
See: TView.BlockCursor, TView.Exposed, TView.Hide, TView.HideCursor,
TView.NormalCursor, TView.SetState, TView.Show, TView.ShowCursor,
ShadowAttr variable
------------------------------------------------------------
Declaration:
ShadowAttr: Byte = $08;
Unit: Views
Purpose:
The ShadowAttr byte contains the video attribute for the color of the
shadow display on some views and windows. See Chapter 13, "More Turbo
Vision Features" in the Borland Pascal Developer's Guide for details on
selecting different colors for video attribute bytes
See: ShadowSize
ShadowSize variable
------------------------------------------------------------
Declaration:
ShadowSize: TPoint = (X: 2; Y: 1);
Unit: Views
Purpose:
ShadowSize determines the size of the shadow area on those views that
contain a shadow. The default value is 2 characters wide and 1 character
high.
See: ShadowAttr
ShowMarkers variable
------------------------------------------------------------
Declaration:
ShowMarkers: Boolean;
Unit: Drivers
Purpose:
When using color displays, Turbo Vision uses different colors to highlight
the default button selections, the location of the list box cursor and so on.
When using the monochrome color palette, Turbo Vision adds small marker
characters to various controls to make them easier to identify and when
necessary to highlight a default selection. For example, default buttons have
small right and left arrows to highlight the default button:
-> [ Okay ] <- [Cancel]
When the monochrome color palette is selected, ShowMarkers is set to True and
is normally set False for the other color palettes. If you wish, you can set
ShowMarkers True for both CColor and CBlackWhite palettes.
ShowMouse procedure
------------------------------------------------------------
Declaration:
procedure ShowMouse
Unit: Drivers
Purpose:
ShowMouse is the opposite of the HideMouse. Call HideMouse to hide the
mouse cursor and simultaneously increment a "mouse hidden counter".
ShowMouse decrements the counter, and when it reaches zero, makes the
mouse cursor visible again on the screen.
See: HideMouse
smXXXX constants
------------------------------------------------------------
Screen Mode Constants
Use the constants from the table below when selecting Black & White, Color or
Monochrome color palettes, or switching between 25 and 43- or 50 line display
modes. Use of these constants is described in "The Set Up Program Dialog" in
Chapter 12, and also in Chapter 13 of the Borland Pascal Developer's Guide.
Constant Value Usage
smBW80 $0002 Black and white/gray scale
smCO80 $0003 Color mode
smMono $0004 Monochrome mode
smFont8x8 $0100 43 or 50 line modes
See: SetVideoMode, ScreenMode, TProgram.SetScreenMode
SpecialChars variable
------------------------------------------------------------
Declaration:
SpecialChars: array [0..5] of Char =
(#175, #174, #26, #27, ' ', ' ')
Unit: Views
Purpose:
These constants define the special marker characters used when the
ShowMarkers variable is set to True.
See: ShowMarkers
stXXXX constants
------------------------------------------------------------
Stream constants
These constants are used when opening a stream file, to specify the access
mode, and by the streams system to return error condition codes. For
additional information, see Chapter 21, Streams.
Stream access modes passed to the TStream.Init constructor
Constant Value Usage
stCreate $3C00 Create and open the file
stOpenRead $3D00 Open an existing file as a read-only file
stOpenWrite $3D01 Open an existing file as write-only.
stOpen $3D02 Open an existing file with read/write access
Stream error codes set in TStream.Status
Constant Value Usage
stOk 0 No error
stError -1 Access error occurred
stInitError -2 Unable to initialize the stream
stReadError -3 An attempt was made to read past the end of
the file
stWriteError -4 For some reason (perhaps out of disk space)
the stream could not be expanded.
stGetError -5 An unregistered object type was found in the
file by the Get method.
stPutError -6 Put tried to write an unregistered object
type to the stream
StartupMode variable
------------------------------------------------------------
Declaration:
StartupMode : Word;
Unit: Drivers
Purpose:
This internal variable stores the existing screen mode before Turbo Vision
switches to a new screen mode.
See: DoneVideo, ScreenMode
StatusLine variable
------------------------------------------------------------
Declaration:
StatusLine: PStatusLine = nil;
Unit: App
Purpose:
StatusLine is initialized by the call to TProgram.InitStatusLine. See
Chapter 14, Turbo Vision Tutorial for a detailed description of
initialization a program's status line.
StreamError variable
------------------------------------------------------------
Declaration:
StreamError: Pointer = nil;
Unit: Objects
Purpose:
To override all stream error handling, set StreamError to point to a far
procedure that you have defined. Thereafter, whenever any error occurs, on any
stream that is in use, your procedure will receive control. This enables you
to write a single procedure to intercept and process all stream error
conditions. Alternately, you can override TStream.Error to intercept error
conditions for individual streams.
Example usage:
procedure HandleStreamErr( var S : TStream); far;
...
StreamError := @HandleStreamErr;
SysColorAttr variable
------------------------------------------------------------
Declaration:
SysColorAttr: Word = $4E4F;
Unit: Drivers
Purpose:
On color displays, SysColorAttr specifies the attribute bytes for system
error messages. (SysMonoAttr specifies the attribute bytes for monochrome
). System error messages are DOS crtical errors (such as floppy disk drive
not accessible) and other device type errors. System errors are displayed
on the status line in the color specified by the second part of
SysColorAttr, $4F, white on red text. The first part, $4E, is used for
highlighting command keys, such as Enter or Esc.
See: SystemError, SysMonoAttr, Chapter 13, "More Turbo Vision Features".
SysErrActive variable
------------------------------------------------------------
Declaration:
SysErrActive : Boolean = False;
Unit: Drivers
Purpose:
If True, then the system error handler is available for use.
SysErrorFunc variable
------------------------------------------------------------
Declaration:
SysErrorFunc : TSysErrorFunc = SystemError;
Unit: Drivers
Purpose:
SysErrorFunc points to the system error handling procedure. You can
override system error handling by writing your own procedure and assigning it
to the SysErrorFunc variable. The default system error handler is defined as,
function SystemError
(ErrorCode: Integer; Drive: Byte): Integer;
where ErrorCode is a value from the table below, and Drive is the drive number
(A=1, B=1, C=3, and so on). SystemError should return 0 if the user requests
to retry the operation or 1 if the user elected to abort the function.
Table of System Error Codes
Error code Usage
0 Disk is write protected
1 Critical disk error
2 Disk is not ready
3 Critical disk error
4 Data integrity error
5 Critical disk error
6 Seek error
7 Unknown media type
8 Sector not found
9 Printer out of paper
10 Write fault
11 Read fault
12 Hardware failure
13 Bad memory image of file allocation table
14 Device access error
15 Drive swap notification (floppy disks have changed)
See: SysColorAttr, SysErrActive, SysErrorFunc, SysMonoAttr, SystemError,
TSysErrorFunc, InitSysError
SysMonoAttr variable
------------------------------------------------------------
Declaration:
SysMonoAttr: Word = $7070;
Unit: Drivers
Purpose:
On monochrome displays, SysMonoAttr specifies the attribute bytes for
system error messages. (SysColorAttr specifies the attribute bytes for
color). System error messages are DOS crtical errors (such as floppy disk
drive not accessible) and other device type errors. See SysColorAttr for
more information about the attribute values.
See: SystemError, SysColorAttr, Chapter 13, "More Turbo Vision Features"
in Borland Pascal Developer's Guide.
SystemError function
------------------------------------------------------------
Declaration: function SystemError( ErrorCode: Integer; Drive:Byte):
Integer;
Unit: Drivers
Purpose:
This function handles system errors (such as DOS critical errors). See
SysErrorFunc for details on the parameters and their values. SystemError
returns 0 if the user requests that the operation be retried, and 1 if the
user elects to cancel the operation.
See: SysErrorFunc
TApplication object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TView
TGroup
TProgram
TApplication
Discussion
The TApplication object is the generic application from which most of the
Turbo Vision programs you write will be derived. For examples, see the
TVSHELL sample programs of Chapters 11-12 in the Borland Pascal
Developer's Guide. As shown in Listing 11.1 (of the Developer's Guide),
TShell is defined as an instance of TApplicatio. TApplication is nearly
identical to TProgram; the only difference is in the Init and Done
destructors.
Commonly Used Features
Generally, the only methods used are TApplication.Init, TApplication.Done,
and TApplication.Run, which is inherited from TProgram.Run. See also
TProgram for other methods that are available to TApplication objects.
Example
type
TShell = object(TApplication)
DirWindow : PDirectoryWindow;
procedure InitMenuBar; virtual;
procedure InitStatusLine; virtual;
constructor Init;
end; { TShell }
var
Shell : TShell; { Create an instance of the TShell object }
procedure TShell.InitMenuBar;
{ Purpose:
Defines the pulldown menus used in Shell
}
var
Bounds: TRect;
begin
TShell.GetExtent(Bounds);
Bounds.B.Y := Bounds.A.Y + 1;
MenuBar := New(PMenuBar, Init(Bounds, NewMenu(
NewSubMenu('~R~un', hcNoContext, NewMenu(
NewItem('~R~un', '', 0, cmRunProgram, hcNoContext,
...
end;
procedure TShell.InitStatusLine;
{ Purpose:
Defines the Status Line shown on the bottom line of the screen
within TShell
}
var
Bounds: TRect;
begin
GetExtent(Bounds);
Bounds.A.Y := Bounds.B.Y - 1;
StatusLine := New(PStatusLine, Init(Bounds,
NewStatusDef(0, $FFFF,
NewStatusKey('', kbF10, cmMenu,
NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit,
NewStatusKey('~F2~ Copy', kbF2, cmCopy,
NewStatusKey('~F3~ Close', kbF3, cmClose,
nil)))),
nil)
));
end; { TShell.InitStatusLine }
constructor TShell.Init;
var
Bounds : TRect;
begin
TApplication.Init;
end; { TShell.Init }
begin
Shell.Init;
Shell.Run;
Shell.Done;
end.
Fields
none
Methods
destructor Done; virtual;
Calls TProgram.Done, DoneHistory, DoneSysError, DoneEvents, DoneVideo, and
DoneMemory.
constructor Init;
Calls InitMemory, InitVideo, InitEvents, InitSysError, InitHistory and
TProgram.Init.
TBackground object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TView
TBackground
Discussion
TBackground contains the background pattern that forms the backdrop of
most Turbo Vision applications. TBackground is automatically initialized
by the TDeskTop object that owns all of the application views.
Commonly Used Features
Normally, you will have no need to directly use the TBackground object.
However, if you wish to create a different background object, you will
need to override TProgram.InitDeskTop, to instantiate a new TDeskTop with
an overridden TDeskTop.NewBackground function. NewBackground, in turn,
creates the new TBackground object by calling TBackground.Init to specify
a new background pattern.
Example:
1 { DEMOTBAC.PAS }
2 program DemoTBackground;
3
4 uses
5 Objects, App, Views;
6
7 type
8 TSampleProgram = object(TApplication)
9 procedure InitDeskTop; virtual;
10 end;
11
12 PNewDeskTop = ^TNewDeskTop;
13 TNewDeskTop = object(TDeskTop)
14 procedure InitBackground; virtual;
15 end;
16
17 var
18 SampleProgram : TSampleProgram;
19
20
21 procedure TNewDeskTop.InitBackground;
22 Var
23 Bounds: TRect;
24 Temp : PBackground;
25 begin
26 { Program never gets here ???? }
27 Bounds.Assign( 0, 1, 80, 24 );
28 Temp := New( PBackground, Init( Bounds, Char($FF) ) );
29 Insert(Temp);
30 Background := Temp;
31 end;
32
33
34 procedure TSampleProgram.InitDeskTop;
35 Var
36 Bounds: TRect;
37 begin
38 Bounds.Assign( 1, 0, 80, 24 );
39 DeskTop := New( PNewDeskTop, Init( Bounds ) );
40 end;
41
42
43 begin
44 with SampleProgram do
45 begin
46 Init;
47 Run;
48 Done;
49 end;
50 end.
51
Fields
Pattern: Char;
Contains the bit pattern describing the background's appearance. This
value is initialized by TDeskTop.InitBackground calling TBackground.Init.
Methods
procedure Draw; virtual;
Using the palette returned by GetPalette, draws the background using the
specified Pattern. You can override this method to create a new type of
background, say perhaps one containing text or boxes or what ever you
desire. To do that, derive a new TDeskTop object and a new TBackground
object, using the method outline in the sample Listing above, and override
TBackground.Draw to display the background in the format that your
require.
function GetPalette: PPalette; virtual;
Returns a pointer to the CBackground color palette. To change the color
scheme, you need to override this method (see TBackground.Draw, above).
constructor Init(var Bounds: TRect; APattern: Char);
Call TBackground.Init via TDeskTop.InitBackground, to create a new
background object of the size specified by Bounds, and having the
replicated bit pattern indicated by APattern. See:
TDeskTop.InitBackground
constructor Load(var S: TStream);
Creates a new TBackground object and reads its attributes from stream S
by calling TView.Load, and then S.Read(Pattern).
procedure Store(var S :TStream);
Writes the TBackground object to stream S, by calling TView.Store, and
then S.Write(Pattern).
TBufStream object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TStream
TDosStream
TBufStream
Discussion
The TBufStream object type is a derivative of TStream and TDosStream and
is probably the type you will most often use for writing and reading
streams to and from disk files. TBufStream implements a buffered version
of TDosStream, which greatly improves the speed and efficiency of stream
I/O, particularly when writing or reading a lot of small objects. See
Chapter 15, "Streams" in the Borland Pascal Developer's Guide for a
tutorial on the use of stream I/O.
See: TDosStream, TStream, stXXXX constants
Commonly Used Features
Generally, you will use the TBufStream.Init method to open a stream file
for access, the TBufStream.Read and TBufStream.Write methods for
performing input and output, and TBufStream.Done to close and dispose of
the object. For random access streams, you will use TBufStream.Seek to
position the file pointer to the proper object reocrd. You may also wish
to use TBufStream.Flush or TBufStream.Truncate, as appropriate.
Example
1 { DEMOTBUF.PAS }
2 var
3 PhoneBook : PCollection;
4 PhoneBookFile : TBufStream;
5
6 ...
7
8
9 { TPersonInfo is a collection object holding name and
address information }
10 procedure TPersonInfo.Store ( var S : TStream );
11 begin
12
13 S.Write( Name, SizeOf( Name ));
14 S.Write( Address, SizeOf( Address ));
15 S.Write( City, SizeOf( City ));
16 S.Write( State, SizeOf( State ));
17 S.Write( Zip, SizeOf( Zip ));
18 S.Write( Age, SizeOf( Age ));
19
20 end;
21
22
23 constructor TPersonInfo.Load ( var S : TStream );
24 begin
25
26 S.Read( Name, SizeOf( Name ));
27 S.Read( Address, SizeOf( Address ));
28 S.Read( City, SizeOf( City ));
29 S.Read( State, SizeOf( State ));
30 S.Read( Zip, SizeOf( Zip ));
31 S.Read( Age, SizeOf( Age ));
32
33 end;
34
35 ...
36
37 { Register the PersonInfo object type }
38 RegisterType( RPersonInfo );
39
40 { Open the stream file }
41 PhoneBookFile.Init('FONEBOOK.DAT', stCreate, 1024 );
42
43 { Tell the PhoneBook collection to put itself to the stream }
44 PhoneBookFile.Put( PhoneBook );
45
46 { Close the file }
47 PhoneBookFile.Done;
Fields
BufEnd: Word; { Read only }
BufEnd is an index to the last used byte in Buffer.
Buffer: Pointer; { Read only }
Points to the beginning of the stream's buffer.
BufPtr: Word; { Read only }
Points to the current location in Buffer.
BufSize: Word; { Read only }
Contains the size of the buffer, in bytes.
Methods
destructor Done; virtual;
Flushes the buffer to disk, closes the file and disposes of the stream
object.
procedure Flush; virtual;
Override: Never
Forces the buffer contents to be written out to disk.
function GetPos: Longnt; virtual;
Override: Never
Gives the stream's current position relative to the start of the sream.
Important: This is not the same as BufPtr which is the current position
relative to the start of the current buffer only. GetPos corresponds to
the action of Seek, below, which positions the stream's current location
to a byte location in the stream file.
function GetSize: Longint; virtual;
Override: Never
Writes the contents of the buffer out to disk (via Flush) and returns the
total number of bytes in the stream.
constructor Init( Filename: FNameStr; Mode, Size : Word);
Use Init to create and initialize a stream, using the parameters Filename
to contain the name of the file open, setting the Mode parameter to
stCreate, stOpenRead, stOpenWrite or stOpen, and Size to the number of
bytes to allocate for a buffer area.
procedure Read( var Buf; Count: Word); virtual;
Override: Never
Use Read to read Count bytes from the stream and into the Buf parameter.
Read begins at the stream's current position (as determined by Seek or
beginning at the end of the previous Read operation).
See: Chapter 15, "Streams" in the Borland Pascal Developer's Guide, Seek,
Write
procedure Seek(Pos : Longint); virtual;
Override: Never
Empties the contents of the Buffer to disk and then positions the current
stream position to Pos. You can use Seek to implement random access to
stream files (see Chapter 15, "Streams"). Be certain that if you are
adding or multiplying values to compute the Pos parameter (for example,
SizeOf(SomeObject) * Index), that you convert the parameters to Longint to
avoid integer overflow errors.
See: Chapter 15, "Streams" in the Borland Pascal Developer's Guide,
GetPos, Read, Write
procedure Truncate; virtual;
Use Truncate to flush out the Buffer, and delete all data following the
current position in the stream.
procedure Write( var Buf; Count: Word); virtual;
Use Write to copy Count bytes from the Buf parameter to the stream.
See: Chapter 15, "Streams" in the Borland Pascal Developer's Guide, Read
TButton object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TView
TButton
Discussion
Use the TButton object to place button controls into dialog boxes. Each
time that a button is "pressed" by clicking on it with the mouse, or using
a keyboard shortcut key or tabbing to the button and pressing SpaceBar or
Enter, the button generates a cmXXXX command.
Commonly Used Features
Generally, you need only Init a TButton object and insert it in to the
owning TGroup, which is typically a TDialog. You rarely need to override
any of its methods or reference its fields.
Example
with Dialog^ do
begin
{ Create the Okay and Cancel buttons }
Bounds.Assign (7, 10, 16, 12 );
Insert( New( PButton, Init( Bounds, '~O~kay', cmOk,
bfDefault )));
Bounds.Assign ( 24, 10, 33, 12 );
Insert( New( PButton, Init( Bounds, '~C~ancel', cmCancel,
bfNormal )));
...
end; { with Dialog }
Control := DeskTop^.ExecView( Dialog );
Fields
AmDefault: Boolean; { Read only }
When True, this button is the default button, and when False, this is a
normal button.
Command : Word; { Read only }
Holds the command code value that is generated when the button is pressed.
Flags : Byte; { Read only }
The flags byte is a bit mapped field indicating if the label text is left
justified or center, and if the button is the default button in the group,
or is a normal, non-default button. See: bfXXXX constants
Title : PString; { Read only }
Points the string containing the button's label text.
Methods
destructor Done; virtual;
Disposes the memory allocated to Title and calls TView.Done.
procedure Draw; virtual;
Override: If needed.
Draws the button using the palette returned by GetPalette, and by
referencing the Flags, AmDefault and TView.State fields to display the
button as a normal button, default button or disabled button, with left
justified or centered title.
function GetPalette: PPalette; virtual;
Override: If needed.
Returns a pointer to the CButton color palette, but can be overridden to
provide other color choices. CButton entries are intended to map into the
CDialog palette. If, for some reason the TButton is not inserted into a
TDialog group, you will almost certainly have to override this function.
procedure HandleEvent(var Event: TEvent); virtual;
Override: If needed.
Processes events received by the button. These include mouse clicks,
keyboard short cut keys, Enter, SpaceBar, and several internal commands
used to process evBroadcast messages notifying buttons when the default
button changes.
constructor Init(var Bounds: TRect; ATitle: TTitleStr; ACommand: Word; AFlags:
Byte);
Init is the only method that you are likely to use for the TButton object.
Use Init to create a button with a size and location specified in Bounds,
and a button label specified by ATtitle. Pass the cmXXXX command constant
to ACommand, to be returned if the button is pressed. For the AFlags
parameter, you can pass one of the bfXXXX constants to initialize this
button as the bfDefault or bfNormal button, and can optionally or one of
the contstants with bfLeftJustify left justify the button label instead of
using the centering default.
constructor Load(var S: TStream);
Creates a new instance of a TButton object and reads its definition from
stream S. Use the TButton.Load method, in conjunction with Store, for
reading dialog boxes directly from resource files. This topic is covered
in detail in chapter 16, "Resources" in the Borland Pascal Developer's
Guide.
See: TButton.Store
procedure MakeDefault(Enable : Boolean);
Call a button's MakeDefault method to force the button to become the
default button, by setting Enable to True. If Enable is False, the
default status of this button is removed. Normally, this is handled
internally to the TDialog object that owns the button.
procedure SetState( AState: Word; Enable: Boolean); virtual;
If needed, call this method to change the TView.State field inherited from
TView. If the button becomes sfSelected or sfActive, SetState
automatically handles making the button the default or non-default, as
needed.
procedure Store( var S : TStream);
Writes this button object out to stream S. Use in conjunction with Load
for the creation and reading of resource files. See: TButton.Load
TByteArray type
------------------------------------------------------------
Declaration: TByteArray = array[0..32767] of Byte;
Unit: Objects
Purpose:
TByteArray is generic array of bytes useful for typecasting.
TCheckBoxes object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TView
TCluster
TRadioButtons
TCheckBoxes
Discussion
Use TCheckBoxes to implement groups of check box controls in dialogs.
Eachgroup can have up to 16 check boxes, any number of which may be
"checked" at the same time. See Chapter 11, "Turbo Vision Tutorial" in
the Borland Pascal Developer's Guide contains a tutorial on the creation
and use of the TCheckBoxes object.
Commonly Used Features
Normally, you create groups of checkboxes using the inherited Init method.
Rarely will you have a need to use or override the other methods.
See: TCluster, TRadioButtons
Fields
None
Methods
procedure Draw; virtual;
Draws the checkboxes by calling TCluster.DrawBox and sets each checkbox
indicator to "[ ]" if the item is not checked, and to "[ X ]" if the item
is checked. See TCluster.DrawBox for instructions on using that method to
draw the indicators. You only need to override this method if you plan to
use a different type of indicator for checkboxes.
function Mark( Item: Integer ) : Boolean; virtual;
The items in the check box cluster are numbered from 0 up to a maximum of
15 items. By passing the item number corresponding to a specific check
box, you can test to see if the Item'th check box has been set to
"[ X ]".
See: TCheckBox.Press
procedure Press( Item : Integer ); virtual;
Press sets or clears a check box item. Like Mark, the parameter Item
specifies which of the check boxes, from 0 up to a maximum of 15 to set or
clear. Press toggles the check box: if the checked box is already
checked, then Press clears it and vice versa.
See: TCheckBox.Mark
TCluster object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TView
TCluster
TRadioButtons
TCheckBoxes
Discussion
The TCluster objects are used to creat groups of dialog box controls.
Both TRadioButtons and TCheckBoxes inherit almost all of their
functionality from TCluster due to their strong similarities.
Commonly Used Features
Generally, you will use either TRadioButtons or TCheckBoxes and directly
insert those controls into dialogs. While TCluster provides several
fields and methods, these are primarily of interest if you are building a
new cluster-type control.
Fields
Sel: Integer; { Read only }
Sel indicates which of the buttons or check boxes is currently the active
one.
Strings : TStringCollection; { Read only }
Strings is a collection containing the text of all the items in the
control group.
Value: Word; { Read only }
Value holds the current setting of the control. For TCheckBoxes, Value is
a bit pattern where each bit indicates the state of a checked box, and for
TRadioButtons, Value is the item number of the button that is pressed.
Methods
destructor Done; virtual;
Disposes of the Strings collection and calls TView.Done.
function DataSize: Word; virtual;
This function is used in conjunction with GetData and SetData, to obtain
the SizeOf(Value).
procedure DrawBox(Icon: String; Marker: Char);
DrawBox draws the status indicator for each check box or icon and is
called by TCheckBoxes.Draw or TRadioButtons.Draw. The Icon parameter
holds '[ ]' for check boxes, or '( )' for radiobuttons. Marker contains
the character to indicate the item is selected (for example, 'x' for
checkboxes).
procedure GetData(var Rec); virtual;
Used to copy the Value field to Rec when retrieving dialog data.
function GetHelpCtx: Word; virtual;
Returns HelpCtx + Sel, where Sel is the current active item in the
cluster. Using this method you can produce context sensitive help for
individual items in each cluster.
function GetPalette: PPalette; virtual;
Returns a pointer to CCluster color palette. Override this method to
implement a different color sheme for cluster items.
procedure HandleEvent(var Event: TEvent); virtual;
Handles selection of cluster items through the keyboard movement keys and
SpaceBar (to toggle a selection). Other events are passed through to
TView.HandleEvent.
constructor Init( var Bounds: TRect; AStrings: PSItem);
Use Init and nested calls to NewSItem to create an entire list of cluster
items within the area described by Bounds. Normally, TCluster.Init is
called via the derived objects TRadioButtons.Init or TCheckBoxes.Init, as
shown in this example:
Bounds.Assign( 24, 2, 40, 5);
ColorOptions := New( PRadioButtons, Init( Bounds,
NewSItem('~C~olor',
NewSItem('~M~onochrome',
NewSItem('~B~&W',
nil)))
));
Insert( ColorOptions );
Bounds.Assign( 24, 1, 40, 2);
Insert( New( PLabel, Init( Bounds, 'Color schemes',
ColorOptions )));
constructor Load(var S: TStream);
Creates a new TCluster object and loads the appropriate values (TView.Load
and Value and Sel fields) from stream S.
function Mark(Item: Integer): Boolean; virtual;
Mark is always overridden by the object that is derived from TCluster and
is used to obtain the setting of the Item'th control in the cluster. If
the Item'th control is set, as for example, a check box is currently
selected, then Mark should return True. If the control is not currently
set, then Mark should return False.
See: TCheckBoxes.Mark, TRadioButtons.Mark
procedure MovedTo(Item: Integer); virtual;
MovedTo moves the active location within the cluster to the Item'th
control.
procedure Press(Item: Integer); virtual;
Press is always overridden by TCluster descendants to set or clear a check
box item, or to set or clear a specific radio button.
procedure SetData(var Rec); virtual;
SetData copies Value field from Rec and draw's the cluster. SetData is
used in conjunction with GetData to access the dialog data. See Chapter
12, "Turbo Vision List Boxes" in the Borland Pascal Developer's Guide for
an example.
procedure SetState(AState: Word; Enable: Boolean); virtual;
TCluster.SetState passes its parameters to TView.SetState, and if the
view's State is sfSelected , then calls TView.DrawView.
procedure Store(var S: TStream);
Call's TView.Store(S) and then writes the contents of Value and Sel out to
stream S.
See: TCluster.Load, Chapter 15, "Streams" in the Borland Pascal
Developer's Guide.
TCollection object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TCollection
TSortedCollection
TStringCollection
TResourceCollection
Discussion
Collections provide a mechanism for storing and accessing arbitrary
collections of data. You can think of a collection as working like a
dynamically sizeable array of data, that can be enlarged as your data
requirements increase. Several specialized collections are derived from
TCollection, including TSortedCollection, TStringCollection and
TResourceCollection. The latter is used internally to the resource file
mechanism and is not generally used by application programs.
While collections are defined within Turbo Vision, you can also use
collections in standard, non-Turbo Vision applications.
In the description of the methods below, each method using an Index
parameter checks to insure that the Index is in the valid range between 0
and Count (the number of items in the collection). If the Index is out
range, these methods call TCollection.Error which, by default, halts the
program with a run time error. You can trap any collection error by
overriding Error in your derived collection.
See: Chapter 14, "Collections" in the Borland Pascal Developer's Guide
for complete details and a tutorial on the use of the TCollections object
type.
Commonly Used Features
TCollection.Count field, TCollection.Init, TCollection.Init, the access
methods At, AtPut, AtDelete, AtFree, the iterators FirstThat, ForEach and
LastThat, the IndexOf function, and the Load and Store methods.
Example
See Chapter 14, "Collections" in the Borland Pascal Developer's Guide, for
several examples.
Fields
Count: Integer;
Holds the number of items currently stored in the collection.
Delta: Integer;
Because one of the features of collections is that they can grow, Delta
holds the number of elements by which the collection should be enlarged
when the Count reaches the current maximum size specified by Limit. When
this occurs, Limit is increased by Delta and additional space is allocated
for the necessary Item pointers. Generally, Limit should initially be set
to a sufficient size for most operations on the collection, and Delta
should be set large enough so that expansion of the collection occurs
infrequently to avoid the fairly intensive overhead of dynamically
resizing the collection.
See: TCollection.Init, TCollection.Limit, TCollection.Items
Items: PItemList;
Items points to an array that contains pointers to the individual items in
the collection.
Limit: Integer;
Holds the current number of elements allocated to the collection.
See: Delta, TCollection.Init
Methods
function At(Index : Integer): Pointer;
Use At to access the collection as if it were an array. At(Index) returns
a pointer to the Index'th item in the array, where Index ranges from 0 up
to Count.
See: TCollection.IndexOf() as the inverse of At
procedure AtDelete(Index: Integer);
AtDelete deletes the item at the location specified by Index, and slides
all of the following items in the collection over to fill in the now
vacant hole and decrements Count by 1. AtDelete does not dispose of the
actual item that was in the location. Therefore, be sure to save a
pointer to the item first, and then to separately dispose of the specific
item using Dispose( ItemPtr, Done ).
See: TCollection.AtFree , TCollection.Delete, TCollection.Free
procedure AtFree(Index: Integer);]
AtFree works like AtDelete, except that the specific item being deleted is
also disposed of. If you do not need to retain a pointer to the specific
item in the collection for future processing, you will probably want to
use AtFree in place of AtDelete for deleting items from the collection.
See:TCollection.AtDelete, TCollection.Delete, TCollection.Free
procedure AtInsert(Index: Integer; Item: Pointer);
AtInsert puts a new Item into the collection at the Index location by
sliding all of the following items over by one position. If adding the
new element would exceed the size of the collection, TCollection.SetLimit
is called to automatically expand the size.
See: TCollection.At,TCollection.AtPut, TCollection.SetLimit
procedure AtPut(Index: Integer; Item: Pointer);
Use AtPut when you need to replace an existing item with a new item. APut
copies the new Item pointer to the location specified by Index.
procedure Delete(Item: Pointer);
The items in a collection can be accessed via their index location or by
way of the pointer to the item. When you have a pointer to an item and
wish to delete it, you can call Delete(Item) directly. Alternatively, you
can use the IndexOf() function to translate the pointer into an Index
value and then use AtDelete, like this,
AtDelete(IndexOf(Item));
After an item is deleted, Count is decremented by 1.
See: TCollection.AtDelete, TCollection.AtFree, TCollection.Free,
TCollection.IndexOf
procedure DeleteAll;
Sets Count to 0, effectively deleting all items in the collection.
See: TCollection.AtDelete,TCollection. Delete
destructor Done; virtual;
Always call a collection's Done method to dispose of each item and free up
the memory used by the collection.
procedure Error(Code, Info: Integer); virtual;
Override: As needed.
All collection errors result in a call to Error, with error information
passed in Code and Info.
See: coXXXX constants.
function FirstThat(Test: Pointer): Pointer;
FirstThat is one of the iterator functions and is normally used to search
through the collection for a specific item. Test should point to a
locally defined far procedure, returning True when it matches the search
pattern and False otherwise. For each item in the collection until
finding a match, FirstThat calls the Test function.
See: Chapter 14, "Collections" for a detailed example.
procedure ForEach(Action: Pointer);
ForEach is an iterator function to scan through every item in the
collection, and call the procedure specified by the Action pointer,
passing to it a pointer to each individual item.
See: Chapter 14, "Collections" for a detailed example.
procedure Free(Item: Pointer);
This procedure is similar to Delete, except that Free also disposes of the
memory occupied by the item. Free is equivalent to calling,
Delete(Item);
FreeItem(Item);
Although, Borland recommends not calling FreeItem directly.
See: TCollection.AtFree,TCollection. AtDelete, TCollection.Delete,
TCollection.FreeAll
procedure FreeAll;
Disposes of each item in the collection and sets Count to 0.
procedure FreeItem(Item: Pointer); virtual;
When Item is a pointer to an individual item in the collection,
FreeItem(Item) disposes Item by calling Dispose(PObject(Item), Done),
using PObject to recast the pointer to a generic PObject.
See: TCollection.AtFree, TCollection.AtDelete, TCollection.Delete, Free
function GetItem(var S: TStream): Pointer; virtual;
GetItem is used to read a single collection item from stream S and is
automatically called by TCollection.Load. You should not directly call
this routine but should use Load instead.
See: TCollection.Load, TCollection.PutItem, TCollection.Store
function IndexOf(Item: Pointer): Integer; virtual;
Given a pointer to an Item, IndexOf returns the index position in the
collection where the Item is located. IndexOf is the opposite of
At(Index) which returns a pointer to the item.
See: TCollection.At
constructor Init(ALimit, ADelta: Integer);
TCollection.Init creates a new collection with space initially allocated
for the number of elements specified by ALimit, and the ability to
dynamically increase the size of the collection in ADelta increments.
See: MaxCollectionSize
procedure Insert(Item: Pointer); virtual;
Inserts or adds the specified Item to the end of the collection and is
equivalent to calling AtInsert(Item, Count).
See: TCollection.AtInsert
function LastThat(Test: Pointer); Pointer;
LastThat searches backwards through the collection, beginning at the last
item and moving forwards. For each item, LastThat calls the function
specified by Test, until Test returns a True result. By having Test point
to a function that makes a comparision between a search criteria and an
item in the collection, you can use LastThat to quickly scan backwards in
a collection.
See: TCollection.FirstThat, TCollection.ForEach
constructor Load(var S: TStream);
Loads the entire collection from stream S, by calling TCollection.GetItem
for each individual item in the collection.
See: TCollection.GetItem
procedure Pack;
Use Pack to eliminate all nil pointers that may have been stored into the
collection.
procedure PutItem(var S: TStream; Item: Pointer); virtual;
Called by TCollection.Store to write an individual item to stream S.
procedure SetLimit(ALimit: Integer); virtual;
Use SetLimit to manually adjust the number of elements allocated to the
collection. SetLimit operates by allocating a new Items array and copying
the appropriate number of elements from the old Items array into the new
array.
See: TCollection.Items, TCollection.Limit
procedure Store(var S: TStream);
Writes the entire collection to stream S.
See: TCollection.Load, TCollection.PutItem
TCommandSet type
------------------------------------------------------------
Declaration:
TCommandSet = set of Byte;
Unit: Views
Purpose:
In Turbo Vision, command codes are assigned values from 0 to 65,535, with
values in the range of 0 to 255 reserved for items that can be selectively
disabled. TCommandSet is used to hold a set of up to 256 commands,
specifically those that can be disabled, and is used as a parameter for the
TView methods, EnableCommands, DisableCommands, GetCommands and SetCommands.
Listing TCMDSET.PAS illustrates the use of a TCommandSet type.
1 { TCMDSET.PAS }
2 { Example using TCommandSet, from TVSHELL8.PAS }
3 var
4 CommandsOn : TCommandSet;
5 CommandsOff : TCommandSet;
6 ...
7 CommandsOn := [cmUseDOS, cmDelete];
8 CommandsOff := CommandsOn;
9
10 if (SetUpData.ProgOptions and 2) = 2 then
11 CommandsOff := CommandsOff - [cmUseDOS];
12
13 if (SetUpData.ProgOptions and 4) = 4 then
14 CommandsOff := CommandsOff - [cmDelete];
15
16 CommandsOn := CommandsOn - CommandsOff;
17
18 DisableCommands( CommandsOff );
19 EnableCommands( CommandsOn );
TDeskTop object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TView
TGroup
TDeskTop
TWindow
TProgram
Discussion
Each application has one TDeskTop object, pointed to by the global
variable, DeskTop, that controls the area on the screen between the menu
bar and the statusline. The TDeskTop object owns the TBackground that
forms the backdrop for the screen, and typically owns other windows and
dialogs that become inserted into the desktop during program execution.
Commonly Used Features
TDeskTop provides two functions for rearranging the windows: Cascade and
Tile. Most applications will not need to manipulate the TDeskTop object
other than to insert windows and control the operation of dialogs through
the inherited ExecView method. If you wish to change the background
object, you'll need to derive a new TDeskTop object and override the
InitBackground procedure described below.
Example
Windows used by the application are normally inserted into the TDeskTop
object. For example, the TVSHELL sample program (see Chapters 11-12 of
the Borland Pascal Developer's Guide) creates and inserts a directory
window using the global DeskTop^ pointer, like this:
GetExtent( Bounds );
Bounds.B.Y := Bounds.B.Y - 2; { We leave space for the status
line }
DirWindow := New( PDirectoryWindow,
Init(Bounds, 'Directory Listing', 0 ));
DeskTop^.Insert(DirWindow);
Modal dialog boxes are displayed on the desktop by calling the ExecView
method, like this:
{ Let the user fiddle with the dialog box }
Control := DeskTop^.ExecView (Dialog);
if Control <> cmCancel then
begin
Dialog^.GetData( SetUpData );
...
end;
Non-modal dialog boxes are treated the same as a window and are inserted
directly using Insert, as shown in the directory window example above.
For an example of deriving a TDeskTop object to implement a new
background, see TBackground.
Fields
Background: PBackground;
Points to the TBackground object owned by this TDeskTop (note: This field
is omitted from the Borland documentation).
Methods
procedure Cascade(var R: TRect);
Calling Cascade produces a "cascade effect" of all the windows currently
owned by the desktop. The effect is identical to that used by the IDE
editor when multiple files are opened: the window that appears farthest
to the back is drawn to occupy the entire screen, and then each subsequent
window is sized and positioned such that its upper left corner appears one
line down and one character to the right of the window behind it.
See: TDeskTop.Tile
constructor Init(var Bounds : TRect );
Init creates a new TDeskTop with the size and position given by Bounds,
and then calls InitBackground to create a new TBackground object.
See: TBackground, TDeskTop.InitBackground
procedure InitBackground; virtual;
Override: As needed to create new TBackground objects
InitBackground calls TBackground.Init to instantiate a new background
object, and sets Background to point to the TBackground object. If you
wish to create a different appearing background thann the default
background, there are two ways to go about it. One is to merely insert a
new TBackground object into the desktop so that it hides the previous
desktop. To do this, you would write,
DeskTop^.Insert(New(PBackground, Init(Bounds, #FF));
where Bounds defines the size and location of the new background object,
and #FF is a hexadecimal character describing the pattern to use in
drawing the new backdrop. While this method is easy to implement, the
original background continues to occupy memory. A better approach is to
use the method given as an example in the TBackground section, where a new
TDeskTop object is derived and its InitBackground function is overridden
to instantiate a new TBackground. Using this approach, when the
application runs, it automatically calls your TDesktop-derived object's
InitBackground method, creating only one new background.
See: TBackground for complete details.
Important: Borland's documentation describes a method called
NewBackground to perform the operation of InitBackground. However, in the
actual implementation of Turbo Vision, NewBackground was replaced with
InitBackground.
procedure HandleEvent(var Event: TEvent); virtual;
TDeskTop.HandleEvent exists primarily to intercept the F6 key, used to
cycle through the collection of windows that it owns.
function NewBackground: PView; virtual;
This function, described in the Borland documentation does not exist. See
InitBackground.
procedure Tile(var R: TRect);
Displays tileable windows, in tiled format, on to the screen.
procedure TileError; virtual;
Override: As needed.
If for some reason Turbo Vision is unable to rearrange and draw the
windows in either cascaded or tiled format, Turbo Vision will call the
TDeskTop.TileError procedure. Normally, this procedure does nothing and
returns. However, if you wish to detect the condition and provide a
message to the user, you can override this procedure.
TDialog object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TView
TGroup
TWindow
TDialog
Discussion
Use TDialog to derive new types of dialog box objects. In most cases, you
will use the existing TDialog-type directly, and only reference its Init
method. Dialogs are then inserted into the desktop, or executed via
DeskTop^.ExecView. Generally, you will not need to access the dialog
methods directly. By default, dialog boxes cannot grow, but can be
dragged or closed via a close icon.
Fields
None
Methods
function GetPalette: PPalette; virtual;
Override: As needed to define new color mappings.
Returns a pointer to the CDialog palette, defining the basic color
mappings for dialogs and all the controls that are inserted into dialogs.
procedure HandleEvent(var Event: TEvent); virtual;
Adds special processing of events to generate cmCancel, cmDefault, cmYes
or cmNo commands in response to the appropriate inputs.
constructor Init(var Bounds: TRect; ATitle: TTitleStr);
Passes the parameters Bounds and ATtitle to TWindow.Init to create a
dialog box window with defaults set such that the dialog window cannot
grow but can be dragged or closed.
function Valid(Command: Word): Boolean; virtual;
If the Command parameter equals cmCommand, then Valid returns True.
Otherwise, when Command is cmValid (or zero), Valid checks the Valid
method of each of the controls that it owns in order to determine if the
entire dialog was constructed satisfactorily. All of the controls must
return True in order for TDialog.True to return True.
See: TView.Valid, Chapters 16 and 19.
TDosStream object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TStream
TDosStream
TBufStream
Discussion
Use TDosStream for unbuffered stream file access (see also TBufStream).
For most applications you will probably prefer to use TBufStream for its
faster, buffered file access.
See TStream, TBufStream, stXXXX constants
Commonly Used Features
Generally, you will use the TDosStream.Init method to open a stream file
for access, the TDosStream.Read and TDosStream.Write methods for
performing input and output, and TDosStream.Done to close and dispose of
the object. For random access streams, you will use TBufStream.Seek to
position the file pointer to the proper object record.
Example
The use of TDosStream is nearly identical to TBufStream, without the
buffering related methods. See the TBufStream example and also Chapter
15, "Streams" in the Borland Pascal Developer's Guide for information
regarding the use of streams.
Fields
Handle: Word; { Read only }
Contains the DOS file handle used to access the file containing the
stream.
Methods
destructor Done; virtual;
Closes the file and disposes of the stream object.
function GetPos: Longnt; virtual;
Override: Never.
Gives the stream's current position, in bytes, relative to the start of
the stream.
function GetSize: Longint; virtual;
Override: Never.
Returns the total number of bytes in the stream.
constructor Init( Filename: FNameStr; Mode, Size : Word);
Use Init to create and initialize a stream, using the parameters Filename
for the name of the file to open, and setting the Mode parameter to
stCreate, stOpenRead, stOpenWrite or stOpen.
procedure Read( var Buf; Count: Word); virtual;
Override: Never
Use Read to read Count bytes from the stream and into the Buf parameter.
Read begins at the stream's current position (as determined by Seek or
beginning at the end of the previous Read operation).
See: Chapter 15, "Streams", TOosStream.Seek, TDosStream.Write
procedure Seek(Pos : Longint); virtual;
Override: Never.
Positions the current stream position to Pos. You can use Seek to
implement random access to stream files (see Chapter 15, "Streams"). Be
certain that if you are adding or multiplying values to compute the Pos
parameter (for example, SizeOf(SomeObject) * Index), that you convert the
parameters to Longint to avoid integer overflow errors.
See: Chapter 15, "Streams", TDosStream.GetPos,TDosStream.Read,
TDosStream.Write
procedure Truncate; virtual;
Override: Never.
Use Truncate to delete all data following the current position in the
stream.
procedure Write( var Buf; Count: Word); virtual;
Override: Never.
Use Write to copy Count bytes from the Buf parameter to the stream.
See: Chapter 15, "Streams", TDosStream.Read
TDrawBuffer type
------------------------------------------------------------
Declaration:
TDrawBuffer = arrayu[0..MaxViewWidth-1] of Word;
Unit: Views
Purpose:
TDrawBuffer is used to create temporary storage areas for a line of text
to be written to the screen where the low byte of each word contains the
character value, and the high byte contains the video attribute byte. You
can use the Turbo Vision procedures, MoveBuf, MoveChar, MoveCStr, and
MoveStr to set up the buffer and then use one of the TView method's
WriteBuf or WriteLine within a Draw method to write the output to the
screen. Here's an example using TDrawBuffer:
var
Buffer : TDrawBuffer;
...
MoveStr(Buffer, 'Financial Results for FY1991', GetColor(1) );
WriteLine( 1, 3, 28, 1, Buffer );
See: TView methods WriteBuf and WriteLine.
TEmsStream object
------------------------------------------------------------
Turbo Vision Hierarchy
TObject
TStream
TEmsStream
Discussion
Use TEmsStream for storing stream files in EMS memory. Important: If you
fail to call TEmsStream.Done, or if your program suffers an abnormal
termination (i.e. "crashes"), the EMS will remain allocated. The only way
to recover allocated EMS is to reboot the computer.
See: TStream, TBufStream, TDosStream, stXXXX constants
Commonly Used Features
Generally, you will use the TEmsStream.Init method to open a stream for
access, the TEmsStream.Read and TEmsStream.Write methods for performing
input and output, and TEmStream.Done to close and dispose of the object.
For random access streams, you will use TEmsStream.Seek to position the
file pointer to the proper object reocrd.
Example
See Chapter 15, "Streams" for a tutorial and examples of using TEmsStream.
Fields
Handle: Word; { Read only }
Contains the EMS file handle used to access the stream.
PageCount: Word;
Contains the total number of 16k byte pages allocated for the TEmsStream
object.
Position: Longint;
Contains the current location within the stream, beginning from byte 0.
Size: Longint;
Contains the total size of the stream, in bytes.
Methods
destructor Done; virtual;
Disposes and releases the EMS memory pages used by the stream.
function GetPos: Longnt; virtual;
Override: Never.
Gives the stream's current position, in bytes, relative to the start of
the stream.
function GetSize: Longint; virtual;
Override: Never.
Returns the total number of bytes in the stream.
constructor Init( MinSize, MaxSize : Longint);
Use Init to create an initialize the TEmsStream such that the stream will
always have at least the minimum specified MinSize memory allocated to it.
The exact allocation depends on the version of the EMS driver in use on
your computer. If your EMS driver is version 4.0 or greater, then MaxSize
is ignored. In 4.0 and greater, EMS blocks are dynamically resizeable so
this parameter is ignored. Prior to version 4.0, the EMS blocks could not
be resized and in that case Init will initially try to allocate the entire
MaxSize bytes.
procedure Read( var Buf; Count: Word); virtual;
Override: Never
Use Read to read Count bytes from the stream and into the Buf parameter.
Read begins at the stream's current position (as determined by Seek or
beginning at the end of the previous Read operation).
See: Chapter 15, "Streams" in the Borland Pascal Developer's Guide,
TEmsStream.Seek, TEmsStream.Write
procedure Seek(Pos : Longint); virtual;
Override: Never.
Positions the current stream position to Pos. You can use Seek to
implement random access to streams (see Chapter 15, "Streams"). Be
certain that if you are adding or multiplying values to compute the Pos
parameter (for example, SizeOf(SomeObject) * Index), that you convert the
parameters to Longint to avoid integer overflow errors.
See: Chapter 15, "Streams", TEmsStream.GetPos,TEmsStream.Read,
TEmsStream.Write
procedure Truncate; virtual;
Override: Never.
Use Truncate to delete all data following the current position in the
stream, resetting the current position to the end of the stream.
procedure Write( var Buf; Count: Word); virtual;
Override: Never.
Use Write to copy Count bytes from the Buf parameter to the stream.
See: Chapter 15, "Streams", TEmsStream.Read
TEvent type
------------------------------------------------------------
Declaration:
The TEvent type, as defined in Turbo Pascal 6.0, (C) Copyright 1991, by Borland
Intl:
1 { TEVENT.PAS }
2 PEvent = ^TEvent;
3 TEvent = record
4 What: Word;
5 case Word of
6 evNothing: ();
7 evMouse: (
8 Buttons: Byte;
9 Double: Boolean;
10 Where: TPoint);
11 evKeyDown: (
12 case Integer of
13 0: (KeyCode: Word);
14 1: (CharCode: Char;
15 ScanCode: Byte));
16 evMessage: (
17 Command: Word;
18 case Word of
19 0: (InfoPtr: Pointer);
20 1: (InfoLong: Longint);
21 2: (InfoWord: Word);
22 3: (InfoInt: Integer);
23 4: (InfoByte: Byte);
24 5: (InfoChar: Char));
25 end;
Unit: Drivers
Purpose:
TEvent is a case variant record defining each type of event used in Turbo
Vision. When a routine receives an event, it can look in the TEvent fields to
determine what type of event occurred and use other information provided to
appropriately process that event. For example, when the TEvent.What field
contains evMouse, you can check TEvent.Buttonsto see which mouse button was
pressed (0=none, 1=left, 2=right). The TEvent.Double flag is set if two mouse
clicks occurred within the DoubleDelay time interval. Lastly, for each mouse
event, TEvent.Where contains the coordinates of the mouse.
When the event record contains broadcast evMessage events, several variant
fields are provided for passing additional information with the message.
InfoPtr can be used, for instance, to pass a pointer to a record or another
object.
See: Chapter 13, "More Turbo Vision Features" in the Borland Pascal
Developer's Guide for additional information regarding event processing, and
also see the HandleEvent method defined in various object types.