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


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
1006
Hokutoオーナードローコンボボックスの背景色について2未解決


Hokuto

リンク

2025/10/6(Mon) 11:24:00|NO.104069

オーナードローコンボボックスとカスタムボタンの描画 - HSPTV!掲示板
https://hsp.tv/play/pforum.php?mode=pastwch&num=87541

上記のページを参考に、オーナードローのコンボボックスを作成しました。
しかし、背景色の変更についてうまく理解できていません。
例えば、マウスホバー時に背景色を変えたり、表のように背景色を交互にする方法はありますか?
また、下に伸びるリストではなく、もともと表示されている部分のみを色変更するにはどうしたらいいでしょうか?



この記事に返信する


fly

リンク

2025/10/12(Sun) 10:30:26|NO.104093

DRAWITEMSTRUCT構造体の情報を見て処理を分けることになると思います。
http://lhsp.s206.xrea.com/misc/ownerdraw.html
https://chokuto.ifdef.jp/advanced/struct.html
https://chokuto.ifdef.jp/advanced/windowmessage.html


//#define ODS_SELECTED 0x0001 //#define ODS_COMBOBOXEDIT 0x1000 if DRAWITEMSTRUCT(4) & 0x0001 { fill_color=$0000ff //選択状態 }else{ if DRAWITEMSTRUCT(4) & 0x1000 { fill_color=$000000 //コンボボックスの本体 }else{ //リストの項目 if DRAWITEMSTRUCT(2) \ 2 { fill_color=$ff0000 //1,3,5...番目の項目 }else{ fill_color=$00ff00 //0,2,4...番目の項目 } } }



fly

リンク

2025/10/26(Sun) 10:30:57|NO.104142

マウスホバーって本体のほうかな
もっと細かく制御したいならサブクラス化するとか、
bgscrを使って自前のコンボボックスを作るとかです。

#use user32,gdi32 cbx_rect=50,50,200,40 //位置とサイズ cbx_count=4 //アイテムの数 cbx_text="Red","Green","Blue","Yellow" //テキスト cbx_data=0xff0000,0x00ff00,0x0000ff,0xffff00 //データ cbx_min=8 //リストに表示する数 cbx_buf=10 //オーナードロー用のバッファID cbx_draw=*draw //描画を行うラベル cbx_id=0 //オブジェクトID cbx_hwnd=0 //オブジェクトハンドル cbx_stat=0 //アイテムの状態(1=選択,2=フォーカス,4=本体,8=本体ホバー) cbx_index=0 //アイテムのインデックス //バッファ初期化 buffer cbx_buf,256,256 font "Yu Gothic",20 //コンボボックス初期化 gsel 0 pos cbx_rect(0),cbx_rect(1) winobj "combobox","",0,0x50200013,cbx_rect(2),cbx_rect(3) cbx_id=stat cbx_hwnd=objinfo_hwnd(cbx_id) sendmsg cbx_hwnd,0x0153,0,cbx_rect(3) //CB_SETITEMHEIGHT sendmsg cbx_hwnd,0x0153,-1,cbx_rect(3) sendmsg cbx_hwnd,0x1701,cbx_min //CB_SETMINVISIBLE repeat cbx_count sendmsg cbx_hwnd,0x0143 //CB_ADDSTRING loop oncmd gosub *drawitem,0x002B //WM_DRAWITEM stop *draw //背景の描画 if cbx_stat&4{ if cbx_stat&8{ rgbcolor 0x8888ff //本体ホバー }else{ rgbcolor 0xffffff //本体 } }else{ if cbx_stat&1{ rgbcolor 0x8888ff //選択状態 }else{ if cbx_index\2{ rgbcolor 0xeeeeee //リストA }else{ rgbcolor 0xffffff //リストB } } } boxf //選択なしの描画 if cbx_index=-1{ rgbcolor 0x888888 pos 0,7 mes "色を選択" return } //データの描画 rgbcolor 0 boxf 8,8,30,30 rgbcolor cbx_data(cbx_index) boxf 9,9,29,29 //テキストの描画 pos 40,7 rgbcolor 0 mes cbx_text(cbx_index) return *drawitem if cbx_drawitem(wparam,lparam){ return 0 } return #defcfunc cbx_drawitem int wp,int lp,local dis,local sel dupptr dis,lp,48,4 //DRAWITEMSTRUCT if dis(5)!=cbx_hwnd { return 0 } //描画するアイテムの情報を設定 cbx_index=dis(2) cbx_stat=0 if dis(4)&0x0001 { cbx_stat|=1 } //ODS_SELECTED if dis(4)&0x0010 { cbx_stat|=2 } //ODS_FOCUS if dis(4)&0x1000 { cbx_stat|=4 } //ODS_COMBOBOXEDIT if WindowFromPoint(ginfo_mx,ginfo_my)=cbx_hwnd { cbx_stat|=8 } cbx_rect=0,0,dis(9)-dis(7),dis(10)-dis(8) //ユーザーの描画処理を呼んでそれをコピー sel=ginfo_sel gsel cbx_buf gosub cbx_draw BitBlt dis(6),dis(7),dis(8),dis(9)-dis(7),dis(10)-dis(8),hdc,0,0,0x00CC0020 //SRCCOPY gsel sel return 1



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.104069への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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