大家看看这段代码为什么不执行?是不是DELPHI得BUG?(20分)

  • 主题发起人 主题发起人 菜根
  • 开始时间 开始时间

菜根

Unregistered / Unconfirmed
GUEST, unregistred user!
控制FORM上焦点移动顺序:enter 替代 Tab
Form,keyPreview:=true;
Formkeypress 加入:
if key=#13 then
begin
key:=#0;
perform(wm_nextdlgctl,0,0);
end;

一点反映都没有,不知道为什么,原来控制得好好得。
 
你的写法是对的,重新装遍DELPHI试试
 
Okeypress 加入:
if key=#13 then
begin
key:=#0;
perform(wm_nextdlgctl,0,0);
end;
可以在 TEdit 中跳转,但遇上 TButton 会停下来。
 
如果控件放在ScrollBox裡面不行,Panel好像也不行,直接在Form上可以
 
这段代码有时候执行,有时候放在Scroolbox里面执行,有时候,不执行,不知道怎么回事。
正如" Pc 狂迷 "所说,碰到BUTTON就会停下来,请问如何转换TAB为回车键呢,?
 
试一试这个虽然烦了点(又改了一下)
procedure TDateInput.Enter2Tab(Sender: TObject; var Key: Word; Shift: TShiftState);
var
ACtrl: TWinControl;
begin
if key = 13 then
begin
ACtrl := ActiveControl;
if ACtrl is TCustomMemo then exit;
repeat
ACtrl:= FindNextControl(ACtrl,true,true,false);
until (ACtrl is TCustomEdit) or
(ACtrl is TCustomComboBox) or
(ACtrl is TCustomListBox) or
(ACtrl is TCustomCheckBox) or
(ACtrl is TRadioButton)or
(ACtrl is TButton);
ACtrl.SetFocus ;
end;
end;
 
同意PC狂迷的看法。
 
to 菜根,
因为消息wm_nextdlgctl只有对话框才能接收。
因此对TButton 不可用。如果你要使焦点在所有窗体控件上
移动。可以使用函数 selnext();
使用方法 :对每个需要的控件都调用该方法,同时要设置它们的stop=true
 
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
key:=#0;
SelectNext(activeControl, true,true);
end;
end;
 
TO:茶根,你的写法也是对的,可能是你的delphi有问题,你用only you方式试过后如果还是不行
那就改用我的写法吧!
 
用这个试一试:
if key=13 then postmessage(handle,wm_keydown,9,0);
 
key=chr(13)试试
 
碰到button还是要停下来,所以我用Speedbutton不让按纽获的焦点
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
477
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部