Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
Begin
if key in [#13,char(VK_UP),char(VK_DOWN)] then { 判断是按执行键}
if not (ActiveControl is TDbgrid) Then
Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end else
if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
begin
With TDbgrid(ActiveControl) Do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1{ 移动到下一字段}
else Selectedindex:=0;
end;
End;
Begin
if key in [#13,char(VK_UP),char(VK_DOWN)] then { 判断是按执行键}
if not (ActiveControl is TDbgrid) Then
Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end else
if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
begin
With TDbgrid(ActiveControl) Do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1{ 移动到下一字段}
else Selectedindex:=0;
end;
End;
Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
Begin
if key=#13 then { 判断是按执行键}
if not (ActiveControl is TDbgrid) Then
Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end else
if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
begin
With TDbgrid(ActiveControl) Do
if Selectedindex<(FieldCount-1) then Selectedindex:=Selectedindex+1{ 移动到下一字段}
else Selectedindex:=0;
end;
End;
Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
Begin
if key=#13 then { 判断是按执行键}
if not (ActiveControl is TDbgrid) Then
Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end else
if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
begin
With TDbgrid(ActiveControl) Do
if Selectedindex<(FieldCount-1) then Selectedindex:=Selectedindex+1{ 移动到下一字段}
else Selectedindex:=0;
end;
End;
OnKeyDown中:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=VK_Return) or (key=VK_DOWN) then PostMessage(WM_KEYDOWN, VK_TAB, 0 ,0)
else if key = VK_UP then TWinControl(sender).SelectNext(TWincontrol(Sender), true, true);
end;
把要控制的控件的OnKeyDown指向Edit1KeyDown这个过程即可
begin
if Key = #13 then
if not (ActiveControl is TStringGrid) then begin { 如果不是TStringGrid }
Key := #0; { 清除按键 }
Perform(WM_NEXTDLGCTL, 0, 0); { 否则移到下一Control上 }
end
else if (ActiveControl is TStringGrid) then
with TStringGrid(ActiveControl) do
if selectedindex < (fieldcount -1) then
selectedindex := selectedindex +1
else
selectedindex := 0;
end;
另一种更简便的方法,这是wj朋友提供的:
在StringGrid的KeyPress事件中写入
if Key=Chr(VK_RETURN) then
SendMessage(StringGrid.Handle,WM_CHAR,VK_TAB,0);
*在D2,D3中用时去掉Chr()函数。
让 WINDOWS 模拟按了一个按键,例如按下 ENTER或者 TAB 键?
PostMessage(Object.Handle, WM_KEYDOWN, VK_TAB, 0);
获得命令行参数
1. 取得命令列参数的个数: ParamCount 函数
2. 呼叫 ParamStr(0), 传回执行档的档名(含路径)
3. 呼叫 ParamStr(n), 传回第n个参数的内容
例子:
procedure TForm1.FormCreate(Sender: TObject);
var
ix: integer;
begin
Memo1.Lines.Clear;
if ParamCount = 0 then
Memo1.Lines.Add('??统??.')
else
begin
Memo1.Lines.Add('档名:' + ParamStr(0));
for ix := 1 to ParamCount do
Memo1.Lines.Add(ParamStr(ix));
end;
end;
procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
case Key of
VK_RETURN: // 回车
FindNextControl(Sender as TWinControl, (Shift = []), True, False).SetFocus;
VK_DOWN: // 下箭头
FindNextControl(Sender as TWinControl, True, True, False).SetFocus;
VK_UP: // 上箭头
FindNextControl(Sender as TWinControl, False, True, False).SetFocus;
end;
end;