オリジナルのAskウィンドウを作る -LiveCode備忘録

askウィンドウに一つだけボタンを追加したくて色々いじり始めたが、最後に
自作のAskウィンドウを作って見たらどうだろうかとやって見た。

一つのきっかけはLiveCode9.5までのAskウィンドウがなぜかReturnや
enterのキーで落ちてしまうという現象が起きていたから。それも、OSX10.13
から。それで元々のAskウィンドウのスクリプトを調べていたら、なんとなく
作れそうな気がしたのですね。

on preOpenStack

set the itemDelimiter to comma

if item 1 of the dialogData is empty
then set the title of this stack to space
else set the title of this stack to item 1 of the dialogData--ウィンドウにタイトルを表示

put item 2 of the dialogData into field 1 --質問文を表示
put item 3 of the dialogData into field 2--デフォルトデータを表示

end preOpenStack


on openField
   select the text of the target
end openField

on enterInField
   set the dialogData to fld 2
   put empty into field 2
   close this stack
end enterInField


on returnInField
   set the dialogData to fld 2
   put empty into field 2
   close this stack
end returnInField

これが作ったMyAskスタックのカードに置いたスクリプト。
カードにはフィールドが二つとボタンが三つ置いてあります。

上が質問文を表示するフィールド。プロパティのopaqueのチェックを外して
いるので下地の色が透けて見えています。
元々のAskダイアログでは質問文が長い時には二行三行と増やしていき、その
たびにスタックの大きさを変えていくという技を使っています。ここでは、
面倒なことはせずに、二行分だけの高さのフィールドにしてお茶を濁していま
す。

on mouseUp
   set the dialogData to fld 2
   put empty into field 2
   close this stack
end mouseUp

これはOKボタンに置いたスクリプト

on mouseUp
   set the dialogData to "Cancel"
   close this stack
end mouseUp

これはキャンセルボタンに置いたスクリプト

on mouseUp pMouseButton
   get field 2
   if it is empty then exit mouseup
   set the clipboardData to it
end mouseUp

これはペーストボタンに置いたスクリプト。
これらの中で、dialogDataとclipboardDataがキモとなるところ。
dialogDataはグローバルプロパティで、Askダイアログを呼び出す側から
呼び出された側へデータを受け渡し、また、戻すことができます。
普通のAskコマンドで、Askダイアログが閉じた後、変数itで情報を受け取る
のと同じことです。ビルトインの(もともとの)Askコマンドでは、itで受け
とりましたが、ここではその大元のdialogData変数から受け取っているわ
けです。
ペーストボタンのclipboardDataはそのものズバリ、クリップボードの
データのことです。このプロパティをget,setすることで、クリップボード
のデータを扱うことができます。つまり、別のアプリからのデータを受け
とったりすることができる訳です。ここでは、別アプリの電卓でコピー
してクリップボードに置いたデータを「ペースト」ボタンで呼び出して
使おうとしている訳です。

myAskSend "摘要金額",gTeki &"の金額はいくらですか。",TekiBiKin
      get the dialogData
      if it is cancel then exit mouseUp
      if it is empty then exit mouseUp
      put it into BikouKin

これがmyAskダイアログを呼び出している側のスクリプトです。
カンマ区切りで3つのデータを送っています。これが、呼び出している側の
カードに置いた下のスクリプトへ送られて、モーダルスタック”MyAsk”が
開かれる訳です。
ユーザーがデータを入力したら、上のスクリプトに戻ってきて、二行目、
get the dialogDataで変数itに入り、そこから後はビルトインのAskコマン
ドと同じように使います。
送りつけるデータで2バイトのものは””でくくり、変数と合わせるときは&
で繋ぎます。

command myAskSend titl,capt,valu
   
   set the itemDelimiter to comma
   
   put titl&","&capt&","&valu into tData
   set  the dialogData to tData
   modal stack "MyAsk"
 
end myAskSend

最後に作ったMyAskスタックのインスペクターを開いてメインスタックを呼び出し
側のスタックに指定すれば出来上がり。
アイコンも好きなものに出来ますが、これを内容によって変えるようにするには、
もう少し工夫が必要ですね。

コメント

タイトルとURLをコピーしました