So if we are talking about ProjTable related data, I would add a new UserId based field in table, something like inUseByUser. Lets say your user1 selects some record, this record is InMemory record and it was populated from ProjTable - then you need to update inUseByUser field in ProjTable with currUserId and make your record editable. As soon as this record is unselected, or user closes form, you need to clean up that field. In case second user opens the same form and selects the same record, your logic should validate projTable.inUseByUser() value, if it is not empty, record should be made editable.
Ideally, I wouldn't suggest to add inUseByUser. Instea, you can create your new table like projInUse, with two field ProjId and UserId. That should be faster compared to updating field in ProjTable. + you can cleanUp records from that table instead of cleaning up user value.