@@WideSameText
<GROUP Unicode.WideStringroutines>
Description:
  WideSameText compares the two strings case insensitively and returns True if the
  strings are equal.
Parameters:
  Str1 - The first string.
  Str2 - The second string.
Result:
  If both strings are equal (case insensitive) the function returns True, otherwise
  False is returned.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings
<GROUP Unicode.TWideStrings>
Summary:
  TWideStrings is the abstract base class for objects that represent a list of WideStrings.
Description:
  TWideStrings is the abstract base class for objects that represent a list of
  WideStrings. It is very similar to the Delphi TStrings class with the one
  fundamental difference; instead of storing a list of strings it stores a list of
  WideStrings. TWideStrings introduces properties and methods to:
      * Add or delete WideStrings at specified positions in the list.
      * Access the WideStrings at specified positions.
      * Rearrange the WideStrings in the list.
      * Persistence (load from and save to a file).
      * Associate an object with an item in the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Create
Description:
  Creates an instance of TWideStrings and initializes the object for use. Since
  TWideStrings is an abstract base class you cannot actually instantiate it, instead
  use a derived class such as TWideStringList. The TWideStrings constructor only
  initializes the language used by the class to the users default language.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------

@@TWideStrings.Add
Summary:
  Adds a WideString to the end of the list.
Description:
  Adds a WideString to the end of the list and returns the index of the new WideString.
Parameters:
  S - The WideString to add at the end of the list.
Result:
  Zero based index of the newly inserted WideString.
See also:
  Insert
  InsertObject
  Append
  AddObject
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.AddObject
Summary:
  Adds a WideString and associated object to the end of the list.
Description:
  AddObject adds a WideString to the end of the list and associates an object with
  the WideString.
Parameters:
  S - The WideString to add to the end of the list.
  AObject - The object to associate with the WideString. You can later retrieve the object by using the Objects property.
Result:
  Zero based index at which the object is inserted.
See also:
  Insert
  InsertObject
  Append
  Add
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Append
Summary:
  Appends a WideString to the list.
Description:
  Appends a WideString to the list. This method is identical to the Add
  method except that it does not return the index at which the WideString was
  inserted. Use this method rather than Add when the index is not needed or for
  descendant classes for which the index does not have any meaning.
Parameters:
  S - The WideString to add to the list.
See also:
  Insert
  InsertObject
  Add
  AddObject
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.AddStrings
Summary:
  Copies strings from another TStrings or TWideStrings into this object.
Description:
  Use AddStrings to add the strings from a TStrings or TWideStrings descendant to
  this list. If the source list has objects associated with its items a reference
  to these objects is copied as well (only a reference, no deep copy is made). Note
  that the strings in the source list are implicitly converted to WideStrings based
  on the systems locale for the overloaded method that accepts a TStrings.
Parameters:
  Strings - The source list from which to copy the items to this list.
See also:
  Assign
  AssignTo
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Assign
Summary:
  Assign sets the list of WideStrings based on the Source parameter.
Description:
  Assign sets the list of WideStrings based on the Source parameter. If the Source
  parameter is of type TStrings or TWideStrings, Assign first clears the list and
  then copies the items from the Source object including associated objects, if
  any. If Source is not of the correct type Assign simply calls inherited. Note
  that, as with the AddStrings method, if the Source is of type TStrings
  the strings are implicitly converted to WideStrings based on the systems locale.
Parameters:
  Source - An object from which to assign the list. This object must be of type TStrings or TWideStrings.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.AssignTo
Summary:
  AssignTo assigns itself to the specified object.
Description:
  AssignTo assigns itself to the specified Dest(ination) object. For AssignTo to
  do anything the Dest object must be of type TStrings or TWideStrings. Conceptually
  AssignTo is equivalent to Dest.Assign(Self) except that this method enables a
  TWideStrings to be assigned to a TStrings which otherwise wouldn't be possible.
Parameters:
  Dest - The TStrings or TWideStrings descendant to which to assign this list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.BeginUpdate
Summary:
  Marks the beginning of modifications to the list.
Description:
  Call BeginUpdate immediately before you modify the list and EndUpdate
  immediately after. All properties and methods that modify the list automatically call
  BeginUpdate and EndUpdate. BeginUpdate calls SetUpdateState which can
  be overridden by descendants to receive a notification of updates. This way
  descendants can optimize updates such as refreshing/repainting visible controls.
