{ TBigText 3.1  (c) 1995 by Gerry Skolnik (skolnik@kapsch.co.at)

                A big thanks to the following contributors:

                (c) 1995 by Danny Thorpe
                            original scrolling and keyboard handling;
                            as he gave no email address, he doesn't
                            know about it, I took his stuff from his
                            TConsole component :-)

                (c) 1995 by David Sampson (dsampson@dca.com) -
                            Color,  Scroll Bar and Text Attribute enhancements

                (c) 1995 by Eric Heverly (erichev@ix.netcom.com)
                            Search capability, Positioning, cursor fixes

  history:
  TBigText 1.x  - first release
  TBigText 2.x  - never made it, chaos is not a theory
  TBigText 3.0  - enhancements by David Sampson, Eric Heverly
  TBigText 3.1  - bug fix (horizontal scrolling) by Gerry Skolnik

  This component will display up to 32767 lines of text. Each line has its
  own dedicated foreground, background color, text attributes and can be 255
  chars long. If memory permits this is a maximum of about 8MB of data.
  At this time no editing functions are available.

  TBigList is still there because at the time I wrote this I didn't know about
  HugeList. Talk about reinventing the wheel.

  TBigText is limited to 32767 lines, because the Windows API functions only
  accept integer values. Expect some problems a little earlier, though, at
  about 32740.

  TBigText is FreeWare. You may use it freely at your own risk in any
  kind of environment. This component is not to be sold at any charge, and
  must be distributed along with the source code.

  If you make modifications or enhancements to this component, please
  contact me via email so that I can include your stuff in the next
  release. As Delphi32 won't produce Win3.x code, and we still will
  have to support Win 3.x, this component may survive a little longer
  longer than I'd expected...
  
  I had two requests I somehow can't find a proper way to fullfill:
  a dedicated font for each line (while that'll be easy, I find the
  scrolling a bit messy then), and word wrapping. Any ideas welcome.

  Okay, here's the description of the component:
  
  property MaxLines
           if set to 0, as much lines as memory permits are included. The
           absolute maximum, however, is 32767. If set to something else,
           TBigText will limit itself to that many lines.

  property PurgeLines
           determines how to handle the situation when no more lines can be
           added (line count reached Maxlines value or we ran out of memory).
           if set to 0, an exception is raised. If set to something different
           (default 200) the number of lines specified by PurgeLines are
           deleted, the TBigList objects are packed, and most likely more
           lines can be added (though the first ones will be lost).
           This option is useful for logging windows.

  property Count
           run-time read-only. If the Lines and TextAttrib counts are equal, this
           property holds the number of lines in TBigText. If the two counts are
           unequal, there's something wrong and the property holds a value of -1.

  procedure AddLine(LineString: string; FCol, BCol: TColor; UpdateDisplay: boolean);
           The essential routine to insert lines into TBigText.
           LineString   : the text to be inserted
           FCol         : forground color
           BCol         : background color
           UpdateDisplay: if true, TBigText will scroll to the last line
                          (where the new line will be added), and update
                          its display. This is not recommended if lots of
                          lines are to be included in a loop.

  procedure LoadFromFile(FileName: TFileName);
           Loads a file into TBigText. Every line will have the default colors
           clWindowText, clWindow.

  procedure Print
           prints all lines on the specified printer. Haven't checked this out, though.

  procedure ChangeColor(Index: longint; OldFCol, OldBCol, NewFCol, NewBCol: TColor);
           changes the colors of the line at Index, but only if the current colors
           match OldFCol and OldBCol (FCol = foreground color, BCol = background color).

  procedure SetColors(Index: longint; NewFCol, NewBCol: TColor);
           changes the colors of the line at Index

  the following procedures do pretty much the same as the according TList methods:

  procedure Clear;
  procedure Delete(Index: longint);
  procedure Remove(Index: longint);
  procedure Pack;

  ============================================================================
  New Stuff added 8/31/95 by David Sampson

  Properties:
  ------------------------

  property Colors :  changed so that it is the window background color

  property ForeColor:
  property BackColor:  These are the default forground and background colors
                       that will be used to display the text in the window.

  property FillBack: Fills the background of the whole line with the Backgnd color

  property ScrollBars: Let's you select scrollbars

  Methods:
  ------------------------

  procedure AddString(LineString: string; UpdateDisplay: boolean);

    --This adds a string using the default fore and back colors and left
      alignment.

  procedure AddStringA(LineString: string; Fore, Back : TColor;
                       Align : TTextAlign; Style : TFontStyles; UpdateDisplay: boolean);

    --This lets you add a string and specify the colors, alignment, and text style

  procedure AlignText(Index : LongInt; Align : TTextAlign; UpdateDisplay: boolean);

    --This lets you set the text alignment on an item.
      Updatedisplay set to true refreshes the display

  procedure SetColors(Index: longint; NewFCol, NewBCol: TColor);

    --Let's you specify a fore and back color for a specific index

  procedure SetStyle (Index : LongInt; Style :TFontStyles; UpdateDisplay: boolean);

    --Let's you set the text style
      Updatedisplay set to true refreshes the display

  Here's some example calls:

 BigText1.AddLine('Hello', clWhite, clNavy, True);
 BigText1.AddString('There', True);
 BigText1.AddStringA('Yogi', clYellow, clRed, taRight, [], True);
 BigText1.AddStringA('Bear', clWhite, clGreen, taCenter, [], True);
 BigText1.AddString('This was left aligned', [], False);
 BigText1.AlignText (BigText1.Count -1, taCenter, true);
 BigText1.SetStyle(BigText1.Count -1, [fsBold, fsItalic, fsUnderline, fsStrikeout], true);

 ============================================================================
 New Stuff added by Eric Heverly

 Function Search - Added EJH 07/04/95
 Search('this text', True, True);
 Parameters:
       SrcWord  : String - What to Look for in the array
       SrchDown : Bool - True - Search down; False - Search Up
       MCase    : Bool - True - Match Case Exact; False - Disregard Case

 Returns:       True - Found ; False - Not Found

      Note: This is a little screwy because it does not redisplay the
            last page if text is found there when already on the last page.
            Also, during displays of found data, on the last call, if the
            user closes the finddialog, I could not see an automatic way
            for this application to know that it was not visible, so the
            final blue line stays on the screen untill the window scrolls
            beyond it, from then on it is not there.  This is sometimes
            useful, othertimes it is just ugly.

      Note: To find exact matches if you have the option available to the
            user, put a space on both sides of SrcWord, otherwise partial
            matches are used.

 Modifications - Eric Heverly - July 1995 (erichev@ix.netcom.com)

       Scroll- Added keys F1-F4 to the Scrool Keys table.
       Print - Added canvas font for the display canvas to the printer
               so the expected printer font was the same.  Also added some
               Cursor := crHourGlass to show that the system was busy during
               print cycles.
       Search- Added function.
       GoPosi- GoPosition function added.
       LoadFr- LoadFromFile added some Cursor := crHourGlass to show the
               user that the system is busy.  Also I changed the call to the
               addline function to use the dumchar, this keeps the font to
               the defined font in the object editor (ie. I used Courier and
               this way it kept Courier as the display font, with the OEM
               characters, it always used the System font).

}
