環境:VB.NET
ボタンを自分の作った画像にしたいんですけれど、
どうすれば変えることが出来るのでしょうか?
あと、
楕円形に膨らんだように見せるボタンの作り方を教えてください。
持ってるソフト:
PhotoShopCS
SollidWorks
です。
これらで出来ますでしょうか?
やり方を教えてください。
お願いします。
[ボタンの表面を自分で描画する]
http://dobon.net/vb/dotnet/control/btnownerdraw.html
[フォームやコントロールの形を変える]
http://dobon.net/vb/dotnet/form/formregion.html
ところで、
>[フォームやコントロールの形を変える]
http://dobon.net/vb/dotnet/form/formregion.html
これってなにに使うのでしょうか?
ありがとうございました。
それともう一つ
楕円形に膨らんだように見せるボタンの作り方を教えてください。
画像でどのように描けば出来るかわかりません。
お願いします。
ボタンに作った画像を描くのではなく、
ボタンを見たときにボタンが作った画像に変わっているようにしたいのですけれど、
どうすれば良いか教えてください。
あと、上の質問もお願いします。
>>マグさんへ
楕円形に膨らんだように見える画像を貼り付けてください。
画像についてはホームページ用の素材集等が参考になると思います。
では、表示されているのをボタンではなく、画像に変えたいのですけれど、
どうすればいいのでしょうか?
円形ボタンなどにしたいときに画像に透明化をかけて、
特攻隊長まるるうさんに教えてくれた方法で行いましたが、
失敗しました。
透明化をかけた所が黒くなって表示されてしまいます。
#仰っていることがよくわかりませんが・・・
ボタンの形を楕円などの四角形以外の形にしたい、ということでしょうか?
であれば、
>[フォームやコントロールの形を変える]
>http://dobon.net/vb/dotnet/form/formregion.html
でボタンの形を楕円にして、そこに画像を描画(貼り付け?)すればよいのではないでしょうか?
コントロールの形を変えることができました。
そして、問題があって、質問しました。
表示した画像のTop,Left,Width,Heightはどのようにして、取得するのでしょうか?
この座標を取得して、ボタンの形を変更させたいと思って、探しているのですが、わかりません。
知っている方がいるならば、教えてください。
お願いします。
ソースを書いたのですけれど、
楕円形のボタンが表示されません。
========ソース======================
'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
=============================================================
楕円形に作った画像をボタンに表示して、ボタンの大きさを変えたんですけれど、画像もボタンと一緒にトリムされたような表示になってしまいます。
何処が原因でしょうか?
あと、上の質問もお願いします。
.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環境が手元にないので未確認です)
画像のTop,Left,Width,Heightは、
BackgroundImageプロパティからImageオブジェクトを取得して、
取得したImageオブジェクトのSizeプロパティをみれば分かるのではないでしょうか?
#やはりこちらもMSDNライブラリをたどっただけで動作は未確認です
これも失敗しました。(TT)
そして、ある方法を思いつきました。
画像を表示して、ボタンを透明化にすれば、おそらく、出来るかも?っと
思いましたが・・・
ボタンを透明化にする方法を教えてください。
お願いします。
あと、画像のWidthとHeightを取得できました。
ありがとうございます。
環境を作って試してみました。
とりあえず、楕円形にはなりましたけれども・・・
もしかして、求めているのは"立体的な楕円形のボタン"でしょうか?
掲示したソースは形を変える(というか描画領域を変える)ものなので、
立体的には自前で描画してあげなければなりません。
それから、先ほど掲示したソースは座標が適当だったので。
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)
とかにすると少しはまともになるかもしれません。
そうです。
立体的な楕円形のボタンです。
もし、それを描いたことがある方がいるならば、
描き方を教えてください。
お願いします。
自分でコントロール作った方が早いような・・・
Ex...
ピクチャーボックスを2つ同じ大きさで用意します。
pic1に通常時の画像、もう片方(pic2)にマウスを乗せた時の画像を設定します
(影を書き足せばそれなりに見えるでしょう)
でpic1のオンマウスイベントにpic1を見えなくするコードを書きます。
pic2のリーブマウスイベントにpic1を表示させるコードを書き足します。
マウスを乗せる度にAPIで音を発生させればそれなりに聞こえますし・・・
後で暇ならサンプル作ります。
この方法で立体的な楕円型ボタンになるでしょうか?
ならないような気がします。
楕円形の形をした画像が中に浮いているような画像になるような気がします。
あと、ボタンを透明化にするにはどのようにソースを記載したらいいでしょうか?
http://up.isp.2ch.net/up/052455c0bf54.zip
こんなんできました。立体的な画像書くのが面倒なのでべたべたですが・・・
星型のボタンでも渦巻き状のボタンでも好きなように作れます。
元の音楽ファイルがないのに
どうやって音を出しているのでしょうか?
それともう一つ
PUSH MEをクリックした時に表示されるThanks というのは
画像ですか?
もし、画像ならば、何処に画像ファイルがあるのでしょうか?
解凍したときに実行ファイルしか出てきません。
元の素材がないのですけれど、どのように音を鳴らしたり、表示したりしているか分かりません。
Push me と書かれたボタンもドローしたのではなく画像です。
それぞれデザイン時にピクチャーボックスのイメージに設定したものなので実行ファイルに埋め込まれていると思います。
またサウンドファイルもリソースに埋め込まれています。
サウンドファイルはどのようにして、リソースに埋め込むのでしょうか?
それと、Thanksと書かれたような画像ファイルのように立体的に見えるように
描くにはどうしたらいいのでしょうか?
うまく、描けません。(TT)
実行ファイルへの埋め込み・読み取り方法は
http://dobon.net/vb/dotnet/programing/bitmapresource.html
>>立体的に見えるように描くにはどうしたらいいのでしょうか?
・・・畑が違います。
ただ標準コントロールのボタンを参考にするとどこに影・光沢をつけるかがわかると思いますが。
リソースに画像ファイルを埋め込んで、
Labelに表示させようと思って、ソースを記載したのですですけれど、
なぜか、エラーが出てしまいます。
Dim asm As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly()
Label1.BackgroundImage = Image.FromFile(asm.GetManifestResourceStream("WindowsApplication2.ccc.JPG"))
と入力したんですが、
型'System.IO.Stream'の値を'String'に変換できませんでした。というエラーが発生しました。
どうすればいいかわかりません。
教えてください。
>>型'System.IO.Stream'の値を'String'に変換できませんでした
それは「FromFile」の引数にはファイル名を指定しないといけませんので・・・
Dim asm As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly()
Label1.BackgroundImage = Image.FromStream(asm.GetManifestResourceStream("WindowsApplication2.ccc.JPG"))
FromFileではなく、FromStreamだったんですね。
気がつきませんでした。
ありがとうございました。
もしかして、リソースから読み込んだデータをストリームに渡す必要があるのですか?