Notes:
  Calls to BeginUpdate and EndUpdate can be nested in all imaginable ways, but eventually the calls must be balanced.
See also:
  EndUpdate
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Clear
Summary:
  Clears the list of WideStrings and associated objects.
Description:
  Clear is an abstract method implemented by descendants to clear the list of
  WideStrings and associated objects. Note that, unless otherwise stated in the
  documentation for the descendant class, clearing the list of objects does not
  free the objects, it only removes the references to the objects.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Delete
Summary:
  Deletes the item at a specified position.
Description:
  Delete is an abstract method implemented by descendant classes to delete an item
  at a specified position from the list. If the WideString has an associated object,
  the reference to that object is deleted as well.
Parameters:
  Index - Zero based index of the WideString to delete from the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.EndUpdate
Summary:
  Marks the end of an update sequence.
Description:
  Call BeginUpdate immediately before you modify the list and EndUpdate
  immediately after. All properties methods that modify the list automatically call
  BeginUpdate and EndUpdate. When the UpdateCount managed by BeginUpdate and EndUpdate
  reaches zero, EndUpdate calls SetUpdateState which can
  be overridden by descendants to receive a notification of updates. This way
  descendants can optimize updates such as refreshing/repainting visible controls.
Notes:
  Calls to BeginUpdate and EndUpdate can be nested in all imaginable ways, but eventually the calls must be balanced.
See also:
  BeginUpdate
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Equals
Summary:
  Compares two TWideStrings for equality.
Description:
  Equals compares the list for which it is called with the list supplied as the
  argument. The function compares all strings in the lists and if they are all
  equal the function returns True. If one or more strings are not equal or the
  number of strings in the two lists differ, the function returns False. Note
  that the function only compares the strings in both lists, it ignores the
  associated objects, if any.
Parameters:
  Strings - The list with which to compare.
Result:
  If the strings in two lists are identical, that is all individual strings are
  equal and both lists have the same number of strings, the function returns True,
  in all other cases the function returns False.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Exchange
Summary:
  Swaps the WideStrings at the specified positions.
Description:
  Exchange swaps the strings at the specified positions. If either string has an
  associated object the objects are exchanged as well.
Parameters:
  Index1 - Index of the first WideString to exchange.
  Index2 - Index of the second WideString to exchange.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.GetSeparatedText
Summary:
  Returns the contents of the list in a single buffer with customizable separator.
Description:
  GetSeparatedText returns a dynamically allocated buffer which contains a concatenation
  of the individual strings in the list. The individual strings are terminated
  with the specified Separators string. As such this is identical to GetText except
  that the separator characters are customizable.
Result:
  WideString holding the concatenation of the individual strings in the
  list. If the list is empty the returned string is empty.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.GetText
Summary:
  Returns the contents of the list in a single buffer.
Description:
  GetText returns a dynamically allocated buffer which contains a concatenation
  of the individual strings in the list. The individual strings are terminated
  by a carriage-return linefeed pair.
Result:
  Pointer to the buffer holding the concatenation of the individual strings in the
  list. If the list is empty the returned pointer points to an empty buffer.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.IndexOf
Summary:
  Returns the position of a string in the list.
Description:
  IndexOf Returns the zero-based index of the first occurrence of S in the list. If
  S is not found the method returns -1.
Parameters:
  S - The string for which you want to know the index of the first occurrence.
Result:
  Zero based index of the first occurrence of S in the list. If S does not exist in
  the list -1 is returned.
See also:
  IndexOfName
  IndexOfObject
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.IndexOfName
Summary:
  Returns the position of the first string with the form Name=Value with the specified name part.
Description:
  IndexOfName returns the zero based index of the first occurrence of the string of the form
  Name=Value where the Name part matches the specified Name. If no such occurrence
  exists in the list the function returns -1. This kind of strings is commonly
  found in .ini files which are usually not Unicode based but can be loaded into
  TWideStrings anyway.
Parameters:
  Name - The Name for which to search in the list.
Result:
  Zero based index of the first occurrence of a string whose Name part matches the
  specified name. If no occurrence is found -1 is returned.
See also:
  IndexOf
  IndexOfObject
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.IndexOfObject
Summary:
  Returns the index of the string associated with a given object.
