トップページ⇒tech
988コメント350KB

くだすれVB6.0以前(超初心者向け)

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/12/08(金) 19:36:45
このスレッドはVBについて、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
VB使いが優しくコメントを返しますが、
お礼はVBの布教はしなくてよいので、初心者の救済をお願いします。
0232デフォルトの名無しさん2007/04/13(金) 00:15:17
ドンラーポ
0233デフォルトの名無しさん2007/04/13(金) 03:03:33
>>231
ttp://penhagi.com/access/tips/50_dentaku2.htm
0234デフォルトの名無しさん2007/04/13(金) 20:48:18
課題で「マウスでクリックした2点を直線で結ぶプログラム」を作りたいんですけど、
全くの初心者で何も分かりません。
初心者向けのヒントください。お願いします。
0235デフォルトの名無しさん2007/04/13(金) 20:59:42
>>234
歩ける状態で5k円くらいあるなら本屋へ直行
それか教官に聞く
0236デフォルトの名無しさん2007/04/15(日) 03:03:56
>>234
これとか参考になるよ。
http://www.mitene.or.jp/~sugisita/vb6_grph.html
0237デフォルトの名無しさん2007/04/16(月) 16:35:09
質問があります。

VB6.0なのですが、
Formのどのコンポーネントにフォーカスがあったとしても、ただ一箇所に
あるキーダウンイベントを取得することできるでしょうか?

どのコンポーネントにフォーカスがあっても
CTRL+Zのイベントを拾いたいのです。
0238デフォルトの名無しさん2007/04/16(月) 17:00:23
>>237
隠しメニューつくったら どうだろう  誤ってctrl+Vにショートカット割振ってしまったことがある
Zも元に戻すがデフォだよね
02392372007/04/16(月) 17:09:36
すいません自己解決しました。。。
メインフォームにKeyPreviewというプロパティがあり、これをtrueにすると
メインフォームのKeyDownでイベントを拾うことができました。

次に、というわけではないのですが、
もし知っていたら教えてほしいのですが、
同様にMouseDownイベントを拾うことはできるでしょうか?
0240デフォルトの名無しさん2007/04/16(月) 17:12:47
>>239
やった事ないけど全てのコントロールのイベントに一個そういう処理用のプロシージャ呼ぶようにするとか?
流石にコントロールは出来ないんじゃないかな・・・と VB素人な折れが言ってみる
02412372007/04/16(月) 17:22:42
>>240
ありがとうございます。

コンポーネント全部にイベントを追加するのは厳しいフォーム設計になって
います…。また、今後、私以外が保守するときに余計な特殊仕様みたいにな
ってしまいそうな気もします。
VB素人が保守してる現状がそもそもどうかと思いますが…。

シンプルになる方法を模索したいと思います。
02422402007/04/16(月) 17:23:34
もうサブクラス化してメッセージフックしろwwwww
0243デフォルトの名無しさん2007/04/16(月) 17:36:08
Form.KeyPreview
0244デフォルトの名無しさん2007/04/16(月) 18:02:45
Vista でVB6.0使っている人いますか?
Xpの調子が悪くなって、Vistaは購入することが決まっているので、
乗り換えようかと思って…。
0245デフォルトの名無しさん2007/04/17(火) 10:09:14
>>241
一つクラスを作成し、コントロールの型別にWithEventsで定義させて
そのクラス内でイベントの処理をするとかは、どうでしょうか。

クラスでの宣言はコントロール数分ではなく、使用している型数分で済みます。
0246デフォルトの名無しさん2007/04/17(火) 10:23:23
VBの変数で、変数の後ろに # や $ つけるとどういう変数なんでしたっけ?
0247デフォルトの名無しさん2007/04/17(火) 10:29:36
>>246
型指定されたやつ

$ だと明示的に文字列という宣言
詳しくはMSDNで見て
型宣言文字とかで出てきたと思う

あと、それをつける理由は例えばStringとかMSDNで調べてみて
実際にStringがどういう風になっているかがわかるから

説明ヘタでスマン
02482412007/04/17(火) 10:30:53
>>245
ありがとうございます。

