Preheat oven to 350 degrees F. Spray a large baking pan with no stick cooking spray. ( I use the disposable aluminum pans if transporting to an event).
Cut potatoes into thin slices; set aside in cold water.
In a large dutch oven or saucepan, melt the butter. Whisk in the flour until smooth. Slowly,add the half-and-half then milk, whisking constantly until well combined. Add the Velveeta. Allow to cook over low heat until mixture is thickened and cheese is melted, stirring constantly. Remove from the heat.
Drain water from potatoes. Arrange half of the potatoes in the pan. Season with salt and pepper. (Add any optional ingredients like ham). Add half of the onion slices and 3/4 cup shredded cheddar cheese. Pour about half of the milk/cheese sauce over the potatoes.
Repeat with remaining potatoes, onions, salt & pepper, 3/4 cup shredded cheddar cheese. Top with remaining milk/cheese sauce.
Cover with aluminum foil (sprayed with no stick spray). Bake about 1 to 1 1/2 hours until potatoes are tender. Remove from oven. Remove foil, sprinkle the remaining cheddar cheese and the parmesan cheese over the top. Bake, uncovered, about 15-20 minutes until cheeses are melted.
***if cheese sauce seems too thick, add additional milk to thin** I start with 2 cups of the milk and increase amount after that.