ふぁいらあ開発日記

[DFって何?][日記][コマンド一覧][関連リンク][予定表][他のファイラー][逃げ帰る]

[トップを狙う]

1998年10月02日

関連付け設定コマンド実装

レジストリにガシガシ書き込んでいる。ほんとにこーいうやり方なんだろうか、と思っていたが、どうやらそーいう世の中らしい。

1998年10月03日

アイコン作成

アイコンを作ることにする。とりあえず書いてしまえば何とかなるだろう、ということで320x320ピクセルの大きさで描く。これだけ大きければちょっとしたミスは縮小するのでごまかせるだろう、という企みなのだ。
というわけで、ペイントで下絵を描いて、そのスキにダウンロードしたD-PIXEDで色を塗る。PaintShop Proで縮小して減色する。15分くらいで完成。

ではアイコンとして登録…、ああ、Windowsのアイコンってパレット無いのね〜(/_;)。

256色だったら普通、パレット無いかい(^^;)?システムが256色しか表示できないならアイコンで256色消費するのは無駄だし、表示もできないわけで。だったら普通256色のアイコンなんて256色以上の表示環境でしか実用に耐えないのだから、まともな神経をしていればパレット付きにすると思っていたんだけど…。

というわけでアイコンは没。

1998年10月07日

ディレクトリ移動時に自動ログイン

ネットワークにあるディスクにアクセスしたとき、まだログインしていないとアクセスさせてくれないので、その時には自動的にログインするようにした。

登録パス

登録コマンドと同じような感じでパスも登録できるようにした。よく使うディレクトリを登録するとかなり便利。
とりあえず私は

なんかを登録しています。

同じディレクトリに移動

2つのウインドウで作業中、相手と同じディレクトリに移動するコマンドを追加。

同じファイルを選択

2つのウインドウで作業中、相手のディレクトリに同じファイルがあるとソレを選択するコマンドを追加。

ファイルの更新などで便利なので。

1998年10月08日

ネストしたディレクトリの判断にバグ

ディレクトリの区切り文字まで比較しなければいけないところが、1文字足りなかったため、うまくいっていなかった。

このような状況下でもネストしたコピーと判断されていた。

C:\FOO → C:\FOOBAR

ちょっちよろしくない。ので修正。

使用するエディタ

メモ帳がデフォルトだったのを.TXTに関連付いているアプリケーションに変更。関連付けを行うルーチンを使って読み込んでいる。
ShellExecute()って「"EDIT.EXE"」では起動しないのね〜(^^;)。

1998年10月09日

関連付けコマンドのバグ

関連付けるアプリケーションを選択してから実行した場合には正しく動作していたのに、選択せずに自分で入力した場合には関連付けなかったバグを修正。
単に、ダイアログ入力した内容を取り込んでいなかった。
なんでだー

1998年10月15日

ダイアログ表示中に操作できない現象を発見

DialogBox()でなにかダイアログを表示させると、その間こっちのメッセージループが一切動作しないということが解り、適当に対応。

まず、マルチスレッドにしてみたんだけど、これは良くない。ウインドウを操作できなくなってしまった。
アクティブウインドウを切り替えるためにSetActiveWindow()を使用していたんだけど、これはスレッド境界をまたいでは動作できないし、ウインドウを破棄するためのDestroyWindow()も動作しない(こともある)。

解決策としてはアクティブウインドウはSetForegroundWindow()を使って切り替えて、ウインドウの破棄は裏でナニしてそっちのスレッドにさせるようにすればOk。

コレで解決…と思ったらよく考えるとWindows 98だとSetForegroundWindow()でもアクティブなウインドウを切り替えることができないそうなんで(しばらくはWindows 95を使う予定なんで未確認)、断念。切り替えられないのはプロセス境界をまたいだ時だけなのかもしれないけど、AttachThreadInput()でスレッドをくっつけるやり方を考えるとスレッド境界をまたいだ時点でアウトな気がする。

仕方がないのでDialogBox()と同じような動作をする関数を作り、そちらを呼び出すことで対処。

サイズが増えてしまったので別な場所を削る。

大文字小文字変換の動作変更

どんな時でもリネーム処理を行っていたのを、何も変更が無い時にはリネーム処理を行わないようにした。