でも私のスキルが…orz
その文章の単語をキーワードにして調べながらやってみたいと思います。
また質問するかも知れませんがそのときはよろしくお願いします…。
0249デフォルトの名無しさん2007/04/17(火) 10:33:00
>>247
今、手元にMSDNがない環境でしたので
質問させていただきました
でも、なんとなくわかりました
ありがとうございました^^
0250デフォルトの名無しさん2007/04/19(木) 18:35:55
フォームのフォーカスが外れたときか非アクティブになったときに、自分自身を終了させるにはどうしたらいいのでしょうか?

Private Sub Form_Deactivate()
  MsgBox "hoge"
End Sub
や
Private Sub Form_LostFocus()
  MsgBox "hoge"
End Sub

ってやっても、hogeが出てくれないですし、アプリケーションの終了の仕方もわかりません。
どうか教えてください。VB6.0です。
02512502007/04/19(木) 19:06:14
アプリケーションの方法はわかりました。
Unload Me
でした。

これをウインドウが非アクティブになったときに実行したいのですが、
Private Sub Form_Deactivate()
  Unload Me
End Sub
で、うまくいきません。
0252デフォルトの名無しさん2007/04/19(木) 19:10:04
同じプロジェクト内の別フォームにフォーカスが移れば、
そのタイミングでLostFocusイベントが発生するが。

それとは違うの?
0253デフォルトの名無しさん2007/04/19(木) 19:21:31
>>252
フォームは一つなんです。単体で。
0254デフォルトの名無しさん2007/04/19(木) 19:26:34
終了ボタン付けちゃいけない理由が不明
それともボタンコントロールも知らんのか?
0255デフォルトの名無しさん2007/04/19(木) 19:30:18
TimerとAPIの使い回し以外にいい方法があるとしたらCommandButton使うってだけだろうかw
0256デフォルトの名無しさん2007/04/19(木) 19:31:01
終了ボタンもなければ、BorderStyleも0にしてるんで、
終了させるには、他のアプリがアクティブになったときや、自作アプリが非アクティブになったときに自動で終了してくれないと
面倒なので。
ツールチップみたいなものです。
0257デフォルトの名無しさん2007/04/19(木) 19:44:30
TimerとGetActiveWindowで監視する以外の方法はわからん。
0258デフォルトの名無しさん2007/04/19(木) 19:50:07
ドトネトならお望みの動作一撃なんだがな・・・・

1.プログラムが起動したらAPIで現在アクティブなウィンドウハンドルを取得

2.で、そのアクティブなウィンドウハンドルを保持して
そのフォームの中の処理でWindowsで現在アクティブなウィンドウを常にチェック

3.比較して起動時と異なっていたらアンロード

2はフック使ったほうがスマートかもしれんが
なんとなくこんなの思いついてみたというのをかいてみた
0259デフォルトの名無しさん2007/04/19(木) 19:50:12
>>257をコードで書くとこんな感じ。

Private Declare Function GetActiveWindow Lib "user32" () As Long

Private Sub Timer1_Timer()
If Me.hWnd <> GetActiveWindow Then Call Unload(Me)
End Sub

これ以外にも方法はあるんじゃないかと思うが、
俺的にはこれくらいしか分からないや、ごめんよ。許して。
02602592007/04/19(木) 19:54:21
>>258と被った///
0261デフォルトの名無しさん2007/04/19(木) 19:57:49
>>260
俺も思ったw

というか、ちょっとサブクラス化してメッセージ受け取ったら出来るような気がしたんで
ちょっと書いてみる

VBあんま使った事ないから出来なくても怒るなよw
0262デフォルトの名無しさん2007/04/19(木) 20:00:06
>>261
サブクラス化でも可能だけどお勧めしない。

