我想实现这样的功能:
在form1中放置image1控件,其caption为“员工培训”
在form2中放置具体的员工培训的流程图(该流程图由多个image控件组成)
当鼠标移到image1时,显示form2(也就是显示员工培训的具体流程,以便用户选择)
当鼠标离开image1时,form2又自动消失求教

解决方案 »

  1.   

    可以实现.在FORM1的IMAGE1中MOUSE进入或移动某区域,马上显示FORM2..FORM2的父母为FORM1,然后大小位置跟IMAGE重叠(IMAGE1为不可见)你的MOUSE离开FORM2的时候,就把FORM2关闭,把IAMGE1显示为可见.
      

  2.   

    最好的办法是覆写 Delphi 默认的 HintWindowClass 用自已的特效窗口替换
      

  3.   

    在onMouseMove事件中判断鼠标坐标x,y值,x,y在图片区域内做什么在区域外做什么
      

  4.   

    最简单的办法
    把image1的cursor的属性设置为crHandPoint
    然后你再在mousermove事件中判断
    Cursor的形状 根据形状来触发你想要实现的事件
    呵呵
      

  5.   

    在窗体上放一panel,将image放到panel上unit   Unit1;interfaceuses
        Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
        Dialogs,   StdCtrls,   ExtCtrls ,unit2;type
        TForm1   =   class(TForm)
        Panel1: TPanel;
        Image1: TImage;
            procedure   FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,
                Y:   Integer);
        private
            {   Private   declarations   }
            procedure MouseLeave(var Msg:TMessage); message WM_MOUSELEAVE;
            procedure mousehover(var Msg:TMessage); message WM_MOUSEHOVER;
        public
            {   Public   declarations   }
        end;var
        Form1:   TForm1;implementation{$R   *.dfm}procedure   TForm1.FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,
        Y:   Integer);
    var
      xh:   TTrackMouseEvent;
    begin
      xh.cbSize   :=   sizeof(xh);
      xh.dwFlags   :=   TME_LEAVE or TME_HOVER;
      xh.hwndTrack   :=   Handle;
      xh.dwHoverTime   :=   0;
      TrackMouseEvent(xh);
    end;procedure TForm1.mousehover(var Msg: TMessage);
    begin
      form2.hide;
      msg.Result:=0;
    end;procedure   TForm1.MouseLeave(var   Msg:   TMessage);
    begin
      form2.show;
      Msg.Result:=0;
    end;end.
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Image1: TImage;
        procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);  private
        { Private declarations }
      public    { Public declarations }
      end;var
      Form1: TForm1;implementation
      uses Unit2;
    {$R *.dfm}
    var i:integer;
    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        if i<>1 then
        begin
        Application.CreateForm(TForm2, Form2);
        Form2.Dock(Panel1,Panel1.ClientRect);
        Form2.Show;
        i:=1;
        end;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
    try
    if i=1 then
    Form2.Close;
    i:=0;
    except
    end;
    end;end.
    Form2就放你的那些流程图
      

  7.   

    呵呵,我知道,我的本意是这个image表示“员工培训”这个功能,但是这不是重点
      

  8.   

    参考这个 http://topic.csdn.net/t/20030630/10/1972303.html
    其实就是做个没标题栏的漂亮小窗口
    然后
    hintwindowsclass   :=   你的窗口;这样MOuse指上去时原来的Hint就是你的PL小窗口了, 你在这个窗口绘制代码中根据Hint对象变化下就OK了。