[FlashDevelop]の最近のブログ記事

FlashDevelop から入力ダイアログを表示して、計算式を入力するとその結果が現在のキャレット位置に挿入されるプラグインです。

対応しているバージョンは FlashDevelop3 RC1 以降となります。
下位のバージョンでも動作するかもしれないですが、動作確認を取っておりません。

FDCalculator.zip ダウンロード

上記リンクからダウンロード、解凍後、中に入っている FDCalculator.dll を
以下のフォルダにコピーします。

C:\Program Files\FlashDevelop\Plugins

FlashDevelop を再起動すると、Insert メニュー内に以下の項目が追加されます。
  • FDCalculator

FDCalculator (Ctrl + Shift + 4)
使用方法はダイアログ内に計算式を入力して Enter キーを押すか、OKボタンを押すだけです。
以下にいくつか入力例を挙げておきます。
exp は入力した計算式、
res はその結果です。

四則演算
exp : (5+6-7)*4/2
res : 8

ビット演算
exp : 1 << 16
res : 65536

AS3 に実装されている Math クラスのメソッドやプロパティを使用することも出来ます。
使用する際に Math は必要ありません。
exp : cos(0.5) + sin(0.5)
res : 1.35700810049458
exp : sqrt(pow(4, 2) + pow(6, 2))
res : 7.21110255092798
exp : floor(PI*100)/100
res : 3.14

16進数の入力も可能です。
exp : 0x7F7F7F & 0xFF
res : 127


特殊関数
独自に実装された関数もいくつか用意しています。

hex(value:uint):String
数値を16進数の文字に変換します。
exp : hex(10079487)
res : 0x99CCFF

deg(value:Number):Number
ラジアン値を角度(180度)に変換します。
exp : deg(PI*0.5)
res : 90

rad(value:Number):Number
角度(180度)をラジアン値に変換します。
exp : rad(60)
res : 1.0471975511966

color(ARGB:uint, s:Number, exp:String):uint
色をARGBに分解してそれぞれの値を計算した結果を返します。
exp に入る文字は次のいずれかになります。(+ - / * % & |)
exp : hex(color(0xFFFFFF, 0.5, "*"))
res : 0x7F7F7F
color2(ARGB1:uint, ARGB2:uint, exp:String):uint
2 つの色情報をもとに演算を行った結果を返します。
exp に入る文字は次のいずれかになります。(+ - / * % & |)
exp : hex(color2(0xFF9933, 0x404040, "|"))
res : 0xFFD973


追記 (2009.05.08)
RC2 になって一部ディレクトリ構造が変わってしまい、使えなくなっていたので修正しました。
RC2、RC1 どちらでも使えます。
一応前のバージョンのものも残しておきます。
TemporaryProject_0.1.2.zip ダウンロード

--------------------------------------------------------------

FlashDevelop + FlexSDK は非常に便利で、書き出しも早いので重宝しているのですが、 簡単なテスト用のスクリプトを書いて実行する場合でも、毎回プロジェクトを作成しなくてはならないのが煩わしいと思ってました。
なのでプロジェクトをほとんど気にせずに、簡単にテスト環境を用意するプラグインを作ってみました。

wonderfl のエディタとして利用している場合にも便利なんじゃないかと思います。


対応しているバージョンは FlashDevelop3 RC1 以降となります。

最新のバージョン
TemporaryProject_0.1.2.zip ダウンロード

過去のバージョン
TemporaryProject_0.1.1.zip ダウンロード

上記リンクからダウンロード、解凍後、中に入っている TemporaryProject.dll を
以下のフォルダにコピーします。

C:\Program Files\FlashDevelop\Plugins

FlashDevelop を再起動すると、Project メニュー内に以下の項目が追加されます。
  • Temporary Project
  • Previous Project
  • Next Project

Temporary Project (Ctrl + Shift + 3)
新たにプロジェクトを作成します。
このプロジェクトは FlashDevelop を終了すると削除されます。
削除されないようにするには Program Settings (F10) 内の
TemporaryProject > ClearTemporaryProjects を false にします。

