ボタンでどうすれば?


マグ  2004-07-27 11:32:26  No: 115085  IP: [192.*.*.*]

環境:VB.NET

ボタンを自分の作った画像にしたいんですけれど、
どうすれば変えることが出来るのでしょうか?

あと、
楕円形に膨らんだように見せるボタンの作り方を教えてください。
持ってるソフト:
PhotoShopCS
SollidWorks
です。
これらで出来ますでしょうか?

やり方を教えてください。
お願いします。

編集 削除
特攻隊長まるるう  2004-07-27 11:49:59  No: 115086  IP: [192.*.*.*]

[ボタンの表面を自分で描画する]
http://dobon.net/vb/dotnet/control/btnownerdraw.html
[フォームやコントロールの形を変える]
http://dobon.net/vb/dotnet/form/formregion.html

編集 削除
マグ  2004-07-27 12:10:11  No: 115087  IP: [192.*.*.*]

ところで、
>[フォームやコントロールの形を変える]
http://dobon.net/vb/dotnet/form/formregion.html

これってなにに使うのでしょうか?

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

それともう一つ

楕円形に膨らんだように見せるボタンの作り方を教えてください。
画像でどのように描けば出来るかわかりません。
お願いします。

編集 削除
マグ  2004-07-27 22:36:59  No: 115088  IP: [192.*.*.*]

ボタンに作った画像を描くのではなく、
ボタンを見たときにボタンが作った画像に変わっているようにしたいのですけれど、
どうすれば良いか教えてください。

あと、上の質問もお願いします。

編集 削除
 2004-07-28 07:56:49  No: 115089  IP: [192.*.*.*]

>>マグさんへ
楕円形に膨らんだように見える画像を貼り付けてください。
画像についてはホームページ用の素材集等が参考になると思います。

編集 削除
マグ  2004-07-28 11:10:02  No: 115090  IP: [192.*.*.*]

では、表示されているのをボタンではなく、画像に変えたいのですけれど、
どうすればいいのでしょうか?

円形ボタンなどにしたいときに画像に透明化をかけて、
特攻隊長まるるうさんに教えてくれた方法で行いましたが、
失敗しました。
透明化をかけた所が黒くなって表示されてしまいます。

編集 削除
長谷川  2004-07-28 11:42:45  No: 115091  IP: [192.*.*.*]

#仰っていることがよくわかりませんが・・・

ボタンの形を楕円などの四角形以外の形にしたい、ということでしょうか?
であれば、
>[フォームやコントロールの形を変える]
>http://dobon.net/vb/dotnet/form/formregion.html
でボタンの形を楕円にして、そこに画像を描画(貼り付け?)すればよいのではないでしょうか?

編集 削除
マグ  2004-07-28 14:02:18  No: 115092  IP: [192.*.*.*]

コントロールの形を変えることができました。

そして、問題があって、質問しました。

表示した画像のTop,Left,Width,Heightはどのようにして、取得するのでしょうか?

この座標を取得して、ボタンの形を変更させたいと思って、探しているのですが、わかりません。

知っている方がいるならば、教えてください。
お願いします。

編集 削除
マグ  2004-07-28 16:26:43  No: 115093  IP: [192.*.*.*]

ソースを書いたのですけれど、

楕円形のボタンが表示されません。

