There are several properties which affect the axis limits. The one possibility with the highest priority is to use the elements of the Chart.Extent property. When you set Chart.Extent.YMin to 10 and turn on Chart.Extent.UseYMin the minimum of the y axis will always be 10 - no matter what the "real" minimum is. When you switch Chart.Extent.UseYMin back to false the axis minium will jump back to the minimum of the data. The maximum can be handled in the same way. But note that minimum and maximum must be in order, i.e. during switching values it must never happen that min > max - the chart does not like this.
In the demo I selected a different way based on the internal extents of the chart; these are rectangles (*) with the corner points of the chart area in axis units (well - not 100% exact: only when there are no axis transformations). The extent with axes scaled can be determined by Chart.GetFullExtent, and the data extent corresponding to the visible window is the Chart.LogicalExtent (there is also a Chart.CurrentExtent - it is almost the same but encloses also the margins around the sides of the chart). You can set the elements of this rectangle and force the corresponding axis limit to this value. Just study the attached demo and its code.
----
(*) The TDoubleRect, the data type of the extents, is a record containing the bottom/left and top/right corner points of the chart area as TDoublePoints a and b. And each TDoublePoint record has elements x and y for the x and y coordinates. So, when you have a TDoubleRect variable ext you can change the minium of the y axis by changing the element ext.b.y; and for, say, the maximum of the x axis you would need ext.b.x.