■ 投げ入れられたアイコンのパスを通知するコントロール。
ローカル(非Web)で使用するためのものである。 HTA または、IE (ブラウザ)または IEコンポーネント使用のアプリケーション用。 IE(ブラウザ)では、「スクリプトや ActiveX コントロール ...」の 使用許諾のダイアログに、OK しないと使えない。 HTA で、window(フレーム-IFrame,Frame要素)の構成がある時、その内部の窓では、使えない。 内に含まれる窓の中にアイコンを持って来て落とすと、 その中のページが消失、または移動するか、ダウンロードのダイアログが出る。 ドラッグ関連のイベントで、デフォルト動作を止めようとしても効かない。 更に、ページ移動先から戻る事も、更新=[F5] して初期化も出来ず、終了する他ない。 使用には、登録(インストール)が必要、 RegSvr32 ファイル (WindowsXPか、管理者として実行なら) (以降のWindowsで) ※ この HTA を「管理者として実行」しているなら、左のボタンでも実行可能。 ※ 右のボタンは、ユーザーアカウント制御の画面が出る。 ※ Administers でないユーザーは、インストール/アンインストールできない ! この場所 に在る事が、登録されるので注意!。 ( 置き場所を移動したら、そこで再び登録すれば、変更できる。)  ※ 下の● 使用テスト に表示されていたら、既にインストールされている。  ※ [インストール]ボタンを押した後、表示するには リロード[F5] が必要。 登録解除は、regsvr32 /u ファイル (WindowsXPか、管理者として実行なら) (以降のWindowsで) ※ XPより以降で、管理者として実行してないで、左の[アンインストール]を押すと、 「成功しました」と出るかも知れないが、アンインストールはされてない。 ※ 新しく開く窓から使用不能になるが、object を確保している窓では、使用を続けられる。 更新[F5] しても続行可能なようなので、不能を確認したいなら、この窓は閉じる必要あり。  ※ regsvr32 [/u] ファイル は、コマンドプロンプトから実行できる。 (右メニュー その他 >「管理者として実行」から起動。)  ※ IE(ブラウザ)では、ActiveX 使用に OK して、管理者の方のボタンを押しても、 何も起きない、実行されないようである。  ※ ファイルは、このフォルダにある、 "DropFiles.ocx" で、 この説明ファイルのある場所を、Current directory とし、そこに在るものとして実行する。 この説明と別の所にあるなら →

● 使用テスト
←この中に、アイコンを投げ入れると、↓そのパスを表示する。
修飾キー:
0x00bbggrr 0x   現在の色:
    青緑赤、各1バイト、(最上位バイトは?)。
    0: black、FF: red、FF00: green、FFFF: yellow、FF0000: blue、FFFFFF: white

