Recent

Author Topic: [SOLVED] UTF8Encode(String(Chr(i)))  (Read 15604 times)

WickedDum

  • Full Member
  • ***
  • Posts: 211
Re: UTF8Encode(String(Chr(i)))
« Reply #15 on: August 30, 2016, 03:45:37 am »
Thanks.  I have a better handle on Unicode now... 

Why are you using 'WinCPToUTF8' instead of 'UnicodeToUTF8'?

BTW -
Code: Pascal  [Select]
  1.   for i := 0 to 255 do
  2.     Memo1.Items.Add('Ascii ' + IntToStr(i) + ' = ' + WinCPToUTF8(String(Chr(i)))  );

didn't work for me.  Neither did

Code: Pascal  [Select]
  1.   for i := 0 to 255 do
  2.     Memo1.Lines.Add('Ascii ' + IntToStr(i) + ' = ' + WinCPToUTF8(String(Chr(i)))  );


What am I doing wrong?
Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0

shobits1

  • Sr. Member
  • ****
  • Posts: 278
  • .
Re: UTF8Encode(String(Chr(i)))
« Reply #16 on: August 30, 2016, 04:33:30 am »
Code: Pascal  [Select]
  1.   for i := 0 to 255 do
  2.     Memo1.Items.Add('Ascii ' + IntToStr(i) + ' = ' + WinCPToUTF8(String(Chr(i)))  );
  3.  
Are you sure TMemo have Items property?

didn't work for me.  Neither did
Code: Pascal  [Select]
  1.   for i := 0 to 255 do
  2.     Memo1.Lines.Add('Ascii ' + IntToStr(i) + ' = ' + WinCPToUTF8(String(Chr(i)))  );

Works, just fine for me.

shobits1

  • Sr. Member
  • ****
  • Posts: 278
  • .
Re: UTF8Encode(String(Chr(i)))
« Reply #17 on: August 30, 2016, 05:31:24 am »
@WickedDum
The picture you attached is related to DOS (or console if you want) code page and not the windows code page (two different thing as I understand).

Actually the result you got by using WinCPToUTF8 and CP1252ToUTF8 are correct; in CP1252 there are no character at 129, 141, 143, 144 and 157 check this:
https://en.wikipedia.org/wiki/Windows-1252

using UnicodeToUTF8 won't help you either, cause character from 128 to 159 are all control character, check this:
https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)

Now, what can you do?
is this what you want https://en.wikipedia.org/wiki/Code_page_850
if yes, then it's simple you need to convert character from DOS code page 850 to UTF8 and Lazarus happened to have just what you need, you can use CP850ToUTF8 under LConvEncoding unit.

further reading: https://en.wikipedia.org/wiki/Extended_ASCII


WickedDum

  • Full Member
  • ***
  • Posts: 211
Re: UTF8Encode(String(Chr(i)))
« Reply #18 on: August 30, 2016, 07:11:32 am »
  %)   I'M NOT SURE ABOUT ANYTHING!!!   %)

CP850 us not what I wanted per se, it's only that I remember it as THE ASCII chart.  Thank you for clarifying that for me!  Have a beer on me!!!

I found no 'Items' property, but I am a novice at this.  What did you do to get 'Memo1.Lines.Add' to work? 

Better question:  How do I get rid of the ListBox form and get a Memo form?   I changed it under the Tform1 class declaration and in the Object Inspector and Code Explorer.  I did a 'Clean up & Build', too.

Thanks!!
Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0

shobits1

  • Sr. Member
  • ****
  • Posts: 278
  • .
Re: UTF8Encode(String(Chr(i)))
« Reply #19 on: August 30, 2016, 02:35:42 pm »
I found no 'Items' property, but I am a novice at this.  What did you do to get 'Memo1.Lines.Add' to work? 
Exactly there is no Items property.
As for Memo1.Lines.Add it should work. http://wiki.freepascal.org/TMemo#Insert_lines_directly... what errors you are getting.

Better question:  How do I get rid of the ListBox form and get a Memo form?   I changed it under the Tform1 class declaration and in the Object Inspector and Code Explorer.  I did a 'Clean up & Build', too.
Simply delete the ListBox (on the form GUI) and insert/add TMemo .
you can also do select ListBox --> right click --> Change Class --> New Class = TMemo

