# tkdnd

Section: Tk Built-In Commands (n)
Updated: 8.4
Index Return to Main Contents

## 名称 NAME

tkdnd - Tk アイコン重ね 対話機能　　　Tk Drag and Drop Interface

## 構文 SYNOPSIS

tkdnd::drop_target register window ?type-list?
tkdnd::drop_target unregister window

tkdnd::drag_source register window ?type-list? ?mouse-button?
tkdnd::drag_source unregister window

tkdnd::platform_specific_types type-list
tkdnd::platform_independent_types type-list

tkdnd::GetDropFileTempDirectory
tkdnd::SetDropFileTempDirectory directory

## 緒論 INTRODUCTION

tkdnd 眷属命令はTcl 対話機能に､OS 固有の本来のアイコン重ね仕組みを提供する｡ unix の元では使われるアイコン重ね通信規約は XDND 通信規約第5版である(更に､ Qt toolkit 並びに､KDE とGNOME 机上も､使用される)｡ Windows の元では OLE2 アイコン重ね 対話機能が使用される｡ Macintosh の元では Cocoa アイコン重ね 対話機能が使用される｡ The tkdnd family commands provide a Tcl interface to native, platform specific drag and drop mechanism. Under unix the drag & drop protocol in use is the XDND protocol version 5 (also used by the Qt toolkit, and the KDE and GNOME desktops). Under Windows, the OLE2 drag & drop interfaces are used. Under Macintosh, the Cocoa drag & drop interfaces are used.

tkdnd 眷属は原始算譜から､標準構成設定､ make ､ 機械語実装手続き函数､を順に使用して機械語に翻訳できる｡Cmake も同様に運営されている｡幾つかの二進化梱包が SourceForge 電網取得基地や､ActiveState の ActiveTcl 配布やその他､から利用できる｡ 　　　 The tkdnd family can be built from source code using the standard configure; make; make install procedure. Cmake is also supported. Some binary package are available from the SourceForge download site, from ActiveState's ActiveTcl distribution, and elsewhere.

tkdnd 眷属命令により使用者は既存の Tk 部品を曳き摺り源資や目標場所として登録でき､それにより､アイコン重ね操作の間に､固有の型に算譜化されたデータを送ったり受取ったりできる｡これらの型は DND_Text や DND_Files の如くOSに非依存の型と CF_UNICODETEXT や 文書/平文 の如くOS依存のものがあり得る｡　 With the tkdnd family commands the user is able to register existing Tk widgets as drag sources or drop targets, that are able to send or receive data during drag and drop operations, encoded in specific types. These types can be platform independent types like DND_Text and DND_Files or platform specific types, like CF_UNICODETEXT or text/plain.

tkdnd 命令に関する公式な形式は以下の通り：　 The legal forms for the tkdnd commands are:

tkdnd::drop_target register window ?type-list?
  この命令は window を送付目標として登録する｡送付目標は送付動作を受容れできる部品である｡ window はこの命令が実行されるときに実在しなければならず､この命令は部品に複数回実行してもよい｡ This command will register window as a drop target. A drop target is a widget than can accept a drop action. window must exist when this command is executed and this command can be executed multiple times on a widget.

  window が送付目標として登録される時､追加の type-list 指示項目を提供できる｡この型リストは window が送付動作を受取る間の一つ或いはそれ以上の型を含むことができ､OS非依存の型もOS依存の型も含むことができる｡ OS非依存は送付する文書の部分の為のDND_Text と､ window 上のファイル(一つ或いは複数のファイルを含み得る)の送付リストである｡ もし､type-list が指定されない場合､無為設定の空リストになる｡ When window is registered as a drop target, and optional type-list can be provided. This type list can contain one or more types that window will accept during a drop action, and it can contain platform independent or platform specific types. Platform independent are DND_Text for dropping text portions and DND_Files for dropping a list of files (which can contain one or multiple files) on window. If type-list is not specified, it defaults to the empty list.

