按Shift+菜单项(删除)直接删除一个文件?(50分)

  • 主题发起人 主题发起人 wind2000
  • 开始时间 开始时间
W

wind2000

Unregistered / Unconfirmed
GUEST, unregistred user!
在资源管理器中,选择一个文件,点击鼠标右键,选择"删除"将文件删除到"回收站"中去,
按Shift+"删除"直接删除文件,在这里不管是先按shift还是先点击鼠标右键都能做到直接
删除,如果先按Shift还好办,在鼠标点击控件的OnKeyDown中可以得到Shift是否被按下去,
如果是先点击鼠标右键弹出菜单,这时再按Shift如何知道呢?
 
先关注,有时间帮你实验。
 
跟什么时候弹出菜单有关系马??关键是在你点击删除才单项时去动态查KeyBoard 的
状态就行了呀
 
是在删除事件里面判断此时时候有Shift在按着呀。
使用getkeyboardstate可以
 
是GetKeyState
 
这个可以判断Shift
procedure TForm1.Button1Click(Sender: TObject);
VAR
KS: TKeyBoardState;
begin
GetKeyboardState(KS);
if odd(ks[VK_SHIFT]) then
Caption := '1';
end;
 
删掉的时候再去判断!
和按键次序无关!
 
多谢各位参与![:D]
 
又有点问题,当我在操作"删除"之前按了SHIFT键(如:在资源管理器中选择了多个连续的
文件),然后我再来想"删除",其实我这时候不想按"SHIFT"直接删除,可是,这时候SHIFT已经
标记为"已按"过了,结果我没按SHIFT却执行了按SHIFT的那部分代码,请问,如何判断我是十
分钟前做其他事情时按的SHIFT还是我正好这时候想删除文件刚刚按的SHIFT?我在删除文件
之前是否要先重置SHIFT的状态?如何重置?[:(]
 
不是说了吗,不要在KeyDown事件里判断是否按下Shift,而应该在删除菜单项的
OnClick事件里去动态判断Shift的状态。
如果你非要处理你的KeyDown,请再KeyUp事件中再加处理
 
我已经在菜单项的OnClick事件中去动态判断了,可是不行,代码如下,请帮忙看看哪里不对?
procedure TFrmLog.DelFileItemClick(Sender: TObject);
{删除文件}
var
sFN : string;
KS : TKeyBoardState;
bDel : boolean;
begin
if LogListView.Items.Count = 0 then Exit;
sFN := LogListView.ItemFocused.SubItems[1];
GetKeyboardState(KS);
if odd(ks[VK_SHIFT]) then //按Shift直接删除
bDel := True
else
bDel := False;
end;
if bDel then
begin
try
DeleteFile(PChar(sFN))
//直接删除
except
Application.MessageBox(PChar('无法删除文件 ' + sFN + ' '),
sSoft_Cap, MB_ICONERROR + MB_OK);
end;
end
else
begin
if not DelFileToRecycled(sFN) then //删除到回收站
Application.MessageBox(PChar('无法删除文件 ' + sFN + ' '),
sSoft_Cap, MB_ICONERROR + MB_OK);
end;
end;
 
后退
顶部