Description:
  IndexOfObject returns the zero based index of the first string associated with
  the specified object. Note that the object comparison is simply a pointer
  comparison since this class has no knowledge of the object stored in it.
Parameters:
  AObject - The object to search for.
Result:
  Zero based index of the first string associated with the specified object or -1
  if the object is not associated with any of the strings.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Insert
Summary:
  Inserts a WideString at a specific position.
Description:
  Abstract method implemented by descendants to insert a WideString at a specific
  position within the list. Index denotes the zero based position at which to insert,
  specifying 0 will insert at the beginning (first position) of the list, 1 will
  insert at the second position etc.
Parameters:
  Index - The zero based index at which to insert the new string.
  S - The string to insert at the specified position.
See also:
  InsertObject
  Add
  AddObject
  Append
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.InsertObject
Summary:
  Inserts a WideString at a specified position and associates it with an object.
Description:
  InsertObject inserts the supplied string at the specified position in the list
  and associates the supplied object with it. Index denotes the zero based position
  at which to insert, specifying 0 will insert at the beginning (first position)
  of the list, 1 will insert at the second position etc.
Parameters:
  Index - The zero based index at which to insert the new string.
  S - The string to insert at the specified position.
  AObject - The object to associate with the string.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.LoadFromFile
Summary:
  Loads the lines from a textfile into the list.
Description:
  Loads a text from a file into the list. Each line in the file, as indicated by
  a WideNull, LineFeed, CarriageReturn, VerticalTab, FormFeed, LineSeparator or
  ParagraphSeparator, is appended as a string in the list. If a byte-order mark is
  present in the file it is assumed to be a Unicode textfile and read as such. If
  no byte-order mark is present it is assumed to be an ANSI textfile.
Parameters:
  FileName - The fully qualified name of the file containing the text to load.
Notes:
  The class remembers whether an opened file originally contained Unicode by setting the SaveUnicode property appropriately.
See also:
  LoadFromStream
  SaveToFile
  SaveToStream
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.LoadFromStream
Summary:
  Loads the lines from a stream into the list.
Description:
  Loads the text from a stream into the list. Each line in the stream, as indicated by
  a WideNull, LineFeed, CarriageReturn, VerticalTab, FormFeed, LineSeparator or
  ParagraphSeparator, is appended as a string in the list. If a byte-order mark is
  present in the stream it is assumed to be a Unicode text and read as such. If
  no byte-order mark is present it is assumed to be a ANSI text.
Parameters:
  Stream - The TStream from which to load the text.
Notes:
  The class remembers whether an opened stream originally contained Unicode by setting the SaveUnicode property appropriately.
See also:
  LoadFromFile
  SaveToFile
  SaveToStream
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Move
Summary:
  Moves a WideString from one position to another.
Description:
  Move moves the string at position CurIndex to position NewIndex. Both indices
  are zero based and if the WideString has an associated object, that object remains
  associated with it.  The remaining strings are reshuffled as appropriate.
Parameters:
  CurIndex - Zero based index of the WideString to move.
  NewIndex - Zero based index of the position to move the WideString to.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.SaveToFile
Summary:
  Saves the contents of the list to a file.
Description:
  SaveToFile writes the contents of the list to the specified file. The individual
  strings are separated by a carriage-return linefeed pair. SaveToFile uses the
  value of the SaveUnicode property to determine whether to save the contents as
  Unicode or ANSI text. If SaveUnicode is False the text is saved as ANSI and in
  the process is implicitly converted using the systems locale. However, if there
  exists a potential information loss the user is notified through
  the OnConfirmConversion
  event. If SaveUnicode is True the text is saved as Unicode but is first prepended
  with the BOM_LSB_FIRST value to identify the text as Unicode appearing in with
  the least-significant-byte first byte-order mark.
Parameters:
  FileName - Fully qualified name of the file to save the strings to.
Notes:
  Upon exit the Saved property is updated to reflect the result of the method.
See also:
  SaveToStream
  OnConfirmConversion
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.SaveToStream
Summary:
  Writes the contents of the list to a stream.
