類似圖形熱點的問題,該如何實現(200分)

  • 主题发起人 主题发起人 lichdr
  • 开始时间 开始时间
L

lichdr

Unregistered / Unconfirmed
GUEST, unregistred user!
一个MDI窗口,在它背景下居中放图片。图片上放一些按钮。这些按钮的动作与相应的菜单是一致的。就是把菜单的操作图形化了。
菜单是分层的。所以图片也是不止一幅了。点一个按钮进入下一级的菜单,就调入另一幅图片(最底层的当然就是直接调相应的窗口了),这幅图片上同时有一些同级菜单对应的按钮。
现在图片与按钮是分离的。如果改了图片了还得调整按钮的位置。更麻烦的是它们的同步显示。现在是把图片与相应的按钮放到一个个的PANEL里。一幅图片及上面的按钮就放了一个PANEL,程序中通过控制这些PANEL的显示来显示其上的图片与按钮。
这样做实在是太麻烦了。
能不能把按钮做到图片中去,当点击图片的某个地方时触发某个动作,相当于网页图片上的热点区域。更进一步的话,能不能象拖动按钮一样拖动这种热点区域。
有什么控件没有?如果自己写的话要如何写呢?
 
使用 图片按钮不就可以了么?
 
現在的圖片在相應位置做了按鈕的形狀。用speedbutton的,把Flat設為true。

用圖片按鈕也是得管理與大圖片的同步顯示及銜接問題的。
 
1stclass就能满足你这个要求,你去51DELPHI里去找找,装上后看一下它附带的DEMO吧
 
它那個好象也不是我要的這樣的。
它也是用了圖片按鈕,只不過圖片按鈕跟一般的不太一樣而已。

我是想在圖片上設熱點,把按鈕省了。
 
利用SetWindowRgn写一个可以指定形状的按钮类,用ini文件存储热点区域特征点。然后利用贝泽尔曲线画出区域,动态生成按钮.
 
1)在这里找控件:
http://www.csdn.net/dev/Delphi/vcl/button/

2)用这个方法
CreateRoundRectRgn + SetWindowRgn
圆形窗口
//鼠标拖动窗体时,不会看到一个虚线矩形框
也简单,拖动窗口时不用
if (htclient=msg.result) then ……
也不用
releasecapture;
form1.perform(WM_syscommand, $F012, 0);
的方法,而是采用记录坐标的方法:
先定义两个全局变量: ox, oy: integer;
然后,添加 Form 的鼠标点击和移动的事件:

procedure TForm1.Form1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
X1 := X;
Y1 := Y;
end;

procedure TForm1.Form1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
begin
Left := Left + X - X1;
Top := Top + Y - Y1;
end;
end;

就可以实现拖动窗口时不出现虚线矩形框

 
CreateRoundRectRgn+PtInRgn
 
多人接受答案了。
 
后退
顶部