## Tcl8.6.17/Tk8.6.17 Documentation > Tk Commands > grab

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    grab — 指示子と鍵盤の行事を窓の仔樹枝に封じ込める Confine pointer and keyboard events to a window sub-tree
  構文 SYNOPSIS
  説明 DESCRIPTION
    grab ?-global? window
    grab current ?window?
    grab release window
    grab set ?-global? window
    grab status window
  警告WARNING
  瑕疵 BUGS
  用例 EXAMPLE
  SEE ALSO
  KEYWORDS

### NAME

grab — 指示子と鍵盤の行事を窓の仔樹枝に封じ込める Confine pointer and keyboard events to a window sub-tree

### 構文 SYNOPSIS

grab ?-global? window

grab option ?arg arg ...?

### 説明 DESCRIPTION

この命令は Tk の為の単純な指示子と鍵盤の独占を実装する｡ Tk の独占は､ Xlib 外部函数説明書の記述とは異なっている｡特定の窓に独占が設定される時､Tk は独占した窓と Tk 内の窓の階層構造の子孫に対する指示子行事に制限を掛ける｡何時であれ､指示子が独占の窓の眷属内にある時､指示子は恰も独占が全くないかの如く振舞い､全ての行事は通常の方式で報告される｡指示子が窓の眷属の外に出ると､釦の押下と解放とマウスの移動行事は窓に報告される､又､窓への出入りは無視される｡独占の眷属は指示子を “専有する” : 独占の眷属外の窓は画面上で可視であるが独占が解消される迄は無反応である｡ 独占の窓の下にある窓の眷属は頂上水準の窓を含み得るが､その場合全ての頂上水準の窓とその子孫は独占の間はマウス行事を受取り続ける｡(訳注 Xlibは ユニックスで使用される画面操作函数群､マイクロソフト社Winでは使われない) This command implements simple pointer and keyboard grabs for Tk. Tk's grabs are different than the grabs described in the Xlib documentation. When a grab is set for a particular window, Tk restricts all pointer events to the grab window and its descendants in Tk's window hierarchy. Whenever the pointer is within the grab window's subtree, the pointer will behave exactly the same as if there had been no grab at all and all events will be reported in the normal fashion. When the pointer is outside window's tree, button presses and releases and mouse motion events are reported to window, and window entry and window exit events are ignored. The grab subtree “owns” the pointer: windows outside the grab subtree will be visible on the screen but they will be insensitive until the grab is released. The tree of windows underneath the grab window can include top-level windows, in which case all of those top-level windows and their descendants will continue to receive mouse events during the grab.

独占は二つの形式が可能である: 局所と大域｡局所独占は応用譜を独占し影響するのみである: 行事は他の応用譜に独占がないかの如く報告される｡独占は局所が省略時設定である｡大域独占は画面上の全ての応用譜を締め出し､独占した応用譜の眷属のみが指示子の行事に反応できる(マウス釦押下､マウス釦解除､指示子移動､窓進入､窓離脱)｡大域独占の間､窓管理譜も指示子行事は受取らない｡ Two forms of grabs are possible: local and global. A local grab affects only the grabbing application: events will be reported to other applications as if the grab had never occurred. Grabs are local by default. A global grab locks out all applications on the screen, so that only the given subtree of the grabbing application will be sensitive to pointer events (mouse button presses, mouse button releases, pointer motions, window entries, and window exits). During global grabs the window manager will not receive pointer events either.

局所独占の間､鍵盤行事は(鍵盤押下､鍵盤解除)通常に配付される: 窓管理譜は鍵盤行事を受取る応用譜を管理する､そして､もし専有された応用譜のどれかの窓に送られたものでると､管理譜はそれを注目のある窓に送り先変更する｡大域専有の間､ Tk は鍵盤を専有し全ての鍵盤行事は常に専有した応用譜に送られる｡ focus 命令は応用譜のどの窓が鍵盤行事を受取るかを定めることに依然として使用できる｡鍵盤の専有は専有が解除された時に解除される｡ During local grabs, keyboard events (key presses and key releases) are delivered as usual: the window manager controls which application receives keyboard events, and if they are sent to any window in the grabbing application then they are redirected to the focus window. During a global grab Tk grabs the keyboard so that all keyboard events are always sent to the grabbing application. The focus command is still used to determine which window in the application receives the keyboard events. The keyboard grab is released when the grab is released.

macOS では大域 独占 は一つのTk 課程で創生された全ての窓に効果を及ぼす｡その過程内のそのgrab窓以外の窓では注目さえもされない､従って､打鍵やマウス行事を受取る窓は､その他にはない｡macOS では局所 独占 は一つのTcl 解釈実行機能により創生された全ての窓に効果を及ぼす｡局所 独占 の間､ Tk 課程に属するどの窓でも注目することはできるが､独占 窓はその解釈実行機能により創生された窓だけであり､それが､打鍵やマウス行事を受取る｡同じ課程に属するが他の解釈実行機能に創生された窓は打鍵やマウス行事を普通に受取ることを続ける｡ On macOS a global grab affects all windows created by one Tk process. No window in that process other than the grab window can even be focused, hence no other window receives key or mouse events. A local grab on macOS affects all windows created by one Tcl interpreter. It is possible to focus any window belonging to the Tk process during a local grab but the grab window is the only window created by its interpreter which receives key or mouse events. Windows belonging to the same process but created by different interpreters continue to receive key and mouse events normally.

