Readmeじゃないよ 1
<prev : Index : next>

■990211

先週の日曜日から、またMorePasteに手を入れ始めた。以前に、まともにコードに触ったのは、多分、2年以上前だよな。と、Aboutのタブを見ると1996だって。結構前だね。

以前、やろうと思ってできなかったのが、日付周りの操作で、いろいろなフォーマットを選んで張り込めるようにしようとしたんだけど、出来ずに終わっていた。その後、ファイルのパスのペースト機能の画面にこだわっちゃって、やめたんだよな、うん。

日付周りに話を移すと、とりあえず、当初の目論見は、いろいろ細かくフォーマットを設定出来るようにすることで、そのために禁を犯して新たなウィンドウを開くようにしようとしていたんだよね。1つめの悩みは、それをすべきかどうか、ってこと。2つめが英語のフォーマットを使う問題。

1つめは結局、いくつかのフォーマットを用意しておいて、リストから選べるようにすることで落ち着いた。違うフォーマットがいい人、ごめんなさい。でも、まずは自分が満足することが大事さ。日付と時間でそれぞれリストを用意して、設定の項目は増えちゃったけど、まぁ、大丈夫でしょう。うん。

でも、英語のフォーマットの問題は、解決していない。1月をJan.とペーストすることにどれだけ必要性があるかはわからないけど、自分自身では結構使うからな。こちらは、ロケールの変更が多分必要で、そんなことやっちゃって、大丈夫なのかしら。変更がアプリに閉じていればいいんだけど、そのあたりの影響を知らないからな。まぁ、ものは試しで、その試しをしていないのが問題か。今はパスのペースト周りに一生懸命だから後回しにするのさ。

■990212

勢いで、パスのペースト。

パスのペーストは、ファイルの選択で、ポップアップを出そうとして、うまく実装できなくてやめたんだった。ボタンを用意しておいて、それをクリックしたら出すようにしようと思ったんだけどね。ファイルのリストボックスを不可視属性で用意しておいて、そこからファイル名を取り出してメニューを作る。以前は、その辺りの処理のバグが取れなくて断念したんだよな。情けない話だね。

バグの原因は、今見るとまったく単純で、Forループの終了位置のミスだった。2年前だって、素人じゃなかったろうに、うーん。これを直したら、とりあえず、メニューは表示するようになった。

そこで、問題。非常に本質的。

Delphiのコンポーネントライブラリのメニューは、メニューを出すコンポーネントとその項目一つ一つが別コンポーネントになっていて、項目のコンポーネントがクリックのイベントを受け取るようになっている。動的に生成するポップアップにイベントハンドラを書くなんてどうしたらいいのかね。

解決方法は、なんともきれいで、糸口はDelphiのバージョン4から搭載されたアクションリストというコンポーネント。これは、いろいろなイベントに対するアクションだけを抜き出してリストで保持する、というやつで、アクションを共有しよう、ってな意図で実装されている。こいつを使えばクリックイベントに対する処理は保持できそうだ。

次にこいつをポップアップの項目と結び付けるわけなんだけど、と、メニュー項目のプロパティに「アクション」なんてのがあるじゃない。へへへ。でもね、メニュー項目の保持するファイル名を渡せないのね。どうするかな、これじゃぁ、処理は呼び出せても、肝心のその対象を教えることが出来ないではないか。うーん。

ヘルプを見ていくと、アクションのオブジェクトにキャプションのプロパティがあるのがわかった。おかしいぞ、プロパティリストにはそんなの載ってないのに。メニューのアクションは基本型で、そこから派生したアクションのクラスを使えばキャプションがプロパティとして存在するのね。型キャストすれば使えるじゃない。

これで文字列は渡せるぞ。十分十分、それこそを望んだことなのだ。でもそのためには、アクションのインスタンスを全部のメニュー項目がそれぞれに持たないといけないんだよな。アクションリストのオブジェクトを複製するってことですかい? キャプションを保持するためとは言え、あんまりうれしくないな。

そういってみれば、以前にアプリケーションのディアクティベートイベントハンドラに、フォームのハンドラを代入して割り当てる、なんてことをやったぞ。Pascalってば、関数へのポインタなんて持ってたっけな。

でも、それで解決。いろいろメモリの確保と開放を繰り返していて、メモリリークしていそうだけど、報告があったら直せばいいや。今晩はスキーだし、もう寝ないとな。

■990216

とりあえず、ベータ版として何人かの人に無理矢理送りつけた。バグレポートやバグじゃないんだけどあんまり好きじゃない動作とかの報告、要望とか、まぁ、短時間だけどいくつか出た。

アプリケーションを切り替える際の動作に関するクレームは、ドキリとさせられた。Alt+Tabでアプリケーションを切り替える画面を呼び出して、MorePasteから他にスイッチしようとすると、通常フォーカスが他のアプリに移るんだけど、MorePasteの場合はMorePasteがフォーカスをつかんだままの状態になる。

1回、Tabを叩けばいいだけなんだけどね。でも、確かに、うれしくない動作だ。どうやってこんなの解決するのかね。でも、思うところがあって、MorePasteのメインウィンドウのスタイルを変えてみた。現在の版では、ツールパレットとかで使うスタイルにしている。

で、他のスタイルにするとちゃんと解決する。メインウインドウってのは、通常、こんなスタイルにはしないからな。それをするな、ということね。うーん。次の版からは、タイトルバーが太くなるのはしかたがないか。

■990228

気になって、ここの所、Pathのペーストの部分を作り直している。Delphi4のDirectoryListBoxは、Win3.1互換のために存在していて、いまいちExplorerと動作が違う。どうしたものかね、と考えた結果、TreeViewというクラスを使うことにした。汎用的に出来ているんだけど、それだけに動作の作り込みは結構手間がかかった。なんといっても、フォルダの構成を調べて、木を作る、ってのをやらないといけないからね。まぁ、何とかそれらしくなったからいいか。

以前のでは、ファイルの選択は、ポップアップでやっていた。ウインドウの一部の領域にマウスポインタが入ると出るんだけど、その操作も変更。なぜか? フォルダ選択のための領域を広くして、という要望が出たから。右クリックで出しましょう。それとドライブ文字でPathをペーストされてもうれしくない、なぞというクレームも出たので、対処することにしましょう。UNC形式に直す関数があるんだよ。

も一つ。タブのon/offがわかりにくいと。これはどうするかね。QuoteとTabが同時に作用するから、タブに適用される効果を表示するようにしたんだけど、タブのインタフェースの常識から外れてるよな。しようがない、Tab幅とかの設定は、設定用のタブに逃がして、QuoteとTabをFormatというタブに集約することにしましょ。

自分で言いうのもなんだけど、これはいいね。

しかし、結局振り返るに、公開したβからほとんど作り直しになった。これなら、前のは前ので、コードをちゃんと残しておけばよかったな。うーん。

おしまい
Mail to author Mail to author. Top of this page.

[This page was updated: 2003-03-09 ]

 

 
Copyright © 2001-2003 Takashi KOBAYASHI. All Rights Reserved.