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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/12/08(金) 19:36:45
このスレッドはVBについて、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
VB使いが優しくコメントを返しますが、
お礼はVBの布教はしなくてよいので、初心者の救済をお願いします。
0159デフォルトの名無しさん2007/03/16(金) 11:41:47
>>155
前者はCやJavaなどの16進数表現による整数リテラル
後者はVBやBASICなどのそれ
0160デフォルトの名無しさん2007/03/16(金) 11:54:39
>>158
valでもrefでもanyでも宣言していいから、説明しろ。
0161デフォルトの名無しさん2007/03/16(金) 12:00:50
何説明してほちいんでちゅか〜?
0162デフォルトの名無しさん2007/03/16(金) 12:03:27
わからないなら、書き込むなよ、屑が。
0163デフォルトの名無しさん2007/03/16(金) 12:08:41
(^A^)m9 pgrwwwwwww
0164デフォルトの名無しさん2007/03/16(金) 12:19:18
byref string だとBSTRでUNICODEじかだっけか。
Shift-JISで漢字交じりの固定長レコードを読み書きするのにえらく苦労した記憶があるな。
0165デフォルトの名無しさん2007/03/16(金) 13:01:46
>>157
文字を扱うAPIはUnicode版 (W)とマルチバイト版 (A)がある。
VBが無言でコンバートするのはDeclareで宣言した関数を呼び出すとき。
String型の引数・戻り値をマルチバイト文字列へ変換してから関数を呼び、その後再びUnicode文字列へ戻している。

それもあって普通はAliasを使ってA版のAPIを使うが、String以外なら変換はされないので
たとえばこうすると直接マルチバイト文字列へ変換せずにAPIへ文字列を渡せる。
Declare Function lstrlenA Lib "kernel32" (ByVal s As String) As Long
Declare Function lstrlenW Lib "kernel32" (ByVal s As Long) As Long

Sub Test()
    Dim s As String
    s = "あいうえおABC"
    MsgBox lstrlenA(s) & " " & lstrlenW(StrPtr(s))
End Sub

しかし、そもそもlstrlenはメモリの大きさではなく、Cの文字列の長さを返す関数。
Cだと文字列の長さとは、ヌル文字の手前までの要素数。
(VBの文字列も実はヌル文字が後ろに付いている)
上のコードでs = "あA" & Chr$(0) & "いB"などととすれば違いがわかると思う。
0166デフォルトの名無しさん2007/03/16(金) 13:04:08
あと、vbNullStringをString変数に代入しても初期化されるわけではない。
APIを使ってStringの中身をByte配列を写し取ってみればわかる。
Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Sub Test()
    Dim s As String * 1
    Dim b(1) As Byte
    s = vbNullString
    Call MoveMemory(b(0), s, 2)
    MsgBox Hex$(b(0)) & " " & Hex$(b(1))
End Sub
0167デフォルトの名無しさん2007/03/16(金) 13:16:15
site:microsoft.comでググってもVB .NETのことしかばかりだ。

すまんな、Stringに付いて触れているのがこれくらいしか見付からなかった。
http://support.microsoft.com/kb/187912/en-us
MORE INFORMATIONのところをよく読め。URLのen-usをjaすれば日本語機械翻訳になる。
0168デフォルトの名無しさん2007/03/16(金) 13:22:34
ピクチャーボックスの中にイメージを配置してピクチャーボックスに何か表示させると
イメージの前面に表示され、イメージが隠れてしまいます。
イメージのvisibleをFalse、Trueにしたりイメージを移動させると
イメージは表示されるのですが、イメージがあった箇所のピクチャーボックスに表示した部分が欠けてしまいます
イメージが隠れないようにピクチャーボックスに表示させたいのですが、どうすればいいいでしょうか
0169デフォルトの名無しさん2007/03/16(金) 15:08:45
>>168
疑問点があるので逆質問
・ピクチャーボックスの中にイメージを配置とは?
・ピクチャーボックスに何か表示させるとは?
・イメージが隠れてしまうとは、背景食が見える状態?それ以外?

日本語で状況説明が難しいなら、再現できる環境とソースコードうpして
0170デフォルトの名無しさん2007/03/16(金) 15:47:50
・ピクチャーボックスの中にイメージを配置とは?

イメージとピクチャーボックスを別々にフォーム上に配置すると
イメージとピクチャーボックスが重なった部分でイメージがピクチャーボックスの下に隠れてしまうので
イメージを切り取ってピクチャーボックス上で貼り付けました

・ピクチャーボックスに何か表示させるとは?