tkdnd::drop_target unregister window
  この命令は､ window が送付目標であることを停止する｡従って window は送付操作に関る行事の受取りを停止する｡ この命令を tkdnd::drop_target 登録による送付目標として登録されていない window に使用することは不都合になる｡ This command will stop window from being a drop target. Thus, window will stop receiving events related to drop operations. It is an error to use this command for a window that has not been registered as a drop target with tkdnd::drop_target register.
tkdnd::drag_source register window ?type-list? ?mouse-button?
  この命令は window を曳摺り源資として登録する｡曳摺り源資は送付操作を開始することができる部品である｡ window はこの命令が実行されるときに実在しなければならず､この命令は部品に複数回実行してもよい｡ This command will register window as a drag source. A drag source is a widget than can start a drag action. window must exist when this command is executed and this command can be executed multiple times on a widget.

  window が曳摺り源資として登録されたとき､追加の type-list が与えられ得る｡この型リストは window が送付動作を提供する間の一つ或いはそれ以上の型を含むことができ､OS非依存の型もOS依存の型も含むことができる｡ OS非依存は送付する文書の部分の為のDND_Text と､ window 上のファイル(一つ或いは複数のファイルを含み得る)の送付リストである｡ しかし､この型リストは　叙実的/情報提供 である｡ window は異なる型のリストであっても曳き摺り動作を開始可能である｡ もし､type-list が指定されない場合､無為設定の空リストになる｡ When window is registered as a drag source, and optional type-list can be provided. This type list can contain one or more types that window will provide during a drag action, and it can contain platform independent or platform specific types. Platform independent are DND_Text for dropping text portions and DND_Files for dropping a list of files (which can contain one or multiple files) on window. However, this type list is indicative/informative. window can initiate a drag action with even a different type list. If type-list is not specified, it defaults to the empty list.

  最後に､mouse-button は､マウスの釦であって曳き摺り動作を開始する為に使用される｡それは値 1 （左マウス釦）と､ 2 (マウス中央釦 - 回転輪) と､ 3 (右マウス釦)のどれかを有することができる｡もし mouse-button が指定されない場合､無為設定の1 になる｡ Finally, mouse-button is the mouse button that will be used for starting the drag action. It can have any of the values 1 (left mouse button), 2 (middle mouse button - wheel) and 3 (right mouse button). If mouse-button is not specified, it defaults to 1.

tkdnd::drag_source unregister window
  この命令は､送付源資から window を停止する｡従って window は送付操作に関る行事の受取りを停止する｡ この命令を tkdnd::drag_source register 命令による送付目標として登録されていない window に使用することは不都合になる｡ This command will stop window from being a drag source. Thus, window will stop receiving events related to drag operations. It is an error to use this command for a window that has not been registered as a drag source with tkdnd::drag_source register.
tkdnd::platform_specific_types type-list
  この命令はOS非依存又はOS固有の型を含むことができる型のリストを受取る｡ 新しいリストが返され､そこでは､type-list 内のOS非依存のそれぞれの型が一つ或いはそれ以上のOS固有の型によって置換されている｡従って返されるリストは type-list よりも多くの要素を有しているかもしれない｡　 This command will accept a list of types that can contain platform independent or platform specific types. A new list will be returned, where each platform independent type in type-list will be substituted by one or more platform specific types. Thus, the returned list may have more elements than type-list.
tkdnd::platform_independent_types type-list
  この命令はOS非依存又はOS固有の型を含むことができる型のリストを受取る｡ 新しいリストが返され､そこでは､ type-list 内のOS固有のそれぞれの型が一つ或いはそれ以上のOS非依存の型によって置換されている｡従って返されるリストは type-list よりも多くの要素を有しているかもしれない｡　 This command will accept a list of types that can contain platform independent or platform specific types. A new list will be returned, where each platform specific type in type-list will be substituted by one or more platform independent types. Thus, the returned list may have more elements than type-list.
