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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1125
ますダイアログの左側に出る画像を使いたい6解決


ます

リンク

2007/11/25(Sun) 17:03:54|NO.12588


dialog
などで出るダイアログや、ファイルを削除するときに出るダイアログの 左側にある画像を使うにはどうすればいいですか?



この記事に返信する


hspail

リンク

2007/11/25(Sun) 17:23:48|NO.12589

ダイアログ用のアイコンは explorer.exe に入っているのでそれを取り出して描画します。
ExtractIconExの第二パラメータを変更すればほかのアイコンに変更できます。


#uselib "user32.dll" #func global InvalidateRect "InvalidateRect" int,int,int #func global DrawIconEx "DrawIconEx" int,int,int,int,int,int,int,int,int #uselib "shell32.DLL" #func global ExtractIconEx "ExtractIconExA" int,int,int,int,int filename="explorer.exe" //ExtractIconEx ファイル名,アイコンのインデックス(7="?" 8="!"),アイコンハンドル(大),アイコンハンドル(小),アイコンの数 ExtractIconEx varptr(filename),7,varptr(hicon),0,1;アイコン抽出 DrawIconEx hdc,0,0,hicon,32,32,0,0,3 InvalidateRect hwnd,0,1



hamach

リンク

2007/11/25(Sun) 17:33:21|NO.12590

USER32.DLL でも 代用可能ですよ。
これって、Vistaでもできるんでしょうかね。


#uselib "user32.dll" #func global InvalidateRect "InvalidateRect" int,int,int #func global DrawIconEx "DrawIconEx" int,int,int,int,int,int,int,int,int #uselib "shell32.DLL" #func global ExtractIconEx "ExtractIconExA" int,int,int,int,int filename="user32.dll" //ExtractIconEx ファイル名,アイコンのインデックス(7="?" 8="!"),アイコンハンドル(大),アイコンハンドル(小),アイコンの数 ExtractIconEx varptr(filename),1,varptr(hicon),0,1;アイコン抽出 DrawIconEx hdc,0,0,hicon,32,32,0,0,3 InvalidateRect hwnd,0,1



hamach

リンク

2007/11/25(Sun) 18:30:44|NO.12594

モジュールを作ってみたのですが時々はみ出てしまいます・・・。


#module OD #uselib "user32.dll" #func global InvalidateRect "InvalidateRect" int,int,int #func global DrawIconEx "DrawIconEx" int,int,int,int,int,int,int,int,int #func MessageBeep "MessageBeep" int #cfunc GetWindowLong "GetWindowLongA" int, int #func SetWindowLong "SetWindowLongA" int, int, int #uselib "shell32.DLL" #func global ExtractIconEx "ExtractIconExA" int,int,int,int,int #uselib "gdi32.dll" #func GetTextExtentPoint32 "GetTextExtentPoint32A" int,int,int,int #deffunc DialogInit screen 1,ginfo(20),ginfo(21),6,px,py SetWindowLong hwnd, -16, GetWindowLong (hwnd, -16) - $20000 dim textSize,2 font "MS UI Gothic" return #deffunc GetTxtExtPoint var tBuf,array tSize dim tSize,2 txtLen=strlen(tBuf) GetTextExtentPoint32 hdc,varptr(tBuf),txtLen,varptr(tSize) return /* : MessageBoxB "文字列",p1,"タイトル" : → p1 = 1.[!] 2.[?] 3.[×] 4.[i] */ #deffunc MessageBoxB str p1 , int p2 , str p3 // パラメータ代入 String = p1 Type = p2 Caption = p3 if Type = 0 : return // 文字列の長さ取得 GetTxtExtPoint String,textSize gsel 1 clrobj 0 // 位置と大きさ sSizeX = textSize.0 sSizeY = textSize.1 wSizeX = sSizeX + 20 wSizeY = sSizeY + 60 px = (ginfo(20)-wSizeX)/2 py = (ginfo(21)-wSizeY)/2 // サイズ変更 width wSizeX,wSizeY,px,py // キャプション title Caption // 塗りつぶし syscolor 15 : boxf : syscolor 8 // 文字列描画 pos ((wSizeX-sSizeX)/2)+42,((wSizeY-sSizeY)/2)-14 mes String // 1.[!] 2.[?] 3.[×] 4.[i] IconIndex = Type // Sound switch Type case 1 MessageBeep $30 swbreak case 2 MessageBeep $20 swbreak case 3 MessageBeep $10 swbreak case 4 MessageBeep $40 swbreak swend filename = "user32.dll" ExtractIconEx varptr(filename),IconIndex,varptr(hicon),0,1 //アイコン抽出 DrawIconEx hdc,10,14,hicon,32,32,0,0,3 InvalidateRect hwnd,0,1 pos (wSizeX-100)/2,wSizeY-25 objsize 100,20 button gosub "OK",*BTN sendmsg objinfo(stat, 2), $F4 , $1 gsel 1,1 return *BTN gsel 1,-1 return #global DialogInit // 初期化... dialog "#Error19 in Line1 (???)\n-->0で除算しました",1,"Error" MessageBoxB "#Error19 in Line1 (???)\n-->0で除算しました",1,"Error"



ます

リンク

2007/11/25(Sun) 19:47:35|NO.12597

ありがとうございます!
explorer.exeやuser32.dllから取り出して使うんですね。



ます

リンク

2007/11/25(Sun) 19:48:05|NO.12598

あ、解決チェックを付け忘れてました。



Kpan

リンク

2007/11/25(Sun) 20:07:01|NO.12599

ExtractIconEx関数だと、アイコンハンドルが不要になったら
DestroyIconしないとだめだと思います。

で、もっと楽なのは↓。こちらは破棄不要。
http://yokohama.cool.ne.jp/chokuto/urawaza/api/LoadIcon.html

あと、InvalidateRect関数はHSPのredraw命令でもOKです。



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