lainz

  • Hero Member
  • *****
  • Posts: 3270
    • Lainz
Re: UTF8Encode(String(Chr(i)))
« Reply #20 on: August 30, 2016, 03:01:11 pm »
Thanks.  I have a better handle on Unicode now... 

Why are you using 'WinCPToUTF8' instead of 'UnicodeToUTF8'?

BTW -
Code: Pascal  [Select]
  1.   for i := 0 to 255 do
  2.     Memo1.Items.Add('Ascii ' + IntToStr(i) + ' = ' + WinCPToUTF8(String(Chr(i)))  );

didn't work for me.  Neither did

Code: Pascal  [Select]
  1.   for i := 0 to 255 do
  2.     Memo1.Lines.Add('Ascii ' + IntToStr(i) + ' = ' + WinCPToUTF8(String(Chr(i)))  );


What am I doing wrong?

Sorry I copy/paste the wrong code. Use UnicodeToUTF8

Code: Pascal  [Select]
  1. uses
  2.   LazUTF8;

Code: Pascal  [Select]
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3.   i: integer;
  4. begin
  5.   for i := 0 to 255 do
  6.     Memo1.Lines.Add(UnicodeToUTF8(i));
  7. end;    
   

But as suggested you need an extra step:

Code: Pascal  [Select]
  1. uses
  2.   LazUTF8, LConvEncoding;
  3.  

Code: Pascal  [Select]
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3.   i: integer;
  4. begin
  5.   for i := 0 to 255 do
  6.     Memo1.Lines.Add(CP850ToUTF8(UnicodeToUTF8(i)));
  7. end;  

And it does like this:

