如何判断鼠标的状态???是移动、左键按下、中键按下、右键按下、是UP状态、DOWN状态(详细点写)每个10分

解决方案 »

  1.   

    控件的KeyDown和MouseDown,Mouse事件中加以判断(Shift参数)
      

  2.   

    procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
     if button=mbLeft then showmessage('你按下了鼠标左键');
     if button=mbright then showmessage('你按下了鼠标右键');
     if button=mbmiddle then showmessage('你按下了鼠标中键');
    end;procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      showmessage('鼠标移动经过控件EDIT1');
    end;procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key=37 then showmessage('left');
      if key=38 then showmessage('right');
      if key=37 then showmessage('up');
      if key=37 then showmessage('down');
    end;
      

  3.   

    修正:
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key=37 then showmessage('left');
      if key=38 then showmessage('right');
      if key=39 then showmessage('up');
      if key=40 then showmessage('down');
    end;
      

  4.   

    这是我前几天写的一练习代码,可达到如下目的:
    1、编辑框Edit1获得焦点时,按键盘任意键,在Edit1的KEYDWON里写代码,
      把所按按键对应的符号、对应的ASCII码、对应二进制码写进LISTVIEW1里
    2、Buutton1、Buutton2、Buutton3、Buutton4分别为LISTVIEW1的大图标、小图标
      、列表、详细资料对应事件按钮。
    3、Buutton5可将LISTVIEW1数据保存至文本文件、Buutton6可从文本文件将数据加载至
      LISTVIEW1,LISTVIEW1标题栏可响应相应列升、降排序,快捷菜单支持修改、删除项:
      LISTVIEW1双项以不同颜色显示。
    单元文件如下:
    {*******************************************************}
    {                                                       }
    {       listview/ASCII练习代码                          }
    {                                                       }
    {       版本:01                                        }
    {                                                       }
    {*******************************************************}
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants,IdGlobal,Classes, Graphics, Controls, Forms,
      Dialogs,Math, StdCtrls, ComCtrls, ExtCtrls, ImgList, DB, ADODB, Menus;type
      TForm1 = class(TForm)
        Edit1: TEdit; //测试在其上按下那个键盘键
        ListView1: TListView; //保存所按键对应键盘字符、ASCII码、二进制码;
        ImageList1: TImageList;//LISTVIEW1大图标
        ImageList2: TImageList;//LISTVIEW1小图标
        Button5: TButton;// 按此按钮可将LISTVIEW1内容保存至文本文件;
        Button6: TButton;//按此按钮可从文本文件将数据加载到LISTVIEW1
        PopupMenu1: TPopupMenu;//快捷菜单 ;
        add1: TMenuItem;//未写代码;
        edit2: TMenuItem;//可编辑LISTVIEW CAPTION
        delete1: TMenuItem;//可删除项
        Button1: TButton;//LISTVIEW以大图标显示;
        Button2: TButton;//LISTVIEW以小图标显示;
        Button3: TButton;//LISTVIEW以列表显示;
        Button4: TButton;//LISTVIEW以详细资料显示;
        function Get2To10(s:string):double;  //将十进制数转换为二进制;
        procedure Get10To2(num:integer;var value:string);//将二进制数转换为十进制;(该单元用不到)
        procedure Edit1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure Button5Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
        procedure ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
          Data: Integer; var Compare: Integer);
        procedure ListView1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure delete1Click(Sender: TObject);
        procedure edit2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure ListView1CustomDrawItem(Sender: TCustomListView;
          Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
        procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
          Selected: Boolean);
      private
        columntosort:integer;  //选中列的索引号;
        isascsort:boolean;     //是否升序;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function TForm1.Get2To10(s: string): double;
    var               //将二进制数转换为十进制;(该单元用不到)
      i,len:integer;
    begin
      result:=0;
      len:=length(s);
      for i:=1 to len do
      begin
        if pos(copy(s,i,1),'10')=0 then
        begin
          result:=0;
          break;
        end;
        result:=result+strtoint(copy(s,i,1))*(power(2,(len-i)));
      end;
    end;procedure TForm1.Get10To2(num: integer;var value:string);
    begin                     // 将十进制数转换为二进制;
      if (num<2) then
         value:=inttostr(num)+value
      else
      begin
        value:=inttostr(num-2*(num div 2))+value;
        Get10To2((num div 2),value);
      end;
    end;procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);  //保存所按键对应键盘字符、ASCII码、二进制码;
    var
      m:tlistitem;
      s:string;
    begin
      s:='';
      Get10To2(key,s);
      with listview1 do
      begin
        m:=Items.Add;
        m.Caption:= char(key );
        m.SubItems.Add(inttostr(key));
        m.SubItems.Add(s);
      end;
    end;
    procedure TForm1.Button5Click(Sender: TObject);// 将LISTVIEW1内容保存至文本文件;
    var
      myfile:textfile;
      s1,s2,s3:string;
      t:integer;
    begin
      assignfile(myfile,'c:\ax.txt');
      rewrite(myfile);
      try
        for t:=0 to listview1.Items.Count-1 do//注意,每一项CAPTION前加#,子标题加@;
        begin
          s1:='#'+listview1.Items[t].Caption;
          s2:='@'+listview1.Items[t].SubItems.Strings[0];
          s3:='@'+listview1.Items[t].SubItems.Strings[1];
          writeln(myfile,s1);writeln(myfile,s2);writeln(myfile,s3);
        end;
      finally
        closefile(myfile);
      end;
    end;procedure TForm1.Button6Click(Sender: TObject);
    var               //从文本文件将数据加载到LISTVIEW1
      myfile:textfile;
      m:tlistitem;
      s:string;
      h:integer;
    begin
      listview1.Clear;
      assignfile(myfile,'c:\ax.txt');
      reset(myfile);
      h:=0;     //保存图标索引;
      try
      while not eof(myfile) do
      begin
        readln(myfile,s);    with listview1 do
        begin
        if copy(s,1,1)='#' then
        begin
          m:=Items.add;
          m.ImageIndex:=h;
          m.caption:=copy(s,2,length(s)-1);
        end
        else
        begin
          m.SubItems.Add(copy(s,2,length(s)-1));
          //最后一项总是加载不了,大家看看怎么回事?;
        end;
        inc(h);
        end;
      end;
      finally
        closefile(myfile);
        if h<>0 then m.Free;
      end;
    end;procedure TForm1.ListView1ColumnClick(Sender: TObject;
      Column: TListColumn);       //排序LISTVIEW(列表或详细资料)
    begin
      isascsort:=not isascsort;//判断排序方式,每次按下总是反向排序;
      columntosort:=column.Index;
      (sender as tcustomlistview).AlphaSort;
    end;
    procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
      Data: Integer; var Compare: Integer);
    var                  //自定义排序号方式,与资源管理器文件列表类似;
      xx:integer;
    begin
      if columntosort=0 then
        if isascsort then
          compare:=comparetext(item1.Caption,item2.Caption)
        else
          compare:=comparetext(item2.Caption,item1.Caption)
      else
      begin
        xx:=columntosort-1;
        if isascsort then
           compare:=comparetext(item1.SubItems[xx],item2.SubItems[xx])
        else
           compare:=comparetext(item2.SubItems[xx],item1.SubItems[xx]);
      end;
    end;procedure TForm1.ListView1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);//当选中一项按DELETE键发生;
    begin
      if key=46 then
         if messagedlg('sure delete item?',mtConfirmation,[mbYes, mbNo],0)=mrYes then
         listview1.Selected.Delete;
    end;procedure TForm1.delete1Click(Sender: TObject);//删除选中项
    begin
      if listview1.Selected<>nil then
        if messagedlg('sure delete item?',mtConfirmation,[mbYes, mbNo],0)=mrYes then
        listview1.Selected.Delete;
    end;procedure TForm1.edit2Click(Sender: TObject);//编辑选中项CAPTION
    begin
      if listview1.Selected<>nil then
      listview1.Selected.EditCaption;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      listview1.ViewStyle:=vsicon;//大标题
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      listview1.ViewStyle:=vssmallicon;//小标题;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      listview1.ViewStyle:=vslist;//列表;
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
      listview1.ViewStyle:=vsreport;//详细资料;
    end;procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
      if (item.Index mod 2)>0 then //以不同颜色显示不同项;
          listview1.Canvas.Brush.Color:=clskyblue
      else
          listview1.Canvas.Brush.Color:=clwhite;
    end;procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    begin
      listview1.RowSelect:=true;//选中一标题可选中整行(详细资料);
    end;end.