![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переопределение события. [D7, WinXP]
apic © (2006-10-01 10:55:00)Как сделать, чтобы при нажатии на ентер кнопка находящаяся в фокусе ввода не нажималась, а производились действия запланированные программистом, типа перехватить нажатие ентера?
X9 (2006-10-01 12:26:00) [1]Ой, в код забаралась ошибка:
Напрмер, вот так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
function EnterPressed: Boolean;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.EnterPressed;
begin
if GetKeyState(VK_RETURN) and 1 > 0 then
begin
ShowMessage('Enter key pressed') ;
Result := True;
end else
Result := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if EnterPressed then
Exit;
ShowMessage('Button1 pressed');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if EnterPressed then
Exit;
ShowMessage('Button2 pressed');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if EnterPressed then
Exit;
ShowMessage('Button3 pressed');
end;
end.
X9 (2006-10-01 12:21:00) [2]Напрмер, вот так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
function EnterPressed: Boolean;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.EnterPressed;
begin
if GetKeyState(VK_RETURN) and 1 > 0 then
begin
ShowMessage('Enter key pressed');Enter
Result := True;
end else
Result := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if EnterPressed then
Exit;
ShowMessage('Button1 pressed');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if EnterPressed then
Exit;
ShowMessage('Button2 pressed');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if EnterPressed then
Exit;
ShowMessage('Button3 pressed');
end;
end.
X9 (2006-10-01 12:04:00) [3]Нужно ловить сообщение WM_KEYDOWN в реализации собственного комонента.
Но IMHO это неправильный путь, проще проверять в OnClick не нажата ли клавиша Enter.
Kolan (2006-10-01 11:55:00) [4]
реакцию на сообщения от клавиатуры.
А как называется соотв процедура/функция ?
Percent (2006-10-01 11:44:00) [5]Ну так какие предложения?
Унаследовать кнопочку. Дописать/переписать реакцию на сообщения от клавиатуры.
apic (2006-10-01 11:39:00) [6]Ну так какие предложения?
Kolan (2006-10-01 11:28:00) [7]Да, действительно не работает :)
X9 (2006-10-01 11:10:00) [8]> [1] Kolan © (01.10.06 11:04)
>
> > находящаяся в фокусе ввода не нажималась
>
> Может легче св-во формы: KeyPreview установить в True;
> и пользоваться событием формы OnKeyPress или OnKeyDown
> ?
В случае с TButton это не поможет. Нужно перехватывать нажатие клавиши именно для кнопки.
apic (2006-10-01 11:07:00) [9]Гажати кнопки все равно происходит!
Kolan (2006-10-01 11:04:00) [10]
> находящаяся в фокусе ввода не нажималась
Может легче св-во формы:KeyPreview установить в True;
и пользоваться событием формыOnKeyPressилиOnKeyDown?