procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    Image1.Cursor := crHandPoint;
    Image1.Perform(WM_LButtonUp, 0, 0)
  end;
end;

解决方案 »

  1.   

    其实最后一个以是不可以为0的,如果你要在MouseUp中判断鼠标位置。
      

  2.   

    最好用cm_mouseenter或cm_mouseleave;
    你可以自定義一個image類,再在image中加上兩個事件:
    如:
     myimage=class(image)
    prodect
    procedure mouseenter(var msg:tmessage);message cm_mouseenter;
    procedure mouseleave(var msg:tmessage);message cm_mouseleave;
    end;
    .
    .
    .
    .
    .
    var image1:myimage;.
    .
    .
    .
    .
      

  3.   

    再给你一个方法
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, ExtCtrls;type
      TForm1 = class(TForm)
        Image1: TImage;
      private
        { Private declarations }
      public
        { Public declarations }
        procedure CMMouseEnter(var Message: TMessage); message CM_MouseEnter;
        procedure CMMouseLeave(var Message: TMessage); message CM_MouseLeave;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.CMMouseEnter(var Message: TMessage);
    begin
      if TObject(Message.LParam) = Image1 then
        Image1.Cursor := crHandPoint;
    end;procedure TForm1.CMMouseLeave(var Message: TMessage);
    begin
      if TObject(Message.LParam) = Image1 then
        Image1.Cursor := crDefault;
    end;end.
      

  4.   

    变不了是因为点下后鼠标处理捕捉状态(MouseCapture),在这种状态下,设置Cursor属性没有用。你必须解除这种状态才行。  SetCaptureControl( nil );
      TControl(Sender).Cursor := crCross;
      SetCaptureControl( TControl(Sender) );
      

  5.   

    楼上的方法不灵,而用我的方法判断鼠标松开后,光标不会改变,不知如何搞定。
    procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
      TControl(Sender).Cursor := crHandPoint;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Image1.Cursor := crDefault;
    end;
      

  6.   

    我的方法没有任何问题,是从试验程序中贴出来的。只是没有贴OnMouseUp的代码,因为我想zhuziyu应该会那样做的。// Unit1.pas
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls, ToolWin, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      SetCaptureControl( nil );
      TControl(Sender).Cursor := crCross;
      SetCaptureControl( TControl(Sender) );
    end;procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      TControl(Sender).Cursor := crDefault;
    end;end.// Unit1.DFM
    object Form1: TForm1
      Left = 152
      Top = 181
      BorderStyle = bsSingle
      Caption = 'Form1'
      ClientHeight = 98
      ClientWidth = 365
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Panel1: TPanel
        Left = 30
        Top = 46
        Width = 113
        Height = 31
        Caption = 'Panel1'
        TabOrder = 0
        OnMouseDown = Panel1MouseDown
        OnMouseUp = Panel1MouseUp
      end
    end