As I wrote in the wiki, that entire protection thing follows the concept of Excel etc: When you protect a sheet, NO cell can be changed. And you must remove the cell protection to make a specific cell writeable. It's the other way round... When you set CellProtection of cell [1,21] to an empty set you remove the cpLockCell element, and the cell can be written. If you omit the line with CellProtection the cell cannot be written - but no other cell can be written either.
That's the idea of Excel: block the entire sheet, and give access only to the cells in which the user is supposed to enter something. For a long time I had problems to understand why they do it this way. But basically, it is the correct way to do it: the majority of cells contains formulas, titles, captions etc and they should not be changeable by the user; only a few cells need to be accessible for user input.
The opposite logic, i.e. to have the entire sheet writeable, but block input only for a few cells, is not supported by concept. Only if you have a sheet limited in size then you can allow write access to all cells except for [1,21] by iterating over them and setting their CellProtection to [].
var
r, c: Integer;
...
for r :=0 to (lastRow) do
for c := 0 to (lastCol) do
if not ((c = 1) and (r = 21)) then
Grid.CellProtection[r, c] := [];