HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0531
hsp2年生トグルボタンの表示文字変更7解決


hsp2年生

リンク

2007/5/31(Thu) 12:53:02|NO.8651

Let'sHSPで紹介されているトグルボタン↓ですがstartボタンを押したらstopに変わるように
したいのですが何か良い方法はありますか?ちなみに変数startはloopの中でチェックします。


#uselib "user32" #func SetWindowLong "SetWindowLongA" int, int, int chkbox "start", start SetWindowLong objinfo (stat, 2), -16, $50000003 | $1000



この記事に返信する


りさ

リンク

2007/5/31(Thu) 14:14:47|NO.8652

こんにちわ、りさです。

チェックボタンが押されたのを、

1、start変数で調べるか
2、ボタンが押されたのを取得するか

のどちらかのタイミングで文字を変えるといいと思います。


#define WM_SETTEXT 0x0000000C #define WM_COMMAND 0x00000111 #uselib "user32" #func SetWindowLong "SetWindowLongA" int, int, int oncmd gosub *ON_WM_COMMAND, WM_COMMAND cbCap = "stop", "start" chkbox cbCap(1), start hCheck = objinfo (stat, 2) SetWindowLong hCheck, -16, $50000003 | $1000 stop *ON_WM_COMMAND if (lParam == hCheck) { sendmsg hCheck, WM_SETTEXT, 0, cbCap(start) } return

これは、2の方法ですが、
>loopの中でチェックします。
ループ毎に判定するのも、やることはあまり変わらないと思います。

#もっといい方法があるかも知れません…。



Kpan

リンク

2007/5/31(Thu) 21:16:48|NO.8655

button命令のジャンプ処理を利用してみる方法。


#uselib "user32" #func SetWindowLong "SetWindowLongA" int, int, int button gosub "", *jump SetWindowLong objinfo (stat, 2), -16, $50000003 | $1000 stop *jump if check { check = 0 } else { check = 1 } title ""+check return



hsp2年生

リンク

2007/6/1(Fri) 12:21:45|NO.8668

りささん、Kpanさん いつもお世話になっています。

ある処理をしながらFlagのon/offをチェックするだけなのでchkboxで良いのですが見栄えが
buttonの方が良いのでトグルボタンを使おうと思ったのです。button命令を使うとobjprmで
表示文字は変更できるのですがchkboxの表示文字は変更できませんよね。

そこでAPIで何とかなるのではないかと思い、
SetWindowLong objinfo (stat, 2), -21(GWL_USERDATA), dwNewLong で
GWL_USERDATAとあったものだからdwNewLongの値を文字列"stop"の32bit値を指定すれば・・・
と考えたのですがうまくいきませんでした。考え方が的外れでしょうか?
ここはsendmsg objinfo (stat, 2), $c,0,"stop"とやれば良かったのですね。
ところでsendmsgのhelpではp2の記述がありませんね。



りさ

リンク

2007/6/1(Fri) 13:34:54|NO.8671

>chkboxの表示文字は変更できませんよね

ボタンを使ってトグルボタンにするというアプローチもいいかも知れません。

#uselib "user32" #func SetWindowLong "SetWindowLongA" sptr,sptr,sptr bCaption = "start", "stop" button gosub bCaption(0), *push iButton = stat SetWindowLong objinfo(iButton, 2), 0xFFFFFFF0, 0x50001003 stop *push start ^= 1 objprm iButton, bCaption(start) return

>考え方が的外れでしょうか?
詳しくは分からないのですが、SetWindowLongはウィンドウ(オブジェクト)の
属性を設定する関数ではないのでしょうか?



HSP2年生

リンク

2007/6/1(Fri) 21:39:32|NO.8698

>start ^= 1
スマートな書き方ですね、今まででしたらif start=1:start=0:else:start=1 と書くところで
したがこのような書き方があるなんて勉強になりました。
またobjprm iButton, bCaption(start)の配列を使う書き方も勉強になりました。
WINAPIを勉強する前に基本を習得しないといけないですね。

いやーほんと勉強になります。ありがとうございました。



GENKI

リンク

2007/6/1(Fri) 22:46:21|NO.8699

> >start ^= 1
> スマートな書き方ですね、今まででしたらif start=1:start=0:else:start=1 と書くところで

ほかにもいろいろやり方ありますよ。
http://hspwiki.tm.land.to/?%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0%2F%A5%D5%A5%E9%A5%B0#ta60a589



HSP2年生

リンク

2007/6/2(Sat) 21:58:39|NO.8734

なぁーるほど!色々あるわけですね。
プロのプログラマーに今時のパソコンはメモリーいくらでもあるのだから少々構文が長くなっても
いいんじゃないのと聞いた時これを放棄しちゃプログラマーのプライドないねと言われてしまいました。



ONION software Copyright 1997-2023(c) All rights reserved.