SorcererでGIFファイルをリンクする時、自動的にファイルの縦横ピクセル数(WIDTHとHEIGHT)を挿入するようにしています。
これは、ホームページ閲覧者が画像の取り込みに失敗したり、遅い回線速度や重いサーバの為なかなか画像が表示されなかったりした時にページのレイアウトが崩れるのを防ぐという重要な指定です(なくても良いけど・・・(^^;))。ところが、対象のGIFファイルのファイル属性が「読み取り専用」になっていた場合、この縦横幅の取得に失敗するというバグが発見されました(hitomiさん、ありがとう!)。
例えば、素材集CD-ROMなんかからハードディスクにコピーした場合、属性が「読み取り専用」のままになっている事があるらしい。この原因の究明には苦労しました。
GIFファイルの縦横幅は、まずAssignして、Reset手続きを呼出し、Seekでファイルの目的の個所(4個所)を1バイトづつ読み込んで算出しています。で、とにかくDelphiのヘルプで入出力関係の個所を何度も読み返し、ようやく判明したのが、以下の点です。
・Reset手続きでファイルをオープンする時は、(テキストファイル以外は)「読み書き用」にオープンされる。
・つまり「読み取り専用」属性のファイルを「読み書き用」に開こうとするとエラーになる。
・もし、読み込み専用でオープンしたいなら、Resetの前にFileModeに0を代入しなければならない(FileModeのデフォルト値は2)。要するに、プログラムの順番を
AssignFile → Reset → Seek から
AssignFile → FileMode:=0 → Reset → Seek に変更しただけですが、これで「読み取り専用」属性のGIFファイルもきちんと縦横幅が読み取れるようになりました。
なんか初歩的なミスをやったものです。いやはや・・・(^^;)。