========ソース======================

        'Button1の背景画像を設定
        Button1.BackgroundImage = Image.FromFile("C:\test.png")
        'Button1のPaintイベントハンドラを追加
        AddHandler Button1.Paint, AddressOf Button1_Paint
        Button1.SetBounds(64, 184, 100, 50)
        '頂点の座標を書きます。
        Dim points() As Point = _
        {New Point(0, 0), _
        New Point(80, 0), _
        New Point(80, 30), _
        New Point(0, 30)}
        '次に何で結ぶかを書きます。
        Dim types() As Byte = _
        {Drawing.Drawing2D.PathPointType.Line, _
        Drawing.Drawing2D.PathPointType.Line, _
        Drawing.Drawing2D.PathPointType.Line, _
        Drawing.Drawing2D.PathPointType.Line}
        'あとは、これで指定して完了です。
        Dim path As New Drawing2D.GraphicsPath(points, types)
        '形を変えたいコントロール名.Region = New Region(path)
        'Button1.Region = New Region(path)
        Button1.Region = New Region(path)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show("ボタンがクリックされました。")
    End Sub

    Private Sub Button1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Button1.Paint
        Dim btn As Button = CType(sender, Button)
        'ボタンの背景画像をボタンの大きさに合わせて描画
        e.Graphics.DrawImage(btn.BackgroundImage, btn.ClientRectangle)

        'ボタンのTextを描画する準備
        Dim sf As New StringFormat
        '文字列を真ん中に描画
        sf.Alignment = StringAlignment.Center
        sf.LineAlignment = StringAlignment.Center
        '&がアンダーラインになるようにする
        sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show
        'Brushの作成
        Dim brsh = New SolidBrush(btn.ForeColor)
        '文字列を描画
        e.Graphics.DrawString(btn.Text, btn.Font, brsh, _
            RectangleF.op_Implicit(btn.ClientRectangle), sf)
        brsh.Dispose()
    End Sub

=============================================================

楕円形に作った画像をボタンに表示して、ボタンの大きさを変えたんですけれど、画像もボタンと一緒にトリムされたような表示になってしまいます。
何処が原因でしょうか?

あと、上の質問もお願いします。

編集 削除
長谷川  2004-07-28 17:53:34  No: 115094  IP: [192.*.*.*]

.NETは全然いじっていないのでMSDNを参照しつつの返事です

上記のソースだと、ボタンを幅80,高さ30(単位は?)の長方形にしています。
楕円にするのであれば、

        'Button1の背景画像を設定
        Button1.BackgroundImage = Image.FromFile("C:\test.png")
        'Button1のPaintイベントハンドラを追加
        AddHandler Button1.Paint, AddressOf Button1_Paint
        Button1.SetBounds(64, 184, 100, 50)
        'あとは、これで指定して完了です。
        Dim path As New Drawing2D.GraphicsPath()
        path.AddEllipse(New Rectangle(0,0,80,30))
        '形を変えたいコントロール名.Region = New Region(path)
        'Button1.Region = New Region(path)
        Button1.Region = New Region(path)

とかでどうでしょうか?(.NET環境が手元にないので未確認です)

編集 削除
長谷川  2004-07-28 17:57:18  No: 115095  IP: [192.*.*.*]

画像のTop,Left,Width,Heightは、
BackgroundImageプロパティからImageオブジェクトを取得して、
取得したImageオブジェクトのSizeプロパティをみれば分かるのではないでしょうか?

#やはりこちらもMSDNライブラリをたどっただけで動作は未確認です

編集 削除
マグ  2004-07-28 21:03:45  No: 115096  IP: [192.*.*.*]

これも失敗しました。(TT)

そして、ある方法を思いつきました。

画像を表示して、ボタンを透明化にすれば、おそらく、出来るかも?っと
思いましたが・・・

ボタンを透明化にする方法を教えてください。
お願いします。

あと、画像のWidthとHeightを取得できました。
ありがとうございます。

編集 削除
長谷川  2004-07-28 22:20:01  No: 115097  IP: [192.*.*.*]

環境を作って試してみました。

とりあえず、楕円形にはなりましたけれども・・・
もしかして、求めているのは"立体的な楕円形のボタン"でしょうか?
掲示したソースは形を変える(というか描画領域を変える)ものなので、
立体的には自前で描画してあげなければなりません。

それから、先ほど掲示したソースは座標が適当だったので。
        Button1.SetBounds(64, 184, 100, 50)
        Dim path As New Drawing2D.GraphicsPath()
        path.AddEllipse(New Rectangle(0,0,100,50))
        Button1.Region = New Region(path)
とかにすると少しはまともになるかもしれません。

編集 削除
マグ  2004-07-28 22:56:15  No: 115098  IP: [192.*.*.*]

そうです。

立体的な楕円形のボタンです。
もし、それを描いたことがある方がいるならば、
描き方を教えてください。
お願いします。

編集 削除
GS  2004-07-29 07:52:10  No: 115099  IP: [192.*.*.*]

自分でコントロール作った方が早いような・・・

