![[Image: huh.gif]](../images/smilies/huh.gif)
私は同じメソッド内のイベントが全て消費された後に行いたい処理がある場合にafterマクロを使っているのですが、
他にもこういう時に使っています!!というのがあれば教えてください
![[Image: blush.gif]](../images/smilies/blush.gif)
![[Image: huh.gif]](../images/smilies/huh.gif)
![[Image: blush.gif]](../images/smilies/blush.gif)


(08-02-2011, 08:32 AM)fukuta Wrote: こういった概念を前提にすると {after 0s do} というイディオムは、Event や EventTarget をとくに指定せずに処理だけをイベントキューの末尾に追加(enqueue)することといえます。概念は分かったのですが、これを使う簡単な局面・例ってありますでしょうか?
(08-10-2011, 10:38 AM)復活の帝王 Wrote: この手の「イベントを操作する」という概念は"はまった"経験しかなく、可読性が落ちる原因と自分は思っています。
私個人は他言語で通常のローカルアプリ(EXE、DLL)を作成してきて、{after 0s do}の様な概念は使用せず構築してきたので
逆に「こういうときは結果的に使わざるを得ない」という例があればうれしいのですが・・・。
{on AttachEvent at g:Graphic do
{after 0s do
{do-something {g.layout.get-bounds}}
}
}{define-class public MyDateField {inherits DateField}
{constructor public {default ...}
{construct-super {splice ...}}
}
{method public {get-parsed-value
val:String,
require-four-digit-year?:bool = false
}:(date:DateTime,
day-start-pos:int, day-end-pos:int,
month-start-pos:int, month-end-pos:int,
year-start-pos:int, year-end-pos:int)
{if {val.trim-clone}.empty? then
{after 0s do
{self.unset-value}
}
}
{return
{super.get-parsed-value
val,
require-four-digit-year? = require-four-digit-year?
}
}
}
}(08-10-2011, 09:06 PM)fukuta Wrote: 妥当な例はすぐにたくさん思いつきませんが、例えばグラフィカルオブジェクトの大きさを表示時に取得したい場合など。CurlのGUI歴があまり(=殆ど)ないので、「何を今更?」的な事を言っているかもしれませんが、この場合別途イベントは発生しないのでしょうか?
表示上のサイズはオブジェクトがグラフィカル階層にアタッチされた後、レイアウトネゴシエーションが完了するまで確定しないので、サイズの取得はそれを待ってから行う必要があります。
Quote:「DateField の入力値を Delete キーで削除できるようにしたい」(※)DateFieldの使用はないですが、こっちは意味は分かります。
といった要望があった場合に、after を使って以下のように実現することがあります。
※CurlのDateFieldはフォーカスアウト時に未入力だと値を元に戻してくれるのでDeleteで削除できない。。
)(08-11-2011, 09:09 AM)復活の帝王 Wrote: CurlのGUI歴があまり(=殆ど)ないので、「何を今更?」的な事を言っているかもしれませんが、この場合別途イベントは発生しないのでしょうか?そういったイベントは発生しないですね。
#~resizedイベント、みたいな感じのものです。
(08-11-2011, 09:09 AM)復活の帝王 Wrote: また{after 0s do} の0部分を1以上とするのも個人的には非常に違和感を感じます。
GUIのローカルアプリでは通常、タイマーコントロールが存在しますが、こういった概念がないから(いや、あるのかも分かりません)でしょうか?
(08-11-2011, 01:40 PM)fukuta Wrote:個人的にはイベントが発生しないのも、実装方法もイマイチですが他に方法がないならば仕方ないですね。(08-11-2011, 09:09 AM)復活の帝王 Wrote: CurlのGUI歴があまり(=殆ど)ないので、「何を今更?」的な事を言っているかもしれませんが、この場合別途イベントは発生しないのでしょうか?そういったイベントは発生しないですね。
#~resizedイベント、みたいな感じのものです。
Quote:今までこういった実装をしたことがないため違和感を覚えました。Quote: また{after 0s do} の0部分を1以上とするのも個人的には非常に違和感を感じます。違和感についてはよく分かりませんが、CurlにもTimerというAPIがありますよ。定期的に処理を行う場合などはこちらを使います。
GUIのローカルアプリでは通常、タイマーコントロールが存在しますが、こういった概念がないから(いや、あるのかも分かりません)でしょうか?