ここで作成されるプロジェクトは、
{FlashDevelop}\Data\TemporaryProject\template
上記テンプレートから生成されるようになっています。
このテンプレートを変更することで、自由にカスタマイズできます。
MXML ベースのプロジェクトにも変更できます。

{FlashDevelop}\Data\TemporaryProject\tmp
作成した一時プロジェクトは、この中に作成されています。

Previous Project (Ctrl + Shift + ,)
Next Project (Ctrl + Shift + .)
このプラグインを使用していると簡単に新規プロジェクトを作成して試し書きができますが、
メインで使用していたプロジェクトが閉じてしまいます。
そのため、このプラグインではプロジェクトの履歴を最大20件まで記録しています。
「Previous Project」「Next Project」を使用して過去に開いていたプロジェクトへ、簡単に行き来することができます。


FlashDevelop 3 用のプラグインを作りました。
このプラグインは、FlashDevelop の編集中のドキュメントに対して JavaScript を実行して編集することができるようになります。
コマンド用のスクリプトは .jsfd ファイルとしてプラグインディレクトリ内に保存されますので、自由に追加・編集・削除が可能です。
これを使うことで、簡単なプラグインであれば、C# を使うことなく作成、編集することができるようになります。


現在はまだ制作の途中段階ですので、今後仕様が変わる可能性はあります。


ダウンロード
fdcommands_0_1_2.zip

追記
fdcommands_0_1_3.zip
prompt() と alert() が使えなかったので、実装しました。

内容
  • FDCommands.dll
  • commandList.txt

導入方法
FlashDevelop の起動ディレクトリ内に Plugins というディレクトリがあるので、そこに FDCommands.dllをコピーしてください。
例(XP の場合):
C:\Program Files\FlashDevelop\Plugins
FlashDevelop を再起動すれば「メニュー > View」に FDCommands と追加されています。選択すると上記のパネルが表示されます。
初回起動時に、FlashDevelop の Application Files に指定されているディレクトリの Data\FDCommands ディレクトリの中に Commands というディレクトリが作成されます。(以下 Commands はこれを指します。)この中にコマンドファイルが作成されます。


使い方

コマンドリスト名
パネル上部のコンボボックスです。
Commands 内に存在するディレクトリの中から1つ選択することが出来ます。
初期状態では、ディレクトリは "default" のみです。

メニューボタン
Run
パネル下部のテキストボックスに表示されているコマンドを実行します。コマンドが選択されていない状態でも、エディタ部分にコードが書き込まれていた場合は、それを実行します。
Refresh
Commands ディレクトリを再読み込みします。
Edit
選択中のコマンドを FlashDevelop で開きます。
Add
新しくコマンドファイルを作成します。作成すると FlashDevelop に表示され、編集することができます。
Delete
選択中のコマンドを削除します。実行すると jsfd ファイルも削除されます。
Add Directory
コマンドファイルを入れておくディレクトリを新しく作成します。

コマンド一覧
選択中のリスト内のファイルが一覧表示されます。
リスト内のアイテムは、クリックすると選択状態となり、ダブルクリックで選択中のコマンドが実行されます。

コマンド簡易エディタ
リストからコマンドを選択すると、コマンドのソースが表示されます。
メニューの Run ボタンは、このソースを実行します。
このエディタは、編集が可能ですが、編集した内容を保存することは出来ません。
保存する場合は、新しくコマンドファイルを作成するか、既存のコマンドを編集して保存しなければなりません。



コマンドの作成
zipファイル内に同梱されているテキストファイル内に、使用できるオブジェクトと関数を書いておきましたので、こちらを参考にしてください。
内部で JScriptCodeProvider を使用しているので、基本的な JavaScript は普通に使えるかと思います。(実際には JScript なんですが。)
また改めてドキュメントを作成する予定ですが、今はまだ仕様もはっきり決まっていないため、作っていません。



今後実装したいと思っている機能について
  • キーボードショートカットの実装
  • AS3のクラスの参照
  • JSFDソースのコードヒント


