ページ 11

イメージボックスにアイコンを表示

Posted: 2006年7月17日(月) 17:57
by BASIC32
早速ですが、イメージボックスにアイコンを、表示させることはできます。(RADで)
ですが、それは32*32のアイコンだけ表示され、
16*16のアイコンを表示しようとすると、32*32に拡大されて表示されます。
これは、ActiveBasicの仕様なのでしょうか。

もし、仕様なら、無理矢理でも表示させる方法は、無いのでしょうか。
環境は、以下の通りです。
OS:WindowsMe
ABのバージョン:4.24

返信、よろしくお願いいたします。

Posted: 2006年7月17日(月) 18:03
by C1000
プログラムの中からなら表示する方法を見つけました。
http://resume-next.hp.infoseek.co.jp/data/Win3.html

コード: 全て選択

'グローバル変数
Dim hImage As DWord

'ウィンドウ作成時
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hImage=LoadImage(GetModuleHandle(0),IDI_ICON1,IMAGE_ICON,16,16,LR_DEFAULTCOLOR)
SendMessage(GetDlgItem(hMainWnd,ImageBox1),STM_SETIMAGE,IMAGE_ICON,hImage)
End Sub

良かった。。。

Posted: 2006年7月17日(月) 18:45
by BASIC32
> プログラムの中からなら表示する方法を見つけました。
> http://resume-next.hp.infoseek.co.jp/data/Win3.html
>

コード: 全て選択

'グローバル変数
> Dim hImage As DWord
> 
> 'ウィンドウ作成時
> Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
> hImage=LoadImage(GetModuleHandle(0),IDI_ICON1,IMAGE_ICON,16,16,LR_DEFAULTCOLOR)
> SendMessage(GetDlgItem(hMainWnd,ImageBox1),STM_SETIMAGE,IMAGE_ICON,hImage)
> End Sub
> 
それです。
ありがとうございます。

あとですね、コマンドボタンに、アイコンと文字列を表示する方法は、ありませんか?

Posted: 2006年7月17日(月) 18:53
by konisi
コマンドボタンに画像を貼り付ける方法は、僕は試行錯誤しているところで分かりません。

※その時はコマンドボタンそのものを擬似的に作って、自分で描画するっていう方法に切り替えました。

画像だけなら。。。

Posted: 2006年7月17日(月) 19:06
by BASIC32
画像だけをコマンドボタンに表示する方法なら、コードの切れ端の中の、
BackSearchAB.chm の中を探せば、見つかりますよ。

Posted: 2006年7月17日(月) 20:53
by ゲスト
ビットマップ作って貼り付ければいいのでは?

Posted: 2006年7月19日(水) 16:50
by BASIC32
> ビットマップ作って貼り付ければいいのでは?
確かに、そうですが、
GetWindowText 関数等で、文字を取得できない事や、
ResouceHacker等で、文字入りビットマップを見られたくないので。。。
なるべく、文字とアイコン(orビットマップ)を、ボタンに表示させる方法が、
いいのですが。。。
わがままばかりで、すみません。

Posted: 2006年7月19日(水) 18:29
by konisi
相当面倒ですが、SetPixel関数で直に描画したほうが早いかもしれません。

Posted: 2006年7月21日(金) 21:22
by C1000
BackSearchABの中にありました。

コード: 全て選択

SendMessage(GetDlgItem(hMainWnd, CB_TEST), _
BM_SETIMAGE, IMAGE_ICON, _
LoadIcon(CreateStruct.hInstance, IDI_ICON1))

Posted: 2006年7月21日(金) 21:53
by NoWest
こんなんでどうでしょうか?

コード: 全て選択

Dim hBmp As HBITMAP

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
	Dim hDC As HDC
	hDC=GetDC(hMainWnd)

	Dim hBmpDC As HDC
	hBmpDC=CreateCompatibleDC(hDC)

	hBmp=LoadBitmap(CreateStruct.hInstance,IDB_BITMAP1)

	DeleteObject(SelectObject(hBmpDC,hBmp))
	ReleaseDC(hMainWnd,hDC)

	SetBkMode(hBmpDC,TRANSPARENT)
	TextOut(hBmpDC,5,5,"TEST",4)

	SendMessage(GetDlgItem(hMainWnd,CommandButton1),BM_SETIMAGE,IMAGE_BITMAP,hBmp)

	DeleteDC(hBmpDC)
End Sub
hBmpはDestroyイベントででもDeleteObjectで破棄してください。

とりあえず。

Posted: 2006年7月24日(月) 08:57
by BASIC32
NoWestさんのコードで、とりあえずは表示できました。
ありがとうございます。
ただ気になったのが、16*16のビットマップをIDB_BITMAP1に指定して、
デバッグすると、そのビットマップの中に、”TEST”が表示されるようです。
結果、ビットマップの中に”T"しか、表示されませんでした。
環境が、原因でしょうか。。。

これから、このコードを改良してみます。
うまく表示されたら、報告します。

Re: とりあえず。

Posted: 2006年7月24日(月) 10:38
by ノッチ
> NoWestさんのコードで、とりあえずは表示できました。
> ありがとうございます。
> ただ気になったのが、16*16のビットマップをIDB_BITMAP1に指定して、
> デバッグすると、そのビットマップの中に、”TEST”が表示されるようです。
> 結果、ビットマップの中に”T"しか、表示されませんでした。
> 環境が、原因でしょうか。。。
>
> これから、このコードを改良してみます。
> うまく表示されたら、報告します。

NoWestさんじゃないですがコードの解説を。
Buttonにはもともとビットマップを貼り付ける機能があるので、
文字入りのビットマップを作成して表示させるというものです。
ですので用意するビットマップにはあらかじめ文字を表示するためのスペースを
用意しておき、
TextOut(hBmpDC,5,5,"TEST",4)
の5,5の部分をビットマップがかぶらなくなるX、Y座標にあわせてみて下さい。

ビットマップと文字の両方を表示させる機能がボタンにあればいいのですが、
どちらかしかできないのでNoWestさんのやり方が一番簡単だと思います。

それしか無さそう・・・

Posted: 2006年7月25日(火) 07:54
by BASIC32
どうやら、ビットマップをうまく編集する意外に、方法は無さそうですね。。。
とりあえず、その方法で行きます。
ありがとうございました。