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

A 回答 (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によってリージョンを作成する座標が決定してますので、どちらかをコメントすると、よりそれぞれの機能を勉強することが出来ると思います。


でわでわ
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/17 09:49

どもども田吾作7です。



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

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

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

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

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

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

お礼日時:2001/07/16 16:46

どもども田吾作7です。



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

でわでわ
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2001/07/16 09:43

どもども田吾作7です。



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

でわでわ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/15 12:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qデスクトップ上でデジタル時計を表示させたい。

デスクトップ上でデジタル時計(大き目)を表示させるフリーソフトはあのりませんでしょうか?

Aベストアンサー

たくさんありますので、
試してください。

参考URL:http://www2s.biglobe.ne.jp/~takao777/versionupinfo/softslinks/302desktop.html

Q【vb6】フレックスグリッドの余白部分

お世話になります。

MSFlexGridの余白部分について質問があります。
(セルが全く無いデフォルトで灰色の地帯です)


現在、グリッドに数行のデータを設定して、
クリックしたらカレント行全体が選択されるようにしています。
問題は行の無い余白部分のことなのですが、もし○行目をカレントとして選択している時、
次に余白部分をクリックしたら今の行選択を解除したいと考えているのですが、上手くいきません。

”行選択を解除する”というのは.Rows=0で出来そうなのですが、
グリッドにはリストビュー等のように.Hittestのプロパティがない為余白部分が押されたことを知るには
どうしたら良いか検討が付きません。


どなたか知っている方がいらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

マウスが押されたときに、どこで押されたかを調べておいて、余白であったら .rowや.rowselなどを強制的に指定しちゃうという手があるね。 下記コードはそのものではないけどきっと参考になるでしょう。



Private mblnIgnoreDblClick As Boolean

Private Sub MSFlexGrid1_DblClick()
If Not mblnIgnoreDblClick Then
Debug.Print MSFlexGrid1.MouseRow, MSFlexGrid1.MouseCol
End If
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
mblnIgnoreDblClick = (y + 60) > (MSFlexGrid1.CellTop + MSFlexGrid1.CellHeight)
End Sub

参考URL:http://www.vbforums.com/showthread.php?t=355726

マウスが押されたときに、どこで押されたかを調べておいて、余白であったら .rowや.rowselなどを強制的に指定しちゃうという手があるね。 下記コードはそのものではないけどきっと参考になるでしょう。



Private mblnIgnoreDblClick As Boolean

Private Sub MSFlexGrid1_DblClick()
If Not mblnIgnoreDblClick Then
Debug.Print MSFlexGrid1.MouseRow, MSFlexGrid1.MouseCol
End If
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Sing...続きを読む

Qデスクトップでデジタル時計のガジェット

このガジェットを探しております。
このソフトの名前が分かる方、教えてください。

Aベストアンサー

こちらでしょうか?
http://factormystic.net/projects/gadgets

QリモートデスクトップとVB.NET

現在、VB.NETで、
ローカルのパソコンにあるファイル を、
リモートデスクトップ上のフォルダ に移動させたいと考えています。

ただ、リモートデスクトップ上のフォルダ、というのを、
コード上、どう表現すればいいか、わかりません。

調べ方が足りないのかもしれませんが、
調べてもそのような記述は発見できませんでした。

わかる方がいらっしゃいましたら、ぜひご教授願えませんでしょうか。

ファイルのコピーは、System.IO.File.Copyを使う予定です。

.NET2008です。

Aベストアンサー

つまりリモートの先のPCかサーバーに置きたいだけでしょうか?
先のPCに共有フォルダーを持てばよいだけでは?リモートディスクトップは単にマウントしているだけで、同じ事なのですけど。

Qxp デスクトップ 時計

xpを使用しています。デスクトップに壁紙に関係なく表示される"アナログ時計"が欲しいのですが、フリーで良いものは無いでしょうか?現在デジタル時計は使用しています(comono)。

Aベストアンサー

駅時計
http://www.tht-software.net/download_tsclock.html

QVBでデスクトップ上のアイコン座標を取得することはできますか?

Windows98上でVB6(SP4)を使っています。
デスクトップに散らばっているフォルダやショートカットの座標を取得したいです。
そもそもVBでアイコンの座標を取得する事ができるのでしょうか?
また、そのアイコンを動かしたいのです。

MSDN等で調べてみたのですが、期待しているドキュメントがひっかかりません。
GetIconInfo等が使えそうかな・・・と思ったのですが、「ここ見ろ」でも結構なので教えてください。よろしくお願いします。

Aベストアンサー

デスクトップの実体はリストビュー(SysListView32)なので、ウインドウハンドル
を取得して、LVM_* メッセージを投げればいいと思います。
詳しくはgoogle で"Desktop SendMessage"を検索して下さい。

Qgoogleデスクトップの針時計を表示

googleデスクトップでフローティングディスクバーと、針時計を
常にデスクトップ画面に出していたのですが、
いつからか針時計の表示がでなくなってしまいました。

どのように設定を直せば、もとのように針時計表示をデスクトップに

表示できますか?教えてください。

Aベストアンサー

サイドバー表示-----上の追加をクリック-----アナログ時計選択-----
直ぐ右にある追加クリック
で表示されます

QVBで、Outlookのデスクトップ通知と同等の機能を制作しようとして

VBで、Outlookのデスクトップ通知と同等の機能を制作しようとしています。
現時点で、デスクトップ通知で行いたいことが4点あります。
  1.表示位置を指定できること。
  2.複数表示を可能にすること。
  3.表示する時に、フォーカスを移動させないこと。
  4.ボタンを作成できること。
現時点では、Formを作成し、Form1.show()で起動していますが、3のフォーカスが移動してしまうため、うまく実現することができませんでした。また、ツールチッップにて作成を行いましたが、ボタンを配備することができないために断念しました。

実現するための、方法やご意見頂けると幸いです。
よろしくお願いします。

Aベストアンサー

開いたフォームをアクティブにしないにはWindows APIのShowWindowを使用すれば良いと思います。

VB6
Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

VB.NET
Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As IntPtr, ByVal nCmdShow As Long) As Long

