我想实现隐藏鼠标的效果。于是写出下面
界面上就一个 MainMenu1 没有别的了。
下面的y1为其中的一栏
procedure TForm1.Y1Click(Sender: TObject);
begin
  Y1.Checked:= not Y1.Checked;
  ShowCursor(Y1.Checked);
  ShowMessage(BoolToStr(Y1.Checked));
end;
这个代码中,我最不理解的是  Y1.Checked:= not Y1.Checked;这里。我加了下面的ShowMessage(BoolToStr(Y1.Checked));
返回,看到值也有变化。可是鼠标就是不隐藏。为什么?于是又弄下面的例子又可以。
  Y1.Checked:= false;
  ShowCursor(Y1.Checked);
栏上不显示勾为隐藏鼠标 ShowMessage值为0.  Y1.Checked:= True;
  ShowCursor(Y1.Checked);
栏显示为选中状态 为显示鼠标 ShowMessage值为-1这里的Y1.Checked:= not Y1.Checked;到底怎么理解,为什么做不出想要的效果 ?
这个例子来自《精通delphi 5.0》 27-4 隐藏光标的设计

解决方案 »

  1.   

    not 就是个取反不能实现想要的功能,还是去看看你的ShowCursor(Y1.Checked)这个函数怎么执行的吧
      

  2.   

    hongss你好,不可以。我用的delphi 7我也不知道,是不是我的delphi 7版本问题。
    界面上一个MainMenu1,然后一个列Y1.
    procedure TForm1.Y1Click(Sender: TObject);
    begin
      Y1.Checked:= not Y1.Checked;
      ShowCursor(Y1.Checked);
      ShowMessage(BoolToStr(Y1.Checked));
    end;
    还是这个代码,我又重新写了一遍。还是不行。
    下面是全部的pasunit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus;type
      TForm1 = class(TForm)
        MainMenu1: TMainMenu;
        N1: TMenuItem;
        N2: TMenuItem;
        N3: TMenuItem;
        procedure N3Click(Sender: TObject);
        procedure N2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.N3Click(Sender: TObject);
    begin
    close;
    end;procedure TForm1.N2Click(Sender: TObject);
    begin
    N2.Checked:= not N2.Checked;
    ShowCursor(N2.Checked);
    end;end.
      

  3.   

    你第一次到 ShowCursor 执行的时候,Y1.Checked 的值肯定是 True 吧
      

  4.   

    把Y1的checked属性改成True,再去看看,测试结果应该ShowCursor这个API的使用方法导致的,刚运行光标是显示的,所以第一次必须是ShowCursor(False),后面才能正常,如果第一次为ShowCursor(True),后面就不正常了。应该是ShowCursor这个API内部使用了一个计数变量,True的话这个计数加1,False的话这个计数减1,当这个计数为0时就隐藏光标,只是猜测,具体可以再测测
      

  5.   

    谢谢各位,我把
    Y1.Checked:= not Y1.Checked;
      ShowCursor(Y1.Checked);
    换成
    Y1.checked:=not y1.checked;
    showcursor(not Y1.checked);
    这样就可以了。ShowCursor是通过一个计数变量来实现的,第一次为True。
    谢谢各位。