Показать полную графическую версию : Enter = Tab
Можно ли как нибудь перестроить клавиши впроге.
Например, нажатие Enter равносильно нажатию TAB
CyberDaemon
02-06-2003, 13:11
В какой проге? Общее решение - перехватить клавишу и делать с ней все, что хочешь :)
Перехватить нажатие клавиши - это просто
А вот как эмулировать нажатие клавиши TAB - вот это вопрос
CyberDaemon
02-06-2003, 14:20
The keybd_event function synthesizes a keystroke. The system can use such a synthesized keystroke to generate a WM_KEYUP or WM_KEYDOWN message. The keyboard driver's interrupt handler calls the keybd_event function.
Если нужно подробнее - могу пример на Делфи запостить.
Скинь мне, плиз!!!
buylov_va@kalmsu.ru
CyberDaemon
02-06-2003, 14:53
Я в качестве справочника использую "Советы по Делфи" от Валентина Озерова. А он сжатый весит 3,5 метра. Такие объемы мылом.... Поиском в инете находится на раз:
Советы по Delphi от Валентина Озерова (2000 советов): Оглавление (http://delphiplus.nagano.ru/projects/faq/downloads/delphi_faq_ru/kuliba.zip) (39.6K) + 1..1000 (http://delphiplus.nagano.ru/projects/faq/downloads/delphi_faq_ru/kuliba1000.zip) (1.93M) + 1000..2000 (http://delphiplus.nagano.ru/projects/faq/downloads/delphi_faq_ru/kuliba2000.zip) (1.56M)
Смотрелка HTML Help без IE (http://delphiplus.nagano.ru/projects/faq/downloads/delphi_faq_ru/hhupd.zip) (416K)
Модераторы не обидятся, если я сюда пример запостю?
Подскажите пожалуйста как сделать имитацию ввода с клавиатуры для программы выполняющейся в дос-окне
const
ExtendedKeys: set of Byte = [ *// incomplete list
VK_INSERT, VK_DELETE, VK_HOME, * VK_END, * *VK_PRIOR, * VK_NEXT,
VK_LEFT, * VK_UP, * * VK_RIGHT, *VK_DOWN, * VK_NUMLOCK
];
procedure SimulateKeyDown(Key : byte);
var
flags: DWORD;
begin
if Key in ExtendedKeys then flags := KEYEVENTF_EXTENDEDKEY else flags := 0;
keybd_event(Key, MapVirtualKey(Key, 0), flags, 0);
end;
procedure SimulateKeyUp(Key : byte);
var
flags: DWORD;
begin
if Key in ExtendedKeys then flags := KEYEVENTF_EXTENDEDKEY else flags := 0;
keybd_event(Key, MapVirtualKey(Key, 0), KEYEVENTF_KEYUP or flags, 0);
end;
procedure SimulateKeystroke(Key : byte);
var
flags: DWORD;
scancode: BYTE;
begin
if Key in ExtendedKeys then flags := KEYEVENTF_EXTENDEDKEY else flags := 0;
scancode := MapVirtualKey(Key, 0);
keybd_event(Key,
scancode,
flags,
0);
keybd_event(Key,
scancode,
KEYEVENTF_KEYUP or flags,
0);
end;
Исправлено: CyberDaemon, 17:00 2-06-2003
TForm.KeyPreview:=True
Procedure TForm1.Form1KeyDown(...);
Begin
IF Key=VK_RETURN then SelectNext(ActiveControl,True,True);
End;
Для Delphi:
unit Unit1;
interface
uses
*Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
*Dialogs, StdCtrls;
type
*TForm1 = class(TForm)
* *Edit1: TEdit;
* *Edit2: TEdit;
* *Button1: TButton;
* *Button2: TButton;
* *Label1: TLabel;
* *procedure Button1Click(Sender: TObject);
*private
* *{ Private declarations }
*protected
*procedure Enter_Tab(var Msg:TMessage);message CM_DIALOGKEY;
*public
* *{ Public declarations }
*end;
var
*Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.Enter_Tab(var Msg: TMessage);
begin
if msg.WParam=13 then
begin
Perform(CM_DIALOGKEY,9,0);
msg.Result:=1;//отключаем обработку нажатия Enter
end
else
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Enter=Tab');
end;
end.
************************************************
Для C++ (CBuilder6):
Заголовочный файл
//---------------------------------------------------------------------------
#ifndef UnMainH
#define UnMainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:// IDE-managed Components
* * * *TButton *Button1;
* * * *TEdit *Edit1;
* * * *TEdit *Edit2;
* * * *TButton *Button2;
* * * *TButton *Button3;
private:// User declarations
protected:
void __fastcall KeyCatch(TMessage &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_DIALOGKEY,TMessage,KeyCatch)
END_MESSAGE_MAP(TForm)
public:
// User declarations
* * * *__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Файл реализации
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UnMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
* * * *: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::KeyCatch(TMessage &Msg)
{ *
* if( Msg.WParam==13){
* Perform(CM_DIALOGKEY,9,0);
* *Msg.Result=1;//отключаем обработку нажатия Enter *
* } else * TForm::Dispatch(&Msg);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("Enter=Tab");
}
//---------------------------------------------------------------------------
:type:
Исправлено: Vla2003, 20:31 7-06-2003
Исправлено: Vla2003, 12:27 9-06-2003
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC