• ベストアンサー

VBでデスクトップアクセサリを作りたい

VB6を始めたばかりの超初心者です。すごいくだらない質問かもしれませんが、教えて下さい(^^;) デスクトップアクセサリを作りたいのですが、VBで作れますか? 具体的には、例えばりんごの絵を表示したい時に、実行するとりんごの絵の部分だけ表示されて、余白の部分は表示されない(余白の部分はデスクトップの壁紙が見える)というような物を作りたい時にどうすれば良いか教えて下さい!ほんと初心者の質問ですみませんm(__;)mお願いします! それから、VBでデスクトップアクセサリを作る時に参考にするのに、何か良いHPがあれば教えて下さい。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

田吾作7です。 とりあえず、ぼくもいろいろやってみました。いやー勉強になりました。 いちばん簡単だと思った方法をとりあえずアップしておきます。 以下のソースをフォームに貼り付けてください。 Formのプロパティで、 BorderLine=なし ScaleMode=ピクセル に設定してください。 ドラッグできるようにしてますが、ドラッグルーチンをはずしたら、ドラッグ付加になります。ついでにShowInTaskbar=Falseにしてやれば、デスクトップに書いたようになりませんか? Option Explicit Private Type POINTAPI X As Long Y As Long End Type Private Const WM_NCLBUTTONDOWN = &HA1 Private Const HTCAPTION = 2 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function ReleaseCapture Lib "user32" () As Long Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Sub Form_DblClick() 'フォームをダブルクリックしたら終了 Unload Me End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 'エスケープキーを押されたら終了 Select Case KeyCode Case vbKeyEscape Unload Me End Select End Sub Private Sub Form_Load() Dim wkWnd As Long Dim wkPoint(3) As POINTAPI Dim wkRgn As Long With Me 'パスブラケットを開く Call BeginPath(.hdc) '三角形の描画 wkPoint(0).X = 100 wkPoint(0).Y = -10 wkPoint(1).X = 100 wkPoint(1).Y = 100 wkPoint(2).X = -10 wkPoint(2).Y = 100 Call Polygon(.hdc, wkPoint(0), 3) '楕円の描画 Call Ellipse(.hdc, 0, 0, .ScaleWidth, .ScaleHeight) 'パスブラケットを閉じる Call EndPath(.hdc) 'リージョンの作成 wkRgn = PathToRegion(.hdc) 'リージョンをウィンドウにセット Call SetWindowRgn(.hwnd, wkRgn, 1) End With End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'フォームのドラッグ Call SbDragStart(Me) End Sub 'ドラッグルーチン Public Sub SbDragStart(Frm As Form) 'フォームのドラッグルーチン ReleaseCapture Call SendMessage(Frm.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&) End Sub 実験方法としてはPolygonとEllipseによってリージョンを作成する座標が決定してますので、どちらかをコメントすると、よりそれぞれの機能を勉強することが出来ると思います。 でわでわ

noname#3887
質問者

お礼

親切に教えて下さって、どうもありがとうございました!!(^^) これから自分でもAPIについて勉強していこうと思います。

その他の回答 (3)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

どもども田吾作7です。 大丈夫ですよ。僕もAPIは最初は分からなかったでしたから・・・ ハンドル、デバイスコンテキスト、LONG型でデータを受信したのになぜ文字列がその中から抽出できるの?などなど・・・奥が深いですが、逃げていてはVBの枠から抜け出せなくなります。 >画像の透過転送は、自分の絵でもやってみたんですけど、あれはPictureBoxなどオブジェクトじゃないと駄目ですよね?デスクトップに直接、というのは無理ですか? またフォームの変形は、丸とか四角とかじゃなくて自分の絵と同じ形にしたい時は、多角形という事にしてザクザクやってくんでしょうか? たぶんなのですが。。。デスクトップに直接書くってできるのかな? 方法としてはフォームに書いて、フォームをその形に切り抜く方法しか思い浮かばないのですが・・・ 僕もはじめてリージョンに今触れましたけど、リージョンを作成する方法はいろいろあります。多角形の座標を指定する方法、楕円と外接する四角形の体格する2点を指定する方法と大きく二つがありますが、その2つの方法の中でもさらに細かく別れているようです。 図というのは円・多角形だけではないですよね?そのときは円・多角形を組み合わせて使うようです。その組み合わせ方にもいろいろあるようです。 >初心者は諦めてAPIを初めから勉強した方が良いんでしょうかね? >知識不足で本当にすみませんm(T-T)m (・_・三・_・)ウウン そんな事、絶対無い!! 僕が言語を覚えたのは、本と掲示板です。 とにかくしつこく質問。(嫌われない程度に・・・) そして自分で実験。関連する項目もチェック。 それの繰り返しが大事だと思いますよ。 初心者はAPIを避けがちですが、いずれは通る道です。VBだから避けることも出来ますが、C言語でやろうとした場合は最初から通る道なのです。ちょっとVBではなかった考え方が入り込むために、ちょっと厄介ですが、APIに触れるいい機会だと思いませんか? でわでわ

noname#3887
質問者

お礼

そうですよね、いずれは通る道ですもんね!APIって聞くと少し引いてたんですけど、なんかすごくやる気っていうか勇気っていうか出てきました!良い機会だと思って頑張りたいですp(^-^)q 教えて下さる方がいるだけでホントありがたいです(^^)ありがとうございます。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

どもども田吾作7です。 APIとか使ったことありますか?WindowsディレクトリにはいってるDLLファイルを使用する命令です。画像の透過というのは、本来のVBの機能では実現できません。これは他の言語でも一緒です。先に述べたDLLファイルをどの言語でも呼び出すことになることでしょう。ただ記述方法が多少違うだけで、ほとんど一緒です。 でわでわ

noname#3887
質問者

お礼

画像の透過転送は、自分の絵でもやってみたんですけど、PictureBoxなどオブジェクトじゃないと駄目ですよね?デスクトップに直接、というのは無理ですか? またフォームの変形は、丸とか四角とかじゃなくて自分の絵と同じ形にしたい時は、多角形という事にしてザクザクやってくんでしょうか? 初心者は諦めてAPIを初めから勉強した方が良いんでしょうかね? 知識不足で本当にすみませんm(T-T)m

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

どもども田吾作7です。 画像の一部透過、切抜きですね。 VBでも何でも出来ます。 手順としては、画像をフォームに描画し、 フォームを変形させるリージョン(Region)って機能です。 でわでわ。

noname#3887
質問者

お礼

ご解答ありがとうございます。 自宅のパソコンはインターネット接続していなくて、いつも大学の図書館のパソコンを使っているので、返事が遅くなってしまいました。大学の図書館は土日は開いているけど5時で閉館なんです。すみませんでしたm(_ _)m フォームの変形が出来るのは知っていましたが、どうやるのか全然分からなくて…。APIは使った事無いです。 (^-^)ありがとうございました!

関連するQ&A