home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_GEN / TVCOLR.ZIP / TVCOLR.DOC < prev    next >
Text File  |  1994-02-08  |  28KB  |  516 lines

  1. Notice
  2. ======
  3.     The changes described in this file don't necessarily require the source
  4. code to the Turbo Vision class library.  All of Borland's copyrights remain
  5. in effect and I make no claim of ownership or copyright to the modifications
  6. described herein.  It's always a good idea to back up the files to be
  7. modified in case you mess something up and, if you do, I'M NOT RESPONSIBLE.
  8.  
  9. Files you should have received in TVCOLR.ZIP:
  10. =============================================
  11.         TVCOLR.DOC      -- Document describing extending TV's palette system.
  12.         COLUPDT.DOC     -- Document describing some TV modifications.
  13.         MAPCOLOR.CPP    -- A replacement TView::mapColor().
  14.                            This can be used whether you have the TV source
  15.                            code or not.
  16.         TVCOLR.H        -- A default TVCOLR.H file to get you started.
  17.         TVCOLR.HDC      -- TVCOLR.H fully commented.
  18.         TCOLTEXT.H      -- TColorText header file.
  19.         TCOLTEXT.CPP    -- TColorText class code.  This class is used
  20.                            throughout the demo and has colors in TVCOLR.H.
  21.         DEMOUMOD.EXE    -- Demo using the unmodified TV library.
  22.         DEMOMOD.EXE     -- Demo using the modifications described in the docs.
  23.         DEMO.H          -- Demo header file.
  24.         DEMO.CPP        -- Demo source code.
  25.         DEMO.PRJ        -- Demo program project file.
  26.         DEMNOSRC.PRJ    -- Similar to DEMO.PRJ, but for those with no source
  27.                            code for Turbo Vision.
  28.         LINK.H          -- Resource file __link() definitions for the demo.
  29.         BLDRSC.CPP      -- Resource file builder.
  30.         BLDRSC.PRJ      -- Resource file builder project file.  The included
  31.                            executables have the .RSC file appended to the EXE.
  32.  
  33.     If your copy is incomplete, you can find a full copy in the BCPPDOS
  34. forum on CompuServe in the Turbo Vision library section.
  35.  
  36. Foreword
  37. ========
  38.     I've seen a number of messages in the BCPPDOS forum on CompuServe asking
  39. how to add new colors to classes in Turbo Vision or modify the application
  40. palettes in a more simplified manner.  Below is a document describing a new,
  41. hopefully easier, method of expanding the default Turbo Vision color
  42. palettes.  I think its more flexible, easier to implement, and all those who
  43. use Turbo Vision could benefit from it eventually when they start playing
  44. around with color options for an application.  There is a lot of text that
  45. follows, but don't let that put you off.  This method is not that hard to
  46. understand or use.  However, I designed it, I coded all the changes, and so
  47. far I alone have the better understanding of what I was trying to do and
  48. what the end result does accomplish.
  49.  
  50.     With that in mind, I have submitted this to be looked over, kicked
  51. around, tried out, commented on, and hopefully put to good use.  I've
  52. included some sample code in a demo program.  I haven't seen too much on
  53. selecting different palettes, altering colors, or saving the palettes for a
  54. Turbo Vision application so it should also serve as a fairly decent tutorial
  55. on those subjects too.  If you've ever tried using the manual for help on
  56. adding and altering colors, you've probably ended up more confused than when
  57. you started (I did anyway <g>).  Step-by-step instructions for my way can be
  58. found later on in this file.
  59.  
  60. Background Information
  61. ======================
  62.     Most of the time, when a new class is created in Turbo Vision, it can
  63. have its colors mapped into existing colors in the owning view such as a
  64. TDialog or TWindow.  Here, I refer to colors such as normal text,
  65. highlighted text, scrollbar colors, etc.  Occasionally, new additions to the
  66. default application palette are needed.  When I say this, I mean completely
  67. new entries that don't already have an existing equivalent in the normal
  68. application palette.  For example, if you decide to add an error message
  69. color entry for a new TStaticText class you derive, you would add a new
  70. entry to the end of the application's base palettes (cpColor, cpBlackWhite,
  71. and cpMonochrome).
  72.     This document describes a set of modifications (or replacements) to the
  73. Turbo Vision source code and, once they are made, a method to easily expand
  74. the default Turbo Vision application palette by updating and/or including a
  75. single header file.  Using the following method, it is no longer necessary to
  76. derive a new owning class (i.e. TDialog or TWindow) for objects that require
  77. new palette entries.  Also, any new colors you add will be immediately
  78. accessible to existing classes or other new classes you create without
  79. having to derive new owning classes for them as well or adding more colors
  80. specifically for them that may duplicate ones already in existence.
  81.  
  82.     As an example, suppose you want to derive a class called TColorText from
  83. TStaticText to use different colors for information, notification, warning,
  84. and error messages and each will have a unique entry in the application's
  85. palettes so that the user can modify them with a TColorDialog.  As shown in
  86. the manual and example programs, you would have to create the TColorText
  87. class and its getPalette() member function and then override the
  88. TApplication::getPalette() member function to add the three extra colors to
  89. the end of the base palettes (cpColor, cpBlackWhite, cpMonochrome).
  90.  
  91.     However, you also have to derive a new TDialog and modify its palette so
  92. that the new colors can be accessed using the getColor() function.  You
  93. would then have to use that new TDialog class whenever you used the
  94. TColorText class.  If any other new classes you create also need to use
  95. these added colors or define more, you have to use the same derived TDialog
  96. or extend its palette again for them so that they can have access to those
  97. colors.  Placing the object in a TWindow or other such object would also
  98. require a new derived class to extended their palettes similar to the
  99. TDialog class.
  100.  
  101.     I also found that if you decide to add the help colors to your
  102. application at a later date, they have to be added *immediately after* the
  103. normal base palettes because the indices for them are hard coded in
  104. HELPBASE.H.  That means that you will then need to change any color indices
  105. used for your additions because they will have to come *after* the help
  106. colors.  Otherwise, you'll need to include the help window colors from the
  107. very start.  It's not a major problem, but it's still something else you
  108. need to take into account.
  109.  
  110. How the change works
  111. ====================
  112.     I have seen simple work-arounds that involve a color attribute that is
  113. passed to the object in its constructor.  However, that color won't be able
  114. to change at runtime based on the palettes for each monitor type or get
  115. modified in a TColorDialog by the user to suit their preference in colors.
  116. By circumventing the Turbo Vision palette system, you lose the functionality
  117. it offers you.
  118.  
  119.     After playing around with some ideas for a while, I came up with the
  120. following method.  Some initial changes to the Turbo Vision source code are
  121. required to make my method work (but you don't have to physically change the
  122. library if you don't want to).  In short, you replace TView::mapColor() with
  123. a function that will properly map index references to extended entries (ones
  124. that you add).  Once done, you just modify and/or #include another header
  125. file.  The file, TVCOLR.H, can be placed in the Turbo Vision #include
  126. directory and can be automatically processed by modifying the TV.H file to
  127. include it whenever you #define Uses_TVCOLR.  Until you create another class
  128. requiring more additions to the color palette, you can pretty much forget
  129. about how it works or thinking about what needs changing and just use its
  130. extended application palette definitions.
  131.  
  132.     The TVCOLR.H header file is where you define a default base palette and
  133. then define any new extensions to it.  The default base palette consists of
  134. the normal colors with the help colors automatically appended to them.  To
  135. add new color entries, you simply add some definitions for the new class and
  136. tack them on the end of the "extended" palette definition.  I have written
  137. it so that there is a standard, simple procedure to follow when doing so.
  138. Once done, any application may use the extended colors by simply including
  139. the TVCOLR.H file and telling its TApplication::getPalette() member function
  140. to use the extended color palette definitions.  If it is already doing so,
  141. then no changes are necessary.  All you have to do is recompile the
  142. application and link in the new class and any processes, dialogs, etc, that
  143. use it.
  144.  
  145.     Whenever you create a class that needs new color entries added to the
  146. application palette, all you have to modify is TVCOLR.H.  The new classes
  147. you write will have a getPalette() member function that uses defined indices
  148. from TVCOLR.H to reference the new color entries.  After updating it, you
  149. just recompile your application.  In addition to this, any other classes you
  150. create, either related or unrelated, will also have access to these palette
  151. entries.  All you need to do is #include TVCOLR.H and construct their
  152. palette so that they use the proper index values to get to them.
  153.  
  154.     If you distribute any of your classes to other people either separately
  155. or as a library of classes for use with Turbo Vision, you can refer them to
  156. or include this set of files on how to either add the TVCOLR.H header file
  157. and other modifications to their system or merge your new class color
  158. definitions from your TVCOLR.H into their existing copy.
  159.  
  160.     Another benefit of this method is that if you distribute a Turbo Vision
  161. class library without source code and your objects use additional colors,
  162. all that the end user has to do is modify their copy of TVCOLR.H and
  163. override getPalette() if and when it comes time to add new entries.  No
  164. changes are required to the source code they don't have.  As long as the
  165. existing entries in TVCOLR.H remain unchanged and they only add stuff to the
  166. end definitions, everything will turn out right.  Also, by conforming to
  167. this color mapping and defintion method, there is little chance of
  168. conflicting color index entries between old and new classes.  You also don't
  169. have to remember to include any additional object palettes in the
  170. TApplication::getPalette() either as long as you use the extended color
  171. #defines from TVCOLR.H.
  172.  
  173. First, a few code fixes
  174. =======================
  175.     While adding a TColorDialog to my application, I found out that unlike
  176. the compiler's IDE, Turbo Vision had no entries for changing a default
  177. button's shortcut color, a selected button's shortcut color, or a selected
  178. label's shortcut color.  Thus, the hotkeys for them always seem to stand out
  179. in an aesthetically unsatisfactory way (well, they do to me anyway <g>).
  180. Also, you can't use black on black (i.e. for a blank desktop background).
  181. Finally, if you ever use apMonochrome, TColorDialog has defined
  182. TMonoSelector to be one line too long so that the "Inverse" radio button
  183. shows up twice.  I have included notes on fixing these problems too (See
  184. COLUPDT.DOC).  If you want to, put these changes in before proceeding with
  185. the modifications below.  You don't have to add the extra colors for the
  186. TButton and TLabel objects if you don't want to (it does make for a better
  187. looking interface when you use non-standard colors though).  With this
  188. release of the files, TVCOLR.H will work properly whether or not the three
  189. new colors are added to the Turbo Vision source code.  You may want to
  190. put the changes in so that black on black is a valid color selection and/or
  191. to fix the TColorDialog class though.
  192.     For those with no source code for Turbo Vision, you can still implement
  193. the changes below for extended colors.  Simply include the new MAPCOLOR.CPP
  194. in your project file or compile it and simply replace it in the TV.LIB (make
  195. a back-up of the original!) with:
  196.  
  197.         bcc -c -P -O1 -ml -I\bc\include;\bc\tvision\include;. mapcolor.cpp
  198.         tlib \bc\tvision\lib\tv.lib /0 -+mapcolor.obj
  199.  
  200. Substitute your path to the include and library directories as needed.  If
  201. you choose to add it to your projects instead of replacing it in the
  202. library, be sure it gets linked in *before* TV.LIB (or TVNO.LIB and TVO.LIB
  203. when using the overlay versions if you created them) so that the new copy is
  204. used.  You'll know if it hasn't worked because the colors will be messed up.
  205. This is usually only a problem when using MAKE files instead of the IDE's
  206. .PRJ files.  Placing MAPCOLOR.CPP anywhere in an IDE's .PRJ file is usually
  207. enough to make it get linked in before TV.LIB.
  208.  
  209. How to make the changes
  210. =======================
  211.  
  212. Files Affected:
  213. ===============
  214.     COLORSEL.CPP ──┐
  215.     DRIVERS.CPP    ├─  See COLUPDT.DOC for allowing black on black,
  216.     MAPCOLOR.CPP ──┘   fixing TMonoSelector, etc.
  217.  
  218.     MAPCOLOR.CPP -- See below.
  219.     TV.H
  220.  
  221. Files Added:
  222. ============
  223.     TVCOLR.H     -- Place this file in the Turbo Vision #include directory
  224.                     (\BC\TVISION\INCLUDE for example).
  225.  
  226. Files Changed:
  227. ==============
  228.  
  229. MAPCOLOR.CPP
  230. ============
  231.     Simply replace the existing MAPCOLOR.CPP with the supplied MAPCOLOR.CPP
  232. or include it in your project file to replace the existing library copy when
  233. your application is compiled and linked.
  234.  
  235. TV.H
  236. ====
  237.     Add the following lines around line 608 before the '#pragma option -Vo'
  238. statement:
  239.  
  240. #if defined( Uses_TVCOLR )
  241. #include <tvcolr.h>
  242. #endif
  243.  
  244. *******************************************************************************
  245.  
  246. Implementation
  247. ==============
  248.     That's all there is to it.  If you made the modifications described in
  249. COLUPDT.DOC, change directories to \BC\TVISION\SOURCE (substitute your path
  250. as necessary) and issue the command:  make -fmakefile
  251.  
  252.     I think it's best to rebuild the library because by doing the MAKE, you
  253. can insure that everthing that needs updating gets recompiled.  But, if all
  254. you've done is replace MAPCOLOR.CPP and left out the changes in COLUPDT.DOC,
  255. you can use the method described above in the "First, a few code fixes"
  256. section to recompile and replace MAPCOLOR.OBJ.  It doesn't require a total
  257. rebuild of the library to replace MAPCOLOR.OBJ in the TV.LIB file.
  258.  
  259.     I have included a demo program with comments that explain using extended
  260. colors along with the TColorText class described in the comments of the
  261. TVCOLR.HDC file.  I created TVCOLR.HDC with full documentation to describe
  262. how to do things and TVCOLR.H without all the comments so that you could see
  263. the whole picture without all the clutter.  Read those comments because they
  264. will tell you all you need to know for adding more colors to it.  Additional
  265. comments can be found in the TColorText source files and the demo program
  266. files.
  267.  
  268. *******************************************************************************
  269.  
  270.     The following notes cover adding a class's extended colors to TVCOLR.H.
  271. I will use the TColorText class already in the header file as an example.
  272. It might be helpful to print it out and follow along.
  273.  
  274. Step 1.  Define the additional color attributes for each palette.
  275. =================================================================
  276.     This step refers to the actual color attributes that will appear in the
  277. application's base palettes (cpColor, cpBlackWhite, cpMonochrome, and any
  278. user defined palettes).  I've also defined an Alternate Color palette
  279. (cpAltColor) that can be used for your own default color preferences as
  280. opposed to the default Turbo Vision color preferences (I'm not a big fan of
  281. green buttons <g>).  For the example TColorText class, we will add four new
  282. entries to each palette: one for information messages, one for notification
  283. messages, one for warning messages, and the last one for error messages.
  284. It would be done as follows:
  285.  
  286. // TColorText additional color attributes.
  287. #define cpColorTextAltColor   "\x1B\x1F\x4F\x4E"    // Alt color palette
  288. #define cpColorTextColor      "\x1B\x1F\x4F\x4E"    // Color palette
  289. #define cpColorTextBlackWhite "\x70\x7F\x07\x0F"    // B&W palette
  290. #define cpColorTextMonochrome "\x70\x01\x0F\x0F"    // Monochrome palette
  291.  
  292. These will become the default colors for the object at start-up. To get a
  293. default color, use the digits below and join them together to form a hex
  294. value in the format \x[background][foreground].  Thus for the error color in
  295. the cpColorTextColor palette it is \x4E or *yellow text (E)* on a *red
  296. background (4)*.
  297.  
  298. Color                    Digit          Can be used for:
  299. ==================================================================
  300. Black                      0               Both
  301. Blue                       1               Both
  302. Green                      2               Both
  303. Cyan                       3               Both
  304. Red                        4               Both
  305. Magenta                    5               Both
  306. Brown                      6               Both
  307. Light Gray                 7               Both
  308. Dark Gray                  8               Foreground only
  309. Light Blue                 9               Foreground only
  310. Light Green                A               Foreground only
  311. Light Cyan                 B               Foreground only
  312. Light Red                  C               Foreground only
  313. Light Magenta              D               Foreground only
  314. Yellow                     E               Foreground only
  315. White                      F               Foreground only
  316.  
  317. 2. Define the indices that go into the extended application palettes.
  318. =====================================================================
  319.     For each of the added colors above, you will need to define an index
  320. into the application palettes so that the color can be accessed.  This is
  321. just the offset (position) within the application palette as a whole.  Just
  322. add a #define for each new color that equates to the offset.  This is done
  323. by taking the last defined offset from the class prior to the one being
  324. defined and adding an offset to it for the new class.  Don't worry!  It's
  325. simpler than it sounds.  Here are the indices for the TColorText class:
  326.  
  327. #define cCTxtInfoColor      cpDefSize + 1       // Information color
  328. #define cCTxtNotifyColor    cpDefSize + 2       // Notification color
  329. #define cCTxtWarnColor      cpDefSize + 3       // Warning color
  330. #define cCTxtErrorColor     cpDefSize + 4       // Error color
  331.  
  332.     Because TColorText is the *first* class added to TVCOLR.H, we have to
  333. use cpDefSize as the sum of all palette entries up to this point.  We can
  334. now just add our offsets into the TColorText attributes.  For the
  335. information color, we add 1 because it is the first entry in TColorText's
  336. extra colors.  The notification color is the second entry so it is cpDefSize
  337. + 2. The warning color is the third entry so it is cpDefSize + 3, and the
  338. error color is the fourth entry so it is cpDefSize + 4.  Because all of the
  339. application palettes (cpColor, cpBlackWhite, etc) are the same size, these
  340. indices work for any of them.
  341.  
  342. Now, lets suppose we add another class to TVCOLR.H after TColorText.
  343.  
  344. // Another class's attributes   #1  #2 ...#nnn
  345. #define cpAnyClassAltColor    "\x71\x6E...etc"
  346. #define cpAnyClassColor       "\x71\x6E...etc"
  347. #define cpAnyClassBlackWhite  "\x0F\x0E...etc"
  348. #define cpAnyClassMonochrome  "\x0F\x0E...etc"
  349.  
  350. // As described, cCTxtErrorColor will be the *last* offset of the palettes,
  351. // so it will give us the size up to that point.
  352.  
  353. #define cAnyClassExtra1   cCTxtErrorColor + 1   // Extra Color 1
  354. #define cAnyClassExtra2   cCTxtErrorColor + 2   // Extra Color 2
  355.   .                                              .
  356.   .                                              .
  357.   etc.                                          // Extra Color nnn
  358.  
  359. So where does that get me?
  360. ==========================
  361.     Because you are adding colors for the object, it will need an overridden
  362. getPalette() member function.  You will use these indices to form the
  363. palette for the object.  These point to the new colors in the application's
  364. base palettes (cpColor, etc).  You will also use these indices so that
  365. TColorDialog can modify the object's colors.
  366.  
  367. Creating the Object's getPalette() Member Function
  368. --------------------------------------------------
  369.     For colors that will match the owning view's color for a particular item
  370. (i.e. normal text), just use an index such as '\x06' to access the n'th
  371. element of the owners palette just like you normally would.  In such cases,
  372. the new mapColor() function will follow the normal procedure of mapping the
  373. index on to the owning view's palette and so on down the line.  For colors
  374. added to the TVCOLR.H file, you will use the index so that mapColor() goes
  375. directly to the base palette and retrieves the attribute.
  376.  
  377. Thus the TColorText palette is layed out as follows:
  378.         1 = Normal Text       (from owner's 6th palette entry)
  379.         2 = Information Text  (custom added color)
  380.         3 = Notification Text (custom added color)
  381.         4 = Warning Text      (custom added color)
  382.         5 = Error Text        (custom added color)
  383.  
  384.     One thing I will point out right now:  When possible, try to find an
  385. entry in the owner's palette that will fill the need for your class's
  386. colors.  An example of this is TColorText's Normal Text entry.  Instead of
  387. adding another new color for it, the class looks to the owner and gets it's
  388. Normal Text color attribute.  That way, you don't waste space or time
  389. defining entries for colors that already exist.  Also, normal text will now
  390. be drawn in the proper color whether it is inserted into a TDialog or a
  391. TWindow.
  392.  
  393. All of the getPalette() functions will look similar to this one:
  394.  
  395. // Create a character array where each element is a color index.
  396. // This forms the palette for the object.
  397. char cpColorText[] = { '\x06', cCTxtInfoColor, cCTxtNotifyColor,
  398.                                cCTxtWarnColor, cCTxtErrorColor };
  399.  
  400. TPalette& TColorText::getPalette() const
  401. {
  402.     // Note the lack of a "- 1" after the sizeof().  There is no NULL on
  403.     // this type of palette because it is a simple array, not a string.
  404.     // Don't account for one!
  405.     static TPalette palette( cpColorText, sizeof( cpColorText) );
  406.     return palette;
  407. }
  408.  
  409.     The first entry is '\x06' to map onto the owning view's sixth palette
  410. entry, but the rest are the custom index values added to TVCOLR.H.  When
  411. mapColor() sees an index value greater than cpDefSize, it goes directly to
  412. the base palette and retrieves the attribute instead of mapping colors onto
  413. the owning views.
  414.  
  415. 3. Add your new color attribute definitions to the full extended palette.
  416. =========================================================================
  417.     You do this by taking the #defines from step 1 and putting them on the
  418. *end* of the cpExtXXX #defines at the bottom of TVCOLR.H.  Always add your
  419. new colors to the *end* of the palettes so that the indices you created
  420. before it will stay the same.  That way you don't have to recompile any of
  421. them when you add new colors.  The new information goes on the end where it
  422. doesn't affect anything.
  423.  
  424. #define cpExtAltColor       cpDefAltColor cpColorTextAltColor
  425. #define cpExtColor          cpDefColor cpColorTextColor
  426. #define cpExtBlackWhite     cpDefBlackWhite cpColorTextBlackWhite
  427. #define cpExtMonochrome     cpDefMonochrome cpColorTextMonochrome
  428.  
  429.     Once you've gone through the above steps, you are free to use the new
  430. colors however you want.  To use them, make sure the TVCOLR.H file gets
  431. included in all the files that need it:
  432.  
  433.     .
  434.     .
  435.     .
  436. #define  Uses_TVCOLR
  437. #include <tv.h>
  438.  
  439. Or, if you didn't modify the TV.H file, make sure it can be found somewhere
  440. in the default #include path and add the following line:
  441.  
  442. #include <tvcolr.h>
  443.  
  444. For your application class, override the normal getPalette() with something
  445. like:
  446.  
  447. // This is where the palettes for the application are defined.
  448. TPalette &TDemoApp::getPalette() const
  449. {
  450.     // The Color and Alternate Color attribute maps are swapped in these
  451.     // definitions so that my color preferences are used by default for
  452.     // color monitors.
  453.  
  454.     static TPalette color( cpExtAltColor, sizeof( cpExtAltColor)-1 );
  455.     static TPalette blackwhite( cpExtBlackWhite, sizeof( cpExtBlackWhite)-1 );
  456.     static TPalette monochrome( cpExtMonochrome, sizeof( cpExtMonochrome)-1 );
  457.     static TPalette altcolor( cpExtColor, sizeof( cpExtColor)-1 );
  458.  
  459.     static TPalette *palettes[] =
  460.     {
  461.         &color,
  462.         &blackwhite,
  463.         &monochrome,
  464.         &altcolor        // Additional palettes must come after standard ones
  465.                          // in this array.
  466.     };
  467.     return *(palettes[appPalette]);
  468. }
  469.  
  470. Look at the demo source code included with these instruction files for
  471. further examples.
  472.  
  473. Distributing Your Own Classes
  474. =============================
  475.     If you distribute your own Turbo Vision classes that make use of the
  476. TVCOLR.H methods, you will need to include a copy of your TVCOLR.H and a
  477. copy of MAPCOLOR.CPP so that people who don't already have this set of
  478. documented changes can use them.  To use them in that manner, all you need
  479. to do is put a copy of MAPCOLOR.CPP in the project and have TVCOLR.H
  480. #included in such a way that it can be found.  You could also point them to
  481. this set of files for complete instructions on implementing their classes in
  482. a similar fashion.  This is all public domain, so you can also include
  483. TVCOLR.ZIP as part of the registered/distributable version of your files if
  484. you wanted to.
  485.  
  486. Maintenance of TVCOLR.H
  487. =======================
  488.     A thought occured to me after I uploaded these files the first time.
  489. That is, if everyone adds their own colors to TVCOLR.H and distributes their
  490. classes as shareware or freeware, there will be a number of conflicting
  491. headers.  If the source code to those files is provided, it is easy enough
  492. to resolve any conflicts between the color indices.  However, if no source
  493. code is provided, as is the case with shareware classes, there may be
  494. problems.
  495.     I am now volunteering to maintain a standard TVCOLR.H file.  If you are
  496. planning to distribute a new set of classes which add colors to TVCOLR.H,
  497. notify me of your additions and I will update these files, send you the most
  498. recent copy of TVCOLR.H with those changes, and notify anyone else who is
  499. interested that a new version is available.  I am currently planning to
  500. upload two of my own creations within the next couple of weeks.  That is the
  501. main reason for this update.  The TVCOLR.H contained in this release has new
  502. colors for a message viewer class and an editor indicator class that are a
  503. part of one of these pending uploads (if you've been waiting for a
  504. replacement of the TEditor classes, watch for TVE1B3.ZIP/TVE1B4.ZIP...).
  505.  
  506. *******************************************************************************
  507.  
  508.     Well, I hope you find this useful.  I'd appreciate any feedback,
  509. comments, suggestions, questions, etc that you may have on the changes I
  510. implemented.  I can be reached on CompuServe E-Mail at 72134,1150 or by
  511. posting a message in Section 11 (Turbo Vision) of the BCPPDOS forum.
  512. Thanks.
  513.  
  514. Eric Woodruff,  CIS ID: 72134,1150
  515. Tue 02/08/94 14:51:40
  516.