Description:
  SaveToStream writes the contents of the list to the specified stream. The individual
  strings are separated by a carriage-return linefeed pair. SaveToStream uses the
  value of the SaveUnicode property to determine whether to save the contents as
  Unicode or ANSI text. If SaveUnicode is False the text is saved as ANSI and in
  the process is implicitly converted using the systems locale. However, if there
  exists a potential information loss the user is notified through
  the OnConfirmConversion
  event. If SaveUnicode is True the text is saved as Unicode but is first prepended
  with the BOM_LSB_FIRST value to identify the text as Unicode appearing in with
  the least-significant-byte first byte-order mark.
Parameters:
  Stream - TStream descendant to write the strings to.
  WithBOM - WithBOM determines whether to write a Byte Order Mark or not. Note: when saved as ANSI text there will never be a BOM.
Notes:
  Upon exit the Saved property is updated to reflect the result of the method.
See also:
  SaveToFile
  OnConfirmConversion
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.SetText
Summary:
  Sets the text property.
Description:
  SetText replaces the list with the strings specified by the Value parameter. This
  method assumes that the individual strings are separated by a WideNull, LineFeed,
  CarriageReturn, VerticalTab, FormFeed, LineSeparator or ParagraphSeparator.
Parameters:
  Value - WideString containing the strings with which to replace the current contents.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Capacity
Summary:
  Indicates the number of items the list can hold.
Description:
  Capacity determines the number of strings that the list can hold without having
  to resize/reallocate the internal storage. For TWideStrings reading Capacity
  returns the Count property and setting Capacity does nothing. Descendant classes
  can, and usually will, override this behavior in an appropriate manner.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.CommaText
Summary:
  Lists the WideStrings in the TWideStrings in system data format (SDF).
Description:
  CommaText gets or sets all the strings in the TWideStrings object in a single
  comma-delimited string. Strings in the list that include spaces, commas or quotes will be
  contained in double quotes; any double quotes in a string will be repeated.
  For example, if the list contains the following strings:
  Hell,o 1
  Hel"lo 2
  Hello 3
  Hello4
  CommaText will return:
  "Hell,o 1","Hel""lo 2","Hello 3",Hello4
  To assign CommaText, create the string as SDF formatted text. The SDF
  format specifies strings are to be separated by commas or spaces and optionally enclosed in
  double quotes. Double quote marks that occur within the string are repeated to
  distinguish them from the quotes that surround the string. If a space or comma
  occurs within the string, the string must be enclosed in double quotes or the space or
  comma will be treated as a delimiter. To indicate an empty string, enter two commas next
  to each other. Spaces that appear next to another delimiter are ignored (white space). For
  example, suppose CommaText is set to:
  "Hel,lo 1", "He""llo 2" , Hello 3,Hello4
  The list will then contain:
  Hel,lo 1
  He"llo 2
  Hello
  3
  Hello4
Notes:
  TODO - Description is copied from VCL helpfile. Rewrite to avoid cp issues!!!
  BLW - Check rewrite
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Count
Summary:
  Represents the number of strings in the list.
Description:
  Abstract property which indicates the number of WideStrings in the list. You can
  use this property to iterate over all the items in the list. When doing so keep
  in mind that the Strings property accepts a zero based index and as such the
  last string in the list is at index Count - 1.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Objects
Summary:
  Represents the set of objects associated with the strings.
Description:
  Objects contains a set of objects associated with the strings contained in the
  list. Reading the Objects property in TWideStrings returns nil and setting this
  property does nothing. Descendant classes can, and usually will, override this
  behavior to allow you to associate objects with the strings. The Objects and
  Strings properties are in synch, that is, the object at index zero is the object
  associated with the string at index 0, the same goes for index 1, 2, ... Count - 1.
  If a string is not associated with an object, reading the Objects property returns nil.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Values
Summary:
  Retrieves the Value part if the list contains strings of the form Name=Value.
Description:
  When the list contains strings of the form Name=Value you can use the Values
  property to get or set the Value part of these strings. Name is the name part of
  the string whose Value you want to get or set. If the list does not contain a
  string with the specified Name, reading this property will return an empty string
  and writing will cause the string to be added to the list. Setting the Value part
  to an empty string causes the entire WideString to be deleted from the list.
See also:
  Names
  Items
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Names
Summary:
  Retrieves the Name part if the list contains strings of the form Name=Value.
Description:
  When the list contains strings of the form Name=Value you can use the Names
  property to access the Name part of these strings. Index is the zero based index
  of the string whose name part to retrieve. If the string is not of the form
  Name=Value the property will return an empty string.