クラスの参照については、対象のクラス内で定義された import や implements を参照して、クラス内で定義されているプロパティを簡単に取得できるようにしたいのですが、 swc の場合など、どうすればいいのか正直分からなくて困ってます。
ProjectManager や Outline などのプラグインを参照して、そこから取得できればと思っているのですが、他のプラグインの参照の仕方が分からなかったり。

あと、このプラグインのソースも誰か助言くれる人とかいるのなら、GoogleCode か Spark(いいのかな?)で公開したいとも思ってますが、まだ未定です。
手探りで作ってるので、バグもたぶんあります。
もし使用される方がいらっしゃれば、バグが見つかったときはコメントなりTwitter なりで報告していただけると助かります。


また、これを使ってみんなが便利なコマンドを作ってくれたらなあ。なんて浅はかな願望もあったり、なかったり、らじばんだり。



ちょっと立て込んでいるので遅くなるかもしれないですが、またアップデートしたらご報告します。

そもそもこんなプラグインに需要があるかのかどうか。


FlashDevelop のプラグインの作り方をメモ。其の二。

■試しに一からこさえてみる。

# 準備
FD3 ディレクトリ内に CustomPlugin という空のディレクトリを作っておく。

# プロジェクトを作成する
Visual Studio を立ち上げて、ファイル > 新しいプロジェクト(Ctrl + Shift + N)を選択。
開いたテンプレートの中から「空のプロジェクト」を選択して「OK」。

ファイル > Project1.sln の保存(Ctrl + S)を選択。
  • 名前:TestPlugin
  • 場所:先ほど作った CustomPlugin ディレクトリ
  • ソリューション名:「ソリューションのディレクトリを作成」のチェックをはずしておく
で、「上書き保存」。

ソリューション エクスプローラパネル内の「ソリューション `TestPlugin`(1 プロジェクト)」と表示されているアイコンを右クリック。
追加 > 既存のプロジェクト」を選択して、
\FD3\FlashDevelop\FlashDevelop.csproj
を選択する。続けて、
\FD3\PluginCore\PluginCore.csproj
も追加しておく。

# ソリューションの設定
ソリューションのアイコンを選択した状態で、「右クリック > プロジェクトの依存関係」を選択。
「プロジェクト」に「TestPlugin」を選択。
「依存先」に「PluginCore」のみチェックを入れておく。

ソリューションパネルから、「FlashDevelop」プロジェクトを選択。
「右クリック > スタートアップ プロジェクトに設定」を選択しておく。(FlashDevelop プロジェクトが太字になる。)

「メニュー > ビルド > 構成マネージャ」を開く。
パネル下の「プロジェクトのコンテキスト」というテーブルから、「TestPlugin」の行の「プラットフォーム」箇所を選択(デフォルトではAny CPU になってると思う。)、「新規作成」を選択する。
ダイアログが開くと、以下の設定にして「OK」を押す。
  • 「新しいプラットフォーム」:x86
  • 「設定のコピー元」:Any CPU
  • 「新しいソリューション プラットフォームを作成する」のチェックをはずす。

テーブル内の TestPlugin のプラットフォームの項目が「x86」に変わるが、これを元の「Any CPU」に戻してから、閉じる。
(なぜかこれをしないと出力先が設定しても正しく反映されない。)


以降、"FlashDevelop"、"PluginCore" のプロジェクトは触らないので、ツリーは閉じた状態にしといた方が見やすい。

# TestPlugin プロジェクトの設定
ソリューションパネル内の「参照設定」を右クリック。「参照の追加」を選択。
開いたパネル内のタブから「参照」を選択。
ファイルの選択画面になるので、
\FD3\PluginCore\Bin\Debug\PluginCore.dll
を選択。

続いて、再度「参照の追加」を開く。
.NET」タブを選択。"System.Drawing", "System.Window.Forms" を追加する。(Ctrl + クリックで複数選択可)

ソリューションパネル内の「TestPlugin」プロジェクトアイコンを選択した状態で、「プロパティ」ボタンを押す。(もしくは、右クリックから「プロパティ」を選択。)
アプリケーション」タブパネルの「対象のフレームワーク」を「ソリューションパネル内の「TestPlugin」プロジェクトアイコンを選択して」に設定する。

