自作関数を他Formで使えますか?

解決


さすらい初心者  2003-01-05 17:58:02  No: 2497  IP: [192.*.*.*]

現在、関数をForm1でPublic宣言しているのですが、他のFormから呼び出して実行するとエラーとなります。
そもそも、プロジェクトの中でForm1で作成した関数を他のForm(Form2,Form3...)で使用する事は可能でしょうか?
やはりクラスを作成しないとダメでしょうか?
よろしくお願いします。

編集    削除
たかみちえ  URL  2003-01-05 18:45:20  No: 2498  IP: [192.*.*.*]

ちゃんとuses節に加えてますか?
プロジェクト内にあるユニットなら、ユニットの使用(Alt+F11、キーボードマップによって違う場合あり)で追加できるので、
それでusesに加えてから使ってください。

  Delphiのコード補完は、たびたびバグが発生するようでいまいち頼りないですが、
それでも、自作関数がコード補完に出てこない時点で、周囲にエラーが発生しています。
(その前に致命的文法エラーがあったり、探しているファイルがない、戻り値や変数の型が想定したものと違うなど)
自作関数が出てこなかったら、とりあえずおかしいと思ってください。

編集    削除
さすらい初心者  2003-01-05 20:38:25  No: 2499  IP: [192.*.*.*]

はい、uses節に加えてあり、Delphiのコード補完でもちゃんとFunctionで出てきます。コンパイルも正常に行えます。
でも、そのプログラムを実行した時に目的の動作をとりおこなってから(自作関数の動作が完了してから)エラーが出ます。

エラーは「このプログラムは不正な処理・・・」というやつで、詳細をみてみると「(プロジェクト名)のページ違反です・・」と出てきます。

ひょっとして、自作関数のコードそのものに問題があるのかなぁ。
ちなみに、自作関数はForm1に貼り付けたListBoxも使用したルーチンとなっています。このあたりに問題はないでしょうか?

編集    削除
にしの  2003-01-05 21:44:33  No: 2500  IP: [192.*.*.*]

ListBoxを使った自作関数で、同じように不正処理になったことがあります。
同じForm上でもだめでした。
# 自前でListBoxを作成し、表示するものでした

処理を追ってみると、TListBox.Itemsの操作あたりで落ちていて、さらに追うと、TStringsの継承クラスである、TListBoxStringsで落ちたみたいです。

TListBoxStringsクラスは結構くせ者で、TListBoxのハンドルを操作してItemsの中身を設定しています。
もしかしたら、このあたりが原因かもしれません。

解決策でなくてすみません。

編集    削除
たかみちえ  URL  2003-01-05 21:47:17  No: 2501  IP: [192.*.*.*]

おみそれいたしました<m(__)m>
("初心者"とかかれると、プログラムを二日三日ほど前に始めた人と判断してしまうので…)

  さて・・・、ともにusesに加えていない限りコンパイルできないはずなので、
多分コードの問題でしょう。

  デバッガを使って、参照するあたりをステップ実行で調べてみるのがいいです。
デバッガを使ってもなんの警告もなしに、いきなり強制終了するようなことはめったに無いようなので、手がかりくらいは見つかると思います。

  察するにListBoxのリストアイテムの操作が暴走していたりするのではないかと思いますけど、よくわかりません。
強制終了ダイアログのって、ほとんど"ページ違反"ですから(^^ゞ

編集    削除
さすらい初心者  2003-01-05 22:14:37  No: 2502  IP: [192.*.*.*]

にしのさん。たかみちえさん。ご意見ありがとうございます。

いろいろやってみると、他の関数はうまく動作します。
そして問題のエラーの出る関数。この関数だけListBoxを使っています。

どうも、にしのさんのレスが的を付いているような気がしてきました。
さっそくデバッカでコードを調べてみます。
(実はデバッカをちゃんと使った事ありませんが。。この機会にデバッカ機能を習得します。← やはり初心者 (^^;   )

編集    削除