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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1208
crowobjimageで作ったボタンにツールチップを付けたい17解決


crow

リンク

2019/12/8(Sun) 18:58:23|NO.89025

前スレのお聞きし方が悪かったようなので、削除して改めてお聞きします。
下記のプログラムでツールチップが表示されません。
どこがおかしいのでしょうか?
またllmod3を使っても15個以上のボタンを指定すると表示したりしなかったりします。

/*--------------------------------------------------------------------------

[HSP3] ツールチップ表示モジュール v2
by Kpan
http://lhsp.s206.xrea.com/ (Let's HSP!)


□ SetToolTips p1
p1=スタイルの指定

ツールチップコントロールを作成します。最初に1度だけ呼んでください。
statには、ツールチップコントロールのオブジェクトIDが返ります。
p1はスタイルの指定です。すべてのツールチップに適用される形になり
ます。以下の数値を組み合わせてください。無指定の場合は普通のツール
チップが表示されます。

$1 : 自ウィンドウがアクティブになっていない時でも常にツールチップ
を表示。
$40 : ツールチップをバルーンタイプで表示。(要IE5以降)


□ AddToolTips p1, "文字列", p2
p1=ツールチップを表示するオブジェクトID。
p2=ツールチップをオブジェクトの真下に表示。($2を指定)

ツールチップコントロールに表示文字列を登録します。指定したオブ
ジェクトにツールチップが表示されます。文字列は64バイト分の領域を
一応用意しています。

--------------------------------------------------------------------------*/
#module

#uselib "user32"
#func GetClientRect "GetClientRect" int, int


#deffunc SetToolTips int p1
winobj "tooltips_class32", "", , p1
hTooltips = objinfo (stat, 2)

dim RECT, 4

return stat

#deffunc AddToolTips int p1, str p2, int p3
hObject = objinfo (p1, 2)

GetClientRect hObject, varptr (RECT)

sdim lpszText
lpszText = p2

TOOLINFO = 40, $10 | p3, hObject, 0, 0, 0, RECT.2, RECT.3, 0, varptr (lpszText)
sendmsg hTooltips, $404, , varptr (toolinfo)

return

#global

;サンプル

SetToolTips $41 ;ツールチップコントロール設置
pos 0,0 : picload dirinfo(1)+"\\hspsdk\\ahtman\\ahticon.bmp",0

objsize 64,64
b=0 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"スペース"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"フラッグ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"右に曲がれ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"メモメモ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"なんだ?"
;
b=448 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"家にもどれ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"テレビ見よ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"音楽聞こ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"小説書こ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"整理整頓"
stop
;
;
*操作
stop



この記事に返信する


kanamaru

リンク

2019/12/9(Mon) 15:24:08|NO.89027

正確な原因はわかりませんが、objimage用の画像を同じ画面ではなく、bufferで用意したのにすれば
ツールチップが表示されました。
picloadの前の行にbuffer 1を追加
picloadの次の行にgsel 0を追加
objimageの第一パラメータを1に変更
とすればツールチップが表示されました。



crow

リンク

2019/12/9(Mon) 18:19:42|NO.89029

kanamaruさん、早速のアドバイスありがとうございました。
書き忘れていましたが、私の環境はwindows7、HSP3.3 です。
早速アドバイス通りしてみましたが、私の環境ではやはりツールチップは表示しませんでした。
引き続きアドバイスをお願いします。



kanamaru

リンク

2019/12/9(Mon) 19:37:09|NO.89030

試しに調べてみたら、hspでツールチップが表示できない人のブログが見つかりました。
その人の解決策はなんとIEのバージョンを上げること。試してみては?
こちらの環境はwindows10なのでバージョンが上である可能性は確かにありますし。
http://freeh.minim.ne.jp/minimini/develop/hsptltip.html



crow

リンク

2019/12/9(Mon) 21:10:02|NO.89031

kanamaruさん、わざわざこのようなことお調べいただきありがとうございます。
私の環境では、
IE11
virsion 11.0.9600.19540
更新バージョン 11.0.160(KB4525106)
で最新のものになっております。(と思います。)
MSでは、windous10以降は、Edgeのみをサポートするようですが。



沢渡

リンク

