メインページへ

DELPHIの謎・・・


 これは、DELPHIを巡って起こる、数々の謎を解き明かす物語である。

 ふっ、ふっ、ふっ、
 私の方がよっぽど詳しいぜ☆☆☆
 と、お思いのお方の御助言を望むものである☆☆☆



空の関数が消えない・・・


 配置していたボタンのクリックイベントが不要になって、イベントに書いた文をすべて削除して空の関数にしたとします。  この場合、次回実行時に、空の関数は自動削除されます。  ところが、空の関数にもかかわらず削除されない事があります。
 なんとかならないものか???

 いろいろ試した結果、空の関数をエディター画面の一番下に持っていくと良いようです。  どうも、いろいろな関数に挟まれていると、空の関数が削除されない場合があるようです。


某J氏より御意見を戴けました☆☆☆
>消えない関数:関数直後(end;の下の行)にコメント行があるとだめです。コメント
>行を消してから保存などすると消えてくれます。

一番下に、持っていかなくても、直後にコメント行が無ければ大丈夫なんでしょうかね!? 今度試してみます☆☆☆

おぉ、バッチリ消える様になりました☆☆☆  御助言感謝☆☆☆



FINALLYの動作がおかしい・・・


 エラートラップのFINALLYなんですけど・・・  期待通りの動作をしないんですよねぇ・・・  で、使わない事に決めていました。

 今回、動作チェックの方法を思いついて試したところ、凄い関数である事が判りました☆☆☆

TRY
EXCEPT
END;
これは、想像通りに動くので説明は省きます。

