OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.104236
  • 閲覧数827
  • ありがとう数7
  • 気になる数0
  • 回答数4
  • コメント数0

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

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

  • 回答No.4
レベル12

ベストアンサー率 65% (276/422)

田吾作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について勉強していこうと思います。
投稿日時 - 2001-07-17 09:49:59
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル12

ベストアンサー率 65% (276/422)

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

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

でわでわ。
お礼コメント
noname#3887

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

ベストアンサー率 65% (276/422)

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

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

でわでわ
お礼コメント
noname#3887

画像の透過転送は、自分の絵でもやってみたんですけど、PictureBoxなどオブジェクトじゃないと駄目ですよね?デスクトップに直接、というのは無理ですか?
またフォームの変形は、丸とか四角とかじゃなくて自分の絵と同じ形にしたい時は、多角形という事にしてザクザクやってくんでしょうか?

初心者は諦めてAPIを初めから勉強した方が良いんでしょうかね?
知識不足で本当にすみませんm(T-T)m

投稿日時 - 2001-07-16 09:43:32
  • 回答No.3
レベル12

ベストアンサー率 65% (276/422)

どもども田吾作7です。 大丈夫ですよ。僕もAPIは最初は分からなかったでしたから・・・ ハンドル、デバイスコンテキスト、LONG型でデータを受信したのになぜ文字列がその中から抽出できるの?などなど・・・奥が深いですが、逃げていてはVBの枠から抜け出せなくなります。 >画像の透過転送は、自分の絵でもやってみたんですけど、あれはPictureBoxなどオブジェクトじゃないと駄目ですよね?デ ...続きを読む
どもども田吾作7です。

大丈夫ですよ。僕もAPIは最初は分からなかったでしたから・・・
ハンドル、デバイスコンテキスト、LONG型でデータを受信したのになぜ文字列がその中から抽出できるの?などなど・・・奥が深いですが、逃げていてはVBの枠から抜け出せなくなります。

>画像の透過転送は、自分の絵でもやってみたんですけど、あれはPictureBoxなどオブジェクトじゃないと駄目ですよね?デスクトップに直接、というのは無理ですか?
またフォームの変形は、丸とか四角とかじゃなくて自分の絵と同じ形にしたい時は、多角形という事にしてザクザクやってくんでしょうか?
たぶんなのですが。。。デスクトップに直接書くってできるのかな?
方法としてはフォームに書いて、フォームをその形に切り抜く方法しか思い浮かばないのですが・・・
僕もはじめてリージョンに今触れましたけど、リージョンを作成する方法はいろいろあります。多角形の座標を指定する方法、楕円と外接する四角形の体格する2点を指定する方法と大きく二つがありますが、その2つの方法の中でもさらに細かく別れているようです。
図というのは円・多角形だけではないですよね?そのときは円・多角形を組み合わせて使うようです。その組み合わせ方にもいろいろあるようです。

>初心者は諦めてAPIを初めから勉強した方が良いんでしょうかね?
>知識不足で本当にすみませんm(T-T)m
(・_・三・_・)ウウン そんな事、絶対無い!!

僕が言語を覚えたのは、本と掲示板です。
とにかくしつこく質問。(嫌われない程度に・・・)
そして自分で実験。関連する項目もチェック。
それの繰り返しが大事だと思いますよ。

初心者はAPIを避けがちですが、いずれは通る道です。VBだから避けることも出来ますが、C言語でやろうとした場合は最初から通る道なのです。ちょっとVBではなかった考え方が入り込むために、ちょっと厄介ですが、APIに触れるいい機会だと思いませんか?
でわでわ
お礼コメント
noname#3887

そうですよね、いずれは通る道ですもんね!APIって聞くと少し引いてたんですけど、なんかすごくやる気っていうか勇気っていうか出てきました!良い機会だと思って頑張りたいですp(^-^)q
教えて下さる方がいるだけでホントありがたいです(^^)ありがとうございます。
投稿日時 - 2001-07-16 16:46:48
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