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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0826
京浜東北・根岸線HSPのボタンは縁に青い線(?)はでないの?6解決


京浜東北・根岸線

リンク

2019/8/26(Mon) 11:44:44|NO.88204

HSPで作ったボタンって、押してもボタンの縁に青い線(?)は出ないんですかね?
別にどーでもいいことなんですけど、ちょっと気になります。
説明が下手ですみません。
https://uploader.xzy.pw/upload/20190826114117_3165655031.gif
↑普通のボタンとHSPで作ったボタン



この記事に返信する


とあるプログラマ

リンク

2019/8/26(Mon) 13:05:28|NO.88205

ウィンドウスタイル変更すれば一応できますよ。

#include "user32.as" #define WS_VISIBLE $10000000 #define WS_CHILD $40000000 #define GWL_STYLE $FFFFFFF0 #define BS_DEFPUSHBUTTON $00000000 #define BS_PUSHBUTTON $00000001 screen 0 button gosub "ボタン1",*Btn1 hButton.0=objinfo_hwnd(stat) button gosub "ボタン2",*Btn2 hButton.1=objinfo_hwnd(stat) stop *Btn1 SetWindowLong hButton.0,GWL_STYLE,WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON SetWindowLong hButton.1,GWL_STYLE,WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON // コントロールのスタイルを変更した場合は再描画させる // でも別にしなくても大きな問題はないのでお好み // (違いは下2行と *Btn2ラベルの同じ2行をコメント化して見てみてください) InvalidateRect hButton.0,0,1 InvalidateRect hButton.1,0,1 return 0 *Btn2 SetWindowLong hButton.0,GWL_STYLE,WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON SetWindowLong hButton.1,GWL_STYLE,WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON InvalidateRect hButton.0,0,1 InvalidateRect hButton.1,0,1 return 0



ソラ

リンク

2019/8/26(Mon) 13:36:11|NO.88206

横から悪いけど・・・そもそもこんな効果あったの?
初めて見た気がする。



とあるプログラマ

リンク

2019/8/26(Mon) 14:00:46|NO.88207

>>ソラさん
意外とありますよ。一番身近な例だと2個以上ボタンがあるダイアログウィンドウ(dialog "",2 など)のデフォルトボタンですね。



ソラ

リンク

2019/8/26(Mon) 14:55:39|NO.88208

>>とあるプログラマさん
今確認しました。ホントですね、まったく気づきませんでした。



京浜東北・根岸線

リンク

2019/8/27(Tue) 19:54:03|NO.88221

ありがとうございます。
普通のボタンとちょっと動作が違うのですが、これで良しとします。



沢渡

リンク

2019/8/28(Wed) 00:32:51|NO.88226

とあるプログラマさんのコードをちょっと弄ってみました。
buttonイベントではなく、WM_COMMANDのウィンドウメッセージがあって、
かつBN_SETFOCUS通知があった時に強調部分を変更するようにしています。
これでダイアログのボタンの動作にもう少し近付いたと思います。

#include "user32.as" #const WS_VISIBLE $10000000 #const WS_CHILD $40000000 #const GWL_STYLE $FFFFFFF0 #const BS_DEFPUSHBUTTON $00000000 #const BS_PUSHBUTTON $00000001 #const BS_NOTIFY $00004000 #const BN_SETFOCUS $6 #const WM_COMMAND $0111 #const but_common WS_VISIBLE|WS_CHILD|BS_NOTIFY //BN_SETFOCUSを受け取るにはBS_NOTIFYが必要 screen 0 dim hbutton,3 button gosub "ボタン1",*dummy hButton.0=objinfo_hwnd(stat) button gosub "ボタン2",*dummy hButton.1=objinfo_hwnd(stat) button gosub "ボタン3",*dummy hButton.2=objinfo_hwnd(stat) repeat 3 SetWindowLong hButton.cnt,GWL_STYLE,but_common loop oncmd gosub *comm,WM_COMMAND SetFocus hButton.0 //1つめのボタンに強制的にフォーカスを当てる stop *comm repeat 3 if lparam=hButton.cnt { if ((wParam >> 16) & 0xFFFF)=BN_SETFOCUS { cnt0=cnt repeat 3 SetWindowLong hButton.cnt,GWL_STYLE,but_common|(BS_PUSHBUTTON*(cnt=cnt0)) InvalidateRect hButton.cnt,0,1 loop } break } loop return 0 *dummy return



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