TKeyMacro コンポーネントは、キーボードマクロを実現するための 非ビジュアルコンポーネントです。

Delphi-IDE のコードエディタで、Shift + Ctrl + R で記録開始・記録終了 Shift + Ctrl + P で記録されたキー操作を再現することが出来ますが、 TKeyMacro コンポーネントは、この仕組みを、フォーカスを受け取る (OnEnter イベントを持つ)TWinControl に対して実現するためのコンポーネントです。

使い方

TKeyMacro の Control プロパティに TMemo, TEdit などキーボードマクロの 対象となるコンポーネントのインスタンスを代入しておき、 BeginRec メソッドで記録、EndRec メソッドで記録終了、 Execute メソッドで記録したマクロを実行することが出来ます。 開発日誌のページに 技術情報があります。

サンプルコーディング。サンプルプロジェクト実現部そのままですが。


procedure TForm1.Memo1Enter(Sender: TObject);
begin
  // 対象コンポーネントを取得
  KeyMacro1.Control := TWinControl(Sender);
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  // マクロ記録開始・終了
  if not (KeyMacro1.Status in [msRecording, msRunning]) then
    KeyMacro1.BeginRec
  else
    KeyMacro1.EndRec;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  // マクロ実行
  KeyMacro1.Execute;
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
  // マクロデータをクリア
  KeyMacro1.Clear;
end;

procedure TForm1.KeyMacro1Change(Sender: TObject);
begin
  // TKeyMacro コンポーネントの状態に合わせて
  // フォーム上のビジュアルを更新する。
{
  +------+----------------------+----------------------+-----------+
  |      | SpeedButton1 (Rec)   | SppedButton1 (Exe)   | Label1    |
  +------+---------+------------+---------+------------+-----------+
  |Status| Enabled | Font.Style | Enabled | Font.Style | Caption   |
  +------+---------+------------+---------+------------+-----------+
  |無し  |  True   | []         | False   | []         | None      |
  +------+---------+------------+---------+------------+-----------+
  |記録中|  True   | [Bold]     | False   | []         | Recording |
  +------+---------+------------+---------+------------+-----------+
  |待機中|  True   | []         | True    | [Bold]     | Waiting   |
  +------+---------+------------+---------+------------+-----------+
  |実行中|  False  | []         | False   | [Bold]     | Running   |
  +------+---------+------------+---------+------------+-----------+
}
  case KeyMacro1.Status of
    msNone:
      begin
        SpeedButton1.Enabled := True;
        rec1.Enabled := True;
        exe1.Enabled := False;
        SpeedButton2.Enabled := False;
        SpeedButton3.Enabled := False;
        Label1.Font.Color := clBlack;
        Label1.Caption := 'None';
      end;
    msRecording:
      begin
        SpeedButton1.Enabled := True;
        rec1.Enabled := True;
        exe1.Enabled := False;
        SpeedButton2.Enabled := False;
        SpeedButton3.Enabled := False;
        Label1.Font.Color := clRed;
        Label1.Caption := 'Recording';
      end;
    msWaiting:
      begin
        SpeedButton1.Enabled := True;
        rec1.Enabled := True;
        exe1.Enabled := True;
        SpeedButton2.Enabled := True;
        SpeedButton3.Enabled := True;
        Label1.Font.Color := clMaroon;
        Label1.Caption := 'Waiting';
      end;
    msRunning:
      begin
        SpeedButton1.Enabled := False;
        rec1.Enabled := False;
        exe1.Enabled := False;
        SpeedButton2.Enabled := False;
        SpeedButton3.Enabled := False;
        Label1.Font.Color := clRed;
        Label1.Caption := 'Running';
      end;
  end;
end;