[Решено] OnKeyPress и передача Key в неактивный компонент...

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

[Решено] OnKeyPress и передача Key в неактивный компонент...

Сообщение leo_bsv »

Вот собственно сабж: как из обработчика OnKeyPress активного компонента передать нажатую клавишу Key компоненту, который не активен... можно ли это вообще сделать... хочется чтобы неактивный её обработал... :?
Последний раз редактировалось leo_bsv 11.02.2012 23:01:50, всего редактировалось 2 раза.
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Ну и вызывайте из активной формы при нажатии некой клавиши нужную обработку из неактивной.
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

мне нужна обработка по-умолчанию... а не мой код в обработчике события неактивного компонента...
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Если не секрет, что ваш компонент должен сделать по умолчанию?
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

Да нет особого секрета,.. например Grid должен при нажатии на "стрелку вниз" должен переместить выделение на строку ниже, поверх я отображаю Edit, который в активном состоянии естественно перехватывает все сообщения... да и Grid у меня не Grid, а TTreeListView, если знаете такой... короче нужно что-то типа SendMessage or PostMessage... только вот пока не особо понятно как... или же тупо в реакции Edit'a программно всё это произвести... есть ещё модуль mouseandkeyinput... но что-то у меня пока с ним не срослось...

Добавлено спустя 6 часов 22 минуты 11 секунд:
Re: [Снят] OnKeyPress и передача Key в неактивный компонент...
задача решена штатным обработчиком событий...
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Ну, тогда задача выеденного яйца не стоит.
Ставите у формы режим 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.
Ответить