画像を表示するプログラムを作っているのですが、
通常に表示するだけなら問題なくできました。(仮にunit1)
しかし今度は全画面に拡大表示する機能を付けたいと思い、
全画面を覆うような新フォームを作って(Imageも配置)
キー操作ですぐに切り替えることまではできました。(仮にunit2)
すでにファイルを読み込ませるためのprocedure(仮にLoadPicFile)は
つくっておいたので、unit2のusesにunit1と書いて、
さっそくLoadPicFileを呼び出したんですが、未定義の識別子として
エラーになってしまいます。試しにunit1のグローバル変数を参照したら
ちゃんとデータが入っていたので、変数は大丈夫なのに、なぜ?
と思ったのです。
むろんすべてをform1だけで終わらせれば良いのですが、
拡大表示を別ルーチンとして分けたら効率がよさそうだと思ったので、なんとかしたいのですが…、ご教授お願いします。
ちょっと想像しにくいのですが、LoadPicFileは、unit1のどこに定義してありますか?
Form1のメンバプロシージャとして定義しているのであれば、Publicで定義していますか?
クラスのメンバプロシージャでないのなら、implementationより前に定義してありますか?
エラーからして違うとは思いますが、名前空間は解決していますか?
すみません解決しました。
通常の呼び出しでは「procedure TForm1.LoadPicFile()」とあったので、
TFormという呼び方にしないといけないのかと思って「TForm1.LoadPicFile()」
と別ユニットから呼んでいました。
「Form1.LoadPicFile()」で問題なく呼び出せました。
お騒がせしてすみませんでした。
ちなみに同ユニット内ではTFormですが、
これにはどんな意味があるのでしょうか?
implementation以下に定義してある、
procedure TForm1.LoadPicFile;
begin
...
end;
というものは、TForm1クラスのメンバプロシージャ、LoadPicFileの実体です。
定義は、implementationより上の、Type節に定義してある、
TForm1 = class(TForm)
...
end;
で、この中は、TForm1クラスであることが自明ですので、TForm1.はつけずに、
procedure LoadPicFile;
と定義します。
implementation以下で、なぜTForm1.が必要かというと、たとえばunit1の中で、TForm1クラスのメンバープロシージャLoadFromPicと、unit1のグローバルプロシージャLoadFromPicがあった場合、それぞれを区別できないからだと思います。
# C++だと、クラス定義に関数の実体も含ませられますが、Delphi(Pascal)ではどうかわかりません。
ツイート | ![]() |