现在能够通过mousedown中写FChildList.add(TControl(sender)),能够通过如下代码实现想要的效果,
但是如果是tedit等编辑控件选中后再单击一次后,画的8个点的状态就不见了,应该是再单击时触发了另外一个事件
重画了.
var
R: TRect;
sSelCtrl,sSelParent: TWinControl;
I,k: Integer;
P: array[0..7] of TPoint;
DC: HDC;
begin
for k := 0 to self.FChildList.Count - 1 do
begin
sSelCtrl := TWinControl(FChildList[k]);
sSelParent := sSelCtrl;
R := sSelCtrl.BoundsRect;
R.Top := R.Top + sSelCtrl.Height;
R.Bottom := R.Top + sSelCtrl.Height;
R.Left := R.Left + 4;
R.Right := R.Left + sSelCtrl.Width; if sSelCtrl.Parent is TForm then
begin
R.Top := R.Top + 21;
R.Bottom := R.Bottom + 21;
end;
FSelCtl.Clear;
FSelCtl.SelPoints(R, P); FSelCtl.DC := GetWindowDc(sSelCtrl.Parent.Handle;
for I := 0 to 7 do
FSelCtl.AddPoint(P[I].X, P[I].Y);
FSelCtl.Paint;
end;
end;
但是如果是tedit等编辑控件选中后再单击一次后,画的8个点的状态就不见了,应该是再单击时触发了另外一个事件
重画了.
var
R: TRect;
sSelCtrl,sSelParent: TWinControl;
I,k: Integer;
P: array[0..7] of TPoint;
DC: HDC;
begin
for k := 0 to self.FChildList.Count - 1 do
begin
sSelCtrl := TWinControl(FChildList[k]);
sSelParent := sSelCtrl;
R := sSelCtrl.BoundsRect;
R.Top := R.Top + sSelCtrl.Height;
R.Bottom := R.Top + sSelCtrl.Height;
R.Left := R.Left + 4;
R.Right := R.Left + sSelCtrl.Width; if sSelCtrl.Parent is TForm then
begin
R.Top := R.Top + 21;
R.Bottom := R.Bottom + 21;
end;
FSelCtl.Clear;
FSelCtl.SelPoints(R, P); FSelCtl.DC := GetWindowDc(sSelCtrl.Parent.Handle;
for I := 0 to 7 do
FSelCtl.AddPoint(P[I].X, P[I].Y);
FSelCtl.Paint;
end;
end;
1,重载procedure CreateWnd; override;
并在函数中写上BringWindowToTop(self.Handle);