1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Xojo教えてもらいました

Last updated at Posted at 2018-05-29

過日行われた DTPerのスクリプトもくもく会 #7 に参加して、 ものかのさんにXojoについてあれこれご教示いただいたので忘れないようにメモ。

Properties

プロジェクトを通して値を保持したい場合に設定する。

プロパティ

Methods

コードの共有をするためにメソッド化。

メソッド

利用するにはメソッド名を呼ぶだけ。

Module

メソッドをそれぞれのプロジェクトで利用するだけではなく、各ファイルから参照できるようメソッドのモジュール化。

モジュール1 モジュール2

利用するにはプロジェクトに追加する際にコマンド+オプションキーを押しながらドラッグ&ドロップする。

Module 1が二つあるが、外部参照をしている上の方はアイコンにエイリアスの矢印がついているのとモジュール名がイタリックになっているので区別できる。

モジュール3

  
外部参照したモジュールでメソッド名が競合した場合ローカルが優先される。
スコープをProtectedに変更する事で外部メソッドの値を保護できる。
外部メソッドを利用するにはモジュール名.メソッド名と書く。

モジュール4

Menu

上部ボタンよりメニューを追加し、IDNameを割り当てたい機能のメソッド名にする。
ショートカットを設定することもできる。

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

ファイルをテキストフィールドにドラッグ&ドロップして登録できるようにする。

dropObj

オブジェクトにDropObjectOpenのイベントハンドラを追加する。

DropObject


pDropArea = obj.FolderItem

'拡張子がtxtでなければ文字列をクリアする。
if pDropArea.Name.RightB(4) = ".txt" then
  me.Text = pDropArea.NativePath
  
else
  me.Text = ""
  pDropArea = Nil
  
end if


Open


me.AcceptFileDrop("txt")

Enabled

言われてみれば確かにこっちの方がいい!と、思ったのがボタンのEnabledを使う方法。
見ていただいたプロジェクトは、いくつかのファイルやフォルダを選択後に実行ボタンを押して処理を実行させるもの。
選択されていない場合はエラーメッセージを表示させていたが、そもそも選択されてなかったら実行ボタンのEnabledFalseにすればボタンが押せない。

メソッドIsButtonEnabled()
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

各フィールドで上記メソッドを実行

IsButtonEnabled()


' ボタンのEnabledを設定する
PushButton1.Enabled = IsCopyButtonEnabled()

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?