usersに指定したFindComponentの使用方法に関する質問です。以下のプログラムでusersに指定して別フォームのスピードボタンを操作しようとしたら「モジュール読み込み違反」が出てしまいます。別フォームのコンポーネントを操作する事は可能でしょうか?
implementation
uses amain;
procedure TForm1.Button1Click(Sender: TObject);
var
lname :String;
begin
lname :='Famain.SpeedButton1';
TSpeedButton(FindComponent(lname)).Enabled :=True;
end;
こんにちは,Mr.XRAYです.
>別フォームのコンポーネントを操作する事は可能でしょうか?
できますよ.
Form1 の ユニット名が Unit1
Form2 の ユニット名が Unit2
があったとします.IDEのタブで Unit1がアクティブとします.
[ファイル] [ユニットを使う] で Unit2 を選択します.
すると,自動的に,usesに追加してくれます.
このUnit2のフォームにButton1というコンポーネントがあったとします.
Unit1からは以下のようにして利用できます.
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Button1.Caption := 'テスト';
Form2.ShowModal;
end;
>すると,自動的に,usesに追加してくれます.
これは,[ファイル] [新規作成] [フォーム] // 項目はDelphiのバージョンによって異なる可能性あり
で作成した場合です.
もし,そうでないフォームの場合は,[プロジェクト] [プロジェクトに追加]で追加しておくか,
自分で usesに書くことになります.
Mr.XRAYさん、有難う御座います。しかし残念ながら質問の内容が違います。FindComponentを利用した方法のやり方はないでしょうか・・・?
procedure TForm3.Button3Click(Sender: TObject);
var
SpeedButton: TSpeedButton;
begin
SpeedButton := TSpeedButton(Form3.FindComponent('SppedButton2'));
if Assigned(SpeedButton) = True then
begin
SpeedButton.Enabled := True;
end;
end;
procedure TForm3.Button4Click(Sender: TObject);
begin
//実行時にSpeedButton2が無いとエラーになる
TSpeedButton(Form3.FindComponent('SpeedButton2')).Enabled := True;
end;
こんにちは,Mr.XRAYです.
ポカやってしまいましたね.
FindComponentの使用方法に関する質問でしたね.大変失礼しました.
KHE00221さん、有難う御座いました、出来ました!
Mr.XRAYも有難う御座いました、皆さんに感謝です。
ツイート | ![]() |