PDA

Показать полную графическую версию : Enter = Tab


Nealles
02-06-2003, 13:05
Можно ли как нибудь перестроить клавиши впроге.

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

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

Nealles
02-06-2003, 14:12
Перехватить нажатие клавиши - это просто

А вот как эмулировать нажатие клавиши 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.

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

Nealles
02-06-2003, 14:28
Скинь мне, плиз!!!

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

Song
07-06-2003, 10:36
TForm.KeyPreview:=True

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

Vla2003
07-06-2003, 19:27
Для 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