exeファイルのアイコンを取得してそのアイコンをコマンドボタンに表示したいのですが、やりかたがわからず困っています。わかる人がいましたらどうか教えてください。
んと、アイコンハンドルを取得し、それを書きます。両方APIです。
…つかいかたは、ここにあるAPIサンプルで。
そのAPIを使ってやってみたのですがわかりません。
コマンドボタンのピクチャーを描画先に指定しているのですが、なぜか描画されません。なぜなんですか?
えーと…。
あ、そうだ、コマンドボタンにはできなかったんだっけ…。
ごめんなさい^^;
じゃあどうしましょうか…、
一度どこかに書きこんでおいて、
ファイルに保存すれば、Pictureプロパティに入れることができますけど…。
それか、ユーザーコントロールで、ボタンと同じ動作をするものを作るか、
ですね、
そっちのほうが、あとでいろいろ便利なので、いいことはいいんですけど、
コマンドボタンと同等の…というと、結構大変そうです。
そうだったんですか・・。コマンドボタンにはできなかったんですね。
今はランチャーを作っていてそれでアイコンをコマンドボタンに描画したいんです。でもできないなんて・・・。
ユーザーコントロールを使えばできるんですか?どういうものかは知りませんが。
なんとかならないでしょうか?
>アイコンをコマンドボタンに描画したいんです。でもできないなんて・・・。
オーナードローすればできるでしょうが、
かなりの技術力が必要かと・・・。
パフォーマンスが気にならないなら複合ActiveXコントロール
作ったほうがはるかに楽ですね。
といってもそれなりの知識は必要ですが・・・。
うーん、ランチャーだったらちょっと、
パフォーマンスを気にしないといけなさそうですねぇ…。
ユーザーコントロールで作る場合、
"とりあえず押せ"て、
"とりあえずはなすと元に戻る"程度のボタンなら、
結構簡単に作れると思います。
あと、HTMLのhover属性みたいな、
ボタンの上に乗ると出っぱって、離れると引っ込むみたいなものも…。
ただ、画像をはりつけたり、そういう処理が大変って言うだけで、
一度作ってしまえば、クラスを作るのより楽だし…。
わたしの知ってる限りの方法では、これしかないし、これが一番簡単かなと、
APIを直接使ってボタンを作っても、そこまでできるのかわからないし…。
ユーザーコントロールを作るのならば、まずマニュアルに、ちょっとした説明がのってると思います。
ただ、本来ActiveXコントロール作成用のものなので、
あんまり直接使うような説明はなされてません。
ただ、"ActiveXウィザード"みたいな項目があると思うので、
(VisualBasic6 Proの場合)
それを使えば、割と楽になるかな…。
わたしも、確かに結構ほしいコントロールですけどねぇ…。
うーん、ランチャーだったらちょっと、
パフォーマンスを気にしないといけなさそうですねぇ…。
ユーザーコントロールで作る場合、
"とりあえず押せ"て、
"とりあえずはなすと元に戻る"程度のボタンなら、
結構簡単に作れると思います。
あと、HTMLのhover属性みたいな、
ボタンの上に乗ると出っぱって、離れると引っ込むみたいなものも…。
ただ、画像をはりつけたり、そういう処理が大変って言うだけで、
一度作ってしまえば、クラスを作るのより楽だし…。
わたしの知ってる限りの方法では、これしかないし、これが一番簡単かなと、
APIを直接使ってボタンを作っても、そこまでできるのかわからないし…。
ユーザーコントロールを作るのならば、まずマニュアルに、ちょっとした説明がのってると思います。
ただ、本来ActiveXコントロール作成用のものなので、
あんまり直接使うような説明はなされてません。
ただ、"ActiveXウィザード"みたいな項目があると思うので、
(VisualBasic6 Proの場合)
それを使えば、割と楽になるかな…。
わたしも、確かに結構ほしいコントロールですけどねぇ…。
ユーザーコントロールを使うとどうやらできるみたいですね。ありがとうございます。自分で調べてやってみたいと思います。
またわからないことがありましたら質問させていただきます。
コマンドボタンにアイコンを表示する方法はそんなに難しくは
ないと思います。
以下の方法で出来ました。
1.APIの ExtractIconEx()関数を使い、アイコンのハンドルを取得。
2.APIの DrawIconEx()関数を使い、ピクチャーボックスにアイコンを
描画する。
3.コマンドボタンの Pictureオブジェクトに、2.で使用したピクチャ
−ボックスの Imegeオブジェクトをセットする。
注意する点は、ピクチャーボックスの大きさをアイコンのサイズにしておく
ことです。そうしないとアイコンの表示位置がずれてしまいます。
以下に、ソースコードを書いておきます。
参考にしてみてください。
- - - - - - - - - - - - - - - -
Option Explicit
Private Declare Function DrawIconEx Lib "user32" _
(ByVal hDC&, ByVal xLeft&, ByVal yTop&, ByVal hIcon& _
, ByVal cxWidth&, ByVal cyWidth&, ByVal istepIfAniCur& _
, ByVal hbrFlickerFreeDraw&, ByVal diFlags&) As Long
Private Declare Function ExtractIconEx Lib "shell32.dll" _
Alias "ExtractIconExA" (ByVal lpszFile As String _
, ByVal nIconIndex As Long, phiconLarge As Long _
, phiconSmall As Long, ByVal nIcons As Long) As Long
Private Declare Function DestroyIcon Lib "user32" _
(ByVal hIcon As Long) As Long
'ropImageとropMaskのラスタ操作を実行する
Const DI_NORMAL = &H3
Private Sub Command1_Click()
Dim lRet As Long ' 戻り値
Dim sFileName As String ' 取得するファイル名 & パス
Dim lLargeIcon As Long ' 大きいアイコン
' アイコン ハンドルの取得
sFileName = "C:\Winnt\Explorer.exe" ' エクスプローラを指定
lRet = ExtractIconEx(sFileName, 0, lLargeIcon, 0, 1)
' アイコンの描画
lRet = DrawIconEx(Picture1.hDC, 0, 0, lLargeIcon _
, 0, 0, vbNull, 0, DI_NORMAL)
Set Command2.Picture = Picture1.Image
' アイコン ハンドルの破棄
lRet = DestroyIcon(lLargeIcon)
End Sub
ツイート | ![]() |