Swanman's Horizon

性欲をもてあましつつなんらかの話をするよ。

埋め込みデザイナにフォームユニットの複数表示機能を求めるのは間違っているだろうか。

前回までの全力わはー

コントロールのロックを自動でオンにしたり無名メソッドをショートカットで一発入力させたり、最近何かとIDEを弄くり回すことに楽しみを覚えたLynaは、埋め込みデザイナへの挑戦権を獲得すべく、例の紐を手に全米川下り選手権への参加を決意するのであった。

その埋め込みデザイナの問題点

埋め込みデザイナって、フローティングデザイナの時にできていたフォームデザイナとそれに対応するフォームユニットのコードエディタを同時に表示するということができないんですよね。もちろんフォームデザイナだけでなく、フォームに対応するユニットはコードエディタ自体を複数開くこともできません*1
じゃあ最初からフローティングデザイナにしておけばいいのかと言えばそうでもなく、FireMonkeyはフローティングデザイナに対応していないので、FireMonkeyアプリの開発では埋め込みデザイナを使うことは必須だったりします。

そこでこのプラグイン

New Edit Window for Embedded Designer plugin ver.0.0.1をダウンロード

このプラグインを導入することにより、コードエディタ上のコンテキストメニューで「別の編集ウィンドウを開く」を選択した際に、フォームユニットでも複数のウィンドウを開くことが可能になります。
なお、メインメニューの「表示→別の編集ウィンドウを開く」は諸事情*2により対応してませんが、ほとんどの人はあっちのメニューは使わないだろう(俺調べ)ということで。

問題点(というか仕様)

同じファイルのフォームデザイナを複数開くと色々と問題が起きるため、メインウィンドウ以外ではフォームデザイナへの切り替えを無効化(デザイナタブを非表示)しています。その関係上、メインウィンドウ以外でフォームを表示できないです。
また、複数のウィンドウを開いた上でメインウィンドウ側のユニットを閉じてしまうと、当然ながらフォームを表示できるウィンドウが無くなりますが、これは別ウィンドウで開いているフォームユニットをメインウィンドウにD&Dすればデザイナタブが復活します。

動作環境

今回はメモリにパッチを当てるような環境依存のありそうな手法は取っておらず、ほぼOpen Tools APIとRTTIで何とかしてるので、開発&検証環境であるXE4以外でも動くと思います。あと動くかどうかは別として、拡張RTTIを使う関係で最低動作バージョンは2010になります。
例によって例のごとく何か問題や改善点などあれば[twitter:@lynatan]までお願いします。

*1:デザイナが必要なフォームやデータモジュールといったユニット以外は複数表示できる

*2:TActionを使ってるくせにメインメニューとポップアップでは実装が別という残念仕様だったので