4D v16.3ドラッグ&ドロップ |
||
|
4D v16.3
ドラッグ&ドロップ
ドラッグ&ドロップ
4Dにはフォームやアプリケーションのオブジェクト間で動作する組み込のドラック&ドロップ機能があります。一つのオブジェクトを同一のウインドウ内、または別のウインドウにドラック&ドロップすることが出来ます。言い換えれば、同一のプロセスまたは別のプロセスに対してドラック&ドロップすることが出来ます。 またオブジェクトを4Dフォームと他のアプリケーション間でドラッグ&ドロップできます。例えばGIFピクチャを4Dのピクチャフィールドにドラッグ&ドロップできます。またワードプロセッサアプリケーションでテキストを選択し、4Dのテキスト変数にドロップできます。 そして、フォームが最前面になくとも、アプリケーションに直接オブジェクトをドロップできます。On Dropデータベースメソッドを使用して、このケースのドラッグ&ドロップを管理できます。つまり、例えば、4Dアプリケーションアイコンに4D Writeドキュメントをドロップして開くことができます。 注: まず最初に、ドラッグ&ドロップアクションがある点から別の点までいくつかのデータを"転送させる"ものとします。あとでドラッグ&ドロップがあらゆるデータタイプの操作メタファである点を見ます。 あるオブジェクトから別のオブジェクトにドラッグ&ドロップを実行するには、プロパティリストウインドウでそのオブジェクト用のドラッグ可プロパティを選択する必要があります。ドラッグ&ドロップ処理では、ドラッグされるオブジェクトがソースオブジェクトになります。 あるオブジェクトをドラッグ&ドロップ処理のドロップ先にするには、プロパティリストウインドウでそのオブジェクトのドロップ可プロパティを選択する必要があります。ドラッグ&ドロップ処理では、データを受け取るオブジェクトがドロップ先オブジェクトになります。 自動ドラッグと自動ドロップ: これら追加のプロパティは、テキストフィールドや変数、コンボボックス、そしてリストボックスで利用できます。自動ドロップオプションはピクチャフィール ドや変数でも利用できます。これらは内容のコピーに基づく自動ドラッグ&ドロップを有効にするために使用できます (4Dフォームイベントによるドラッグ&ドロップアクションの管理は行われなくなります)。この節の最後の"自動ドラッグ&ドロップ"の段落を参照してく ださい。 デフォルトで、新しく作成されたオブジェクトはドラッグもドロップもできません。これらのプロパティを設定するかどうかは開発者に任されています。 入力フォームまたはダイアログのフォームにあるすべてのオブジェクトは、ドラッグまたはドロップの対象にできます。配列の個別の要素(例えば、スク ロール可能エリア)や階層リスト項目、リストボックスの行はドラッグ&ドロップができます。逆に、配列の個別の要素や階層リスト項目、リストボッ クスの行に対してオブジェクトをドラッグ&ドロップすることもできます。ただし、出力フォームの詳細エリアからオブジェクトをドラッグ& ドロップすることはできません。 アプリケーションのフォーム外へのドラッグアンドドロップも、On Dropデータベースメソッドで管理できます。 全ての任意のタイプのアクティブオブジェクト(フィールドや変数)をソースおよびドロップ先として使用できるため、ドラッグ&ドロップのユーザインタフェースは簡単に作成できます。例えば、ボタンをドラッグ&ドロップできます。 注:
ドラッグとドロップの両方ができるオブジェクトは、開発者が禁止しない限り、自分自身にもドロップできます。詳細については、以下の説明を参照してください。 以下の図は、選択したオブジェクトに対してプロパティリストウインドウでドラッグ可プロパティとドロップ可プロパティを設定した状態を示しています: プログラムによるドラッグ&ドロップの管理は、3つのフォームイベントに基づきます: On Begin Drag Over, On Drag Over そして On Drop。 On Begin Drag Overイベントはドラッグのソースオブジェクトのコンテキストで生成される点に注意してください。対してOn Drag OverとOn Dropはドロップ先オブジェクトに送信されます。 アプリケーションがこれらのイベントを処理するためには、プロパティリストで正しく選択されていなければなりません: プロパティリスト:On Begin Drag Over フォームイベントは、ドラッグ可能なすべてのフォームオブジェクトで選択できます。このイベントは、オブジェクトがドラッグ可プロパティを持っている場合、すべてのケースで生成されます。 On Drag Over フォームイベントと異なり、On Begin Drag Over はドラッグアクションのソースオブジェクトのコンテキストで呼び出されます。ソースオブジェクトのメソッドあるいはソースオブジェクトのフォームメソッドから呼び出されます。
4Dデータは、イベントが呼び出される前に、ペーストボードに置かれます。例えば、自動ドラッグアクションなしでドラッグした場合、ドラッグされたテキストは、イベントが呼び出される時にはペーストボードにあります。 On Drag Overイベントは、マウスポインタがオブジェクトの上を移動する時に、繰り返しドロップ先オブジェクトに送られます。このイベントの応答として、開発者は通常、以下のことを行います:
ドラッグを受け付けるには、ドロップ先のオブジェクトメソッドが ($0:=0を実行して) 0 (ゼロ) を返さなければなりません。ドラッグを拒否するには、オブジェクトメソッドが ($0:=-1を実行して) -1 (マイナス1)を返さなければなりません。$0:=-1と記述します。On Drag Overイベント中、4Dはこのオブジェクトメソッドを関数として扱います。結果が返されない場合には、4Dはドラッグが受け付けられたものと認識します。 ドラッグを受け入れると、ドロップ先オブジェクトがハイライトされます。ドラッグを拒否した場合、ドロップ先オブジェクトはハイライトされません。 ドラッグを受け付けることは、ドラッグされたデータがドロップ先オブジェクトに挿入されるという意味ではありません。これは、単にマウスボタンをこの場所 で離したときに、ドラッグされたデータがドロップ先オブジェクトによって受け付けられたことを意味するだけです。 ドロップ可能なオブジェクトに対して開発者がOn Drag Overイベントを処理しない場合には、そのオブジェクトは、ドラッグされたデータの性質やタイプに関係なく、すべてのドラッグ処理に対してハイライトされます。 On Drag Overイベントは、ドラッグ&ドロップ処理の最初の段 階を制御する手段です。ドラッグされたデータがドロップ先オブジェクトと互換性のあるタイプかどうかをテストでき、またドラッグの受け付けや拒否をできる だけでなく、4Dがあなたの判断に基づいてドロップ先オブジェクトをハイライト(または無反応)されるため、この操作が有効であることを操作者にフィード バックすることができます。 On Drag Overイベントはマウスの移動に従って、現在のドロップ先オブジェクトに対して繰り返し送られるため、このイベントのコード処理は短く、短時間で実行されるようにしてください。 警告: 4D v11より、ドラッグ&ドロップがプロセス間のドラッグ&ドロップである場合、つまりソースオブジェクトがドロップ先オブジェクトのプロセスとは異なるプロセス(ウインドウ)にある場合、On Drag Overイベントに対するドロップ先オブジェクトのオブジェクトメソッドはドロップ先プロセスのコンテキスト内で実行されます。ドラッグされた要素の値を得るには、プロセス間通信コマンドを使用しなければなりません。通常このケースでは、On Begin Drag Overイベントとペーストボードテーマのコマンドを使用することが推奨されます。 On Dropイベントはマウスポインタがドロップ先オブジェクトに対して離されたときにそのオブジェクトに一度送られます。このイベントはドラッグ&ドロップ処理の第2段階であり、ユーザアクションの応答として処理を実行します。 このイベントは、On Drag Overイベント中にドラッグが受け付けられなかった場合には、オブジェクトに送られません。オブジェクトに対してOn Drag Overイベントを処理し、ドラッグを拒否した場合には、On Dropイベントは発生しません。つまり、On Drag Overイベント中にソースオブジェクトとドロップ先オブジェクト間のデータタイプの互換性をテストして、有効なドロップを受け付けた場合には、On Drop中にデータの再テストをする必要はありません。データがドロップ先オブジェクトに対して適切であることは既にわかっているためです。 4Dのドラッグ&ドロップを実現する上での興味深い点は、必要なことは何でもできるというところです。例えば:
上記の例からもおわかりのように、4Dのドラッグ&ドロップインタフェースは任意のユーザインタフェースメタファを実現できるフレームワークです。 DRAG AND DROP PROPERTIESコマンドは、以下を返します:
Drop positionコマンドは、ドロップ先オブジェクトが配列(スクロール可能エリアなど)、階層リスト、コンボボックスの場合にターゲット要素やリスト項目の項目位置、あるいはリストオブジェクトの場合に列番号を返します。 RESOLVE POINTERやTypeのようなコマンドは、ソースオブジェクトの属性やタイプを調べる際に有効です。 ドラッグされたデータをコピーする目的でドラッグ&ドラッグ操作が行われた場合、これらのコマンドの機能は関わっているプロセスの数によって変わります:
ドラッグ&ドロップがデータを移動を目的としたものではなく、独特な処理のためのユーザインタフェースメタファである場合、希望するいかなる処理もプログラミングすることが出来ます。 ドラッグ&ドロップ操作に、2つの4Dアプリケーション間または4Dアプリケーションとサードパーティーアプリケーション間でのデータやドキュメントの移動が関わる場合、“ペーストボード”テーマのコマンドが必要なツールを提供します。 ドラッグ&ドロップ操作に関する“ペーストボード”テーマのコマンドの詳細は、ペーストボードの管理を参照してください。 テキストエリア (フィールド, 変数, コンボボックス そしてリストボックス) やピクチャオブジェクトは自動ドラッグ&ドロップをサポートし、シングルクリックであるエリアから他のエリアにテキストやピクチャを移動またはコピーでき ます。これは同じ4Dエリア、2つの4Dエリア、4Dと他のアプリケーション間で使用できます。 Note: 2つの4Dエリア間の自動ドラッグ&ドロップの場合データは移動されます。言い換えれば、データはソースエリアから削除されます。データをコピーしたい場合、アクションの間Ctrl (Windows) または Option (Mac OS) を押します(OS Xの場合、ドラッグを開始した後にOptionを押す必要があります)。 自動ドラッグ&ドロップはフォームオブジェクトごとに、プロパティリストの2つのオプション、自動ドラッグと自動ドロップで個別に設定できます:
バージョン11より、4Dはピクチャファイルなど外部のセレクションやオブジェクト、ファイルのドラッグアンドドロップをサポートするようになりました。これはデータベースコードでサポートされなければなりません。 このオプションがチェックされていると、外部オブジェクトの4Dフォームへのドロップは拒否されます。しかし、自動ドロップオプションにより、外部オブジェクトの挿入が依然可能である点に留意してください。この場合アプリケーションがドロップされたテキストまたはピクチャデータを解釈できます。
参照
DRAG AND DROP PROPERTIES
|
プロパティ
プロダクト: 4D
履歴
ARTICLE USAGE
ランゲージリファレンス ( 4D v16) |