unit Unit1;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls, Borland.Vcl.ExtCtrls;
 const
  SX_MESSAGE1 = WM_USER + 200;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 TMyEdit = class(TEdit)
  private
    { Private declarations }
     procedure SXMessage1(var Msg:TMessage); message SX_MESSAGE1;
  public
    { Public declarations }
  end;
  TInputEdit = class(TEdit)
  private
    { Private declarations }
     procedure WMKeyDown(var Msg:TMessage);   message WM_KEYDOWN;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MyEdits : array[0..4] of TMyEdit;
  InputEdit : TInputEdit;
implementation
{$R *.nfm}

procedure TInputEdit.WMKeyDown(var Msg:TMessage);
var MsgRec : TMessage;
begin
  MsgRec := TMessage.Create();
  with MsgRec do
  begin
    Msg := SX_MESSAGE1;
  end;
  MsgRec.WParam := Msg.WParam;
  Form1.Panel1.Broadcast(MsgRec);
end;

procedure TMyEdit.SXMessage1(var Msg:TMessage); 
begin
   self.Text := self.Text + chr(Msg.WParam);  //IntToStr(Msg.WParam);
end;     

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
  for i:= 0 to 4 do
  begin
    MyEdits[i] := TMyEdit.Create(self);
    MyEdits[i].Parent := Panel1;
    MyEdits[i].Name := 'MyEdit'+IntToStr(i);
    MyEdits[i].Left := 4;
    MyEdits[i].Width := self.ClientWidth - 4;
    MyEdits[i].Height := self.ClientHeight div 8;
    MyEdits[i].Top := i*MyEdits[i].Height;
    MyEdits[i].Text := '';
  end;
  InputEdit := TInputEdit.Create(self);
  InputEdit.Parent := Panel1;
  InputEdit.Left := 4;
  InputEdit.Color := RGB(0,200,100);
  InputEdit.Top := 6*MyEdits[4].Height;
end;
end.
