n=8;
colours = Hue /@ (Range[n]/n);

DynamicModule[
{pts, phs, hs},
pts = Sort[RandomReal[{-1,1},{n,2}]];
phs = Thread[{Range[n], hs=RandomReal[{-1,1}, {n}]}];
{
LocatorPane[
Dynamic[pts],
Graphics[Line[
{{-1,-1}, {-1,1}, {1,1}, {1,-1}, {-1,-1}}
]],
{{-1,-1},{1,1}},
Appearance -> Table[Style["*", colours[[i]]], {i,n}]
],
LocatorPane[
Dynamic[phs],
Graphics[{
Table[Line[{{i,-1},{i,1}}], {i,n}],
PointSize[Large],
Dynamic[Table[
{
colours[[i]],
Point[{phs[[i,1]]=i, phs[[i,2]]}]
},
{i,n}
]]
},
PlotRange -> {{0,n+1}, {-1,1}}, AspectRatio -> 1
],
{{0,-1},{n+1,1}},
Appearance -> None
],
Dynamic[
hs = Last /@ phs;
Graphics3D[
Table[
{colours[[i]],
Polygon[
{#[[1]], #[[2]], hs[[i]]+pts[[i]].#}& /@  {{-1,-1}, {-1,1}, {1,1}, {1,-1}}
]
},
{i,n}
],
Lighting -> "Neutral"
]
]
}
]