两个图片重叠,怎样区分点击了哪一个图片?(200分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
题目可能说得不太清楚.
有两个图片Timage重叠,但是每个image只有部分区域是可以点击的,
我希望当点击上面的图片时,如果发现不在可以点击范围内,就把这个点击
传递给下面的图片.就是说,看起来2张图片好像是一张图片一样,点击不同
的部位得到不同的反映.

也许用setwindowrgn可以实现,但是这里是Timage,无法用.
还有没有别的办法?
 
既然是重叠的,下面的IMAGE怎么能收到点击事件?

把两个IMAGE分别放在两个PANEL上,就可以setwindowrgn了,PENEL的REGION。
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if not PtInRegion{or ptinrect}(rgn,X,Y) then
image2mousedown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer)
else
ShowMessage(' in region');
end;

这样不可以吗?
 
对呀,自己判断一下不就行乐吗?
也许我想的太简单了,
cakk 的问题不敢乱说话。
 
不行的,因为图片的位置不能确定,是运行的时候读取配置文件来确定位置的.
所以无法知道自己的下面是否有图片,如果有,是哪一个图片.

所以只能让每一个图片只接受region里面的鼠标事件.

除了panel还有别的办法吗?
 
怎么没法确定?

for i:=ControlCount-1 downto 0 do
if controls is TImage do
判断位置啊
 
就算是找到下面的控件,可是那个控件也不一定定义了MouseDown事件啊!

我觉得可能只能用Region实现.
 
响应 wm_NcHitTest 消息,
Msg.Result = htTransparent 可以将鼠标消息传给同一窗口下的另一窗口!
 
解决了.

我最后自己写了一个控件,可以自己定义形状的.
 
后退
顶部