|
|
2022/2/20(Sun) 11:07:55|NO.95486
Windows 10の環境では通常のボタンが角ばっているのですが、Windows7の標準ボタンコントロールのように丸まったようなボタンを作成
する方法はありますでしょうか? 自分でそのようなボタンを自作してobjimageでカスタムボタン化するしかないのでしょうか?
|
|
2022/2/20(Sun) 11:17:11|NO.95487
Objimageで表示するしかないと思います
|
|
2022/2/20(Sun) 14:41:15|NO.95491
|
|
2022/2/20(Sun) 16:59:43|NO.95493
URL先のコードを見たのですが、どれを参考にすればよいでしょうか?
Win7風のボタンを作成してからURL先のソースを試せばよいのでしょうか?
|
|
2022/2/20(Sun) 17:02:41|NO.95494
|
|
2022/2/20(Sun) 17:10:36|NO.95496
見た感じ、どのようにWin7風のボタンになるか想像がつきません...
Win7風のボタン画像をアイコンとして扱うという認識でよろしいでしょうか?
|
|
2022/2/20(Sun) 18:22:47|NO.95497
すみません。間違えました。
Objimageで表示するしかないと思います。
|
|
2022/2/21(Mon) 10:22:07|NO.95512
なるほど…
調べてた際、オーナードローについて見つけたのですが、オーナードローで角丸にはできるのでしょうか?
|
|
2022/2/21(Mon) 13:09:52|NO.95515
|
|
2022/2/21(Mon) 16:02:23|NO.95521
> zrs90(5さい) さん
ありがとうございます! リンク先のものと別サイトから以下のスクリプトを見つけました。
// [HSP3] オーナードローボタン サンプル
// by Let's HSP!
#include "user32.as"
#include "gdi32.as"
#uselib "msimg32"
#func GradientFill "GradientFill" int, int, int, int, int, int
#define BS_OWNERDRAW $0B
#define ctype MAKELONG(%1,%2) (%1 & $FFFF | %2 << 16)
; ウィンドウメッセージ
oncmd gosub *drawitem, $2B
sdim pszText
pos 50, 50
objsize 80,35
button "ぼたーん", *jump
hButton = objinfo(stat, 2)
; ボタンのスタイル変更 (BM_SETSTYLE)
sendmsg hButton, $F4, BS_OWNERDRAW
stop
; WM_DRAWITEMメッセージ
*drawitem
; DRAWITEMSTRUCT構造体
dupptr DIS, lparam, 48
if DIS.5 = hButton {
; ボタン内の塗りつぶし色に白ブラシ
GetStockObject 0
SelectObject DIS.6, stat
; ボタン外枠に角の丸い長方形
RoundRect DIS.6, 0, 0, DIS.9, DIS.10, 6, 6
; アイテムの状態 ODS_SELECTED
if DIS.4 & $1 {
RedGreen = MAKELONG($CC00, $CC00), MAKELONG($F300, $F300)
BlueAlpha = MAKELONG($CC00, 0), MAKELONG($F300, 0)
} else {
RedGreen.0 = MAKELONG($F300, $F300), MAKELONG($DD00, $DD00)
BlueAlpha.0 = MAKELONG($F300, 0), MAKELONG($DD00, 0)
}
TRIVERTEX.0 = 2, 2, RedGreen.0, BlueAlpha.0
TRIVERTEX.4 = DIS.9 - 2, DIS.10 - 2, RedGreen.1, BlueAlpha.1
GRADIENT_RECT = 0, 1
GradientFill DIS.6, varptr(TRIVERTEX), 2, varptr(GRADIENT_RECT), 1, $1
RECT = 0, 0, DIS.9, DIS.10
; アイテムの状態 ODS_FOCUS
if DIS.4 & $10 {
InflateRect varptr(RECT), -2, -2
DrawFocusRect DIS.6, varptr(RECT)
}
; テキストカラー
SetTextColor DIS.6, $555555
SetBkMode DIS.6, 1
; テキスト取得 (WM_GETTEXT)
sendmsg DIS.5, $D, 64, varptr(pszText)
; テキスト描画
DrawText DIS.6, pszText, -1, varptr(RECT), $20 | $4 | $1
return 1
}
return
*jump
このソースについて、2つ目のボタンを作成する際、どうすればよいか教えていただきたいです。
また、もしできればカーソルがボタンに来た際のエフェクトも付けたいです。
| |
|
2022/2/21(Mon) 17:19:44|NO.95522
ごめんなさい。私、スマホ iPhoneだけでしか
掲示板の閲覧も、何も出来ないんだな。
おまけに、pcは、今時、Windows7 だけ
なので、テザリング等も出来ない。
hsp3.6は、pc借りて、テザリングで
ダウンロードしたのを、使ってるけど。
Androidなら、安いUSBメモリ経由で
掲示板のスクリプトを使うのは
出来るはず...なので
iPhone用のLightning USBメモリで
テキストファイルのやり取り出来るの
あるけど、とにかく高いのと
ネット通販もやら(れ)ないから
入手が難しくて...
このネタで、こっそり実験しようと
してたんだけど。(笑)
|
|
2022/2/21(Mon) 17:56:43|NO.95523
2つ目のボタンは、1つ目と同じなら
//ここで直前のボタンのウィンドウハンドル拾ってる
hButton = objinfo(stat, 2)
; ボタンのスタイル変更 (BM_SETSTYLE)
sendmsg hButton, $F4, BS_OWNERDRAW
コレと同じ物を、ウィンドウハンドルの変数
(hButton)を変えて2つ目も、配置すれば、出来ると思います。
ボタンのエフェクトは、objimage 命令使ってれば
サンプルで、objimage.hsp が使えたんだけど。
コレ以上は、私のレベルでは回答出来ないです。
|
|
2022/2/21(Mon) 20:25:29|NO.95526
新しく test というボタンを追加してみたのですが、testだけ動作しません。何が違っているでしょうか?
/ [HSP3] オーナードローボタン サンプル
// by Let's HSP!
#include "user32.as"
#include "gdi32.as"
#uselib "msimg32"
#func GradientFill "GradientFill" int, int, int, int, int, int
#define BS_OWNERDRAW $0B
#define ctype MAKELONG(%1,%2) (%1 & $FFFF | %2 << 16)
; ウィンドウメッセージ
oncmd gosub *drawitem, $2B
sdim pszText
pos 50, 50
objsize 80,35
button "ぼたーん", *jump
hButton = objinfo(stat, 2)
; ボタンのスタイル変更 (BM_SETSTYLE)
sendmsg hButton, $F4, BS_OWNERDRAW
button "test",*test
//ここで直前のボタンのウィンドウハンドル拾ってる
hButton1 = objinfo(stat, 2)
; ボタンのスタイル変更 (BM_SETSTYLE)
sendmsg hButton1, $F4, BS_OWNERDRAW
stop
; WM_DRAWITEMメッセージ
*drawitem
; DRAWITEMSTRUCT構造体
dupptr DIS, lparam, 48
if DIS.5 = hButton {
; ボタン内の塗りつぶし色に白ブラシ
GetStockObject 0
SelectObject DIS.6, stat
; ボタン外枠に角の丸い長方形
RoundRect DIS.6, 0, 0, DIS.9, DIS.10, 6, 6
; アイテムの状態 ODS_SELECTED
if DIS.4 & $1 {
RedGreen = MAKELONG($CC00, $CC00), MAKELONG($F300, $F300)
BlueAlpha = MAKELONG($CC00, 0), MAKELONG($F300, 0)
} else {
RedGreen.0 = MAKELONG($F300, $F300), MAKELONG($DD00, $DD00)
BlueAlpha.0 = MAKELONG($F300, 0), MAKELONG($DD00, 0)
}
TRIVERTEX.0 = 2, 2, RedGreen.0, BlueAlpha.0
TRIVERTEX.4 = DIS.9 - 2, DIS.10 - 2, RedGreen.1, BlueAlpha.1
GRADIENT_RECT = 0, 1
GradientFill DIS.6, varptr(TRIVERTEX), 2, varptr(GRADIENT_RECT), 1, $1
RECT = 0, 0, DIS.9, DIS.10
; アイテムの状態 ODS_FOCUS
if DIS.4 & $10 {
InflateRect varptr(RECT), -2, -2
DrawFocusRect DIS.6, varptr(RECT)
}
; テキストカラー
SetTextColor DIS.6, $555555
SetBkMode DIS.6, 1
; テキスト取得 (WM_GETTEXT)
sendmsg DIS.5, $D, 64, varptr(pszText)
; テキスト描画
DrawText DIS.6, pszText, -1, varptr(RECT), $20 | $4 | $1
return 1
}
return
; DRAWITEMSTRUCT構造体
dupptr DIS, lparam, 48
if DIS.5 = hButton1 {
; ボタン内の塗りつぶし色に白ブラシ
GetStockObject 0
SelectObject DIS.6, stat
; ボタン外枠に角の丸い長方形
RoundRect DIS.6, 0, 0, DIS.9, DIS.10, 6, 6
; アイテムの状態 ODS_SELECTED
if DIS.4 & $1 {
RedGreen = MAKELONG($CC00, $CC00), MAKELONG($F300, $F300)
BlueAlpha = MAKELONG($CC00, 0), MAKELONG($F300, 0)
} else {
RedGreen.0 = MAKELONG($F300, $F300), MAKELONG($DD00, $DD00)
BlueAlpha.0 = MAKELONG($F300, 0), MAKELONG($DD00, 0)
}
TRIVERTEX.0 = 2, 2, RedGreen.0, BlueAlpha.0
TRIVERTEX.4 = DIS.9 - 2, DIS.10 - 2, RedGreen.1, BlueAlpha.1
GRADIENT_RECT = 0, 1
GradientFill DIS.6, varptr(TRIVERTEX), 2, varptr(GRADIENT_RECT), 1, $1
RECT = 0, 0, DIS.9, DIS.10
; アイテムの状態 ODS_FOCUS
if DIS.4 & $10 {
InflateRect varptr(RECT), -2, -2
DrawFocusRect DIS.6, varptr(RECT)
}
; テキストカラー
SetTextColor DIS.6, $555555
SetBkMode DIS.6, 1
; テキスト取得 (WM_GETTEXT)
sendmsg DIS.5, $D, 64, varptr(pszText)
; テキスト描画
DrawText DIS.6, pszText, -1, varptr(RECT), $20 | $4 | $1
return 1
}
return
*jump
*test
| |
|
2022/2/21(Mon) 21:35:34|NO.95528
横から失礼しますが、これで良いのでは?
// by Let's HSP!
#include "user32.as"
#include "gdi32.as"
#uselib "msimg32"
#func GradientFill "GradientFill" int, int, int, int, int, int
#define BS_OWNERDRAW $0B
#define ctype MAKELONG(%1,%2) (%1 & $FFFF | %2 << 16)
; ウィンドウメッセージ
oncmd gosub *drawitem, $2B
sdim pszText
pos 50, 50
objsize 80,35
button "ぼたーん", *jump
hButton = objinfo(stat, 2)
; ボタンのスタイル変更 (BM_SETSTYLE)
sendmsg hButton, $F4, BS_OWNERDRAW
button "test",*test
//ここで直前のボタンのウィンドウハンドル拾ってる
hButton1 = objinfo(stat, 2)
; ボタンのスタイル変更 (BM_SETSTYLE)
sendmsg hButton1, $F4, BS_OWNERDRAW
stop
; WM_DRAWITEMメッセージ
*drawitem
; DRAWITEMSTRUCT構造体
dupptr DIS, lparam, 48
if (DIS.5 = hButton)|(DIS.5 = hButton1) {
; ボタン内の塗りつぶし色に白ブラシ
GetStockObject 0
SelectObject DIS.6, stat
; ボタン外枠に角の丸い長方形
RoundRect DIS.6, 0, 0, DIS.9, DIS.10, 6, 6
; アイテムの状態 ODS_SELECTED
if DIS.4 & $1 {
RedGreen = MAKELONG($CC00, $CC00), MAKELONG($F300, $F300)
BlueAlpha = MAKELONG($CC00, 0), MAKELONG($F300, 0)
} else {
RedGreen.0 = MAKELONG($F300, $F300), MAKELONG($DD00, $DD00)
BlueAlpha.0 = MAKELONG($F300, 0), MAKELONG($DD00, 0)
}
TRIVERTEX.0 = 2, 2, RedGreen.0, BlueAlpha.0
TRIVERTEX.4 = DIS.9 - 2, DIS.10 - 2, RedGreen.1, BlueAlpha.1
GRADIENT_RECT = 0, 1
GradientFill DIS.6, varptr(TRIVERTEX), 2, varptr(GRADIENT_RECT), 1, $1
RECT = 0, 0, DIS.9, DIS.10
; アイテムの状態 ODS_FOCUS
if DIS.4 & $10 {
InflateRect varptr(RECT), -2, -2
DrawFocusRect DIS.6, varptr(RECT)
}
; テキストカラー
SetTextColor DIS.6, $555555
SetBkMode DIS.6, 1
; テキスト取得 (WM_GETTEXT)
sendmsg DIS.5, $D, 64, varptr(pszText)
; テキスト描画
DrawText DIS.6, pszText, -1, varptr(RECT), $20 | $4 | $1
return 1
}
return
*jump
*test
| |
|
2022/2/21(Mon) 21:49:05|NO.95529
申し訳ないです。
私の書いた方法だけで
*drawitem 以下の内容が 2つ目のボタンにも
適用されると、思ってたんですが、
甘く見過ぎてました。
...となると、*drawitem 以下の内容を
理解して、2個目のボタンの分を
それに合った値等に、書き換えないと
おそらくムリです。
私のレベルでは、とても手に負えないです。
Windows10の実機ないので、実行すら出来ない。
(※スマホ見ながら、このサイズのソースはちょっと...)
構造体に、WindowsApi...
おまけに、文法まで、hsp2.x ですし。
|
|
2022/2/21(Mon) 22:07:43|NO.95530
>zrs90(5さい)さん
windows7でも多分エ○サイトとか見ない限りはネットして大丈夫だと思います。
友人もwindows7でバリバリyoutube見たりしてるので。
|
|
2022/2/21(Mon) 22:41:53|NO.95532
沢渡 さん いつもありがとうございます。
●追記
さすがに、Windows7をネット接続する程
『勇者』ではないです。(笑)
以前、掲示板の検索が出来ない...と言う件で
hsp.tv内を、調べ廻ってた時、個人情報を送信?
みたいのに、当たりました。
|
|
2022/2/22(Tue) 12:06:42|NO.95534
>沢渡さん
ありがとうございます! 無事できました!
>zrs90(5さい)さん
役に立つサイトを紹介していただきありがとうございました。Windows 7、Win10にできなかったのですかね?
個人情報を送信というのはCookieか、Googleの表示で「拒否」すれば問題ないかと思います。
|
|
2022/2/22(Tue) 13:44:56|NO.95535
少しでも参考になる物があって良かったです。
沢渡さんのおかげで、問題も解決出来たようなので。
私の事情を話すと、ネット回線がなかったのが
理由ですが...
かなり訳アリのビジネス用、メーカーリビッシュの
デスクトップpcで、オフィスプリインストールと
8がバンドルされてて、10のインストール前に
bios設定や、ジャンパー等を先にいじって
8をオフィスも、インストール、再認証しないと
ダメとか...条件が厄介すぎて、一般人お断り的な
代物ですが、快適に動いてます。
●追記
今回の検索先、まさか footy2.as の作者さんのHPとは
最初、思わなくて...あのHP、時間ある時、回って見ると
良いです。あの頃の方々のレベルは凄いですから...
|
|