1998年10月16日

親に移動した時のカーソル位置

特にカーソル位置を制御していなかったのを変更。さっきいたディレクトリをポイントするようにした。

1998年10月19日

リストが信じられないほど乱れたのを修正

15日にサイズを削った際、何を勘違いしたのか処理ファイルの一覧表から一つファイルを消してしまうようにしていた。少し考えればヤバイ処理だということが解りそうなものなんだけど…。
ヤったのはこんな処理。
複数のファイルを処理する時には一覧表を表示して、あとはディレクトリエントリのマーク順に処理していくんだけど、どれがマークされているか、というのをちまちま検索していたわけだ。コレを一覧表からファイルを消す時に「次はコレ」というインデックスを返すように修正して検索する部分を削除。
調子に乗って一番最初のインデックスの取得部分でもコレを使ってしまったために一番最初にいきなりリストから削除してしまうとか。
一覧表表示関数が一番最初のインデックスを取得して渡すように修正しておく。

1998年10月20日

描画時に無限のループへ旅立ってしまうバグ修正

ウインドウが極端に小さくなった時、描画できずに無限ループに突入していたのを修正。
ロジックとしては、

という感じだったのが、ウインドウがあまりにも小さいと最初から描画位置がはみ出てしまっていたため、何も描画せず、描画しないもんだから横幅も計算できず、横幅が計算できないものだからいつまで経っても描画位置の横座標が変化せずループしつづけていたのだ。

第二窓表示位置の修正

以前、縦にも開いてほしい、という話があったので表示位置を変える。最初はWで横に、Ctrl+Wで縦にというつもりでいたのをやめて(←なら書くな)なんとなくインテリジェントに縦になったり横になったりするように実装。なれるまではどっちに開くか判らないかもしれない。
とりあえず、本人は錯乱している。
これは後でも何度か微調整してよりあばうとになるようにしている。

1998年10月21日

インクリメンタルサーチダイアログでのカーソルキーの挙動を変更

いつの間にか左右が使えなかったのを修正。

フォーマット可能

ディスクのフォーマットを行えるようにした。
キーアサインはCtrl+Fにした。

リストがマーク順に並んでいなかったのを修正

ファイルを複数選択した時に表示するリストの表示がマーク順で無かった。
実はそれでも属性コマンド以外はマーク順に処理していたりする。

1998年10月22日

複数のファイルを選択してからコマンドを実行した時、

という2つのパターンがあったので、先に選択ファイル一覧を開くようにする。

1998年10月25日

移動コマンドでファイルを削除してしまうバグ

このバグのせいでここのHTMLファイルが

ぱぁ。

ちょっちショックが大きかったりする。

ディレクトリを移動させる時に、コピー→削除というシーケンスで処理しているんだけど、このコピーに失敗しても削除してしまうことがあったのです。
というか、移動先のディレクトリが移動元のサブディレクトリだった場合にこうなるのですが。 移動については基本的に

if(!Move()){
    if(!Copy() || !Delete()){
        Error();
        return;
    }
}

という感じで当然、コピー→削除のシーケンスでコピーにエラーが発生した場合には削除しない、と言うようにしていたんだけど、その後(1998年09月23日)で追加した「ネストしたコピー」対策で引っかかった。
ネストしたコピーの時にはCopy()の中でError()を呼び出しているため、普通に

if(!Copy()){
    Error();
}

としておくと、Error()が2回呼び出されてしまって困るので、ネストしたコピーのときにはCopy()は正常終了を返すようにしてしまったわけ。そうしないと、ネストしていた時にはネストしていることを通知するエラー処理とコピー失敗のエラー処理の2回走ってしまう。コレだと著Z地不都合があるわけで。でコピーしっ灰のエラー処理をさせないためにはどうしたらいいか、ぢゃあ正常終了したことにしちゃえばいいじゃん、という安直なノリだったりする。

んでもって、コレを移動処理の中でも使っていることをすっかり忘れていたわけだ。
このため、ディレクトリがネストした移動だと、Copy()が正常終了したと思ってしまうのでそのままDelete()がファイルを削除しに行ってしまう。

ショックに震えながら修正。

1998年10月26日

コピーがメタメタだったのに気づいて修正