● 使い方 ▼ 要素の記述 <object classid="clsid:44D91B99-3F94-4563-8D76-BAEA5B3A3869" id="iconPit" width="幅" height="高さ" ondragover="return false" ondragenter="return false" > <param name="color" value="16711680"> <!--背景色 0xFF0000 の指定--> <param name="text" value="アイコン&#10;投入口"> <!--表示する文字--> <param name="textColor" value="16777215"> <!--文字色 0xFFFFFF--> </object> object 要素への指定は、他に例えば、  style="border-style: solid;" 枠の指定(例) tabindex="数" Tabキーの移動に入れる このコントロールが、在る(登録されている)か、使える(有効)かは、 object要素の Enabled プロパティで判断できるようである。 if( window.要素 && 要素.Enabled ){ /*有効*/ } `window.要素`の確認は、無効時に、要素が undefined になる事がある為である。 コントロールが登録されてない時、object要素の HTML の記述の直後で、 window.要素id は、object要素を指しているが、 onload では、undefined (未定義)になり、要素は消されてしまうようである。 ( 別のコントロールで、未登録時でも、onload 以降も、object要素が 消されてないものがあったので、どれでもという事ではない。) IE で、スクリプトや ActiveX.. の実行に許可を与えなかった時は、 コントロールは無効であるが、object要素は消されてない。 object要素の記述より前に、使えるかどうか知るには、 try{ new ActiveXObject("DropFiles.FormX") }catch(e){ /*無効*/ } エラーにならないなら、登録済みで使用可能。( このコントロールは、表示が あって機能するものなので、上のように、オブジェクトを得ても役に立たない。) ▼ アイコンのパスの受け取り方( JScript ) コントロール::名前 の関数を使って、 function iconPit::notifyPaths( paths, iModKey ){ alert( paths ) // 受け取る値は、パスが、複数なら、改行( \n 1文字)で区切ってある。  // 配列への変換は、paths.split("\n") // 2つ目の引数は、修飾キーが押されているかどうかを表す数値で、  // [Shift]キー 1 、[Ctrl]キー 2 、[Alt]キー 4 、  // 合わせてなら、その和 (ビットOR)。  // マウスボタンが、左右どちらかについては、この方法では、  // 取得法が判らず、この値の中に含める事が出来なかった。  } // iconPit は、object に指定した要素ID 。 for, event 属性付きの SCRIPT 要素を使って、 <script for="iconPit" event="notifyPaths" > alert( arguments[0] ) //var iModKey = arguments[1] </script> このスクリプト要素が、イベントから呼び出される関数になる。 引数は、arguments プロパティから得る。 ( Firefox, Chrome で、ここは実行されないようだが、ブラウザによっては、 普通のスクリプトとして、読み込まれた時に、そのまま実行されてしまう。 だから例えば全体を if 文などで括って、IE である時に限るなどと...) ▼ コントロール:: の関数について コントロールからの通知、イベントを受け取る関数は、 function コントロール :: イベント名( [引数] ){ [コード] } と書くのだが、これは、JavaScript の標準の構文ではないので、他のブラウザ では、エラーになる。これを回避する方法の一つは、script 要素を、IE の条件 コメントで囲って、コメントの中に入れてしまい、他のブラウザに認識させない。 <!--[if IE]><script> // コード  </script><![endif]--> しかし、多分 IE 10 から、この条件付きコメントはサポートされなくなり、 その中は、ただのコメントとして隠されるだけになった。 そこは、そのままにして、イベントを受け取る (for, event 属性付きの) SCRIPT要素を、 <![if ! IE ]> /*HTML文*/ <![endif]> の中に書き入れると、 条件コメントを理解しない IE 10 以降なら、その間は適用される。 IE のバージョンがそれでも、HTA では、IE 7 として動作するので、条件コメントは 有効であるし、HTA でのみ使うなら、そもそも条件コメントなどは不要…。 他のブラウザで :: がエラーになるとしても、独立したスクリプト要素に記述しておけば、 スクリプトの他の部分へは影響しないので、エラーになっても構わないのでは…。 コントロールが、インストールされてない、無効である時、 コントロール::イベント の function は、エラーになるかも知れない。 ( コントロールは、object要素の ID、イベントは、呼ばれる関数の名前。) エラーは、「'要素id' は宣言されていません。」 エラーを避けるには、これらの関数定義を、関数の中に入れてしまい、 コントロールが有効である時のみ、その関数を呼び出せば良いのだろう。 (コントロール要素のイベント関数なので、関数の中に入っていても、 関数内のスコープとは無関係。) (関数の中に入れても、他のブラウザからは隠せず、:: でエラーになるが。) このエラーは、onload 以降で、object要素が、undefined になる為と思われるが、 onload 前で、object要素の記述の後でなら、::付き関数を 定義してもエラーにならないかも知れない。 Flash からは、:: で定義された関数でなく、普通の関数を呼び出せる。 だから、コントロール側から、コールバックするのに、:: 付きで関数を 定義しなければならない訳でもないようなのだが。
▼ ブラウザでの、アイコンのドロップに対するデフォルト動作のキャンセル。 窓の中にアイコンが落とされた時は、そのファイルへページが移動したり、 開くか保存(ダウンロード)かのダイアログが出る、といった動作になるので、 これを抑えないと、ブラウザ(IE)では、このコントロールは使えない。( HTAではなく、) IE では、当該の object要素か、それを含む上位要素で、 ondragover="return false" ondragenter="return false" とすると、 デフォルトの動作をキャンセルできるようである。 (return false は、又は event.preventDefault() か event.returnValue=true) ページ全体を抑制するには、コンテナ要素(HTML か BODY のどちらか)でするが、 これは、ondragover イベントに、false を返すだけで済む。 IE 11 で確認してみると、コンテナ要素でなくても、ondragover だけで済み、 ondragenter は不要であった。 アイコンを落とされた時の既定の動作をさせたくないのだから、ondrop で断れば良いのでは と、考えてしまうが、IE では関係ないらしい。 ( ondrop は、その要素では1回起きるが、ondragover は、マウスが少し動くと起きる かのように、頻繁に繰り返し発生するようで、その度に呼び出されるのであるが、、) 他のブラウザで、アイコンのドロップでのページの移動を断るには、 Chrome, Firefox では、ondragover と、ondrop イベントの2つ共で行うなら、効果ある。 ( このコントロールは使えないので関係ない事であるが。) IE, HTA で、このコントロールが使える時に、 ondragover と、ondrop イベントの2つで、阻止すると、コントロールが使えなくなる。 (コントロールが呼び出されなくなるのだと思うが)。 これは当該の object要素か、それを含む HTML までの上位要素のどこで、しても。 (これらのイベントで、浮上・伝播の阻止 .stopPropagation() や .cancelable=true については、何か効果があるのか分からない。) 以前の IE では、RegisterAsDropTarget プロパティを偽にする方法もあった。例えば var IE = new ActiveXObject("InternetExplorer.Application") IE.RegisterAsDropTarget = false IE.Visible = true IE.Navigate( パス ) として起動した IE では、落としたファイルを開かないが、このコントロールは使える。 現在の IE では、無効のようである。 ▼ HTA での、アイコンのドロップと、ページの移動。 HTA の独立(トップ)の窓で、デフォルトの状態は、ページの移動など無く、 アイコンが落とされても、イベントの動作をキャンセルしたりする必要はない。 HTA:Application タグに、属性 navigable="yes" を設定すると、ページの移動が可能になり、 アイコンを落とした場合も、それを自身の窓で開くので、このコントロールは、使えなくなる。 ( Windows XP 上の HTA で試すと、アイコンのドロップでは、ページの移動は 起きないが、その時、このコントロールも、機能しない。) ブラウザの場合と異なり、イベントで阻止しようとしても、無効であるようだ。 HTA 窓の中にある窓( IFRAME や FRAME 要素)では、ページの移動がある。 内の窓へアイコンを落とすと、ブラウザが開けるものは、その内の窓で開く。 ブラウザでは普通、子の窓へ落としても、移動するのは、親(最上位)の窓である。 Windows XP の HTA では(これは何か不具合かも知れないが)、落としたファイルを 開くのでなく、空白ページ(about:blank)へ飛ばされる。(リンク(A)は普通に開く。) ブラウザが開けないものでも、ダイアログが出ず、ページが消えてしまう。 トップの窓と違って、navigable=no としても、移動してしまう。 HTA:Application タグを作る事は出来ても機能していない、属性は無効。 トップの窓の navigable 属性の値が適用されるのでもない。 しかし、ブラウザの場合とも違い、ondragover や ondragenter に false を返しても、 移動を止められない。 そのため、このコントロールにアイコンを落とすと、ページが移動(または消失)するか ダイアログが出る事になってしまい、コントロールが利用できない。 window か body の onbeforeunload で、false を返すと、移動するかの ダイアログが出るので、[いいえ] なら、移動を止める事はできるが、 このコントロールへアイコンは渡されない。 ondragenter 時に、WScript.Shell で、 .SendKeys("{ESC}") として、 [ESC]キーを押したことにしてみると、エクスプローラからドラッグした場合は 回避できる (SendKeys はアクティブな窓へキーを送るとあるが、デスクトップ へは送れないようで、デスクトップのアイコンでは止められない) が、勿論 [ESC] すると、このコントロールへのドロップもされない。 アイコンだけでなく、リンク(A要素)を、ドラッグ&ドロップしても同様の事が起きる。 内の窓のページ中のリンク(A要素)を、クリックするつもりで、少しずらして、 離してしまった場合、ページが消えたり、移動してしまう。( target を 設定してないなら、その移動は、クリックと同じではあるが。) ブラウザでは、自身のページや、中の窓(フレーム)のページにある、リンクを 自分自身の所で運んでいる間、カーソルは丸に斜線で無効が示されていたりし、 落としても、何も起きない。 navigable=yes の HTA(のトップ窓)でも、それは無効であるが、 その内にある窓では、そうならない。 ドラッグの開始 ondragstart で、false を返せば、これは抑止できるが、 選択テキストのドラッグも出来なくなる。 HTA の IFRAME, FRAME 要素には、application 属性(値は yes/no )を指定できる。 yes なら、HTA 同様に動作するのかと思うが、分かる違いは、 ActiveXObject の取得で、FileSystemObject や WScript.Shell だと、 no では、警告(許可)のダイアログが出る事くらいかと思う。 どちらでも、このコントロールは、警告なしに使えている。 ( ネット上のファイルを指定した場合は、違うのだろうけれど。) src に指定できるのは、ブラウザと同じようで、application=yes としても、 拡張子 .hta のファイルを、中の窓に取り込む事はできず、 ダウンロード(保存か、他で開くか)のダイアログが出る。 独立(トップ)の窓で、navigable=yes の時( target を指定してない場合だが)、 リンク先は拡張子 .hta のファイルでも開く事が出来る。 内の窓のリンクでは、.hta を指定しても、中で開く事はできない。 ページを移動させた後、[前に戻る]事はできない。トップの窓でも同じ。 application=no でも、ブラウザの戻る/進むは、無効。 トップの窓で [最新の情報に更新] しても、最初の状態に戻らない。
▼ 色(背景色)の設定 デフォルトは、ページの background-color でなく、window の背景色。 PRAME 要素での指定は、 <param name="color" value="数字" > この値は、10進数字で指定。 スクリプトからは、 iconPit.color = 数値 ( プロパティ(パラメータ)の名前に、大小文字の区別はないらしい。) ( iconPit は、object 要素に指定した任意の要素ID ) 数値は、HTML, CSS の色とは、順序が逆で、4 バイトの、 2 バイト目が 青、3 バイト目が 緑、最下位バイトが 赤。 0xFF は 赤、0xFF0000 は 青。 0x00bbggrr で、Windows GDI の COLORREF 値と同じ。 1 バイト目が、0xFF なら、システム色を表すらしい。( clSystemColor = $FF000000; とある。 → Borland\BDS\4.0\source\Win32\vcl\Graphics.pas この時の下の値は、COLOR_WINDOW = 5; COLOR_WINDOWTEXT = 8; などと、 Win32\rtl\win\Windows.pas にあるが、この定数は、MS の WinUser.h のと同じで、 MSDN の、GetSysColor に その定数の説明あり。) 背景色のデフォルト値は、4278190085 (-16777211) = 0xFF000005 = WINDOW 色 テキスト色の無指定時は、4278190088 (-16777208 ) = 0xFF000008 = WINDOWTEXT 色 例えば、COLOR_HIGHLIGHT = 13 (0xD) は、0xFF000000 | 13 とビット演算では、 4 バイトの符号付整数にされて?、-16777203 になるが、単純に加算すると、 0xFF00000D (4278190093) で、スクリプトから設定する場合は、どちらの 値を使っても同じ結果になる様である。 スクリプトからは、16進で設定できるが、PRAME 要素では、10進に換算してから、 書き記す必要がある。また上の負数は理解されず無効らしい。 ▼ 文字の設定 (以下の iconPit は、object 要素に指定した任意の要素ID ) iconPit.text = 文字列; 表示のテキスト (無指定時は "Drop" ) iconPit.textAlign = 数; テキストの横方向の配置 (Alignment) 0: LeftJustify, 1: RightJustify, 2: Center 、既定値は 2 (Center) iconPit.textVAlign = 数; テキストの縦方向の配置 (Layout) 0: Top, 1: Center, 2: Bottom 、既定値は 1 (Center) iconPit.textColor = 数; テキスト(フォント)の色。値は、背景色の項を参照。  以上は、PARAM 要素では、  <PARAM NAME="text" VALUE="文字列"> ( 改行は、実際に改行してもいいが、HTMLのエスケープで渡せる。) <PARAM NAME="textAlign" VALUE="数"> <PARAM NAME="textVAlign" VALUE="数"> <PARAM NAME="textColor" VALUE="数"> iconPit.Font.Name = 文字列; フォント名 ( 既定値は、Tahoma ) iconPit.Font.Size = 数; フォント・サイズ、point iconPit.Font.Bold = 真偽; iconPit.Font.Italic = 真偽; iconPit.Font.Underline = 真偽; iconPit.Font.Strikethrough = 真偽; 取り消し線  iconPit.Font.Weight = 数; 「フォントの太さを表す 0 から 1000 までの値」  Font.Bold が true なら、Font.Weight の値は 700 に、false では 400 になる。  iconPit.Font.Charset = 数; 0: ANSI_CHARSET, 1: DEFAULT_CHARSET, 2: SYMBOL_CHARSET, 128: SHIFTJIS_CHARSET, ...→ WinGDI.h ( 多言語対応にするには、何を指定すればいいのか判らない。) スクリプトでは、Font は、object だが、パラメータ要素では、Name のみ設定可能らしい。  <PARAM NAME="Font" VALUE="MS Gothic"> Font の他のプロパティは、スクリプトから設定する他ないが、要素の記述の直後に設定 しても、問題ないようである。インストールされているかどうかは、 if( window.iconPit && iconPit.Enabled ) で確認。 ▼ その他の設定 表示の大きさは、object 要素の width, height または、その style の width, height に 指定する。最初の表示後も、スクリプトから随時変更できる。 初期時に指定なしは、240×180 に設定した既定値の大きさだが、その場合に、 要素.width/height の変更が効かない事がある?。 枠線(Border)も、object要素の style で指定。(コントロール側にもあるが、後述の様に?) このコントロールは、無償版の Borland Turbo Delphi Explorer で作ったのだが、 デフォルトで、イベントや、プロパティが、多く用意されている。 それに付け加えたのは、プロパティの、text, textAlign, textVAlign, textColor と、 イベントの notifyPaths である。 上の、Color と、Font は、デフォルトに用意されていたプロパティそのままであり、 他には、一部削除したが、以下のものがある。( 動作に疑問があるものは、 書き足されるべきコードが、不足しているからなのかも知れない。) イベント (コントロール側からの呼び出し) function iconPit::OnClick( iKeyState ){  // ボタンや修飾キーの情報を、引数にするようにした。  if( iKeyState & 1 ) ;// 左マウスボタン  else if( iKeyState & 2 ) ;// 右ボタン  else if( iKeyState & 4 ) ;// 中ボタン  else{//キー押下による場合、下位2バイト目に、そのコードを入れてある。  var key = iKeyState >> 8 if( key==13 ) ;// [Enter]キー  else if( key==32 ) ;// [Space]キー  }  //修飾キー  if( iKeyState & 16 ) ;// [Shift] キーが伴う  if( iKeyState & 32 ) ;// [Ctrl] if( iKeyState & 64 ) ;// [Alt] } function iconPit::OnDblClick(){ ... } ( この前に一度、OnClick が来る。) function iconPit::OnKeyPress( key ){ ... } object要素に、tabindex を設定すると有効になり、[Tab]キーでフォーカス  させてから、キーを押すと反応する。引数には、キーコード(ASCII)が渡される。  ( キーフォーカスされたかは、HTML側の onfocus イベントで。)  function iconPit::OnMouseEnter(){ ... } マウスが入った時  function iconPit::OnMouseLeave(){ ... } マウスが去った時  function iconPit::OnActivate(){ ... } 開始後、最初のキーフォーカスかクリックで生じ、後は起きない、 プロパティ <PARAM NAME="AxBorderStyle" VALUE="1"> 境界線。 0: None、1: 一重線(Single)、2: へこんだ(Sunken)、  3: 浮き上がった(Raised)。既定値は、1 だが、何故か見えない。2, 3 は効果あり。  ( しかし、2, 3 では、アイコンを落とした時、反応しなくなる?) 枠(Border)は、object要素のスタイルでの方が、細かく指定できる。  <PARAM NAME="Enabled" VALUE="-1"> 「マウス,キーボード,およびタイマーイベントに応答するかどうか」(真偽) <PARAM NAME="Visible" VALUE="-1"> 「表示するかどうか」(真偽) スクリプトで偽に設定すれば、表示が消えるが、PARAM では無効らしい。  <PARAM NAME="Caption" VALUE="name"> キャプション、独立した窓なら、そのタイトルバーに現れるものだが、  無いので変更しても意味があるとは思えない。  <PARAM NAME="PixelsPerInch" VALUE="96"> 「現在の画面解像度に対するフォームのスケーリング」  「Scaled プロパティも true に設定する必要」あり  <PARAM NAME="PrintScale" VALUE="1"> 「印刷時の比率」  0: None, 1: Proportional, 2: PrintToFit <PARAM NAME="Scaled" VALUE="-1"> (真偽) 「フォームサイズを PixelsPerInch プロパティの値に基づいて変更するかどうか」 <PARAM NAME="AlignWithMargins" VALUE="0"> (真偽) 不明  <PARAM NAME="AutoSize" VALUE="0"> サイズを「中身に合わせて自動的に変更」するかどうか(真偽)。  真(0以外)にすると、要素に指定した width, height でなく、デフォルトのサイズ  (240×180)が使われるようであるが。 readonly のプロパティ (PARAM要素にはない。) Active MouseInClient ExplicitLeft ExplicitTop ExplicitHeight ExplicitWidth デフォルトで用意されていたが、削除したもの⇒
▼ その他 このコントロールでは、左右どちらのマウスボタンで、ドラッグされたのかを知る方法が判らない。 方法を変えて、OLE の IDropTarget を使うと、マウスボタンが判り、 また、ファイル以外のドロップにも対応できる。 (テキストが、ドロップされた場合は、IE の event でも得られるが。) これについては、IDropTarget 版を作ってみた。 C# 版アイコン投入口も。 .NET であるからだろうが、その dll は、11 KB、 こちらは、511 KB である。 ---------------------------------------------------- 要素に、選択テキストや リンク(A要素)が、運ばれて来て落とされた時、ブラウザの イベント・オブジェクト(中の event.dataTransfer)から、情報が得られるようである。 まず、ondragover で、イベントの既定の動作を止めておくと、それを、 要素へ落とす事=要素で受け入れる事が、出来るようになるらしい。 ondrop (または ondragend)イベントにて、event.dataTransfer.getData("…") メソッドで、文字列データを取る事が出来る。 選択されたテキストなら、.getData("Text")で、そのテキストが得られる。 リンクなら、.getData("Text") 又は .getData("Url") で、リンク先 URL 。 このイベントでは、ブラウザによっては、何かしようとするので、 false を返しておく(既定の動作を抑制する)必要あり。 アイコンが落とされた時、IE, HTA では、.getData("Text") の戻り値は、 null ( 他のブラウザでは、空文字)。ここ辺りで、パスが得られるならば、 このような ActiveX コントロールなど、不要なのであるが、。 event.dataTransfer は、HTML5 に取り入れられ、更に、ファイル(アイコン)の ドラッグ&ドロップにて、event.dataTransfer.files から、 ファイル(オブジェクト)が得られるようになった。 .files.length あれば、 .files[0] が、1つ目のファイルで、 .files[0].name がファイル名。 .files.length の他、event.dataTransfer.types.contains("Files") が true なら、物がファイルと判断できる。この確認は、 テキストやリンクの場合、引数に、IE なら "Text", "Url" だが、 他は、"text/plain", "text/html", "text/uri-list" となっている。 この文字列は、getData() へも与えられる。 得たファイル(オブジェクト)から、FileReader というのを使って、 ファイル内容の読み取りも可能。 しかし、ブラウザなので、パスを知る事はできない。 ( Chrome では、インターネットショートカットファイルなら、getData(..) で URL が返る。) IE は、10 から?。 HTA では( IE 7 で止まっているので)使えない。 要素.ondragover = function(){ return false } 要素.ondrop = function(ev){ var txt ="", dt; if( ! ev ) ev = event ev.preventDefault==null ? (ev.returnValue=true): ev.preventDefault() if( dt= ev.dataTransfer ){ txt = dt.getData("Text") if( ! txt && dt.files && dt.files.length ){ var ary= [] for(var i=0, len=dt.files.length; i<len; ++i) ary.push( dt.files[i].name ) txt = ary.join("\n") } } //alert(txt) //return false →.preventDefault() }
テスト、ここに落とす。
event.       test
( 先に、テスト欄~ファイル末にあり~を開いて置くと、ここに上の詳細を表示。)


▽ HTA 中で、このコントロールを使う場合で、 PC が 64ビット機の時、その HTA の呼び出し方の問題。 その HTA ファイルを、ファイルの関連付けによって、直接呼ぶ場合は問題ないが、 何かの事情で、mshta.exe の引数に そのファイルを指定する形式にする場合、 コントロールが使用不能になることがある。例えば、 mshta HTAファイルのパス %SystemRoot%\system32\mshta.exe HTAファイルのパス C:\Windows\system32\mshta.exe HTAファイルのパス などと普通に書くと、コントロールがインストールされてない状態と同じになる。 次のように system32 を SysWOW64 フォルダに変えると、動作する。 %SystemRoot%\SysWOW64\mshta.exe HTAファイルのパス C:\Windows\SysWOW64\mshta.exe HTAファイルのパス --------------------------------------------------------------
● ファイル ./DropFiles.ocx 当該のコントロール ./DropFiles/ ソース FormImpl.pas 作業部分のソース (テキスト) FormImpl.dfm フォーム(ウィンドウ)のソース (テキスト) DropFiles_TLB.pas タイプライブラリ (〃) DropFiles.dpr プロジェクトファイル (〃) ▽ 履歴 2008/2 作成。 2009/7 JIS 外の文字を扱えなかったのを、多言語の文字対応(UNICODE)に修正した。 2011/1 テキスト表示を追加。また、このファイルを修正加筆。 2011/5 このファイル(説明)を、少し修正。 2011/7 通知に2つ目の引数(修飾キー)を追加。 2011/8 OnClick にも、2つ目の引数(修飾キー)を追加。 2016/11 この htmlファイル(説明と使用テスト)を修正。
------------------------------------------------ ※この表示の問題、 HTA か IE 7 で、white-space: pre; や PRE 要素に、 フォントが、無指定だったり monospace だったりすると、 末尾の文字が全角か半角かで、次の空白のサイズ(幅)が、違ってきて、 行の冒頭の空白文字(\x20)による字下げの幅が、揃わない。(タブでは揃うが) この時、フォントは、"Times New Roman", "Courier New" で、 IE のフォントの ラテン語ベース(ラテン語基本)の 設定が、使われている。 (このファイルが、UTF-8 の為、日本語フォントの設定にならない。) フォントに、"MS Gothic" 等を指定した場合は、そうならないので、 欧米系のフォントが使われると起きる事だと思う。 それで末尾を半角文字にする為に、ソース中の行末の各所に、\xA0(&nbsp;の生文字) を入れてある(通常の \x20 では効かない)。 ( "MS Gothic"を指定する事にしたので、不要となってしまったが、) IE 8 以降では、そのようにはならない。
font-family:monospace; とし、行頭 | が揃うか。行末⇒half size | 行末⇒全角 | 行末⇒half size |

テスト用入力欄の表示