See also:
  Values
  Items
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.NormalizationForm
Summary:
  Determines in which form Unicode strings should be stored
Description:
  NormalizationForm determines in which form Unicode strings should be stored.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Saved
Summary:
  Reflects the result of saving the list to a file or stream.
Description:
  The Saved property reflects the result of the last SaveToFile and/or SaveToStream
  method call. If that call actually wrote the list to a file or stream, this property
  is set to True, in all other cases it is set to False.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.SaveUnicode
Summary:
  Determines if the class saves data as Unicode or ANSI.
Description:
  Determines whether the SaveToFile and SaveToStream methods write the data as
  Unicode or ANSI. If set to True these methods save the data as Unicode, if set
  to False the data is implicitly converted to and saved as ANSI. In the latter
  case the OnConfirmConversion event may be fired if the conversion would have the
  potential of information loss.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Strings
Summary:
  Represents the set of WideStrings managed by the class.
Description:
  Partial abstract property which contains the set of strings managed by the class.
  Descendant classes must implement the Get method (Put is implemented
  through Delete and Insert). Reading the Strings property returns the WideString
  at the position indicated by the zero based index. Setting the property sets the
  WideString at the specified index. Note that a possibly associated object is not
  affected by this. Note that Strings is the default property for TWideStrings and
  as such can be omitted when reading the Strings property. For example
  MyWideStrings.Strings[0]
  is equivalent to
  MyWideStrings[0]
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Text
Summary:
  Lists the strings in the TStrings object as a single string with the individual strings delimited by carriage returns and line feeds.
