Hatena::Groupnadesiko

99円のへたれ学習帳

2008-05-18

検索時に遅れを入れて体感速度を上げる

| 18:51

エディタ部品の「変更した時は~」を使って、エディタに文字が入力されたときリアルタイムに検索したい、ということが思います。しかし、単純に以下のように書くと日本語を入力した時に、一度に入力されたように見えても文字数分イベントが発生してしまいます。

テストエディタとはエディタ
これについて
	変更した時は
		# 検索処理
		「検索しました」を表示

f:id:kyuuzyuu9yen:20080518184818p:image

検索処理が軽ければ気になりませんが、重い場合は一文字ずつ引っかかるような感じになってしまいます。

こんな時は文字が入力された後、少し待ってから検索処理を行うようにするとうまくいきます。

例えばタイマーを使って以下のようにします。

テストエディタとはエディタ
これについて
	変更した時は
		検索タイマーの停止
		検索タイマーの開始

検索タイマーとはタイマー
これについて
	間隔=0.2
	時満ちた時は
		検索タイマーの停止
		# 検索処理
		「検索しました」を表示

f:id:kyuuzyuu9yen:20080518183243p:image

エディタの内容が変更されるとタイマーがリセット(初は開始)されます。エディタの内容が変更されなくなってから0.2秒経つとタイマーの「時満ちた時は~」が実行されるので、タイマーを止めてから検索処理を行います。

タイマー隔は0.1秒でも日本語対策になりますが、検索処理が重い場合は少し大きめ(0.3秒くらい)にすると処理回数が減って体感速度が上がるかもしれません。

mr-80bmr-80b2008/05/19 23:30なーるーほーどー

StickStick2013/03/04 15:16Thanks for your thoughts. It's hleepd me a lot.