tkdnd::GetDropFileTempDirectory
  この命令は､臨時のファイルを保存する為に使われる臨時ディレクトリーを返す｡梱包が積込まれた時､この臨時ディレクトリーはOSに従って適切なディレクトリーに初期化される｡この無為設定の初期値は次の環境変数の値に変更されることができる: TKDND_TEMP_DIR か TEMP か TMP ｡ This command will return the temporary directory used by TkDND for storing temporary files. When the package is loaded, this temporary directory will be initialised to a proper directory according to the operating system. This default initial value can be changed to be the value of the following environmental variables: TKDND_TEMP_DIR, TEMP, TMP.
tkdnd::SetDropFileTempDirectory directory
  この命令は TkDND に臨時ファイルを保存する為に使用される臨時ディレクトリーをdirectoryに変更する｡　 This command will change the temporary directory used by TkDND for storing temporary files to directory.

## 運営されている型　　SUPPORTED TYPES

アイコン重ね操作の間に移転されるデータの型を宣言する為に､全てのアイコン重ね通信規約は型の概念を使う｡ 不幸なことに､それぞれの通信規約はそれ自身の､通常OS固有の型を定義する｡ tkdnd は異なるOS間の互換性を維持しようと試み､データや､文書等や､ファイル名の様な基本的幾つかのものの為の予め定義された型を提供する｡ 現在､次の予備定義された汎OS値が利用できる：　 In order to declare the format that the data that will transferred during a drag and drop operation, all drag and drop protocols use the notion of types. Unfortunately, each protocol defines its own, usually platform specific, types. Tkdnd, trying to maintain portability among different platforms, offers some predefined types for some basic kinds of data, like text, and filenames. Currently, the following predifined cross-platform values are available:

DND_Text:
  この型は文書的データの移転の為に使用することができる｡最初に､次のOS固有の形式に翻訳される｡ This type can be used for transferring textual data. Internally, it is translated to the following platform specific formats:
  Windows: CF_UNICODETEXT, CF_TEXT.
  Unix: text/plain;charset=UTF-8, text/plain.
  Mac: NSStringPboardType
DND_Files:
  この型はファイル名のリストの移転の為に使用することができる｡最初に､次のOS固有の形式に翻訳される｡ This type can be used for transferring a list of file names. Internally, it is translated to the following platform specific formats:
  Windows: CF_HDROP.
  Unix: text/uri-list.
  Mac: NSFilenamesPboardType.
OS非依存の型の他に､tkdnd は次のOS固有の型を運営する：　 Additionally to the platform independent types, tkdnd supports the following platform specific types:
Windows:
  CF_UNICODETEXT: 文書はユニコードで符号化転換する｡　 Text transfer encoded in unicode.
  CF_TEXT: 文書は､応用譜依存の符号化で変換する｡もし符号化の地域情報が CF_LOCALE を通して指定されていれば､それが使用される､そうでない場合､系の符号化変換に使用される｡ Text transfer with application dependent encoding. If an encoding locale is specified through CF_LOCALE it is used, else the system encoding is used for the conversion.
  FileGroupDescriptor - FileContents: これら二つの型は､圧縮されたフォルダーや Outlook の電子郵便伝言からのファイルの如く､物理的に机上に現れないファイルの組の転移に使用される｡ ファイル名称は､ファイル内容が二進数に変換されている間に CF_TEXT 型の如く変換される｡ tkdnd はファイル名とファイル内容の両方を取り出し､臨時ディレクトリーに保存する｡移転が完了した時､臨時フォルダー内のその保存されたファイル名が返される｡注意すべきはtkdndはこの型対を送付目標としてのみ運営し､送付源資としては運営していない｡ These two types are used for transferring a set of files that do not appear physically on disk, like files from compressed folders or Outlook e-mail messages. File names are transferred as in the CF_TEXT type, while file contents are transferred in binary. Tkdnd retrieves both the file names and the file contents, and saves then in a temporary directory. When the transfer is complete, the file names of the saved files in the temporary folder are returned. Note that tkdnd support this type pair only as drop targets and not as drag sources.
  FileGroupDescriptorW - FileContents: これら二つの型は､圧縮されたフォルダーや Outlook の電子郵便伝言からのファイルの如く､物理的に机上に現れないファイルの組の転移に使用される｡ ファイル名称は､ファイル内容が二進数に変換されている間に CF_UNICODETEXT 型の如く変換される｡ tkdnd はファイル名とファイル内容の両方を取り出し､臨時ディレクトリーに保存する｡移転が完了した時､臨時フォルダー内のその保存されたファイル名が返される｡注意すべきはtkdndはこの型対を送付目標としてのみ運営し､送付源資としては運営していない｡ These two types are used for transferring a set of files that do not appear physically on disk, like files from compressed folders or Outlook e-mail messages. File names are transferred as in the CF_UNICODETEXT type, while file contents are transferred in binary. Tkdnd retrieves both the file names and the file contents, and saves then in a temporary directory. When the transfer is complete, the file names of the saved files in the temporary folder are returned. Note that tkdnd support this type pair only as drop targets and not as drag sources.
  CF_HDROP: Files transfer encoded in UTF-8.
