My first ever OOP attempt.
You managed to create a working program with no memory leaks.
That is an accomplishment in itself

Very basic at this stage.... includes:
A useful next step would be to make use of what is available in the 'Lazarus toolbox'.
Instead of building a linked list (what you probably have done many times before) you could use a TObjectList (unit contnrs) to store the data.
Make a class of ItemRec with it's own constructor and destructor and the methods that do all data handling.
One of the basics of OO is data encapsulation i.e. put the data you need and the methods that manipulate it in one and the same class.
Nah, nobody will force you to code certain way. However, you are seeking help from other programming community, and its only polite to present your code in a readable way. By readable, i mean if it's difficult to distinct what part of code belongs to which block, then not only is it much harder to find errors, its simply more difficult to even understand what the code does.
Indeed. Most time is spent reading code, not writing it.
And the easier it is to read, the easier it is to understand (and spot possible errors or better, assess that the code is indeed correct).
Yes, i put semicolon at end of code blocks too. It's weird that it's not required...
In pascal the semicolon is not so much a terminator as for example in C, but it's used to separate statements.
The good thing is that the extra semicolons don't do any harm.
Sorry, but the data needs to be copied to the allocated memory and 'array of char' is perfect for copying unknown data types.
'Data' is merely a placeholder to find the first memory location after the variables prev, next and ilen.
The type is irrelevant.
Actually you declared a dynamic array which is not the most obvious choice; it suggests that you somewhere have a need for the dynamic nature of that attribute.
A more common approach is to use a static array like 'array[0..1] of byte'.
TLinkedList.Curr should be declared as a local variable in the methods that use it, not an object attribute. It does not contain any information about the state of an object.
TLinkedList.ItemSize should not be there because of the flexible way the list is built: the sizes of the elements in the linked list can all be different.