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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0529
なまこボタンの上にアイコンを貼る4解決


なまこ

リンク

2007/5/29(Tue) 22:45:47|NO.8630


; Windowへのドラッグ&ドロップsample ; http://quasiquote.org/hspwiki/ ; thanks ちょくと さん ; http://yokohama.cool.ne.jp/chokuto/urawaza/dragdrop.html ; #uselib "shell32.dll" #func DragAcceptFiles "DragAcceptFiles" int,int #func DragQueryFile "DragQueryFileA" int,int,int,int #func DragQueryPoint "DragQueryPoint" int,int #func DragFinish "DragFinish" int #define WM_DROPFILES 0x0233 ; WM_DROPFILES メッセージハンドラを設定 oncmd gosub *OnDropFiles, WM_DROPFILES ; ファイルをドラッグ&ドロップできるように設定 DragAcceptFiles hwnd, 1 title "ウィンドウにファイルをドロップしてください" stop *OnDropFiles ; --- ファイルがドロップされたとき --- ; ドロップされたファイルの数を取得する hdrop = wParam ; ドロップファイル情報のハンドル DragQueryFile hdrop, -1, 0, 0 ndrop = stat ; ファイルの数 ; 画面をクリア syscolor 5 : boxf syscolor 8 : pos 0,0 ; ファイル名を取得して表示 sdim filename, 260 repeat ndrop DragQueryFile hdrop, cnt, varptr(filename), 260 #uselib "shell32" #func global SHGetFileInfo "SHGetFileInfo" sptr, int, int, int, int #uselib "user32" #func DrawState "DrawStateA" int, int, int, sptr, int, int, int, int, int, int objsize 70,40:pos 30,50 ;ボタン表示 button "",*押したら #func DestroyIcon "DestroyIcon" int dim shinfo, 4 SHGetFileInfo filename, 0, varptr(shinfo), 4, $00000100 DrawState hdc, , ,shinfo.0, , 50, 50, , , $3 redraw DestroyIcon shinfo.0 loop ; ドロップファイル情報をクリア (これをしないとメモリリークになる) DragFinish hdrop return *押したら stop
サンプルを見ながら作ったこのスプリクトですがどうしても絵の上にボタンを貼ってしまいます。
どこがいけないのでしょうか。



この記事に返信する


pizza

リンク

2007/5/30(Wed) 20:07:36|NO.8641

ボタンのスタイルを変えてから、BM_SETIMAGEを使ってください。

#uselibと#funcは上の方にまとめるか、別ファイルにして
インクルードするようにした方が見やすくなると思います。


#include "user32.as" #define GWL_STYLE (-16) #define BS_ICON 0x00000040 #define BM_SETIMAGE 0x00F7 #define WS_CHILD 0x40000000 #define WS_VISIBLE 0x10000000 #define IMAGE_ICON 1 #define IDI_APPLICATION 32512 objsize 32, 32 button "", *lb_a hButton = objinfo_hwnd(stat) // アイコンボタンにする SetWindowLong hButton, GWL_STYLE, WS_CHILD|WS_VISIBLE|BS_ICON LoadIcon 0, IDI_APPLICATION hIcon = stat // アイコンセット // p4にアイコンのハンドル sendmsg hButton, BM_SETIMAGE, IMAGE_ICON, hIcon stop *lb_a stop



なまこ

リンク

2007/5/31(Thu) 19:14:43|NO.8653

どこを変えればアイコンを別のものにできるかわかりません。
教えてください



pizza

リンク

2007/6/1(Fri) 01:41:40|NO.8662

最初のスクリプトだと、SHGetFileInfoを呼んだ後のshinfo.0に
アイコンのハンドルが入っています。


button "",*押したら hButton = objinfo_hwnd(stat) SetWindowLong hButton, GWL_STYLE, WS_CHILD|WS_VISIBLE|BS_ICON dim shinfo, 4 SHGetFileInfo filename, 0, varptr(shinfo), 4, $00000100 sendmsg hButton, BM_SETIMAGE, IMAGE_ICON, shinfo(0)

ボタンがアイコンを使っている間はDestroyIconで削除しないで下さい。



なまこ

リンク

2007/6/1(Fri) 19:31:38|NO.8689

二回も質問を答えてくれたpizzaさん
ありがとうございました



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