コピー時に上書きするか、どうするか、というダイアログを表示する前に選択ファイル一覧を表示するように修正したところ、その後の動作がバグバグしていた。移動も同様。

とりあえず直った…かな?

バージョン情報を取得できないことが

Microsoft Office 97のMSO97.DLLのバージョン情報が取得できないことが発覚。
ちょっち調べてみると使用している言語識別子が食い違っていることが解った。
バージョン情報には

という部分と

と分かれているんだけどソレがそれぞれ食い違っている。
言語識別子0000 コードページ0000で書いてある、と宣言しているにもかかわらず、実際には0409:04E4で書かれているために読み取れないのだ。
この0409:04E4というのはアメリカ英語:ANSIコードページなのでコレがデフォルトだとしてもおかしくないような気がしたので、取得した言語識別子:コードページが0000:0000の時には0409:04E4として扱うようにした。

1998年10月28日

ドライブ選択ダイアログの操作を簡略化

今まではコンボボックスからドライブを選択したあとEnterキーを押す、またはOkボタンを押さないと決定されなかった。つまり「選択→決定」というダブルアクションが必要だった。
それをキーを押した時には即座に決定する動作に変更。つまりあなたの選択、それはあなたの決定という動作。
シングルアクションになったので操作が楽になった。

ダイアログのサブクラス化にバグ

まだ表面化してないけど。
フックする前の関数ポインタを保持する変数をメインウインドウとサブウインドウとで使い分けていなかったため、同時に同じダイアログを表示した場合関数ポインタを破壊していた。ただし、どっちも同じ関数をポイントしていたため致命的な結果にはなっていなかった模様。
後が不安なので使い分けておくように修正しておく。

1998年10月29日

Windows 98での動作確認

友達のWindows 98マシンにて試験。
最初に試した時はなんと起動すらできない状態で、

なんでだ〜

とか思ったわけだが、ファイルのやり取りに使ったフレキシブルディスクをフォーマットしてみると不漁セクタが大漁。とりあえず納得。
ここでくじけずにもう一度チャレンジすると起動できた。
懸念していたアクティブキーも動作することが解り安心。NIFTY SERVEのFWINDCとかでSetForegroundWindow()が使えない〜とか言って悩んでいた人が私のコードを見たら向かいの窓から見つめ殺されそうで恐い。

1998年10月30日

ディレクトリコピーがメタメタだったのに気づいて修正

ツリーをたどっていって、ツリーの最後まで到達した時点でコピー終了と判断していた。ディレクトリのネスト判断のところで埋めこんだもの。
Librettoのバックアップを取った時に気づいた(^^;)。
異様に速いな、ってそりゃそーだ(^^;)。

ディレクトリのネストの判断を修正

コピー関数の中で判断するのをやめて、処理前にネストしているかどうかを判断するように変更。

このため25日の修正は元に戻す。

ディレクトリコピー時のスタック消費を削減

コピー元とコピー先のパスを毎回スタックに取ったバッファにコピーして処理していたのを、スタックにコピーせずそのまま使うように変更。

Windows NTでダイアログを表示した時にフォーカスを見失う現象に対処

NTだと、Windows 95とはメッセージを処理するタイミングが違うようでハマってしまった。

今後もこれでいいのかどうか不安(^^;)。

1998年11月04日

バージョン情報の取得方法をFWINDCで聞いてみる

忌まわしきMSO97.DLLのアレだ。他の人はどうしているのか気になったので聞いてみた。

他の人も玉砕しているらしい(^^;)。
Microsoft Systems Jurnal #57 に書いてある、というコメントをいただいたがこれは現在私がやっているものと大差無い。宣言が0000:0000だったら0000:0000で読みに行くので結局MSO97.DLLではうまくいかないのだ。

1998年11月05日

バージョン情報の取得方法変更

なんと、以前に言語識別子がうまく取れなくて、結局0000:0000の時には0409:04E4として処理するようにしていたが、今度はOUTLOOK.EXEでハマった。
なんとこれは0000:0000で書いてあるよーんと宣言しておいて

ほんとーに0000:0000で書いてある

のだから始末が悪い。
とりあえず、言語識別子とコードページを直接取得することができたのでそちらを使用する。

