Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Enter = Tab (http://forum.oszone.net/showthread.php?t=30463)

Nealles 02-06-2003 13:05 208739

Можно ли как нибудь перестроить клавиши впроге.

Например, нажатие Enter равносильно нажатию TAB

CyberDaemon 02-06-2003 13:11 208740

В какой проге? Общее решение - перехватить клавишу и делать с ней все, что хочешь :)

Nealles 02-06-2003 14:12 208741

Перехватить нажатие клавиши - это просто

А вот как эмулировать нажатие клавиши TAB - вот это вопрос

CyberDaemon 02-06-2003 14:20 208742

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.

Если нужно подробнее - могу пример на Делфи запостить.

Nealles 02-06-2003 14:28 208743

Скинь мне, плиз!!!

buylov_va@kalmsu.ru

CyberDaemon 02-06-2003 14:53 208744

Я в качестве справочника использую "Советы по Делфи" от Валентина Озерова. А он сжатый весит 3,5 метра. Такие объемы мылом.... Поиском в инете находится на раз:

Советы по Delphi от Валентина Озерова (2000 советов): Оглавление (39.6K) + 1..1000 (1.93M) + 1000..2000 (1.56M)
Смотрелка HTML Help без IE (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;

[s]Исправлено: CyberDaemon, 17:00 2-06-2003[/s]

Song 07-06-2003 10:36 208745

TForm.KeyPreview:=True

Procedure TForm1.Form1KeyDown(...);
Begin
IF Key=VK_RETURN then SelectNext(ActiveControl,True,True);
End;

Vla2003 07-06-2003 19:27 208746

Для 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:

[s]Исправлено: Vla2003, 20:31 7-06-2003[/s]


[s]Исправлено: Vla2003, 12:27 9-06-2003[/s]


Время: 08:16.

Время: 08:16.
© OSzone.net 2001-