2019/12/10(Tue) 00:10:49|NO.89032

ダメ元ですが、kanamaruさんのNO.89027の修正を適用した上で、

TOOLINFO = 40, $10 | p3, hObject, 0, 0, 0, RECT.2, RECT.3, 0, varptr (lpszText)
を、

TOOLINFO = 40, $11 | p3, 0, hObject, 0, 0, 0, 0, hinstance, varptr (lpszText)
と変えたらどうなるでしょうか? llmod3の内容と、以下のサイトを参考にしてみましたが。
http://www.interq.or.jp/chubu/r6/masm32/tute/tute027_Jp.html



MillkeyStars

リンク

2019/12/10(Tue) 01:12:57|NO.89033

単純ミスしてると思うよ。
ツールチップコントロールは、ボタン毎に作成してボタンハンドルを親とするウィンドウでなければならない。

主のスクリプトだと、HSPメインウィンドウがツールチップコントロールの親になってるよね?
ボタンは、HSPメインウィンドウの子だけど、ツールチップコントロールがないの。

#module ToolTips_Button #uselib "user32.dll" #cfunc _CreateWindowEx "CreateWindowExA" int,sptr,sptr,int,int,int,int,int,int,int,int,int #define CW_USEDEFAULT 0x80000000 #deffunc AddToolTips int ObjectID,str SetName hObjHWND = objinfo(ObjectID,2) if (hObjHWND == 0) : dialog "オブジェクトハンドルを取得できませんでした" : return //オブジェクトへのツールチップコントロールの追加 hToolTips = _CreateWindowEx(0,"tooltips_class32",0,0x01,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hObjHWND,0,hinstance,0) if (hToolTips == 0) : dialog "ツールチップコントロールの追加に失敗しました" : return dim Rect,4 Rect(0) = 0,0,640,480 lpszText = SetName dim ToolInfo,48/4 TOOLINFO = 40, $10 | p3, hObjHWND, 0, 0, 0, RECT.2, RECT.3, 0, varptr (lpszText) sendmsg hTooltips, $404, , varptr (toolinfo) return #global //サンプル pos 0,0 : picload dirinfo(1)+"\\hspsdk\\ahtman\\ahticon.bmp",0 objsize 64,64 b=0 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"スペース" b+64 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"フラッグ" b+64 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"右に曲がれ" b+64 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"メモメモ" b+64 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"なんだ?" ; b=448 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"家にもどれ" b+64 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"テレビ見よ" b+64 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"音楽聞こ" b+64 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"小説書こ" b+64 : pos b,0 : objimage 0,b,0,b,0,b,0 button "",*操作 : a=stat : AddToolTips a,"整理整頓" stop *操作 stop



ooo

リンク

2019/12/10(Tue) 16:04:17|NO.89034

>ツールチップコントロールは、ボタン毎に作成してボタンハンドルを親とするウィンドウでなければならない。
そんな必要あったかなと思います。
一つのツールチップコントロールで複数のボタンに対応できるし、トップレベルウインドウの子で問題ないはずです
というかトップレベルウインドウでも問題ないはずです。

crowさんの最初のスクリプトで表示されないのはSetToolTipsした後にpicloadで
画面を初期化してるのでツールチップが削除されてるだけだと思います。
なので以下のように修正すればいいとおもいます。

;サンプル pos 0,0 : picload dirinfo(1)+"\\hspsdk\\ahtman\\ahticon.bmp",0 SetToolTips $41 ;ツールチップコントロール設置



沢渡

リンク

2019/12/10(Tue) 17:56:18|NO.89035

kanamaruさんの89027の書き込みの通りにすれば、
少なくとも私の環境(Windows10 64bit)では正常に動きましたが。
それでも質問者さんは動かないと言っているから、どうしてなのかよくわからないわけで。
(Windows7特有の問題なのかと思って調べてみてもそれらしい情報は見つからなかったし、
 Windows7の時点でIEのバージョンは8だからIE5.0以降という条件は満たしている筈だし)



crow

リンク

2019/12/10(Tue) 18:53:33|NO.89036

沢渡さん、ありがとうございます。
アドバイスを試してみましたが、やはり表示されませんでした。

