Manipulate[
Module[{ax,ay,bx,by,az,bz,c,δ},
{{ax,ay},{bx,by}}=ab;
az=ax+ay I; bz=bx+by I;
δ={0,.3};
Framed@Text@Graphics[{EdgeForm[Thick],ColorData[2,6],Rectangle[30{-1,-1},30{1,1}],
If[vb,{ColorData[2,5],Polygon[{{0,0},{1,0},{ax,ay}}],ColorData[2,3],Polygon[{{0,0},{bx,by},c={Re[az bz],Im[az bz]}}]},{}],
Style[{
Text[Style["o",Italic],{-.15,-.15}],
Text[Style["a",Italic],{ax,ay}+δ],
Text[Style["b",Italic],{bx,by}+δ],
Text[Row[{Style["a",Italic],Style["b",Italic]}],{Re[az bz],Im[az bz]}+δ]},
20,Black],
If[va,
Style[{
Text[Row[{Style["a",Italic]," = ",NumberForm[az,{5,1}]}],{-2.5,-1},{-1,0}],
Text[Row[{Style["b",Italic]," = ",NumberForm[bz,{5,1}]}],{-2.5,-1.4},{-1,0}],Text[Row[{Style["a",Italic],Style["b",Italic]," = ",NumberForm[az bz,{5,1}]}],{-2.5,-1.8},{-1,0}]
},20,Black],{}],Red,Disk[{Re[az bz],Im[az bz]},.05],Yellow,Disk[{Re[az],Im[az]},.05],Disk[{Re[bz],Im[bz]},.05]},PlotRange->3,Axes->True,ImageSize->450]],

{{ab,{{0.5,0},{2,0}}},{-2.9,-2.9},{2.9,2.9},Locator},
{{vb,False,"show triangles"},{True,False}},
{{va,False,"show values"},{True,False}}]

Manipulate[
Module[{ax,ay,bx,by,az,bz,c,δ},
{{ax,ay},{bx,by}}=ab;
az=ax+ay I; bz=bx+by I;
δ={0,.3};
Framed@Text@Graphics[{EdgeForm[Thick],ColorData[2,6],Rectangle[30{-1,-1},30{1,1}],ColorData[2,5],Polygon[{{0,0},{1,0},{ax,ay}}],ColorData[2,3],Polygon[{{0,0},{bx,by},c={Re[az bz],Im[az bz]}}],
Style[{
Text[Style["o",Italic],{-.15,-.15}],
Text[Style["a",Italic],{ax,ay}+δ],
Text[Style["b",Italic],{bx,by}+δ],
Text[Row[{Style["a",Italic],Style["b",Italic]}],c+δ]},
20,Black],
If[va,
Style[{
Text[Row[{Style["a",Italic]," = ",NumberForm[az,{5,2}]}],{-2.5,-1},{-1,0}],
Text[Row[{Style["b",Italic]," = ",NumberForm[bz,{5,2}]}],{-2.5,-1.4},{-1,0}],Text[Row[{Style["a",Italic],Style["b",Italic]," = ",NumberForm[az bz,{5,2}]}],{-2.5,-1.8},{-1,0}]
},20,Black],{}],Yellow,Disk[c,.05]},PlotRange->3,Axes->True,ImageSize->450]],

{{ab,{{2,1},{-.5,1.1}}},{-2.9,-2.9},{2.9,2.9},Locator},
{{va,False,"show values"},{True,False}}]

Manipulate[
Module[{ax,ay,bx,by,az,bz,c,d,δ},
{{ax,ay},{bx,by}}=ab;
az=ax+ay I; bz=bx+by I;
δ={0,.3};
Framed@Text@Graphics[{EdgeForm[Thick],ColorData[2,6],Rectangle[30{-1,-1},30{1,1}],ColorData[2,3],Polygon[{{0,0},{1,0},{ax,ay}}],Polygon[{{0,0},{bx,by},c={Re[az bz],Im[az bz]}}],ColorData[2,7],Polygon[{{0,0},{bx,by},d={Re[bz/az],Im[bz/az]}}],
Style[{
Text[Style["o",Italic],{-.15,-.15}],
Text[Style["p",Italic],{1,-.15}],
Text[Style["a",Italic],{ax,ay}+δ],
Text[Style["b",Italic],{bx,by}+δ],
Text[Row[{Style["a",Italic],Style["b",Italic]}],c+δ],
Text[Row[{Style["b",Italic]," / ",Style["a",Italic]}],d+δ]},
20,Black],
If[va,
Style[{
Text[Row[{Style["a",Italic]," = ",NumberForm[az,{5,2}]}],{-2.5,-1},{-1,0}],
Text[Row[{Style["b",Italic]," = ",NumberForm[bz,{5,2}]}],{-2.5,-1.4},{-1,0}],Text[Row[{Style["a",Italic],Style["b",Italic]," = ",NumberForm[az bz,{5,2}]}],{-2.5,-1.8},{-1,0}],
Text[Row[{Style["b",Italic]," / ",Style["a",Italic]," = ",NumberForm[bz/az,{5,2}]}],{-2.5,-2.2},{-1,0}]
},20,Black],{}],Yellow,Disk[c,.05],Disk[d,.05]},PlotRange->3,Axes->True,ImageSize->450]],

{{ab,{{2,1},{-.5,1.1}}},{-2.9,-2.9},{2.9,2.9},Locator},
{{va,False,"show values"},{True,False}}]