关于Tshape选择的问题(50分)

  • 主题发起人 主题发起人 aloze
  • 开始时间 开始时间
A

aloze

Unregistered / Unconfirmed
GUEST, unregistred user!
程序自动生成了多个SHAPE和LABEL,IMAGE,LABEL和IMAGE在SHAPE上面。
请问怎么让SHAPE选中后变颜色?
 
shape 不能作容器,只能判断在选中的image区域内的shape了
 
是的,SHAPE 不能做容器,我才把LABEL和IMAGE放在了上层,我现在的思路是想通过鼠标的坐标来处理,但不知道怎么做。
 
这还做不来啊,判断鼠标点坐标区域内有没有shape
 
这个问题有点麻烦:因为落在 Lable 和 Image 上的 WM_LBUTTONDOWN 消息都传到 Application 那个该死的东西上去了,主 Form 根本不会接到这一消息,因此即使得到了鼠标坐标也无济于事...
解决办法还是有的,在 Form 上放一个 ApplicationEvents,然后:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
i: Integer;
begin
if (Msg.message = WM_LBUTTONDOWN) and (Msg.hwnd = Handle) then
for i := 0 to ComponentCount - 1do
if (Components.ClassName = 'TShape') and PtInRect(TControl(Components).BoundsRect, ScreenToClient(Msg.pt)) then
TShape(Components).Brush.Color := TShape(Components).Brush.Color xor clWhite;
end;
上面的代码,无论鼠标点在 Lable 还是 Image 上,都能正确运行;如果想更精确,例如 Shape 是圆形,在圆形区域外点击无效,可以用 PtInRegion 代替 PtInRect,不过这时需要判断 Shape 的形状;体力活,我懒的写了,凑合用吧...
 
现在又聋又瞎的人还真是多...
 
后退
顶部