FC2ブログ














スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | TB(-) | CM(-)

ファイルメーカー TIPS 〜BSバックスペースキーの作成〜5回目

いや〜どうも

スクリーンショット 2013-04-13 13.32.36

今日はどうってことないね。
まずは変数を設定$Leftからみていきましょう。下図の例を見ながら行きます。
スクリーンショット 2013-04-14 9.41.49


計算内容はLeft($str;$p)ですのでそれぞれ当てはめてみるとLeft("1234567";4)になります。書くまでもないですがLeftは文字関数で「左の先頭から指定数だけ数字を拾ってこい」になりますのでこの例だと戻り値は1234になります。

つづいて変数設定$Midです。計算内容はMiddle($str;$pos+$len;$length)です。これにも値を代入するとMiddle("1234567";6+0;Length(1234567))でMiddle("1234567";6+0;7)になります。Middleも文字関数で左から○番目から▲個データを拾ってこいになります。このケースだと1234567の左から6番目つまり6の位置から右方向に7個データを拾ってこいになります。6からは7までの一個しかデータはないのでここでは"67"の二個ひろってきます。

ここまででカーソルの左側$Left="1234"と右側の$Mid="67"を取得することが出来ました。

あとは$Leftと$Midを連結させたあとカーソルをどこに持って行くかになります。
そのどこにを指定するのがスクリプト文「選択範囲を設定」です。

「選択範囲を設定」のヘルプにこんなことが書いてあります。
開始位置が有効で、終了位置が範囲外の場合は、開始位置からフィールドの終わりまでの値すべてが選択されます。終了位置のみが有効な場合は、カーソルが終了位置まで移動し、何も選択されません。開始位置と終了位置の両方が無効な場合は、カーソルがフィールド内容の終わりまで移動します。

お〜、なるほど。こんなスクリプト文があったのだなぁ、へぇ〜

ようやくバックスペースキースクリプトについて書き終えました。そもそもはLet関数の中に書かれていたわけです。ここでの肝は$pですよね。書いてある文を解いていくのは出来ますが「こうしたい」と思ったときにパパッとスクリプト文が頭の中に思い浮かぶかというと凡人のおいらには難しいね。まあ、でも勉強になりやした。

スポンサーサイト
[ 2013/04/17 06:20 ] TIPS | TB(0) | CM(0)

ファイルメーカー TIPS 〜BSバックスペースキーの作成〜4回目

いや〜どうも

今日もバックスペースキースクリプトの内容についてです。
そもそも、iPadでテンキーを配置するときにバックスペースキーをどうやって作ったらよいかわからん!ということでググったところ良いスクリプトがありました。これを貼り付ければいいのだが自分なりに内容を解釈したいということからこのシリーズが始まったわけです。

ではいってみましょう。

スクリーンショット 2013-04-13 13.32.36

前回は各取得関数についてでした。今回は"変数を設定[$p;値:$pos-1-($len=0)]"についてです。
まず$pは何かですが、バックスペースキーによって値を消去した後にカーソルをどの位置に持って行くかを指定するための変数のようです。で、$pの中身"計算式$pos-1-($len=0)"を下図の例を使って検証してみます。

▼図1.例
スクリーンショット 2013-04-14 9.41.49


計算式$pos-1-($len=0)にあてはめると$posは6で$lenは0ですから6-1-(0=0)=5となるはずです。ところが図中の結果をみてください。戻り値は4となっています。「うーん」 試しにカーソルを移動させて4と5の間に持って行きます。この時の$pos値は5ですから5-1-(0=0)=4となるはずですが結果は3になります。どうやら計算式内の($len=0)が解釈できていないようです。
今度は123456を複数指定してみましょう。下図のように2345を選択します。

スクリーンショット 2013-04-14 9.50.24

$pos値は2$len=4ですから5-1-(4=0)=4かな〜 と思ったら結果は1です。
やっぱり($len=0)が解釈できていない。でいろいろやりました。データビューワーでみてみると($len=0)結果は0か1です。ということは真か偽かを問うているだけなので$lenが0の時は真となり1を返しそれ以外の時は偽になり0を返すと言うことです。じゃあ$lenがゼロの時ってどういう時かというとtextの値1234567が複数選択されていない場合となります。したがって($len=0)はtext内の値が複数選択されているのかいないのかを判断しているということになります。