Unix:

最後に曳き摺り型として使用されている書式型は､"string match"と同じ規則に従った万能印を有し得る｡譬えば､型 "*"を使って送付目標を登録すると､縦え送付形式がどのようなものであっても､どのような送付も受容れることになる｡ Finally, format types used for drop types can have wildcards, following the same rules as "string match". For example, registering a drop target with the type "*", will accept any drop, no matter what the drop format is.

## 行事　EVENTS

送付目標か送付源資のどちらかに登録された windows はアイコン重ね操作の間に特定の行事を受取る｡ 結果として､窓はこれらの行事の何かの為に束縛をゆうしていることが期待されている｡ ある種の行事は必須であり(束縛が実在しないと､曳き摺りか送付の操作が停止するかも知れないとの意味)､それ以外は必須ではない｡ 但し､全ての行事の為に束縛を定義することは良き訓練でもあり､応用譜はアイコン重ね操作の間に期待されている通りに振舞う｡ Windows registered as either drop targets or drag sources, will receive certain events, during drag and drop operations. As a result, the windows are expected to have bindings for some of these events. Some events are mandatory (in the sense that a drag or drop operation can be stopped if the bindings do not exist), while others are not. However, it is a good practice to define bindings for all events, so as the application will behave as expected during drag and drop operations.

tkdnd 梱包は幾つかの仮想行事を定義し､それらはアイコン重ね操作の色々の様相に対応している｡ 全ての送付目標或いは送付源資の窓は(全ての)行事のための､bind Tk 命令によって生成された束縛を有していることが期待されている｡ これらの行事束縛が通常の Tk 行事であるので､それらは普通の Tk 行事から少ししか違わない: その大部分は値を返すことが期待されている｡ Tk 束縛は値を返すことができないので､tkdnd は実際にはこれらの行事を生成することはない(即ち "event generate" 経由では)｡ その代わり､tkdnd 仮想行事に束縛された記述譜を置き､それを記述譜として､直接実行する この以下に行事が起動されるかとの小さい差異を除いてtkdndによって要求される行事は通常の行事と同じに見える｡次の二つの節で､tkdndによって定義された全て仮想行事が展示される｡ The tkdnd package defines a set of virtual events, that correspond to various phases of a drag and drop operation. All windows that are either a drop target or a drag source are expected to have bindings for (all) these events, created with the bind Tk command. While these event bindings are regular Tk events, they have a small difference from plain Tk events: most of them are expected to return a value. Since Tk bindings cannot return a value, tkdnd does not actually generate these events (i.e. through "event generate"). Instead, tkdnd locates the script that has been bound to the virtual event, and directly executes it, as a script. Apart from this small difference in how the events are triggered, the events required by tkdnd can be viewed as regular events. In the following two sections all virtual events defined by the tkdnd package are presented.

## 送付目標行事　　DROP TARGET EVENTS

送付目標として登録された窓は次の仮想行事の為の束縛を有することが期待される｡ A window registered as a drop target, is expected to have bindings for the following virtual events:

