Delphi in a Nutshell by Ray Lischner This page contains errors corrected in the 1/01 reprint. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification (xi) The information in the "How to Contact Us" section has been updated. It now reads: How to Contact Us The information in this book has been tested and verified, but you may find that features have changed (or you may even find mistakes!). You can send any errors you find, as well as suggestions for future editions, to: O'Reilly & Associates, Inc. 101 Morris Street Sebastopol, CA 95472 (800) 998-9938 (in the United States or Canada) (707) 829-0515 (international or local) (707) 829-0104 (fax) There is a web page for this book, where we list any errata, examples, and additional information. You can access this page at: http://www.oreilly.com/catalog/9781565926592/ To ask technical questions or to comment on the book, send email to: bookquestions@oreilly.com For more information about our books, conferences, software, Resource Centers, and the O'Reilly Network, see our web site at: http://www.oreilly.com [12] The fourth line from the end in Example 1-7 did read: Data[Length(Data)] := Value; It now reads: Data[High(Data)] := Value; (183) In the second line of the first bulleted item in "Tips and Tricks," changed "attacking the DLL" to "attaching the DLL." <190> In line 7 of the example, changed "=" to ">", as in: if GetModuleFileName(Instance, FileName, SizeOf(FileName)) > 0 then (210) The third line of the example did read: TIntArray = array of Tnteger; Now reads: TIntArray = array of Integer; {334} The fourth line from the bottom did read: FillChar(Result[1], Length, Char); Now reads: FillChar(Result[1], Length, Fill); [514-515] Example B-4 has been changed to read as follows (lines 9, 10, 30, and 40 have changed): type TTrimType = (ttLeft, ttRight); TTrimTypes = set of TTrimType; // Trim space and control characters. // Handle multi-byte strings correctly. function AnsiTrim(const S: string; TrimType: TTrimTypes = [ttLeft, ttRight]): string; var Left, Right: 0..MaxInt; I: 0..MaxInt; begin Left := 1; Right := Length(S); if ttLeft in TrimType then begin I := 1; while I <= Length(S) do begin if S[I] in LeadBytes then Inc(I) else if Ord(S[I]) > Ord(' ') then Break; Inc(I); end; Left := I; end; if ttRight in TrimType then begin I := Length(S); while I >= Left do begin if ByteType(S, I) = mbTrailByte then Dec(I) else if Ord(S[I]) > Ord(' ') then Break; Dec(I); end; Right := I; end; Result := Copy(S, Left, Right-Left+1); end; {517} In the second to last line of the first paragraph, changed "ftCurrency" to "fvCurrency" and "ftExtended" to "fvExtended". It now reads: "ValueType (that is, fvCurrency or fvExtended)..." {524} In the second line of the first paragraph, changed "ftCurrency" to "fvCurrency" and "ftExtended" to "fvExtended". It now reads: "be fvCurrency or fvExtended and must match..." [540] In the code listing in the middle of the page, line 9 did read: "dwMinorVersion" Now reads: "Win32MinorVersion" Also, a semicolon has been added to the end of line 16, so that it reads: "Win32BuildNumber and $FFFF]);"