過日行われた DTPerのスクリプトもくもく会 #7 に参加して、 ものかのさんにXojoについてあれこれご教示いただいたので忘れないようにメモ。
Properties
プロジェクトを通して値を保持したい場合に設定する。
Methods
コードの共有をするためにメソッド化。
利用するにはメソッド名を呼ぶだけ。
Module
メソッドをそれぞれのプロジェクトで利用するだけではなく、各ファイルから参照できるようメソッドのモジュール化。
利用するにはプロジェクトに追加する際にコマンド+オプションキーを押しながらドラッグ&ドロップする。
Module 1が二つあるが、外部参照をしている上の方はアイコンにエイリアスの矢印がついているのとモジュール名がイタリックになっているので区別できる。
外部参照したモジュールでメソッド名が競合した場合ローカルが優先される。
スコープをProtectedに変更する事で外部メソッドの値を保護できる。
外部メソッドを利用するにはモジュール名.メソッド名と書く。
Menu
上部ボタンよりメニューを追加し、IDのNameを割り当てたい機能のメソッド名にする。
ショートカットを設定することもできる。
Preference
~/Library/Preferencesにplistで保存する方法もあるが、今回は**~/Library/Application Support**に保存する方法を教えていただいた。
下記例では、Application Supportフォルダにtmpフォルダがなければ作成する。
実際の保存まではまだ書いていないがjson形式で書き出すつもり。
dim useAppSupFolder as FolderItem = SpecialFolder.UserLibrary.Child("application support")
dim f as FolderItem = useAppSupFolder.child("tmp")
if f <> nil and f.Exists then
'設定値保存
else
f.CreateAsFolder
end
if f is nil or not f.Exists then
MsgBox("作れませんでした")
Return
end
DropObject
ファイルをテキストフィールドにドラッグ&ドロップして登録できるようにする。
オブジェクトにDropObjectとOpenのイベントハンドラを追加する。
pDropArea = obj.FolderItem
'拡張子がtxtでなければ文字列をクリアする。
if pDropArea.Name.RightB(4) = ".txt" then
me.Text = pDropArea.NativePath
else
me.Text = ""
pDropArea = Nil
end if
me.AcceptFileDrop("txt")
Enabled
言われてみれば確かにこっちの方がいい!と、思ったのがボタンのEnabledを使う方法。
見ていただいたプロジェクトは、いくつかのファイルやフォルダを選択後に実行ボタンを押して処理を実行させるもの。
選択されていない場合はエラーメッセージを表示させていたが、そもそも選択されてなかったら実行ボタンのEnabledをFalseにすればボタンが押せない。
メソッドIsButtonEnabled()
'// fieldListFileの判定
if fieldListFile.Text.LenB=0 then
' 空ならFalse
Return False
else
' fieldListFileのパスに実際にアイテムがなければFalse
dim ListFile as FolderItem = New FolderItem(fieldListFile.Text, FolderItem.PathTypeNative)
if ListFile is nil or not ListFile.Exists then Return false
end if
'フィールド分繰り返す
'// 上記条件をクリアしたことになるので、Trueを返す
Return True
各フィールドで上記メソッドを実行
' ボタンのEnabledを設定する
PushButton1.Enabled = IsCopyButtonEnabled()