今はクリックしたときに線を描画したり塗りつぶした四角を描画したりしているのですが
それでイメージが隠れてしまいます

・イメージが隠れてしまうとは、背景食が見える状態?それ以外?
描画した線などで線の部分のイメージが見えなくなるという意味です

描画した線
イメージ
ピクチャーボックスの背景

上からこういう感じです
0171デフォルトの名無しさん2007/03/16(金) 20:50:33
>>164-167
レベルが高すぎて逆に迷惑
このスレは円周率も四捨五入して教えるところ
0172デフォルトの名無しさん2007/03/16(金) 20:57:45
でもゲームの最強武器を知ってて早く使いたくてわくわくしながら最初からプレイしてる感じ
言ってる内容はわからなくてもプログラミングがなんだか楽しくなってくる効果はある、かな?w
0173デフォルトの名無しさん2007/03/16(金) 22:10:59
ディストリビューション ウィザードでプログラムのインストールはできるのですが、
今度、プログラムのあるディレクトリに「tips」というディレクトリを作ってし、そこに
html文書を入れ、プログラムから呼び出したいと思っていて、そのようなインスト
ールプログラムを作成するのに試行錯誤しています。

ディストリビューション ウィザードで、プログラムと同じディレクトリに、別のディレ
クトリを作って、その中にhtml文書を納めるようなインストールプログラムはでき
るのでしょうか。

ただ単に「add」でhtml文書を加えると、ディレクトリができないし…・。

すみません。どなたか、アドバイスをお願いできますか。
0174デフォルトの名無しさん2007/03/17(土) 01:35:59
>>173

[email protected],$(AppPath)\tips,,,3/16/07 3:17:37 AM,845,0.0.0.0

のようにAppPath)の後ろにディレクトリ名を入れると出来ることがわかりました。
0175デフォルトの名無しさん2007/03/17(土) 22:25:19
'INETを使いたいのですが宣言の時点でエラーが出てしまいます
'何が間違ってるのでしょうか?

Dim inet1 As New Inet

---------------------------
Microsoft Visual Basic
---------------------------
コンパイル エラー:

New キーワードの使用法が不正です。
---------------------------
OK ヘルプ
---------------------------

'VB6SP6です
0176デフォルトの名無しさん2007/03/17(土) 22:34:15
>>175
参照設定した?
0177デフォルトの名無しさん2007/03/17(土) 22:44:31
>>176
コンポーネントに追加していましたが
MSINET.OCXを参照設定するように変更したところエラーがでなくなりました
ありがとうございます
0178デフォルトの名無しさん2007/03/18(日) 02:45:41
>>171
でも、しっかりした説明のおかげで不毛な罵り愛が終了しました。
GJだと思います。
0179デフォルトの名無しさん2007/03/18(日) 11:52:42
どうすればTextboxの書き換えを出来ないようにできますか?
Text1.ReadOnly = Trueとしてもうまくいきません
0180デフォルトの名無しさん2007/03/18(日) 11:56:07
スレ名も見れないようじゃ先行き暗いな
つ http://pc11.2ch.net/test/read.cgi/tech/1173061176/
01811792007/03/18(日) 11:58:29
>>180
VB6でお願いします
0182デフォルトの名無しさん2007/03/18(日) 12:02:12
> Text1.ReadOnly = Trueとしてもうまくいきません 
・.NETにしか見えない
・「うまくいかない」ってだけ言うな