oooさん、ありがとうございます。
アドバイスを試してみましたが、やはり表示されませんでした。

MillkeyStarsさん、ありがとうございます。
MillkeyStarsさんのものを実行するとツールチップが表示されるようになりました。

xpの時にイメージボタンは、別の方法で作って、上記通りでツールチップも動作していたんです。
これが、win7ではイメージボタンが黒塗りになるのでobjimageに変更したんですが、今度はツールチップも表示されなくなることが分かって質問させていただきました。
kanamaruさんや沢渡さんのように、win10では表示されると言うことは、win7の問題か、私の環境の問題かもしれません。
ちなみにHSP351で実行しても表示されません。

MillkeyStarsさんの
>ツールチップコントロールは、ボタン毎に作成してボタンハンドルを親とするウィンドウでなければならない。
はoooさんもおっしゃるように私も問題ないと思いますが、でもMillkeyStarsさんのスクリプトで動作するのも事実です。
MillkeyStarsさんのアドバイスを軸に、ご教示いただいた皆様のご意見も踏まえ、自分なりにもう少し研究したいと思います。

ありがとうございました。



ooo

リンク

2019/12/11(Wed) 02:45:41|NO.89039

MillkeyStarsさんのが表示されたとのことでもしかしたら
>$40 : ツールチップをバルーンタイプで表示。(要IE5以降)
が原因なんでしょうか。(そうだとしても理由はわかりませんが)

最初のスクリプトで以下のように修正したら表示されませんか。

;サンプル pos 0,0 : picload dirinfo(1)+"\\hspsdk\\ahtman\\ahticon.bmp",0 SetToolTips $1 ;ツールチップコントロール設置



crow

リンク

2019/12/12(Thu) 21:09:21|NO.89044

oooさんありがとうございます。
バルーンタイプを抜いても表示しません…

皆様、色々御教示下さりありがとうございました。

自分なりに整理した結果です。

