LoginSignup
0
1

More than 5 years have passed since last update.

c++ builder XE4, 10.2 Tokyo > TForm > 1つのフォームをベースに複数のフォームのインスタンスを作る

Last updated at Posted at 2016-06-24
動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)

やりたいこと

複数台のRS-232C通信処理を実装する。

通信処理はメインのユニットとは分離して、再利用性を高める。
分離する処理の実装は「TThreadにする」か「別ユニットのフォームにする」かなどが考えられる。別ユニットのフォームとして実装してみる。その前段階として1つのフォームを作り、そのフォームを複数個インスタンス生成してみる。

手順

構成としては以下とする。

  • Main.cpp : メインフォーム
  • UnitComm.cpp : 通信処理のフォーム (Name: FormComm)
  1. UnitCommを新規作成する
  2. プロジェクト > オプション > フォーム にて「自動生成フォーム」の欄からFormCommを「使用可能フォーム」に移動して自動生成を防止する
  3. Main.hにてUnitComm.hをincludeする
  4. Main.hにてTFormComm *m_commForms[10];のように宣言する
  5. Main.cppの処理で以下のようにインスタンス生成する
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for(int idx=0; idx<4; idx++) {
        m_commForms[idx] = new TFormComm(this);
        m_commForms[idx]->Show();
    }
}

上記にて4つのフォームが生成される。

TFormComm()のコンストラクタにてidxを引数として渡すなどして、それぞれ異なる処理を実装できる。

newで生成するのでMain終了時は適宜delete処理が必要。

TThreadでなくFormで処理する利点としては、FormにはTMemoなどを含めることができる。通信内容のデバッグなどがしやすくなる。TThreadでない短点としては、プライオリティの調整ができないこと。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1