
VB6を始めたばかりの超初心者です。すごいくだらない質問かもしれませんが、教えて下さい(^^;)
デスクトップアクセサリを作りたいのですが、VBで作れますか?
具体的には、例えばりんごの絵を表示したい時に、実行するとりんごの絵の部分だけ表示されて、余白の部分は表示されない(余白の部分はデスクトップの壁紙が見える)というような物を作りたい時にどうすれば良いか教えて下さい!ほんと初心者の質問ですみませんm(__;)mお願いします!
それから、VBでデスクトップアクセサリを作る時に参考にするのに、何か良いHPがあれば教えて下さい。お願いします。
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によってリージョンを作成する座標が決定してますので、どちらかをコメントすると、よりそれぞれの機能を勉強することが出来ると思います。
でわでわ
No.3
- 回答日時:
どもども田吾作7です。
大丈夫ですよ。僕もAPIは最初は分からなかったでしたから・・・
ハンドル、デバイスコンテキスト、LONG型でデータを受信したのになぜ文字列がその中から抽出できるの?などなど・・・奥が深いですが、逃げていてはVBの枠から抜け出せなくなります。
>画像の透過転送は、自分の絵でもやってみたんですけど、あれはPictureBoxなどオブジェクトじゃないと駄目ですよね?デスクトップに直接、というのは無理ですか?
またフォームの変形は、丸とか四角とかじゃなくて自分の絵と同じ形にしたい時は、多角形という事にしてザクザクやってくんでしょうか?
たぶんなのですが。。。デスクトップに直接書くってできるのかな?
方法としてはフォームに書いて、フォームをその形に切り抜く方法しか思い浮かばないのですが・・・
僕もはじめてリージョンに今触れましたけど、リージョンを作成する方法はいろいろあります。多角形の座標を指定する方法、楕円と外接する四角形の体格する2点を指定する方法と大きく二つがありますが、その2つの方法の中でもさらに細かく別れているようです。
図というのは円・多角形だけではないですよね?そのときは円・多角形を組み合わせて使うようです。その組み合わせ方にもいろいろあるようです。
>初心者は諦めてAPIを初めから勉強した方が良いんでしょうかね?
>知識不足で本当にすみませんm(T-T)m
(・_・三・_・)ウウン そんな事、絶対無い!!
僕が言語を覚えたのは、本と掲示板です。
とにかくしつこく質問。(嫌われない程度に・・・)
そして自分で実験。関連する項目もチェック。
それの繰り返しが大事だと思いますよ。
初心者はAPIを避けがちですが、いずれは通る道です。VBだから避けることも出来ますが、C言語でやろうとした場合は最初から通る道なのです。ちょっとVBではなかった考え方が入り込むために、ちょっと厄介ですが、APIに触れるいい機会だと思いませんか?
でわでわ
そうですよね、いずれは通る道ですもんね!APIって聞くと少し引いてたんですけど、なんかすごくやる気っていうか勇気っていうか出てきました!良い機会だと思って頑張りたいですp(^-^)q
教えて下さる方がいるだけでホントありがたいです(^^)ありがとうございます。
No.2
- 回答日時:
どもども田吾作7です。
APIとか使ったことありますか?WindowsディレクトリにはいってるDLLファイルを使用する命令です。画像の透過というのは、本来のVBの機能では実現できません。これは他の言語でも一緒です。先に述べたDLLファイルをどの言語でも呼び出すことになることでしょう。ただ記述方法が多少違うだけで、ほとんど一緒です。
でわでわ
画像の透過転送は、自分の絵でもやってみたんですけど、PictureBoxなどオブジェクトじゃないと駄目ですよね?デスクトップに直接、というのは無理ですか?
またフォームの変形は、丸とか四角とかじゃなくて自分の絵と同じ形にしたい時は、多角形という事にしてザクザクやってくんでしょうか?
初心者は諦めてAPIを初めから勉強した方が良いんでしょうかね?
知識不足で本当にすみませんm(T-T)m
No.1
- 回答日時:
どもども田吾作7です。
画像の一部透過、切抜きですね。
VBでも何でも出来ます。
手順としては、画像をフォームに描画し、
フォームを変形させるリージョン(Region)って機能です。
でわでわ。
ご解答ありがとうございます。
自宅のパソコンはインターネット接続していなくて、いつも大学の図書館のパソコンを使っているので、返事が遅くなってしまいました。大学の図書館は土日は開いているけど5時で閉館なんです。すみませんでしたm(_ _)m
フォームの変形が出来るのは知っていましたが、どうやるのか全然分からなくて…。APIは使った事無いです。
(^-^)ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- モニター・ディスプレイ Win11マルチディスプレイでの異なる仮想デスクトップの表示 3 2023/02/01 10:02
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Windows 10 パソコンの起動時、画面が黒いままのトラブルにつきまして。 4 2022/10/02 18:02
- Visual Basic(VBA) VBプロジェクトでのフォルダ構成について 1 2023/07/22 03:49
- フリーソフト アイコンとして保存アプリが不調 2 2022/04/16 06:39
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- WordPress(ワードプレス) WordpressでYouTubeの埋め込みができない。 1 2022/10/26 01:08
- Ameba(アメーバブログ) 動画をmp4形式でパソコンに保存していますがコレをAmebaブログに掲載できますか? すみませんパソ 3 2022/09/29 14:00
- Android(アンドロイド) Huawei nova 5tのアプリが全部表に出ているのですが… 1 2022/06/04 16:14
- その他(スマホアプリ・スマホゲーム) アプリをスマホにダウンロード、インストールする方法 3 2022/08/13 11:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WindowsAPIでの画像表示について
-
PlgBltでの透過
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
Minecraft 統合版(PC)の描画距...
-
コントロールの書式設定で、“コ...
-
スピンボタンを右クリックして...
-
VB.NET2005 TextBox 高さ(Heig...
-
液晶14.1型SXGAの利便性
-
マウスの移動範囲を限定するに...
-
閉図形の座標の配列が右回りか...
-
チェックボックスのキーダウン...
-
ラジオボタンの初期指定
-
エクセルである行が急に消えて...
-
WM_SIZEを発生させる方法
-
C#で、ある条件でFormが自動で...
-
word
-
勝手にウィンドウが開いて止ま...
-
エディットボックスのフォント...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンテキスト依存とは?
-
PlgBltでの透過
-
OpenGLでウィンドウハンドルの取得
-
メモリデバイスコンテキストを...
-
GetDC()とCreateCompatibleDC()
-
ちらつきについて
-
VBでFD、USBの有効・無効...
-
Active Basic デバイスコンテ...
-
ExtTextOut
-
デバイスコンテキストとデバイ...
-
VC++のTextOutの再描画の仕方
-
画面がチカチカする
-
ハードコピーをプログラムから...
-
メモリデバイスコンテキスト&...
-
C++でBMP解析
-
C 多角形を半透明に塗る方法
-
領域を塗りつぶしたい
-
コントロール内の文字の背景色
-
GetPixelに使うHDCの作り方
-
丸いボタンの表示でCPU100%
おすすめ情報