我想在memo中当敲了vk_down健并且在最后一行,下一个控件获得焦点
我的代码如下:
procedure TForm1.memoZSKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
row: Integer;
begin
if Key=vk_down then
begin
row := SendMessage(TMemo(Sender).Handle,EM_LINEFROMCHAR,TMemo(Sender).selStart,0);
if row=TMemo(Sender).Lines.Count then
begin
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
end;为什么我的程序不起作用,焦点并没有下移。请高手指点
我的代码如下:
procedure TForm1.memoZSKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
row: Integer;
begin
if Key=vk_down then
begin
row := SendMessage(TMemo(Sender).Handle,EM_LINEFROMCHAR,TMemo(Sender).selStart,0);
if row=TMemo(Sender).Lines.Count then
begin
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
end;为什么我的程序不起作用,焦点并没有下移。请高手指点
begin
key:=0;
Perform(WM_NextDlgctl,0,0);
end;
Randomize()的方法实现了,不知道为什么加一句 key := 0 就可以实现?谢谢!
再问一个问题,我要向上获得焦点,该怎样写?
PostMessage(Handle,WM_KEYDOWN,VK_TAB,0);
或者
SelectNext(ActiveControl, True, True);来完成如果你不要key := 0
则程序会执行你的按键事件如果是下移动,可以用
Perform(WM_NextDlgctl,1,0);
Shift: TShiftState);
begin
if (key=38) then//如果按下的是“上”键
begin 模拟shift+tab按键
keybd_event( VK_shift, MapVirtualKey( VK_shift, 0 ), 0 , 0 );
// 按下shift键
keybd_event( VK_tab, MapVirtualKey( VK_tab, 0 ), 0 , 0 );
// 按下tab键
keybd_event( VK_tab, MapVirtualKey( vk_tab, 0 ), KEYEVENTF_KEYUP , 0 );
//放开tab键
keybd_event( VK_control, MapVirtualKey( vk_control, 0 ), KEYEVENTF_KEYUP , 0 );
// 放开shift键end;
注意,如果触发的对象是Form的话,你可能要把Form的KeyPreview属性设置为True;