Per oracle form concept - a data which is retrived (already stored) from table - on block -. If block changed , then only SYSTEM.BLOCK_STATUS - WILL BE be changed from query to CHANGED.
Non base table item for any action on modifaction/update - you should write your own codding.
SYSTEM.BLOCK_STATUS represents the status of a Data block where the cursor is located, or the
current data block during trigger processing. The value can be one of three character strings:
CHANGED Indicates that the block contains at least one Changed record.
NEW Indicates that the block contains only New records.
QUERY Indicates that the block contains only Valid records that have been
retrieved from the database.
I understand that there are sometimes reasons why your user maybe allowed to change fields which are not database fields, but why should they be able to save that (and what exactly is saved in this cases) ?
If you want to prevent forms from saving when there are no changes, you could create a KEY-COMMIT-trigger and check the :SYSTEM.FORM_STATUS in it before saving, something like
VALIDATE; IF :SYSTEM.FORM_STATUS='CHANGED' THEN COMMIT_FORM; END IF;