[fpr 1055] Delphi3から2へ

岡本安晴

岡本@金沢大学です。

  [fpr 1054]より:

>Delphi3の dfm って、Delphi2 と互換性
>がないようですね、私の持っているDelphi 2.0j ではエラーメッセージがでま
す
>が、無視して実行してみました。

  私の場合も、Delphi3で作成したプログラム(Windowsの世界ではプロジェク
ト
というようですが)をDelphi2で開こうとするとエラーが出ました。コンポー
ネントのプロパティに違いがあるのではと思いました。ハードディスクに余裕
がないので、今はDelphi3のみをインストールして使っています。

  Delphi3で作成されたプロジェクトをDelphi2用に直すのは次のように
しても出来るのではと思います。

  Delphi2のプロジェクトと3のものとの違いによるエラーは、コンポー
ネントのプロパティにあるのではと思います。ユニットのuses節で宣言
されているものにも違いがあるかもしれません。このことを踏まえて、
次のようにしてDelphi3のプロジェクトをDelphi2用に書き移すことが
できるのではと思います。基本方針は、*.dfmはDelphi2で用意して、
*.pasのソースコードの部分はDelphi3で作成されたものからコピー
する、です。

  まず、*.dfmを、Delphi2でプロジェクト新規作成によって用意します。
フォームに追加するコンポーネントはDelphi3の*.pasの内容に合わせます。
私の不偏分散を調べるプログラムの場合、*.pasを見て頂くとTForm1は次の
ようになっています。

    TForm1 = class(TForm)
        MsgLabel: TLabel;
        OKButton: TButton;
        ExitButton: TButton;
        Label1: TLabel;
        NEdit: TEdit;
        procedure FormActivate(Sender: TObject);
        procedure ExitButtonClick(Sender: TObject);
        procedure OKButtonClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private 宣言 }
      public
        { Public 宣言 }
      end;

  用いているコンポーネントは、以下の5つです。

        MsgLabel: TLabel;
        OKButton: TButton;
        ExitButton: TButton;
        Label1: TLabel;
        NEdit: TEdit;

  Delphi2で新規作成で表示されているフォームに、この4つのコンポーネント
を用意します。

  次にイベントハンドラーの設定をします。上のプロジェクトでは次の5つの
ものが使われています。

    procedure FormActivate(Sender: TObject);
    procedure ExitButtonClick(Sender: TObject);
    procedure OKButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  これらをDelphi2のオブジェクトインスペクタによって用意します。
各ハンドラの実行部は;を入れて空文としておきます。
  例えば、

      procedure FormActivate(Sender: TObject);
      begin
             ;
      end;

とします。これは実行部に何も書かないで次の作業に移るとそのハンドラが
Delphiによって勝手に消されてしまうことがあるからです。

  以上の作業で、Delphi2での*.dfmが用意できたことになります。

  *.pasのソースコードのコピーはWindowsのコピー/貼り付けの機能で
簡単に行えます。イベントとイベントハンドラの割り当てなどは*.dfm
に記述されている(これは*.dfmファイルをDelphiのエディタで開けば
テキストファイルとして表示されるので見ることができます)ので、
ユニットファイル全体をコピーすればよさそうですが、uses節など
Delphiが自動的に用意する部分はDelphi2と3で異なっている可能性が
ありますので注意が必要です。

  以上の手順で、Delphi3のプロジェクトはDelphi2のものに書き移す
ことができると思います。


  Delphi2で作成したプロジェクトはDelphi3でも開くことができる場合が
多いようです。拙著「Delphiプログラミング入門」(CQ出版社、1997)の
サンプルプログラムはDelphi2で作成したものですがDelphi3で開いても
大体大丈夫なようです。
  上記の拙著で気を付けなければいけないのは、2.6節「コンポーネントの
インストール」のところです。リスト2.6.1(乱数生成用のクラス型)
で9〜10行目の

    type   TUniRandom  = class(TComponent)
                                        s1, s2, s3 : integer;

の箇所はpublicを挿入して

    type   TUniRandom  = class(TComponent)
                                  public
                                        s1, s2, s3 : integer;

として下さい。
  これは、Delphi3ではclass(TComponent)の直後はpublishedの指定であると
みなされているからです。


  本年度から金沢大学総合情報処理センターの実習室にDelphi3/WindowsNTが
導入されましたので、授業で使っています。Delphi2で作成した上記のプロ
グラムはDelphi3で作成されたもののように開いて実行できています。

  授業では、Delphi3によるビジュアルなプログラミング、実行時のGUI
の劇的な効果を学生さんは楽しんだようです。


                                          岡本安晴
                                          c00279 (at) simail.ne.jp


スレッド表示 著者別表示 日付順表示 トップページ

ここは心理学研究の基礎メーリングリストに投稿された過去の記事を掲載しているページです。