Code: Pascal  [Select]
  1. !
  2. "
  3. #
  4. $
  5. %
  6. &
  7. '
  8. (
  9. )
  10. *
  11. +
  12. ,
  13. -
  14. .
  15. /
  16. 0
  17. 1
  18. 2
  19. 3
  20. 4
  21. 5
  22. 6
  23. 7
  24. 8
  25. 9
  26. :
  27. ;
  28. <
  29. =
  30. >
  31. ?
  32. @
  33. A
  34. B
  35. C
  36. D
  37. E
  38. F
  39. G
  40. H
  41. I
  42. J
  43. K
  44. L
  45. M
  46. N
  47. O
  48. P
  49. Q
  50. R
  51. S
  52. T
  53. U
  54. V
  55. W
  56. X
  57. Y
  58. Z
  59. [
  60. \
  61. ]
  62. ^
  63. _
  64. `
  65. a
  66. b
  67. c
  68. d
  69. e
  70. f
  71. g
  72. h
  73. i
  74. j
  75. k
  76. l
  77. m
  78. n
  79. o
  80. p
  81. q
  82. r
  83. s
  84. t
  85. u
  86. v
  87. w
  88. x
  89. y
  90. z
  91. {
  92. |
  93. }
  94. ~
  95. 
  96. €
  97. 
  98. ‚
  99. ƒ
  100. „
  101. …
  102. †
  103. ‡
  104. ˆ
  105. ‰
  106. Š
  107. ‹
  108. Œ
  109. 
  110. Ž
  111. 
  112. 
  113. ‘
  114. ’
  115. “
  116. ”
  117. •
  118. –
  119. —
  120. ┬ÿ
  121. ™
  122. š
  123. ┬ø
  124. œ
  125. ┬Ø
  126. ┬×
  127. Ÿ
  128.  
  129. ¡
  130. ¢
  131. £
  132. ¤
  133. ¥
  134. ¦
  135. §
  136. ¨
  137. ┬®
  138. ª
  139. «
  140. ¬
  141. ­
  142. ®
  143. ¯
  144. ┬░
  145. ┬▒
  146. ┬▓
  147. ┬│
  148. ┬┤
  149. ┬Á
  150. ┬Â
  151. ┬À
  152. ┬©
  153. ┬╣
  154. ┬║
  155. ┬╗
  156. ┬╝
  157. ›
  158. 
  159. ┬┐
  160. À
  161. Á
  162. Â
  163. Ã
  164. Ä
  165. Å
  166. Æ
  167. Ç
  168. È
  169. É
  170. Ê
  171. Ë
  172. Ì
  173. Í
  174. Î
  175. Ï
  176. Ð
  177. Ñ
  178. Ò
  179. Ó
  180. Ô
  181. Õ
  182. Ö
  183. ×
  184. ├ÿ
  185. Ù
  186. Ú
  187. ├ø
  188. Ü
  189. ├Ø
  190. ├×
  191. ß
  192. à
  193. á
  194. â
  195. ã
  196. ä
  197. å
  198. æ
  199. ç
  200. è
  201. ├®
  202. ê
  203. ë
  204. ì
  205. í
  206. î
  207. ï
  208. ├░
  209. ├▒
  210. ├▓
  211. ├│
  212. ├┤
  213. ├Á
  214. ├Â
  215. ├À
  216. ├©
  217. ├╣
  218. ├║
  219. ├╗
  220. ├╝
  221. Û
  222. Ý
  223. ├┐
  224.  

shobits1

  • Sr. Member
  • ****
  • Posts: 278
  • .
Re: UTF8Encode(String(Chr(i)))
« Reply #21 on: August 30, 2016, 05:19:17 pm »
Hi lainz, is there a reason to call:
Memo1.Lines.Add(CP850ToUTF8(UnicodeToUTF8(i)));
and not directly
Memo1.Lines.Add(CP850ToUTF8(Chr(i)));  << this works just fine.

this is what I get from CP850ToUTF8(Chr(i))
Code: [Select]
Ascii 0 =
Ascii 1 = 
Ascii 2 = 
Ascii 3 = 
Ascii 4 = 
Ascii 5 = 
Ascii 6 = 
Ascii 7 = 
Ascii 8 = 
Ascii 9 =
Ascii 10 =

Ascii 11 =
Ascii 12 =
Ascii 13 =

Ascii 14 = 
Ascii 15 = 
Ascii 16 = 
Ascii 17 = 
Ascii 18 = 
Ascii 19 = 
Ascii 20 = 
Ascii 21 = 
Ascii 22 = 
Ascii 23 = 
Ascii 24 = 
Ascii 25 = 
Ascii 26 = 
Ascii 27 = 
Ascii 28 = 
Ascii 29 = 
Ascii 30 = 
Ascii 31 = 
Ascii 32 = 
Ascii 33 = !
Ascii 34 = "
Ascii 35 = #
Ascii 36 = $
Ascii 37 = %
Ascii 38 = &
Ascii 39 = '
Ascii 40 = (
Ascii 41 = )
Ascii 42 = *
Ascii 43 = +
Ascii 44 = ,
Ascii 45 = -
Ascii 46 = .
Ascii 47 = /
Ascii 48 = 0
Ascii 49 = 1
Ascii 50 = 2
Ascii 51 = 3
Ascii 52 = 4
Ascii 53 = 5
Ascii 54 = 6
Ascii 55 = 7
Ascii 56 = 8
Ascii 57 = 9
Ascii 58 = :
Ascii 59 = ;
Ascii 60 = <
Ascii 61 = =
Ascii 62 = >
Ascii 63 = ?
Ascii 64 = @
Ascii 65 = A
Ascii 66 = B
Ascii 67 = C
Ascii 68 = D
Ascii 69 = E
Ascii 70 = F
Ascii 71 = G
Ascii 72 = H
Ascii 73 = I
Ascii 74 = J
Ascii 75 = K
Ascii 76 = L
Ascii 77 = M
Ascii 78 = N
Ascii 79 = O
Ascii 80 = P
Ascii 81 = Q
Ascii 82 = R
Ascii 83 = S
Ascii 84 = T
Ascii 85 = U
Ascii 86 = V
Ascii 87 = W
Ascii 88 = X
Ascii 89 = Y
Ascii 90 = Z
Ascii 91 = [
Ascii 92 = \
Ascii 93 = ]
Ascii 94 = ^
Ascii 95 = _
Ascii 96 = `
Ascii 97 = a
Ascii 98 = b
Ascii 99 = c
Ascii 100 = d
Ascii 101 = e
Ascii 102 = f
Ascii 103 = g
Ascii 104 = h
Ascii 105 = i
Ascii 106 = j
Ascii 107 = k
Ascii 108 = l
Ascii 109 = m
Ascii 110 = n
Ascii 111 = o
Ascii 112 = p
Ascii 113 = q
Ascii 114 = r
Ascii 115 = s
Ascii 116 = t
Ascii 117 = u
Ascii 118 = v
Ascii 119 = w
Ascii 120 = x
Ascii 121 = y
Ascii 122 = z
Ascii 123 = {
Ascii 124 = |
Ascii 125 = }
Ascii 126 = ~
Ascii 127 = 
Ascii 128 = Ç
Ascii 129 = ü
Ascii 130 = é
Ascii 131 = â
Ascii 132 = ä
Ascii 133 = à
Ascii 134 = å
Ascii 135 = ç
Ascii 136 = ê
Ascii 137 = ë
Ascii 138 = è
Ascii 139 = ï
Ascii 140 = î
Ascii 141 = ì
Ascii 142 = Ä
Ascii 143 = Å
Ascii 144 = É
Ascii 145 = æ
Ascii 146 = Æ
Ascii 147 = ô
Ascii 148 = ö
Ascii 149 = ò
Ascii 150 = û
Ascii 151 = ù
Ascii 152 = ÿ
Ascii 153 = Ö
Ascii 154 = Ü
Ascii 155 = ø
Ascii 156 = £
Ascii 157 = Ø
Ascii 158 = ×
Ascii 159 = ƒ
Ascii 160 = á
Ascii 161 = í
Ascii 162 = ó
Ascii 163 = ú
Ascii 164 = ñ
Ascii 165 = Ñ
Ascii 166 = ª
Ascii 167 = º
Ascii 168 = ¿
Ascii 169 = ®
Ascii 170 = ¬
Ascii 171 = ½
Ascii 172 = ¼
Ascii 173 = ¡
Ascii 174 = «
Ascii 175 = »
Ascii 176 = ░
Ascii 177 = ▒
Ascii 178 = ▓
Ascii 179 = │
Ascii 180 = ┤
Ascii 181 = Á
Ascii 182 = Â
Ascii 183 = À
Ascii 184 = ©
Ascii 185 = ╣
Ascii 186 = ║
Ascii 187 = ╗
Ascii 188 = ╝
Ascii 189 = ¢
Ascii 190 = ¥
Ascii 191 = ┐
Ascii 192 = └
Ascii 193 = ┴
Ascii 194 = ┬
Ascii 195 = ├
Ascii 196 = ─
Ascii 197 = ┼
Ascii 198 = ã
Ascii 199 = Ã
Ascii 200 = ╚
Ascii 201 = ╔
Ascii 202 = ╩
Ascii 203 = ╦
Ascii 204 = ╠
Ascii 205 = ═
Ascii 206 = ╬
Ascii 207 = ¤
Ascii 208 = ð
Ascii 209 = Ð
Ascii 210 = Ê
Ascii 211 = Ë
Ascii 212 = È
Ascii 213 = ı
Ascii 214 = Í
Ascii 215 = Î
Ascii 216 = Ï
Ascii 217 = ┘
Ascii 218 = ┌
Ascii 219 = █
Ascii 220 = ▄
Ascii 221 = ¦
Ascii 222 = Ì
Ascii 223 = ▀
Ascii 224 = Ó
Ascii 225 = ß
Ascii 226 = Ô
Ascii 227 = Ò
Ascii 228 = õ
Ascii 229 = Õ
Ascii 230 = µ
Ascii 231 = þ
Ascii 232 = Þ
Ascii 233 = Ú
Ascii 234 = Û
Ascii 235 = Ù
Ascii 236 = ý
Ascii 237 = Ý
Ascii 238 = ¯
Ascii 239 = ´
Ascii 240 = ­
Ascii 241 = ±
Ascii 242 = ‗
Ascii 243 = ¾
Ascii 244 = ¶
Ascii 245 = §
Ascii 246 = ÷
Ascii 247 = ¸
Ascii 248 = °
Ascii 249 = ¨
Ascii 250 = ·
Ascii 251 = ¹
Ascii 252 = ³
Ascii 253 = ²
Ascii 254 = ■
Ascii 255 = 
« Last Edit: August 30, 2016, 05:23:13 pm by shobits1 »