やっぱ出来る人はちがう。
おいらなら($len=0)の部分をif($len=0;1;0)と書きそうなんだが($len=0)でいいわけね。いや〜、勉強になりました。玄人さんはこういう書き方しますよね。例えば繰り返し関数のExtendをつかわずに[1]な書き方したり。

長くなったのでここまで。
[ 2013/04/16 00:02 ] TIPS | TB(0) | CM(0)

ファイルメーカー TIPS 〜BSバックスペースキーの作成〜3回目

いや〜どうも。
みなさんどうぞよろしくねっと。

最近、明らかに「これからファイルメーカーをやってみようかな」という人向けの記事ではなくなってきちゃったな。内容がマニアックすぎますか?

さて、今日もバックスペースキースクリプトの中身を見てみます。
前回はLet関数で書かれた部分をデバッグで追いやすいようにLet関数部分を分解しました。

▼分解したスクリプト
スクリーンショット 2013-04-13 13.32.36

それでは内容を見ていきます。
冒頭で必要な値を変数設定しています。
$posでGet(アクティブ選択位置)、$lenでGet(アクティブ選択サイズ)、$strでGet(アクティブフィールド内容)ということですがその内容をもう少し詳しく見ていきます。

まず、Get(アクティブ選択位置)ですがヘルプを参照すると
Get(アクティブ選択位置):選択されているテキストの開始文字を表す数値を返します。
とあります。すなわちこの取得関数でカーソル位置がどこにあるのか認識するわけです。

ちなみに取得関数の戻り値(処理した結果)がわかるよう下図のようにフィールドを作ってみました。

下図で言うとtextフィールドのデータは"1234567"でカーソルの位置は1の前つまり先頭にあります。
この時の戻り値は"1"であることが分かりますね。つまりこの位置が1となるわけですからもし2と3の間にカーソルがある場合はどうでしょう?

「えーっと、先頭が1だからにー、さん」「はい、わかりました3が戻り値です」正解です。
▼図1.戻り値が分かるフィールド配置
スクリーンショット 2013-04-14 8.20.33


では、1234567のうち2345のように複数を選択した場合の戻り値はどうなるでしょうか?試してみました。下図を見て下さい。
▼図2.
スクリーンショット 2013-04-14 8.14.03

図にあるよう戻り値は2となるようです。
複数選択されている場合は選択されている先頭の位置になるようですね。


つづいて、Get(アクティブ選択サイズ)にいきますよ。

Get(アクティブ選択サイズ):選択されている文字数を表す数値を返します。
とあります。さらに追加として、「何も選択されていない場合は、「0」を返します」と書かれています。

では、まず図2を見て下さい。text"1234567"のうち"2345"が選択されています。
ここで問題です。Get(アクティブ選択サイズ)の戻り値はいくつですか?
「そんなん簡単ですよ、2345と四つの数字が選ばれているんだから4に決まってるじゃないですか」
はい、正解です。

では、今度は図1を見て下さい。この時のGet(アクティブ選択サイズ)の戻り値はどうですか?
「何も選択されていないので0ですよ、ゼロ」 「ついでにおいらの財布の中身もゼロですけど」
はい、大正解です。ついでの問題ですが、つたない日本語でストリートマジックをやっているマジシャンの名前は?
「うーん」「あっわかった」「セロです」 こっちの問題の方が難しいですよ〜。
そうですか、いい問題だと思ったんですけどね。それはさておき次へ進みます。

Get(アクティブフィールド内容):フォーカスの対象となるフィールドの内容を返します。
これはわかりやすいですよね。そのままフィールドの内容を返すわけですから図1でも2でもそのまま"1234567
"を返すわけです。

長くなったのでここまで。

[ 2013/04/15 00:02 ] TIPS | TB(0) | CM(0)

ファイルメーカー TIPS 〜BSバックスペースキーの作成〜2回目

いや〜どうも。

プロの作品を見てメラメラとやる気がわいてきました。ボウォー。

さて、前回の続きです。
スクリプトの検証に入ります。