<<DropEnter>>:
  送付動作の間にマウスが窓に入っているときにこの行事が起動される｡ この行事の目的は窓の可視状態を変更して送付が受容れられたか否かを使用者に通知することである｡ この束縛記述譜は送付操作を定義する一つの値を返すことが期待される｡ この返された操作は copy か move か link か ask か private か refuse_drop になり得る｡ この行事は必須ではないが､定義されると動作を返さねばならない｡操作が返されない場合､送付はこの窓から拒絶される｡ This event is triggered when the mouse enters the window during a drop action. The purpose of this event is to change the visual state of the window, so as to notify the user whether the drop will be accepted or not. The binding script is expected to return a single value that will define the drop action. This returned action can be one of copy, move, link, ask, private and refuse_drop. This event is not mandatory, but if it is defined, it has to return an action. In case an action is not returned, the drop is refused for this window.
<<DropPosition>>:
  送付動作の間にマウスが窓内部で移動するときにこの行事が起動される｡ この行事の目的は特定のマウスの座標の箇所で送付が起きようとしている場合に､送付と送付の動作が受容れるかを窓に決定させることである｡ 従って､このような行事の為の束縛の記述譜はマウスの座標と､押された修正釦( ctrl や shiftやalt の様な)を得ることができ､送付動作を返すことが期待され､又それは copy か move か link か ask か private か refuse_dropかの内の一つでなければならない｡ この行事は必須ではないが､定義されると動作を返さねばならない｡操作が返されない場合､送付はこの窓から拒絶される｡ This events is triggered when the mouse moves inside the window during a drop action. The purpose of this event is to let window decide if it will accept the drop and the action of the drop, if a drop is going to happen at the specific mouse coordinates. Thus, the script binding for such an event can get the mouse coordinates and the pressed modifier buttons (such as ctrl, shift or alt), and is expected to return the drop action, which again must be one of copy, move, link, ask, private and refuse_drop. This event is not mandatory, but if it is defined, it has to return an action. In case an action is not returned, the drop is refused for this window.
<<DropLeave>>:
  この行事は､送付なしに､窓に覆われた領域のそとにマウスが離れた時に起動される｡ このような行事の束縛は､窓の可視状態を通常(即ち､即ち､ <<DropEnter>> 行事が起動される前の窓の可視状態)に､再保存する為に期待される｡ この様な行事の為の束縛は返り値が期待されていない｡ This event is triggered when the mouse leaves outside the area covered by window, without a drop happening. The binding of such an event is expected to restore the visual state of the window to normal (i.e. the visual state the window was in before the <<DropEnter>> event was triggered). The binding for such an event is not expected to return a value.
<<Drop>>:
  この行事は送付動作により起動され､送付したデータを処理し､窓の可視状態を解消することが期待される｡ 記述譜束縛は､値を返すことが期待され､それはデータに施された動作であって､ copy か move か link か ask か private か refuse_drop の内の一つでなければならない｡ この行事は必須ではないが､定義されると動作を返さねばならない｡操作が返されない場合､送付はこの窓から拒絶される｡ This event is triggered by a drop action, and it is expected to handle the dropped data and reset the visual state of the window. The binding script is expected to return a value, which will be the action that has been performed to the data and must be one of copy, move, link, ask, private and refuse_drop. This event is not mandatory, but if it is defined, it has to return an action. In case an action is not returned, the drop is refused for this window.
<<Drop:type>>:
  この行事は type の引数により､汎用<<Drop>> を特殊化したものである｡この様な束縛が実在し､送付型が type に合致する場合に､汎用<<Drop>> の代わりに､この行事束縛が実行される｡ これらの行事は､送付されたデータの型に従って､送付束縛の簡易な特殊化を許容する｡ type はOS非依存でも､OS依存でも好い｡このような行事の束縛記述譜は値を返すことが期待され､それはデータに対して遂行された動作であって､ copy か move か link か ask か private か refuse_drop の内の一つでなければならない｡ この行事は必須ではないが､定義されると動作を返さねばならない｡操作が返されない場合､送付はこの窓から拒絶される｡ This event is a specialisation of the generic <<Drop>> event, augmented with a type. If such a binding exists and the drop type matches type, this event binding will be executed, instead of the generic <<Drop>> event binding. These events allow for easy specialisation of drop bindings, according to the type of the dropped data. type can be either a platform independent or a platform specific type. The binding script of such an event is expected to return a value, which will be the action that has been performed to the data and must be one of copy, move, link, ask, private and refuse_drop. This event is not mandatory, but if it is defined, it has to return an action. In case an action is not returned, the drop is refused for this window.

