幹掉Ctrl+Pagedown和Ctrl+Pageup (100分)

  • 主题发起人 主题发起人 greatwall
  • 开始时间 开始时间
G

greatwall

Unregistered / Unconfirmed
GUEST, unregistred user!
不能在Keyup中截取,因為我使用了表格,在表格中雖然可以激發我的自定義事件,但是
也激發了表格的pagedown事件,即翻頁.而我不想要翻頁.
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=VK_NEXT) and (ssCtrl in Shift) then
begin
Caption:=Caption+'%';
Key:=0; //阻截按键
end;
end;
//Form的KeyPreview属性设为True
OK?
 
還是不行
 
我使用ctrl+pagedown它還是向下翻一頁,然後執行我的事件,不知道是不是這樣寫:
procedure TfrmBs.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_PRIOR) and (Shift = [ssCtrl]) then begin
do something;
Key := 0;
end;
end;
 
一定要把Form的KeyPreview属性设为True!!
 
已經設為True了,不然不會執行我的事件
 
抱歉,我立刻发现我的答案有误,工作了一天,眼睛都花了,所以没有细看题目,刚才
给你又写了一大篇文字,结果系统突然崩溃,呜呜,百打了半天字。
KeyPreview只能影响keypress事件的调用顺序。无论其如何设置,都是先响应控件的keydown
事件。我原来也遇到过类似问题,使用的解决方法是“子类化”,具体见《delphi5开发指南》
。原理是改变控件的窗体过程(不知你是否熟悉SDK开发),在新的窗体过程中修改消息
参数,然后再传递给原来的窗体过程。
 
那PageUp还响应吗?
PageDown是VK_NEXT,PageUp才是VK_PRIOR
 
keypress事件只响应ascii按键,象pageup、pagedown等按键都不触发keypress事件。
 
呵呵,如果要DBGrid不翻页的话,可以直接在DBGrid的OnKeyDown事件中做嘛:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and ((Key=VK_NEXT or (Key = VK_Prior)) then
begin
//写你的代码
ShowMessage('This');
Key := 0; //把PageDown屏蔽掉
end;
end;
呵呵,与前面几位的方法相同,只是在DBGrid中响应就没事了。
 
可以自己写一个DBGrid专门干掉翻页阿.
 
多謝各位幫助.
杜宝 is right.
 
多人接受答案了。
 
后退
顶部