現在フォーカスされている/アクティブなフォームでコンポーネントを選択する必要がありますが、これを完全に行う方法を理解できません。それで、私はすべての一般的な手順を備えたデルファイユニットを持っているので、他の形式からそれらを呼び出します。さて、私がコンポーネントshow actionと呼ぶ手順の1つでは、コンポーネントが各フォームに配置されているため(すべてのフォームで使用できる1つのコンポーネントを配置する方法が見つかりませんでしたが、これはどういうわけかできないと思います。間違っていますか?)、現在アクティブなフォームでコンポーネントのshowイベントを呼び出す必要があります。そうしないと、コンポーネントを呼び出す指定されたフォームがアクティブになり、フォーカスされます。
これまで、Screen.ActiveFormとScreen.ActiveForm.Nameを介して現在のフォーム名を取得しようとしましたが、コンポーネントの親が定義されていないためにコンパイラがコンパイルされないため、これは機能しません(エラー"'TForm'の取得'KeyBoard1"という名前のメンバーが含まれていません"...)
手順コードは次のとおりです。
procedure KeyDownEvents(var Key: Word; Shift: TShiftState);
begin
CurrentForm:=Screen.ActiveForm.Name;
if Key = VK_F9 then CurrentForm.KeyBoard1.Show;
end;
グローバル変数の使用
var CurrentForm: TForm;
私は10の異なる組み合わせのように試したので、どこで何が欠けていますか...?
ありがとう、
マーク
追伸:上記のように、コンポーネントを配置または呼び出す方法はありますか、任意のフォームでアクティブにするか、各フォームに配置する必要があるため、フォーカスは変更されません...?私はMDIでコンポーネントをメイン形式で使用できることを知っていますが(私が知る限り...)、複数のモニターが必要なため、SDIで作業しています...
Davidの完全なコード:
unit CommonProcedures;
interface
uses Classes, Dialogs, StdCtrls, Math, Winapi.Windows, Winapi.Messages,
Vcl.Controls, Vcl.Forms, AdvTouchKeyboard;
procedure KeyDownEvents(var Key: Word; Shift: TShiftState);
var
CurrentForm: TComponentName;
KeyBoard1Visible: Boolean;
implementation
uses Startup, Main, Controller, Settings, Patch, Output, StageVisual, FixturesEditor,
FixturesEditorGlobal;
procedure KeyDownEvents(var Key: Word; Shift: TShiftState);
begin
CurrentForm:=Screen.ActiveForm.Name;
if ((ssAlt in Shift) and (Key = VK_F4)) then Key:=0;
if Key = VK_F1 then Main1.Show;
if Key = VK_F2 then Controller1.Show;
if Key = VK_F3 then Settings1.Show;
if Key = VK_F4 then Patch1.Show;
if Key = VK_F5 then Output1.Show;
if Key = VK_F6 then StageVisual1.Show;
if Key = VK_F7 then FixturesEditor1.Show;
if Key = VK_F8 then FixturesEditor2.Show;
if Key = VK_F9 then
begin
if KeyBoard1Visible=False
then
begin
KeyBoard1Visible:=True;
CurrentForm.KeyBoard1.Show;
end
else
begin
KeyBoard1Visible:=False;
CurrentForm.KeyBoard1.Hide;
end;
end;
end;
終わり。
ご覧のとおり、他のすべてのキーイベントは完全に重要ではないため省略しましたが、キーボードが表示されているか非表示になっているかを確認するプロセスも省略しているため、VK_F9はトグルキーとして動作します。
数日前にプログラムを作成し始めたばかりなので、これまでのところ、これがこのユニットの唯一の手順です。まだ一塁手にあるので、そう言いました...そうです、ご覧のとおり、それは一種の軽いものです。 -私の4年生のプロジェクトであるコントローラープログラムを表示します。
追伸:質問をさらに明確にするために編集したときに、質問に反対票を投じる理由がわかりません...