## 曳き摺り源資行事 DRAG SOURCE EVENTS

送付源資として登録された窓は､次の仮想行事のための束縛を有することが期待される｡　　 A window registered as a drag source, is expected to have bindings for the following virtual events:

<<DragInitCmd>>:
  この行事は曳き摺り動作が始まろうとする時に起動される｡これは必須の行事であり(それがないと曳き摺り動作が予約解消される)､又､三つのことを提供する責務がある: 動作のリストと､曳き摺り源資により運営されている形式型と､送付されるべきデータの道筋である｡従って､このような行事の為の束縛記述譜は､三つの要素のリストを返さねばならない: 曳き摺り源資によって運営されている送付動作( copy か move か link か ask か private か refuse_drop の内のどれかで好い)と､データその様に送付されえる形式型のリスト(それは､OS非依存又はOS依存のどのような型でもよい)と､最後にデータである｡このような束縛の単純な用例は次の通り：　 This event is triggered when a drag action is about to start. This is a mandatory event (whose absence will cancel the drag action), and is responsible for providing three things: the list of actions and format types supported by the drag source, and of course the data to be dropped. Thus, the binding script for such an event must return a list of three elements: the drop actions supported by the drag source (which can be any of copy, move, link, ask, and private), the format type list that the data can be dropped as (which can be any platform independent or platform specific type), and finally the data. A simple example of such a binding, is:

        bind .drag_source <<DragInitCmd>> \
             {list copy DND_Text {Hellow world!}}

<<DragEndCmd>>:
  この行事は曳き摺り動作が終了した時に起動される(送付が成功してもしなくても)｡ その主目的は､送付目標によって返された送付動作に従った送付動作の処理である｡ このような行事の束縛は､必須ではなく､束縛は値を返すことを期待しない｡ This event is triggered when the drag action has finished (either when the drop was successful or not). Its main purpose is to process the dropped data according to the drop action returned by the drop target. Binding for such an event is not mandatory, and the binding is not expected to return a value.

## 束縛記述譜と置換 BINDING SCRIPTS AND SUBSTITUTIONS

上述の仮想行事のどれかで定義された全ての束縛の記述譜は行事が束縛されている窓を生成する為に使用された同じ解釈実行機能の中で実行され､束縛記述譜は大域水準で実行される(即ち､大域変数のみ受取られ得る)｡ All bindings scripts defined for any of the virtual events above will be executed in the same interpreter that was used for creating the window the event is bound to, and the binding script will executed at the global level (i.e. only global variables will be accessible).

もし､記述譜束縛がどれか % 文字を含んでいる場合､通常の Tk 束縛記述譜の様に､置換が行われる｡適正な % 記述子は以下の通り： If the binding script contains any % characters, then substitutions will be made, like in normal Tk binding scripts. Valid % specifiers are:

%%
  百分率印一つに置換えられる｡ Replaced with a single percent.
%A
  曳き摺り/送付 操作の現在の動作｡ The current action of the drag/drop operation.
%a
  曳き摺り源資によって運営されている動作のリスト｡　 The action list supported by the drag source.
%b
  曳き摺り/送付 操作の間に押されたマウス釦｡ 注意すべきは､常に一つのマウスボタンが押されたと報告される､縦え実際には､一つより多くのマウス釦が押されていても｡ The mouse button that is pressed during a drag/drop operation. Note that always a single mouse button is reported as pressed, even if more than one mouse buttons are actually pressed.