lainz

  • Hero Member
  • *****
  • Posts: 3270
    • Lainz
Re: UTF8Encode(String(Chr(i)))
« Reply #22 on: August 30, 2016, 06:03:27 pm »
Hi lainz, is there a reason to call:
Memo1.Lines.Add(CP850ToUTF8(UnicodeToUTF8(i)));
and not directly
Memo1.Lines.Add(CP850ToUTF8(Chr(i)));  << this works just fine.

I'm not sure, both get different results.

wp

  • Hero Member
  • *****
  • Posts: 6301
Re: UTF8Encode(String(Chr(i)))
« Reply #23 on: August 30, 2016, 06:53:32 pm »
Why should you need UnicodeToUTF8() here? CP850ToUTF8 converts characters encoded in the old DOS code page 850 to UTF8. And UTF8 is just what the LCL requires for the memo.
« Last Edit: August 30, 2016, 07:03:37 pm by wp »
Lazarus trunk / fpc 3.0.4 / all 32-bit on Win-10

WickedDum

  • Full Member
  • ***
  • Posts: 211
Re: UTF8Encode(String(Chr(i)))
« Reply #24 on: August 31, 2016, 07:07:49 pm »
Gentlemen, 

Thank you for these examples!  They are VERY educational.

And UTF8 is just what the LCL requires for the memo.

