[BlueLeaf1336]> PROBLEMS> PasteIt>

PasteIt > デスクトップのダブルクリック検出テスト

historyTOP

2007/02/25:作成

はじめにTOP

前回、壁紙を変更するつもりがデスクトップのダブルクリックの判定精度を上げる方法を思いついたので、それを使ってそれっぽいものを作ってみました。使ってみた感じは...アリだけど完成度が低すぎです。まあその辺はテストということで。

何を試したかというと、デスクトップでダブルクリックしたときの座標を取れるかどうかで、結局一番最初に試した、Delphiが標準で用意している Mouse クラスのプロパティ Mouse.CursorPos をそのまま見るだけが正解でしたが、それだけだとおもしろくないので、「デスクトップをダブルクリックしたときに、その場所で深い階層のフォルダにバキバキとたどり着くためのポップアップメニューを表示します。

実はかつての(今も?)Macintoshの海外製の機能拡張かコントロールパネルにこんな感じのがありました。それはフォルダを長ーくクリックしたままにしているとピョロンとそのフォルダの中身にアクセスするためのメニューがでてくるという、よほど使いやすいものでしたが、現状でそれを実現する方法がわからないことと、デスクトップのダブルクリックに関係がないので、すごく興味があるんですが今回は見送りました。

スクリーンショットとダウンロードTOP

でかいばかりのスクリーンショットで、しかも要点が伝わってません。本当(?)はメインフォームなんて邪魔なだけですが、それはおいといて、メインフォームがフォーカスを持っていないところがポイントです。

ちなみに、このフォルダの階層は、ルートのドライブと特殊フォルダをのぞいて、ちゃんと Delphi-ML([Delphi:48747] Re: TMenuItem でOnMouseOver を実現したいのですが) を参考に最初に全部つくるんじゃなくて選択されたフォルダだけを検索しています。

20070225PasteIt.zip(226,914bytes) 実行ファイルとソースコード。

育ちそうですが、栄養が足りません。

問題点TOP

Delphi の標準コンポーネントの TPopupMenu を使っているためか、普通のメニュー例えば Windows のスタートメニューのような「メニューの外にマウスを出したらキャンセル扱い」という動作ができません。多分ですが、TPopupMenu がキャンセルされる条件が、フォームの上をマウスが動いたら...のような、アプリケーションがフォーカスを持っていることが前提で、その中でキャンセル条件が設定されているような気がします。気だけですけども。

そんなこんなで「キャンセル」なんていうへんなメニューがあったり、すっきりしないこと請け合いです。

EOFTOP