%c
  曳き摺り源資によって運営されている型のリストの符号｡全ての符号は八進法書式であり､%t 置換を通して得られた型のリストと同じ桁を有する｡ The codes of the list of types supported by the drag source. All codes are in octal format and have the same order as the list of types obtained through the %t substitution.
%C
  アイコン重ね操作の現在の型の符号(八進法書式)｡ The code (in octal format) of the current type of the drag and drop operation.
%CTT
  曳き摺り源資型リストに共通の送付目標リストからの型のリスト｡　 The list of types from the drop target type list that are common to the drag source type list.
%CST
  送付目標型リストと共通の曳き摺り源資型リストからの型のリスト｡ The list of types from the drag source type list that are common to the drop target type list.
%D
  送付されたデータ｡どれかのOSの元ではデータは送付が起こる前に利用可能である｡データの書式は送付操作の現在の型である｡ The data that has been dropped. Under some platforms the data will be available before the drop has occured. The format of the data is the current type of the drop operation.
%e
  現在の仮想行事の名前｡ <<DropEnter>>, <<DropPosition>>, <<DropLeave>>, <<Drop:type>>, <<Drop>>, <<DragInitCmd>>, <<DragEndCmd>> の内の一つ｡　　 The name of the current virtual event. One of <<DropEnter>>, <<DropPosition>>, <<DropLeave>>, <<Drop:type>>, <<Drop>>, <<DragInitCmd>>, <<DragEndCmd>>.
%L
  曳き摺り源資に運営されている型のリスト｡　 The list of types supported by the drag source.
%m
  押されている修正鍵盤の鍵のリスト｡ 修正鍵は Shift や Control や Alt の様な何か特別の鍵である｡ 有効な修正鍵は "shift" と "ctrl" と "alt" である｡ この修正鍵のリストを調べる為の送付目標行事の束縛記述譜は便利である､理由は何かの修正鍵の状態に従って動作を変更することは窮めて便利であるから｡ The list of modifier keyboard keys that are pressed. Modifier keys are some special keys, like Shift, Control or Alt. Valid modifiers are "shift", "ctrl" and "alt". It is useful for binding scripts of drop target events to examine this list of modifiers, as it is quite usuall to change the action according to the state of some modifier keys.
%ST
  曳き摺り源資により運営されている型のリスト｡　 The list of types supported by the drag source.
%t
  曳き摺り源資により運営されている型｡　 The list of types supported by the drag source.
%T
  アイコン重ね操作の現在の型｡　 The current type of the drag and drop operation.
%TT
  送付目標により運営されている型のリスト｡　 The list of types supported by the drop target.
%W
  行事が配送される窓｡　 The window that the event is delivered to.
%X
  マウス指示子 x 座標､源窓に相対的｡ The mouse pointer x coordinate, relative to the root window.
%Y
  マウス指示子 y 座標､源窓に相対的｡ The mouse pointer y coordinate, relative to the root window.

## 送付目標の指定　 SPECIFYING DROP TARGETS

送付目標の生成は容易である：それが受取りえる形式型リストを伴う送付目標として窓を登録し幾つかの束縛を加えるだけでよい｡ 譬えば､文書の送付を受容れられる窓は次の通り：　 Creating drop targets is easy: we have to only register a window as a drop target with the list of format types it can accept, and add a few bindings. For example, a window that accepts textual drops can be as follows:

      label .drop_target -text {Text Drop Target!} -bg white
      tkdnd::drop_target register .drop_target DND_Text
      bind .drop_target <<DropEnter>> {%W configure -bg yellow; list copy}
      bind .drop_target <<DropPosition>> {list copy}
      bind .drop_target <<DropLeave>> {%W configure -bg white}
      bind .drop_target <<Drop>> {%W configure -text %D; %W configure -bg white}