ユーザからの書き換えを不能にするのは Locked プロパティ
プログラム上から書き換えを不能にするのは、ロジックでカバー
0183デフォルトの名無しさん2007/03/18(日) 12:10:18
>>182
書き換え不能になるのを確認できました
間違えてVB.NETの資料をみていたので頓珍漢なことを言ってしまいました
0184デフォルトの名無しさん2007/03/18(日) 22:09:57
凄い板違いで、すまねえ。VBプログラマの方達よ。
コマンドプロンプトでのプログラミングについて、
最近興味わいたのだが、いい板しってるかい?
0185デフォルトの名無しさん2007/03/18(日) 22:29:01
>>184
DOSでプログラミングはスレ違いだから要注意な。
あそこは16bitの本物のDOS用。せいぜいDOS互換ボックスまでだ。
0186デフォルトの名無しさん2007/03/19(月) 22:23:23
子プロセスの標準出力をパイプしたいのですが、
CreatePipeの使い方が調べてもよくわかりません。
よいサンプルがあるページありませんでしょうか?
0187デフォルトの名無しさん2007/03/19(月) 23:36:59
VBでCreatePipe使うタイミングってあるんだなぁ・・・
ざっくりと機能とかは知ってても使ったことがないや(;´∀`)
0188デフォルトの名無しさん2007/03/20(火) 00:06:35
http://dobon.net/vb/bbs/log3-3/1564.html
これくらいしかひっかかってこないな
0189デフォルトの名無しさん2007/03/20(火) 20:43:29
ttp://tanuzou.com/nuzou/wiki/index.php?VB%A4%C7%B3%B0%C9%F4%A5%B3%A5%DE%A5%F3%A5%C9%A4%CE%C9%B8%BD%E0%BD%D0%CE%CF%BC%E8%C6%C0
01901862007/03/20(火) 23:58:44
大変参考になりました
なんとか思った通りに処理できました
ありがとうございました
0191デフォルトの名無しさん2007/03/22(木) 13:33:21
質問があります。
VB6.0なのですが、あるボタンのクリックイベントで、別のボタンのクリックイベントも
発生させたいのですが、どのようにしたら良いでしょうか?
C++BuilderのClick()メソッドみたいやつです。
よろしくおながいします。
0192デフォルトの名無しさん2007/03/22(木) 14:29:17
VB6.0の場合は、単純にそのイベントをメソッドとして扱えるので、
たとえばCommand1というボタンがあるとしたら、呼びたい箇所で

Call Command1_Click

とやればおk。
0193デフォルトの名無しさん2007/03/22(木) 14:44:09
>>192
ありがとうございます。
0194デフォルトの名無しさん2007/03/22(木) 21:07:01
ヤフオクのアカウント自動切換えツールって作れますか?
0195デフォルトの名無しさん2007/03/22(木) 23:02:46
はじめまして
プログラ素人です
目標は精密機械(ex.デジカメなど)のプログラムを
理解できるレベルになりたいです

また、プログラミングの知識も
上辺だけでなく基礎がしっかりとしたものを得たいです

PC環境はwindowsヴィスタです
どの言語から学んでいくべきですかね?
よろしくお願いします
0196デフォルトの名無しさん2007/03/22(木) 23:04:06
すません 
ごばっくです
0197デフォルトの名無しさん2007/03/23(金) 00:18:11
>>192
いやいや、ここはかっこつけて
Command1.Value = True
とやるもんですよ。
0198デフォルトの名無しさん2007/03/23(金) 00:38:44
でヤフオクのログインソフトはどうやって作るの?
0199デフォルトの名無しさん2007/03/23(金) 02:24:09
VB6.0で、コンポーネントの追加をしようとすると
ファイルが見つかりません。'C:\WINDOWS\system32\ieframe.dll\1'
とエラーがでるのですがどうしてですか?
02001992007/03/23(金) 03:51:51
直りました
0201デフォルトの名無しさん2007/03/23(金) 12:41:21
不躾なんですが、VBでクリスタルレポートのプレビューを開くとき
最大化の状態で表示させたいのですが・・
まったくもって検討がつきません。
どなたか、わかりませんか?
0202デフォルトの名無しさん2007/03/23(金) 15:25:42
ds
0203デフォルトの名無しさん2007/03/23(金) 21:43:30
>>201
マキシマーイズwwww
0204デフォルトの名無しさん2007/03/24(土) 14:59:37
製作途中のプログラムでFORM1〜3まであったのですが、
プログラムを丸ごと違うフォルダに移動させ起動させたら
スタートアップが必要だとエラーがでて起動できず、
元のあった場所に移動させても同じエラーがでて起動できずフォルダの中身を見たら
FORM1だけ内容が変わっており起動できなくなっていました
FORM1の内容がかなり前の内容に変わっていたのでもしかしたら移動する際に前にバックアップに保存しておいたものの上にFORM1だけは上書きせずに他は上書きしてしまったのかもしれません

この消えてしまったFORM1をなんとか復元することはできないでしょうか?
0205デフォルトの名無しさん2007/03/24(土) 17:33:15
もとのForm1が存在するならいけるけど
すでにHDDに存在しない場合復元ソフト使うくらいしか…・

というか、バージョン管理ソフト使えってwwww
VSSとかバージョン戻せたりするし
0206デフォルトの名無しさん2007/03/24(土) 18:17:13
復元ソフトは使ってみたのですがformを消したわけではないからかスキャンしてもでてきませんでした
管理ソフトとかあるんですねこれから気をつけます
02072052007/03/24(土) 21:44:43
フォームが存在しているならプロジェクトをメモ帳とかで開いて修正する手があるよ
一か所だけじゃないけどそれで治った時もあった
バックアップとってやってみるのも手だね
0208デフォルトの名無しさん2007/03/25(日) 21:04:57
ttp://sakuratan.ddo.jp/uploader/source/date36139.txt

rename.vbs にmp3ファイルをドロップすると、VBSファイルと同一フォルダ
のファイル数を数えて、ドロップしたファイルの名前を変更してVBSファイルと
同一フォルダにコピーするようなスクリプトを作りたいのですが、なかなか上手くいきません。
上記スクリプトをどのようにすればよいでしょうか?

分かる方いらっしゃいましたら教えてください。
02092082007/03/26(月) 00:30:07
>>208

解決しました。どうも失礼しました。
0210デフォルトの名無しさん2007/03/26(月) 19:17:47
VB6にはStringを数字に変換する関数はないんでしょうか?よろしくおねがいします
0211デフォルトの名無しさん2007/03/26(月) 19:58:04
cint関数ではどうでしょう?
0212デフォルトの名無しさん2007/03/26(月) 21:28:44
間違ってMSGBOXの無限ループを作ってしまいました
今IDEから実行してるのですがどうすれば止まりますか?
ソースを失いたくないです><
0213デフォルトの名無しさん2007/03/26(月) 21:29:49
Ctrl+Alt+Del
0214デフォルトの名無しさん2007/03/26(月) 21:32:55
VB6.EXEを止めたらソースを失いました
本当にありがとうございました
0215デフォルトの名無しさん2007/03/26(月) 21:38:38
>>213
おまぃ鬼だなwwww
CTRL+BREAK
これでデバッグのステップ画面になる

>>214
メッセージボックス出てる時に押せば、そのメッセージ閉じたときにステップになる
0216デフォルトの名無しさん2007/03/26(月) 22:21:41
VB を止めるなよw
0217デフォルトの名無しさん2007/03/26(月) 22:23:52
>>216
さすがに
>>213
だされたら止めるより他にはないとか考えそうじゃね?www
0218デフォルトの名無しさん2007/03/26(月) 22:27:17
俺いつもVB止めてたよ
いい事を聞いた
0219デフォルトの名無しさん2007/03/26(月) 23:00:26
俺も俺も
0220デフォルトの名無しさん2007/03/26(月) 23:00:55
なんてこったぃwwww
みんなの役に立てて少しだけうれしいよwww
0221デフォルトの名無しさん2007/03/26(月) 23:08:16
レベル低いw
0222デフォルトの名無しさん2007/03/26(月) 23:11:20
初心者向けだしなw
この板は質問しにくいスレが多いから集まるんだろうな
0223デフォルトの名無しさん2007/03/26(月) 23:14:03
そうか?
あんまそうは思わないが・・・
確かにエスパーは叩かれるが
0224デフォルトの名無しさん2007/03/27(火) 09:11:16
CTRL+BREAK
のbreakキーってのが分からんとか言ったら叩かれますか?
0225デフォルトの名無しさん2007/03/27(火) 09:18:05
ちょw それPC初心者スレ辺りでこっそり聞いてこいよww
0226デフォルトの名無しさん2007/03/27(火) 09:46:23
ちょっwwww
キーの右上あたり捜してみ?

プリントスクリーン付近にあるから
PasusetかBreakとか書いてるぞ
0227デフォルトの名無しさん2007/03/27(火) 11:31:00
あー…あった。
こんなキー使わんからパソコン歴結構あるのに分からんかたヨ…
0228デフォルトの名無しさん2007/03/27(火) 16:57:28
教えて下さい。VB6.0を使用しています。
 Windows Media Playerをフォームに貼り付けたのですがどうやって指定したファイルを開き動画を再生させるかわかりません。
 宜しくお願い致します。
0229デフォルトの名無しさん2007/03/27(火) 17:32:47
>>228
使ったことないけど確かSDK公開されてるんじゃなかったけ?
マイクロソフトのMSDNかどっかに
0230デフォルトの名無しさん2007/03/27(火) 18:00:41
そういうのはたいていはOpenメソッドだと思うけど、はて・・・
0231デフォルトの名無しさん2007/04/12(木) 23:56:29
簡単な計算ができる電卓をつくりたいんですが
x + y =
はできるんですが
x + y + z =

(x + y) + x 
みたいな感じでかけばいいんですか?
イメージはなんとなくわかるんですが説明お願いします
くだらない質問ですいません
VB6.0です
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はフック使ったほうがスマートかもしれんが
なんとなくこんなの思いついてみたというのをかいてみた
■ このスレッドは過去ログ倉庫に格納されています