変更すると、一度パネルが閉じるので、再度プロパティパネルを開く。

アプリケーションタブパネルの以下の設定を変更しておく。
アセンブリ名:TestPlugin
規定の名前空間:TestPlugin
出力の種類:クラスライブラリ

ビルドタブパネルの出力先のパスを以下に変更する。
..\..\FlashDevelop\Bin\Debug\Plugins\

# メインクラスの作成
ソリューションパネル内の「TestPlugin」プロジェクトアイコンを選択して、右クリック。
「追加 > クラス」を選択。
ファイル名を「PluginMain.cs」として追加。

以下のコードをソースの上部に追加。
using PluginCore;
AS3 でいう、import だと思う。(includeかな?)

クラスの宣言を以下に変更。
public class PluginMain : IPlugin
太字のところが追記した箇所。

メインクラスは "PluginCore.IPlugin" インターフェースが定義されてないといけない。

「メニュー > 表示 > クラスビュー」で、クラスビューパネルを開く。
TestPlugin のツリーを開いていくと、「IPlugin」が出てくる。
さらに下層に、「IEventHandler」というインターフェースも出てくる。
これをクリックすると定義されたメソッド、プロパティが表示される。

PluginMain クラスは、これらのインターフェースを定義しているので、AS3 同様、実装してやる必要がある。

実装が必要なものは以下。

  • void HandleEvent(object, PluginCore.NotifyEvent, PluginCore.HandlingPriority)
  • void Dispose()
  • void Initialize()
  • string Author { get; }
  • string Description { get; }
  • string Guid { get; }
  • string Help { get; }
  • string Name { get; }
  • object Settings { get; }
必要最小限実装するとこんな感じ。
PluginMain.cs


# 実行
「メニュー > デバッグ > デバッグ開始(F5)」を実行する。

FlashDevelop が開くが、実際には何も実装していないので、何も起きない。
FlashDevelop の 「Tools > Program Settings...(F10)」からSettings パネルを開く。
Plugins の中に「TestPlugin」が追加されていれば、正しくコンパイルできたことになる。


■コードメモ
追記
参照先が間違っていたので書き換えました。
PathHelper.AppDir        // C:\Program Files\FlashDevelop
PathHelper.DocDir        // C:\Program Files\FlashDevelop\Docs
PathHelper.LibraryDir    // C:\Program Files\FlashDevelop\Library
PathHelper.BaseDir       // C:\Documents and Settings\\Local Settings\Application Data\FlashDevelop
PathHelper.DataDir       // C:\Documents and Settings\\Local Settings\Application Data\FlashDevelop\Data
PathHelper.SettingDir    // C:\Documents and Settings\\Local Settings\Application Data\FlashDevelop\Settings
PathHelper.SnippetDir    // C:\Documents and Settings\\Local Settings\Application Data\FlashDevelop\Snippets
PathHelper.TemplateDir   // C:\Documents and Settings\\Local Settings\Application Data\FlashDevelop\Templates
PathHelper.UserAppDir    // C:\Documents and Settings\\Local Settings\Application Data\FlashDevelop
PathHelper.UserPluginDir // C:\Documents and Settings\\Local Settings\Application Data\FlashDevelop\Plugins

UserPluginDir の参照先は実際にはディレクトリが存在しなくて、プラグインのデータは Data ディレクトリ内に入ってるんだけども、これは仕様変更のなごりなんだろうか。
つづく

FlashDevelop のプラグインの作り方をメモ。

■参照


■導入

まだ、僕自身知識が曖昧なので、間違ってる部分もあるかと思います。ご注意ください。

FlashDevelop は Visual C# で出来ています。
上のリンク先から Visual C# 2008 Express をインストールしておきます。
また、同じく Google Code から FlashDevelop のソースコードも入手しておきます。

使うのは FlashDevelop 3 なので、"FD3" ディレクトリ以下が、使用するソースコードになります。