TRY
A;
EXIT;
FINALLY
B;
END;
C;

 このプログラムを実行すると、AとBだけ実行される事が判明しました☆☆☆  EXCEPTなら、Bが実行されれば、当然Cも実行されますが・・・  もっとも、EXIT;があるので、Aだけしか実行されませんが・・・  FINALLYでは、Bを実行後、そこで終了します☆☆☆

 これじゃあ、期待通りの動作をしないわけだぁ(^_^;;(^_^;;

 でも、FINALLYのこの強力な機能を使えば、いろいろと面白い事も出来そうです☆☆☆



のっぺらぼうの、スピードボタン・・・


 DELPHI3だけの現象なのですが・・・  WIN95の文字の色を白に指定してあると、スピードボタンがのっぺらぼうになります・・・  げろげろ・・・  DELPHI2までは、問題なかったのに・・・

 これ、ボーランドにお伺いを立てたところ、確認できたけど、対策無しだそうです・・・

 文字を白、バックを緑にして使っているので、緑色一色になって大変困っています・・・  しくしく、しくしく・・・

 この怪現象は、DELPHI3.1では直りました☆☆☆ 良かった良かった☆☆☆



のっぺらぼうの、ヒント・・・


 以前文句を言ったので、ツールバーのヒントは強制的に黒になっていますが・・・  DELPHI3で新設された、エディター下のエラー表示のヒントの文字がデフォルト色設定になっていました・・・  WIN95の文字を白に設定してあると、バックが黄色の為、何が書いてあるのか判らないんです・・・  しくしく、しくしく・・・

 ヒントのバックの色は黄色ですが、これって、グローバル変数を使うと自由に変えられるんです☆☆☆  ですが、文字が強制指定の黒と、デフォルト指定の白が混じっているので、白/黒文字両方に合う、いいバックの色がないんです・・・

 ヒントの文字の色は、強制指定か、デフォルト指定か、どちらかに統一して欲しいものです・・・

 これ、delphi5でも、直っていない(^_^;;



検索範囲指定が間違っています・・・


 DELPHI3になってから、現れた現象ですが・・・  検索しようとすると、時たま、  「検索範囲指定が間違っています」  と、表示され、何度カーソル位置を変えて、F3キーを押し直しても駄目だったりします・・・  うるうる、うるうる・・・

 ボーランドに問い合わせたところ、うちでは発生しませんと、けんもほろろ・・・

 いろいろ試した結果、検索入力をやり直すと直るみたいです☆☆☆  何故、このような奇怪な現象が起こるのか、未だに謎です・・・


某J氏より御意見を戴けました☆☆☆
>検索の異常:検索文字をShift+矢印で囲った後に、検索を実行するとその現象が発生
>します。範囲を解いた後、再度検索窓を出してやり直すしかないようです。

だそうです☆☆☆

ちなみにこれ、delphi V4.0にしてから、出なくなりました☆☆☆ V3.0-1特有のバグだったみたいです☆☆☆



usesの怪・・・


 ふだん何気なく使っているusesですが・・・  これって、ユニットの並べ方を変えると、コンパイル出来なくなる事があります。

 複数のユニットで同名の関数が定義されていた場合、初めのユニット関数が使われる為です。

 実はシステム提供のユニットには、このダブり定義がありまして・・・  ユニットの並べ方を変えると、正常にコンパイル出来なくなる関数があるんです。  定義内容が違うからなんですねぇ・・・

 ユニットは、新規作成したプロジェクトのユニットのuses文を基本の並べ方として使った方がいいようです☆☆☆

 デタラメに並べると、訳の判らないエラーが貴方を襲います・・・  特にDELPHI1のを移植した時がアブナイです・・・  くわばら、くわばら・・・



EXIT;を入れただけで暴走する・・・


アプリを新規作成して、EXIT;をぶち込みます

Application.Initialize;
EXIT;
Application.CreateForm(TForm1, Form1);
Application.Run;

たった、これだけの事で、「DFWDBK32.DLL」で読み込み違反が発生しました
と、いうエラーが発生します。
続けて実行ボタンを押すと、飛びます飛びます☆☆☆

 ボーランドに問い合わせたところ、うちでは発生しませんとの事・・・  なお、よくよく聞いたら、IE4.0は入れていないし、IE4.0との相性を確かめるつもりもないと、言われてしまいました・・・  げろげろ・・・

 IE4.0を導入した環境で、上記のテストをして戴ければ、幸いです。
 これは、うちだけの現象なのでしょうか???



BMPファイルヘッダーのオフセットが間違っている・・・


 CGファイルのヘッダー情報のバグは、勘弁して欲しいです・・・  大体、こういうのがたくさん出回ると、CGローダー制作者さんの頭を悩ませる事になる(^_^;;

 6万色時、256色のBMPをロードして、クリップボードに入れ、戻します。  このBMPをセーブします。  すると、6万色のBMPファイルが出来ます。  この時、BMPファイルのヘッダーのオフセット情報が間違っているんです・・・  で、このファイルを壁紙として張り付けると、表示がずれます・・・  げろげろ・・・

 間違っている場所
 先頭14バイトは、BMPファイルヘッダー情報なのですが、その最後の4バイトは、BMPイメージデータ部へのファイル先頭からのオフセットなんです。  この値が間違っているんです。

 正しい値は???
 BMP構造が判らないと駄目なんです。
 4つのブロックから構成されています。
 1,BMPファイルヘッダー情報
 2,BMPイメージヘッダー情報
 3,パレット情報
 4,BMPイメージデータ部

 パレット情報が必要なのは、256色以下だけです。  3万色以上には、パレットデータはなく、イメージデータが、直に色を示しています。

 で、今回問題となったファイルは、6万色のデータに変換されているにも拘わらず、パレットデータを持っていたりします。  このパレットデータは、256色時の物であり、6万色表示では使われません。  本来なら、このパレットデータ自体、削除しておくべき物なのかもしれませんが・・・  256色データに変換する際に便利なので、残しているのでしょうか???  ま、このあたりの意図は定かではないです・・・

 よって、6万色といえども、パレットデータがあるから、イメージデータ部へのオフセットは、パレット情報の直後を指していなければ、いけないんです。  と、ところが、問題のあるファイルは、オフセット値が、パレット情報の先頭を指しているんです。

このパレット分のずれがどういう形で影響するのか???
 実は、BMPファイルは、上下逆さまに格納されています。  CG上部が、パレットデータ分、飛ばされて表示され、一番最後に、パレット情報が表示される為、一番下、数ラインがデタラメになります・・・

試してみたけど、そんなことありませんよ!?
 じ、実は、このバグ対策済みのBMPローダーが結構あるみたいなんですぅ・・・  DELPHI自身でセーブ/ロードしても、大丈夫でしたし、WIN95付録のペイントでも大丈夫でした☆☆☆

MSのツールでも大丈夫なんじゃ、そのバグはもう、市民権を得ているのでは???
 そういえるかも、しれません・・・  しかし、しかし・・・

壁紙として張り付けると、ずれるんです!!!

 本来、イメージ部の先頭を指さなければいけないオフセット値が、残存しているパレット情報の先頭を指しているのは、明らかに、BMPファイルの規格違反です!!!  速やかに、直すべきです☆☆☆

 ちなみに、この問題のあるファイルをDELPHI2.0で、作ったツールで読み込み、セーブすると、ちゃんとしたオフセット値になって戻ってきました☆☆☆  どうやら、DELPHI3.1になってからのバグらしいです・・・

 ちなみに、ボーランドにねじ込んだら、95では発生するが、NTでは、ちゃんと表示される、よってこれは、95のバグかもしれないと言われてしまいましたぁ・・・  しくしく、しくしく・・・

 正義は何処にある!?



ビットマップが不正です・・・


 ビットマップが不正です・・・
 って言われたって・・・
 さっきは、ちゃんと読めたじゃん☆☆☆

 うぅ・・・

 どうも、これ、256色モードで使っていると、おき易いんです・・・  BMPロード直後にそのデータの処理をすると起きるみたいですぅ・・・  リフレッシュしても駄目だしなぁ・・・  あー、256色モードのソフトは、作りたくない(^_^;;



理解不能のエラーが出続ける・・・


 エラーが出た後、コードを正常に変えても、エラーが出続ける事があります・・・

 なんとなく判ってきた事は・・・  エラーが出たら、DELPHIを一旦終了して、立ち上げ直すと良いと言う事です☆☆☆  この処置をしてから、訳の判らないエラーの続出から、解放されました☆☆☆

 実は、今までは、エラーが出ても、そのまま続行していたんです☆☆☆  どうも、エラーからの回復が出来きれないエラーがあるようで・・・

 動作が怪しかったら、DELPHIを一旦終了して、立ち上げ直すのがポイントのようです☆☆☆

 この時、必ず、実行中のプログラムを停止させてから、DELPHIを抜けて下さい・・・  実行中に、DELPHIを閉じると、いっちゃいます・・・



困った時は、dskよ、さようなら☆☆☆


 暴走した時に、dskファイルに、変なデータが書き込まれてしまう事があるようです・・・  困った時は、dskファイルを削除するといいようです☆☆☆

 特に、バージョンアップ等で、別のフォルダーにコピーした時には、必ず消しましょう☆☆☆  これを忘れると、前のフォルダーのファイルと、新しいフォルダーのファイルがごちゃごちゃになって、訳が判らなくなります・・・



NTだと、動かない・・・


 95では、問題なく動いても、NTだと、トラブル事があるようです・・・

 某イベントに入れた関数が、95だと、問題なく実行されるのに、NTだと、トラブルという現象に見舞われました・・・  それなのに、NTの別のイベントだと、問題なく動くという・・・  訳が判らない・・・

 どうも、95と、NTは、OSの作りが違うのが原因なのだと思われます・・・  NT対応と、明記したかったら、NTでも、動作チェックをすべきです☆☆☆

 これって、単なるNTのバグだったりして(^_^;;(^_^;;



新規プログラムを作る時・・・


 初めてプログラムを作る時って、何処にセーブしたらいいのか判らない・・・  こんな事、書いてないんだよねぇ・・・

 私は、\DELPHIと、言うフォルダーを作って、更に、ブログラム毎にサブフォルダーと、そのバージョン用のサブフォルダー作っています☆☆☆  で、初め空のフォームを実行して、目的のフォルダーにセーブしてから、作業に取りかかる事にしています☆☆☆

 ま、判ってみれば大した事ないのですが・・・  初めの内は、一つのフォルダーにいろいろなプログラムが混ざって、訳ワカメでした・・・



プログラム実行前に自動セーブ☆☆☆


 こういうオプションがあるんです☆☆☆  これをチェックしておくと・・・  実行ボタンを押すと、プログラム実行前に自動セーブされるんです☆☆☆

 どうしても、暴走は付き物なわけで・・・  自動セーブしとくと、暴走しても、前回書き換えたプログラムが残っているので、大変便利です☆☆☆



自作コンポーネントは何処に置くの???


 初めは、プログラムと同様に扱ったのですが・・・  コンポ毎に、フォルダーの設定をしなければならず・・・  また、フォルダーは、数個しか登録できない事が判明・・・

 よって、現在は、一つのフォルダーに押し込めています☆☆☆

 ごちゃごちゃになりますが・・・  先頭のファイル名を合わせれば、結構区別がつくものです(^_^;;



張り付けたらぶっ飛んだ・・・


 これが、DELPHI1.0Jとの出会いでした・・・

 ドライブコンボボックスを張り付けただけでぶっ飛ぶんですよねぇ・・・  サポートに問い合わせても「らち」が明かず・・・  だって、再現しないって言うんだ・・・  ウルウルウル・・・

 飲まず喰わすで10日間!?

 試行錯誤の結果・・・
 WIN3.1のスワップを、一時スワップから、常設(常駐??)スワップに変更したら直ったのでした☆☆☆

 これが、DELPHIとの出会いでした☆☆☆

 しかし・・・
 買って10日間も使えなかった言語なんて、初めてでした(^_^;;(^_^;;

 ちなみに、サポートには、一時スワップでも再現しないと言われてしまいました・・・  どうも、メモリー容量も、影響するみたいで・・・

 やはり、DELPHIは、謎にみちている(^_^;;



イベント内、相性!?


 ボタンで実行するとちゃんと動くのに・・・  とあるイベント内で使うと、期待通りに動かない関数があるようです・・・  これって、とあるイベント内では、実現不可能な関数なんでしょうねぇ・・・

さて、どうする!?

 これって、タイマー使って、タイマー内で実行するといいようです☆☆☆  もっとも、タイマー内で、正常に動かない場合は、お手上げですが・・・  いまんとこ、そんな関数は無いみたいです☆☆☆

 こういう現象って、結構あるみたいですぅ・・・  WIN98では動くが、NTでは動かない時も、実は、この現象が起こっていました・・・  動作が怪しい時は、別の関数内で、正常に動くかどうか試してみましょう☆☆☆  しかし、これってなかなか辛い問題ですねぇ・・・

 暴走すれば、すぐに判るけど・・・  暴走しないけど・・・  何も起こらない時は・・・  何が起こっているのか良くわかんなくて、超辛かったりするぅ・・・

 タイマー以外にも回避策無いでしょうかね!?  やたらタイマー使うと、なんかエレガントじゃないよな・・・



解除キーを無くした・・・


 delphi4のCD-ROMを、部屋の整理をした時に捨ててしまったようです・・・  げろげろ・・・  アップデート出来ない・・・  早く、delphi5でないかな(^_^;;(^_^;;



NSPLAYを貼り付けるとぶっ飛ぶ・・・


 これって何が原因なんでしょうかねぇ・・・  delphi1のドライブコンボボックス貼り付けぶっ飛び事件の再来だぁ・・・  って、あの時ほど、ひどくは無いけど・・・



システムが不安定になるコンポ・・・


 通常に使うと、そのあと、システムを不安定にさせてしまうコンポがあるようです・・・  MNHTTPとか・・・  AMOVIE.OCXとか・・・  これって、delphiの問題なんでしょうか???  気になるところです・・・



delphi5高過ぎ・・・


 マニュアル別売で、2万1千円もする・・・  毎年毎年バージョンアップでは閉口です・・・  毎年2万も取られるのは辛すぎ・・・  1万が限度だよなぁ・・・



ポインターが計算できた☆☆☆


 ポインターを計算しようとするとエラーが出るんです・・・  でも、ポインターが計算できなかったらすげー不便なんだよなぁ・・・  今までは、0の配列構造体でごまかしていたんだけど・・・  これだと、バイト単位でしか扱えず・・・  2バイト、4バイトの数値に戻すと一苦労・・・  だから、ポインターは極力使わなかった・・・  何で計算出来ないの???

 く、苦節3年???  あ、もっとかな???(^_^;;(^_^;;  ようやく計算方法が判りました☆☆☆  それは、型付きポインターにすればいいんです☆☆☆  結局、型無しポインターは、+1が何バイト足して良いか判らないというんで、 エラーになっていた模様です・・・  融通利かせて、1バイトで計算してくれれば良かったのにぃ・・・

 こんな事が判らなかったなんて・・・  うるうる・・・うるうる・・・ 

 結局、良く判っていないから、質問も上手く出来なかったのでした・・・  ま、判らないというのは、そういうもんですね☆☆☆



TStringListの謎・・・


 TStringList型の受け渡しなのですが・・・  これを「:=」で受け渡すとまずいんです・・・  ソフト終了時、訳の判らないエラーが出ます・・・

 たぶん、ポインターの受け渡しをしていて・・・  終了時、元のリストが先に開放されると、エラーが出ると言う事なのかな???  良く判らんけど・・・

 現在は、
with List_B do begin
clear;
AddStrings(List_A);
end;
で、どうにかしのいでいます☆☆☆
この対策を打ってから,訳の判らないエラーから開放されました☆☆☆

めでたしめでたし☆☆☆

 ListBoxも、御用心です☆☆☆  あと、Assign();を使う方法もあるみたいです・・・

 この対策は、もうずーーっと前から使っていたのですが・・・  自作コンポに、未対策残っていて唖然・・・  設計の古いソフトは、御用心(^_^;;



DELPHIにまつわる謎な現象、お待ちしています・・・


 お便りは、 MERON SOFT (meronsoft@green.zero.jp) まで。

DELPHI6は、バグバグだぁ☆





ご質問は MERON SOFT (meronsoft@green.zero.jp) まで。

メインページへ