独占は特定の表示にも適用できる｡もし応用譜が複数の表示装置上に窓を有する時､それぞれの表示装置毎に別々に専有を設定できる｡特定の表示装置への専有はその表示装置上の窓のみに影響を与える｡一つの表示装置上の異なる応用譜に同時に局所専有を持たせる事は可能であるが､与えられた装置に同時に大域専有を有するのは一つだけである｡ Grabs apply to particular displays. If an application has windows on multiple displays then it can establish a separate grab on each display. The grab on a particular display affects only the windows on that display. It is possible for different applications on a single display to have simultaneous local grabs, but only one application can have a global grab on a given display at once.

grab 命令は次のいずれかの形式をとりうる: The grab command can take any of the following forms:

grab ?-global? window
  下で記述する grab set と同一｡ Same as grab set, described below.

grab current ?window?
  もし､ window が指定されると､応用譜内の window の表示の現在の窓の名前を返す､又はその様な窓がないと空文字列を返す｡もし window が省略されると､命令は全ての表示装置に対するこの応用譜によって専有されている全ての窓を要素とするリストを返す､又は応用譜が専有を有していないと空文字列を返す｡ If window is specified, returns the name of the current grab window in this application for window's display, or an empty string if there is no such window. If window is omitted, the command returns a list whose elements are all of the windows grabbed by this application for all displays, or an empty string if the application has no grabs.

grab release window
  window 上に専有があると開放する､それ以外はなにもしない｡空文字列を返す｡ Releases the grab on window if there is one, otherwise does nothing. Returns an empty string.

grab set ?-global? window
  window 上に専有を設定する｡もし -global が指定されていると専有は大域であり､それ以外は局所である｡もし占有が既にその応用譜の window の表示に有効になっていると､自動的に解除される｡もし既に window 上に専有があり､専有が要求されているのと同じ 大域/局所形式を有していると､この命令は何もしない｡空文字列を返す｡ 　　　　　 Sets a grab on window. If -global is specified then the grab is global, otherwise it is local. If a grab was already in effect for this application on window's display then it is automatically released. If there is already a grab on window and it has the same global/local form as the requested grab, then the command does nothing. Returns an empty string.

grab status window
  現在 window 上に専有が設定されていないと none を返し､ window 上に局所専有が設定されていると local を返し､大域専有が設定されていると global を返す｡ Returns none if no grab is currently set on window, local if a local grab is set on window, and global if a global grab is set.

### 警告WARNING

表示装置を使用できなくすることは大域専有を使うと非常に容易にできる(譬えば､行事に反応しない部品に専有を設定してそれを解除する仕組みを提供しない)｡使用は窮めて 慎重に! It is very easy to use global grabs to render a display completely unusable (e.g. by setting a grab on a widget which does not respond to events and not providing any mechanism for releasing the grab). Take extreme care when using them!

### 瑕疵 BUGS

上述の単純な専有効果を産出するために信じられない程複雑で多量の実装を要した｡与えられた現在の実装のもとでは､ 応用譜にとってXlib 専有機能を使うことは ､Tk 専有手続函数を通して行わなければ､安全ではない｡もし､応用譜が X の専有の仕組みを直接に操作しようとすると､多分ことが瓦解する｡ It took an incredibly complex and gross implementation to produce the simple grab effect described above. Given the current implementation, it is not safe for applications to use the Xlib grab facilities at all except through the Tk grab procedures. If applications try to manipulate X's grab mechanisms directly, things will probably break.

もし単一の処理課程が幾つかの異なる Tk 応用譜を管理すると､何時の時点でも､その内の一つの応用譜だけが局所専有を有する事が可能である｡もし応用譜が異なる処理課程内にあると､この制限は存在しない｡ If a single process is managing several different Tk applications, only one of those applications can have a local grab for a given display at any given time. If the applications are in different processes, this restriction does not exist.

### 用例 EXAMPLE

群内の一つの釦だけが軽叩できるように専有を設定する｡他の釦は真ん中の釦が軽叩されるまで反応しない｡ Set a grab so that only one button may be clicked out of a group. The other buttons are unresponsive to the mouse until the middle button is clicked.

    pack [button .b1 -text "Click me! #1" -command {destroy .b1}]
    pack [button .b2 -text "Click me! #2" -command {destroy .b2}]
    pack [button .b3 -text "Click me! #3" -command {destroy .b3}]
    grab .b2

### SEE ALSO

busy

### KEYWORDS

grab, keyboard events, pointer events, window
Copyright © 1992 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.