無限ループ(上の例ではタイマー)で都度自分の状態を確認する手法(イベントドリブン)の方が
VBでサブクラス化するより余程いいと思う。
0263デフォルトの名無しさん2007/04/19(木) 20:00:36
おお!ありがたや、ありがたや。
思ったとおりの動きが出来ました。
みなさん、ありがとうございました。
0264デフォルトの名無しさん2007/04/19(木) 20:06:45
お布施をくだs(ry
0265デフォルトの名無しさん2007/04/19(木) 20:13:05
俺のケツでよかったら・・・
0266デフォルトの名無しさん2007/04/19(木) 20:13:36
>>262
VB6の動きをムリヤリ変えてるようなもんだしね 俺もそう思って>>258かいたんだ
まぁ、そのタイマーとかの監視が嫌だったらって感じだったんだよ

>>263
おめでとw

とりあえずフックでも出来たけどやっぱデバッグで止めたらIDE落ちるからめんどくせぇwwww
02672582007/04/19(木) 20:21:18
>>266
あれ、俺がいる・・・?w
02682592007/04/19(木) 20:23:44
>>267
きっとそれはドッペルだな。
俺のドッペルはいないみたいだ。安心安心♪
0269デフォルトの名無しさん2007/04/24(火) 09:35:53
Windows共有フォルダのアクセス権限変更ツールってVBでは作れない?
0270デフォルトの名無しさん2007/04/24(火) 10:29:50
できるだろうけど、非常に難しいと思われ

コノあたりかな つ SECURITY_ATTRIBUTES
0271デフォルトの名無しさん2007/04/24(火) 10:54:14
�d。ググってみる。
0272デフォルトの名無しさん2007/04/24(火) 11:10:32
書籍一覧がヒットしますたorz

CreateFileとかCreateDirectoryって、
ファイルやフォルダを作成した上で、
それのセキュリティを同時に設定しようってやつだよね。

それじゃないんだよなぁ。

まぁ要望は「もし出来たら」ってことだから、
「出来ません」って言って終わりにしちゃおっかな。。
単なるオプション機能だしw
0273デフォルトの名無しさん2007/04/24(火) 15:06:51
質問があります。

VB6.0なのですが、
Dim picture As Picture
picture = LoadPicture("HOGE.GIF")
とやると画像の読み込みは成功するのですが、
WidthとHeightを見てみると、ピクセル数ではなく何かとんでもない数値が
入っていました。

調べてみると、ここは0.01mm単位でのポイント数になっており、
ScaleX メソッドおよび ScaleY メソッドを使って必要なスケールに変換する
らしいのですが、ちょっと意味が分かりません。

単純にピクセルに変換できる方法などをご存知でしたら教えてもらえないで
しょうか。宜しくお願いします。
02742732007/04/24(火) 15:32:50
自己解決しました。。。

picture_width = ScaleX(picture.Width, 8, 3)
picture_height = ScaleY(picture.Height, 8, 3)

これでピクセル数を算出することができました。
どうもお騒がせしました。
0275デフォルトの名無しさん2007/04/24(火) 19:33:25
>272
NTFSのアクセス権限なら、
SetNamedSecurityInfoのあたりだったとおもう。
もものすごく面倒くさかった記憶しかない。

ファイル共有の権限のほうなら、net shareを叩いて
弄った方が早いと思うけど。
0276デフォルトの名無しさん2007/04/25(水) 11:31:17
>>275
ファイル共有の方でござる('A`)
0277デフォルトの名無しさん2007/04/30(月) 03:41:54
VB6のリソースファイルの
MIDIファイルを再生することは
できるのでしょうか?

リソースにMIDIファイルを埋め込むことは
できたのですが、そこからがわかりません。
できれば他のOCXやDirectXはつかわないで
APIなどだけでおこないたいです。
0278デフォルトの名無しさん2007/04/30(月) 18:44:44
コードを区切りたいときはどうしたらよいですか?
ほんと初心者ですみません
0279デフォルトの名無しさん2007/04/30(月) 18:53:41
>>277
やったことないけど、
リソースからバイナリデータとして受け取って、一時ファイルに書き出してから再生させてみては?

>>278
もっと説明ちょーだい
02802782007/04/30(月) 20:41:06
>>279
長い分をかくときに二行にわけたいだけです
改行です
0281デフォルトの名無しさん2007/04/30(月) 20:59:37
>>280
それなら
a = _
  1 _
  + _
  2
みたいな
名称忘れた
02822782007/04/30(月) 22:31:42
>>281
ありがとうございます
0283デフォルトの名無しさん2007/05/02(水) 17:02:04
アホみたいな質問で悪いが、VB6のコードエディタでタブ文字は使えないのか?
半角スペースにされるとちと困るので。
0284デフォルトの名無しさん2007/05/02(水) 17:52:15
何故困る?
0285デフォルトの名無しさん2007/05/02(水) 18:22:06
メニューバーの[ツール]→[オプション]
ここで設定出来ないなら諦めた方が早くね?

別にタブ文字をオンコードしなきゃいけないってことはないだろーに。
タブ文字の出力はvbTabで出来るからな。

塚、あれか。
VBエディタって確かUnicodeだよな。
Unicodeでタブ文字表示しようとすると中黒になるんじゃなかったか?
0286デフォルトの名無しさん2007/05/02(水) 18:41:25
やっぱ無理か
同じ部署のやつがタブコピペしたらスペースになるってうるさいだけだから放置しとくよ。
thx
0287デフォルトの名無しさん2007/05/03(木) 15:39:58
VB5.0とVB6.0の違いって何なんですか?
0288デフォルトの名無しさん2007/05/03(木) 19:22:22
バージョン
0289デフォルトの名無しさん2007/05/03(木) 19:23:19
つまり文法的な違いは無いということですか?
0290デフォルトの名無しさん2007/05/03(木) 19:49:36
6.0で新規の組み込み関数とかあるけど、
文法で躓くことはないと思う。
0291デフォルトの名無しさん2007/05/04(金) 21:16:57
VB5を使っている日曜プログラマーです

今ファイルの移動・削除をするプログラムを書いています。
通常のファイル移動はNameステートメントを使い、削除はSHFileOperationでゴミ箱に捨ててます。

移動の際はログファイルを吐いてUndo可能にしているのですがゴミ箱に捨てたファイルの
Undoのやり方が分かりません。
どのようにコーディングしたら良いのでしょうか?
0292デフォルトの名無しさん2007/05/04(金) 22:48:18
>>291
アプリでWindowsのUndo機能をそのまま実装するのは難しいと思います。

ファイルの移動でundo機能のためにログを吐いてるのと同じように、
そのアプリ用にtempフォルダを作成し、ごみ箱に捨てるタイミングで
tempにファイルを移動、その情報をログに保存しておけば、ファイルの
復元を疑似的には実装出来ると思います。
0293デフォルトの名無しさん2007/05/04(金) 23:40:35
>291
ちょっと調べてみましたが、意外に難しいというか、MSからの情報がないというか。
ttp://mtamaki.cocolog-nifty.com/blog/2005/01/post_f992.html
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100013.txt
あたりを参考にしてみてはいかがでしょうか。
02942912007/05/05(土) 00:09:35
>>292-293さん レスありがとうございます

>ttp://mtamaki.cocolog-nifty.com/blog/2005/01/post_f992.html
>ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100013.txt
参考になりました、なりましたけどう〜んと唸ってしまいます

ゴミ箱を直接いじれるので仕方ない仕様なのかも
02952932007/05/05(土) 00:47:58
>294
Win32APIスレの連中ならもう少し真っ当な回答をしてくれるかも。
0296デフォルトの名無しさん2007/05/05(土) 02:00:37
shell.applicationの
folder.movehere folderitem
で駄目?
0297デフォルトの名無しさん2007/05/05(土) 08:03:44
>>296
ありがとうございます。実験はまだですがNameステートメントと違い自前のエラートラップを
減らせそうですね。ゴミ箱からのUndoに役に立つのかどうかはよく読み取れませんでした。
0298デフォルトの名無しさん2007/05/05(土) 14:18:43
VB6なのですが、キーボードショートカットのカスタマイズはできますか?
やり直しをメニューでやってるのですが、Ctrl+YかCtrl+Shift+Zでやりたいなぁと
思ったのですが、ヘルプや設定を見てもそれっぽいのが無かったので。
0299デフォルトの名無しさん2007/05/05(土) 15:02:51
>>291
set folderitem=ゴミファイル
folderitem.invokeverb "元に戻す(&E)"
または>>296
set folder=戻し先
set folderitem=ゴミファイル
folder.movehere folderitem
0300デフォルトの名無しさん2007/05/05(土) 20:10:40
「ゴミファイル」の特定が難しいのれす
ファイルさえ特定できればその通りなんでしょうけど
http://mtamaki.cocolog-nifty.com/blog/2005/01/post_f992.html
の方法を使う場合XPと2K限定っぽいし、Vista持ってないから
分かりませぬが・・・

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100013.txt
こちらはExplorer同様直前の動作のUndoなわけで
0301デフォルトの名無しさん2007/05/05(土) 20:17:42
名前と元の場所で絞って、削除した日の新しいもの
0302デフォルトの名無しさん2007/05/05(土) 20:50:00
ごめんなさい、どうもアドバイスが高度すぎてついていけませぬ
このFileはCloseさせて頂きます
0303デフォルトの名無しさん2007/05/06(日) 22:14:31
folder.getdetailsof(folderitem,数字)で情報が取れる。
あと、日曜プログラマーならwsh/vbscriptがお勧め。
0304デフォルトの名無しさん2007/05/08(火) 11:37:48
適当なスレがなかったのでここで。

新しいPCを購入。OSはXPです。
そこでVisual Studio 6.0 をインストールしようとすると、
「Microsoft Virtual Machine for Javaのインストールを行う画面」
にて再起動を促され、指示に従うと再起動後、また同じ画面になりインストールが進みません。
またこれをインストールしないと次ボタンが有効にならないため、インストールが進みません。

調べたところ、Microsoft Virtual Machine for Javaの提供終了と関係がありそうでしたが、結局インストール方法がみつかりませんでした。
どうすればよろしいでしょうか?
0305デフォルトの名無しさん2007/05/08(火) 12:12:03
>>304
インスコ中断して、事前にjavaVMを入れればそこで聞かれなくなるハズ。
0306デフォルトの名無しさん2007/05/08(火) 13:35:03
>>305
なるほど。そういえば今までのマシンでは聞かれたことがありませんでした。
最近のPCだとサポート終了確定のJavaVMはプレではいってないのはわかるが、
じゃあJavaVMいれてインスコしたあとJavaVMをアンインスコでやってみるよ。
0307デフォルトの名無しさん2007/05/09(水) 17:30:58
質問があります。
VB6.0なのですが、CommandButton の Caption を
「決定(&E)」
とすると、"決定"の横に、アンダーバーのある (E) が出ます。

これ、(A)とか(B)とか1文字のはいいんですが、
(DEL) (INS) (ESC) のように、
DELキーやINSキーやESCキーを同じように出すことは可能でしょうか?
0308デフォルトの名無しさん2007/05/09(水) 19:13:01
(&D&E&L)
できるか知らん
0309デフォルトの名無しさん2007/05/09(水) 19:40:15
>>307
DELとかINSとかにアンダーバーを付与させることは不可能だが、
メニューのショートカットキー機能を使えば、
押下されたキーでそのボタンに対応した動作を行うことは多分可能。
0310デフォルトの名無しさん2007/05/09(水) 19:43:20
メニューの親ボタン(っての?)を非表示にしちゃうと不可能だな
0311デフォルトの名無しさん2007/05/09(水) 20:00:12
>>307
漏れが読解力無くてすまないが・・・

altキーとDELキーやINSキーやESCキーを組み合わせた
ショートカットキーを作成したいという意味だったりする??
0312デフォルトの名無しさん2007/05/10(木) 09:36:45
>>311
Alt使ったらホットキーって言わね?
03133072007/05/10(木) 09:52:05
遅レス、すいません。

>>308
(&D&E&L)は駄目でした…

>>309
キーの判定は、Form.KeyPreviewをtrueにした上で、FormのKeyDownイベントを
拾うことで実現できました。

>>311
いえ、組み合わせは考えていません。
DELキーのみや、ESCキーのみなどのように1つだけです。

色々試してみたのですが、無理っぽいですね。
重要でもないですし、諦めようと思います。(各ボタンのToolTipTextに記載する方法にしました)
皆さん回答ありがとうございます。
0314デフォルトの名無しさん2007/05/10(木) 16:08:03
>>311
ESCキーとか標準の窓操作に使われてるからそんなのに使用しないほうがいい。

例;メニューを開いた状態でESCキーではメニューが閉じる
0315デフォルトの名無しさん2007/05/10(木) 16:28:14
>>314
311が使用したいと思っているのわけではないだろう。
03163142007/05/10(木) 16:49:36
>>315 本当だ。レス番号を間違えたよ >>307だった
0317デフォルトの名無しさん2007/05/10(木) 20:27:34
VB6.0というのを使ってみたいのですが、VisualStadioの中に入ってるものなのでしょうか?
0318デフォルトの名無しさん2007/05/10(木) 22:19:26
>>317
入ってる。 当然バージョンが6.0ならだけどね。

俺も昔はviエディタとにらめっこだったから
Windows系の開発にウトイのはわかるぜよ。
0319デフォルトの名無しさん2007/05/10(木) 22:38:13
VisualStadioてぇのはないだろ
0320デフォルトの名無しさん2007/05/10(木) 22:44:35
はいはい。Studio、Studio。これでいい?
0321デフォルトの名無しさん2007/05/10(木) 22:57:48
ごめんなさい
スタジオ間違ったなと思いつつ・・・
>>318
ありがとうございます
もう0からの独学の状態でして、助かりました
0322デフォルトの名無しさん2007/05/11(金) 00:52:12
テキストボックス上でEnterキーを押した時に鳴る
「ポンッ」て音がいやなんですけど、音が出ないようにする方法はありますか?
0323デフォルトの名無しさん2007/05/11(金) 00:56:01
>>322
あるけど、あんたの期待している答えなら無い。
03243142007/05/11(金) 09:55:52
>>317
VisualStudio6.0はもう販売してないぞ。
VB6.0のみならまだ単体で出ているので大丈夫だ

>>322
スピーカーをビルの屋上から落とす
03253142007/05/11(金) 09:57:31
>>322
考えたけど、マルチラインにしてキー入力ごとのイベントをつかみ、
毎回改行をカットする。
0326デフォルトの名無しさん2007/05/12(土) 07:30:57
普通に改行カットするだけでいいんだけど
keydownの
if keycode = &hd or keycode = &ha then
keycode = 0
end if
0327デフォルトの名無しさん2007/05/12(土) 16:13:50
(x,y)のプロットで、
(1,1)
(2,4)
(3,2)
(4,8)
の4点を通る3次曲線y=ax^3+bx^2+cx+dの、
定数、a,b,c,dを求めるプログラムを作りたいのですが…。

今までエクセルのソルバーで計算させていたのですが、
VB6.0でこの4点のプロットからa,b,c,dを出すプログラムは、
どうすればいいんでしょうか?

VBでの連立方程式やら二次方程式やらをググってもみたのですが、
さっぱりでして…。

御助言お願いします。
0328デフォルトの名無しさん2007/05/12(土) 16:52:11
4変数4本の連立一次方程式でそ。
アルゴリズム辞典とかで行列の掃き出し法を
ひけばおわる
0329デフォルトの名無しさん2007/05/13(日) 17:38:55
http://www.imgup.org/iup380485.png
”商品代金”と”支払い金額”を入力し
もし支払い金額textboxが商品代金textbox未満なら釣銭textboxに不足と表示
もし支払い金額textboxが商品代金textboxを超えている場合は釣銭textboxに釣銭の金額を表示し
更に釣銭金額の各紙幣ないし硬貨の個数を各々の項目の隣に別のラベルとして表示せよ

という課題があるのですが
釣銭金額の各紙幣ないし硬貨の個数を各々の項目の隣に別のラベルとして表示ってどうやるんでしょうか?
0330デフォルトの名無しさん2007/05/13(日) 17:57:18
http://www.imgup.org/iup380496.png
簡略した流れ図にすると、こんな感じでしょうか・・・
0331デフォルトの名無しさん2007/05/13(日) 18:41:52
>>330
自販機のアルゴリズムっぽいけど
千円札がない場合は、購入する前に
札がないランプが点いてるだろうから購入すらできない
=「千円札があるかないか」の分岐は意味ない様な希ガス
全部硬貨で出すのならまた別だろうけど。。。
■ このスレッドは過去ログ倉庫に格納されています