usersに指定したFindComponentの使用方法?

解決


マリ  2012-02-18 22:52:55  No: 41635

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  2012-02-19 00:09:09  No: 41636

こんにちは,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;


Mr.XRAY  2012-02-19 00:16:21  No: 41637

>すると,自動的に,usesに追加してくれます.

これは,[ファイル] [新規作成] [フォーム]  // 項目はDelphiのバージョンによって異なる可能性あり
で作成した場合です.
もし,そうでないフォームの場合は,[プロジェクト] [プロジェクトに追加]で追加しておくか,
自分で usesに書くことになります.


マリ  2012-02-19 01:55:22  No: 41638

Mr.XRAYさん、有難う御座います。しかし残念ながら質問の内容が違います。FindComponentを利用した方法のやり方はないでしょうか・・・?


KHE00221  2012-02-19 01:56:09  No: 41639

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  2012-02-19 02:31:59  No: 41640

こんにちは,Mr.XRAYです.
ポカやってしまいましたね.

FindComponentの使用方法に関する質問でしたね.大変失礼しました.


マリ  2012-02-21 01:04:45  No: 41641

KHE00221さん、有難う御座いました、出来ました!

Mr.XRAYも有難う御座いました、皆さんに感謝です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加