Kpanさん(http://lhsp.s206.xrea.com/ (Let's HSP!))が作られた
{[HSP3] ツールチップ表示モジュール v2}が私のwin7環境のPCで
動作しなくなったのでMillkeyStarsさんのアドバイスを下に作り変えた。
・winobjは、HSP3ではCreateWindowEx関数を呼び出すラッパー命令であり
 返り値も正常に返すので、なんの疑いも持たなかったが、
 MillkeyStarsさんのアドバイスで、SetToolTipsの内容をwinobjではなく
 直接CreateWindowExAで作成すると私の環境でもツールチップが表示される
 ようになった。
 またこうすることで、llmod3で作成した場合の不具合も解消された。
 32個のボタンを作っても全部正常に表示される。
・しかしこの改正モジュールでもスタイルにバルーンタイプでの表示が
 出来なくなった。
ただしこの現象は、たんなるラッパー命令のwinobjではダメで、winAPIの
CreateWindowEx関数を直接使うと何故良いのか、私の知識では解明できませんでした。

/*--------------------------------------------------------------------------
□ SetToolTips
ツールチップコントロールを作成します。最初に1度だけ呼んでください。
statには、ツールチップコントロールのオブジェクトハンドルが返ります。
statが0なら作成失敗です。

□ AddToolTips p1, "文字列", int p2
p1=ツールチップを表示するオブジェクトID。
p2=$2を指定するとツールチップをオブジェクトの真下に表示。
ツールチップコントロールに表示文字列を登録します。指定したオブ
ジェクトにツールチップが表示されます。
文字列は最大64バイトです。
--------------------------------------------------------------------------*/

#module _ToolTips_
#uselib "user32.dll"
#cfunc _CreateWindowEx "CreateWindowExA" int,sptr,sptr,int,int,int,int,int,int,int,int,int
#func GetClientRect "GetClientRect" int, int

#deffunc SetToolTips
//ツールチップコントロールを作成
hToolTips = _CreateWindowEx(0,"tooltips_class32",0,0x01)

dim RECT, 4

return hToolTips

#deffunc AddToolTips int ObjectID,str SetName, int p3
hObjHWND = objinfo(ObjectID,2)

GetClientRect hObjHWND, varptr (RECT)

sdim lpszText
lpszText = SetName

dim ToolInfo,48/4
TOOLINFO = 40, $10 | p3, hObjHWND, 0, 0, 0, RECT.2, RECT.3, 0, varptr (lpszText)
sendmsg hTooltips, $404, , varptr (TOOLINFO)
return

#global


//サンプル
SetToolTips
pos 0,0 : picload dirinfo(1)+"\\hspsdk\\ahtman\\ahticon.bmp",0
objsize 64,64
b=0 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"スペース"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"フラッグ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"右に曲がれ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"メモメモ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"なんだ?"
;
b=448 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"家にもどれ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"テレビ見よ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"音楽聞こ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"小説書こ"
b+64 : pos b,0 : objimage 0,b,0,b,0,b,0
button "",*操作 : a=stat : AddToolTips a,"整理整頓"
stop

*操作
stop



ooo

リンク

2019/12/13(Fri) 07:04:09|NO.89046

>・しかしこの改正モジュールでもスタイルにバルーンタイプでの表示が出来なくなった
CreateWindowExでウインドウスタイルを$41にしたら表示されないということですかね。
どっちにしても謎ですね。



crow

リンク

2019/12/13(Fri) 17:49:19|NO.89048

oooさん、ありがとうございます。
>CreateWindowExでウインドウスタイルを$41にしたら表示されないということですかね。
$41にしても普通に表示されるだけで、バルーンタイプにはなりません。
謎です…

win10では、バルーンタイプで表示されましたか?



crow

リンク

2019/12/13(Fri) 21:30:01|NO.89049

NO.89044のモジュールの

>hToolTips = _CreateWindowEx(0,"tooltips_class32",0,0x01)

hToolTips = _CreateWindowEx(0x08,"tooltips_class32",0,0x01)
と第一パラメーターを8に設定して下さい。
最上位にツールチップを表示する設定です。
こうしないと、ウィンドウを gsel id,2 と設定するとウィンドウの下に隠れるのでその対応です。



X

リンク

2019/12/13(Fri) 22:01:53|NO.89050

解決済みのスレではありますが…。
自学の為であるならば調べ試すことは大変有意義ですが物を作ることが目的であるならば
先人の方がお作りくださったモジュールに頼ることは悪い事ではないと考えまたとても強力なものが多いです。
過去ログにはそういったものがたくさんあります。

http://hsp.tv/play/pforum.php?mode=pastwch&num=78517

このスレのWinAPI32好き様の作られたモジュールは自分のwin10 64bit proの環境で十二分に
機能しております。
モジュール兼ヘルプファイルであるため拡張子を.hsに変更すればヘルプブラウザから確認もできるようになっております。
お使いのブラウザによっては安全な接続ではない もしくは この接続ではプライバシーが保護されませんと出るかもしれませんが
問題はありません。
modTooltipControl.hspというファイルがダウンロードできるはずです。
お試しください。



ooo

リンク

2019/12/14(Sat) 07:38:17|NO.89052

>win10では、バルーンタイプで表示されましたか?
表示されますね。

バルーンが表示されない原因として、もしかしたらですが何らかの原因で
普通はHSP内部で実行されてる初期化ができていないのかも。
ダメもとで、以下のスクリプトを最初に挿入してみたらどうでしょうか。

#uselib "Comctl32.dll" #func InitCommonControlsEx "InitCommonControlsEx" int icce=8,0xff InitCommonControlsEx varptr(icce)



crow

リンク

2019/12/14(Sat) 17:45:20|NO.89058

oooさん、度々のアドバイスありがとうございます。

>>win10では、バルーンタイプで表示されましたか?
> 表示されますね。

私もいずれwin10に切り替えようと思っていますので安心しました。

初期化の件ですが、試してみましたがだめでした。
バルーンの$40をセットするとツールチップそのものが表示されなくなります。
win7も来年1月にサポート停止されようという今頃ですが、過去掲示板を見ても同様な質問もない状況では、私の環境問題かもしれませんね。
それが何かは不明ですが。

Xさん、ありがとうございます。
Xさんを信用しないわけではないですが、私の2種類のブラウザも警告を発しました。
過去、別の掲示板ですが痛い目にあっていますので、折角ですが断念させていただきました。
申し訳ないです。



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