1998年11月09日

関連付けダイアログの変更

DDEのナニがあると、「ファイルが見つからない」というエラーが出てくるのでその対応。

細部の変更

1998年11月11日

関連づけ起動の方法変更

レジストリを参照して実行方法を変えるようにした。Explorer互換。
どうやら、こんなことをしなくてもIE4を入れるといいような気もしないでもない。

関連づけコマンドの変更

Explorerで実行した場合だとfiletype\shell になにか指定されているとそっちが優先されてしまうので関連づけを行ったときには削除するようにした。

1998年11月13日

描画で無限ループになるバグ

まだ直りきってなかったみたい(^^;)。
日付を表示している状態で、ディレクトリを移動した時に移動後のファイル数より大きい位置にカーソルがあった場合に無限ループになった。

1998年11月18日

自動スクロールが機能しないバグ

13日の修正時に組み込んだ新機能を取り外した。

新機能?

1998年11月21日

上書き確認ダイアログ変更

いままで「上書き」「新しいのだけ」「無視」「名前を変える」といった動作だけしか表示していなかったのをファイル名とか日付、サイズも表示するようにした。

1998年11月22日

アイコン追加

以前作成したのは使い物にならないので(^^;)、とりあえず文字だけ書き込んで作成。
16色で作成したが、小さなアイコンは勝手に256色になったみたい。
勝手にハーフトーンでスケーリングしてくれるのね。

ヘルプファイル修正

なんだかんだ書き直す。

1998年11月25日

描画ルーチン修正

まだ無限ループすることがあった。なにがなんだか。

explorerのプロパティ表示

とりあえず表示できるようにする。なんかディレクトリだとうまく表示できないんですけど。

Ctrl+Enterに割り当てた。

ディレクトリの占有量表示

Alt+Enterで表示したときにソレを記憶するようにした。んで、ソレをファイルサイズと一緒に表示するようにした。

ファイル名をクリップボードに入れる機能

Ctrl+Cでファイル名をクリップボードに入れるようにした。

1998年12月02日

表示のレイアウト変更

表示項目をFDと同じレイアウトにした。表示のショートカットも変更。

削除のUI変更

削除する時に選択肢として

があるのにいいえの意味がキャンセルと同じだったので変更した。
いいえはそのファイルだけスキップするようにした。

コピーのUI変更

ダブルウインドウモードの際にコピーや移動を行うと即座にコピーしたりしていたのをやめて、コピー先入力ダイアログを表示するようにした。

メモリ参照を改善

メモリ管理をすこしまともにして、Freeするようにした。

本来不要なはずの参照を削減した。

いくつかのメモリ参照バグを修正

1998年12月08日

機能追加

1998年12月09日

サーバ一覧を表示する機能を追加

ディレクトリ移動時に"\\"だけ入力された場合、サーバ一覧を表示するようにした。
サーバ名のみ入力された時には、そのサーバの共有名の一覧を表示する。
共有名を選択するとそのディレクトリに移動できる。

メモリ参照エラー

ダブルウインドウモードの時に同じダイアログを表示させるとメモリを取りちがえるバグ

ネットワークへのアクセスエラー

UNCパスにジャンプした時、中が空の時に不要なエラーメッセージが発生していた。
ディレクトリ移動時、ログインする際のリトライを無くした。

1998年12月10日

頂点の目指し方を修正

一度現在位置を確認してから頂点に移動していたのをイキナリ頂点を目指すようにした。

マシン名のMBCS対応

ネットワーク経由のアクセス時に、マシン名に2バイト文字が使用されているとおかしくなっていたかもしれないのを修正。

1998年12月11日

アクティブキーの挙動を変更

ダイアログを開いている時にはそっちをアクティブにするようにした。

1998年12月14日

ファイルの検索を実装

サブディレクトリにあるファイルを検索し一覧を表示する。

1998年12月24日

DoCopy()とDoMove()を統合

ほとんど似たような処理だし。
これで少しはサイズが小さくなるのでは。

[DFって何?][日記][コマンド一覧][関連リンク][予定表][他のファイラー][逃げ帰る]

[トップを狙う]

mailメールはこちらCopyrigiht © 2001 びい(@nifty ID:RXA01732)