フィールド設定 [
Let ( [ pos=Get ( アクティブ選択位置 ) ;
len=Get ( アクティブ選択サイズ ) ;
str=Get ( アクティブフィールド内容 )] ;

Left
( str ; Let($p = pos - 1 - ( len = 0 ) ; $p ) )
&
Middle ( str ; pos + len ; Length ( str ) ) )
]  

選択範囲を設定 [終了位置: $p]  



フィールド設定で計算値を放り込む様ですが、その計算値の中身を大まかにとらえると
カーソルのある位置から左の部分と右部分のに分け→必要な部分を抽出し→左と右を連結させ→カーソルを特定の場所に移動させる
という考えのようですね。

このスクリプトではじめて見たのが、
取得関数のGet ( アクティブ選択位置 )、Get ( アクティブ選択サイズ ) 、Get ( アクティブフィールド内容 )とスクリプトの「選択範囲を設定」です。
どんな奴らなんでしょうか?楽しみですね〜。

では、早速いってみましょう。
まず、フィールド設定の中身ですがLet関数ですねぇ。ここで変数を設定しています。後半のLeftからMiddle関数までがLet関数の計算式ですね。

スクリプトデバッガをつかって動きを見てみましたが、Let関数で書いてあるのでデバッガでは挙動をとらえることが難しいですね〜。
ということでLet関数を分解してみました。分解内容は以下の通りです。

スクリーンショット 2013-04-13 13.32.36

こうするとデバッガで変数の動きが追えるので内容が理解しやすいっす。

もう疲れたので今日はここまでっす。ファンナイトおもしろかったっす。

ところで、みなさんは山形に行きますか?
[ 2013/04/14 00:01 ] TIPS | TB(0) | CM(0)

ファイルメーカー TIPS 〜BSバックスペースキーの作成〜

いや〜どうも。

今日は晴れて気持ちがいいねぇ。
さて、今日はバックスペースキーの作成です。
(おいおい、前記事でカレンダーに予定とかって言ってなかったか)

最近やっぱファイルメーカーGoの勢いがすごいですよね。
昨年の椿山荘でもそうですしWebセミナーなんかもGoの話題が多いことからもその勢いが分かります。

その背景にはiPadの存在があるわけですがiPadでの使用を考えた場合、圧倒的に違うのは操作法だと思います。
iPadでの操作はタッチが基本となります。
となると当然作り手側はタッチを意識したレイアウトを考えるべきです。

自分でも何本か自作ファイルをGoで動かしてみましたがPCとは違い、入力操作が煩わしく感じたため新たにiPad用のレイアウトを作り、できるだけボタンをタッチすることで入力が完了する様にしました。


今朝
、目覚めとともにふと思った(ほんとに突然)のですが
「テンキーもタッチできるようレイアウト上に配置した方がいいよなぁ」と思い立ち
久しぶりの休みということもあって朝からしこしこやり始めました。

で、今日はバックスペースキーの作成です。

スクリーンショット 2013-04-13 12.52.52


正直、サクッと出来ると思ったんですよ。
たしかに数字入力まではなんの問題もなく。で入力した数字を消そうと思ったときです。
「ん?」「どうすんの」
いろいろ試してみましたよ、うまくいきませーん(泣)

こういうときはグーグルさんに訊いてみるのが一番です。
ありますね〜、同じように悩んでる人も多いようです。

で、見つけたのが以下のスクリプトです。(すでに掲示板で公開されているのでここにも載せちゃいます)



フィールド設定 [
Let ( [ pos=Get ( アクティブ選択位置 ) ;
len=Get ( アクティブ選択サイズ ) ;
str=Get ( アクティブフィールド内容 )] ;

Left
( str ; Let($p = pos - 1 - ( len = 0 ) ; $p ) )
&
Middle ( str ; pos + len ; Length ( str ) ) )
]  

選択範囲を設定 [終了位置: $p]  



これをボタンに貼り付けて完成です。とってもありがたいですね。
ありがたいですが、自分のスキルアップのためにも次回このスクリプト内容を検証していきます。
(もっといい方法あるよ、なんて方は教えて下さ〜い!)