Could you elaborate on that please?

Thanks!

Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0

JuhaManninen

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 3644
  • I like bugs.
Re: UTF8Encode(String(Chr(i)))
« Reply #25 on: August 31, 2016, 08:30:27 pm »
And UTF8 is just what the LCL requires for the memo.
Could you elaborate on that please?

I think wp was very clear about it. LCL uses UTF8 unlike Delphi which uses UTF16. Learn more:
 http://wiki.lazarus.freepascal.org/Better_Unicode_Support_in_Lazarus

I wonder why you want to list console codepage extended ANSI characters in a GUI application. Not very useful.
There are many other things you can do with for loops, in case the goal is to practice them.

WickedDum

  • Full Member
  • ***
  • Posts: 211
Re: UTF8Encode(String(Chr(i)))
« Reply #26 on: September 01, 2016, 01:45:55 am »
Good afternoon!

I think wp was very clear about it. LCL uses UTF8 unlike Delphi which uses UTF16.

I wonder why you want to list console codepage extended ANSI characters in a GUI application. Not very useful.
There are many other things you can do with for loops, in case the goal is to practice them.

I asked wp for clarification of the entire statement.  UTF8 is the parameter or construct that the LCL requires.  (I don't know the LCL yet.)  But, what memo is he addressing?

As for my 'why', I mentioned earlier that I am learning.  I am a visual and logical learner.  I am just now learning what LCL stands for...let alone understanding it...   :(

I know for loops really well.  I just needed to understand why the "new GUI" syntax did not display it the way I am used to seeing it.  Logically, with my 'back-in-the-day' mentality, why use something when it doesn't display everything?

I am very familiar with the old ASCII charts.  shobits1 explained it well.  It was real easy for me to understand:  "CP850ToUTF8 under LConvEncoding unit".  (As soon as I looked up LConvEncoding.) ;)

Soooo, here's the current code:
Code: Pascal  [Select]
  1. uses
  2.   LazUTF8, SysUtils, Messages, Classes, Graphics, Controls,
  3.   Forms, Dialogs, StdCtrls, LConvEncoding ;
  4.  
  5. type
  6.   TForm1 = class(TForm)
  7.     Memo1: TMemo;
  8.     procedure FormCreate(Sender: TObject);
  9. ...
  10. var
  11.   Form1: TForm1;
  12. ...
  13. Memo1.Lines.Add( 'Ascii ' + IntToStr(i) + ' = ' + UnicodeToUTF8(i) );
I finally got it to compile, but why does it not display?  I get the tall skinny 'ListBox1 window' with no ASCII values or characters...  :(

Gentlemen, you ALL have been a GREAT help to me in my current adventure!  I really appreciate it!
Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0

lainz

  • Hero Member
  • *****
  • Posts: 3270
    • Lainz
Re: UTF8Encode(String(Chr(i)))
« Reply #27 on: September 01, 2016, 05:04:41 pm »
It not display because you need to change the Memo1 property Scrollbars to ssAutoBoth. Then you can scroll down to see all items. You can change it with the Object Inspector window at the left.

wp

  • Hero Member
  • *****
  • Posts: 6301
Re: UTF8Encode(String(Chr(i)))
« Reply #28 on: September 01, 2016, 05:54:55 pm »
I asked wp for clarification of the entire statement.  UTF8 is the parameter or construct that the LCL requires.  (I don't know the LCL yet.)  But, what memo is he addressing?
OK... LCL is the abbreviation of the "Lazarus Component Library", this is the framework behind the components which you find in the Lazarus component palette (roughly speaking). All these components (eg. a TListbox, a TMemo, a TEdit, a TLabel etc) use characters which are encoded in UTF8. UTF8 is able to display "all" characters. In UTF8 each character consists of 1 to 4 bytes. The first 128 characters, the "ASCII" characters, consist of 1 byte, their UTF8 encoding is identical to the old ASCII code.

Delphi on the other hand, uses UTF16 characters which consist of two bytes, and this results in "widestrings" or "unicodestrings" (the latter is a very confusing name because UTF8 is unicode as well...). The component library of Delphi is called VCL ("visual component library").

For writing a Lazarus program you normally do not need widestrings, only in a very few cases. Normally you can do everything with UTF8.

If you want to list the first 128 characters you can just simply add them to the lines of a TMemo or the Items of a TListbox - just because ASCII = UTF8 in this special case. If the counting variable in the for loop is an integer you must cast it to a character because the Add method wants a string (or character); or you can use a char as counting variable as well:

Code: Pascal  [Select]
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3.   ch: char;
  4. begin
  5.   for ch:=#0 to #127 do
  6.     Listbox1.Items.Add('Char #' + IntToStr(ord(ch)) + ': ' + ch);
  7. end;
  8. { or:
  9. var
  10.   i: Integer;
  11. begin
  12.   for i:=0 to 127 do
  13.     Listbox1.Items.Add('Char #' + IntToStr(i) + ': ' + chr(i));  // or "char(i)" instead of "chr(i)"
  14. end;
 
But in your first post you had the list running up to 255 and you were referring to the Extended Ascii codes. The old DOS code page 850 used the upper half of the character byte for these characters in a standardized way. This was easy, but these old programs were not able to display "foreign" characters. In case of UTF8, i.e. Lazarus, a second byte is used to encode these characters. And you must tell Lazarus from which codepage your characters originate. In case of code page 850 you call CP850ToUTF8 to convert the old DOS characters to UTF8. This function, of course, also handle the first 128 characters correctly:

Code: Pascal  [Select]
  1. uses
  2.   LConvEncoding;
  3.  
  4. procedure TForm1.FormCreate(Sender: TObject);
  5. var
  6.   ch: char;
  7. begin
  8.   for ch:=#0 to #255 do
  9.     Listbox1.Items.Add('Char #' + IntToStr(ord(ch)) + ': ' + CP850ToUTF8(ch));
  10. end;
  11. { or:
  12. var
  13.   i: Integer;
  14. begin
  15.   for i:=0 to 127 do
  16.     Listbox1.Items.Add('Char #' + IntToStr(i) + ': ' + CP850ToUTF8(chr(i)));  // or "char(i)" instead of "chr(i)"
  17. end;
Lazarus trunk / fpc 3.0.4 / all 32-bit on Win-10

WickedDum

  • Full Member
  • ***
  • Posts: 211
[SOLVED] Re: UTF8Encode(String(Chr(i)))
« Reply #29 on: September 01, 2016, 08:33:32 pm »
Thank you!!!!

lainz: The SSAutoBoth did the trick.  It showed that the listbox field the instructor had originally used was too small to display them all.  When I saw the scrollbar, I knew the problem.  Thanx!!!

wp:   Thank you for the great explanation!!  I never thought about using CHAR instead of INTEGER.  I'll have to remember that for future constructs!

I have learned so much about Unicode, code pages, and UTF8 these past few days, my head hurts!  %)

Thank you all for thorough and endless assistance!  You have contributed immensely to my education!!

Until next time....   ;)
Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0