[Решено] OnKeyPress и передача Key в неактивный компонент...
Модератор: Модераторы
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
[Решено] OnKeyPress и передача Key в неактивный компонент...
Вот собственно сабж: как из обработчика OnKeyPress активного компонента передать нажатую клавишу Key компоненту, который не активен... можно ли это вообще сделать... хочется чтобы неактивный её обработал... 
Последний раз редактировалось leo_bsv 11.02.2012 23:01:50, всего редактировалось 2 раза.
Ну и вызывайте из активной формы при нажатии некой клавиши нужную обработку из неактивной.
Если не секрет, что ваш компонент должен сделать по умолчанию?
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
Да нет особого секрета,.. например Grid должен при нажатии на "стрелку вниз" должен переместить выделение на строку ниже, поверх я отображаю Edit, который в активном состоянии естественно перехватывает все сообщения... да и Grid у меня не Grid, а TTreeListView, если знаете такой... короче нужно что-то типа SendMessage or PostMessage... только вот пока не особо понятно как... или же тупо в реакции Edit'a программно всё это произвести... есть ещё модуль mouseandkeyinput... но что-то у меня пока с ним не срослось...
Добавлено спустя 6 часов 22 минуты 11 секунд:
Re: [Снят] OnKeyPress и передача Key в неактивный компонент...
задача решена штатным обработчиком событий...
Добавлено спустя 6 часов 22 минуты 11 секунд:
Re: [Снят] OnKeyPress и передача Key в неактивный компонент...
задача решена штатным обработчиком событий...
Ну, тогда задача выеденного яйца не стоит.
Ставите у формы режим KeyPreview=True.
В обработчике формы пишете только реакцию на клавиши управления.
Ставите у формы режим KeyPreview=True.
В обработчике формы пишете только реакцию на клавиши управления.
Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Edit1: TEdit;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ private declarations }
procedure NextItem(Count: Integer);
procedure PrevItem(Count: Integer);
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.NextItem(Count: Integer);
begin
if (ListBox1.ItemIndex + Count) < ListBox1.Items.Count then ListBox1.ItemIndex := ListBox1.ItemIndex + Count
else ListBox1.ItemIndex := ListBox1.Items.Count-1;
end;
procedure TForm1.PrevItem(Count: Integer);
begin
if (ListBox1.ItemIndex - Count) >= 0 then ListBox1.ItemIndex := ListBox1.ItemIndex - Count
else ListBox1.ItemIndex := 0;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
case Key of
27: Close;
38: begin PrevItem(1); Key := 0; end;
40: begin NextItem(1); key := 0; end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ActiveControl := Edit1;
ListBox1.ItemIndex := 0;
end;
end.