Description:
  The Text property enables you the get or set the contents of the string in the
  list as a single WideString. Reading the Text property returns a WideString with
  the individual strings separated by a carriage-return linefeed pair, setting the
  Text property replaces the list with the contents of the supplied WideString.
  The supplied string is separated into individual strings based on the presence
  of a carriage-return or linefeed (they don't have to appear in pairs). An
  alternative to the Text property is the CommaText property.
See also:
  CommaText
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@OnConfirmConversion
<GROUP Unicode.TWideStrings>
Description:
  When saving the list to a file or stream the class uses the SaveUnicode property
  to determine whether to save the list as Unicode or ANSI. If the SaveUnicode
  property is False the list is implicitly converted to and saved as ANSI. However,
  this potentially results in information loss if the list contains strings with
  characters that are not from the ANSI set (e.g. with values above $00FF). In this
  case the Save methods fire the OnConfirmConversion event to allow the user to
  reconsider the decision on how to save the data. Usually you will want to
  either save as Unicode instead or abort entirely. To save as Unicode instead you
  can set the SaveUnicode property from within the event handler. To abort the
  saving you can set the Allowed parameter of the event to False (it is True when the
  event is triggered so there is no need to explicitly assign True). If there is
  no event handler attached the save is implicitly aborted. You can use the Saved
  property to check whether the list was actually saved.
See also:
  CommaText
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.DefineProperties
Summary:
  DefineProperties registers the Text property as a private property for streaming.
Description:
  DefineProperties registers the Text property as a private property for streaming.
  This is necessary due to a bug in the handling of text DFM's in Classes.pas which
  prevents WideStrings from loading under certain circumstances. Zbysek Hlinka
   (zhlinka@login.cz) brought this to my attention and also supplied a solution.
  See ReadData and WriteData methods for implementation details.
Parameters:
  Filer - The TFiler object. See TPersistent.DefineProperties in the VCL help for information.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Error
Summary:
  Utility method which raises an EStringListError exception.
Description:
  Error is a utility method used by various other methods for raising an
  EStringListError exception.
Parameters:
  Msg - The runtime error message to display in the exception dialog box. The exception object is created with the CreateFmt constructor and as such this message can contain an integer format specifier.
  Data - The Data argument is passed to the CreateFmt constructor of the EStringListError constructor as its Args parameter and as such replaces the first format specifier found in the Msg argument.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Get
Summary:
  Abstract property read method for the Strings property.
Description:
  Get is the abstract property read method for the Strings property. Descendant
  classes must implement this method and return a WideString given an Index.
Parameters:
  Index - Zero based Index of the WideString. The Index must be between 0 and Count - 1 (inclusive).
Result:
  The WideString at the specified Index. If the specified Index is invalid an
  exception is raised.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.GetCapacity
Summary:
  Property read method of the Capacity property.
Description:
  Property read method of the Capacity property.
  Capacity determines the number of strings that the list can hold without having
  to resize/reallocate the internal storage. The TWideStrings implementation simply
  returns the number of strings in the list by querying the Count property. However,
  descendant classes can, and usually will, override this method to return the
  actual capacity of the list.
Result:
  The capacity of the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.GetCount
Summary:
  Property read method of the Count property.
Description:
  GetCount is the abstract property read method of the Count property. Descendant
  classes must implement this method and return the number of items in the Strings
  list.
Result:
  The number of strings in the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.GetObject
Summary:
  Property read method of the Objects property.
Description:
  GetObject is the abstract property read method of the Objects property. Descendant
  classes must implement this method and return the Object at the specified Index.
Parameters:
  Index - The zero based index of the object to retrieve. The index must be between 0 and Count - 1 (inclusive).
Result:
  The TObject at the specified index. If the index is invalid an exception is raised.
  If no object exists at the specified index the method returns nil.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.GetText
Summary:
  Property read method of the Text property.
Description:
  GetText is the property read method of the Text property. Its purpose is to
  list the strings in the TWideStrings object as a single string with the individual
  WideStrings delimited by carriage returns and line feeds. The default implementation
  of this method is usually sufficient, however, descendant classes can override
  this method to provide a faster implementation. Note that this method is also
  called internally by the GetText method.
Result:
  The WideStrings in the list as a single string with the individual strings delimited
  by a carriage return - linefeed.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.Put
Summary:
  Property write method of the Strings property.
Description:
  Put is the property write method of the Strings property. In TWideStrings Put
  does nothing. It is up to descendant classes to override this method and
  implement it in an appropriate manner.
Parameters:
  Index - The zero based index of the WideString to set.
  S - New value for the WideString at the specified Index.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.PutObject
Summary:
  Property write method of the Objects property.
Description:
  PutObject is the property write method of the Objects property. In TWideStrings
  PutObject does nothing. It is up to descendant classes to override this method
  and implement it in an appropriate manner.
Parameters:
  Index - The zero based Index of the object to set.
  AObject - The object to place at the specified index.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.SetCapacity
Summary:
  Property write method of the Capacity property.
Description:
  SetCapacity is the property write method of the Capacity property. In TWideStrings
  the SetCapacity does not do anything. Descendant classes can optionally override
  this method to implement a capacity scheme. In this case the SetCapacity method
  should take steps to ensure that the list of WideStrings is expanded in such a
  manner that the list will not have to be reallocated again until the list holds more
  than Capacity number of strings.
Parameters:
  NewCapacity - The new capacity for the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.SetUpdateState
Summary:
  Called whenever the update state of the class changes.
Description:
  SetUpdateState is called whenever the update state of the class changes. Thus,
  it is called for each first BeginUpdate and for each last EndUpdate. SetUpdateState
  in TWideStrings is merely a place-holder and does nothing. Descendant classes
  can override this method to receive notification of changes to the update state.
Parameters:
  Updating - Denotes the current state of the class. If True the state has just switched to the update state, if False the state just changed to normal (non-update). Thus, when BeginUpdate is called, SetUpdateState is called with True as its argument.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStrings.SetLanguage
Description:
  SetLanguage is the property write method of the Language property. The TWideStrings
  implementation does nothing except store the new value. Descendant classes may
  override this method to respond to language changes such as re-sorting the list.
Parameters:
  Value - The new language locale.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList
<GROUP Unicode.TWideStringList>
Description:
  TWideStringList is a TWideStrings descendant which maintains a list of WideStrings.
  The class implements the abstract methods of TWideStrings and introduces some new
  methods and properties to:
      * Search for WideStrings in the list.
      * Sort the WideStrings in the list.
      * Prohibit duplicates from being inserted into the list.
      * Respond to changes in the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Add
Summary:
  Adds a WideString to the end of the list.
Description:
  Adds a WideString to the list and returns the index of the new WideString. If the
  list is unsorted the string is appended to the list. If the list is sorted and
  the specified string does not exist in the list yet, the string is inserted at
  the correct position. If the string does exist the request is either ignored or
  an exception is raised depending on the value of the Duplicates property.
Parameters:
  S - The WideString to add at the end of the list.
Result:
  Zero based index of the newly inserted WideString.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Clear
Summary:
  Clears the list of WideStrings and associated objects.
Description:
  Clear clears the list of WideStrings and associated objects. Note that references
  to associated objects are removed, but the objects themselves are not destroyed.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Delete
Summary:
  Deletes the item at a specified position.
Description:
  Delete is an abstract method implemented by descendant classes to delete an item
  at a specified position from the list. If the WideString has an associated object,
  the reference to that object (but not the object itself) is deleted as well.
Parameters:
  Index - Zero based index of the WideString to delete from the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Exchange
Summary:
  Swaps the WideStrings at the specified positions.
Description:
  Exchange swaps the strings at the specified positions. If either string has an
  associated object the objects are exchanged as well.
Parameters:
  Index1 - Index of the first WideString to exchange.
  Index2 - Index of the second WideString to exchange.
Notes:
  Do not call Exchange on a sorted list except to exchange two identical strings with different associated objects. Exchange does not check whether the list is sorted and as such calling it may destroy the sort order.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Find
Summary:
  Locates the position of a string in a sorted list and whether the string exists.
Description:
  Find returns the position in a sorted list where S should be inserted.
  If the specified string already exists the method returns True and Index contains
  its zero based index, if the string does not exist in the list the method returns
  False and Index contains the zero based index where S should be inserted. Note
  that you should use Find only for sorted lists. For an unsorted list use IndexOf
  instead.
Parameters:
  S - The string to search for.
  Index - The zero based index of S or the position in the list where S should be inserted if it does not exist in the list yet.
Result:
  If the specified string exists in the list the method returns True, otherwise it
  returns False.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.IndexOf
Summary:
  Returns the position of a string in the list.
Description:
  IndexOf Returns the zero-based index of the first occurrence of S in the list. If
  S is not found the method returns -1.
Parameters:
  S - The string for which you want to know the index of the first occurrence.
Result:
  Zero based index of the first occurrence of S in the list. If S does not exist in
  the list -1 is returned.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Insert
Summary:
  Inserts a WideString at a specific position.
Description:
  Insert inserts a WideString at a specific position
  within the list. Index denotes the zero based position at which to insert,
  specifying 0 will insert at the beginning (first position) of the list, 1 will
  insert at the second position etc. Note that you cannot insert a string into a
  sorted list. An attempt to do so raises an exception.
Parameters:
  Index - The zero based index at which to insert the new string.
  S - The string to insert at the specified position.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Sort
Summary:
  Sorts the strings in the list.
Description:
  Sorts the strings in the list in ascending order. Note that the sort procedure
  uses the Language property to determine the sort order of the strings.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Changed
Summary:
  Called every time after a change has occurred to the list.
Description:
  Changed is called every time after a change has occurred to the list. If the list
  is being updated Changed does nothing, otherwise it fires the OnChange event.
See also:
  Changing
  OnChange
  OnChanging
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Changing
Description:
  Changing is called every time before a change is about to be made to the list. If
  the list is being updated Changing does nothing, otherwise it fires the
  OnChanging event.
See also:
  Changed
  OnChange
  OnChanging
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Get
Summary:
  Property read method for the Items property.
Description:
  Get is the property read method for the Items property. Get returns the string
  at the specified index or raises an exception if the Index is invalid.
Parameters:
  Index - Zero based index of the string to retrieve. Must be in the range 0 to Count - 1 or an exception is raised.
Result:
  The string at the specified index. If the index is invalid an exception is raised.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.GetCapacity
Summary:
  Property read method of the Capacity property.
Description:
  GetCapacity is the property read method of the Capacity property. GetCapacity
  returns the current capacity of the list which equals the maximum number of
  strings the list can hold without having to resize its internal data structures.
Result:
  Capacity of the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.GetCount
Summary:
  Property read method of the Count property.
Description:
  GetCount is the property read method of the Count property. GetCount returns the
  number of strings that are currently in the list.
Result:
  The number of strings in the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.GetObject
Summary:
  Property read method of the Objects property.
Description:
  GetObject is the property read method of the Objects property. GetObject returns
  the object reference associated with the string at the specified Index. If no
  object is associated with that string GetObject returns nil.
Parameters:
  Index - Zero based index of the string for which you want to retrieve the associated object. Index must be within the range 0 to Count - 1 or an exception is raised.
Result:
  The object associated with the string at the specified index or nil if the string
  has no associated object.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Put
Summary:
  Property write method of the Items property.
Description:
  Put is the property write method of the Items property. Put sets the value of
  the string at the specified index which must be in the range 0 to Count - 1 or
  an exception is raised. Note that Put cannot be used to insert a string into
  a sorted list.
Parameters:
  Index - Zero based index of the string whose value you want to change.
  S - The new value for the string at the specified index.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.PutObject
Summary:
  Property write method of the Objects property
Description:
  PutObject is the property write method of the Objects property. PutObject associates
  the string at the specified index with the supplied object. Index must be in the
  range 0 to Count - 1 or an exception is raised.
Parameters:
  Index - Zero based index of the string with which the specified object should be associated.
  AObject - The object with which to associate the string at the specified index.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.SetCapacity
Summary:
  Property write method of the Capacity property.
Description:
  SetCapacity is the property write method of the Capacity property. SetCapacity
  resizes the internal data structures used by TWideStringList to store its items so
  that subsequent additions to the list do not need to resize them until the
  Capacity is reached. This can significantly increase overall performance when
  adding strings to the list.
Parameters:
  NewCapacity - The new capacity for the list.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.SetUpdateState
Summary:
  Called when the update state changes.
Description:
  SetUpdateState is called whenever the update state of the list changes. The update
  state of the list is considered changed when the update count either becomes zero
  or changes from zero to non-zero. The update count is changed by the user calling
  BeginUpdate or EndUpdate.
Parameters:
  Updating - True if the list enters the update state (update count larger than 0) otherwise False.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.SetLanguage
Summary:
  The property write method of Language property.
Description:
  SetLanguage is the property write method of Language property. The TWideStringList
  implementation does nothing except store the new value and re-sort the list.
Parameters:
  Value - The locale of the new language.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Duplicates
Summary:
  Specifies whether duplicate items can be added to the list.
Description:
  Set Duplicates to specify what should happen when an attempt is made to add
  duplicate strings to the list. Duplicates can have the following values:
    * dupIgnore Ignores attempts to add duplicate strings to the list.
    * dupAccept Permits duplicate strings in the list.
    * dupError Raises an exception when an attempt is made to add a string that already exists.
  Note that setting Duplicates when the list is not empty does not affect those
  strings already in the list. Therefore you should set Duplicates before adding
  items or clear the list first. Also note that Duplicates has no effect on a list
  which is not sorted.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@TWideStringList.Sorted
Summary:
  Specifies whether the strings in the list should be sorted.
Description:
  Setting sorted to True causes the strings in the list to be sorted in ascending
  order. Using Add to insert a string into a sorted list automatically inserts it
  at the appropriate position. Setting sorted to False will enforce no ordering on
  the strings in the list. You can use the Insert method to insert items into an
  unsorted list at an arbitrary position or Add to add a string to the end of the
  list.
Notes:
  Do not use Insert to add an item into a sorted list.
  The order of the strings in a sorted list is determined using the Language property.
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@OnChange
<GROUP Unicode.TWideStringList>
Summary:
  Occurs immediately after the list of strings has changed.
Description:
  The OnChange event is fired immediately after the list of strings has changed.
  The changes that cause an OnChange event are addition, deletion, moving (e.g. exchange)
  and the modification of a string. Note that before the modification is made
  the OnChanging event is fired.
Notes:
  This event is only fired when the UpdateCount is 0 (BeginUpdate and EndUpdate calls are balanced).
See also:
  OnChanging
Donator:
  Mike Lischke
--------------------------------------------------------------------------------
@@OnChanging
<GROUP Unicode.TWideStringList>
Summary:
  Occurs immediately before the list of strings is changed.
Description:
  The OnChanging event is fired immediately before changes are made to the list of
  strings. Changes that cause an OnChange event are addition, deletion, moving (e.g.
  exchange) and the modification of a string. Note that after the modification is
  made the OnChange event is fired.
Notes:
  This event is only fired when the UpdateCount is 0 (BeginUpdate and EndUpdate calls are balanced).
See also:
  OnChange
Donator:
  Mike Lischke