VBプログラマ質問スレ ..
[2ch|▼Menu]
39:14
08/03/17 03:10:30
>>36
ありえること、ですか。
確かにそう言われるとそうかもしれませんね。
VBのクラスの実装はなんか他のと比べて
特殊なところありますし。
わかりました。
ありがとうございます。

>>37
変数がインスタンス化するタイミングについて討論してるのに。

40:デフォルトの名無しさん
08/03/17 08:27:10
>>39
37じゃないけど、Nothingと比較ができる型の意味分かってないんじゃないの?
いずれにせよ(インスタンス生成の遅延以外は)くだらない議論だよ。

シュレディンガーの猫は最終的に猫の生死を確認する方法があるから意味があるのであって、
それが事実上ないVBでのそんな議論に何の意味があるw

41:デフォルトの名無しさん
08/03/17 10:03:28
>>39
組み込み型では、インスタンス化とは言いません。

42:デフォルトの名無しさん
08/03/17 11:47:26
22のコードは日本語環境だとShift_JISで出力され、
22はShift_JISで出力したいと言っている。
一体どこに問題がある?

43:デフォルトの名無しさん
08/03/17 12:21:35
変数宣言してないとき(必須にしてる時)に、デバッグモードで先頭行に
カーソルはあると思うが・・・

44:デフォルトの名無しさん
08/03/17 13:02:43
プロセスにアタッチして、ディスアセンブルすればわかるかもよ

45:デフォルトの名無しさん
08/03/17 20:52:01
>>38
たしかに俺もウソソースを書いた。
けどすべての答えが出てたんだから自力でなんとかしてほしかった!
Dim strPath As String
Dim buf As String
Dim buf2() As Byte
Dim buf3(0 To 1) As Byte
Dim fileno As Integer
fileno = 1
buf = "1234"
buf2 = buf
buf3(0) = &HFF
buf3(1) = &HFE
strPath = "C:/test.txt"
Open strPath For Binary As #fileno
Put #fileno, , buf3
Put #fileno, , buf2
Close #fileno


46:デフォルトの名無しさん
08/03/17 23:20:39
未だにOpenステートメントを使う石器人がいるとは…

47:14
08/03/18 01:15:40
>>40
Nothingと比較ができる型ってつまり
値型と参照型の話ですよね?
大丈夫と思います。

>>41
そうなんですか、知りませんでした。
ありがとうございます。
値型の変数を保存するために実際にメモリ上に領域が確保されることをなんと言うのでしょうか?

48:デフォルトの名無しさん
08/03/18 06:33:25
オブジェクト型の変数にオブジェクトのインスタンスが格納されると思っているなら間違いだよ

49:デフォルトの名無しさん
08/03/18 19:06:10
>>46
お前はVB6以前のスレで何を馬鹿なこと言ってるんだ

50:デフォルトの名無しさん
08/03/18 20:14:26
>>49
>>46 は、FileSystemObject ぐらい使えとでも言い鯛のでは?

51:デフォルトの名無しさん
08/03/18 20:58:40
FileSystemObjectでUNICODEを保存するソース


52:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 22:59:41
VBSで質問があります。よろしくお願いします。(ペコ

IF文の部分でobjDic11とobjDic12のItemを書き換えました。
IF文の部分では書き換わっているのに、ループを抜けた後に
再度objDic11を参照すると書き換え前の状態なのです。

どこが悪いのでしょうか?何故こうなるのでしょうか?
お教え下さい。

以下にコードを4分割して貼ります。



53:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:01:02
Sub RankMark
'On Error Resume Next
Const UpTo_Soutou = 2500
Const UpTo_Gensui = 2000
Const UpTo_Taisyou = 1750
Const UpTo_tyuujyou = 1500
Const UpTo_Syousyou = 1250
Const UpTo_Jyunsyou = 1000
Const UpTo_Taisa = 950
Const UpTo_tyuusa = 800
Const UpTo_Syousa = 650
Const UpTo_Taii = 500
Const UpTo_Tyuui = 400
Const UpTo_Syoui = 300
Const UpTo_Soutyou = 200
Const UpTo_Gunsou = 150
Const UpTo_Gotyou = 100

'まずRANKとMARKのobjDicStarsを作る

Set objDicStars = CreateObject("Scripting.Dictionary")
Set objFS3 = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile3 = objFS3.GetFile("星.txt")
Set objTS3 = objFS3.OpenTextFile("星.txt")


54:デフォルトの名無しさん
08/03/18 23:01:40
必要最小限のソース貼れよ・・・

55:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:01:53
Do Until objTS3.AtEndOfStream
strLine3 = objTS3.ReadLine
ArrayStars = Split(strLine3)
strRank = ArrayStars(0)
strMark = ArrayStars(1)
objDicStars.Add strRank,strMark
Loop
objTS3.Close

'名前のリストを取得してから辞書を操作する

ArrayRanksList = objDicStars.Keys
ArrayStarsList = objDicStars.Items
ArrayKeysList = objDic.Keys
ArrayItemsList3 = objDic3.Items
ArrayItemsList11 = objDic11.Items
ArrayItemsList12 = objDic12.Items

'MsgBox ArrayKeysList(0)
'MsgBox ArrayItemsList3(0)
'MsgBox ArrayItemsList11(0)
'MsgBox ArrayItemsList12(0)
'MsgBox ArrayRanksList(0)
'MsgBox ArrayStarsList(0)


56:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:02:51
For i = 0 To objDic.Count - 1

If CSng(ArrayItemsList3(i)) >= UpTo_Soutou Then

strOldRank = ArrayItemsList11(i)
strOldMark = ArrayItemsList12(i)
objDic11.Item(strOldRank) = ArrayRanksList(0)
objDic12.Item(strOldMark) = ArrayStarsList(0)

MsgBox "昇進しました"
MsgBox ArrayRanksList(0)
MsgBox ArrayStarsList(0)
MsgBox objDic11.Item(ArrayItemsList11(i))
MsgBox objDic12.Item(ArrayItemsList12(i))

Else

MsgBox "あ"

End If

Next



57:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:03:50
strRank = ""
strRank = objDic11.Items

For m = 0 To objDic.Count - 1
strTemp = strTemp & strRank(m) &vbcr
Next

MsgBox strTemp
MsgBox objDic11.Item("今日も雲弧")
MsgBox objDic12.Item("今日も雲弧")

End Sub


58:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:05:10
>>54

申し訳ありません。必要最小限の部分すらわからないのです…。



59:デフォルトの名無しさん
08/03/19 17:57:26
>58
ものには限度があるだろうよ。

あのコードを見て、本質ではないと思われる行が一行も思い当たらない程度のレベルなら、
何をどこから説明して良いのやら見当も付かないよ。

60:デフォルトの名無しさん
08/03/20 01:34:51
すいません。質問です。
Windows xpのマシンにVB6はインストールできますか?

61:デフォルトの名無しさん
08/03/20 01:44:20
Linuxマシンならインスコできます。

62:14
08/03/20 03:42:03
>>48
いえいえ、
オブジェクト型の変数ってオブジェクトのインスタンスへの参照ですよ。
その話題くどいです。

>>60
できます。


で、本題は>>47の後半なんですけど
返事ないところを見るとオブジェクト型のインスタンス化とは違って
組み込み型には明確な名称ないのかな。



63:デフォルトの名無しさん
08/03/20 10:26:34
>>62
質問の仕方からいって明らかに分かってないだろw
なにがくどいだよ。
っていうか君がいう「本題」からして全然わかってないじゃん。
変数そのものが占有するメモリに関して組み込み型とオブジェクト型の区別
なんてあるかよ。

「本題」について言えば、「VBプログラマの視点での呼称」なのか「VBコンパイラ作者の視点での呼称」
なのかをまずはっきりする必要があるだろう。

「インスタンス化」とはVBプログラマ視点の言い方のような気がするから、
これに対応する言い方ということなら「定義」じゃないの?

コンパイラ製作者の視点で「変数定義」の実装法の呼び方についていってるのなら
それはVB作ったMSの人にしかわからんのじゃないの。
それに変数のスコープによっても実装法は恐らく異なると思うけど

64:60
08/03/20 11:26:51
>>62
ありがとうございます。
早速インストールしてみます。


65:14
08/03/20 14:45:46
>>63
変数そのものが占有するメモリに関して組み込み型とオブジェクト型の区別
については
どうなんでしょうかね。
少なくともオブジェクト型、というか参照型については
宣言される時ではなく、初回利用時にインスタンス化するみたいですね。
で、組み込み型はどうなのか、というのが今回の話題ですね。
一応オチとしては「初回利用時かもしれない」というオチで落ち着きました。

参照型:インスタンス化
だとして
組み込み型:定義?
ですか?
なんか変な気が。。

66:デフォルトの名無しさん
08/03/20 15:03:12
>>65
やっぱり全然分かってないね。
New付きで定義された変数について、初回利用時まで生成が遅延されるのは
インスタンスであって変数そのものではないだろう普通に考えて。

ちなみに「インスタンス化」という言葉が動詞だとして、それがとる目的語は
「クラス」または「型」であって「変数」じゃないと思うんだけど。
言い換えれば別に変数が「インスタンス化」されるわけじゃないぞ。

67:14
08/03/20 16:41:10
>>66
New付きで定義された変数について、初回利用時まで生成が遅延されるのは
インスタンスであって変数そのものではないですよ。
当たり前です。
私がわかってない方が都合いいですか?
ならそれでいいです。
わかってません、すみません。
これについてはここで終了してください。

以下を知りたいです。
参照型に対して「インスタンス化」ならば、
組み込み型に対しては何でしょうか?
「定義」という答えを頂きましたが的を得ている気がしません。
他の人の意見聞かせてもらえませんか?
やはり定義で正解でしょうか?

68:デフォルトの名無しさん
08/03/20 17:03:48
あーこいつどうしようもなく頭悪いなあ。。。
だから「参照型のインスタンス化に対応する組み込み型の概念は?」なんてのは
そもそも愚問なんだよ。そんなものはないんだから。

参照先が作られることを「インスタンス化」というのだから、
そもそも「参照先」という概念がないVBの組み込み型に対応する概念なんてあるわけないだろう。

そして変数そのもの作られるタイミングは組み込み型だろうが参照型だろうが
変わらないはずだ、と言っているのにこれも全然理解しようとしないなこの馬鹿。

69:デフォルトの名無しさん
08/03/20 17:06:30
というかVB6以前って「参照型」っていう呼び方したっけ?
そういう呼称が導入されたのはドトネト以降で、VBでの呼び方は「オブジェクト型」
だったような気がしたけど。

まあこれに関しては説明の便宜かもしれないし、「参照型」と言った方が
呼び方として適切だと思うからいいんだけど。

70:デフォルトの名無しさん
08/03/20 19:01:39
> 参照型に対して「インスタンス化」ならば、
いみがわかりません><

71:14
08/03/20 19:14:36
>>69
しないと思います。
オブジェクト型で正解。
ご想像の通り説明の便宜です。

>>68
確かにこれは答えないかもしれませんね。
ここまで追求する問題でもないので質問取り下げます。
ありがとうございました。

>>70
言葉足らずですみません。


次の疑問がわきました。
先ほどVBには参照先という概念はないとお聞きしました。
本当ですか?
自分の意見は「ある」です。
Dim cls1 As Class1
Dim cls2 As Class1

Set cls1 = New Class1
cls1.s = "test"
Set cls2 = cls1
Debug.Print cls2.s

cls2の参照先はcls1のインスタンスです。
だから「ある」に一票。

72:デフォルトの名無しさん
08/03/20 19:50:56
> 先ほどVBには参照先という概念はないとお聞きしました。
日本語ダメな人?

73:デフォルトの名無しさん
08/03/20 20:47:37
>>71
クラスはドトネトでいう参照型/値型でいったら前者だよ。
だからNothingと比較できるる型の意味を君は理解してるか、と最初から言ってるでしょ。

74:14
08/03/20 21:42:53
>>73
>クラスはドトネトでいう参照型/値型でいったら前者だよ
だーかーら
そんな当たり前のこと堂々といちいち書かない。
何が言いたいんですか?

それはさておき、
>>71についてどなたかご意見いただけるとありがたいです。
よろしくお願いします。

75:デフォルトの名無しさん
08/03/20 21:45:13
VBに参照先の概念が無いなんて誰も言ってないだろ
完全に読み間違えてるよ

76:デフォルトの名無しさん
08/03/20 22:08:29
>>74
75が指摘してくれてるけど>>68で「ない」と言っているのは
組み込み型の参照先だよ。

っていうか、君はその「当たり前」のことを全然理解してないのに
その自覚がないから馬鹿だっていうんだよ。

77:14
08/03/20 23:10:50
>>75
なるほど。

参照先が作られることを「インスタンス化」というのだから、 そもそも
「参照先」という概念がないVBの組み込み型
に対応する概念なんてあるわけないだろう。

こう区切ればよかったんですね。
ありがとうございましたー。


78:デフォルトの名無しさん
08/03/20 23:35:55
vsFlexGridのセルにに画像を表示させるにはどうしたらいいんですか?

79:78
08/03/21 00:02:10
自己解決しました

80:デフォルトの名無しさん
08/03/21 11:48:26
インスタンス化とは、オブジェクトの実体(インスタンス)を生成するプロセスのことを指す言葉。
これに対応する組み込み型の言葉は無い。しいて言うなら、アロケート(メモリ割付)か。
インスタンス化では、普通、メモリのアロケートとオブジェクトの初期化が行われる。
「オブジェクトの初期化」の中身は、言語によって異なる。

組み込み型の場合によく使われる「定義」という言葉は、「宣言」と対になる言葉。
英語では、definitionとdeclaration。普通は、前者はメモリのアロケートを伴う場合を指し、
後者は文字通り宣言のみを行う場合に使う。C/C++では、両者は明確に区別して語られる。

81:デフォルトの名無しさん
08/03/21 11:51:53
蛇足:的は射るもの

82:デフォルトの名無しさん
08/03/21 11:55:16
さて、ここでVBのヘルプを見てみると、

>Dim ステートメント
>変数を宣言し、メモリ領域を割り当てます。

と記述されている。素直に理解するなら、Dimステートメントが実行されたときにメモリが
アロケートされる、すなわち、Dimステートメントとは、変数「定義」だということになる。

83:デフォルトの名無しさん
08/03/21 16:00:52
>15
がFAなんじゃねーの?
それが問題になるようなコードはVBで書くべきじゃないし、
書かなきゃならないならVBを使うのは間違いってことだよ。

84:14
08/03/23 10:48:08
>>80
求めていた答えをいただけてすごくすっきりしました。
ありがとうございました。

85:22
08/03/23 23:47:03
>>42
亀レス&言葉足らずですみません。最終的にはVista環境でもシフトJISで書き込みたいのですが
元来内部コードをUnicodeでもっているはずのVBで>>22のように書いたら
シフトJISになるわけが知りたかったので・・・。

>>45
有難うございます、面目ないです。参考になりました。
色々調べた結果ADODB.StreamやFileSystemObjectも使えそうなので
試行錯誤してみます。

86:デフォルトの名無しさん
08/03/23 23:57:31
どうしても何も、VBが変換書けてるに決まってるでそ。
理由はUNICODEそのままで書いたら文句いう連中が
出るに決まってるから

87:デフォルトの名無しさん
08/03/24 23:54:10
VB6.0を使っています。OSはWindowsXPSP2です。
他人のソースをコピーしてプログラムを作りました。
生成したEXEをエクスプローラで並べて表示にして見て見ると、ファイル名の下に薄い灰色で
作者名らしきものが表示されてしまいます。
プロジェクトのプロパティの「実行可能ファイルの作成」タブで
バージョン情報の中にある、コメント、会社名などの情報は全て消したのですが、
EXEを生成し、生成したEXEをエクスプローラで並べて表示にして見た時に、
ファイル名の下に薄い灰色で作者名らしきものが表示されてしまいます。
こういった付加情報を表示しなくするにはどうしたらよいのでしょうか?

88:デフォルトの名無しさん
08/03/25 14:17:30
>>87 「他人のソースをコピーしてプログラムを作りました」
そもそも、これが間違いの始まり

89:デフォルトの名無しさん
08/03/25 15:20:43
>87
なぜかF5では更新されないね。
別のフォルダを選択して元に戻ったら直らないかい?


90:87
08/03/25 16:15:21
>>89
ご指示通り別のフォルダにexeを一度作成すると消えました。
ありがとうございました。

91:デフォルトの名無しさん
08/03/26 16:22:26
Option Explicit

Sub zzz()
Dim hoge(3) As Variant
Dim hogehoge As Byte
Dim z As Byte

For z = 1 To 3
For hogehoge = 1 To 3
hoge(z) = Range("A" & hogehoge).Value
Next hogehoge
Next z
End Sub

上のようなコードで、zとhogehogeを同時に
インクリメントすることは可能でしょうか?

92:デフォルトの名無しさん
08/03/26 16:52:47
「Next hogehoge」の前に
「z=z+1」を入れれば可能だけど
それは構成として間違ってるから

やりたいことを日本語で整理して、
それから考えた方がいいと思うよ。

93:デフォルトの名無しさん
08/03/26 17:35:03
おk

94:デフォルトの名無しさん
08/03/26 19:15:36
zいらんやん

95:デフォルトの名無しさん
08/03/26 22:21:41
VB6.0でZipファイルを圧縮する処理をVBSで作成しBatで起動するように
したのですが、なぜか1回だけZipと変な拡張子ないデータが作られ
12ファイルの内9ファイルしか圧縮されていませんでした。(原因不明)
そこでZipファイルの中身の件数のみを数えて数があっていれば圧縮を
正常に終了したとみなしたいのですが、可能でしょうか?
全て解凍すると時間がかかりますのでお願いいたします。
ちなみにvbsで起動したのはdllを使わないで圧縮ができたからです。
よろしくお願いいたします

96:デフォルトの名無しさん
08/03/26 22:29:24
日本語で話してくれないか?

97:デフォルトの名無しさん
08/03/26 23:28:04
そのうまくいかない原因を究明するほうがいいと思うぞ。
急がば回れって言うし。

あと、VBSでできるんだったら、VB6でも全く同じようにできる。
せいぜいWScriptオブジェクトがないくらい。

98:95
08/03/27 01:30:19
>>96
すいません
>>97
VBSはネットでフリーであったのでそれを使用しました。ゆえにVBへの記述方法
がまったくわかりません。
(検索はしましたがVB VBSやVB6.0 VBSなど)VBSとVBがかぶっているからか変換の方法が見当たりませんでした。
原因が現在わからないので困っています。今回初めて不具合が出たもので。
>>96
ファイルを圧縮するVBSをbatで動かします。そのbatはVBで作成しています。
作成したbatの起動も同じVBでしています。
batでは以下の記述をしています
CD VBSのパス
CScript.exe MakeZIP.VBS ZIPファイルのパスと名前 圧縮するtxtのパスと名前1 圧縮するtxtのパスと名前2 …
exit
ですこれをshellで起動しています。
しかし今回作成されたzipファイルには後ろに記述していた11ファイルの内9ファイルしか
圧縮されておらず。残りの2ファイルはzipファイル内に存在しませんでした。(zipファイルと同じフォルダに拡張子のないファイルが1つ作成されてました)
ファイル名が長いわけでも、特殊文字が使われているわけでもありません(パスも同じです)
そこで、圧縮が正常にできているかを判断したいと考えました
その方法として圧縮したファイル件数を調べることができないかを考えました。
よろしくお願いいたします

99:デフォルトの名無しさん
08/03/27 01:35:38
>>98
VBSはVBのサブセットなんだから、VBS→VBは
変換なんて考えなくても、そのまま一字一句変えずに使えると思ってもいいくらい。
まずは試してみたか?

100:デフォルトの名無しさん
08/03/27 01:38:53
コマンドラインの文字長には制限があったような気がするけど?

101:デフォルトの名無しさん
08/03/27 12:37:36
1ファイルずつ追加していけば

102:デフォルトの名無しさん
08/03/27 19:21:07
VBAのサンプルでも使えばよかろう

103:95
08/03/27 22:49:35
レスありがとうございます。
>>99
はじめにfunctionを入れてみましたがいまいちどう起動したら
よいのかわからずに挫折しました。(標準モジュールに追加?)
>>100
まったく同じデータ(パス)で行っています。


104:デフォルトの名無しさん
08/03/27 23:15:08
>>103
コマンドラインの文字長制限はそう言う意味じゃないよ

>CScript.exe MakeZIP.VBS ZIPファイルのパスと名前 圧縮するtxtのパスと名前1 圧縮するtxtのパスと名前2 …

とあるけど、例えば

CScript.exe MakeZIP.VBS c:\dirnameA\dirnameB\dirnameC\dirnameD\dirnameE\dirnameF\dirnameG\ZIPFile.zip c:\dirnameA\dirnameB\dirnameC\dirnameD\dirnameE\1.txt c:\dirnameA\dirnameB\dirnameC\dirnameD\dirnameE\2.txt (12.txtまで同じ事を繰り返す)

↑のような長ったらしいパスで使ってるなら途中で途切れて当たり前

CScript.exe MakeZIP.VBS c:\ZIPFile.zip c:\1.txt c:\2.txt (12.txtまで同じ事を繰り返す)

にしたら行けるかもしれない。それでも長いから途切れるもしれない
「CScript.exe」の後ろに続く部分が長すぎると途中で切れるってこと

よく送るメニューに入れて使うソフトがあるけどあれもたくさんのファイル(例えばWindowsフォルダに存在する全てのファイルとフォルダ)を選んで送るってやると
「指定したデバイス、パス、またはファイルにアクセスできません。適切なアクセス許可がない可能性があります。」
というエラーが出る。仕様だからこれは回避できない

105:デフォルトの名無しさん
08/03/28 21:10:22
16進数のカラーコードを赤・緑・青の3要素に分解するにはどうすればいいの?
例えばボタンの表面のデフォルトカラーって「&H8000000F&」だけど、これをRGB
に分ける方法ってある?
要はRGB関数の逆をやりたいんだけど。。。


106:95
08/03/28 23:56:20
>>104
ありがとうございます
今回その症状がまた出たので報告します
今回は9→11→11→11と12個全部をどうしても圧縮してくれませんでした。
104さんが言うように文字が切れているというのでしたら
最後に記述したパス(txt)が含まれないはずです。しかし
含まれていないデータは真ん中に記述されていました。
また作成したバッチを手起動すると12個全てが圧縮されました。
このことからshell関数がおかしな動作をしていると思うのですが
書き方は
ret1=shell("CScript.exe MakeZIP.VBS c:\ZIPFile.zip c:\1.txt… ",1)
ShellEnd (ret1)
で標準モジュールで
URLリンク(hanatyan.sakura.ne.jp)
に書いてある文章を
private→public
に変更して書いています。
変更の仕方がまずかったのでしょうか?
VB6.0 SP3 ですよろしくお願いいたします

107:デフォルトの名無しさん
08/03/28 23:57:10
小学校の算数だろそんなの。。

VBの場合、どうせ共用体もポインタも使えないんだから演算で求める方法を考えてみ。

まず十進数で考えてみてみ。
君は6ケタの数字の上位2ケタを取り出す方法がわからんの?
10,000で割った商を求めるだけだろ。
Hexだって同じことじゃん。

108:デフォルトの名無しさん
08/03/29 00:00:00
>>105
っていうかこれRGBの値じゃないだろう>「&H8000000F&」


109:デフォルトの名無しさん
08/03/29 01:14:20
>>105
RGBの分解方法はヘルプに載ってる。
&H8000000F&はシステムカラーの番号であって、RGB値ではない。

110:デフォルトの名無しさん
08/03/29 03:08:18
>>106
エラーが出てんじゃないの?
WScript.exeで実行してみ
ていうかなんでCScript.exeなの?


111:95
08/03/29 07:43:58
>>109
MakeZIP.VBS
の初めにそのような記述があったのでそのまま使用しています。
ありがとうございます。変更してやってみます

112:デフォルトの名無しさん
08/03/29 09:50:53
>>109
レスありがとうございます。
確かにRGB値だったら16進6桁だと思っていたのでおかしいなとは思っていたのです。
ただ薄い水色(&H00FFFFC0&)だとRを192(=C0)、GとBを255(=FF)としてRGB関数を
呼び出すとちゃんと薄い水色になるので対応しているように思えたのです。
とりあえずWEBでシステムカラー値とRGB値の対応表を探してみますね。。。(-_-)

113:デフォルトの名無しさん
08/03/29 10:10:48
システムカラーは固定色じゃないが

114:デフォルトの名無しさん
08/03/29 13:54:20
URLリンク(msdn.microsoft.com)

115:112
08/03/29 21:36:43
>>114
これです!まさにこれ!
ありがとうございます。マジで助かりました!。・゚・(ノД`)・゚・。

116:デフォルトの名無しさん
08/03/30 11:06:40
>>105

Red = RGB値 And &h0000FF
Green = ( RGB値 And &h00FF00 ) \ 256
Blue = ( RGB値 And &hFF0000 ) \ 65536

だった気がする

117:デフォルトの名無しさん
08/04/02 21:21:58
VB6でのコードの書き方で質問があります。

If hoge = 1 then
  i = i+1
End if

というふうに複数行で書くのと、

If hoge = 1 then:i=i+1

というふうに1行で書くのとでは多少でも処理の速度は変わりますか?

118:デフォルトの名無しさん
08/04/02 21:28:33
そりゃあインタプリタの時代だったらかわったけどさ
EXEで同じコードが吐かれれば速度は同じさ

119:デフォルトの名無しさん
08/04/02 21:31:09
>>117
最適化で同じ処理になると思います。
間違ってたら他の人指摘お願いします。

120:デフォルトの名無しさん
08/04/02 21:53:38
>>118,119

なるほどコンパイルすると結果は同じなのですか、
ありがとうございました。

121:デフォルトの名無しさん
08/04/03 20:42:26
WinXP,Vistaではウィンドウのタイトルに
「abcdefg」のように表示されている物が
なぜか2000環境で実行すると
「ABCDE~~」のように化けてしまいます。
なぜでしょうか?
実行ファイルの横にランタイムも配置しているので
環境でおかしくなるとは思ってなかったんですが。

122:デフォルトの名無しさん
08/04/03 20:57:09
>実行ファイルの横にランタイムも配置している

Sidebyside COMのこと?

123:121
08/04/03 21:23:24
>>122
表現が悪かったです。
実行ファイルの配置してある階層に
msvbvm60.dllや、VB6JP.DLLなど、
VB6ランタイムを一通り置いています。
こうすることでランタイムをシステムから読み込ませないようにするためです。

124:デフォルトの名無しさん
08/04/03 21:23:37
>>121
VBランタイムの言語DLL(VB6JP.dllだったかな)は
「読み込まれた」MSVBVM60.dllと同じフォルダにないといけない。
システムフォルダのが読まれてるんじゃない?

125:デフォルトの名無しさん
08/04/03 21:23:44
ブラウザのリンクをドラッグして処理を行いたいんですけど、
OLEDragDropイベントでDataの中を見てみると
「データの形式が一致しません」エラーが発生します。
リンク先の情報をVBで取得するにはどうすればいいのでしょうか?

126:デフォルトの名無しさん
08/04/03 21:34:21
>>125
もしかしてfiles見てる?

リンクはテキストだぞ。GetFormatとGetDataしてみ。

127:デフォルトの名無しさん
08/04/03 21:42:16
>>123
っていうかどう見ても馬鹿で不勉強なんだからベタにディストリビューションウィザード使えよ。

エンジンの仕組みを理解してもいない、するつもりもない奴が「俺様チューニング」
ぶっこいて動きませんって馬鹿も休み休み言えよ。

128:121
08/04/03 21:54:57
>>127
「ディストリビューションウィザード」って実行環境に作ったソフトを
インストールできる環境で利用可能なものですよね?
ネットワークフォルダから実行するため今回は利用していません。
もしかして勘違いしていますか?

129:デフォルトの名無しさん
08/04/03 22:08:01
>>128
煽り合いもいいが、先にやることあるだろw

130:121
08/04/03 22:14:37
>>129
いや、もし他に方法あるんなら純粋に知りたかったので伺いました。
悪意なんてないです。

>>124
そういう意味ではmsvbvm60.dllも実行ファイルと同じ階層に配置してるので
大丈夫、、、と思ってるのですが。
でも文字がおかしくなるのでシステムから読まれているとも考えられますね。
だとしたらなんでなんでしょうか。


131:デフォルトの名無しさん
08/04/03 22:18:25
>>128
勘違いしてるのはお前さんだろアホか


132:121
08/04/03 22:20:15
>>131
そうなんですか?
勘違いを指摘してもらえるとスキルあがりますので
それはそれでありがたいのですけど。。

133:デフォルトの名無しさん
08/04/03 22:33:52
>>130
ちなみに両方とも俺(124=129)だがw

Windowsは基本的に同じDLLは2度と読まない。(無駄だから)
なので、先に読まれてるDLLがあればそれを再利用する。
(たとえアプリと同じフォルダに同じDLLがあってもだ)

さらに、Win2000は確か読み込むDLLの優先度をアプリと同じフォルダか
システムフォルダかを選択出来る設定があったはず。
それらをお前さんがそれらを把握してないならそれが理由な可能性が高い。
把握してるなら先にMSVBVM60.dllを使うアプリが起動してるからだろう。

あとね、煽り合いする暇があるなら俺の助言をちゃんと考えろよな。
直接的な答えが出せないからあーいう受け答えになってんだろうけども、
煽りもある意味助言だぜ?

134:121
08/04/03 23:24:03
>>133
すみません、
実は単純に>>128の時点で>>124を見落としてたんですよね。。


なるほど。
>Windowsは基本的に同じDLLは2度と読まない。
これは知ってました。
>なので、先に読まれてるDLLがあればそれを再利用する。
これも知ってました、が、
今回の件と脳内でリンクしていませんでした。
ということで当然>>121の動作は予想できるあり得る動作ですね。
対処方法はOSの設定変更、もしくはインストーラー等で
システムにDLLを組み込むことですね。
納得しました、ありがとうございます。

135:デフォルトの名無しさん
08/04/04 00:13:50
>>133
その性質はKnownDllsに限られるはず。

136:デフォルトの名無しさん
08/04/05 12:47:35
VBで作られたもので有名なのって
なんかありますか(^^)

137:デフォルトの名無しさん
08/04/05 13:14:19
>>136
スレリンク(tech板)

138:デフォルトの名無しさん
08/04/05 19:08:57
板違いでしたらご容赦を。
URLリンク(homepage1.nifty.com) にある#1 -End Of Destiny-
をしていたところ、今日になって「実行時エラー'5':プロシージャの呼び出し、または引数が不正です。」
と出て起動できなくなってしまいました。

検索をかけてみるとURLリンク(support.microsoft.com) がでてきたので
互換モードにしてみたのですが解決せず。新しく落としなおしても、保存したフォルダの
置き場所を変えても効果なしでした。

VB製ソフトの現象のようなのでここで質問させていただきました。よろしくです。

139:デフォルトの名無しさん
08/04/06 01:30:19
>>137
ありがとう。
最近からVB始めたんで色々コードを見てみたいんです。

140:デフォルトの名無しさん
08/04/06 08:11:15
>>138
最小化してプログラムを終了すると次回起動したときに
実行時エラーになるね。

たぶん単純なプログラムミスだと思う。
作者にメールしてみるといいよ。

141:デフォルトの名無しさん
08/04/06 19:38:15
>>140
レスどうもです。
自分でできる解決策というのは何かないのでしょうか?
作者は恐らく新作とかで忙しいでしょうし、試しに2作目もやってみたところ同じエラーが出たので
修正も煩雑になりそうですし。

最小化して終了した記憶はないのですが、ウィザードリィ風ゲームなので強制終了は
何度もさせました。

142:デフォルトの名無しさん
08/04/06 22:49:07
>>141
レジストリから画面サイズや座標なんかの読み込みで落ちてるとか?
消すか標準値に書き直せばいけそうな気がする

143:デフォルトの名無しさん
08/04/07 07:58:48
VB参考書4冊セット
URLリンク(auction.item.rakuten.co.jp)
これだけそろってれば完璧かな?

144:デフォルトの名無しさん
08/04/07 08:06:01
>142
おそらくそんな感じ

>141
自分で解決したいのだったら Regmon で、どのレジストリを使ってるか
監視してみるといい
URLリンク(cowscorpion.com)


145:デフォルトの名無しさん
08/04/07 09:54:34
>>142
適当にレジストリを見てると、LeftとTopという項目(画面位置?)が-48000などと
変な数字になってたので一度消してみたところ起動することができました。
どうもありがとうございます。

>>144
これでログとると不要なレジストリとか消せそうですね。
今度何かあった時に使ってみます。ありがとうございます。

146:デフォルトの名無しさん
08/04/08 21:44:43
>>95さんと同じような内容なんですが(検索してたらここにきました)、
自分はMakeZIPをVB6に組み込んで使用しています。
しかし、どうしてもZIPファイルの中身を確認する方法が見当たりません。
確認したいことは圧縮されているファイル数です。
ほかにもサイズ、名前などがわかればベストなのですが
どなたか方法を知ってる方はここにはおられませんか?

147:デフォルトの名無しさん
08/04/08 21:57:21
VB6なら、メジャーなzipを扱えるdll使えよ

148:デフォルトの名無しさん
08/04/08 22:02:48
シェルで、zipを圧縮フォルダとして使えるようになっている環境なら、それも使える。

149:デフォルトの名無しさん
08/04/08 22:27:11
正直InfoZipあたりのzip.exe/unzip.exeでも付属させて
コマンドライン叩いたほがいいんじゃないかっておもう。

150:デフォルトの名無しさん
08/04/08 22:50:17
exeキックだと、コールバック使えないじゃん・・・

151:デフォルトの名無しさん
08/04/08 23:27:16
パイプ経由でコールバックもらえばええやん。

152:デフォルトの名無しさん
08/04/09 11:25:15
それ、コールバックって言わないし

153:デフォルトの名無しさん
08/04/09 12:30:34
>>146
ExtractZip.vbs 読め。

154:デフォルトの名無しさん
08/04/09 14:17:21
ListZip.vbs 読め。
と言っても読めるくらいなら来ないよな?

155:デフォルトの名無しさん
08/04/09 16:00:41
パイプ経由でライトバックもらえばええやん。


156:デフォルトの名無しさん
08/04/09 16:04:30
俺用語は使わないでね

157:デフォルトの名無しさん
08/04/09 16:06:49
筒経由で書き戻しもらえばええやん。

158:デフォルトの名無しさん
08/04/09 16:34:36
マジレスすると、unzip32.dll使え。
VBのコードも付いてる。
商用利用可。

159:146
08/04/09 22:56:57
皆さんありがとうございます。
ListZip.vbs これでできたのですね。ありがとうございます。
しかし、これをVB6で使用できるようにできません(涙)
どこかに標準モジュールないのでしょうか?

160:デフォルトの名無しさん
08/04/09 23:37:46
アホかおまえは。
普通にDLL使え。

161:デフォルトの名無しさん
08/04/10 00:19:24
>>117
ついでですがThenの後ろのコロンは要らないです。

>>159
VBSから標準モジュールやクラスモジュールへの移植は
そう難しくないと思います。

162:デフォルトの名無しさん
08/04/10 01:07:07
なにこいつ

163:デフォルトの名無しさん
08/04/10 11:34:25
あほちゃいますか?

164:デフォルトの名無しさん
08/04/10 11:57:45
スレリンク(tech板:523番)

165:デフォルトの名無しさん
08/04/10 11:58:36
だーかーらー、DLL使えって!!!

166:デフォルトの名無しさん
08/04/10 12:29:51
足し算できないやつに積分教えるようなものだ
やめとけ

167:デフォルトの名無しさん
08/04/10 12:57:35
VB6でグローバル変数を使わず、すべての関数をカプセル化することは可能でしょうか?

168:デフォルトの名無しさん
08/04/10 13:05:01
できるよ。Formがグローバルなのに目をつぶればね。

169:デフォルトの名無しさん
08/04/10 15:58:13
複数ののCheckboxを使って、optionbuttonみたいな交互動作てできませんか?


170:デフォルトの名無しさん
08/04/10 18:39:27
アプリを終了してもアプリ自体がタスクに残る不具合が発生しています。
再発条件は不明ですが、不具合発生した環境があれば原因追求をどのようにするのが効率的でしょうか?
御教授のほどよろしくお願いします。

171:デフォルトの名無しさん
08/04/10 19:05:19
テキストボックスに16進数の文字がある場合
それを変数に数値として代入するにはどうすればいいですか?
valやConvert関数では出来ませんでした

例 テキストボックスの文字 = 0x1234 (十進数:4660) -> 数値に変換して変数に代入 -> 4660 (数値変数)

172:デフォルトの名無しさん
08/04/10 19:10:00
>>170
自分でFormの変数宣言しないで、VBが用意してるForm1とかそのまま使ってるんじゃね?
あれってプロパティにアクセスしたりすると自動的にロードされるから、
たぶん終了直前に何らかのプロパティにアクセスして再ロードされたフォームがある
OnLoadでブレイクでも入れておけば分かるんじゃないかね
もう一つ考えられるのがオブジェクト同士の循環参照だね

173:デフォルトの名無しさん
08/04/10 19:12:20
>>171
頭に&HつけてValしろ

174:デフォルトの名無しさん
08/04/10 20:36:53
なにこれ?
新人みたいなアホな問いばかりじゃないか。


>>169
余裕で出来るけど?
それが何か?

>>170
終了ボタンを押して終了した気になってる系かね。
Unloadイベント中に何か別のFormなり何なり生成してないかい?

>>171
人に聞く前にMSDNくらい一人で見ようぜ。

175:デフォルトの名無しさん
08/04/10 20:49:33
>>173-174
それが、
0x12345678 のような 4桁以上の16進数だと型オーバーで変換が出来ません
MSDNのヘルプ見てもDouble型までが限界のようです
Long型のような8桁くらいの文字(16進)を数値に変換するのにはどうすればいいのかヘルプ見ながら悩んでます

176:デフォルトの名無しさん
08/04/10 20:59:50
>>175
どうせそんなレベルならVB6みたいな終わってる開発環境使う意味ないだろw
まあLongの型指定文字を調べてみることだね。

177:デフォルトの名無しさん
08/04/10 21:00:11
>>175
文字列右から4文字ずつ区切ってvalして、最後にシフトするのはどうですか?

178:デフォルトの名無しさん
08/04/10 21:18:11
>>176-177
CLngという型指定で変換出来ました
どうもありがとう

179:デフォルトの名無しさん
08/04/11 00:18:50
>>172
タスクマネージャーでメモリ使用量を確認していると、
各イベント(フォーム起動→終了→以下繰り返し等)を起動するたびに使用メモリが増加していきます。
循環参照の現象でしょうか?

180:デフォルトの名無しさん
08/04/11 00:51:38
>>179
循環参照って何のことだか理解してる?

>>172 に書いてある
>OnLoadでブレイクでも入れておけば分かるんじゃないかね

を実行してなさそうな文章なんだけどやったの?

181:デフォルトの名無しさん
08/04/11 03:06:23
プログラム板は当たりがきついな

182:デフォルトの名無しさん
08/04/11 03:09:23
>>179

>>172
> タスクマネージャーでメモリ使用量を確認していると、
> 各イベント(フォーム起動→終了→以下繰り返し等)を起動するたびに使用メモリが増加していきます。

解放してないから

183:デフォルトの名無しさん
08/04/11 03:09:56
>>181
おしえてぐーなら優しいけどな
あと2ちゃんでも女子中学生にはやさしいよ

184:デフォルトの名無しさん
08/04/11 06:46:11
つ「Unload Me」

185:デフォルトの名無しさん
08/04/11 10:46:53
Using src As New FileStream(srcName, FileMode.Open, FileAccess.Read)
While True
readSize = src.Read(buf, 0, BUFSIZE) ' 読み込み
If readSize = 0 Then
MsgBox("HIT=" & hval)
Exit While ' コピー完了
End If
End While
End Using

このコードでファイル操作の処理をすると
読み込み開始から終了までのあいだフォーム全体が操作不能になります
読み込み処理中でもボタン等の操作を可能にするにはどうすればいいでしょうか?
中断ボタンを作ってあるのですが操作不能になって機能しません

186:デフォルトの名無しさん
08/04/11 14:44:14

Visual Basic Version 5.0 Control Creation Edition
スレリンク(tech板:18番)

ふと思ったんだが、↑これと↓これ組み合わせて.EXEファイルを作ることできるのだろうか?

Microsoft Visual C++ Toolkit 2003
スレリンク(tech板)


187:デフォルトの名無しさん
08/04/11 17:54:26
上でDLL (OCX)作って、下でそれを使うEXE作るってことは可能だろうね。
そもそもなぜ今更VC++ 2003?
事情がなければ2005でも2008でも使えばいいだろうに。

188:デフォルトの名無しさん
08/04/11 19:00:08
>>185
つ「DoEvents」

189:デフォルトの名無しさん
08/04/12 20:13:12
ComboBoxでリストから項目が選択してドロップダウン部分が消えた瞬間に任意のコードを実行したいのですが
DropDownClosedやSelectionChangeCommitted
その他のそれらしいイベントを設定しても
選択→ドロップダウンが消える→再度選択
としないとそのコードが実行されません

どのイベントを設定すればいいでしょうか?

190:デフォルトの名無しさん
08/04/13 10:23:58
Click

191:デフォルトの名無しさん
08/04/13 10:45:44
SAVEデータのようにバイナリデータとShift_JISの文字列が混在するファイルの
文字列部分を編集して書き戻したいのですが

Dim FreeNum as Integer
Dim Bin1() as Byte , Bin2() as Byte
Dim strRes as String

FreeNum=FreeFile
Open hoge.bin For Binary As #FreeNum
Get #FreeNum, , Bin1
Close #FreeNum
strRes = StrConv(Bin1,vbUnicode)

'本来ここでstrResを編集する

Bin2=StrConv(strRes,vbFromUnicode)

とした時にBin2はBin1を再現せず、バイナリデータの部分が変わってしまいます。
通常このような操作を行う場合はどのようにすれば良いのでしょうか?
お力を貸して下さい。

192:デフォルトの名無しさん
08/04/13 18:48:40
>>191
それはShiftJISにしたときのバイト数えて詰め物したりでかなり面倒くさい。
結局Cランタイムのfopen系の関数をラップしたActiveXを作ってそれで読み書きさせた。

193:デフォルトの名無しさん
08/04/13 19:14:58
リストボックスで選択した場所から下の項目を削除したいのですが
下のプログラムだとindexエラーが出てうまくいきません

For i = ListBox1.SelectedIndex  To ListBox1.Items.Count - 1
ListBox1.Items.RemoveAt(i)
Next

どう対処すればいいでしょうか?

194:デフォルトの名無しさん
08/04/13 19:17:44
後ろから削っていくとか。

195:デフォルトの名無しさん
08/04/13 19:26:36
デバッグして確認したときそれぞれの値が
ListBox1.SelectedIndex=2
ListBox1.Items.Count=8  (項目数=3)
となっていて

その状態で>>193のFOR文を実行すると i の値が2,3,4,5,6,7 とステップして
ListBox1.Items.RemoveAt(i) で最後の項目まで問題なく削除出来ると思うのですが
どういう訳かエラーになります

196:デフォルトの名無しさん
08/04/13 19:28:34
>>195 修正
× (項目数=3)
○ (項目数=7)

197:デフォルトの名無しさん
08/04/13 19:33:24
どういう訳かも何も、たとえばRemoveAt(10)を実行した時点で
いままでItems(11)だった奴がItems(10)に繰り上がるわけだが

198:デフォルトの名無しさん
08/04/13 20:00:32
>>197
当たり前のことすら理解出来てない人に
答えを教えてくれてありがとうございます
無事ちゃんと動作するコードに出来ました

199:デフォルトの名無しさん
08/04/13 22:11:10
1年半後に登場するWindows7にはVB6ランタイムはサポートされますか?

200:デフォルトの名無しさん
08/04/13 22:59:27
知らんがな(´・ω・`)

201:デフォルトの名無しさん
08/04/14 17:37:40
VB6でPublicの構造体・変数の宣言可能な数(容量?)ってどの位か解りませんか?

202:デフォルトの名無しさん
08/04/15 12:38:32
VS2008のVBでラベルの背景を透明化するにはどうすればいいですか?
label1.BackColor = Color.Transparent
では出来なかったです

203:デフォルトの名無しさん
08/04/15 13:34:38
>>202
スレタイ読めますか?

204:デフォルトの名無しさん
08/04/15 23:42:02
>>201
そんなのあるんですか?

205:デフォルトの名無しさん
08/04/16 10:14:31
ループする処理の中にあるIF文をSelect文にしたら処理が倍以上かかるようになったんですが
これはどうしようもないことですか?

206:デフォルトの名無しさん
08/04/16 11:32:45
>>205
条件文がわからんから、「そんなもn」としか答えようが無い。

207:デフォルトの名無しさん
08/04/17 08:12:15
>>205
Selectを使うな。
Excelとのやりとりは速度が遅くなる。
Withを使うか、まとめて配列に代入してから配列を扱え。

208:デフォルトの名無しさん
08/04/17 19:13:52
>>204
よほどの事が無い限り、まず制限を超える事は無いと思いますが有りました。
(コンパイル時にメモリー不足と出る)


209:デフォルトの名無しさん
08/04/17 20:06:02
>>208
そりゃ単にメモリ増設すりゃ回避できるんじゃないか?

210:デフォルトの名無しさん
08/04/17 20:26:21
>>209
2GB以上アロケートできないとかないのかね?

211:デフォルトの名無しさん
08/04/17 22:35:50
ループ処理中に何かボタンおされたらループから抜けるプログラムを作りたいのですが
そのボタンのsubではない 違うSub内で
コントロール上のどのボタンが押されたのかを検出する方法ってありますか?

212:デフォルトの名無しさん
08/04/17 22:55:24
>>211
ループ処理の中でDoEventsと終了フラグのチェックを頻繁にやるしかない。
DoEventsを使うときは再入やら予定外の動作をはじくようにする必要がある。

213:デフォルトの名無しさん
08/04/18 12:23:30
昔、だれかが作ったソフトのメンテしてたら
フォームに貼り付けたコントロールの数がオーバーしてこれ以上追加できない
という状況になったときに、泣いたことはあるなw

214:デフォルトの名無しさん
08/04/18 14:24:41
メンテだと設計方針が間違っていようが、そのまま行かざるを得ないときもあるから辛いな

215:デフォルトの名無しさん
08/04/19 22:13:21
FileCopyでファイルコピーするとshift-jisで書き出したファイルがUTF-8になってしまうのですが
対象方はありますか?

216:デフォルトの名無しさん
08/04/21 21:51:25
VBからExcelに値を貼り付けてプレビュー表示をする処理にて
処理中は見えないようにするためVisibleをFalseにするのですが、
EXEファイルから起動するとVisibleをFalseにした段階で最背面に表示されてしますいます。

Visual Basicから起動するとプレビュー画面が最前面に表示されるのですが何故でしょう?

使っているコンポーネントはQuickPack、Farpoint SpreadSheet、InputMan Proです。

今まで別な環境で作った際はこんな現象になったことはありません。
同じコンポーネントを使っている方で克服した方はおりますか?

ちなみにSetWindowPos等使わないで済ませたいです。

途中ダイアログを表示したりメッセージボックスを表示させたりするので
Visual Basicで起動しているときと同じ用途で実現させたいのです。

ちょっと分かりにくいかも知れませんが宜しくお願い致します。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4379日前に更新/166 KB
担当:undef