上述の束縛からは､義務的なものはない｡但し､通常は送付したデータを受取りたい(従って､ <<Drop>> 行事は処理されなければならない)し､ <<DropEnter>> と <<DropLeave>> 行事を通して可視の負帰還を使用者に与えたい｡最後に､ 窓の特定の領域上の送付のみ受容れることを望むか､押された修正鍵に従って送付動作を変更したい場合にのみ､ <<DropPosition>> が必要である｡　 From the above bindings, none is obligatory. However, we usually want to receive dropped data (thus the <<Drop>> event must be handled) and we want to give visual feedback to the users through the <<DropEnter>> and <<DropLeave>> events. Finally, <<DropPosition>> is only necessary if we want to only accept drops on specific areas of the window, or we want to change the drop action according to the pressed modifiers.

今や､ファイル送付受取り能力を追加したい場合､追加できる：　 Now, if we want to also add the ability to receive file drops, we could add:

      tkdnd::drop_target register .drop_target DND_Files
      bind .drop_target <<Drop:DND_Files>> \
         {puts %D; %W configure -bg white}

注意すべきは､行事 <<Drop:DND_Files>> の為に､"特別の" 送付束縛を追加した: この意味は､文書部分が窓を覆って送付された時､ <<Drop>> 行事束縛が実行される｡ しかし､ファイルのリストが窓の上に送付された時は､ <<Drop:DND_Files>> 行事束縛が実行される｡ もし､ <<Drop:DND_Text>> 行事の為の束縛を処理し定義した場合､ "汎用" <<Drop>> 行事の束縛は実行される事はない｡ Note that we have added a "specialised" drop binding, for the event <<Drop:DND_Files>>: this means that when a text portion is dropped over the window, the <<Drop>> event binding will be executed. But when a list of files is dropped onto the window, the <<Drop:DND_Files>> event binding will be executed. If we proceed and define a binding for the <<Drop:DND_Text>> event, the binding of the "general" <<Drop>> event will never be executed.

## 曳き摺り源資の指定　SPECIFYING DRAG SOURCES

曳き摺り源資を指定する為に､我々は窓を曳き摺り源資として登録する必要がある｡ In order to specify a drag source, we need to register a window as a drag source:

      tkdnd::drag_source register .text_drag_source

上記命令は曳き摺り源資を空の型のリストに定義し､曳き摺りのようなマウス束縛を整頓する 上記命令は曳き摺り源資を空の型のリストに定義し(それは <<DragInitCmd>> 行事束縛内で宣言される)､曳き摺りが左マウス釦により解するよう準備する｡そこで､ <<DragInitCmd>> の為の束縛の定義には絶対的に必要である：　この行事束縛は動作のリストと､形式型のリストと､送付される実際のデータを返さねばならない｡　　 The above command defines a drag source with an empty type list (and which will be declared in the <<DragInitCmd>> event binding) and arranges mouse bindings such as a drag will be started with the left mouse button. Then, it is absolutely necessary to define a binding for the <<DragInitCmd>>: this event binding must return the list of actions, the list of format types and the actual data to be dropped:

      bind .text_drag_source <<DragInitCmd>> \
           {list {copy move} DND_Text {Hello from Tk!}}

そしてこれで全てである! And that was all!

## 瑕疵　BUGS

Unix: Tk 窓からの曳き摺りは実装されていない｡　 Dragging from Tk windows has not yet been implemented.
OS X: TkDND under OS X is built on top of the Cocoa framework. Thus, it is compatible with Tk version >= 8.6

## 用語　KEYWORDS

dnd, drag and drop

## Index

名称 NAME
構文 SYNOPSIS
緒論 INTRODUCTION
運営されている型 SUPPORTED TYPES
行事 EVENTS
送付目標行事 DROP TARGET EVENTS
曳き摺り源資行事 DRAG SOURCE EVENTS
束縛記述譜と置換 BINDING SCRIPTS AND SUBSTITUTIONS
送付目標の指定 SPECIFYING DROP TARGETS
曳き摺り源資の指定 SPECIFYING DRAG SOURCES
瑕疵 BUGS
用語 KEYWORDS

This document was created by man2html, using the manual pages.
Time: 23:51:03 GMT, January 03, 2010