Hi,
I think you should use a DateTime field, as you are doing, for the TimeIn and TimeOut fields. However, if you want the form to show only the time, you need to format that yourself. In other words, don't bind the value you show to the TimeIn field, at least not directly.
I am suggesting you would not specify a ControlSource for the textbox that shows and allows entry for TimeIn. In the Refresh() you must put code that shows the text that you want.
PROCEDURE Refresh()
This.Value = SUBSTR(TTOC(TimeIn),10)
In the Valid() you will need to insure that a valid time has been entered, and there you can parse it and save it--REPLACE TimeIn WITH (DATETIME(nYear,nMonth,nDay,nHours,nMinutes,nSeconds)). There you must determine with what date to prefix the time. If the date is unsure, you need a way for the user to specify it.
Charlie