Ex...
ピクチャーボックスを2つ同じ大きさで用意します。
pic1に通常時の画像、もう片方(pic2)にマウスを乗せた時の画像を設定します
(影を書き足せばそれなりに見えるでしょう)
でpic1のオンマウスイベントにpic1を見えなくするコードを書きます。
pic2のリーブマウスイベントにpic1を表示させるコードを書き足します。
マウスを乗せる度にAPIで音を発生させればそれなりに聞こえますし・・・

後で暇ならサンプル作ります。

編集 削除
マグ  2004-07-29 11:28:16  No: 115100  IP: [192.*.*.*]

この方法で立体的な楕円型ボタンになるでしょうか?

ならないような気がします。
楕円形の形をした画像が中に浮いているような画像になるような気がします。

あと、ボタンを透明化にするにはどのようにソースを記載したらいいでしょうか?

編集 削除
GS  2004-07-29 19:03:20  No: 115101  IP: [192.*.*.*]

http://up.isp.2ch.net/up/052455c0bf54.zip
こんなんできました。立体的な画像書くのが面倒なのでべたべたですが・・・
星型のボタンでも渦巻き状のボタンでも好きなように作れます。

編集 削除
マグ  2004-07-29 20:50:06  No: 115102  IP: [192.*.*.*]

元の音楽ファイルがないのに
どうやって音を出しているのでしょうか?

編集 削除
マグ  2004-07-29 20:58:08  No: 115103  IP: [192.*.*.*]

それともう一つ

PUSH MEをクリックした時に表示されるThanks というのは
画像ですか?

もし、画像ならば、何処に画像ファイルがあるのでしょうか?

解凍したときに実行ファイルしか出てきません。
元の素材がないのですけれど、どのように音を鳴らしたり、表示したりしているか分かりません。

編集 削除
GS  2004-07-29 21:22:30  No: 115104  IP: [192.*.*.*]

Push me と書かれたボタンもドローしたのではなく画像です。
それぞれデザイン時にピクチャーボックスのイメージに設定したものなので実行ファイルに埋め込まれていると思います。

またサウンドファイルもリソースに埋め込まれています。

編集 削除
マグ  2004-07-30 11:29:20  No: 115105  IP: [192.*.*.*]

サウンドファイルはどのようにして、リソースに埋め込むのでしょうか?

それと、Thanksと書かれたような画像ファイルのように立体的に見えるように
描くにはどうしたらいいのでしょうか?
うまく、描けません。(TT)

編集 削除
GS  2004-07-30 16:40:00  No: 115106  IP: [192.*.*.*]

実行ファイルへの埋め込み・読み取り方法は
http://dobon.net/vb/dotnet/programing/bitmapresource.html
 
>>立体的に見えるように描くにはどうしたらいいのでしょうか?
・・・畑が違います。
ただ標準コントロールのボタンを参考にするとどこに影・光沢をつけるかがわかると思いますが。

編集 削除
マグ  2004-07-31 16:32:33  No: 115107  IP: [192.*.*.*]

リソースに画像ファイルを埋め込んで、
Labelに表示させようと思って、ソースを記載したのですですけれど、
なぜか、エラーが出てしまいます。

Dim asm As System.Reflection.Assembly = _
                                    System.Reflection.Assembly.GetExecutingAssembly()
        Label1.BackgroundImage = Image.FromFile(asm.GetManifestResourceStream("WindowsApplication2.ccc.JPG"))

と入力したんですが、
型'System.IO.Stream'の値を'String'に変換できませんでした。というエラーが発生しました。
どうすればいいかわかりません。
教えてください。

編集 削除
GS  2004-08-01 01:23:36  No: 115108  IP: [192.*.*.*]

>>型'System.IO.Stream'の値を'String'に変換できませんでした
それは「FromFile」の引数にはファイル名を指定しないといけませんので・・・

Dim asm As System.Reflection.Assembly = _
                                    System.Reflection.Assembly.GetExecutingAssembly()
        Label1.BackgroundImage = Image.FromStream(asm.GetManifestResourceStream("WindowsApplication2.ccc.JPG"))

編集 削除
マグ  2004-08-01 11:26:09  No: 115109  IP: [192.*.*.*]

FromFileではなく、FromStreamだったんですね。

気がつきませんでした。
ありがとうございました。

もしかして、リソースから読み込んだデータをストリームに渡す必要があるのですか?

編集 削除