詳細はヘルプを見ていただくとして第一引数に対象のウインドウハンドル、第二引数にウインドウの状態を指定します。
第二引数に 8 を指定すると対象のウインドウをアクティブにしないで開くことが出来ます。

以下、簡単なサンプル(VB.NET)
プロジェクトにForm1とForm2を追加してForm1にButton1を追加します。

'--Form1
Public Class Form1
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim frm As New Form2
  frm.ShowNoActivate()
 End Sub
End Class

'--Form2
Public Class Form2
 Private Declare Function ShowWindow Lib "user32" _
  (ByVal hwnd As IntPtr, ByVal nCmdShow As Long) As Long
 Private Const SW_SHOWNA As Integer = 8

 Public Sub ShowNoActivate()
  Dim ret As Long
  ret = ShowWindow(Me.Handle, SW_SHOWNA)
 End Sub
End Class

ボタンを押す度、新しいウインドウ(Form2)が非アクティブで開きます。

開いたフォームをアクティブにしないにはWindows APIのShowWindowを使用すれば良いと思います。

VB6
Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

VB.NET
Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As IntPtr, ByVal nCmdShow As Long) As Long

詳細はヘルプを見ていただくとして第一引数に対象のウインドウハンドル、第二引数にウインドウの状態を指定します。
第二引数に 8 を指定すると対象のウインドウをアクティ...続きを読む

Qデスクトップ画面の時計について

富士通のデスクトップPCを利用中の友人。デスクトップ画面に時計(柱時計)が表示されて、時間を示しています。今は柱時計ですが、最初選択する時は、いろいろな時計から選択できたとのこと。時計の種類を変えるとか、時計を表示しないとかは、どうやったら出来るのでしょう?いろいろ試しても、分からないそうです。教えてください。

Aベストアンサー

パソコンの機種が分らないので推測ですが、富士通のソフトに、「壁紙かんたん模様替え」と言うのがあるので、それを利用しているのではないでしょうか?
メニューからソフトを立ち上げて、「お好み」を選択後、壁紙の設定をPASSすると、時計の選択画面に移れます。
時計の種類を選んだり、現在表示されてる時計を削除する設定も出来ます。
デスクトップの時計を右クリックすると、ヘルプが選べるので、利用方法を熟読してみて下さい。
このソフトをご利用でなければ、参考になりませんが‥

Qデスクトップにショートカットアイコンを作りたい。

EXCEL2003のVBAで、ファイルのショートカットアイコンをデスクトップ上に作りたいのですが、その構文を教えて頂けないでしょうか。。

Aベストアンサー

こんなところでどうでしょう?

参考URL:http://www.geocities.co.jp/SiliconValley-SanJose/9236/subdoc2/0209.htm


人気Q&Aランキング

おすすめ情報