lqgbrikqlqgbrikq2013/03/09 12:01NXyZir , [url=http://yoqjhxunjqdu.com/]yoqjhxunjqdu[/url], [link=http://srnqtsfbuuer.com/]srnqtsfbuuer[/link], http://hgbhihloftnt.com/

lqgbrikqlqgbrikq2013/03/09 12:01NXyZir , [url=http://yoqjhxunjqdu.com/]yoqjhxunjqdu[/url], [link=http://srnqtsfbuuer.com/]srnqtsfbuuer[/link], http://hgbhihloftnt.com/

2008-05-17

最大幅を設定できるラベルを修正

| 19:00

最大幅を設定できるラベルで、「...」の長さより最大幅が短い場合に無限ループするという致命的なバグがあったので修正。TOPOZOさんに感謝。

# 拡張ラベル v2 2008/5/17 99yen
# 相変わらず複数行は考えていない

■拡張ラベル +グラフィック部品 +マウスイベントプロパティ +ポップアッププロパティ +背景色プロパティ +フォントプロパティ
	・種類{="ラベル"}
	・{イベント}クリックした時
	・{イベント}ダブルクリックした時
	・作る~
		オブジェクト=VCL_CREATE(自身, 名前, VCL_GUI_LABEL)
		テキスト=名前から"ラベル"を初期テキスト切り出し
	・{非公開}透明設定(V)~VCL_COMMAND(オブジェクト, "透明設定", V)
	・{非公開}透明取得~VCL_COMMAND(オブジェクト, "透明取得", 0)
	・透明←透明設定→透明取得
	・{非公開}文字位置設定(V)~VCL_COMMAND(オブジェクト, "文字位置設定", V)
	・{非公開}文字位置取得~VCL_COMMAND(オブジェクト, "文字位置取得", 0)
	・文字位置←文字位置設定→文字位置取得
	・{非公開}最大幅実体
	・{非公開}最大幅設定(V)~
		最大幅実体=INT(V)
		テキスト更新
	・{非公開}最大幅取得~_=最大幅実体
	・最大幅←最大幅設定→最大幅取得
	・{非公開}オブジェクト
	・{非公開}テキスト実体
	・{非公開}テキスト取得~_=テキスト実体
	・{非公開}テキスト設定(V)~
		テキスト実体=V
		テキスト更新
	・テキスト ←テキスト設定 →テキスト取得 デフォルト
	・{非公開}TMP
	・{非公開}テキスト更新~
		もし(最大幅実体="")ならば
			VCL_SET(オブジェクト, VCL_PROP_TEXT, テキスト実体)
		違えば
			もし(文字幅取得(テキスト実体)<最大幅実体)ならば
				VCL_SET(オブジェクト, VCL_PROP_TEXT, テキスト実体)
			#...の長さより最大幅が短い場合は""に設定
			違えば,もし(文字幅取得("...")>最大幅実体)ならば
				VCL_SET(オブジェクト, VCL_PROP_TEXT, "")
			違えば
				TMP=テキスト実体
				((文字幅取得(TMP)+文字幅取得("..."))>最大幅実体)の間
					TMPから1文字右端削除
				VCL_SET(オブジェクト, VCL_PROP_TEXT, TMP&"...")

テストラベルとは拡張ラベル
これについて
	最大幅=200
	テキスト="あいうえおかきくけこさしすせそあいうえおかきくけこさしすせそ"

増加ボタンとはボタン
そのクリックした時は~テストラベルの最大幅=(テストラベルの最大幅)+20
減少ボタンとはボタン
そのクリックした時は~テストラベルの最大幅=(テストラベルの最大幅)-20

BatbuynBatbuyn2015/08/29 20:17I'm so glad that the intenret allows free info like this!

2008-04-07

最大幅を設定できるラベル

| 09:09

http://nadesiko.g.hatena.ne.jp/mr-80b/20080330/p1

更ながら。自前で削ってみる。

■拡張ラベル +グラフィック部品 +マウスイベントプロパティ +ポップアッププロパティ +背景色プロパティ +フォントプロパティ
	・種類{="ラベル"}
	・{非公開}オブジェクト
	・{イベント}クリックした時
	・{イベント}ダブルクリックした時
	・作る~
		オブジェクト=VCL_CREATE(自身, 名前, VCL_GUI_LABEL)
		テキスト=名前から"ラベル"を初期テキスト切り出し
	・{非公開}透明設定(V)~VCL_COMMAND(オブジェクト, "透明設定", V)
	・{非公開}透明取得~VCL_COMMAND(オブジェクト, "透明取得", 0)
	・透明←透明設定→透明取得
	・{非公開}文字位置設定(V)~VCL_COMMAND(オブジェクト, "文字位置設定", V)
	・{非公開}文字位置取得~VCL_COMMAND(オブジェクト, "文字位置取得", 0)
	・文字位置←文字位置設定→文字位置取得
	・{非公開}最大幅実体
	・{非公開}最大幅設定(V)~
		最大幅実体=INT(V)
		テキスト更新
	・{非公開}最大幅取得~_=最大幅実体
	・最大幅←最大幅設定→最大幅取得
	・{非公開}テキスト実体
	・{非公開}テキスト取得~_=テキスト実体
	・{非公開}テキスト設定(V)~
		テキスト実体=V
		テキスト更新
	・テキスト ←テキスト設定 →テキスト取得 デフォルト
	・{非公開}TMP
	・{非公開}テキスト更新~
		もし(最大幅実体="")ならば
			VCL_SET(オブジェクト, VCL_PROP_TEXT, テキスト実体)
		違えば
			もし(文字幅取得(テキスト実体)<最大幅実体)ならば
				VCL_SET(オブジェクト, VCL_PROP_TEXT, テキスト実体)
			違えば
				TMP=テキスト実体
				((文字幅取得(TMP)+文字幅取得("..."))>最大幅実体)の間
					TMPから1文字右端削除
				VCL_SET(オブジェクト, VCL_PROP_TEXT, TMP&"...")

テストラベルとは拡張ラベル
これについて
	最大幅=200
	テキスト="あいうえおかきくけこさしすせそあいうえおかきくけこさしすせそ"

増加ボタンとはボタン
そのクリックした時は~テストラベルの最大幅=(テストラベルの最大幅)+20
減少ボタンとはボタン
そのクリックした時は~テストラベルの最大幅=(テストラベルの最大幅)-20

2008-03-06

メモ部品に「折返」を追加

| 21:38

なでしこ学習帳に参加してみました。よろしくお願いします。


OSCの時に自分がメモ部品に右端で折り返すプロパティが欲しいと言ったのを思い出したので、言いだしっぺの法則により自分で作ってみました(^ ^;

■拡張メモ +メモ
  ・折返 ←折返設定 →折返取得
  ・{非公開}折返設定(V)~
    もし(V=1)ならば
      VCL_COMMAND(オブジェクト,"スクロールバー設定","縦")
    違えば
      VCL_COMMAND(オブジェクト,"スクロールバー設定","縦横")
  ・{非公開}折返取得~
    もし(VCL_COMMAND(オブジェクト,"スクロールバー取得",0)="縦")ならば
      それ=1
    違えば
      それ=0

テストメモとは拡張メモ

変更ボタンとはボタン
そのクリックした時は
  テストメモの折返 = NOT(テストメモの折返)

単純に「スクロールバーは"縦"」ってやればいいだけなんですが、たまに忘れるのでこうするといいかなあという妄想でした。