鼠标按键的判断问题

rcom10002 2003-08-20 03:54:58
如何判断鼠标的状态???

是移动、左键按下、中键按下、右键按下、是UP状态、DOWN状态(详细点写)

每个10分
...全文
44 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdsimon 2003-08-20
  • 打赏
  • 举报
回复
这是我前几天写的一练习代码,可达到如下目的:
1、编辑框Edit1获得焦点时,按键盘任意键,在Edit1的KEYDWON里写代码,
把所按按键对应的符号、对应的ASCII码、对应二进制码写进LISTVIEW1里
2、Buutton1、Buutton2、Buutton3、Buutton4分别为LISTVIEW1的大图标、小图标
、列表、详细资料对应事件按钮。
3、Buutton5可将LISTVIEW1数据保存至文本文件、Buutton6可从文本文件将数据加载至
LISTVIEW1,LISTVIEW1标题栏可响应相应列升、降排序,快捷菜单支持修改、删除项:
LISTVIEW1双项以不同颜色显示。
单元文件如下:
{*******************************************************}
{ }
{ listview/ASCII练习代码 }
{ }
{ 版本:01 }
{ }
{*******************************************************}
unit Unit1;

interface

uses
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.
charles2118 2003-08-20
  • 打赏
  • 举报
回复
up一下
BlueSoftEye 2003-08-20
  • 打赏
  • 举报
回复
up,up
sduzjw 2003-08-20
  • 打赏
  • 举报
回复
有一个键盘代码表不知你有没有,上网上搜搜看,
wdsimon 2003-08-20
  • 打赏
  • 举报
回复
修正:
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;
wdsimon 2003-08-20
  • 打赏
  • 举报
回复
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;
gzyzljk 2003-08-20
  • 打赏
  • 举报
回复
控件的KeyDown和MouseDown,Mouse事件中加以判断(Shift参数)

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