話は変わるが、プロの作品がいろんなサイトで公開されているのでダウンロードして参考にさせてもらったりしてるんですよ。で、圧倒的にプロがすごいなーって思うのはスクリプトはもちろんだけどレイアウトのデザイン性。この辺はもうどうしようもないくらいに差が出ますね。正直悔しくなっちゃいます。悔しいのでレイアウト真似て一本作りたいと思っています。
[ 2013/04/13 12:54 ] TIPS | TB(0) | CM(0)

ひとりごと

いや〜どうも。

この歳になって新たに覚えること沢山です。
でもまた新しいことにチャレンジできるなんて!前向きで行こう。

さて、前回のDayOFweekでカレンダーできそうですね。
次回はカレンダーに予定を入れる、みたいなことをやっていきたいと思っています。
あとモーダル化のスクリプトも一応ね。←ま〜どうでもいい内容ですけどね。
どちらが先になるかわかりませんが。


今週はファンナイト行ってくるよー。ミニTIPS特集、役立ちそう。
Virtual listとか楽しみ〜。
また記事にしたいと思っています。

じゃーねー
[ 2013/04/11 22:20 ] ひとりごと | TB(0) | CM(2)

日付関数 DayOfWeek(日付) 4回目

いや〜どうも。

はじまっちゃいましたね。新年度。
どうですか、わくわくしてます?

さて、今日は前記事「日付関数 DayOfWeek(日付) 3回目」で以下のように問題を投げかけて終わっていましたのでその続きです。

Date(○;0;▲))で求めた末日からDayOfWeek(Date(○;0;▲))で求めた数値を引くとか。

例えば、
末日29日(木)、DayOfWeekで求めた引数→5  29-5
末日30日(火)、DayOfWeekで求めた引数→3  30-3
末日31日(日)、DayOfWeekで求めた引数→1  31-1

なんだか求めた答えに法則性があるような気がするんだよね。
29-5、30-3、31-1で求められた日付がそれぞれ・・・。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

なにか法則が見つかりましたでしょうか?
29-5、30-3、31-1で求めた日付はそれぞれ24、27、30日です。

ふんふん、それで?

では、求めた日付24、27、30日は何曜日でしょう。

ああ!

なにか法則が見つかりましたか。
そこで求めた曜日って常に前月最終週の、ってこと。

これをつかうと暦。
利用できそうですね。

ではでは。
[ 2013/04/06 09:34 ] TIPS | TB(0) | CM(0)

ダイアログウインドウをつかう場面 2回目

いや〜どうも。

さて、前回の続きです。入力漏れしてほしくないフィールドにどう入力させるか、って話でしたね。
標準機能の空欄不可では制御できないということでモーダルウインドウを使ったスクリプトで制御しましょう。

少しレイアウトを変えて"患者情報入力"のようなボタンを配置しただけのものを作ります。
例えば下図のようにボタンが一つだけのレイアウトとか

スクリーンショット 2013-03-31 14.41.53

このボタンを押すと

スクリーンショット 2013-03-31 14.44.25

新規ウインドウが開きます。このウインドウをオプション設定でモーダル制御しておきます。

注目して欲しいのは左上にあるウインドウを閉じるボタン(通常赤丸で中に−表示)がグレーになっているところ。モーダル制御ではウインドウの閉じるボタンのon/offまで設定できます。
スクリーンショット 2013-03-31 14.47.39

こうなるとこのウインドウ外の操作はできませんし、モーダル制御されたウインドウも閉じることが出来ません。
なので、スクリプト中に、ある条件が満たされたらウインドウを閉じるという命令文を作る必要があります。
その条件がここではIDが空欄じゃないときということになります。

決定ボタンを押してもID入力がされていなければ「IDを入力して!」というダイアログが永遠表示されウインドウを閉じることもファイルメーカー自体を終了することも出来なくなります。したがってIDを入力するしかなくなりますので入力漏れがなくなるということになります。

このように制作者側の意図しない行動を回避しなければならないときにモーダル制御されたウインドウが必要になるんじゃないでしょうか。

今日はここまで。
次回は一応スクリプトの中身見てみますかね。
[ 2013/04/02 00:03 ] ひとりごと | TB(0) | CM(0)







上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。