プラグインディレクトリ
\FlashDevelop\FD3\External\Plugins\SamplePlugin
.csproj が Visual C# のプロジェクトファイルなので、上記ディレクトリに入っている "SamplePlugin.csproj" を開く。

プロジェクトを開くと「ソリューション エクスプローラ」というパネルが表示されています。
(FlashDevelop に UI が非常に似ているのでエディタの使い方は FlashDevelop を使っていれば分かりやすいと思う。)
この中に 3 つのプロジェクトが表示されています。
  • FlashDevelop - デバッグの実行時に使用される FlashDevelop そのもの
  • PluginCore - プラグインを作る上で必須となるコアライブラリ
  • SamplePlugin - 作成中のプラグイン
基本的に "FlashDevelop" と "PluginCore" を変更することはないと思う。

まずは試しにデバッグを実行してみる。
メニューから「デバッグ > デバッグ開始(F5)」で実行。
実行すると、FlashDevelop が起動して、SamplePlugin パネルが表示される。
表示されていない場合は、「View > SamplePlugin(Ctrl + F1)」で表示される。

このサンプルはアクティブな状態のドキュメントが切り替えられたときに、パネルにファイル名を表示するだけのものです。
試しに Ctrl + N で新規ファイルを開いて、タブを切り替えると動作が分かるかと思います。

デバッグの終了は、開いた FlashDevelop を閉じるか、 Shift + F5。

SamplePlugin 構成
SamplePlugin
    +- Properties/
    |    +- AssemblyInfo.cs
    +- 参照設定/
    +- Resources/
    |    +- en_US.resX
    |    +- LocaleHelper.cs
    |
    +- PluginMain.cs
    +- PluginUI.cs
    +- Settings.cs

AssemblyInfo.cs
作成するプラグインに関する情報の定義
書き出したファイル(.dll)のプロパティ開いたときに表示される内容。

en_US.resX
メニューでの表示名、パネルのタイトル、設定での説明文が設定されたファイル。
あんまり意味が理解できてない。
多言語に対応できるようにするためにこうなってんのかな?
画像を埋め込んだりするのも、このリソースファイルってのを使うらしい。

LocaleHelper.cs
リソースファイル内の値を抜き出すためのクラスファイル
en_US.resX で設定した "名前" を GetString() に渡すと値が取得できる。

PluginMain.cs
SamplePlugin のメインクラス

PluginUI.cs
SamplePlugin パネルの UI を定義。
ツールボックスからコンポーネントをドラッグで追加とかできる。
Flex Builder と近い?(Flex Builderを使ったことがない・・・)
「表示 > コード(F7)」でソース表示。

Settings.cs
FlashDevelop の 「Tools > Program Settings...(F10)」で設定できる項目を定義する。
開くと "Plugins" のところに "SamplePlugin" が表示されている。その中の設定。

■ちょろっとソースのメモ
PluginMain.cs
//現在開いてるドキュメントのエディタへの参照
ScintillaNet.ScintillaControl sciControl = PluginBase.MainForm.CurrentDocument.SciControl;

//現在開いてるドキュメントのテキストを参照
String text = sciControl.Text;

//現在のキャレットの位置にある単語を取得
String word = sciControl.GetWordFromPosition(sciControl.SelectionStart);


FlashDevelop に適用する
メニュー下の「ソリューション構成」(FlashDevelop で Debug と Release の切り替えを行うコンボボックスみたいなとこ)を "Debug" から "Release" に変更して、ビルド > ソリューションのビルド(F6)を実行する。

SamplePlugin ディレクトリ内に obj ディレクトリが作られて、その中の Release ディレクトリに SamplePlugin.dll が作成される。

\Program Files\FlashDevelop\Plugins
FlashDevelop の "Plugins" ディレクトリ内に生成された.dll ファイルをコピーして、FlashDevelop を起動すると使えるようになります。


FlashDevelop を使って AS3 をごりごり書いてる人は、C# のソース見れば大体何をやってるのかはわかると思う。
ルールの違いが掴めれば、プラグインを作るぐらいのレベルであれば、 AS3 と大して変わらないと思う。

僕自身 C# に触れたのはこれがはじめて。


続く。