VBプログラマ質問スレ(6.0以前) Part33

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
VB(6.0以前)の質問スレです。
VB.NETの話題はできるだけひかえてください。

前スレはこちら
(pc2サーバ壊滅で見れない。pc2をpc5に変えれば見れる。
過去ログの場所がどうなるのか良く分からんので次スレ立てる人修正よろ)
  Part25 http://pc2.2ch.net/tech/kako/1052/10526/1052627913.html
  Part26 http://pc2.2ch.net/tech/kako/1055/10551/1055145106.html
  Part27 http://pc2.2ch.net/tech/kako/1058/10586/1058674927.html
  Part28 http://pc2.2ch.net/tech/kako/1061/10612/1061296197.html
  Part29 http://pc2.2ch.net/tech/kako/1065/10654/1065446334.html
  Part30 http://pc2.2ch.net/test/read.cgi/tech/1069160036/
  Part31 http://pc2.2ch.net/test/read.cgi/tech/1073732636/
  Part32 http://pc5.2ch.net/test/read.cgi/tech/1077216109/


【VB.net関連スレ】
VB.net質問スレ (Part5)
http://pc5.2ch.net/test/read.cgi/tech/1078134703/
【Win32 API関連スレ】
Win32API質問箱 Build17
http://pc5.2ch.net/test/read.cgi/tech/1077470361/

心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
五.荒らしは相手しない。
六. VB情報募集中。
七.VB.NETの話題できるだけひかえる。
2デフォルトの名無しさん:04/03/30 09:27
  Part 1 http://piza2.2ch.net/tech/kako/968/968328471.html
  Part 2 http://piza2.2ch.net/tech/kako/990/990793224.html
  Part 3 http://piza2.2ch.net/tech/kako/1000/10005/1000523122.html
  Part 4 http://pc.2ch.net/tech/kako/1006/10069/1006922992.html
  Part 5 http://pc.2ch.net/tech/kako/1010/10106/1010624646.html
  Part 6 http://pc.2ch.net/tech/kako/1013/10138/1013844542.html
  Part 7 http://pc.2ch.net/tech/kako/1015/10158/1015836357.html
  Part 8 http://pc.2ch.net/tech/kako/1018/10187/1018794901.html
  Part 9 http://pc.2ch.net/tech/kako/1020/10208/1020830472.html
  Part10 http://pc.2ch.net/tech/kako/1022/10221/1022127528.html
  Part11 http://pc.2ch.net/tech/kako/1024/10243/1024380249.html
  Part12 http://pc3.2ch.net/tech/kako/1026/10266/1026642565.html
  Part13 http://pc3.2ch.net/tech/kako/1029/10292/1029241786.html
  Part14 http://pc3.2ch.net/tech/kako/1030/10309/1030947162.html
  Part15 http://pc3.2ch.net/tech/kako/1032/10327/1032706491.html
  Part16 http://pc3.2ch.net/tech/kako/1034/10343/1034302532.html
  Part17 http://pc3.2ch.net/tech/kako/1036/10361/1036154952.html
  Part18 http://pc3.2ch.net/tech/kako/1038/10381/1038103769.html
  Part19 http://pc3.2ch.net/tech/kako/1039/10398/1039859691.html
  Part20 http://pc2.2ch.net/tech/kako/1041/10418/1041879465.html
  Part21 http://pc2.2ch.net/tech/kako/1044/10440/1044028945.html
  Part22 http://pc2.2ch.net/tech/kako/1046/10463/1046354784.html
  Part23 http://pc2.2ch.net/tech/kako/1047/10477/1047743187.html
  Part24 http://pc2.2ch.net/tech/kako/1050/10501/1050151126.html
3デフォルトの名無しさん:04/03/30 11:20
Visual Studio 6.0 Service Pack 6 正式リリース
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
4デフォルトの名無しさん:04/03/30 11:52
構造体の内部に変数ではなく定数を持たせたいのですが
どうすればいいでしょ?
>>4
不可能。
なんでそんな機能が欲しいの?
用途によってはクラスで代用できるかもしれないけど。
6デフォルトの名無しさん:04/03/30 15:04
プロジェクト内にてパブリック宣言の凄い数の定数があるんですが
グループ事に分けて分かりやすい構造体として宣言できれば
呼び出す場所でラクだなあと
>>6
enum使え。
8デフォルトの名無しさん:04/03/30 15:16
列挙型ってクラスでもつかえますか?
やってみりゃ一発でわかりますよ?
10デフォルトの名無しさん:04/03/30 15:25
すいません質問の仕方があやまっていました。
プロジェクト内というのは
プロジェクトの集まりの誤りです。グループに追加したまとまりです
なので 外部コールになります
すいません 紹介させてください。
もし興味がございましたらのぞいてみてください。
VBと非常に似た文体でVB経験者も多いです>>NS Basic/Palm

もしPalmもお使いのVBゆーざーがいらしたら参加してくださいね
あちらこちらに貼ってすいません

【nice】初心者!PalmでNS Basic/Palm【smart!!】01
http://pc4.2ch.net/test/read.cgi/mobile/1080549560/


>10
タイプライブラリが必要
13デフォルトの名無しさん:04/03/30 18:04
tlbって拡張子のファイルですか
コンパイル時のみ必要で配布不要なんですよね確か 一度試してみます。
ありがとうございます
他のプロジェクトのenumは普通に参照設定するだけで使える。
プロジェクトの外にenumを公開するにはクラスに書かなければならない。
15デフォルトの名無しさん:04/03/30 22:36
VB6でインターネット上のサーバに接続してデータを取り込み
その内容を用いて、データを操作しそれを再度アクセスして
更新するというようなことは可能でしょうか?
ADOとODBCで可能らしいというのはきいたのですが、
具体的な方法や文献がさがしたけど見つかりませんでした。

どなたかアドバイスをお願いします。
>>15
サーバーがインターネット上にあろうがLAN上にあろうが
プログラムは変わらない
17仮人 ◆Qy2chZzA.A :04/03/30 23:19
配列に一気に値を挿入するってできまつか?
教えて君でスマソ。
18仮人 ◆Qy2chZzA.A :04/03/30 23:21
>>弐.質問する前に MSDN などで調べてみる。
あ、MSDNで調べてないや、スマソ・・・。
19デフォルトの名無しさん:04/03/30 23:41
以下の問題で困ってます、どうかお助けを!!
VB6で作ったプログラムをWinXPで動かした場合だけ
以下のようなエラーが発生します。
発生する場所は不定で、負荷の高い処理で発生しやすいです。

ハンドルされていない例外 は xxx.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation。

同じような経験をされた方はいらっしゃいませんか?
VB6はXPに対応していないということでしょうか。
>>19
してない。
>>17
CopyMemoryは挿入じゃないな。
できない。

>>19
再現できる最小のコードを用意汁。
2219:04/03/31 11:57
>>21
最小のコードを用意しようとしてエラーの発生箇所にアタリをつけて
いろいろと調べていると、DLLからの文字列渡しの問題であることがわかりました。

DLLからの文字列渡しをファイル渡しに変更したところ、一応問題は解消しました。
しかしファイルで渡すなんてドンくさいことはしたくないので
正しい文字列渡し(DLL->VBアプリ)の方法を調べているところです。
なぜXPだけで起こるのかも不思議です。
23デフォルトの名無しさん:04/03/31 12:28
文字列渡しとかファイル渡しとか夜霧の渡しとか意味わかんないんだけど
これって一般的な用語なの?
>>23
うちでは使ってるよ。 言語問わずに・・・
25デフォルトの名無しさん:04/03/31 12:34
>>19

・文字列渡す
Dim s As String
s = "Hoge"
Call DllFunc1(s)
(何も考えなくてよい)

・文字列受け取る
Dim s As String
s = Str(vbNullChar, 120)
Call DllFunc(s, 120)
(事前に必要な文字列分の長さを確保してからコールする。
 120はsに確保されたメモリの領域サイズの意味)

MSDNに1から10まで書いてあるから、よく読むこと
26デフォルトの名無しさん:04/03/31 13:06
VBで作成したバッチ処理でOutlook Object Modelを使っているのですが
http://support.microsoft.com/default.aspx?scid=kb;ja;821679
これが原因のMSGが裏で表示されるためOutlookのアドレス帳に
アクセスするところで処理がとまってしまうんですが
回避方法ありませんか?
>>26
Javaをお勧めする。
>>26
C#をお勧めする。
>>26
強力にJavaをお勧めする。
>>26
セキュリティ強化の弊害だね。まあ仕方ないといったところか。
普通のやり方ではそこに書いてあるとおり
アクセスを許可する時間を毎回指定する必要があるのだろう。

> COM アドイン プログラムはデフォルトで信頼されており
もしかしたらユーザが作ったプログラムを信頼させる方法があるかもね。

ウインドウをプログラムで操作してなんて奥の手も考えられるけど
なんかオススメできない感じ。

>>27,29
それは無理だろうw
もし出来たらJavaはセキュリティを破ることが出来る事になっちゃうよ。

>>28
C#(.NET)ではアクセスするための新しいオブジェクトでもあるのか?
winNT4.0+VB5.0sp3で開発しています。
ツリービューコントロールへ256色アイコンを表示しようと思ったのですが
16色へ減色されてしまいます。
256色アイコンを表示する方法はありませんでしょうか?
>>31
VB5CCEでBMPを取り込む限りフルカラーに対応しているっぽいので
BMPを使うか16色パターンを含まないアイコンで試してみては?
>>32
BMPでもOKなんですか?やってみまつ。さんくすー
>>32
できましたー
でもicoでいうところの透明色っていうのはbmpではないですよね。
まあ、余白のところは白にしておけば問題ないということにしました。

>>34
icoファイルは一つの画像ではなく、
いろんな大きさ・色数の画像の集まりで、
使用する個所によって適切なものを選択するので
icoファイルがおかしいか、Windows上の制限じゃない?
VB6SP6で作っています。
MSFlexGridの列見出しをクリックした時、その列がソートするようにしたいのですがどうすればいいのでしょうか?
.NETだとAllowSortingプロパティをTrueにするだけらしいのですがVB6にはそれらしいプロパティが見つからないので・・・。
37デフォルトの名無しさん:04/04/02 13:19
VB6.0でコマンドボタンにフォーカスがある状態でEnterキーを押したときのCommand_Clickイベントを無効化する方法はないでしょうか?
>>37
Enterキーを窓から投げ捨てろ


なんでそんな機能が欲しいのかな?
39デフォルトの名無しさん:04/04/02 13:54
>>37
必要な理由がさっぱりわからん。
イベント関数の頭で、嫌なら抜けるっていうIF文を書けば?
40>>39:04/04/02 13:56
送信したところで、なんとなくやりたいことがわかった。

で、コマンドボタンはEnterを受けるのが仕様、だからコマンドボタンを使わずに、
自作のボタンを作成するか、PictureBoxなどで代用。
>>37
いったんCommand_Click()に入って、if条件ですぐexit subするだけじゃダメなのか?
4239,40:04/04/02 15:38
>>41
多分彼は、不用意にEnterを押された場合にボタンを機能させたくないんだと思う。
だから、その方法だと呼び出し元・方法の特定ができないVBではNGだと思う。
>>38-42
説明不足だったようですみません。
理由は42さんがおっしゃったような理由でマウスクリックのみ拾いたいということでした。
ありがとうございました。
44デフォルトの名無しさん:04/04/02 18:54
要はGetFocusしたらすぐにほかのコントロールにフォーカスを移すこーど書いて、
フォーカスを持たないようにすりゃいいだけなんじゃないの?
>>36
 MSFlexGridってオマケですよ。
 色々機能が欲しいなら、VSFlexGridを買うべし。
 で、そこら辺の機能も削除されていたような?

>>35
 NT4.0って、256色アイコンに対応していましたっけ?
 表示関係はWindows95レベルだと思ったけど・・・
4636:04/04/02 23:50
>>45
MSFlexGridでは出来ないんですね。
ちと高いけどVS-FlexGrid買うことにします。
レスありがとうございました。
47デフォルトの名無しさん:04/04/03 13:48
>>46
FlexGridじゃなくてListViewのViewをReportにしてグリッド表示にすれば
普通にできると思うんだけど。
48デフォルトの名無しさん:04/04/03 21:36
VBで配列を返す関数を作るとき、
 Function func1() As Double()
  ...
  func1(i) = 0.1
  ...
 End Function
とすると、func1(i)を関数呼び出しと誤解してエラーがでます。

とりあえず回避するには一度別の配列に返り血をセットした後、
コピーすればいいと思いますが面倒です。

みなさんはこういうのどのようにコーディングしてますか?
 Function func1() As Double()
Dim data() As Double
ReDim data(10)
data(0) = 0.1
data(1) = 0.2
func1 = data
 End Function
5049:04/04/03 21:44
中途半端にコピペしたからインデントが変になったw
51デフォルトの名無しさん:04/04/03 22:19
どのように、って>>49のように書くしかありえないと思うんだが。。
[配列を返す]ってことの物理的な意味がわからずにこういうコード書くと、
いつかどこかで痛い目に会うことになるような気がするなあ。
52デフォルトの名無しさん:04/04/03 22:29
VirtualFree使ってめもり開放しようとしてるんですが
確保した領域が空き領域を埋めるだけで開放されません・・・

どなたか助言よろしくお願いしまふ。
53デフォルトの名無しさん:04/04/03 22:48
ファイル名を変更する方法を教えてください。

Dir関数でファイルを検索することはできます。
>>52
なんで開放されてないってわかるの?

>>53
Name ステートメントは?
>>1
お疲れさまでした。安らかに............
5653:04/04/03 23:04
>>54
できました!
ありがとうございました。 m(_ _)m
5752:04/04/04 00:43
>>54
プログバーにバリュー値としてGlobalMemoryStatusの使用状況を入れてるから
増えていくのがわかりまつ。
5836:04/04/04 00:53
>>47
ListViewでできました。ありがとうございました。
>>52
もちろんVirtualAlloc使ってるんだよね?
6048:04/04/04 11:37
自分では、
 Sub SetArrayVal(Byref ary As Variant, Byval index As Long, Byval val_ As Variant)
  ary(index) = val_
 End Sub
なんてのを考えました。少しは楽になります。
6152:04/04/04 12:33
>>59
はいな。使ってまつ。
>>52
そう見える理由の予想はつくが、APIスレで聞きなおすといい。
63デフォルトの名無しさん:04/04/04 18:14
前スレ989は、どうでしょうか?


989 :デフォルトの名無しさん <> 04/04/03 12:02
すいません。
特定のWebページを保存するプログラムって簡単に書けますか?
VBSで書けると助かります。

やりたい事は、
ある特定のWebページを
[日付].html
例えば
2004.04.03.html
というファイル名で保存するプログラムが欲しいのです。

これをジョブに入れて、
毎日更新されるWebページを
毎日決まった時間に保存し、
後からさかのぼってみれるようにしたいのです。

何卒宜しくお願い致します。
990は無視ですか。そうですか。
65デフォルトの名無しさん:04/04/04 21:36
VBのフレックスグリッドについて質問なのですが
カラムとか設定していって
実行したとき一番右へスクロールすると灰色の部分みっともないですよね
どうやってコードで見栄えよくすればいいでしょう?
66デフォルトの名無しさん:04/04/04 21:47
67デフォルトの名無しさん:04/04/04 21:50
>>66
イエ そういう回答を求めてるのでは
なくコーディングでカバーできる範囲の技術をお伺いしているだけであって
。。。。。
68デフォルトの名無しさん:04/04/04 21:54
>>67
ない。
おとなしく>>46買え。
69デフォルトの名無しさん:04/04/04 22:00
>>68
いやありますよ絶対ある。 ライセンス系のコンポーネントは
後がウザイのでなんとか技術でカバーしないと
スクロールとかで取得できるイベントがあるんですから
なんとか列幅変更の合計値Xを最大mxで定義した定数の範囲内で
サイズ制限するなどなんかあるはずです。それを教えて
70デフォルトの名無しさん:04/04/04 22:04
>>69

        い    や    だ
71デフォルトの名無しさん:04/04/04 22:06
問題は「灰色の部分」をみっともないと感じるか、美しいと感じるかは
見る人次第ってことじゃないのか?
72デフォルトの名無しさん:04/04/04 22:07
>>70
じゃあおまえさんには気管 へっへーんだ

>>71
いや普通に見てみっともないと思います
そうだな灰色の部分に浮世絵でも描いてみるのはどうか?
74デフォルトの名無しさん:04/04/04 22:08
>>73
あえていおう






ぬるぽ
俺はあのまったくもって役立たずな「灰色の部分」には、密かに愛着を
もっている。喩えて言えばそうだな、ビル最上階のおどり場のような・・・
76デフォルトの名無しさん:04/04/04 22:12
ナニ〃ヵゝらー、灰色出る迄待τッτ言ぅωτ〃£ヵゝ?
不満があるなら自分でコントロール作っちゃえばいいのに…
78デフォルトの名無しさん:04/04/04 22:14
まああの灰色はまさに
http://intermezzo.cool.ne.jp/report/Lupin/R3_temp.swf?inputStr=%82%CA%82%E9%82%DB

だな ふーじこちゃん
79デフォルトの名無しさん:04/04/04 22:16
まあ俺のOCX作成テクをもってしたら
おまけコンポーネントよりは上を行くだろうな。
ただ 後の保守がめんどくさい。
仕様なんて言い分けが通用せんのよ顧客ってさ
おまけオプションを限りなく利用しつづけることが
作業量を減らす得策なのよ
業務かじってれば理解できるよね?
80デフォルトの名無しさん:04/04/04 22:17
EXCELを起動する

新規ワークシートを開く

Ctrl + 右矢印キー

「灰色の部分」出現(w

あのEXCELでさえ(以下略
何だよ。
オマエの「灰色の部分」には見られて困ることでも書いてあるのか?
そんなもん気にするな。
>>80 つまり無駄にでかければ気にならないと。
「灰色の部分」ってさぁ、役立たずみたいなこと言われて
酷い扱いされてるけど。ホントはここからさきは何もないよ
ってことをユーザーさんに通知する、重要な任務をまかされ
てるわけよ。それを消そうって奴は地獄の業火に焼かれて(ry
84デフォルトの名無しさん:04/04/04 22:25
ワシもIV65536に初めて辿り着けたときはそりゃあもう・・・
85デフォルトの名無しさん:04/04/04 22:25
あのなあおまえらヴィジュアルベイシックの
なんたるかを理解してないだろ
ヴィジュアルは見栄えだ 要は見栄えなんだよ
無知な顧客がないようをしらずに最初にいう
クレームの内容だよ!!
そこにスムーズに対応できる人間が才能あるPGってもんだろ
すまんが、浮世絵がダメだというなら
どういうのが良い状態で、どうだとダメなのかを教えてくれ。
>>83
結構そういうのあるよね。説明しにくいけど、
ある人にリストビューの詳細表示で右側の空白をクリック
(つまりファイルの詳細表示画面のファイル名の右の空白をクリックすること)
しても行選択されないといわれたことがあるんだが、
自分が普通に使っているとその空白をクリックしてフォーカスを当てて
スクロールをしているからクリックで行選択されたら困ることに気づいた。

スタイルの違いってのがあるんだろうけどWindowsはWindowsで
使いやすいようにちゃんと考えているんだよな。
88デフォルトの名無しさん:04/04/04 22:30
>>85
だったら2chで訊くなよ。あ、自分は才能ありませんってオチか?
89デフォルトの名無しさん:04/04/04 22:32
>>86
センスが悪い事が一番の問題

>>88
才能ないのはあんただろ
2chに頼るのは手軽に対処法がでるからだよ
様様ですよ
90デフォルトの名無しさん:04/04/04 22:34
>>89
だから、その行動が才能ない奴の典型だっつってんだろうが(w
「灰色の部分」を愛でる余裕の無い奴は負け組み!
VS-FlexGridでも「灰色の部分」出ない?
どうなったら解決なのかいまいちわからん。
93デフォルトの名無しさん:04/04/04 22:40
>>90
必然的に回答をすっぱりもってこれない
あなたも同じ域だろw
まあ無能どうしなかよくやろうや(笑)
94デフォルトの名無しさん:04/04/04 22:42
>>92
おれもVSとかスプレッドシートは
つかったことないからわからんが
理想はエクスプローラーの詳細表示した項目部分の
制御方法が近いな
>>93
ようやく自分に才能がないことを認めてくれたね。が、俺はまだ認めんよ(w
くだらん言い争いは他でやってください。
97デフォルトの名無しさん:04/04/04 22:45
>>96
だってー>>95がチュウボウみたいに絡んでくるんすよ
98デフォルトの名無しさん:04/04/04 22:45
最初は答えをしっててあえて知らない、というか
そんなことはできないことにするゲームをしているのかと思ったが、
どうやらそうじゃなくてこのスレの人たちは本当にどうやったら「灰色の部分」を
無くせるのか知らないようだ。。

しかしまじめな話にはちっともレスがつかないが、
ちょっと厨房な話題になるとどっからともなくVB●(以下自主規制)が
沸いてくるな。
9998:04/04/04 22:47
マジレス:
インデックス0の列のwidthを0に汁。
10098:04/04/04 22:47
あ、Colwidthね。
┐(´∇`)┌
102デフォルトの名無しさん:04/04/04 22:48
>>98
そーなんすよ
普通だったら2行くらいでアドバイスのひとつでも出てきそうな
ものでしょ?
スキル豊富なら余裕なはず。俺もたのまれれば
ちょっとVBあげて試作 みたいにしてるはず。
正確な情報じゃないから今まで黙っていたが、
昔「灰色の部分」だったと思うものを無くす努力をしたことがある。
そして確か無くせたという記憶がある。
しかし、それが何のコントロールだったか忘れた。
104デフォルトの名無しさん:04/04/04 22:51
99 :98 :04/04/04 22:47
マジレス:
インデックス0の列のwidthを0に汁。


100 :98 :04/04/04 22:47
あ、Colwidthね。
ありがとうごぜえます。このようなレスをまっておりました
さっそく作業にかかります。ありがとうござますた

>>103
なんですとー!!このやくたたず

105デフォルトの名無しさん:04/04/04 22:56
>>98-100
釣り・・・なのか?
そして灰色の部分って何のことかわからなくなったオレだけが残されたわけか・・・
98は読解力0
>>106
スクロールバー用の幅とかなんかそんな感じだったと思う。
FixedColsやFixedRowsなどと一緒にされるのは極めて遺憾だ。
色を変えたいならプロパティにあるけど、そういうことでもないの?
11198:04/04/04 23:05
もちろん半分釣りに決まっとる。
本当はもっと簡単に行ヘッダなんて無くせるし。

ていうか質問者そのものがたぶん釣りだろう。
プロパティページちょっといじれば誰でもすぐできるようなこと
真顔で聞いてるとしたらちょっと頭の性能疑う。
天然のようだ。┐(´∇`)┌
この擦れでの展開的に素っ頓狂な質問してくる香具師は
ただの暇つぶし込み釣りという罠
114デフォルトの名無しさん:04/04/04 23:12
まあ、>>65から続いているわけだから途中参加の>>98が勘違いするものムリはないか
ってヲイ!
98の言っている「灰色の部分」ってオレらの「灰色の部分」とは
かなりの確率で違うと思うけど、
聞いてきたヤツが納得していなくなったみたいだから、
結果的には良しとするか。
11698:04/04/04 23:14
ああ、そういうことね。小学校4年生の算数の比率計算じゃんこんなの。

答え:
1.本当に必要な列のほかにダミーの列をひとつ一番右に追加する。

2.各列の幅の比率と、ダミー列の幅をあらかじめ決めておいて、
フォームのロード時かなんかに全部の列の幅の合計がFlexGridのWidthと
等しくなるように各列の幅を計算で求める。
117103:04/04/04 23:17
>>116
あ〜。なんかそんなことやった気がする。
なんか微妙に幅ずらしてあわせたり。
いや、サイズを揃えるためにある余白を見栄えが悪いとかいう理由で
他のサイズ自体を変えてしまうのはどうかと思うんだけど。
>>118
そんなの、人の考えによりけりでしょ?
ダメと決め付けることは出来ない。
>>116
ダミーのカラムがFlexGridのWidthいっぱいに広がる可能性もあるわけで・・・
それはそれで醜い(w
別に醜くないと思うが?
聞きたいんだけどフレックスとやらに
チェックボックスってもうけられる?
やっぱ文字列”レ”しか方法はないでしょうか
あとは、アレだ。コントロールのサイズ自体を変えて余白ができなくする。
124デフォルトの名無しさん:04/04/04 23:30
>>122
その話は後にしてくれないか?
「灰色の部分は気にすんな」の一言で済む。そう思っているのは俺だけか?
>>122
フォントを変えれば記号のような文字を使うことができる。

ってそういう話じゃないってのは分かってるけどw
なんでこんなに盛り上がってるのか 灰色
めずらしい展開ですね
>>125
客が言うこともあるんだよね。どうしてもって。
129122:04/04/04 23:34
わかりました 今は『灰色』ってテーマで討論の最中なのですね
ならわたくしも はいいろ(はいりょ)します
では失敬
>>128
その客に会ってみたいな。そしてこう聞いてみたい
「どうして灰色の部分がそんなに気になるの?」
>>130
「どうして気にならないの?」
灰色部分はユーザーとしたら気になるでしょう
フレックスグリッドをコンポーネントでデザインした時
何も初期化せずそのまま実行すれば理解できると思う。
いわば火星のようなもの。
素人であれば気にしないのはあたりまえだが
神経質な10人といろのユーザにとってケチのつく唯一の色彩
それが灰色
要はユーザーにとっての灰色は使用できないいわば Enable = False
の状態を言う そんな色彩がスクロール時にドバっとでてきたら
つっこみどころ満載なわけで、しかもライセンスとか説明したとき
ごねるのもユーザー
使用できない領域やコントロールが灰色ってのと
いままで白い部分が移動などの制御によって灰色化するのでは
意味が違う
13465:04/04/04 23:54
わはは まだやってるんすか もういいすよ解決しますた。
なんでこんなにもりあがってるんすか(笑)
結局 ロード時の処理でフレックスグリッドの幅を取得し
それを列サイズ幅合計に収まるように設定し、ドラッグアンドドロップの
処理でイベントをゲットし、ロード時の合計値を越えた場合に
カーソルをバッテンに切り替えイベントを無効にするようにしましたよ
Scrollイベント使ってLeftCol弄れ。
その違いを客にちゃんと説明して納得させるのは大変だろうな。
「そんなのいらないから」で終わらせられるのがオチ。
137「灰色の部分」保存会:04/04/05 00:06
「灰色の部分」にイチャモンつける客のほとんどはA型。そのうち半数はハゲてる。
間違いない。
そんなん言われたことないけど、色のせいなのか?
白にしておけば、文句言われにくいのかな?
>>133のレスを真にうけると
灰色の部分はバグとなるが
140デフォルトの名無しさん:04/04/05 00:15
フォームに25個ぐらいコンボボックスを置いてるんですが、
表示に時間がかかるんです。表示を早くする方法ってありますか?
フリーですばらしいGrid系のocx作りたいよね みんなで
>>141
禿胴!是非、作りたいね みんなで
>>140
そんなことでは全然遅くならないぞ?
>>140
データ読み込み時に Visible = False
145デフォルトの名無しさん:04/04/05 00:47
WinXP では問題なく動作していたVB6コードを
Win2000 のPCにコピーして実行したところエラーとなってしまいます。
コードの内容は、

Dim n As Integer

n = 12

Format(n, "@@@")

"Format"の部分が反転して『コンパイルエラー プロジェクトまたはライブラリが見つかりません。』
と、表示され停止します。何が原因なのでしょうか?

Format関数は複数のプロジェクトで使用していますが、いずれのプロジェクトもFormatの部分で
エラー(停止)してしまいます。

自分でも調べてみたのですが、解決できません。
どなたかわかる方、教えて下さい。よろしくお願いします。
147デフォルトの名無しさん:04/04/05 00:55
>>145です。解決しました!!

>>146さん、ありがとうございます!!
14898:04/04/05 01:22
>>65
2chでこんなこと書くのも馬鹿げてるかもしれないけど、
もうちょっと「恥ずかしい」って感覚あってもいいんじゃない?

このレベルの問題が自力で解決できないってのは
煽り抜きでかなり情けないことだと思う。
149 ◆8000km/3JQ :04/04/05 03:00
RSSファイルを読みたいのですが
UTF-8からShift_JISへの変換方法が分かりません。
御教授御願いします。
UTF-8で書かれたテキストファイルを読みたいのなら、
「UTF-8からShift_JISへの変換」は必要無さそうだけど、
ttp://homepage1.nifty.com/MADIA/vb/vb_bbs2/200310_03100055.html
15165:04/04/05 09:17
>>148
いえいえ自力で解決しましたから。ご丁寧にどうも
152デフォルトの名無しさん:04/04/05 12:18
ActiveReportを使用して帳票PGを組んでいます。
ほぼ同じ内容のページを2枚ずつ出力したいのですが、
Canvasの複写とmainへの追加は、どのように行えば良いのでしょうか?
宜しくお願いします。
以下、現在のソースです。

iPageMax = wActiveReport.Pages.Count
For iPage = 0 To iPageMax - 1
Set wCanvas1 = wActiveReport.Pages(iPage)
wActiveReport.Pages.Add wActiveReport.Pages(iPage)
'wActiveReport.Pages.Add (wCanvas1)
Set wCanvas2 = wActiveReport.Pages(iPage + iPageMax)
Call zArLabelPut(wCanvas1, X, Y, "", 14, 0, 0, 0, 0, "パターン1", "", 100, 100) '違う部分
Call zArLabelPut(wCanvas2, X, Y, "", 14, 0, 0, 0, 0, "パターン2", "", 100, 100) '違う部分
Next iPage
ttp://bookweb2.kinokuniya.co.jp/htm/4881354922.html
Visual Basicゲームプログラミング―Visual Basicで創るArtistic Game World

なんですが、DirextXを使ったものでしょうか?それとも初期のbitdrawのものでしょうか?
VB4のときに出たらしいのですが個人的には、ビットマップ作画だったらありがたいのですが。

この本を持っていらしてる方、ちょっと内容を教えてください。
通販しようかと思っているのですが。
VB4の時代には、DirectXはVBから使えなかったような気がする。
読んだことないけど、多分DirectXは使ってないんじゃないか。
>>152
ActiveReportって何?どこでダウンロードできるの?
>>153
VBからDirectXを扱えますが、きっとWinGでしょう
>>154
>>156

情報ありがとうございます!
使ってないだろうと言うことが分かって嬉しいです
検索してみたのですが、目次が載って無くて。当時だったらあったかもしれません。
個人的にはVBでビットマップ作画のいい参考書を探しているのですが。
(PDAで作ってるため VBに近い言語です)

親切にしていただけて嬉しく思います。ありがとう
158デフォルトの名無しさん:04/04/06 00:21
>>152

外しているかもしれないが
二つ用意しておいて Visible の切替えってのはだめ?



>>150
有り難う御座いました。
private sub combo1_change()
this.text = "hoge"
end sub

みたいにそのイベントのコントロール、つまり自分自身を
指すthisみたいなのないですか?
デバッグ用にテキストを出力したいのですが、
現在実行中のファイル名と関数名って取得できないのでしょうか?
Cでいうところの__FILE__、__LINE__ みたなのが使いたいです
ご教示願います。
162デフォルトの名無しさん:04/04/06 12:03
sSource = "http://xxx.xxx.xxx/index.html"

例えばこの文字列を例にとりますと
この文字列から"index"の部分と".html"の部分を抜き出すには
どうしたら良いでしょうか?
163161:04/04/06 12:24
また、できれば現在のクラスモジュール名を得ることはできないのでしょうか?
>>162
a=split(sSource,"/") ' / で分解
b=split(a(ubound(a)),".") '.で分解

これで b(0) に "index" が b(1) に "html" が入る。
165161:04/04/06 12:25
>>163
はわかりました。
TypeName(Me)
166デフォルトの名無しさん:04/04/06 12:42
>>160
特定のスコープの中では、宣言されてもいない
暗黙のローカル変数が存在するような言語怖くて使えますかって。

>>162
そんなのヘルプ検索すればすぐわかるはず。
逆にいうとヘルプみても解決法がわかんないならプログラミングなんて
やめといた方が身のためと思う。

雑誌のおまけの試用版とか使ってるのならしょうがないけど、それなら
参考書ぐらい買えばいいのに。

InStrとかMid$とか、VB6ならSplitとか、使えそうな関数いっぱいあるじゃん。
>特定のスコープの中では、宣言されてもいない
>暗黙のローカル変数が存在するような言語怖くて使えますかって。

schemeのlambdaなんかはどうよ?ちょっと違うか。

というか話が違うんじゃない。
イベントを発生させたオブジェクトをsourceとかでイベントの引数に渡してくれたら
便利なケースは考えられると思うし、俺もあったらうれしいことはあるとは思う。
160への解答としては、そんなことはできないってことになる。
Combo1_Clickというプロシージャ名にイベント発生源のオブジェクト名が入っていて
ユニークになってるから、Combo1.Text="Hoge"で別に問題は無い。
何で困っているのかもう少し具体的に書いてもらえれば、なにか代替案を示すことはできるかもしれないが。
168160:04/04/06 14:30
private sub combo1_change()
call hoge(me.activecontrol)
end sub

private sub combo2_change()
call hoge(me.activecontrol)
end sub

みたいなことがしたいんですが
me.activecontrol=そのイベントを呼び出したコントロール
でいいのでしょうか?
>>168
ActiveControlはフォーカスを持っているコントロール。
普通はイベントを起こすのはフォーカスを持っているコントロールだけど例外もあるから。
170160:04/04/06 14:57
>>169
ですよねー
やっぱだめかな
>>170
コントロールをユーザコントロール(やクラス)でラップして、
イベントをユーザコントロール側で受けてそこでイベントを処理する方法もある。

もし違う処理を行いたければイベントの処理はイベントの処理を行うクラスを
ユーザコントロールに登録して行うという、Java風の仕組みを作れば
望みのことが出来なくは無い。

まあ一番手軽なのはコントロール配列にしてインデックスで区別する方法だけど。
現在グリッドを持つアプリケーションを作ろうと考えております。
コンポーネントを見ていると、いくつかグリッドが存在するのです、
それぞれの特徴があると思いますが、どれが使いやすいのでしょうか?

それぞれの機能を紹介したサイト等はないでしょうか?

173デフォルトの名無しさん:04/04/06 21:04
>>172
そんなことをこんなところで聞くような横着な人に
グリッド系のコントロールなんて使いこなせないと思う。

簡単なことならどれ使ったって大差ないし。
グリッド系は重い
175デフォルトの名無しさん:04/04/06 21:08
>>172
 使いやすさは人によって違うと思うから
 試用版とかまず試してみたら?
DataGridよりはMSFlexGridの方が好きだな
非常に基礎的な質問で恐縮なのですが宜しくお願いします。

フォーム1からフォーム2に設置してある
オプションボタンのValue値のTrue・Falseを読み取りたいのですが、
どうしたらいいでしょうか?

フォーム2内でグローバル変数を宣言してそれに値を格納してフォーム1で読み出す。
という方法は思いついたのですが、できれば直接読み取りたいです。
178デフォルトの名無しさん:04/04/06 22:38
>>177
vb6以前ってコントロールは全部Publicじゃなかったっけ?
......って言ってもたぶんわからないんだよね。

上のコードエディタで"form2."って打ってみて。
インテリセンス働くと思うんだけど。
直接読み取りたいのなら直接読み取ればいいじゃない
180178:04/04/06 22:40
「上の」って言葉は不要でした
Form2!Option1.Value
182デフォルトの名無しさん:04/04/06 22:55
>>178-181さん
返信ありがとうございます。

コードエディタ上で form2 と打ち込んで実行するとエラーはでるのですが
インテリセンス(文法チェックですよね?)は働かないようです。

今まで
Form.Option1.Value と書いていたのを
Form!Option1.Value としてみたのですが
やはりForm2を閉じるとValueの値が真に戻ってForm1から真・偽を読み取る事ができません。
183デフォルトの名無しさん:04/04/06 22:56
訂正

Form2.Option1.Value と書いていたのを
Form2!Option1.Value としてみたのですが

です。2が抜けていました…すいません。
えっ!閉じたform2の値を読もうとしてるの?
Form2閉じるときUnloadしてるんじゃないか?
で、Option1.Valueにアクセスしに行ったときに再度ロードされて、初期状態の
やつを参照してるとか。
今進んでいる所は、たぶん鬼門だろうから、初心者本でも読み返したほうが
いいかもしれんね。
定義されていない変数を読み取れないと言ってるようなもんでつね。
>>184
はい、その通りです。

>>185
その通りです。Unloadしております。
鬼門ですか…。初心者本を読んで調べたのですがよくわからないのです(汗
188デフォルトの名無しさん:04/04/06 23:06
Property Getとかを使おうね。クラスのインターフェイスになるよ。
(Formモジュール)=(Classモジュール+Window)を理解しようね。

C++やJavaとかでいう他クラスとのやり取りに、Publicなインターフェイス用関数を使って、Privateな変数にアクセスする要領と同じ。
>>187
'Form1のコード
Dim Result As Boolean
Load Form2
Form2.Show vbModal ,Me
Result = Form2.Option1.Value
Unload Form2

'Form2のコード。OKボタンにでも書いといて
Me.Visible = False

Load,Unload,New,Nothingについて調べてみるといいよ。
上手く言えないんですが、フォームモジュール、標準モジュール、
クラスモジュールの使い分けと言うか、コードの書き分けって、どう
言う指針で行うのがいいんでしょうか?
191デフォルトの名無しさん:04/04/06 23:09
ていうかもう釣り確定じゃん。なにマジレスしてんのみんなオボコいな。
しかしこの「別のフォームの......」って愚問は定期的に湧いてくるな。
次スレからは1のテンプレに入れてほしいよ。
192187:04/04/06 23:09
>>186、188-189さん
ただいま教えていただいた事について勉強してきます(汗
こんな夜更けにご丁寧にありがとうございました。
193187:04/04/06 23:19
>>191さん
いえ…釣りではないです。本当にわかってません(汗
ちなみに >>190さん は私ではないです。
本職なひとの辞書に、夜更けという文字はありませんでつ。_| ̄|○
195190:04/04/06 23:28
>>193
(´・ω・`)ショボーン

196187:04/04/06 23:34
>>190さん
あれ?何かまずい事書いたかな…(−−;
もし、私の質問だと思われてたら私の質問はもう区切りがついたので、このままスルーされそうだな〜
と思ったのでそう書いたのですが(汗
197デフォルトの名無しさん:04/04/06 23:39
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
>>190
それぞれ「そうすべきもの」で使い分ける。
ウインドウを表示するならフォームを使うのが常道とかね。


ひょっとして釣られた?
>>191
オマエが釣り確定。あげんじゃねえよカス
200デフォルトの名無しさん:04/04/06 23:43
>>199
ワラタ
191って臭そうw
とりあえず心得を読め
>>191
>> 「別のフォームの......」って愚問

これをまったく知らないで、
何から何までグローバル変数使ったり、
フォームイベントの発生要因とかまったく知らなかったり
する愚者が多数いるよ。

しかもそういう人に限って、VBだからVBらしくコーディングしているんだ、と意味不明なことを嘯くんだよな。
>>187
混乱させるようで悪いが・・・

'Form1のコード
Dim Result As Boolean
Form2.Show vbModal, Me
Result = Form2.Result

'Form2のコード
'関数の外に
Public Result As Boolean
'OKボタンに
Result = Me.Option1.Value
Unload Me
205190:04/04/07 08:19
>>198
釣りじゃなかとですよ。

クラスモジュールはクラスを作るために使えばいいと思うのでまだいいのですが、
標準モジュールとフォームモジュールが曖昧になってしまうんですよね。

ぶっちゃげた話、>>198さんのいうとおり、フォーム周りのコードをフォーム
モジュールに書けば、フォームモジュールと標準モジュールを分離して再利用
する事も出来るはずなのですが、標準モジュールでフォームのインスタンスを
生成してフォーム上のコントロールにアクセスしたり、フォームモジュールから標準
モジュール上のパブリックプロシージャ-をコールしたりすると、標準モジュールと
フォームモジュールは独立しなくなる訳で。

かと言ってフォームモジュールに全部書く、ってのは宜しくないそうで、どのように
分ければいいのかなと悩んでしまう訳でして。

用法を間違ってるかも知れないですが、恐らくフォームモジュールと標準
モジュールとの間のインターフェイスが決まってないと言うか曖昧になってるのが
原因じゃないかなと思う(言葉の意味がよくわかってないので違ってるかも知れ
ない)のですが、標準モジュールからフォームのコントロールにアクセスしたい時に、
どのようにやるのがスマートなのかなぁ?

VBはVBらしく適当に作って破綻しそうになったら
思いつきでリファクタリングでもして
つないでいくのがよい
207190:04/04/07 08:40
>>206
リファクタリングって、確か元の仕様を変えずに中身と言うか実現方法を変更
したり新たな仕様を追加する事でしたっけ? 似たような事はよくありますねぇ。
例えば、最初は独立したコントロールで書いてたけど、結局同じ処理のプロ
シージャ-になっちゃった、って場合にコントロール配列にしてIndexで制御する
方法に書き換えたりとか。(うわ、なんか違うっぽいしレベル低いなぁ俺(´・ω・`) )

最初に仕様をガチガチに決めればそう言う事にはならないのだろうけど、一人
で開発やってると、書いてる途中で、もっといいアイディアや実現方法を思い
ついたりすると書き直しちゃいますしねぇ。
208デフォルトの名無しさん:04/04/07 09:11
以前に構造体のような宣言内部に定数をもたせたい
という件で質問させていただきました
Enumを使用するといい という回答を頂いていたんですが
この列挙型といわれる宣言内部に数値やアドレスではなく
文字列を持たせる事も可能なのでしょうか?
>205
そもそも、標準モジュールでフォームのコントロールを直接参照する必要があるのかって所から検討すべき。
コントロールを直接参照する事は即ちフォームに依存だからぬ。
そのへんのやり方は>188が指摘してるぞ。

標準モジュール上にForm1.TextBox1 = ・・・
なんて書くのは愚の骨頂。
無難な線として
Public Sub Hoge(ByRef frm As Form1)
みたいな感じで引数でフォームへの参照を受けて以後その引数を利用してアクセスすれば良い。
210デフォルトの名無しさん:04/04/07 09:30
>>209
そこなんだよね、綺麗にできるかの違いって。
コントロール自身を引数にできるということを知らない人が多すぎ。

それをやるだけで、結構おしゃれな処理とかできるし、
グローバル変数とか馬鹿でかい参照範囲の変数とか、ほぼ撲滅できるし。
>Public Sub Hoge(ByRef frm As Form1)
これってフォームにオモイックソ依存してないか?
Form1ってハードコーディングしちゃってるし。
>>211
それは単なるタイプミスだと思われるけど、重大なバグになるタイプミスだな。
>>205
標準モジュールがあるからVBって気もするけどなぁ
うちの会社の先輩が言ってたけど、
VBは標準モジュールにバリバリ書いて、コントロールを使う形にするのが楽らしい
コントロールを使ってれば標準モジュールもそんなにひどくならないそうな
だから、設計してコントロールつくるやつが上にひとりいて、
それ使ってコーディングする奴が何名かいるのがいいらしい
実際、その人APIとかクラス化して投げてくるんだけど、やりやすいのはたしか
ただ、そういうやりかただと悲しいかな、俺の勉強になんないんだよな(w
>211
>209の趣旨は、引数として受け取るようにする事で、少なくとも暗黙のインスタンスを
参照するという行為は避けられるよ、って事でつ。
インタフェースの使い方覚えるのは次の段階かなと思ったんで。
>>214
引数で受け取るのも「暗黙のインスタンス?」を参照してるってことに
早いとこ気付けよ。
VB6.0ではオブジェクトの解放がどの時点で行われるか知ってっか?
スレの流れ理解してなくて申し訳ありません。
皆様の知恵を拝借したいと思って来ました。

テーブル1のフィールドAの値に対してテーブル2のフィールドBの付随情報を
抽出したいと思っています。双方のフィールドは0から始まる電話番号形式の文字列です。

フィールドAには正式な電話番号(09012345678とします)が格納されており
フィールドBには電話番号の範囲になるような4桁以上11桁以下のデータが格納されています。
例えば「09012」のようなデータです。

フィールドBのデータをDBから抽出後に降順でソートし、フィールドAのデータの
先頭数文字(フィールドBの文字数)を検索条件とし、最初に合致したものに対するデータを
さらに抽出したいと思っています(例えばCSV形式のファイル等に)

長すぎると怒られたので分けます。
以下は例です

例→フィールドAの格納データ「09012345678」に合致するフィールドBの付随データを抽出

フィールドB   データ
0902    付随データ  この場合「0902」と「0901」2345678で比較→合致しないので次へ
09013   付随データ  この場合「09013」と「09012」345678で比較→合致しないので次へ
09012   付随データ  この場合「09012」と「09012」345678で比較→合致するので抽出
09011   付随データ

合致するデータがない場合はエラー処理になります。
フィールドAのデータ分だけ抽出処理をして終了という形です。
ただしフィールドBのデータの桁数は一定しておらず4桁の場合もあれば
5桁の場合もあるという感じになっております。
こういった処理を行なう場合、どのような感じで作ればよいのでしょうか…。

フィールドBのデータを毎回Len関数でチェックしてフィールドAのデータをLen関数で
返ってきた値だけ切り出してチェックとかがいいんでしょうか…。

VB6.0、DBはOracleでADO接続でやるつもりです。
VBから離れて期間も経っており、ほとほと困り果ててこちらに参りました。
詳しい方いらっしゃったら宜しくお願いします。スレ違いでしたら申し訳ありません。
218209:04/04/07 10:44
>215
>209の引数frmはあくまで呼び元から渡されたインスタンスを参照するのであって、
暗黙のインスタンスを参照する訳では無いと思うのだが・・・
呼び元で
Call Hoge(From1)
とか
Dim f As New From1
Call Hoge(f)
なんてやられたらそりゃNGだけど、それは呼び元の責任でぁ。
もっと良いやり方があればご教授願いたい。

オブジェクトが解放されるのは参照カウンタがゼロになった時。
だが少なくとも、>209のメソッド内では解放を意識する必要は無い。
間違ってる所があったら指摘キボンヌ。
初心者でよくわからんのだが
標準モジュールでForm1を参照するのって悪いの?
AS Objectとかにして、クラス使って再利用性を高めるんならそれもそうだろうけど
メモリに常駐してる時点でグローバル関数とかわらんと思って
標準モジュール上でForm1参照しちゃってるんですけど
やっぱ関数化すべきなのかな・・・
>219
Form1のインスタンスはLoadされている保証は無いし、複数ある可能性もある。
>>216,>>217
VBで判断するのか、SQL(DB側)で判断するのかをまず決める。
まあ、普通にDB上でやればいいんじゃないの?
前方一致検索でしょ。
222デフォルトの名無しさん:04/04/07 12:07
>>221
激しく同意
せっかくオラクルを使うのならちんたらコーディングするよりSQL
でするべき
オラクルならADOよりoo4oのほうが親和性がたかいよ、、
ORACLEのバージョンにもよるけど、一時表とか駆使すれば一回で取れると思うんだけど。
検索された中で最大の云々かんぬん

まあ、ここを見て参考にしてみれば?
ttp://homepage1.nifty.com/kojama/works/rdbms/ont.html
>>222
懐かしいフレーズを聞かせてもらったよ、ありがとう。
醜いSQLはあまり好きではありません。
リストビューのカラムヘッダーの幅が変更されたことを
知るイベントはありませんか?
227226:04/04/07 13:08
何がしたいかといいますとリストビューの変更された幅を
iniファイルに保存して次回起動時にはその幅に戻したいのです。
228226:04/04/07 13:09
ちがった。
2つのリストビューを片方が変更されたらもう一方も
追従するように同じ幅にしたいのです。
>>44
とんでもなく遅レスがありがとうございます。
なるほどです。
>>216-217
AからBを引っ張ると考えるからややこしく思えるんだろうけど
実際は単純な総当り検索で、条件を前方一致にして(+)付けるだけ。
指定した色を透明色にする方法はありますか?
>>226
ない。

と思う。
>>231
ある。
234226:04/04/07 16:55
(´・ω・`)ショボーン
>>226
イベントは無いけどメッセージは飛んでる。
なんか面倒な気もしたが、がんばれ。
236231:04/04/07 17:03
ゲームを作っているのですが、キャラの背景の透明化に
使いたいと思ってます。VB初心者なものでよろしければやりかたを教えてください。
237226:04/04/07 17:07
>>235
じゃあ、サブクラス化すればゲットできますね!
238デフォルトの名無しさん:04/04/07 19:13
サブクラス化なんてキッケンなことしなくても
タイマイベントでカラムヘッダが変更されてないかチェックして
変更があったら同期するようなコード書いたらいいんじゃない?

秒五回ぐらいなら遅延もそんなに気にならないし、
cpu時間の消費もほとんど無視できるレベルだと思うけど。

エレガントじゃないのはいや、ってか。
それをいうならサブクラス化だってそれ以上に.....。
>>238
VBのサブクラス化がエレガントじゃないっていのは同意するけどタイマーはなぁ。
業務でそれやったら「こいつ大丈夫か?」って思われちゃうだろうな。
自分しか使わないツールだったら許せるけど。
240240:04/04/07 20:13

MDIアプリで、OracleのDBをいじるアプリを書いています。
漏れが担当しているのは、その一部の画面なんですが、
そのフォームから、更に別のフォームを子フォームとして
開いて、public 変数を介して情報のやり取りをしようと
しているのですが、うまくいきません。

親フォームを frmParent、子フォームを frmChild とします。

うまくいかないのは
・親フォームの Public strPText As String を子フォームから
 frmParent.strPTest の形で参照すると、何も入っていない文字列
 になる。(親フォームでは文字列を代入しています。)
・親フォームのサードパーティ製のスプレッドを子フォームから
 frmParent.Spread の形で操作しようとすると何も反応がない。
などで、

241240:04/04/07 20:13
・子フォームの Public strCText As String には、親フォームから
 frmChild.strCText の形で代入できる。
・同様に子フォームの Public objForm As Form にもアクセスできる
 ので、親フォームから、親フォーム自身を objForm に代入して、
 これを使って上記のうまくいかない形のアクセスを行うと、ある程度
 はうまくいく。(プロパティの代入と参照)
  例) objForm.strPText
    objForm.Spread
・この方法でもスプレッドのメソッドは動作しなかった。

・親フォームの Public Function は子フォームから実行可能。

上記のような状況です。Visual Soucesafe を使って、複数人で
開発しています。
242240:04/04/07 20:14
同じような経験をされた方、おられないでしょうか?
シンプルなプロジェクトを使って試したら、Public 変数には
何の問題もなくアクセスできたので、いったい何が問題なのか
検討もつかない状況です。

objForm を使うと冗長になりますし、IDEのインテリセンスが
使えなくてやりづらいです。
>240
 frmParentがfrmParentとして宣言されて開かれたのではなく・・・

 Dim objForm As frmParent
 Load objForm
 objForm.Show

 と言う風に開かれているのでは無いかと思えるが。
 LoadされていないフォームのPublic変数にアクセスした
場合と同じ動きをしているような感じだから。
 試しに、親フォームのPublic変数を参照しても空文字が
帰ってくる部分の直後にfrmParent.Showってやってみて
くれないかな?
244240:04/04/07 20:30
>>243
Childではなく、Parentの方ですよね?
私も全体像は分からないのですが、起動(エントリポイント)は
標準モジュールから行っているみたいなので、そういう形で
起動している可能性はあります。

いまは自宅で、会社にいかないと詳細が分かりませんので
後で確認したいと思います。

ちなみにChildの起動は
frmChild.Show 0
で起動しています。

245240:04/04/07 20:38
>>244
うーん。子ウインドウは frmChild.Show でやってるから、
親から子には問題なくアクセスできるのかな。
少し暗雲に光明が差し込んできた感じです。
ありがとうございます。

今日はこのワケワカメなバグでぐったりしてしまいました。
246デフォルトの名無しさん:04/04/07 21:03
>>240
原因はたぶんフォームの「クラス」と「インスタンス」を混同していることと、
変数のスコープを忘れていることにあると思う。

フォームのインスタンスへの参照が常にグローバルレベルへで存在しているとは
限らないよ。

Form1内の複数のスコープから、Form2型のForm2という名前の同一のオブジェクトに
アクセスしたいなら、「オブジェクトForm2」への参照をForm1のモジュールレベルで
保持しなきゃ。

そうでなきゃ、たとえば同じ"Form2"にアクセスするつもりのコードを
Form1のロードイベントとForm1のコマンドボタンのクリックのイベントハンドラに
書いても、それぞれ「暗黙の宣言」によって生成された別々のForm2型の
インスタンスに対するアクセスになってしまうよ。
>>245
 それなら、子ウィンドウをfrmChildで呼び出しても
問題なくアクセスできますね。
 やっぱり、最初に親ウィンドウを開いている所に
原因がありそうですね。
248190:04/04/07 21:54
>>209
> 無難な線として
> Public Sub Hoge(ByRef frm As Form1)
> みたいな感じで引数でフォームへの参照を受けて以後その引数を利用してアクセスすれば良い。

なるほど、そのHogeプロシージャーをフォームモジュールに書くんですね?
フォームのコントロールを触る処理はフォームモジュールに書いて、フォーム
に依存しない処理を標準モジュールに書けばいいのかな。


>>210
コントロールを引数にするのは非常に便利なのでしょっちゅう行ってるんですよ。
フォームに載ってるコントロールの特定のプロパティやオブジェクトを一斉に操作
したい時なんか、For eachと組み合わせて使うととても重宝してますです。Fontオ
ブジェクト弄ったり、MouceIconプロパティ弄ったりと。
249240:04/04/07 22:41
>>246
なんか難しいんですね。C++の経験はあるんですが、
VBはじめて2ヶ月くらいなので、暗黙の宣言とかはまだ
よく分かってないです。
250デフォルトの名無しさん:04/04/07 22:46
いや、>>210の意見はずれてると思うよ。
彼自身が冒頭に書いているとおり、(つまり>>210の文章は矛盾してるんだが)
いったいどこにフォーム上のコントロールをいじるコードを
フォームモジュール以外に書いてわざわざ見通しを悪くする必要がある。

それに標準モジュールにはAPI宣言と構造体の定義、サブクラス化するときの
ウィンドウプロシージャ等、VBの言語仕様上標準モジュールにしか
書けないコード以外書くべきでない。

当該のフォーム以外で発生するイベントをトリガーにして
フォーム内のコントロールをいじりたい、ってのなら相手に自分の参照を
引数で渡すなんてわけの分らんことしないで、フォームモジュール自身に
イベント発生源のオブジェクトへの参照をメンバ変数としてもたせて
イベントを受信するようなコードを書けばいい。

もっとも、これらはある程度の規模以上のプログラムを設計する場合の話で、
「〜を標準モジュールに書くべきかどうか?」なんて悩んでいるってことは
つまりどこに何を書こうと十分に見通せる程度の規模のコードってことで、
それなら「言語厨」に何を言われようと別に好きなように書けばいいと思うんだが。
>>249
 いや、>246の意見は一見正しいけど、VB6.0(以前含む)での
挙動ではない。(Unloadを実行していれば別だが)
 VBのフォームは暗黙にPublic宣言されている様な存在なので。

 試しに、検証してみたら、Form1.Showで開いた場合、何処からでも
Form1のPublic変数はForm.hogehogeで値が取れる。
 それぞれのプロシージャ内でローカルに宣言したオブジェクト変数の
Form1なら話は別だがね。
 もひとつ検証して、>243で書いた通りの事をすると、確かに
frmParent.strPTextでは空文字になる。
 >243では、Loadの直前に「Set 〜 = New frmParent」が必要ですが。
252本日新規:04/04/07 23:13
VBというかVCというかどっちの問題なのかわからないのですが
ピンときたら教えてほしいっす
VCで作成したDLLをVBからデクレア?で宣言してその関数をフォームから
呼び出すと ファイルが(関数をもっているDLL)みつかりません
ってでるんすよ パスの通った場所にいれてるのですが
再起移動かけようが環境変数追加しようが事象がかわりません
ちなみにMFC DLL作成スケルトンで作ったファイルでTelnetの処理をしてます
253デフォルトの名無しさん:04/04/07 23:17
>>252
IDE上で実行するときは、dllは相対パスで指定したりパスの通ったフォルダに
置くのはだめで、フルパスで指定する必要がある気がした。

コンパイルすればいいんだけど。
>>252
ちゃんとDLLの関数はエクスポートしている?
>>253
VB6.EXEのあるディレクトリにDLLをほーればよいのさ。
256本日新規:04/04/08 09:54
みなさんレスありがとう
いろいろ心みましたが なんかうまくいきません
VCよりの話になりますが
スケルトン作成時の設定でスタティックライブラリ使用か
MFC共有DLL使用の選択で影響ってでるものですかね?
>>256
VBから使いたいDLLが他のDLL等に依存しているなどの理由で起動できないときは同様のエラーがでますよ。
259デフォルトの名無しさん:04/04/08 23:11
すいませんフォームの事で教えてください。
現在ロードされているフォームの名前を取得する方法ってあるのでしょうか?
また、特定のフォームがロードされているのかアンロードされているのか調べる方法でも結構です

for each hogehoge in forms
261259:04/04/08 23:44
>>260
ぐぐってみたらアンロードするときに使われるっぽいループ?みたいですね・・・
初心者には難しいかもしれませんがIF文でもかまして改造してみます
↓こんな感じですが、合ってますかね?

Dim frm As Form
Dim Nam as string
For Each frm In Forms
Nam = frm.Name
If Nam="AAA" then
なんとかかんとか
Else
Next frm
262240:04/04/08 23:57
>>240です。

皆さんのご指摘どおりでした。
>>243の形で起動されてました。

これですっきりした気持ちでプログラムが組めます。
ありがとうございました。

今日は打ち合わせで11時帰宅。
明日はまた9時からです。

手短で申し訳ないですが今日はこれで失礼します。
UNCパスに存在するOCXやActiveX DllをREGSVR32で登録出来ますか?

自分が実験したところでは、成功したと言うダイアログが表示されるけど
実際のところは登録されてないようなのですが、自分のやり方が悪くて
登録出来てないのか、それとも本当に登録出来ないのかが分からない
ので、その辺をはっきりさせたいと思いまして…

チェックボックス付きリストビューのチェックボックスの状態を
取得したいのですがどんなメッセージを送ればよいでしょうか?
265264:04/04/09 14:40
ret = SendMessage(hWnd, &h1000 + 44, idx, &hf000)
if ret = 8192 then
true
else
false
end if

で取れたんだけど大丈夫かなぁ
266264:04/04/09 16:01
8194もでした。
リストボックス.Selected(ゼロから始まる行インデックス)
Checkedだろ。
269264:04/04/09 17:22
あひゃひゃひゃ
VB6.0にはあった。checkedプロパティ
VB5.0なんです。
270デフォルトの名無しさん:04/04/09 17:24
>>269
死ね
271264:04/04/09 17:32
なんでやねん
272Option1:04/04/09 18:58
Optionボタンをクリックするとイベントが発生しますが、
Option1.valueに値を直接代入した場合にもイベントが
発生して困っています。
 値を代入したときは、イベントを発生したくないのですが、
なにか方法はないのでしょうか?
 お願いします。
>>272
フラグ使うしかないねぇ。てか、値を直接代入した場合とクリックした場合
とで挙動を異なるものにするって設計はよくないと思うよ。
274Option1:04/04/09 20:32
 そうかなー?
たとえば、フォームを立ち上げたとき、データベースのデータで
Optionの状態を設定したい場合はある。
 これは初期化だから、論理的にはEVENTは発生しない方がいい。
もしイベントが発生すると、
初期化にもかかわらず、初期化以前の状態を意識する必要が生じる。
これは、「純粋な初期化ができない」ことを意味する。
 そういうわけで、イベントはDisableできるのが、まともな設計だと
おもう。
 そもそもエヴェント駆動でありながら、この辺が手落ち。
 個別のイベントのイネーブル、ディスエーブルと同時にユニバーサルな
イネーブル、ディスエーブルが当然あるべき
だと思う。(たとえばコンテナ上のイベントはすべてディスエーブルなど)

275デフォルトの名無しさん:04/04/09 20:39
>>274
 仕様ですから・・・
VB6.0は騙しながら使っていくしかないのです。
277デフォルトの名無しさん:04/04/09 20:53
>>272
ついこないだほとんど同じ内容のレスと回答があったはずだと思うんだけど。
コードでVaueプロパティ変えてClickイベントが発生して困る、ってんのなら
Clickイベントでなくほかのイベント、たとえばMouseUpイベントで
マウスのクリック拾えばいい。

それに
>イベントはDisableできるのが、まともな設計だと おもう。
普通にできますけど。MSのVBの設計者だってそんなに馬鹿じゃない。
あなたごときにそんな風にいわれたかないだろう。
言語厨が馬鹿にするようなVBの糞な部分だって、実はいろんな
トレードオフの結果だったりする。
>>277
興奮しているところ悪いけど、
>>イベントはDisableできるのが、まともな設計だと おもう。
>普通にできますけど。MSのVBの設計者だってそんなに馬鹿じゃない。
これ、教えて頂けないでしょうか。
長いことVB使ってるけど、やり方がわからないです。
279デフォルトの名無しさん:04/04/09 21:20
>>278
失礼。正確にはコードで特定のプロパティを変えたときの
イベントそのものを無効にすることはできないね。

しかし、イベントハンドラの最初の行にたとえば
If Not Option1.Enabled Then Exit Sub
みたいに書けば機能的に等価だとおもうんだけど。
>>272
俺が質問したのと同じかな。
発生するのはClickイベントだっけ?

フォームのprivate変数で
Dim bDisabler As Boolean

とやって

bDisabler = true
Option1.Value = true

とやって、

イベントの先頭で


if bDisabler = true then
 bDisabler = false
 Exit Sub
end if

とやればよかったと思う。

最近気づいたんだが、VBってのは例えば
SetFocusメソッドを行っても、すぐにイベントが発生しないのね。

bDisabler = true
cmdButton.SetFocus
bDisabler = false

なんてやっても、GotFocusイベントが呼び出される前に
bDisabler = false が実行されちゃうんだわ。
というわけで、俺も>>276さんと同じ感覚でやってます。

>>281
フォーカス移動なんかはVBだからじゃなくてWindowsのメッセージ待ちだからじゃないのかな?
などと適当なことを書き込んで寝る。
>>282
WinAPIの SendMessage は送ったメッセージが
消化されるまでリターンしない仕様だったと思います。
(消化前に返したい場合はPostMessageを使う)

MFCなんかでは SetFocus はイベント終了まで
戻らない仕様になってたと思うんですが。
(ちとオボロゲ)

284デフォルトの名無しさん:04/04/10 01:01
となりの席のコボラーが最近社内システムかなんかでVB6立ち上げて
なんかしきりに作っているんですが 構造体とか宣言とかクラスとバスの違いとか
セットフォーカスとかモーダルがどうとか 調べもしないで無関係な
俺に聞いてきてウザイ 作業とまんだよこのヤロー
俺はVC専門だから知るカー こんちきちー
ちなみに普通にVBさわれんだけどね(笑)
どうしたらいいですか?VC担当なのでVB知りませんとかは言いたくない
うまい逃げ手を内気なおいらにおしえてくれ
>284
辞表出せ
そうだな、辞表出せ
287284:04/04/10 01:56
藻舞らひとごと杉 月曜が鬱なんだからさー
まじめに考えてくれよ
たとえば高度な技術過ぎる為 メモリを食いつぶしてあぼ。。。ry
まあ、世の中自分の重い通りにばかり逝くわけではない

最近、害虫ばかりのヘボチームにいれられますた。

日本語の変数名と
日本語の関数名と
大量のグローバル変数と
暗黙のフォーム変数地獄

に悩まされています。

日本語の変数・関数ぐらい辞めさせたいんですが、

バカどもに辞めさせる良い方法なんかないですか?

>>289
俺、新人PGだけど、うちのチームもなんでも
かんでも標準モジュールに置こうとしていて、なんかよく
分からんよ。VBはじめて2ヶ月なんだけど、
こんなもんなのかなぁ。3行程度でできる
初期化処理まで標準モジュールの関数使えというんだよ。


291Option1:04/04/10 08:33
>Clickイベントでなくほかのイベント、たとえばMouseUpイベントで
>マウスのクリック拾えばいい。
なるほど、これはいい方法だね。みんな苦労しているんだ。

>言語厨が馬鹿にするようなVBの糞な部分だって、実はいろんな
>トレードオフの結果だったりする。
 大事なことは、トレードオフしないでくれ。
16進数の色 #FFFFFF
RGBの色 (255,255,255)
をお互いに変換するソフトをつくりたいんですけど計算方法がわかりません。

テキストボックスに
#abcdefと入力して変換ボタンを押すと
(xyz,pqr,stu)
という文字列が別のテキストボックスにでてくるし、逆の変換もできるというやつです。
>289
MSのサポート情報見せりゃいいじゃん。
変数やオブジェクト名に日本語を用いた場合結果は保証しんないと書いてある。
>292
RGB、HEXあたりを使う。
計算方法については
ttp://www.atmarkit.co.jp/icd/root/63/5783563.html
ttp://www.atmarkit.co.jp/icd/root/62/5783562.html
を読んで理解しろ
295デフォルトの名無しさん:04/04/10 15:44
>>292
たぶんこの程度のことでいちいち人に聞くような人に、
掲示板でのやり取り程度で方法を完全に理解してもらうのは無理。

なのでヒントを1つだけ。
16進を10進整数に変換する方法が分った時点で、たぶん与える16進数によっては
得られる10進数が負になる、という問題にぶつかるはず。
そのときは「型宣言文字」を試しましょう。
296292 ◆ExGQrDul2E :04/04/10 17:30
00〜FF=0*0〜16*16=000〜256
だが、なぜRGB表現はMAXが255に設定されているのだろうか?
>>296
 ぉぃぉぃ
 256を16進数に変換してみれ
298デフォルトの名無しさん:04/04/10 17:41
つまらんネタにこれ以上釣られるなよ。
299292 ◆ExGQrDul2E :04/04/10 17:46
そうか、16*16だとケタあがりしちゃうから16*16-1が"# AA BB CC"内のAA,BB,CC各値の取れる最大値だな。
それで256-1=255だな。
300292 ◆ExGQrDul2E :04/04/10 17:54
それにしても
ホームページの色指定に使う#FFFFFFは16進数じゃないようにおもわれる。
もし16進なら
RGB=255,255,255=0x100-1,0x100-1,0x100-1であり、FF-1と0x100-1はちがう値だし。
>>300
なんでFFから1を引くんだ?
0から255の16*16=256段階ということだぞ。
302292 ◆ExGQrDul2E :04/04/10 18:00
>>294の計算もわからんかったし、
オレだったら
Select case String
case "00"
String2="0"
・・・
case "FF"
String2="255"
End select
で256回Select Caseするしかないようだ。
303292 ◆ExGQrDul2E :04/04/10 18:05
そういえば
ChexとかCdecとか変換関数があったような気もする。
こんなの小学生のころやったよ。
オマエらレベル低すぎ
305292 ◆ExGQrDul2E :04/04/10 19:01
どうやら
256段階
という時点で、変換する計算では目的の10進数が求まらないような気がする。
なぜならたとえば
FE=16^1*16+16^0*15=256+15=271
で、255の値を超えていて、単なる16進→10進変換ではRGB表現に変換できないのがわかる。
さてと・・・うーむ
306292 ◆ExGQrDul2E :04/04/10 19:03
Select Caseを256個も書きたくない
>305-306
二進数の勉強をしてこい。
頭痛がするので、終了。
308292 ◆ExGQrDul2E :04/04/10 19:35
ついに2桁の16進を10進に変換するプログラムが完成した。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 A B C D E F
16*H1+H2←今さっき開発した公式1

使い方
まずは配列を宣言して、Fを15に対応させるようなテーブル参照を記述しておく。
Dim Hary(15) as string
Hary(0)="0"
・・・
Hary(15)="F"

それから公式1を使い
FF=16*15+15=255
と無事求まった。
日記は他所でやれ馬鹿
310292 ◆ExGQrDul2E :04/04/10 19:37
F=16であると勘違いしていた人はハマったと思う。
ただしくはF=15
292さん、初心者のボクには参考になりました。応援してます。
ちゃんちゃらおかしいw
313デフォルトの名無しさん:04/04/10 21:23

イベントプロシージャの挿入位置って変更できないのかな?
コードの最後に追加していく方法にして欲しい。
>>313
お前、292だろ?
315デフォルトの名無しさん:04/04/10 21:38
初心者な質問で申し訳ないのですが、
ダブルクォーテーションを文字列に入れるには、どうしたらいいんですか?
¥”じゃだめですよね?
どなたかご教授ください、宜しくお願い致します。
316デフォルトの名無しさん:04/04/10 21:39
>>315
vbDQuot
>>315
"""
頼むー誰か答えてくれ

解像度取得して規定位置にフォームおきたいんだけど
解像度別のスクリーン座標の最大とかが今一わからぬ
>>318
 Screen.TwipsPerPixelX、Screen.TwipsPerPixelY、Screen.width、Screen.Height

 Screenオブジェクトのプロパティについて調べてみれ
320318:04/04/10 22:31
即答サンクス!

恩にきますです。
◆ExGQrDul2E をGoogleに探させると・・・
こりゃまた酷いな
更にGQrDul2Eで検索
APIのCallBack関数中でグローバルオブジェクトにアクセスすると
落ちてしまうのですが、アクセスできる範囲というものはあるのでしょうか?
一部のグローバル変数にはアクセスできます。

ご教授願います。

VB6
324323:04/04/11 15:03
追加といたしまして、簡単なコードをつけます。
タイマーを作って、タイマーのCallBack関数が呼ばれます。
そのCallBack関数内で MsgBox "Timer" としています。
VB上からデバッグとして実行すると動作するのですが、
exeファイルを作って動作させると不正な処理となって強制終了されてしまいます。
MsgBox "Timer"が無い場合は正常に動作しています。
何が原因なのでしょうか?

ご教示願います。
環境 VB6、WinXp

以下コード
Form1上で
Private Declare Function CreateTimerQueue Lib "kernel32.dll" () As Long
Private Declare Function CreateTimerQueueTimer Lib "kernel32.dll" (ByRef phNewTimer As Long, ByVal TimerQueue As Long, ByVal Callback As Long, ByVal Parameter As Long, ByVal DueTime As Long, ByVal Period As Long, ByVal Flags As Long) As Long
Private hQueue As Long
Private hTimer As Long
Private Sub Form_Load()
hQueue = CreateTimerQueue()
Command1.Caption = "Start"
End Sub
Private Sub Command1_Click()
If hTimer = 0 Then
CreateTimerQueueTimer hTimer, hQueue, AddressOf TimerCallBack, ByVal 0&, 0, 5000, 0
End If
End Sub
標準モジュール上で
Public Sub TimerCallBack(ByVal lpParameter As Long, ByVal TimerOrWaitFired As Long)
Debug.Print "Timer"
MsgBox "Timer"
End Sub
推測だが、
コールバックされた関数が別のスレッドで走ってるなら、
VB自体がスレッドセーフになっていない可能性が高いので、
落ちたりもするかも。
質問です。
500行程度のクラスモジュールを作成して、フォームのロード時に
インスタンス化してるのですが、フォームアンロード時に
そのクラスを開放するのに2秒程度掛かってしまいます。
できればスパッっとはぎれよくフォームを閉じたいのですが
何が問題と思いますか?
>>326
アンロード->開放する前にMe.Hide。
328デフォルトの名無しさん:04/04/12 18:11
TextBoxの中を右クリックしてもポップアップメニューがでないようにしたいのですが、
どうやったらいいのでしょうか?
知っている方教えてください。
>>327
ネ申
と思ったけど、画面消えた後フリーズするやん
スイマセン、今、データグリッドを使って作業をしてるのですが
accessデータのフィールドに ID,名前,Yes/Noフラグ と三つの項目があって
複数のブックマークを選択した時に選択したIDに順ずるフラグを
NO→YESに変えたいのです。

ブックマークがひつとなら
DataGrid1.Col = 0
DataGrid1.Row = DataGrid1.Bookmark - 1

Dim DGdata As Long
DGdata = DataGrid1.Text

strSQL = "update テーブル set 削除フラグ = yes where ID =" & DGdata
ADOConnect.Execute strSQL

で何とかなるのですが、複数のブックマークの時はどう書けばよいのでしょうか?
332デフォルトの名無しさん:04/04/12 19:18
>>326
頭悪いにもほどがある。
こういう人の「フリーズ」ってのが本当にフリーズをさしているかどうか
怪しいが、そんなの単にあんたのコードがクソだからだろうが。
>>332
フリーズっていういいかたは悪かった。
>>326
コードに問題があるんだろ? 普通はそんなことない。
それだけの情報じゃこれ以上のコメントは出来ない。
>>334
問題あるんかのー
動的配列使ってるのがダメ?
>>335
サイズや、終了時の開放の仕方にもよる。
ループの中でEraseとかReDimなんかしてたらもう・・・
>>336
ループでredimはしてます。でもeraseはterminate時だけです。
まずどこで時間がかかっているか調べてみ。
サイズを小さくしたりコメントアウトするとかして時間を計る。
そういう専門のツールを使ってもいいけど。
よく考えるとredimといってもnewしてすぐアンロードしても
遅いのでredimのループは通ってないんですよねー
んー。くまった。
どっか根本的に間違いがある。
まさかVB5.0だからってことは・・・・んなわけないな
342326:04/04/13 10:48
クリーン印すとした環境にディストリビューションウィザードで
exeを配布したら一瞬で閉じられました。
どうやら環境の問題のようです。お騒がせしました。
ある文字列(漢字、数字なんでもあり)からチェックデジットのようなものは算出できるのでしょうか?
その文字列が改ざんされていないことを確認したのですが・・・
>>343
こういうことがしたいんかな?
ttp://www.atmarkit.co.jp/aig/02security/hashfunction.html
345343:04/04/13 15:07
>>344
そうです。これって具体的に関数ってあるのでしょうか?
.Netにはそれらしいのがある感じですが、VB6ではどうなんでしょう?
346190:04/04/13 15:18
191って臭いね
347344:04/04/13 15:22
>>345
この汎用コンポーネントにMD5の機能があるから試してみそ。
フリーウェアだし商用利用も認めてくれてる。

ttp://www.hi-ho.ne.jp/babaq/basp21.html#0046
348デフォルトの名無しさん:04/04/13 16:43
質問させて下さい。

VBを学ぶのに良いテキストをご存知の方、教えていただけませんでしょうか。

宜しくお願いします。
月並みだが、MSDN。
350デフォルトの名無しさん:04/04/13 18:05
>>346
臭いわな。
351デフォルトの名無しさん:04/04/13 19:10
hage
VB6を使ってデータベースを作っていますが、商品の画像を表示させることは
不可能ですか?

データグリッドで1つの商品を選択し「詳細」コマンドをクリックしたらアクセスの
データベース内の写真フィールドにある画像データの保存先を参照しそのフォルダ
内の画像を表示することができるような気がするのですがどうしたらいいでしょうか。
353デフォルトの名無しさん:04/04/13 20:26
>>352
できるっしょ。
354デフォルトの名無しさん:04/04/13 20:29
>>353
ついでにそのやり方も教えろやボケェ
> データグリッドで1つの商品を選択し「詳細」コマンドをクリックしたらアクセスの
> データベース内の写真フィールドにある画像データの保存先を参照しそのフォルダ
> 内の画像を表示することができるような気がするのですがどうしたらいいでしょうか。

そのまま言葉をコードに置き換えていけばできそうだけど?
>>355
レス遅すぎ。使えねぇ奴だな。
>>356
うっせぇ、ハゲ。
Zip圧縮やろうとおもってZip32J.dll使ってやってまして
can't load zip32とかでてできません。
環境はwin98vb6sp5です。
UNLHA32つかったlzh圧縮はすんなり出来たんですけどね、、
お約束の間違いとかあるんですかね〜
359デフォルトの名無しさん:04/04/13 22:31
CPU占有率についてなのですが、
ループ処理のあるプログラムでCPU負荷を下げるのに、
どういった点に気を付けたほうがいいでしょうか?
それともCPU占有率を制限する方法とかありますかね・・・。

VB6SP5です。
VB6.0でポインタ制御ってできるんでしょうか?
>>359
DoEventsをかますか、タイマーで処理するか。気休め程度にSetThreadPriorityを使ってみたり。
>>360
Byval/Byref、ObjPtr、VarPtr、StrPtr、AddressOfについて調べてみる。関数ポインタは取得のみで呼び出せません。
362359:04/04/13 23:41
>>361
DoEventsをかますか、タイマーで処理でも変わらずでした。
SetThreadPriorityは。。ちょっと調べてみます。
>>362
Sleep入れてみれば?
>>358
単体でzip32j.dllって使えたっけ?他にも圧縮には必要だったような
365358:04/04/14 09:26
>>364
zip32.dll入れたらできました;;
ありがと〜
自身を自動アップデートするアプリケーションを作りたいのですが
VBのランタイムライブラリの問題があります。
ランタイムライブラリのバージョン違いなどで
予期せぬエラーが発生する場合があると思いますが
みなさまはどのように対処されていますか?
予期せぬエラーってーのはその発生を予測できないって事なので
事後処理しかないのでは(w

てかVBのバージョンアップが止まってるのに
これから作るアプリケーションで
ランタイムのバージョン違いなんて発生するの?
>>367
にゃるほど
369367:04/04/14 12:24
って、367はただの揚げ足取りだから納得されても困るんだが。
VBランタイム以外でも付随するDLLやらOCXやらある(かもしれない)わけで。

そもそもどうやって自動更新しようとしてるの?
EXEは自身を更新できない(起動中のEXEファイルを置き換えることはできない)ので
自動更新したいプログラムをAとすると、
Aを更新・起動するプログラムBを別途作成し
ユーザーはBを起動するように仕組む。
とすると付随する何やらもまとめて更新するようにBを作ればいいわけだ。

さらに言うと、バージョンアップしていくに従って
更新対象ファイルが増えたり変わったりする。
となるとBも更新しなくてはならないので
Bを更新・起動するプログラムCを別途作成し、
ユーザーはCを起動するように仕組む。

俺はこんな風にしてるけど
もっと良い方法知ってる人いたら教えて。
>>369
マジれす。。さんくす。
更新用アプリAで本アプリBを更新しようと思ってます。
大幅なアップデートの場合は担当者がインストールして
まわればよいのですが、バグ修正などでいちいち全国を
まわるのはあほらしいので。
でも、予期せぬエラーなんだから事後処理しかないと
いうのは納得しますた。
まぁ、オレが納得して済む話じゃないんですけどね。
>>367
2004年3月29日にSP6がリリースされているのだがどうか?
ttp://www.microsoft.com/japan/msdn/vstudio/downloads/sp/VS6SP6.asp



#尤も、これでSPは打ち止めだと思うけどね。
初心者が唐突の質問で申し訳ありません。
VBの印刷で、プレビュー画面の作成でいまひとつ悩んでいます。
別フォームに表示した内容をそのまま印刷しようと思っているのですが、
印刷対象がA4、しかしデザイン時のフォームの大きさがA4相当にできないでいます。
(そのフォームは非表示です)

知識ある方のお力添えがいただけましたら、幸いです。

Windows xp Professional SP1
VisualBasic 6.0 SP6
業務ではありません。
373デフォルトの名無しさん:04/04/14 15:42
>>370
ClickOnce

>>372
A4 サイズが表示できる解像度にする。ってのがだめなら、フォームの
内容をそのまま印刷するってのはあきらめたほうがいい。
えと、もしかして、画面上の大きさをA4にしたい、って事?
375372:04/04/14 15:53
なるほど…
A4縦の上半分にImageと、下半分にカレンダーコントロールを張った
簡易的な画像付きカレンダーを作ってみたいと思っているのです。
となると、コントロールの内容等を直接位置指定しながら出力する他
ないのですかねぇ…できれば、出力する時の内容がデザインで確認
しながらの方が出来るのであれば、やり易いですが。

どちらにしても、A4サイズの非表示フォームを作成して、その内容を…
というのは無理ですか?
直接位置指定だと位置を変更するたびにコード書き換えなきゃじゃん。
比率計算すればいいんじゃ?
377358:04/04/14 16:25
環境はwin98vb6sp5でZip圧縮しようとしているんですが
フォルダ名にスペースがあったりすると誤作動してしまいます。

zip32.dllにコマンド送る際にスペースのせいでアドレスじゃなくなってるのは
わかるんですが解決策がわかりません。空白以外の区切り方とかあるんですかね?
378デフォルトの名無しさん:04/04/14 16:29
>>375

A4 サイズのフォームを作るのは、実は面倒だったりする。というのも、
画面の解像度を超えるフォームってのは、ちょっと特殊なことをしないと
作れないから。

なので、そういう場合はピクチャーボックスを代わりに使う。ピクチャーボックスは
画面のサイズより大きなものが作れるので。

>>377

やったことないけど、"" でくくるとか、ショートパスを使うとかでどう?
379デフォルトの名無しさん:04/04/14 16:40
アンダースコア のキーコード(16進数)教えてください
381358:04/04/14 17:16
>>378
両方試してみましたが無理でした。
382デフォルトの名無しさん:04/04/14 18:52
>>372
ひょっとして「印刷」ってのはプレビュー用のフォームのPrintFormメソッドで
実装するものだと思ってない?
だとしたらそれはものすごい思い違いをしている。

ちゃんと印刷関連のヘルプを読んだほうがいい。
というよりヘルプも読まずに印刷するアプリ作ろうなんて無謀もいいとこ。
印刷ってそんなお手軽にできるようなことじゃないよ。
別に難しくはないと思うが最初の敷居は結構高いはず。
>>379
イミディエイトウィンドウに

Debug.Print Asc("_")

と打って、エンターキー押してごらん。
あ、ごめん。アスキーコードじゃないのか。
385デフォルトの名無しさん:04/04/14 19:15
>>377
引数をダブルクオート(")で囲めば問題ないはず。
知ってるとは思うんだけど、"は引数の前後に普通につけてもだめだよ。
Argu = """" & "c:\hoge 00\" & """"
みたいにエスケープするか、chr$使わないと。
386デフォルトの名無しさん:04/04/14 20:21
質問させてください。
Webbrowserコントロールを使用して、CGIにデータをPOSTしたいのですが、
思うように動作してくれません。
データはURLエンコードを行い、ヘッダにContent-type: application/x-www-form-urlencoded
をセットしているのですが、CGIから結果が戻ってきません。
お分かりになる方がおられましたら、宜しくお願いします。

WindowsXP
VisualBasic6.0 SP6
387デフォルトの名無しさん:04/04/14 21:01
TextBoxにフォーカスが当たった時、
SelStart=0
SelLength=Len(TextBox1.Text)
とする事でそのテキストボックス内に入力されている全てのテキストを選択状態にする
というのはお馴染みの手段だと思うのですが、コントロール数が多い場合、全ての
テキストボックスのGotFocusイベントにこのソースを書かねばならず面倒です。

これを一発でやるような方法はないでしょうか。
ActiveControlを使えば現在フォーカスが当たっているコントロールを拾えるので、あとは
「フォーム上でフォーカスの移動が発生した」事を知る方法がわかれば実現できそうなの
ですが、その手段がわかりません。
 FormのKeyDownでは、当然マウスクリック等によるフォーカスの移動を拾えないのでNGです。

フォーム上でフォーカスの移動が発生した事を知る手段は無いでしょうか。
もしくは、それ以外の手段でテキスト全選択を実現した方はいますか?
388379:04/04/14 21:15
>>380
>>383

教えていただきありがとうございます。
迷惑ついでにもう一つ教えてください。
APIでkeybd_event()ってあると思うのですが

$ ! ' & " ( ) _ ? # 等 どうやって渡せばいいか分からないんです
VK_SHIFT と同時押しの部分でなんとかなる文字もあるのですが

_ アンダースコアの場合 ASCIIの対応表みて16進ひらいだしても
全然違うキーが呼ばれます
389デフォルトの名無しさん:04/04/14 21:16
すんまそん。

ランダムアクセスでテキストファイルにレコードを追加する場合、
改行して次の行に書き込むことって出来ますか?
何度やっても改行されずに書き込まれてしまいまして。

よろしくご教授おねがいいたします。
390デフォルトの名無しさん:04/04/14 21:23
>>389
ランダムアクセスファイルに改行もクソもないよ。
ていうか自分で「レコード」って書いてるのに意味分ってないのかな?
こんなとこで聞く暇にヘルプよく読もう。
>>389
 ランダムアクセスの意味を考えれば、行を分ける事に
意味は無い事が分かると思うが。
 ランダムアクセスで作成されるファイルは人間が読む為に
あるのではない。プログラムで読むファイルだ。
>>387
>「フォーム上でフォーカスの移動が発生した」
フォーカス移動をタイマー監視か、テキストボックスをすべてコントロール配列に。
あるいはフォームのメッセージを横取りして以下略

>それ以外の手段でテキスト全選択を実現した方
フォーム上のコントロールを列挙して、それぞれに対し機能を拡張するライブラリを作りかけてある。
配列化されてないコントロールに対しては有効に働いてるっぽ
393デフォルトの名無しさん:04/04/14 23:02
>>392
でもここでこの程度のこと質問する人に限って
そういうタイマとかコントロール配列とか使う泥臭い方法を
「エレガントじゃない」とかいって嫌うんだよな、まあかなりの確率で。
まあ、あれだ。
水面を優雅に進んでいる白鳥だって
水面下ではウンコ漏らしてたりするもんだ。
泥臭いといっているお前も同レベル
>>393
 サードパーティのコントロールを買えば、って思ったけどね。

 あと、VB6なんだから、カスタムコントロールを自作する手もあるし。
 その方がスマートではあると思う。

 でも、それくらい自分で考えて欲しいわな。折角ある機能だから。
>>396
そのサードパーティのコントロールも、泥臭いことやってたりするんだけどね。
VBとハンディターミナル間で
シリアルポート通信でデータ送受信やったことある人いますか?

今度ハンディターミナル新しい機種に取り替えるんだけど
VB側の処理って機種に依存して変わっちゃう部分あるんでしょうか?

詳しい人おながいします
399デフォルトの名無しさん:04/04/15 00:21
ageんの忘れた
>>398
ハンディーターミナル(以下HTと表記)次第だと思うがどうか。

例えば、HTにコマンドを送信する場合、コマンドとコマンドの間を
数msあけなきゃならないとか、デリミタが規定されているとか。

ただまぁ、シリアルポート通信ってのは恐らくRS-232Cを介して
の通信だと思うけど、RS-232Cでの通信の基本的な実装はHT
だろうが計測器だろうがバーコードリーダーだろうがそんなに
変わらないと思われ。
401デフォルトの名無しさん:04/04/15 00:45
>>398
「ハンディターミナル」なんて抽象的な一般名詞だけ書いたって
具体的な装置名も分らなきゃ通信プロトコルも誰にも伝わらないわけで
最低それから説明しなきゃ回答は得られんだろう。

。。ってこんなことから説明が必要な人に、何をどう説明しても無駄なような
気もするが。
>>393
タイマは使い方を語ると力量がばれる諸刃の剣。
例えばの話として出したのかもしれんので、こういうのは無粋かもしれんが、
キャレットの更新で使うのはお勧めできない。
>>402
アップダウンコントロールを暫く押しっぱなしにした時に
増分が増える機能を実装したんだけど、タイマ以外の
実現方法を思いつかなかったおいらは逝ってよしですか?

>>402
ばれるのは「力量」じゃなくて現実的な機能主義者か
自己陶酔型の人間かどうかの違いでしょ。

キャレットの更新なんて話はしてないぞ、ってのは置いといて
「お勧めしない」のは機能主義的な理由か?つまり客観的な合理性がある?

ないでしょ。要するに単に「エレガントじゃないから」なんじゃないの?
それ以上の理由があれば言ってみて。
>>403
押し始めの時間を記録しておけばタイマーを使わなくてもできるんじゃない?
>>404
「エレガントじゃない」という言葉で誤魔化しちゃいかんよ。
実際は表示の更新のタイミングが不自然とか、
場合によってはバグが表面化するとか、
保守性が悪くなるとか、不必要にCPUを使用するとかあるもんだ。
>>404
タイマーでフォーカスが当たっているコントロールを監視して、別のやつ移ったら
SelStartとSelLengthを更新するというのを提案したのだと思ってた。
違ってたらスマソ。

で、その処理をタイマーで処理すると、フォーカスが移った時から、SelLengthを
更新するまでの間に、なんらかの操作が行われる可能性があるというのと、
普通にWindowsからあがってくるメッセージを処理すればいい話なのになんで
タイマ使うかなというのが理由。
ウィンドウのサブクラス化ってやつで、安全に処理できるなら、そっちを使えば
いいと思ったのよ。

重ねて言うが、俺が思っていた前提の処理と違って、それに対して愚痴みたい
なの言ってたらゴメンネ。
408404:04/04/15 08:17
>>406
そこまでいくとほとんどギャグだな。
そういう「自分が見えない」人のことを自己陶酔型、っていうんだよ。
>「エレガントじゃない」という言葉で誤魔化しちゃいかんよ。
ごまかしてないじゃん。合理的な理由はあるのか?って聞いてるんだから。
「ゴマカシ」というのは

>表示の更新のタイミングが不自然(これは一理はあるが)
>場合によってはバグが表面化する
>保守性が悪くなる
>不必要にCPUを使用する

こういう「詭弁」のことを言う。保守性やバグは別に大麻使うことと関係ないし、
CPU食うって、ノーマルペンティアム時代だって大麻なんてほとんど無視できる
レベルなんだが。

それから、私は実際大麻使って似たような処理すること多かったけど、
更新のタイミングの遅れなんて、確かに皆無とは言わないが普通の人には
(つまり、どうでもいいことにこだわる一部の「変な人」以外には)ほとんど
気にならないレベルだよ。Interval = 100程度にしとけばね。
なんでもタイマーで解決する人って高卒か専門卒だよね
>>408
「詭弁」と言う方がよっぽど詭弁。
問題点は明確に出ている。
君が気づかないだけだ。
411 :04/04/15 08:38
>>4069
VB使ってる時点で高卒並でつ
五.荒らしは相手しない。
413358:04/04/15 09:07
>>385
"""" 変数 """"で囲むとうまくいきました。
初の本格的?なプログラムが完成しそうです!
ありがとうございました。
414387:04/04/15 09:11
なんだか私の質問のせいで荒れたようで申し訳無い。

>392
ども。後だし情報でスマソですが、タイマ使用とコントロール配列というのは試しました。
コントロール配列を使うほうは、テキストボックスが配列化されていない場合はオブジェクト名の変更等が必要になる為NGとなりました。
タイマの方はほぼ期待した通りの動作をしてはくれるものの、より良い方法があるのではないか?という気がし質問しました。

フォームのメッセージを・・・っていうのは、サブクラス化という奴ですよね?
こちらはまだ試していませんので、これをキーワードにチャレンジして見たいと思います。

>それぞれに対し機能を拡張するライブラリ
VBHelperみたいなイメージ?
VBの機能のみで実現されているのでしょうか?

>396
ユーザーコントロールの事でしょうか?
何かのサンプルで一度触った事があるだけなので、思いつきもしませんでした。
こちらもチャレンジしてみます。
415387:04/04/15 09:25
>404
より良い方法があれば知りたいと思うのもNGでしょうか?
vb6.0でFormを一部透明化するのはどうやってすればいいでしょうか?

検索した所、vb.netではTransparencyKeyでできるようなのですが、
vb6.0ではどうやってすればいいのか判らなかったのでご教授戴きたいと思います。
418デフォルトの名無しさん:04/04/15 12:42
>>416
一部なら、色を指定して SetLayeredWindowAttributes()、Windows 2000/XP
以外の環境なら、リージョンを作って・・・ だね。
>>417-418
ありがとうございました。
さっそくやってみます。
420358:04/04/15 16:14
またまた質問なんですが、Win98vb6sp5の環境だとちゃんと機能するのですが。
WinXPvb6sp5の環境だとZip32.dllのところでオーバーフローしてしまいます。
これって直せるんでしょうか?ちなみにこんな感じです。
Dim FN As String
Dim SendStr As String
Dim Ret As String * 255
SendStr = "-r9 " & """" & FN & ".zip" & """" & " " & """" & pasu & "\" & """" & " " & """" & FN & ".bmp" & """"
Zip Me.hWnd, SendStr, Ret, 255
Retの数上げても意味ありませんでした。
VB5.0のWinsockコントロールっておかしいですね
422デフォルトの名無しさん:04/04/15 17:37
VB6.0を使ってます。
ボタンを押すとある関数に入り、
ボタンを元にもどすと、関数から出てくるということをしたいのですが、
どのようにすればいいでしょうか?
よろしくおねがいします。
>>408
真面目に言ってるのか、煽りで言ってるのかよくわからないが、
王道の処理をすっとばして、いきなり脇道を初心者(でもないかも
しれないが)に薦めるってのはどうかと思うよ。
ウィンドウプロシジャで処理すれば、タイマーよりは品質の良いものが
作れるし、本来の処理もそれなんだし。
必要以上にコストをかける人を毛嫌いするってのは分からないでもないが、
初心者でも1日あれば理解できる処理を、あえて回避してるのはなんか
意図があるの?
喧嘩はやめて♪
ふたりをとめて〜♪
わたし〜のため〜に〜♪
争わない〜で♪
なんかタイマコントロール使うなって言うの、GOTO使うなってのと似てきたな
429404:04/04/15 19:58
>>423
文脈の読めない人だ。

ウィンドウプロシージャにフックかけるような処理が「初心者でも
1日あれば理解できる処理」ってのは大いに疑問だが(あなた、本当は自分で
その手のコード書いたことないんじゃないの?)それは置いといて、

>薦めるってのはどうかと思うよ。
別にタイマ使うことを「薦め」たりしてないって。少なくともこれまではね。
あなたがいう「本来の処理」を回避すべきとも言ってない。

タイマでポーリングするような処理をする奴はお里が知れる、みたいに取れる
レスがあったんで、タイマ使うのを「あえて回避」すべき合理的理由はあるのか?
って聞いてるんでしょ。

PGだったらこういう「論理」には敏感でなきゃ?
たとえ話をすれば、「飛行機を使うな、新幹線を使え」なんていった覚えはなくて
「新幹線を避ける合理的理由は?ただ<嫌い>なだけでは?」って言ってるの。

しかし、ここで初めて私の意見を書けば、>>387みたいな処理にサブクラス化を
使うのは、やはりあまり合理的な選択でないと思う。

少なくとも私にはサブクラス化によってフォーカスの移動を検出するコードが、
保守性の点でタイマを使ったコードより勝るとは思えない。バグが致命的な
ものになる可能性は比較にならないと思う。気軽にブレイクポイントや実行停止が
できなくなる、というおまけも付く。

フォーカス取ったら全選択するコントロールを作るのが一番エレガントかつ
問題がないと思うんだけど、面倒くさいんだよね、いろんな面で。
430392:04/04/15 22:00
>>414
VBHelperとやらを使ったことがないけど、完成すれば多分似たようなものになるはず。
同一プラットフォームである以上、そんなに変わった考えがでるとは思えない。
Private Sub Command1_Click()
 bFlag = True
 Func1
End Sub

Private Sub Command2_Click()
 bFlag = False
End Sub

Function Func1()
 ... Do Someting ...
 DoEvents
 If bFlag = True Then Goto EndOfFunction
 ... Do Someting 2 ...
 DoEvents
 If bFlag = True Then Goto EndOfFunction
 ... Do Someting 3 ...
EndOfFunction:
 bFlag = False
End Function

みたいにすれば、Command1をクリックすると処理が開始され、Command2をクリックすると処理を中断できる。
ポイントは、関数の処理を中断すべきか判断するためにフラグを立てることと、フラグチェックの前にDoEventsすること。
(詳しくはヘルプでDoEventsの項を見てくれぃ)
Do Sometingが繰り返しで処理できるような形なら、Whileループとかを使えば、よりスマートな感じになる。
432431:04/04/15 23:23
431は422への回答な。
ちなみに、422みたいなことはVBだと素直にはできない。
433デフォルトの名無しさん:04/04/15 23:36

コントロール配列を関数の引数として渡すことは
できないのでしょうか?
自分で宣言したコントロールのリファレンスの
配列に代入したら、関数に渡すことができたのですが。

結構重要なことだと思うんだが、MSDNにも
林ハルヒコの参考書にも書いてなかったでつ。

VBの基本は簡単に習得できたけど、突っ込んだ議論って
どういう本で勉強したらいいんですか? イベントの
作り方とかもあるようですが。

434デフォルトの名無しさん:04/04/15 23:45
>>431
回答になってないと思う。2つの意味で。
まず>>431>>422が要求していることとは違う。おまけにフラグの扱いに
バグがある。

さらにコードの書き方が酷すぎ。こういうコードは条件が成立したら無限ループを
抜けるように書くのがセオリーだよ。

繰り返しで処理できるような形なら〜、どころじゃなくて
意味がある処理の必要があろうがなかろうがループするんだよ。
こんなコード書くとVB厨っていわれちゃうよ。
435デフォルトの名無しさん:04/04/15 23:59
>>433
そのぐらいのことなら実際いろいろ試せば分るんじゃないの?
それがお手軽にできるのがVBのいいとこなんだし。

仮引数Variantにしてみたら普通にできたよ。
436デフォルトの名無しさん:04/04/16 00:10
>>435
そうですか?
Variant でもうまくいかなかったのですけど、
土日に時間があればサンプル作ってみるかも。

ちなみにうまくいかなかったのは、コンボボックスの
配列を関数に渡して、その関数内でコンボボックス
(複数)の操作を行うものです。

437デフォルトの名無しさん:04/04/16 00:18
Combo1って名前のコンボボックスのコントロール適当に配列作って
下のコードやってみたけど問題ないみたいだよ。
Private Sub Command1_Click()
Call Hoge(Combo1())
End Sub

Private Sub Hoge(cbo As Variant)
Dim c As ComboBox
Dim i As Integer

For Each c In cbo
i = i + 1
c.Text = "Hello World" & i
Next

End Sub
>>436
VariantよりもObjectの方がいいと思う。
Debug.Print TypeName(Combo1)
なんてするとコントロール配列の型がわかる。

でも、コントロール配列を渡すんじゃなくて、
一つのコントロールに操作を行う関数にして
呼び出し側でコントロール配列をループした方が良いと思う。
場合にもよるけどね。
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=37102&lngWId=1
サブクラス化ダッタラコレシカナイ
440438:04/04/16 00:46
もし呼び出し側でコントロール配列をループするコードを書くのがめんどくさいと思ったら・・・。

作ってみたのでサンプルとしてどうぞ。
[clsFuncObj]
Option Explicit
Public Event func(ByVal ctrl As Control)

Public Sub raisefuncevent(ByVal ctrl As Control)
  RaiseEvent func(ctrl)
End Sub

[Module1]
Public Sub ForEachControl(ByVal ctrls As Object, ByVal FuncObj As clsFuncObj)
  Dim i As Long
  For i = ctrls.lbound To ctrls.ubound
    FuncObj.raisefuncevent ctrls(i)
  Next i
End Sub
というのを一度用意しておくだけで、
441438:04/04/16 00:46
あとはこんなに簡単。ってコーディング量的にはあんまり変わってないかw
[Form1]
Private WithEvents comboinit As clsFuncObj

Private Sub comboinit_func(ByVal ctrl As Control)
  Debug.Print ctrl.Index
End Sub

Private Sub Form_Load()
  Set comboinit = New clsFuncObj
  ForEachControl Combo1, comboinit
End Sub
442デフォルトの名無しさん:04/04/16 01:05

データベース(オラクル)に ##.## (例:10.23)や ###.##(例: 103.98) という
形式の数値を格納したいのですが、格納前に入力されたデータ
(テキストボックスを使っています)の桁数が適切かどうかを確認する
必要があります。

こういう目的に適したVBの関数なんてあるんでしょうか?
自作するしかないですか?
>>442
痒い所に手が届かなかったりくせがあるけど既存のものならIsNumeric等。
単純な形式だったらlike。複雑な物だったら正規表現。

いずれにしろ、関数にして内部でチェック方式(likeを使うか正規表現を使うか)や
形式(##.##や###.###)を変えられるようにしておくのが吉
444デフォルトの名無しさん:04/04/16 01:31
>>442
vb6ならMaskEditControlが使える可能性があるんじゃない?
エクスプローラのツリーとリストビューをプログラムの中で実現したいんだけど、
FindFirst/Nextでファイルリストを取得して、TreeViewとListViewにセコセコと
セットして行く以外に簡単な方法、コントロールなどはございませんでしょうか?
446デフォルトの名無しさん:04/04/16 16:55
ガントチャートコントロールでフリーか数千円レベルの低価格で使えるものって
ありますか?
447358:04/04/16 19:31
自己解決しましたどもでした。
>>405
ソレダ(・∀・)
VBでDBへSQL文を投げて
抽出結果をExcelファイルを出力するプログラムを
作っているのだが
配布前日になって、
インストールする際に
「OCXが入らないぞゴルァ」とパソコンからメッセージが出て
インストールが完了しないのだが
どういった原因が考えれらるでしょうか?

状況
・開発PCとMyPCではインストールは完了する
・VBランタイム・プログラムで使用しているOCXが
入っていないパソコンで上記のようなエラーが起こる。

・・・・OCXが壊れているのかな・・・・
>>449
>壊れているのかな
いや、入ってないんでしょ。
>>450
ディレクトリヴィーションウィザートで
パッケージを作成する際に
そのOCXもパッケージの中に入るようにしていまつ・・・

>>449
VB製アプリが常駐してないかチェック
>>452
VB製アプリは常駐していないです。
パソコンによっては全く常駐ソフトがないでつ

そのOCXのファイル名を答えよ
>>454
imText
imCalendar
imDateX
imDTCalcX
imTZoneX
等のOCXファイルでつ
>>455
 あのな、名前からして、InputManだと思うが、
だったら付属のマニュアル読めよ。
 ReadMeにも色々書いてあるだろう。
2バイト文字が怪しいと言ってみるテスト
458デフォルトの名無しさん:04/04/18 14:35
少し高度な技術なんですが知ってるかた教えてください。
ソースのないDLL(多分セルフレジスター無なのでCにより作成?)
VBアプリのBASファイルでDeclereにより宣言し、その内部の関数を
Form1のボタンによりコールします。おそらくDLL側の初期化が上手く行われて
いないのかVBからのアプリより1度キックすると二度目が動きません。
そこでVBのアプリを終了してから もう一度起動するとうまく(一度だけ)
動きます。
この場合VB上で一度コールした外部関数DLLのプロセス?をコロすような方法は
ありますか?※もちろん VBアプリは終了しないで
たとえば参照設定でいけるActiveXDLLだと
new と nothingで実装可能なのでこの場合も何か方法があるのかな?
と思いました。
目的のDLLをラップするDLLをVCとかで作って
ラッパーでLoadLibraryやらなんやらうわなんだなにをするやめr
460458 :04/04/18 16:14
>>459
そそーーんなーー
途中でもっていかれないで

なんとなくわかりそうなんでもう少し!!
Winsockで複数の鯖に同時に繋ぎたいのですが
winsock(0)で鯖Aに接続して、winsock(1)で鯖Bに接続すると、winsock(0)の方が切断されます。
これ、どうにかなりませんか?
>461
んなわきゃないだろ
おまいの使い方が悪い
同じオブジェクトを使ってんだろ
レコードセットするときのDBと一緒
>>460
とりあえず、問題のDLLの使い方に間違いがないかを確認するのが先決じゃないのか?
あるいはDLL自体が問題を抱えていないか?
対症療法だけじゃいずれ泥沼。
465デフォルトの名無しさん:04/04/19 02:17
VBで、ボタンを押すとある関数に入る(無限ループの処理)
(Peekmessageなどでwindowsに処理は返している)
その状態で、あるボタンを押すと関数から出てくる(処理を中断する)
にはどうすればいいでしょうか?よろしくおねがいします。
>465
氏ね
467458:04/04/19 09:08
>>464
レスありがとうございます。DLLのソースがないので
なんとも作りがよくわからないのです。(多分DLL側のバグ?)
EUCをCRLF&SJISに変換する機能なのですが
自社でもう作成した人がおらず。添付のReadMeテキストで
呼び方だけ判明したのです。いちから作る稼動もないので
できればこのまま使える事を前提にコール側で対処できたらなあ
とおもいました。
※顧客へ出ていくアプリではなく社内内部ツールを作成してるので
あまりシビアなものでもないのです。
468465:04/04/19 09:36
>>466
レスありがとうございます。氏でぐぐってみましたが中国のサイトだらけで
わけわかめでした。もう少しヒント下さい。
>>468
ボタンクリックでフラグを立てる。
ループ内ではdoeventsしつつ先のフラグをチェックする。
山田クン465の座布団全部持ってけ!
471デフォルトの名無しさん:04/04/20 10:20
VB6.0でお勧めの本はありますか?
一応、初心者は卒業した感じです。
472デフォルトの名無しさん:04/04/20 11:31
ACCESSのレポートのプレビューで、
プレビュー画面を終了するまで他のアプリに制御が移らないように
したいのですが、できません。
できればAPIを使用しないやり方が知りたいです。
よかったら教えてください・・もうだめぽ。
モーダル
スリーカ
475デフォルトの名無しさん:04/04/20 15:33
oleAccess.DoCmd.OpenReport strReportName, acPreview, strQueryName, WhereCondition:=strWhere ', windowmode:=acDialog
だめなんですもだーるでも・・・・!!
なんか他のアプリに制御うつっちゃう!
何故そんな行儀の悪いプログラムを作りたいのかね
477デフォルトの名無しさん:04/04/20 16:00
仕様です。。害虫な僕は雇われる身。
仕様なだけにしようがない

あはははははは
そりゃぁ、他のアプリに制御は移るだろう。
その仕様が腐ってるだけだと思うー。
480デフォルトの名無しさん:04/04/20 16:42
必死であがいた結果、ACCESSのプロパティをいじり
APIを駆使してなんとか仕様を満たす方法を発見しましたが、
これは避けたいです・・・。
481デフォルトの名無しさん:04/04/20 18:35
WithEventsでは配列が定義できないという点で困っています。
コントロール配列からのイベントを受け取る事は言語仕様上無理なのでしょうか?
>>481
すんなりやる方法は無い。
やりたのならフォームでコントロールのイベントを直接受け取らず、
クラスを作り、その一つのインスタンスに一つのコントロールを代入し、
クラス側でイベントを受け取る。必要ならイベントをフォームに転送する。
483デフォルトの名無しさん:04/04/20 18:57
構造体で、ひとつのデータのまとまりを配列のように使いたいのですが、どうすればいいですか?
配列のように、添え字を使いたいです。
484465,468:04/04/20 20:07
>ボタンクリックでフラグを立てる。
これはわかりました。
>ループ内ではdoeventsしつつ先のフラグをチェックする。
実は、実行部はC++です。VBの変数をC言語で使えるのでしょうか?

関数抜け出しボタンを押す→flag立てる→C言語内でflagチェック?(できますか?)
485 :04/04/20 20:37
>>484
まあ釣りだろうけど、正直この程度のこと聞いてる人が
C++使うってそのほうが問題だと思う。
>>484
できるよ。
ポインタは分かるでしょ。それでやれば。
>>483
質問は明確に。
それはCの共用体みたいなことができないか、って意味かい?
それとも構造体のメンバにインデックスをつけて、そのインデックスでも
メンバにアクセスできるようにしたいってこと?

前者ならVBに共用体はないから、かなり工夫をしないと無理だろう。
後者なら、構造体じゃなくてそういうクラス書けばいいだけだと思う。
すいません。質問以前の事なんですが、

ふとVBをやろうと思いました。
本などを読んで勉強しているのですが、どんな事が出来るのかイメージが全く付かず、
モチベーションがなかなか上がりません。

java scriptくらいしかプログラミングは出来ません。

何か導きがあればご加護を・・・。
>>488
2ちゃんねるブラウザ、Web巡回ツール、画像ファイルビューア、メディアプレイヤー、
Flashプレイヤー等々、ありあわせの部品を組み合わせて、小便利なツール作るのが
得意分野かな?
テキストデータの処理が得意で、バイナリデータの処理が苦手。画像解析なんかは
C使ったほうが簡単だったり。
DBとの連携が得意だけど、個人ではあんまり使わないなあ。

やりたいことがあるんなら、それがVBむきなのかを直接きけば?
>>489
なるほどー。
参考になりました。

何かプログラムを覚えようと思ったのですが、
実はやりたい事が無く、VBを覚えておけばワードとかのマクロなんかも組めるようになるって話を聞いて、
VBを選択した次第です。

ありがとうございました。
>>490
VBに限らずだけど、目的が無いなら面白くないし、プログラミングも上達しないよ。
仮に、仕事にしたいと思ってたとしたら、今からVB6を選択するメリットは少ないからやめとけと言いたい。
たぶん、目的がある分、Excelのマクロに直接行ったほうが幸せなんじゃないかな。
>>482
たしかコントロール配列のイベントを捕ろうとするとその方法でも無理があった気がする。
今ものすごく眠いので夢を見ているかもしれないけど
>>492
無理じゃないよ。
>>493
えっ、どうやってやるの?
コントロール配列をsetしようとした段階で、「イベントセットをサポートしていません」ってエラーが出るんだけど。

試したコードはこんな感じ。
Dim WithEvents obj As PictureBox

Private Sub Form_Load()
Set obj = Picture1(0)
End Sub
495481:04/04/21 12:21
>482 >492-494
ども。
私もまさしく>494の状況。
これが出来るだけで随分と楽できるんですが・・・
今の所、当面の回避策として、コントロール配列の使用を止めてます。
496デフォルトの名無しさん:04/04/21 12:36
ていうか言葉は正確に使おうよ。
オブジェクト変数の配列は「コントロール配列」じゃないよ。
オブジェクト変数の配列は、イベントハンドラを持つことはできません。

コントロール配列はできます。
授業で( )や演算子(+ - * /)の優先順位どうりに計算して結果を出す電卓を作るのですが、どんな感じのアルゴニズムにしてよいかいまいち思い浮かびません。アドバイスお願いします。
逆ポーランド記法
>>496
コントロール配列のイベントをとるためにオブジェクトの配列を用意したいけどそれもできないってことじゃないの?
あるごにずむage
>>500
釣り?いや、なんかマジ臭い気が。。
あなた、かなり恥ずかしいこと言ってますよ。
503デフォルトの名無しさん:04/04/21 23:32
VB6+oo4oで、初めてのデータベースプログラミングに挑戦しています。
そこで教えていただきたいのですが、VBにおけるBoolean型のデータは、
どのようにOracle8iに格納したらよいのでしょうか。long型であれば
NUMBER (9,0)とかinteger型であればNUMBER (4,0)とかは調べられたの
ですが、Boolean型がどうも調べきれません。

VARCHAR2 (5)と定義しておいて INSERT文にてBoolean型の変数を代入
すれば、自動的に'False'とか文字列に変換してくれるのでしょうか。
また、その逆に、SELECTした結果は blnFlag=oradyn.Fields(0).Value
とすれば、検索結果の文字列をBoolean型に変換して代入してくれるの
でしょうか。

実験してみれば簡単なのでしょうか、その方法がもっとも望ましい方法
なのかは判別できません。どのような方法がよいのか、安全なのか、
お教えいただければ幸いです。よろしくお願いします。
>>499
>>498
ありがとうございます。
ちなみに、(-2+spr(2^2-4*1*3))/2と入力すると計算結果が表示されるという感じにするにはどんな感じにすればいいですかね?初心者なもんで考えると頭の中がゴチャゴチャになってしまって解法がみつかりません!ご教授を
505デフォルトの名無しさん:04/04/21 23:59
>>503
うちの会社は CHAR か VARCHAR2 に 1か0を入れてるな。
506503:04/04/22 00:06
>>505 事例を教えていただき、ありがとうございます。

そうすると、INSERT文を組み立てるときに、if blnFlag=True then 〜
というふうにされているのでしょうか。

これだと、INSER文の組み立てがごちゃごちゃになって、ちょっと
綺麗じゃないなぁ、と思って質問した次第です。

oo4oとかVB側に変換関数があるとか、暗黙の変換ルールが存在して、
それに則って自動変換してくれれば綺麗だと思うんですが…

>>504
http://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
読め。
字句解析、逆ポーランド記法でググるといいよ。
>>506

IIf、Switch、Chooseなんか使うと多少は楽じゃないかな。
VB6で新しいクラスを創った時に Public 変数や Let/get の定義で
プロパティは創れるんですが、プロパティ無しで直接クラスに値を
出し入れしたいんです。

つまり、

Dim hoge as New MyClass ' MyClass には Public Value as Integer があるものとする。
hoge.Value = 1

ではなくて、

Dim hoge as New MyClass
hoge = 1 ' MyClass のインスタンスにプロパティなしで直接入れる。

としたいのですが、どうすればいいでしょうか?
hoge.ValueをMyClassの既定プロパティにするってのはどうでしょうか?
511509:04/04/22 11:59
回答ありがとうございます。
度々すみませんが、その規定プロパティを設定する為の具体的なコードは
どうすればいいでしょうか? 規定 プロパティでググってみましたが
解りませんでした。
>>511
プロシージャ属性
>>509
なんか時代に逆行してるような気が。

そんなことすると、作った当初は便利だと思っても
後々結局は自分の首を絞めることになる気がするなあ。

まあ、小規模なアプリなら問題ないかもしれないけど。
>>503 Trueは-1、Falseは0。そのままつっこめるんじゃないの?
>>506 1と0にしたけりゃAbs(blnFlag)
>>513
一つの変数を特別な処理して保持する必要があるなら分からんでも無いけど。
ちょうどStringみたいな。
>>511
色んな方法がある。

(1)[ツール]-[プロシージャ属性]で、名前をValueにして[詳細]ボタンを押して、
プロシージャIDを(既定値)にする。これは>>512が書いている方法だなや。

(2)[アドイン]-[クラスビルダーユーティリティ]を使う。Valueプロパティののプロパティを
開いて既定プロパティのチェックボックスにチェックすればいい。

ちなみに、既定プロパティを設定したら一度保存して、クラスモジュールをテキスト
エディタで開いてみるといい。

Attribute Value.VB_UserMemId = 0

って行があると思う。これが既定プロパティを設定してるのさ。

>>513
んだなぁ。.NETでは既定プロパティをサポートしなくなったしね。既定プロパティはバグ
になる可能性があるから俺も明示的に指定する方が好き。
517デフォルトの名無しさん:04/04/22 18:05
すいません。既出のような気がしますが、
VB6でヘルプファイルが見れなくなりました。
普通のは見れますが、EXCELオブジェクトなんかのヘルプを見ようとすると(F1で)
エラーが出るんです。
どうしたら直りますか?
環境は、WinXpでVB6,VB.NET、OfficeはXPが入ってます。
よろしくお願いします。m(__)m
518509=511:04/04/22 18:06
 皆様回答ありがとうございます。

 動機は「ちょっと楽をしたい」と言う程度の物で、その手抜きが後に禍根を残したり、
コードの可読性を下げては元も子もないので、折角教えて頂いたのですが、
規定プロパティは使わずに全部明示する事にしました。

 大変ありがとうございました。
見よう見まねで書いたVBScript を添削していただきたいのですが、
このスレでいいですか。

スクリプトはこっちに書きました。
http://pc5.2ch.net/test/read.cgi/tech/1021881540/267

とりあえず、
「WshShell.Run Noah & " -x " &...」の部分をもっとスマートに
表現できないだろか、とか
変数名がへんチクリンなのではなかろうかとか思ってます。
他にも我流ゆえに変なところがあるんじゃなかろかと。

スクリプトを書いた動機は、ここ。
ttp://pc5.2ch.net/test/read.cgi/win/1068321422/98-100

WinXP SP1 を使ってます。
520デフォルトの名無しさん:04/04/22 20:52
>>506
OO4Oなら、databaseオブジェクトから Dynasetオブジェクト
を作って、そこで AddNew 使わないですか?
INSERT文を組み立てるより、コードがすっきりしますよ。

dynaset作るときに条件として
WHERE ROWNUM = 0 とすれば、SELECT文の
実行で時間がかかることもないし。

521デフォルトの名無しさん:04/04/22 21:27
VBからgoogleに検索をかける方法ってありますか?
Inetコントロール使って
 OpenURL("http://www.google.co.jp/search?q=test&ie=UTF-8&oe=UTF-8&hl=ja&lr=")
とかしたら、「403 fobbiden」とか返されてしまったです・・・
WebBrowserコントロールで、

Private Sub Command1_Click()
 WebBrowser1.Navigate "http://www.google.co.jp"
 Do
  MsgBox "ページが表示されるまで待つ"
 Loop While WebBrowser1.Busy

 With WebBrowser1.Document.Forms("f")
  .Item("q").Value = "検索"
  .Submit
 End With
End Sub
>>521
InetコントロールはUser-Agentで判断されて制限されている。
>>522-524
素早いレスどうもありがd

そして、制限されてたのかorz
とりあえず523の方法でいけたですよ。
これでガシガシコード書けるのです。

どもどもありがとうございました〜♪
VB6 SP6を使ってるんですが

Do
  i = i + 1
  Debug.Print i
Loop While i < 3

と、

Do While i < 3
  i = i + 1
  Debug.Print i
Loop

を実行したら、どちらも
1
2
3
と言う結果を得ました。前者の場合は、
1
2
となると思ったんですが、そうならないのは何故でしょう?
>>526
ループを条件判断に置き換えて、一周ずつトレースしてみそ。
脳内実行で普通にそうなるけど。
試してないがiを1で初期化してi=i+1とprintを逆にすればうまく行きそう。
違いは初回に条件チェックするか否かだけ
>>527
>ループを条件判断に置き換えて、

と言う意味がよく分からなかったので、>>526をトレースしてみました。

前者のループの場合、Doは1回だけ実行されて、i=i+1からLoopの行が3回実行されました。
後者のループの場合、Doが4回実行されて、i=i+1からLoopの行が3回実行されました。

むう。この場合、どっちもDo〜Loop内の命令が実行される回数は同じなのか(´・ω・`)
やっぱ最初だけか。ややこしいから普段はforしか使ってない。
532デフォルトの名無しさん:04/04/23 12:26
そんなんどっちでもいいっぺや

実際デバッグして思う結果にならない場合はなるよう
加工すやいいだけ
>530
Loop文の繰り返し終了条件のフローチャート書いてみ。
すぐ理解できるよ。
物議を醸す程度のもんとは思えんのだが
ってゆーか釣られ杉 >>527-534
>>532
思うようにならない場合に、何故思うようにならないのかを
突き止めないと、よくないと思います。

例えばこう言う事例があったそうです。ある関数で何故か戻り
値が期待する値の1/2になってしまうバグが発生し、関数を書
いた人に連絡すると、すぐに修正版をリリースしたそうです。

受け取った人は早い対応だなと思ったそうですが、ふと、関数
を書いた人に、どこを直したのか尋ねると、戻り値を返す直前
で単純に2倍したそうでして…

バグの原因が本当に2倍し忘れなのであればそれでいいのですが、
そうじゃないかも知れないし、もしそうでないのであれば、単純
に2倍にすると、別のバグが発生するかも知れないですね。

>>533
どうも有難う御座います。>>529のレスと、ステップ実行の
結果を見て、自分が
1
2
になると思ったのは自分の勘違いだと気付いた次第です。

>>534
済みません。朝からデバッグしててちっと頭が煮詰まっていたよう
です。ちょいと気分転換してくるよ。
536デフォルトの名無しさん:04/04/23 20:29
VB6でWindowsタスクマネージャのアプリケーションのところに
表示されないソフトを作るのはできますか?
VB6じゃなくてもできないんじゃないかな
サードパーティのソフトでそんなんできるOSは怖いような
538デフォルトの名無しさん:04/04/23 20:49
Windowsタスクマネージャのプロセスのところには表示しても
いいのですがアプリケーションのところには表示させたくないのです。
基本的な質問なんだけど
反転したリストボックスをいったん別のフォームに移動して
戻ってきたときその値を元の値で反転さすにはどうすればいいのかな?
デフォルトで反転なんてできるのかな?
教えて
>>538
ウィンドウスタイルを変えてやれば良いんじゃない?
APIを使う事になるけれども。
>>539
基本的なことだが、このスレに言葉に依らずに他人の考えがわかるエスパーはいない。
意味不明な質問に回答を与えられる奴もいない。

「反転」ってなんのこと?「別フォームに移動」とは?
542デフォルトの名無しさん:04/04/23 23:15
すんません・・・激しくしょぼい質問で申し訳ないのですが
関数で使用した変数を2つ以上使用した場合の
変数の受け渡し方が全然わからんのです・・・
1つだけならcall のところに変数名を入れればオッケー
なんですが変数を複数返したい時の方法を
どなたか教えてください・・・

sub main()
call syori()
C = A + B
end sub
sub syori()
A = 1
B = 2
end sub
↑こんな感じでAとBをmainでも使いたいのです。
>>542
配列を引数、変数にするとか、或いはByValで直接a,bを関数側で
変更かけちゃうとか。
>>542
変数をパブリックに持たせりゃいいんじゃね?
545542:04/04/23 23:45
>>543
>>544
ありがとうございます。
ためしにその方法でやってみようと思います。
>>542そんな回答で納得しちゃだめだって。(ていうか、それを言うなら
ByValじゃなくてByRefね>>543)

関数の返り値を構造体にする、これが正解。
構造体なんて知らない?別に難しくないからヘルプ読んでみ。
547デフォルトの名無しさん:04/04/24 00:18
>>546
パブリック変数を馬鹿にしたなおまえ
>>547
数が増えると管理がメンドクセ。
549デフォルトの名無しさん:04/04/24 00:23
>>548
>>542を見てたら数増えそうにないだろ
初心者はまずパブリックから始める
そして構造体宣言 そして関数間でのパラメタ引継ぎ引き渡しが
順序ってもんだろー
構造体使うのも面倒だから、
その程度だったら参照渡しでいいんじゃないの?
>>549

>>542はただの例なんだから、それを基準に数がどうこう言っても仕方ないでしょ。
それと、用語が変ですよ。初心者に教えるなら正しく。

×構造体
○ユーザー定義型

×パブリック
○グローバル
確かに構造体とユーザー定義型は言い換えても通じないことはないが、
(とは言え、C言語の構造体と見た目が似ているだけで、C++の構造体とは別物だが。)

が、パブリック変数とグローバル変数は通じるかも知れないが、誤解が生じる可能性もあるな。
クラスやフォームのパプリック変数は、全くグローバル変数ではないからな。
確証はないけどvbのユーザー定義型とcの構造体って、
単に互換性があるだけじゃなくてデータ構造も完全に同じような気がするけどなあ。
(Stringをメンバに持つ場合は話が違うだろうけど)

でなきゃAPIの引数でユーザー定義型をByRefで渡せたりしないと思うんだけど。
それから>>551に突っ込むんなら、それを言うならパブリックでもグローバルでもなく、
モジュールレベル変数だろ、って言わないと。
根拠無いなら書くなよ
根拠はある(現に示しているし。。)が確証はない、と言ってるんだが。
恥の上塗りするために現れるなよ
>>526
こういうのは試しにIfとGoToに置き換えてみそ。ほとんどの制御構造は
IfとGoToで表現できる。本番でそう書けとは言わないが、その反面、
置き換え方がわかんないというときは、その制御構造をよく理解してないって
ことになる。
フローチャートで言えば、反復の記号を使わずにひし形で書けるかどうかと
いうことだ。
ていうかさあ、もし>>526が釣りとかネタとかじゃないとしたら、
>>526はプログラミングの才能ないと思う。

煽るつもりは全然ないけど、こんなの全然悩むようなことじゃない。
私は中1からプログラミングしてるが、中学生当時ですらこんなことで
躓いた記憶はない。

このレベルのことがすんなりわからない、ってことはアルゴリズミックな思考能力が
ないってことだろう。帰納的な思考の初歩の初歩だよこれ。

適性がないことを続けるって、不幸な場合が多いと思うんだよね。
>>557
というか、ほとんどじゃなくて、「全ての制御構造は」なんだが・・・
全然、本筋とは関係ないけど。
>>558
君は、>>526の上司かね?
趣味にケチ(ry
>>558
バグ出しで頭が煮えてたんだよ(´・ω・`)ショボーン
MS−DOSの時代にBASIC使ってました。
このとき、変数にたくさんのデータを割り振るのに
for a=1 to 10
read atai(a)
next

data 18,15,14,22,31,14,62,82,91,10

などとすれば簡単だったんですがVBでも同じような
ことができますかしら?

今はいちいち  atai(1)=18 :atai(2)=15・・・・・・・・
などとやっていてめんどくさいことなにうえないんです。

Dim atai As Varian
atai = Split("18,15,14,22,31,14,62,82,91,10", ",")

ほかにもやり方があった気がするけど、わすれた
いかん、tが抜けた。寝る。
>>564
ここはSplitぢゃなくてArrayぢゃの。

VB6って配列の初期化が出来ねぇってのが厳しいよのぉ。
Variant使いたくないのに(´・ω・`)ショボーン
Splitでいいと思うけど。

ところでプログラミング作法的には、こういうのはリソースファイルを使うんだろう。
VB6でないと開発環境だけではリソースファイル作ることも
編集することもできないけどさ。
>>566
うあ、>>563をよく見てなかった。最後にセパレーターを指定してんのか。

然しわざわざセパレーターを指定すんのは冗長だと思うなぁ。cvsファイル
を読み込むなら分かるんだが。

俺なら

atai = Array (18,15,14,22,31,14,62,82,91,10)

って書くけどどう?
VB5でもリソースファイルをいじれるよん。
アドインを落としてこなきゃダメだけど。
ソースに値を埋め込むよりリソースや外部ファイルからとってくるのがWindows風って事なんじゃないだろうか。
>>569
んだなぁ。ただあれだ、データ数が少ないのにリソースや外部ファイル使うっ
てのも大げさな気がする。小さい配列ならリテラルで初期化しちまっても
いいんじゃないかと思ったり。

>>562
データ数が多くなるようなら、Excel辺りに打ち込んでcsvファイル吐かせて
実行時に配列に読み込むってのも手だぞ。
571デフォルトの名無しさん:04/04/26 19:03
すみません、VB6でSPSSを制御する方法知ってる方いますか?
SPSSにはSaxBasicと言うものがありますが、機能不足ゆえVBで作らないと、
だめっぽいです
572デフォルトの名無しさん:04/04/26 20:04
現在VB6(SP5)-Win2000で.mdbのデータを表示するものを作成しているのですが、
フォームに貼り付けたラベルに「&」を含むレコード(テキスト型)を表示しようとすると
正しく表示されません。

例).mdbのレコード → A & B
  ラベルの表示  → A _B

と、なってしまうのですが。どうすればレコードの内容をそのまま表示できるでしょうか?
教えて下さい、よろしくお願いします。
>>572
A && B
UseMnemonicのほうがいいだろうな
575デフォルトの名無しさん:04/04/26 20:11
>>573
572です。レスありがとうございます。
しかし.mdbのレコードをいじらずに、コントロールの設定などを
どうにかして表示する方法はありませんか?
意図的に無視してるのか。そうか。
577デフォルトの名無しさん:04/04/26 20:13
>>576
違います。書き込みしてる間にレスがあったものですから・・・。
578デフォルトの名無しさん:04/04/26 20:14
WindowsXPにVisualStudio6.0のインストールを試みたのですが、
「DCOMが作成できません」と表示されてしまいます。

なぜでしょうか。よろしくお願いします。
579デフォルトの名無しさん:04/04/26 20:15
>>578
DCOMが作成できないから。
580デフォルトの名無しさん:04/04/26 20:21
>>574
>>576
572です。UseMnemonic を False に設定したら正しく表示出来ました。
ご教授ありがとうございます!!
581デフォルトの名無しさん:04/04/27 09:09
>>578
MSの技術サポート情報を検索すればそのものずばり


ttp://support.microsoft.com/default.aspx?scid=kb;JA;257413
&Product=vstudioJPN
DataGridの内容をtxtに保存しているのですが
DataGridの方で画面に表示されている行より下の行(スクロール後)
にいくとエラーが発生して書きこんでくれません。
行数が多くない場合は正常に動作するのですがスクロールが入ると
うまく動いてくれません。
お助け下さいませ
もうね、どんなエラーがコードのどこで発生しているかも書かずにお助け下さいなんて、アフォかと。
うふん、そんなこといっちゃいや
カレンダーコントロールでカレンダーの文字が表示できない。
なぜでしょう。
カレンダーコントロールのバージョンは11
↑送信してしまいました。
開発環境はVBです。DLL HELL?
ネットで調べても似たような例がないんです。
たぶん、バージョンの違い?
古いOCXにするのがいい?
だれかご教授お願いします
>>585
フォームに置いただけで普通に表示されてるけど。

ちなみにうちの環境はVB6.0(SP6) + Office2000 Professional
MSCAL.OCXのバージョンは9.0.0.3620だなや。

バージョン11ってのは、どのバージョンのOfficeに入ってるんだろう?
588デフォルトの名無しさん:04/04/27 15:59
>>585
アクセス付属でなくVB6付属を使いなVerは8.0
アクセスでもバージョンによって互換性に問題あり
Google検索でトップにでてくるよ
VB6付属のMSCAL.OCXってあったっけ?
590デフォルトの名無しさん:04/04/27 17:15
588様
お返事ありがとうございます。
クライアントに配布するときにカレンダーの文字が化けるのです。
EXEだけではだめなのですね。
OCXをクライアントのSYSTEM32にコピーすればいい?
がんばります
589さん
microsoft calendar 8.0のことです。
591デフォルトの名無しさん:04/04/27 18:10
VB6.0ですが、CreateObjectでエクセルにアクセスするとき、EXCELがプリント画面を
開いていると、「コンポーネントが応答しないため、この操作を
完了できません、、、、、」のメッセージがでてしまいます。
何とかならないでしょうか?
 このメッセージが出るとタイマーもとまります。
592デフォルトの名無しさん:04/04/27 21:21
>>590
オイオイ VBはexeコピーだけでは、今回のようなエラー
がでるよ。
OCXを使う場合は、レジストリに登録する必要があるのでディストリ
ビュージョンウイザードから配布用パッケージを作成する事
593デフォルトの名無しさん:04/04/27 23:03
>591
OLEの問題だね。まあ使いもんにならんということだ。
別のプローセス間通信を使う以外にない。
>>593
そういう問題と違うと思う。
プリント画面、ってのが何のことかよくわからないが、
要はエクセルがモーダルのダイアログ開いている間はエクセルが
応答しない、ということを>>591は言っているんじゃないだろうか。

これはOLEの問題とかXXの問題とかそういうことじゃなくて、
モーダルのダイアログを開いている場合の「正常な」動作だろう。

一番簡単で現実的な対策は、ユーザーにそういうモーダルなダイアログが
開くような操作をしないように頼むことだと思うけど、どうしても強制的に
問題の発生を防ぎたいなら、Interactive(だと思ったけど自信ない)プロパティ
何かでVB側で操作している間はユーザーに干渉されないようにするしか
ないんじゃないかな。
>>592
いや、EXEPressなんかでインストーラ組んで、regsvr32で登録する
BATファイルをインストーラに実行させればよい。

もち、OCXはsystemフォルダにぶち込むようにしてね
596デフォルトの名無しさん:04/04/28 06:03
>594
>これはOLEの問題とかXXの問題とかそういうことじゃなくて、
>モーダルのダイアログを開いている場合の「正常な」動作だろう。

いやそれが「正常な動作」とされているのが問題なのです。
 Interactiveというのが何かよくわからないけど、そういう機能が
 あるとしても
  一旦XCELに自由な動作を許したあと、XCELがモーダル状態に
 入っているのを検出する方法がない。 検出に行った途端に
 注意画面がでてしまう。
  これはちょっと酷いと思う。
>>596
設計が悪い。ってか使い方を誤ってる。
うん。やり方をかえればどうにでもなると思う。
599デフォルトの名無しさん:04/04/28 11:58
>597
そんなことは無いとおもうよ。
 VBからモーダル状態のXCELにアクセスして、勝手にメッセージが
 でるとしたら、そのメッセージを押さえ込むのは、通常の方法では
 できないだろうからね。
  XCELの設計がわるい。
 第一、XCELはブレークしたら、クラスのインスタンスが飛ぶし、
 VBに比べるとかなりいい加減。


UIと本体のスレッドやメッセージキューが同一なのか…
使えないね
601582:04/04/28 13:29
書きこみ忘れてたけど、自己解決しました。役に立たないね
メッセージを許容するか、そーゆーメッセージを出させないようにするのが
正しい使い方だと思うんよ。
>>599は前提条件で、どーしても合わなければ
Excelを使うという判断には至らないと思うんよ。設計段階で。
てなわけで>>597に一票。
どうせおまいらにはExcelは作れないだろ
604やまごろ:04/04/28 17:07
毎度お世話になってます。
VBでプログラムから音(例えばMP3)を鳴らしたり止めたりする時は普通どうするんですかね?
とりあえず、コンポーネントにメディアプレイヤーが有ったんで貼り付けてみたものの、使い方全く不明。
98/NT/2000/Xp全部で動くexeにしたいので、APIとかはなるべく使いたくないな〜。
VBを実行するとオフィスのインストーラが実行される。
VBはだめか?
NETに移行した方が楽か。
SDKはインストールするには時間がかかるが
>>604
VBMP3.DLLとか。
>>602
モーダルの時にアクセスしないという処理を作る場合、Excelに
現在の状態を教えてくださいよとお願いしないといけない訳だね。
で、その時にメッセージが出てしまったら、メッセージが許容できない
という要件では使えないということになる。
それを回避する方法があるのかどうか。

と、Excelと連携する物作ったことの無い漏れの素朴な疑問。
無いならExcelで作るって言い出したやつが悪いんだろうな。
でも、メッセージ出るのは漏れも嫌だと思うなぁ。
>>604
>98/NT/2000/Xp全部で動くexeにしたいので、APIとかはなるべく使いたくないな〜。
前者と後者の関係が不明。
>>608
よく分からんがWindowsのバージョンに依存するAPIを使いたくないって
ことじゃねーか?

つか、MP3鳴らしてなに作るのか知らんけど、今更98とNTをサポートせな
あかんのかと思ってみたり。
>>609
シェアウェアで一儲け企んでるんじゃねぇの?
>>610
Σ(゚Д゚;エーッ!

>>604にシェアウェア開発は無理だろ。
>>607
そもそもモーダル状態にさせなきゃいい。
エラー時にエラーメッセージが出るのは至極当然な事。

>>612
>そもそもモーダル状態にさせなきゃいい。
エラー時にエラーメッセージが出るのはいいとして、そもそもこういうことが実際に
できるかどうかってことだよね。
できるできるって話は進んでるけど、機能を聞くとちっともできそうも無い感じなので、
どうやってやるのかちょっと興味があっただけなんすけどね。
614デフォルトの名無しさん:04/04/29 11:41
初めて質問します。ピクチャボックスにボタン画像を貼り付けて
ロールオーバー機能を持たせたいのですが、マウスがボタン上から
離れたことを知るにはどうすればいいのでしょうか?
また、作ったものをユーザーコントロールとして使うつもりです。
何か有効なAPIなどあれば教えてください。
>>613
だからApplicationのInteractiveプロパティを使うべし、
と最初から言っているじゃないか。
>>614
タイマーコントロールでマウスの座標しらべればいいじゃん?
>>614
MouseMoveでSetCaptureとReleaseCaptureでグニョグニョ。
>>614
WindowFromPointとか。でも>>617が一番無難。
619デフォルトの名無しさん:04/04/29 20:28
 だけどそうするとマクロを起動するボタンなんかも、全て、無効になってしまうよ。
そうするとすべてVBで全部制御しないといけなくなるから大変だ。
できたら、マクロのボタンだとか、プリント機能なんかはプレビューとか便利だし、
XCELにやらせたい。
>>619が何を言いたいのか全然わからないんだが私だけか?
>620
 同士よ。
 ユーザーに自由に触らせたい場合は、ShellExecuteで
開かせて放置だけどな。
622614 :04/04/30 09:37
>>617,618
ありがとうございます。
無難に再現できました^^
623デフォルトの名無しさん:04/04/30 10:38
質問させていただきます。
VBA(Access2000がメイン)で、ラベル等に表示する文字列の表示幅を
取得する方法はあるでしょうか?
例えば、ラベルに MSゴシック10pt. で「プログラマ」と表示したとします。
その「プログラマ」の文字列の表示幅をTwipなりcmなりの単位で取得する方法
が知りたいのです。
よろしくお願いします。
TextWidth
625623:04/04/30 11:17
>>624
試してみましたが、Accessの場合はレポートオブジェクトしかサポートしていないようです。
まさかこんなところでVBとAccessの違いがでるとは・・・・

もし、APIなどでこの手の機能をご存知でしたら教えていただけますか。
APIならばAccessでも使えると思うので・・・
>>625
興味があったんで調べてみた。(結構簡単に調べがついたので、本当は
あんた自分で何にも調べてないんじゃないの?と突っ込みたいところではある)

GetTextExtentPoint32というapiが使えるんじゃないだろうか?
627623:04/04/30 14:11
>>626
ありがとうございます!さっそく調べてみます。

今「文字列幅」でググり直したら一発で出てきた(汗、、スマソ
(俺の探したキーワードが間抜けでした。
 文字列長の求め方が出てくるの嫌って「文字列」以外のキーワードでやってたら
 変なのばっかだったので・・・)
628デフォルトの名無しさん:04/05/01 02:50
リソースの.aviや.wavや.mp3をWindows Media Playerで再生したいのですが
どうやったらいいのでしょうか?
Media Playerの起動はShell関数ぐらいしかわからなくて^^;
宜しくお願いします
>628
一旦ファイルに書き出して再生
つーか、やりたいことをもう少し詳しく書いたほうがいいと思うぞ

1. ftpでデータを取得するバッチファイルを動的に作成(temp.bat)
2. shellでtemp.batを起動。(プロセスIDをとって、終了まで待機)
3. 数分おきに繰り返す。

というようなプログラムを作ってます。
ところがまれにcmd.exeが終了せずに処理が止まってしまいます。

そこで、途中で止まっているtemp.batを
強制終了させたいのですが、どうすればよいのでしょう?

calc.exeを起動して、終了させるサンプルプログラムを
使ってもうまくいきません。
(calc.exeのかわりにtemp.batを起動・終了させようとしても
起動するだけで終了しません)


「ftp」とだけ記述されたバッチファイルを
起動・終了させる例を示していただけると助かります。
なんでbatじゃないとだめなわけ?
632NomUrakun:04/05/01 12:53
VBでキーボード操作(十字キー)にはどんな関数を使えばいいんでしょうか?
sendkeys?
634NomUrakun:04/05/01 12:59
いや、自動的に操作するのではなくて任意に操作する関数です(N88BASICのINP関数みたいなもの)。誰か知りませんか?
DirectX使ったら?
複数のキーの押下状態を取得したいってことかな?
GetKeyboardState,GetAsyncKeyState,GetKeyStateあたりのWindows APIでどうだ?
637デフォルトの名無しさん:04/05/01 13:28
>629
説明不足ですね、すいません。
aviファイル自体は見えないようにして、
フォームのボタンを押すと既存のアプリで再生しようと思ってます。
あまり意味なさげですが、wavとかavi自体をプログラムからしか
起動しない且つ、いつも使ってる再生ソフトで見れるようにしたいのです。

一旦ファイルに書き出すとなると再生開始に時間がかかっちゃうぽいですよね?!
どうしようかな。

正直、自分のやりたいことを明確に表現することすらできない人には
Windows時代のプログラミングは無理だと思う。

>いや、自動的に操作するのではなくて任意に操作する関数です
>(N88BASICのINP関数みたいなもの)。
これ、書いた本人以外に意味を理解できる人がいるだろうか?
639デフォルトの名無しさん:04/05/01 16:03
>>637
WindowsMediaPlayerでいいんなら、これで可能。(VB6/WMP9)
1.ツールボックスで右クリック、コンポーネントを開きコントロールタブの"Windows Media Player"をチェック、適応、OKする
2.ツールボックスにWMPのアイコンが現れるので、これをFormに貼り付ける。
 オブジェクト名はWindowsMediaPlayer1。プロパティでVisibleをFalseに。
3.任意のファイルの演奏は次のメソッドをコマンドボタンにでも貼り付けておく
  WindowsMediaPlayer1.openPlayer "hoge.mp3"
 新しいWMPのインスタンスが生成されて(つまりWMPが起動されて)演奏がはじまる。
>>638-639
意味がわかってないなら書き込まなきゃいいのに。
641630:04/05/01 16:34
気を取り直して、
「バッチファイルプログラミング質問スレ」
の方に聞いてみます。おじゃましました。
642デフォルトの名無しさん:04/05/01 16:35
なんか知らんけどこの板って感じ悪い香具師多いね。決まった香具師が常駐してんだろうな。
>>642
VBはもう終わったと思われてるからねぇ
すっごいぺーぺー新人か、ベテランか
その2つの層しかいないんじゃないかな?
今がGWという事もあるだろう
>>643
中堅以外は感じ悪いってのは悲観的すぎるんじゃないかと(^^;
646デフォルトの名無しさん:04/05/02 01:19
>>643
つーか、新人が半年たつとえらそーに先生ぶりたいのってプログラマーの特性かね?
これはVBに限らずだけどさ。ある程度ベテランになるとかえってそういことがないような。
647(゜Jし゜):04/05/02 01:26
VB6.EXEをコマンドラインから起動するようなMakefile書いて、
Makeとかでビルドってできそうなんですけどやったことある人いますか?
648デフォルトの名無しさん:04/05/02 01:49
>>647
可能。
コマンドラインからVB6 /?してみて。
コマンドラインオプションが表示されるよ。
>>647
単にコマンドラインから「プロジェクトをコンパイル」することはできるけど
VBは、(内部的にはともかく、明示的には)Cのコンパイラみたいに
ファイルごとに一旦オブジェクトファイルにコンパイルしといてそれをリンクする、
という仕組みにはなってないから、MakeFileってのは意味ない気がするのだけれど。

あるいは、MakeFileに相当するのがプロジェクトファイルだ、というべきなのかな。
実際、これって単なるテキストファイルだし。
内部的にはVB6.EXEと同じフォルダに有るlink.exeが呼ばれている。
このlink.exeはVCなどについているlink.exeと同じ物。
このlink.exeを自作のプログラムに置き換えてオプションを変えて
最適化するなんて技もあったりする。
話ではこれを利用してVBでActiveXでない通常のDLLも作れるらしい。

なんてことができるんだから、オブジェクト生成とリンクの処理を
分けてくれれば良いのに。
そうじゃなくてmake使いたいのはソースのbackup取ったりバージョン管理
(例えば複数フォルダの同期とか)したりってことじゃないの?
VB2では.vbpじゃなくて.MAKだったっけな。名前だけは。
>>651
そんなことはmakeとは関係なくできる。
VBScript で質問いいっすか?
いまHTA書いてるんですが *.exe をパラメータ付けて
起動させたいんですが、どーすればイイか教えて下さい。
あと、Perlにある pack(); と同等の関数ってありますか?
おながいします。
>>654
すれ違い。

消えろ。それを許した場合、VBAやらなにやら全部ここで聞くつもりなのか?
656(゜Jし゜):04/05/02 09:14
誘導
VBScriptの話題はこちらで

http://pc5.2ch.net/test/read.cgi/win/1058829737/
>>655
参.VBScript もこのスレでOK。
>>656
やさしいな、あんた

それに比べて655
おまえってやつは・・・人間じゃねぇ
最近、自分の非常識や独りよがり、説明能力の欠如を棚に上げて、
それを指摘されると逆切れする幼児的な奴が多すぎ。

俺はそういうい奴は端的にウザいから>>655みたいな態度を断固支持するね。
他人同士がコミュニケートするんだから、最低限の配慮をするのは当たり前だろう。
煽ったり叩いたりすんのもある意味優しさだと思うけどな。
リアルでやったらさすがに引くけど。
655必死すぎ(笑)
ちなみに結論は>>657ででてる
まあ、それ以前に壱と弐を満たしていないわけだが
なによりも、スレタイに6.0というバージョン指定があるのが
なによりもね。

VBScriptにも確かにヴァージョンはあるが、それを指して
いるわけでは決してない。

.netが駄目なのにScriptはいいという命題は成り立たない。
そもそも、VBScriptもこのスレでOKと勝手に決めた>>1
大きな問題がある。

VBScriptがだめで、じゃぁ、VBAは?JavaScriptは?という
具合にどんどん拡大解釈できる。

おまけに、WSHもいいですかね?とかなる。
心得
壱.質問する前に 過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.質問する者は エスパーの必要が無い内容で書く。
四.インストーラーなどの質問もOK。
五.荒らしは相手しない。
六. VB情報募集中。
七.VB.NET、VBScriptの話題できるだけひかえる。
>壱.質問する前に過去ログにも目を通してみる。
>弐.質問する前に MSDN などで調べてみる。
>参.VBScript もこのスレでOK。
>四.インストーラーなどの質問もOK。
>五.荒らしは相手しない。
>六. VB情報募集中。
>七.VB.NETの話題できるだけひかえる。

ふーん勝手に決めた1のせいにして
自分で勝手に決めるわけですか?解釈するわけですか?
ま、いいけどね
嫌いじゃないよ、その必死さ
GWだし、誰も文句言わんよ
667デフォルトの名無しさん:04/05/03 00:19
お前ら、終わった言語で熱くなってんじゃねぇよ。
さすが*だなぁ
669デフォルトの名無しさん:04/05/03 00:37
test
670669:04/05/03 00:39
あっごめん誤爆でした。

ところで皆さん半角で「GW」とカキコするとどうなります?
なんかユーザーネームに化けません?
どうやっているんだろう?
>>667
Del厨氏ね
672(゜Jし゜):04/05/03 02:10
今日、仕事中にVBをビルドするMakefile書いてみました。
で、Xyzzyとかでソース書いて、Makeコマンドでビルド。
デバッガとの連携がやりにくいのはナニですが、
ひたすらコード書きまくるような状況では結構いいかも。
673デフォルトの名無しさん:04/05/03 03:51
心得に引っかかりそうなのですが6.0ならVB.NETみたいに
わざわざ.NET Frameworkをインストールをしなくても
すぐにどのPCでも起動するのですか?
NO
675デフォルトの名無しさん:04/05/03 05:27
>>674
.NETみたいに何かインストールしなければアプリは開けないんですか?
手軽さでオークションなので人気かと思ってました。
今勉強中で、データベース(Access)にデータを入れたり出したり変更したりしてるんですけど、
手書きで Set やら DataField やら設定すると、MoveNextとかでカレントレコード移動したとき、
テキストボックスの中を変更してあると、自動的に更新されるんですが、
Data Environmentを使うと、テキストボックスの中が変更されてるとエラーになります
どのように解決すればいいんでしょうか
>>672
なんか厨房がいきがって書いてるようにしか思えない。

いまどき、MakeFileが生きてくるような環境、つまりあえて
不要なファイルのコンパイルを避けないとコンパイルに時間がかかって
仕方がないような環境ってありえないと思うのだが。

いまどき、どころか俺のくたびれたペンティアムII-300MHzのPCでも
コンパイルに時間が掛かってムキーってことはまずないし。

MSオフィス並みの巨大アプリ作ってるのなら話は別かもしれないが。
>>675
WindowsXP以上はデフォルトで6.0ランタイムは入っているので
動く。

Windows2000は確か5.0が入っている

ただ、4.0や3.0、2.0は入っていないはずなので別途入れる必要
がある。
>>678
Win98には5.0が入っている。
680デフォルトの名無しさん:04/05/03 13:29
RubyからExcelの操作をしようと思っています。
Rubyスレで質問すると、VBSの使い方を勉強すればわかるよって言われたんですが、
次の操作をVBSでどうするかわかりません。ヒントでもいいので教えてください。

すでに開かれてるエクセルのブックにアクセスするには、どうすればいいでしょうか?

つまり
エクセルファイルとして存在してるブックを開いて、操作するやり方はわかったのですが、
(Workbooksオブジェクトにaddメソッドで、ブックを登録)

すでに開いてるエクセルファイルを、VBSから操作する方法がわかりません。
(VBAeditorみたいな感じでの、VBSの使い方を知りたいです。)

VBSではどうするのでしょうか?


うまく説明できないんですが、どうかよろしくお願いします。
681680:04/05/03 14:32
VBSでのやり方はいまいちわからなかったのですが、
rubyでは
excel_instance = WIN32OLE.connect('EXCEL.Application')
で、すでに開いているエクセルのアプリケーションオブジェクトを
取得できました。
失礼しました。
>>680-681
 勉強するなら、VBSじゃなくて、ExcelのVBAじゃないと。
 VBSって言った人、絶対勘違いしている。
 ExcelのヘルプにVisual Basic(VBA)のヘルプもあるので、
それを熟読して、VBAの文法などの方は入門書を買うと良い。
 後オブジェクトの操作で分からない部分は、Excel専門のスレが
あるから、そっちで聞いた方が絶対に早い。
683680:04/05/03 20:30
>>682
Thanks!
684デフォルトの名無しさん:04/05/04 02:14
>>682
RubyからExcelの操作といっているのでたぶんVBSでいいのでは?>>681が正解だと思うよ。
ちなみにVBSではこんな感じ。CreateObjectではなくてGetObjectになるね。

Set xlApp = GetObject( ,"Excel.Application") 'カッコ内カンマあり(第1項省略、第2項クラス)
Set xlBook = xlApp.ActiveWorkbook 'ファイル名を指定するときは⇒xlApp.WorkBooks("hoge.xls")

Msgbox xlBook.Name

xlBook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlApp = Nothing

685デフォルトの名無しさん:04/05/04 20:56
Form_Resize イベントをフォームがある大きさになったときに
無効にしたいんだけど、何か方法ないですか?
>>685
If Me.Size.Width > 1000 And Me.Size.Height > 500 Then
MsgBox("無効")
Exit Sub
Else
MsgBox("Form1_Resize")
End If
>686
ごめんなさい。

"メソッドまたはデータメンバが見つかりません。"
と出ます。
>>685
EnabledプロパティがTrueの場合はイベントの発生そのものを抑制することはできないが、
別にイベントの生成そのものを殺す必要なんてない。

イベントが発生したときに行う処理を、ある条件(この場合はフォームが
ある大きさ以上?以下?)が成立する場合だけ実行するようなコードを
書けばいいだけの話。

>>686が言いたいのはそういうことでしょう。
>Form_Resize イベントをフォームがある大きさになったときに
>無効にしたいんだけど、何か方法ないですか?

Form_Resizeに

If Me.Width > 1000 Then
  Me.Width = 1000
End If

If Me.Height > 500 Then
  Me.Height = 500
End If

って書く

綺麗に制御したかったらサブクラス化しな
>>689
それは「フォームがある大きさを超えないようにする」処理であって、
「Form_Resize イベントをフォームがある大きさになったときに無効」にする
処理ではないと思うけど。。

天然なのか、それとも質問者に的確な表現力がないとみて意訳してるのかな?
サブクラス化すればForm_Resizeイベントは起きないので後者はあってる模様。
あっ、「リサイズはしてもイベントを起こさない」ってのは無理か。
693デフォルトの名無しさん:04/05/05 18:19
>>684
Set xlApp = GetObject( ,"Excel.Application")
と書いてあるんですが、
"Excel.Application"っていうキーワードは、どこで調べればいいんでしょうか?
例えば、IEを、操作したいときは、なんて書くんですか?

あと、それぞれのアプリケーションのメソッド(?)は、どこで調べればいいんでしょうか?
Excelは、VBEditorを起動して、オブジェクトブラウザから、メソッドとか調べられるんですが
それ以外は、どうすればいいでしょうか?
(VisualStudioを買うしかないですか?)
>>692
サブクラス化してメッセージを破棄しちゃえばイベントは起こらなくできたと思う。
Resize以外のイベントではそうやって無効になったことがある。
きっと質問者がほしいのはそういう情報でないとは思うが。
>>693
 Visual Studioにも、大して載っていません。(IEのはあったとは思うが)
 「Excel.Application」は、Excelのヘルプに載ってます。
 Excelのヘルプ内のVisual Basicの項にある。
 オブジェクトブラウザでは説明が無いし。
 WordはWordのヘルプ、AccessはAccessのヘルプに
載っています。

 ちなみに、Visual Studioと言っても、プログラミング用の
情報が欲しいだけなら、MSDN Onlineとして公開されているので、
それを見るのが良いと思う。(MSDN ライブラリ)
 http://www.microsoft.com/japan/msdn/default.asp

 そう言う意味でVBSを勉強すると言うのは不正解なんだがねぇ。
 と嫌味。
696デフォルトの名無しさん:04/05/05 19:27
>>689
VBでもサブクラス化ってできるんでしょうか?

CではSetWindowLongを使って試したことがあるんですが、
VBでのやり方はどんな感じになるんでしょう?

GotFocusをキャンセルして別の処理(子ウインドウにフォーカスさせる)
をさせたいのですが、GotFocus内で処理すると、一瞬、ウインドウが
表示されてしまうので。

>>697
ども。簡単ではないみたいですねぇ。
>>698
>>439を使えばIDEは落ちないし、レジストリも汚さないから、多少はマシかと。
700デフォルトの名無しさん:04/05/06 01:56
連続で花火ができるようなプログラムを教えてもらえませんか?
初心者なのでどのようなことができるのかも
いまいちわからず、いい発想がでてきません。
>>695
ほれ
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/modcore/html/deovrworkingwithofficeapplications.asp
いずれもこれらOfficeのActiveXコンポーネントの多くはVBからでもVBSからでも
さらには接続する機能のあるRuby等他言語からでも共通に利用可能だ。
そういう意味で区別して勉強する必要はない。
第一RubyからVBAは動かないし、勉強ねぇと嫌味。
>>700
打ち上げ花火の着火装置をVBで自動制御するという事ですか?
具体的にどんなインターフェイスで接続されているのかを書いてもらわないと、レスが書き辛いですね
703デフォルトの名無しさん:04/05/06 10:37
初心者で失礼いたします。
VB6.0で、ファイルをアーカイブするツールを作成しているのですが、
ファイルアーカイブ中に画面が固まらないように、ダイアログを表示し
そこによくファイルを転送しているときにWindowsで、ダイアログが表示されるな
イメージのダイアログを表示したいのですが、何かいい方法はありますでしょうか?
具体的な方法ありましたら教えてください。
>703
まずは他人が読んで理解できる日本語を書く事をお勧めします。
単にAVIアニメーションを表示したいだけ?
>>703
マルチ。某掲示板でもおなじことを(ry
初心者です。と言う人にまともな人は居ないな。
>>702
花火を描画するスクリーンセーバーみたいなのと考えればいいんじゃね?
>>701
 そのオブジェクト群の説明や用法がVBAのヘルプに入っている。
 VBSのヘルプや解説には、簡単な例がある程度なのだから、
サンプルや情報が遥かに充実しているVBAを勉強した方が早い。
 Excelにでは、実現する方法が分からない時に、自動マクロ記録
機能を使って出来たコードを参考にする方法もある。
 何から使うにしても、VBAで説明されている情報が充実している。
 Rubyで記述するにしても、VBAを理解して損になる事は無いが、
あなたがそこまでVBSに拘る理由はなんだ?
perlで書くとこういうことをしたいんだけど、
VBでどうやってファイルの存在を知ったらいいかわからないです。
if(-e $file){
 do_something()
}
>>709
Dir
>>708
横レスだけどさ
使い方によるんじゃねぇ?
俺はVBSやってCOMがらみでVBA(この場合階層構造になるんだろうけど)を使うって感じだけどな
人によってはマクロからVBAなんだろうけど、それってWORDとEXCEL覚えるのと変わんないしな
>>711
 この場合、VBA = ExcelやWordのコンポーネントで良いのかな?
 VBSからでも、使うオブジェクトの情報を見る時は、VBAのヘルプを
見るわけだよね?
 ネットで情報を検索しても、VBAでのサンプルが多いから、VBAで
見た方が早いよね。
 VBSはVBAのサブセット版だから、VBSには無い部分を除けば、
違和感無く理解できるよね。
 マクロからでも、VBSからでも、VB.NETでもWordやExcelを覚えるのと
変わらないのは同じなんだが・・・ (Delphiでも同じく)

 対象を変えて、ADOのコンポーネントを使うとしよう。
 この場合、ADOの勉強をするよね。
 で、例文はVisual BasicやC++で記述されているんだよな。
 例文の記述に使われている言語を例文のコードの流れを
理解できる程度には勉強しておくと、他の言語で記述する時に
楽なんだが。

 それと全く同じレベルでExcelやWordのVBAって訳なんだが。
 Excelの「VBA」のヘルプには、言語仕様の説明ももちろんあるが、
コンポーネントの説明も充実している。
713711:04/05/06 22:30
んーとVBSがVBAのサブセットってのが違うと思うんだけど
VBのサブセットにVBSがあるんでは?
VBSはあくまでロジック書くための規則でしょ
でそれにのっとってVBAが使えるだと思ってたんだけれど
それにADOの例えがあってるとしたら、なおさらVBの知識要るよね
>713
 間違っている訳ではないぞ。

 http://yougo.ascii24.com/gh/31/003135.html
 ちなみに、VBAにあって、VB5.0には無くて、VBScriptにある
関数があった。(同じ時代のバージョンで)
 VB6.0になると、その関数(Replaceとか)が言語仕様に盛り込まれて
VBAとVBで言語仕様に実質的な差は少なくなった。

http://www.microsoft.com/japan/msdn/columns/scripting/html/vbsvjs.asp
MS自身が昔とは違う説明をしているのだな・・・
この年度を見ると、VBScript3.x辺りからから変わったんだな。

http://www.google.co.jp/search?q=VBScript+%E3%82%B5%E3%83%96%E3%82%BB%E3%83%83%E3%83%88&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
 VBのサブセットと言う説とVBAのサブセットと言う説の両方が
あるが、VBSが登場した頃は、VBAのサブセットと説明されていた
のです。

 VBSは規則でないのだが・・・(明示的な変数型が無いし)
 VBSはVBSで一つの言語、簡略化されたVB。

 VBAはVBから派生したVisual Basic for Applicationsで記述する。
 言語仕様的には、VBAにしかない関数があったり、VBAには無い
関数があったりする程度でほぼ共通。
 だから、言語的には VB = VBAとしても同じ事。
 ところで、あなた、ExcelやWordのコンポーネントをVBAと呼んで
いるの?
 コンポーネントはVBAじゃ無いんだが。VBAは記述する言語部分。
715711:04/05/06 23:24
>>714
そうだったのか
勉強不足でした

>ところで、あなた、ExcelやWordのコンポーネントをVBAと呼んでいるの?
マクロがVBAだと思ってました
716701:04/05/06 23:35
お前等どうでもいいが、ヘルプが引きやすいとかそんな下らないことで
人に嫌味いうほどのことじゃねーと思うぞ。(>>695のことな)

アドバイスもいいが押し付けになってはいかんでしょ。
勉強の仕方や考え方も言語の使い方も人それぞれなんだからさ。

質問スレなんだから、答えるつもりがあるなら、まず聞かれたことを
できるだけ正確に答える。人にこうしろどうしろなんつー態度は
正直大きなお世話、周囲が迷惑いらないよ。

しかし、この板、質問スレで威張りたいセミ素人が、なんでこんなに多いんだろ?
正直傍目にカンジワルイな。
正直、人に命令するな、と命令する自己中クンってよくいるが
平気で自分を棚上げできる神経が理解できない。

俺様だけは特別、とでも思ってるのか。
ソープ嬢にこんなところで働くな、説教するオヤジとか
説教強盗みたいでなんか笑えますな。
ツッコミどころ萬斎だけど・・・とりあえずみんな落ち着け。
おれは今日はWindowsの地雷パッチのせいで疲れちまった、何で日本の役人がこんな粗悪パッチを入れるように促してんだかスレ違いsage
719716=701:04/05/07 01:07
>>717
まぁまぁ、ヒス女や爺みたいな逆切れ説教嫌味はカコワルイに同意だよ。粘着でキモイもんな。
(一応いっとくが漏れは716&701しか書いていない。他は知らんよ。)
願わくはあなたのカキコが勘違いで自己再帰していませんように...。
何事もなかったかのように次の質問
あのー初心者なんですが、
VBとアクセスのDBでプログラムを作っているのですが、IDが未入力だった場合にエラーを
出したいのですが、データを書き込む前に全てのIDが登録できるデータかどうかチェックして、
1つでも登録できないIDがあったらエラーメッセージを表示出したいのですがどういう方法があるのでしょうか?
>>718
これのこと?
ttp://www.atmarkit.co.jp/fwin2k/hotfix/hfb20040507/hfb20040507.html

まーデグレード起こしたMSもどうかしてると思うが、パッチが地雷かどうかを見極めるために
本番環境に当てる前にテスト環境で評価しないか?
>>722
何をしたいのはよくわからないけど、
思いのままプログラミングするだけだろ。
>>709
プロジェクト→参照設定で「Windows Scripting Runtime」とやらを
参照するようにして、それのオブジェクト群を使え。
オブジェクトやメソッドの一覧はF2キーでオブジェクトブラウザを開く。
詳しいことはヘルプに出てる。
ファイルが存在するかどうかはFileSyetemObjectオブジェクトの
FileExistsメソッドでどうぞ。
VBからWSH呼び出すのってなんか気分悪い。俺だけ?
727デフォルトの名無しさん:04/05/08 01:36
check boxのコントロール配列で、check(1), check(2),check(3),check(4)
とあって、チェックされている数を数えたいんですが、例えばcheck(1),check(2)
と2つだけチェックされていれば2と返すような関数などあるのでしょうか?
>>727
そんなFunctionあるかなー?
漏れならシンプルにループでカウントするけど。
>>727
そういう発想(関数)をするとVBやってる奴はやっぱOOもわかんない厨房ばっかだ、
って言われても否定しづらくなるから止めれ。
730かみや ◆QkRJTXcpFI :04/05/08 07:08
VB6.0 PenU333 で、

当方、4月から前の業者の作ったプログラムを受け取り、前の仕様書もなしでVB6.0にて開発しています。
途中まではハングアップもせずに、導火線の火花さえも、ありませんでした。。。。
ところが!!!!!!納期直前、打ち合わせ直前になって!!!!
開発環境下で、ステップアップで実行初めても、すぐにハングアップしてしまいます。。。
いちおうDoEventsを盛り込んでも、ステップを終了してもハングアップして
VBが落ちてしまいます。。。打ち合わせ直前でこうなりやがって焦ってます(>_<)
考えられるトラップはどこでしょう?

今、自分なりに考えたのですが、全モジュールにOption Explicit
してて、Dim文がズラーっと並びまくってます・・・これって、逆効果ですよね???
むかーし1から作ってたときなんか、宣言がある一定の数を超えたとき
ハングアップした記憶があります。。。
ほかには何か、テクニックがありますでしょうか?

玄人サマ、アドバイスお願いします!!!!
> 考えられるトラップはどこでしょう?
あんたのプログラミングレベルが低いから。
書いてあるコードの意味。なんにも分かってないでしょ。
>>730
むしろプログラム自体より環境に問題がありそう
他のプログラムはちゃんと動く?
他のソフトやレジストリだとかDLLだとか
VBやプログラムを動かなくする要素は沢山あるから

動かないならまずVB、関連のランタイム、OSその他もろもろを戻す
問題ないならおかしくなる直前の段階までコードを戻す
戻したら書き換えた部分を詳しく検証
出来ないなら受け取った場所から一からやり直し
733かみや ◆QkRJTXcpFI :04/05/08 11:04
>>730
どんぴしゃだ・・・
確かに、少しおかしくなった後すぐに再起動して、
立ち上がったらすぐに何かのアプリケーションをアンインストールしたんだとおもう。
そのときに、何かでっかいやつを消して、DLLを消してしまったんだとおもう。。。
んー、
とゆうことは、VB6.0を、入れ直し。すれば元に戻る可能性が出てきますな!
むしろこれで開始当初から悩んでいた
行 782: クラス MSDBGrid.DBGrid(コントロール dbgStress) はロードされていません。
とかのコントロールエラーも解消されそうだ!!!
しかし、もう打ち合わせには間に合わない・・・
極力のことはやる。だが、しかし、
>>731
よ、たぶんキミはマでもSEでもないただの学生だろう。実際にそう思う。
ソフト屋、ハード屋目指すにせよ、かみやのような考えをもつような奴にはなるな・・・
決して
「奇 跡 が 起 こ る プ レ ゼ ン 1 時 間 前  時 間 が 止 ま る」
などと現実逃避するような奴にはなるな!
なんか香ばしい人が現れましたな。
本人はネタのつもりなんだろうけど、ネタ師としても(もちろん、PGとしては推して知るべし...)
才能なさそうだからあんまり相手にしないほうがいいと思うがどうだろう。
ネタっていうか、なんだろね
GW明けで、思わず会社辞めてしまった新人って感じがするけど
たかがVBで熱くなるなよ、
HSPに毛が生えたようなもんだろ。
737デフォルトの名無しさん:04/05/08 16:00
 質問で申し訳ありません。

OSは「WindowsXP Personal Edition」です。
「RasDial」でRASの接続を行い、
「RasHangUp」でRASの切断を行う処理を行っております。
プログラム起動をして初回の接続は問題無く動作し、
切断する事も出来ます。
ですが、続けて同じRASに接続しようとした場合
エラーコード「668」(接続を終了しました。)
が返されてしまい、接続する事が出来ません。
Wind98SEでは正常に動作しておりました。
この現象について何かご存知の方はいらっしゃいますでしょうか?
738デフォルトの名無しさん:04/05/08 18:07
スレ違いでした。申し訳ありません。
>>725
「関数」を作るなら、For Each ... Nextで数えるようにすれば
Indexに欠番があっても使えるからそうするように。
引数はObject型にしてCheck(x)ならCheckを渡し、戻り値で
チェックされた個数を返すようにする、というのが一例。
Public Function GetCheckedCheckBoxCount(ByVal CheckBoxes as Object) As Long
  ...
  For Each C In CheckBoxes
  ...
みたいな。
引数を増やして「チェックしていない数」「グレーの数」を取れるように
するのもありだ。
740デフォルトの名無しさん:04/05/08 20:01
コントロールからイベントを受け取るために、クラスモジュール内にWithEvents句を使って
オブジェクト変数を宣言しています。
そのコントロールが存在するフォームと、WithEventsを使ってイベントを監視しているクラスの
両方に同じイベントプロシージャがある場合、どういう順番でイベントが発生するかという点は
何によって決まるのでしょうか?

ちなみに、両方のイベントプロシージャにブレイクポイントを置いて調べてみましたが、あるとき
はフォームのイベントが先に走り、またあるときはクラスの方のイベントが先に走ります。
>>740
たぶん、登録した順だと思うけど仕様としては定まっていないと思う。
COMの仕様としては定まっているのかな?
だとしたらその仕様のとおりだろうけど、VBのイベントプロシージャが
COMの仕様で実現されていると定まっていないような。

悩みすぎ?w

コントロールの配列ってFor Each 使えなかった気がする。
VBって変な制限多すぎだよ。

743740:04/05/08 22:19
>741
どもです。
私の方もぐぐったりして調べてみましたが、やはり発生順は不定という結論に落ち着きそうです。
とりあえず今回は、フォームとクラスのイベント両方に同じコード書くというベタな方法で回避しますた。
回避って何を回避したんですか?
使えるよ。
あやふやな知識で書き込むなよ。

ただし、配列と言う割には UBound() と LBound() が使えない。
激しくガイシュツだが「コントロールの配列」と
「コントロール配列」は違うよ。

こんなことも知らん奴に限って口調が尊大なのはなぜだろう。
747740:04/05/08 22:48
>744
イベントの発生順に依存する処理を書いてしまったがために発生した不具合を、です。
言葉足らずスマソ
>>764
おおそういうことか。
それはスマンかったな。

しかし、コントロールの配列でも For Each は使えるよ。
ただ変数の型が Variant でないとダメと言われてしまうから、「変な制限」というのには同意するよ。
FileSystemObjectのメソッドが、ノートン先生に不正なスクリプト扱いされたんだが、いったいどうすればよいの?
文句はノートン先生の産み親にどうぞ
>>732
ランタイムだけでなく、

DB系なら、Jetのバージョン、MDACのバージョン、独自に使用している
コンポーネント、dll、iniファイル 等々、それこそきりがない。

DB系は特にこれに注意したいところだ。
For Each...Nextって、In... のところには
IUnknownインターフェースを持ったオブジェクト型の変数を返すメソッドを
持ったコレクションを指定するということになってるんじゃないっけ?
だから自作コレクションクラスではFunction NewEnum() As IUnknown
だっけ?こんなのを作るとFor Each...Next対応になるし。
コントロール配列は実態はコレクションだから対応しているんだろう。
For Each...Nextで配列変数を扱うときはIUnknownを返すメソッドが
ないから、カウンタ変数(?)の側をVariantにすることでエラーに
ならないようにしている・・・ということだと理解してるんですが。
違うっけ?なんか最後の説明があやふやだな。
753デフォルトの名無しさん:04/05/09 08:39
>>730
マシンスペックからするとOSはWIN98?
それならリソースに制限があるので常駐ソフトがおおければ
常駐ソフトの使用状況でハングするよ。特にlistboxを多く使
っていない?

atokも悪さをするから要注意だね。
atokが悪さというのは体験したことが無いのだが、どんなことをするのだ?具体的に聞きたい
>>754
割り込みをかけまくったりメモリを喰いまくったり。
というのをDOS時代には経験した気がするけどWindowsでは気にしたことはない。
こうやってヘッポコPGに言い訳の理由を与えてくれるMSって慈愛に満ちてるよな。
ま、現実にはMSのXXのせい、とか言ってる奴の9割方は単に自分の無能を(その自覚もなしに)
責任転嫁してるだけなんだが。
MDIちっくで、常時表示の窓についてはフロートできたりドッキングできたりする
インターフェースってあるじゃないですか。
VB6自体みたいな、コードのウィンドウとフォームのウィンドウはMDIっぽく処理できて、
イミディエイトとかプロジェクトエクスプローラとかプロパティウィンドウは、
ドラッグしてフロートにしたり、画面のハシにドラッグしてドッキングできたりするじゃないですか。
そんな感じのインターフェースを自作のソフトで使いたいんですが、
どうしていいのか、どう調べていいのかわかりません。
そもそも可能なのかもわかりません。
教えてください。
758デフォルトの名無しさん:04/05/10 12:02
>>754
あんた阿波徳島の人だね。あまりかっかせずにね?

特定のバージョンatokがONの状態でフォントを変更した時にハング
する事がある。
VB6ではないがoffice2000で終了時にかならずエラーに
なる(これは、自動文章作成ツールをキャンセルすれば解消
するが。。。)

>755
win98(ME)以下は残念ながら16ビットをベースにしたOS
なので、リソースにDOS時代の制限があるよ何なら、常駐ソフト
をいくつか常駐させた状態でコンボボックス辺りを数張ってコンボ
ボックスデータをadditemしてごらん、見事に動かなくなるよ、、、
>>754
おお、2chに阿波徳島の人いるのか?
うちのかーちゃんが「家」の家計簿パックのファンだぞ。3年も愛用してV3にVerUpもしたぞ。
入力がとっても楽だそうだ。ラベル印刷もいいな。(ごめんAtokは使ってないけど。)
データをExcelに書き出すADDIN作ってくれ。税金対策で独自に年集計やりたいんだそうだ。
>>758
特定のバージョンのってあんたなあ
atok=悪さをするというような書き方するなよ
一度でもバグのあったソフトは悪さをするから注意しろだと?ふざけてるな
しかも内容がVBと関係ないし。たちのわるいクレーマーのようだな
>>758
755は"DOS時代のATOK"について話しているような
>>762
理想的です。
なんか難しそうですががんばってみます。
ありがとうございました。
>>763
すまんです。旧バージョンのアドレス書いちまった。↓が最新版。
ttp://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=46061&lngWId=1
>>764
TabDockでサイト内検索して、そっちの最新版を落としましたので大丈夫です。
わざわざどうも。
766デフォルトの名無しさん:04/05/11 12:03
On Error Goto Err_Syori

Do


Next_Syori:

Loop

Exit sub
Err_Syori:

Goto Next_Syori
End sub

このように複数回エラー処理を行いたいのですが、
2回目の実行時エラーからはエラー処理に飛ばずに実行時エラーが出てしまいます。
この方式だと複数回のエラー処理は出来ないのですか?
>766
質問する前に、MSDNくらい見てください。
>>766
errorからの復帰はgotoではなくresumeを使う。
769デフォルトの名無しさん:04/05/11 13:17
>>767
エラー処理ルーチンがアクティブになっている間 (エラーの発生と Resume、Exit Sub、Exit Function、
または Exit Property ステートメントの間) は、カレント プロシージャのエラー処理ルーチンはエラーを処理できません。

この辺が原因ですか・・・?
つまりResume、Exit Sub、Exit Functionまたは Exit Propertyがくるまでは
エラー処理ルーチンはアクティブなままなので
上記ソースでは2回目は実行時エラーになってしまうということでしょうか。
770デフォルトの名無しさん:04/05/11 13:27
>>768
ResumeもしくはResume Nextを使うと
エラーの起こった行もしくはエラー発生行の次の行に
処理が移ってしまいますよね?

それがしたくないのでGotoを使ったのですが
どうやらマズイみたいですね。
(DB登録処理でSQL文が失敗したデータは無視して、
次のデータ処理に移るというプログラムを作りたかったのです)

エラーが起こる処理前にOn Error Resume Nextをしておいて
その後にErr.Number<>0だったらエラー処理行に飛ばすようにします。
まてまて。
Goto Next_Syori
じゃなく
Resume Next_Syori
772766:04/05/11 13:52
>>771
Σ(゜д゜|||)ハッ
そうだよ、それがあったんだ・・・すっかり忘れていた

もれドキュソすぎだな
みなさんごめんなさい
逝くわ・・・(´・ω:;.:...
773デフォルトの名無しさん:04/05/11 14:07
スライダーのつまみって、2つ以上に増やせないですか?
2つのつまみの間の数値を読み取ったりしたいんですが....
さらに4つのつまみで、それぞれのつまみの間の数値を読み取ったりなどできないでしょか?
上司か誰か前からいる人が書いたコードで
設計上の問題があるのですが
言ったほうがいいでしょうか?言わないほうがいいでしょうか?
>>771
もまえ>>768か?
やさしいな・・・このスレで人間に出会えるなんて

>>774
そんな質問すんじゃねえっ
776774:04/05/11 17:47
>>775
ごめんなさい。
777775:04/05/11 19:38
>>774
なんでだっ、なんであやまるんだっ
これじゃあ、俺が悪者みたいじゃないか
畜生、俺だってこんな人間になろうとしてなったわけじゃないんだああ




えっと、こっからどうして俺がこんな人間になったかって話になるんですけど
ちょっと長くなるけどいいですか?
SP5時代にコンパイルし、ディストリビューションウィザードを使ってランタイムごと配布したアプリケーションを、
VB6が入っていないマシンにインストールしました。

その後SP6でコンパイルしたバージョンアップしたexeを、そのマシンのインストールした場所に
上書きコピーをすると、それは動作しなくなりますか?
導入先にVB6ランタイムが既に入ってて、それ以外の外部ファイル依存してなけりゃ動くんじゃない?
っていうか、試してみたほうが早いかと。
780デフォルトの名無しさん:04/05/11 20:10
2つのバイト配列があって、たとえば
dim a() as byte
dim b() as byte
ってあって、
a,bそれぞれ50byteのデータが入っているとして、
そこでaの末尾にbをくっつけて、
aが100byteのバイト配列になるような処理を書きたいんですが、どうするといいですか。

ReDim Preserveでbのぶんだけaのサイズ拡張して、
ループ回して一つ一つ代入していったら、一応できたんで、まぁこれでも良いかとも思うんですが、
もっといい方法はありますか?
>>780
CopyMemoryっていうAPI使え。
782780:04/05/11 20:21
>>781
ども。
なんかよく使い方わかりませんが、ぐぐるさんに色々質問しながらやってみます。
>>780
>>781の通りCopyMemoryが速くて良いと思うけど、
だいぶ機械よりの処理するから諸刃の剣。
たいして速度を求めないならループによる代入で良いと思う。
VBを実行できるフリーソフトでイイのありませんか?
>>783
関数化すりゃええやん
昔々作ったゲームで、MIDIを鳴らすのに"mciSendString"を使ってます。
が、何故かWindowsXPではOpenする時に5秒程度のWaitが発生してしまいます。

CompileしたのはVB4.0とかなり古いのが原因なのかとも思っていますが、
別にこの辺りにVersionなんて関係あるのかと疑問。
同じ構文でもVCなら問題なく動きますし。

もし何かご存知の方がいらっしゃいましたら、御教授下さいませ。

ちなみに、APIの宣言は以下の通りです。

Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
 (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
 ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
>>786
MIDI音源の関係と予想。
>>780
A = CStr(A) & CStr(B) でできるべ。

Byte型の配列は文字列と相互変換できるから。
まあでも>>788はメモリ食いで遅いかも知れないけどな・・・・
>>788
それって中身が文字データじゃなくても問題ないの?
>>790
今しがた、配列Aに0〜49、配列Bに50〜99入れて確認。
合体後の配列Aは0〜99まで100要素ちゃんと出来てます。
この場合、CStr(A)は文字コード&H0001, &H0203・・・しめて25文字50バイト
の文字列になる。(UNICODE)
それと同様にCStr(B)も文字列化していて、それらの
連結結果がバイト型配列に代入されるとき、また0, 1, 2・・・98, 99に
分解されるという仕組み。
792デフォルトの名無しさん:04/05/11 23:34
>>788
CStrなんか使っちゃダメでしょう。
使うならMidB$とかLeftB$みたいにBが付いた文字列関数を使わなければ。

それから、バイト型の動的配列でないと文字列は代入できないはず。
>>792
794デフォルトの名無しさん:04/05/12 08:11
>>793
文字コードにかかわる問題を少しでも知ってる人なら
CStrなんて動作が明示的に定義されてない関数は怖くて使えない。

「動的」配列云々の話はやってみれば猿でもわかる。
795774:04/05/12 11:22
>>794
恐れちゃだめだよ
勇気を出して立ち向かわなきゃ
答えになってないよーな気がする
797きっき:04/05/12 14:18
VBAの用語を検索できる辞書サイトをしりたいのですがどこかいいのありませんか?
798デフォルトの名無しさん:04/05/12 14:44
質問。 
VBでテトリスとか作れるのですか? ヒントください。
自分かなり初心者です。
799774:04/05/12 17:46
>>798
作れるのか、作れないのか
それのヒントかぁ

答えを言わずにヒントを出すのは難しいなぁ
800VBer:04/05/12 17:51
802デフォルトの名無しさん:04/05/12 19:30
クラスモジュールでタイマーを使いたいのですが
やり方を教えてください
803デフォルトの名無しさん:04/05/12 20:01
>>802
クラスにタイマーオブジェクト渡したらどうなん?
質問します。
コネクションは以下ようになっていますが
Dim db As New Connection
db.CursorLocation = adUseClient
'接続は90秒
db.CommandTimeout = 90
db.Open Connectionstring
タイムアウトでエラーが出ます。
インターネットVPNでSQLSERVERに接続しているのですがなぜタイムエラーが出るのでしょう
90秒もあれば十分なような気がするのですが・・・・
ちなみにネットワークはPINGを打つと
500msから300msかかります
SQLSERVER側の接続?
805よくわからんでレス:04/05/12 20:16
>>804
なんか根本的にだめだろ。

タイムアウトしてるのはコードがおかしいからです。

直接関係ないけどコネクションなのに変数名がdbとかもきもいし。
勉強して出直してこいって感じだ。

ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_s11.htm

でも読め。そしてMSDNも読め。
>>805
いや、これでいけましたが。
個人的にはネッワークの混み具合かなともおもっているのですが
普通の拠点はPING打つと50msぐらいだったのですが
ある地点だけは300msもかかるのでそう思ってます。
他はOKだったのですが・・・
VPNは重いのかな?
がんばってみます。
VPNでVBをデータベースをアクセスしている人ています?
807よくわからんでレス:04/05/12 20:37
>>806
ふーん。
じゃあシステムDSNつくって普通に接続できるかチェックしてみれば?
>>ふーん。
>>じゃあシステムDSNつくって普通に接続できるかチェックしてみれば?
普通には接続できるのです。
原因がわからなくて。timout=0(無限)にするといけるのかな?
今度やっえみようかなとおもっています。
809デフォルトの名無しさん:04/05/12 21:02
VB6で作られたBASP21のSocket機能を使ってHTTP通信を行うOCXがあります。
これをHTTPのみではなくHTTPSも使えるようにバージョンアップしようとし
ていますが、なにか良いライブラリはありませんでしょうか?

BASP21 Proはライセンス(再配布)の問題でダメで、winsockはWin98上
でのSSL通信に対応していないいないっぽいのダメでした。
#過去ログが読めないみたいなのでチェックしてません。すいません。
#いちおうググっては見ましたがめぼしいものが見つからないので・・・
810よくわからんでレス:04/05/12 21:05
>>808
あんなー。お前はっきりいっとくけどな。
timeoutを変更するのもいいけどな。
接続に1分半以上かかるようなシステムまともに使用できるわけねーだろ。

今度やってみようかと思いますじゃねーよ。

システムDSNで接続できるってことはコードがおかしいんだろ。
コネクションストリングあたりがあやしんじゃねーか?
811よくわからんでレス:04/05/12 21:09
>>809
WinInet APIでできそうだけどな。本当にぐぐったか?嘘つくな。
>>804=806
先ずは、ぐだぐだ言う前に>805を読んで検討しなおせ。
そのサイトの他のページにはチューニングと言うか、
パフォーマンスを確保する為にコーディング上で注意すべき
事項も明確にされている。

>'接続は90秒
>db.CommandTimeout = 90
CommandTimeOutはクエリ等を実行した時に終了待ちを
する時間。
接続のタイムアウトは、ConnectionTimeOut。
デフォルトは15秒。

接続できない事とは直接関係無いとは思うが、わざわざ
クライアントカーソルを使っているのは明確に目的や理由が
あるんでしょうか?
813809:04/05/12 21:19
811>>
>>timeoutを変更するのもいいけどな。
>>接続に1分半以上かかるようなシステムまともに使用できるわけねーだろ。
確かにそうですね。とりあえず原因を知りたいのです。
思うにPING打って500msもかかるようなネット環境ではできないのでと。
そのあたりを知りたいのです。80msなら十分使用になるのですが。(実際にデータも更新も参照も)
VBのDCOM辺りがかなり接続負荷になってるのでしょうか?
ともかくコネクションストリングをもう一度見てみます

815809:04/05/12 21:28
>>813
書き込みミスです。

>>811
WinInetでSocketレベルでのSSL通信はできますか?

現在Socket使ってHTTPサーバと直接お話しするような作りに
なっていてかつ工数・金額をかけない、という制約から見送
りました。
816よくわからんでレス:04/05/12 21:32
>>814
おまえさ。何歳で何年目よ?

まず
ネットワークの状態が悪い
のと
SQLServerに接続できない

のは切り離して考えたらどうなんだ?
システムDSN経由だと正常に接続できるんだろ?

まず、何歳で何年目なのか言え。
817よくわからんでレス:04/05/12 21:35
>>815
一生できますか?できますか?って言ってろ。
818809:04/05/12 21:37
>>817
調べた上では「できない」が結論ですが
816>>
ADOでOLEDBを使っているのです。
ODBCは使っていません。書き方が悪かったかも知りませんが
ネットワークの状態に負荷があるとき(今回は10拠点の位置で調べる)
接続できないのです。(タイムアウトを多くしても)
どこかで負荷がかかってるとしか思えないのです。
820デフォルトの名無しさん:04/05/12 21:41
>>818
ふーん。
じゃあできないんじゃないの?
愚愚ったかとか、MSDNってやつがうるさいな
仮にそれで解決するとして
じゃあ解決しなかったことが、このスレの住人に答えられるのかね(w
答えることなんて残ってねえと思うぞ
素直に素人に物教える技術はないって言ってりゃいいものを
特に816おまえだ
822よくわからんでレス:04/05/12 21:48
>>819
お前の話聞いてるとうんこもらしそうだな。

ようするにVBと関係ないわけだな。
823809:04/05/12 21:48
>>820
SSL時のみwininetを使う方向でマネージャと調整することにしますわ。
回答ありがとうございました。
824よくわからんでレス:04/05/12 21:50
>>821
俺が現場にいればこんなとこで聞かないで自分でなんとか解決するけどな。
>>>>821
>>俺が現場にいればこんなとこで聞かないで自分でなんとか解決するけどな。
おまえにできるとは誰も思ってないよ!
スレから消えろ。
821>>
パチパチ
>>822
ConnectionTimeoutとCommandTimeoutを取り違えている事を
理解していないようだから進展しそうも無いな。

ネットワークが遅いなら、非同期処理とか遅いなりのやり方は
あるが。
もう時代は.NETだって
829よくわからんでレス:04/05/12 21:58
まぁ、てんぱってるときは他人にあたりたくもなるんだろうけど。

おまえの技術力が低いからてんぱってるんだって事を忘れたら駄目だな。(笑)
830デフォルトの名無しさん:04/05/12 22:00
ネットワークとかデータベースとかやったことない分野なのでわからないんだけど、
いまの話題は「お前人にそんなこと聞くか?」っていうような低レベルな話なの?
Form1からForm2の……っていう例の質問と同じぐらいの?

傍目にはなんかそうは思えないんだが。
あまりに馬鹿な質問とかならともかく、感情的になるぐらいなら最初から
レスしなきゃいいと思うんだけどどんなもんかね。
>>830
やったことない分野なのにそうは思えないの?

すごいね。エスパーになれるよ!
>>おまえの技術力が低いからてんぱってるんだって事を忘れたら駄目だな。(笑)
おまえが高いとも思えんが。
悔しければ役に立ちそうな意見でも言ってから吠えれば。
今ならお前なら吠えてるだけ。消えろ。
>>832
煽ってないで勉強したら?
829
必死になって自分に正当性があるっていいたいのはわかるが
俺は821だが809じゃないぞ
なんつうかスレの質問の仕方が悪いのは仕方ないとしても
うんことか何歳で何年目とか
おまえの人間性の汚さに腹が立ってるだけ
会社でなんかいやなことでもあったの ぼ く?

>>煽ってないで勉強したら?
オマエモナー
836デフォルトの名無しさん:04/05/12 22:18
とんでもない長い文字列を格納してそのバイト数(文字数)を調べたいのですが
どうすればいいでしょうか。
例えば10の2000乗は何ケタになるか調べたいのですが・・。
log を使え
838デフォルトの名無しさん:04/05/12 22:28
>>836
質問が不明瞭。いったい何をしたいんだ?
839デフォルトの名無しさん:04/05/12 22:30
>>838
例えば10の2000乗は何ケタになるか調べたいです。
10^2000を変数にいれてLENとかで調べようとしたら
どんな変数つかってもオーバーフローしてしまうので・・・。
>>836
2001 け
841デフォルトの名無しさん:04/05/12 22:36
>>839
高校は出てるんだよね?数学的帰納法知ってる?
10^0 = 1, 10^1 = 10, 10^2 = 100, ......

∴10^2000は2001桁でしょ?

ていうかこれと文字列のバイト数がどう繋がるのか意味不明なんだけど。。
842デフォルトの名無しさん:04/05/12 22:37
たとえが悪すぎる。
843デフォルトの名無しさん:04/05/12 22:40
>>841
う〜〜ん。
その解答自体が知りたいのでなく
とんでもなく長い(例えば200桁)を越える文字列の長さを測る
ロジックの組み方が知りたいのです。
そんな文字列を格納してもオーバーフローしないデータ型とか存在しないですか?
844デフォルトの名無しさん:04/05/12 22:41
>>842
絶対こう言い出す奴がいると思った。
基数が10だからたとえが悪いってか?
別に10じゃなくても同じこと。
845デフォルトの名無しさん:04/05/12 22:44
>>843
おちょくってんの?新手の釣りですか?
200桁の文字列って何?200文字?
200文字どころか10Gバイトまで扱えるはずだけど。
846デフォルトの名無しさん:04/05/12 22:45
>>845
それにはどんなデータ型使えばいいのですか?
おちょくってないですよ。
普通に知りたいです。
>>843
Len関数なら 2^31文字まで数えてくれるんじゃないかな?

もしかしたらこういったものが欲しいのか?
http://www.google.com/search?num=50&lr=lang_ja&q=%E5%A4%9A%E5%80%8D%E9%95%B7
>>843
文字数か?ならLen
>>845

>>839
>どんな変数つかってもオーバーフローしてしまうので・・・。

と言っているからやっぱり200桁じゃないの
850デフォルトの名無しさん:04/05/12 22:46
>>844
ハァ?
ところでさ

MidBとMidB$の違いは
Nullが使えるか使えないのってことで良いかな?
基数は10で固定だと思うんだが・・・
そうだろ?>>846
853デフォルトの名無しさん:04/05/12 22:51
>>848
いやだからLENで調べるために変数で格納したいのですが
どんなデータ型なあ2000桁を越える文字列を格納できるかな・・・と。
>>845によると10Gを越える文字列を格納できるデータ型が存在するとの事ですが。。。。
854デフォルトの名無しさん:04/05/12 22:52
>>852
いえ。たまたま10って言っただけです。
とにかく「長い文字列を入れてもオーバーフローしない文字列はありますか?」
質問はそれだけにしぼります。
855デフォルトの名無しさん:04/05/12 22:52
数値と数字列の区別が付いていないのが問題。
>>847が求めているものだろうが、なぜかスルー。
>>853
2000桁ってどんな文字列なの?
想像もできん
857デフォルトの名無しさん:04/05/12 22:53
「オーバーフローしないデータ型」でした。
すません。
858デフォルトの名無しさん:04/05/12 22:53
>>853
つまらん釣りは止めれ。
釣りでないなら2000桁の文字列という意味不明な言葉をきちっと説明しろ。
859デフォルトの名無しさん:04/05/12 22:54
>>855
とにかく格納したいんですよ。
いちど格納できさえすればLENで測る時だけ文字列に置き換えればいいとおもうので。
>>847は確かに便利ですが今知りたいのは計算結果でなく「VB6でのロジックの組み方」なので。
>>854
じゃあ場合によって答えの数字列が2進数になっても10進数になっても20進数になってもいいのか?
861デフォルトの名無しさん:04/05/12 22:55
>>858
ではデータ型一覧みたいなものが見たいです。
いまマニュアルが手元になくて・・・。
まずは今までに試した型を言って見ろ。
>>861

Stringじゃ駄目なのか?

例えば
"abcdefghij" は1桁、10桁どっち?
1桁だったら俺は知らん
864デフォルトの名無しさん:04/05/12 22:59
格納するのは文字列でも数でもいいです。
とにかく格納したいんで。
別に2進とかでもかまいません。
とにかく長い文字列(数)を格納できるデータ型を何かしりませんか?
そんなでかい数値だか文字列だか知らんが何に使うんだ?
866デフォルトの名無しさん:04/05/12 23:00
>>862
>>863
STRING、VARIANT、LONGで余裕でオーバーフローしてしまったのでここにきました。
ここまで文章書くことにはなるとは・・・。
データ型一覧でググった方がはやかったかな。
867デフォルトの名無しさん:04/05/12 23:01
>>864
格納はStringでできるが。
>>866
じゃぁもう来なくて良いよ。意味わかんないし。
869デフォルトの名無しさん:04/05/12 23:03
>ここまで文章書くことにはなるとは・・・。
殺意を覚える文章だな。たとえ釣りだとしても。
870デフォルトの名無しさん:04/05/12 23:03
求めているのはロジックなんだか型なんだかわからんな。
>>866
釣りだったのか・・・
大漁だったところで今日はお開きということに
873デフォルトの名無しさん:04/05/12 23:04
Rubyでもやってろよ。
特になにもしなくても多倍長演算ができるぞ。
ぬるぽ
875デフォルトの名無しさん:04/05/12 23:04
>>870
最初はロジックまできけたらな。と思ってここにきましたがもういいです。
さっきまでググってたら色々出てきたので
データ型を自分で調べて自分で考えますわ。ども。
876よくわからんでレス:04/05/12 23:06
>>866
お前のは文章とはいわんよ。

ただの単語の羅列だ。断片的で読み手を混乱させるだけだ。
ところでさ

LeftBとLeftB$の違いは
Nullが使えるのと使えないってことでいいのかな?
878デフォルトの名無しさん:04/05/12 23:09
マニュアル嫁
>>878
サンクス
君のおかげで解決したYO
880デフォルトの名無しさん:04/05/12 23:20
Nullが使える、ってのは意味不明な気がするが、
$なしの関数はStringでなくVariant返すってことだったはず。
>>880
そうだったのか
マジで知らなかったよ・・・

DBがらみがメインだから$なしはNULLが使えるって間違った覚えかたしてた。

>>878
さっきは強がっちゃった。ごめん。
Dim s As String
s = 10^2000
って書いてオーバーフローしたんだろうなぁ。
883デフォルトの名無しさん:04/05/13 00:07
>>882
ようするに言語仕様から勉強しなおせってことだな。
Dim s As String
s = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
s& = "1"


?vartype(trim(""))
?vartype(trim$(""))
両方ともvbstringが返ってくるよ!
887デフォルトの名無しさん:04/05/13 00:12
VBでWinsnmpを利用してプログラムを組めるようなことを聞きました。

どうでしょう・・・。
可能で有れば、明日にでも押入れにしまってあるCD一式を
PCにしインストールしようと思ってるのですが。
Dim i As String
Dim s As String
s = "1"
for i = 1 to 2000
  s &= "1"
next i
>>888
 ぶー 実行できません
890デフォルトの名無しさん:04/05/13 00:29
>>886
当たり前じゃん。文字列入ったVariant型の変数を引数に渡すと、
VarTypeはVariant型を現す値を返すとでも?
VB6.0での質問です。

FORMの上にTabをおき、更にそのTabの上にいくつかのボタンをおきます。
その状態でボタンからボタンへの移動をキーボードの方向キーを使って行うのですが、
その際にキーボードからのイベントはどのオブジェクトで取得できますか?
今日は一体ど〜なっとんの?笑っちゃったよ。
恐らく今年の新卒あたりがGW空けに研修終わって実務に入らされて、
んでテンパっちゃったと見たが、どうよ?
俺は資格試験用にCOBOLしか勉強してなかったやつが大学の課題やろうとしてるのかと思った。

>>891
コマンドボタンはKeyDown拾えないっぽいなー。
サブクラス化するしかないかも?
894デフォルトの名無しさん:04/05/13 01:11
>>891,893
へ?フォームのKeyPreviewをTrueにしとくのではダメなのか?
そういうことではないのかな?
みんなそういう過程を通ってきたのさ(w
とは言ったものの
VBで質問ってことはやっぱ実務なのかねえ?
ホビーユーザーだとむしろドトネットの方行くだろうし・・・
>>894
コマンドボタン上にフォーカスがあるときに方向キーを押すと、キーイベントが発生する前に
フォーカスが移っちゃう。あと、イベントも取得できない(他のキーは大丈夫)。
良い案があればいいんだけど、俺はどうやっていいかわからない。
識者の助言プリーズ。
897デフォルトの名無しさん:04/05/13 01:50
>>896
君の言っていることはWinの当たり前の仕様のように思える。
何が問題なのかわからんのだが。
ちなみにTabStripとコマンドボタンのフォーカスの移動は
キーボードからはカーソルキーではなくTabキーで行うのがWinの仕様だ。
業務アプリにWindowsの仕様じゃない要求があることが分からない人多いんだよな。
ゲームにWindowsの仕様じゃない要求があることは簡単に分かるだろうに。
TABでフォーカス移動するゲーム。そんなものやりたくない。
俺が今まで一番(゚Д゚)ハァ?と思った要求は、
メニューを全て一つずつ空間開けてくれと言われた事。
VBメニューエディタ的に表現するとこんな感じ。
ファイル
・・・新規作成
・・・ 
・・・開く
・・・ 
・・・上書き保存

理由は「くっついていたら間違って選ぶ事があるから」だそうだ。
画面のプロパティでメニューのフォントサイズを大きくするようにしたらと言ったら、
「他のソフトまで大きくなるから困る」ってなんやねんそれ。
愚痴スマソ。
慣れるまで抵抗あるけどな。
なんで?って思うような要求もあるね。得に工場で使われるようなやつ。
お客さんは必要だから金出して仕事頼んでんだろーなーって思うように
なってからは気楽だけどね。
お客様は神様です。
901よくわからんでレス:04/05/13 05:44
>>898
activecontrolとform.keydownを組み合わせてなんとかすれ。

っつーかこんなものもわかんねーくせに煽るな。
おまえが>>891じゃないならすまん。
902よくわからんでレス:04/05/13 05:58
あー、あとlostfocusとgotfocusな。
>>899
俺は逆にそんなんで一番(゚Д゚)ハァ?って感じる感覚の方が分からない。
一応その要求には合理性があるじゃん。

昔からPC触ってるヲタクな人には理解できないかもしれないが
大半の人はキーボードでよりむしろマウスでメニュー操作するわけで、
その場合確かに項目の選択ミスというのは起こりがち。

(゚Д゚)ハァ?ってそりゃ要するにあんたが人を見下したいだけなんとちゃうのかと。
「ユーザーの要求がしっかり理解できる俺スゲェ!!そんな事が分からない899より俺のほうがスゲェ!!」と、
人を見下している903。
905デフォルトの名無しさん:04/05/13 08:57
さらにそんな>>903を馬鹿に出来る俺って・・・
以下略
906デフォルトの名無しさん:04/05/13 09:56
>>905
僕なんか全人類に対してはぁ?って思ってるよ。


? len(String(2000,"9"))
2000
907デフォルトの名無しさん:04/05/13 10:16
VB6.0
ソースの編集中に Homeキーを 押すと その行の左端にある文字の左横に
カーソルが移ります。
1列目に カーソルを移したい場合は、Homeを もう一度 押すしかないのですが、
それは 面倒なので 一回で 1列目に 移動させる方法は ないでしょうか?
>>907
行の先頭が1列目じゃないのかw
909デフォルトの名無しさん:04/05/13 11:15
vb6使用のプログラマです。今印刷プログラムを手がけているのですが、
どうしてもわからない部分がでたので質問します。印刷にはVS-VIEWを
使っていてactionプロパティに[全ページ印刷(11)]の値を渡して印刷
しています。この状態で印刷途中にストップする方法はないでしょうか
?killdocを使ってみたのですが全く効かず、ダイアログを表示してキ
ャンセルボタンを押そうにもすぐにダイアログが消えてしまい間に合わ
ない事が多いです。何か解決策を知ってる方がいたら、教えてください
>>903
俺は逆に「他のソフトではメニューの操作を間違わないのか?」なんて思っちゃったりするへたれですが。
>>907
インデントを行わず全ての行を一列目から記述する。

あるいはHomeキーを二回押下する操作をシミュレートさせるソフトを探すか作る。
912デフォルトの名無しさん:04/05/13 13:29
>>890
$なしの文字列関数がVariantを返すってどういうことですか?
913デフォルトの名無しさん:04/05/13 14:21
>>912
どういうことですか?ってどういうことですか?
914デフォルトの名無しさん:04/05/13 14:36
VB6
ComboBoxなんですが、入力不可で選択だけにして、○か×かを選択できる
ようにしたいのですが、どうすればいいのでしょうか?
○と× 以外に 何もないのが 選択されてしまうのですが、何もない表示を
とりたいのです(表示しないようにしたい)
915よくわからんでレス:04/05/13 14:43
>>914
どうせ何回言ってもMSDNなんてよみゃしないんだろうから
親切に教えてやるよ。

コンボボックスのプロパティーを全部いじれ。
そうしたら道がひらける。
916デフォルトの名無しさん:04/05/13 14:44
MSDNって インストールしないと見れないんだよなぁ。
古いマシンだからMSDNをインストールする余地がない。
残念!
917デフォルトの名無しさん:04/05/13 14:46
>>914
あ、すまん、あと初期値入れれ。○か×どっちかコードで選択しれ。
918よくわからんでレス:04/05/13 14:47
>>916
じゃあお前はあれか。
なんかわかんないことがあるたびここで聞くわけか。

くっだらねーしつもんを。
MSDNオンライン
920よくわからんでレス:04/05/13 14:55
>>919
>>914みたいな質問するやつがMSDNオンラインで目当てのドキュメントを
探せるわけがない。
921デフォルトの名無しさん:04/05/13 15:00
で、結果的には、わからないんだな(w
922よくわからんでレス:04/05/13 15:02
>>921
は?しっかり答えてますが。
ようするに昨日から馬鹿丸出しの質問してるやつはMSDNも読まずに
書き込んでるってわけだな。

そういうことにしよう。
924デフォルトの名無しさん:04/05/13 15:14
グリッドの上にラベルを表示させるには、どうしたらいいのでしょうか?
925デフォルトの名無しさん:04/05/13 15:16
>>924
グリッドの上にラベルって書けばいいじゃん。
926デフォルトの名無しさん:04/05/13 15:17
グリッドの上にラベルを貼りつけたいんです。
927デフォルトの名無しさん:04/05/13 15:20
>>926
100円ショップに売ってるよ。
928デフォルトの名無しさん:04/05/13 15:25
コントロールのラベルです。
929デフォルトの名無しさん:04/05/13 15:28
>>926
できません。
なんでラベル?テキストボックじゃダメなのか?
931デフォルトの名無しさん:04/05/13 17:56
Formは Unload しても インスタンスは 消えないのでしょうか?
>>931
Formが使われなくなったときインスタンスは消える。
LoadとはFormsコレクションへ参照を追加すること。

FormをLoad(暗黙的なLoadも含む)しなければUnloadする必要はなく
Formへの参照がなくなった時点でインスタンスは消える。

FormをLoadしていれば、Unloadしてなおかつ、Formへの参照が
なくなった時点でインスタンスは消える。
933デフォルトの名無しさん:04/05/13 20:58
1フォーム1万行のコードをどうにかするためのツールなどありますか?

1行が
Call ctlXXXXXXXXX.setXXXXXXXX(Format(Mid(mXXXXXXXX(mintXXXXXXXXXX - 1).XXXXXXX, X, X), "XXX")
& Format(Right(mXXXXXXXX(mintXXXXXXXXXX - 1).XXXXXXX, X), "XXXX") & tmpXXXXXX & "X"
, XXXXXXX.GetXXXXXXXXXXXXXX(mXXXXXXXX(mintXXXXXXXXXX - 1).XXX, mXXXXXXXX(mintXXXXXXXXXX - 1).XXXXXX
, mXXXXXXXX(mintXXXXXXXXXX - 1).XX) & StrConv(Format(mXXXXXXXX(mintXXXXXXXXXXXX - 1).XXXXXX(mintXXXXXXXXXX - X)
, "XX"), vbWide), mXXXXXXXX(mintXXXXXXXXXX - 1).XXXXXXXX(mintXXXXXXXXXX - X))
のようなコードです。
またおまえか!
>933
消せばどうにかできるぞ
>>933
昨日の釣りの人?今日も意味不明な文章ご苦労なこった。

しかしそんだけタイプするの結構大変だと思うんだが、そこまでして
するほど釣りって楽しいのかねえ。
937デフォルトの名無しさん:04/05/14 00:05
>>913
Variant型を返していることを実感できる方法は無いですか?
>>937
Trim(Null)
はエラーにならないけど

Trim$(Null)
はエラーになるって事じゃ実感できないかな
939Not 937:04/05/14 03:35
>>938

No.938
「Trim$(Null)はエラーになるがTrim(Null)はエラーにならない」

Variant型に詳しい>>938はこう語る。
(略)
実際にやってみた。....
確かにTrim$(Null)はエラーになるがTrim(Null)はエラーにならなかった。

へぇへぇへぇへぇ....
知らんかった。
>>938
trim(null)の返り値はstring型じゃないんですね。
実感できましたm(_ _)m
941931:04/05/14 09:51
unloadしたFormを 再度Showしてもテキストボックスなどunloadする前の
データが入ってるんですけど、新規には ならないのでしょうか?
新規インスタンスを作ればいいんでねーの?
943デフォルトの名無しさん:04/05/14 10:19
>>941
根本的におかしいんじゃねーの?
>>934
ごめんなさい
VB6.0 + VSSで、開発をされてある方はいらっしゃいませんか?

管理者の運用形態等について質問です。

@VSSDBと、実ファイルの関係性について。
(VSSからtxtファイル等をCHECKOUTして編集してCHECKINしても実ファイルには、
反映されないが、VBを通して編集すると実ファイルに反映されるのは何故か?等)

A @を踏まえて、txtファイル、docファイル等は、どうやって実ファイルに反映させれば良いのか?

A’VSSを導入したら、基本的にVSSを通さないと、ファイルの取得、更新は出来ないのか?

Bリリース用の最新ソース一覧は、実ファイルフォルダをコピーして構わないのか?
それとも、毎回、別フォルダに最新を全部取得しないといけないのか?

C2箇所(2サーバー)でのファイル管理は可能か?
(毎朝、本サーバからVSSアーカイブを取り副サーバに反映させ、
夜、副サーバの差分実ファイルを本サーバに戻す。等)

DVSSアーカイブの復元は上書きで良いのか?
それとも一旦全削除後に復元を行わないと行けないのか?

EVSSアーカイブがあれば、実ファイルフォルダの中身が飛んでも復元出来るのか?
それとも別に、実ファイルもバックアップを行う必要があるのか?

@〜Cは、ある程度、検索したのですが見つかりませんでした。
有意義なサイトもご存知でしたら紹介して下さい。
宜しくお願い致します。
>>941
unloadすればコントロールは初期化されるはずだけど。
もしかして、unloadじゃなくてhideしてない?
>>945
「実ファイル」ってなんですか?
948デフォルトの名無しさん:04/05/14 12:41
聞く一方で感謝の言葉とかどうやって解決したかとかいうレスは一切ないんだな。

おもしろいことに。
>941
>931の質問に対する回答には目を通したのか?
UnloadしてもTerminateイベントが発生しない状況(他から参照されている)なら、インスタンスは残っている。
950931:04/05/14 13:03
Terminateイベントって どうすれば発生するのでしょうか?

あと unload me とかしても me.hide と同じなんでしょうか。
自分のForm内に次へなどのボタンを 設置して それが押されたら
新しいFormを開いて、元のを閉じたいのですが・・・。
( ゚Д゚)ポカーン
952デフォルトの名無しさん:04/05/14 13:19
>>950
おまえ、MSDNインストールしてないだろ。
>>950
>Terminateイベントって どうすれば発生するのでしょうか?
unloadされ、参照されなくなった時点で自動的に発生する。

>あと unload me とかしても me.hide と同じなんでしょうか。
unloadとhideは違う。hideは表示されなくなるだけでloadされたまま残る。

>自分のForm内に次へなどのボタンを 設置して それが押されたら
>新しいFormを開いて、元のを閉じたいのですが・・・。

新しいフォームをしてshowして、unload meする。
954945:04/05/14 13:35
実ファイルってのは、実際のプロジェクトファイルや、フォーム・標準モジュールファイルや、
テキストファイル等の事です。

VSSDBてのは、Visual SourceSafeの仮想DBの事です。

宜しくお願いします。
955デフォルトの名無しさん:04/05/14 13:41
ここの人たちってMSDNに書かれてないことを質問されても答えられるのね。
>945
>1)と2)
「何処の」実ファイルに「何が」反映されないのか?
あるクライアント上のテキストファイルをメモ帳で開いて編集保存しても実ファイルが更新されないって事か?

>2'
そりゃそうだ。

>3)
複数人で開発しているなら、全員がチェックイン後に新しいフォルダに最新を取得してビルドしたほうが安全だろ。

>4)
出来るかどうかわからんが、何でそんなめんどくさい事を?

>5) 6)
VSSアーカイブって何?

って、やってみりゃわかる事ばっかだな・・・
957デフォルトの名無しさん:04/05/14 14:22
>>931程度の質問ならMSDNで解決できるぐらいの内容なので
MSDNインストールしなさい。不正コピーならしね。

そもそもVBだけなら20MBも容量つかわないだろ。
958947:04/05/14 14:27
>>954
VSSには「実際のファイル」なんて概念はないよ。
あるのはリポジトリとそこから取り出したコピーだけ。

シャドウフォルダを設定すれば自動で最新のコピーが作成されるから、
それで代用することになると思う。
959947:04/05/14 14:43
>>958
× リポジトリ
○ データーベース

リポジトリはCVSの呼び方だった。
960デフォルトの名無しさん:04/05/14 15:01
ADODBで
アクセスのテーブルAをレコードセットAでひらいて
テーブルBをレコードセットBでひらいてAからBへ流すのと

アクセスのテーブルAをレコードセットAでひらいて
テーブルBにconnection.execute()のinsertでAからBへ流すのと

どっちが早いというのはありますか?ケースバイケースですか?


961945:04/05/14 15:04
>>956さん。
ありがとうございます。

>>947さん。
ありがとうございます。
もう少し具体例をあげて質問してよりでしょうか?

Fある程度、開発が進んだプロジェクトフォルダにVSSを導入した時点で、
元々のファイル管理運用形態(実ファイルをサーバーから落としたり上げたりする)は、
出来なくなるって事で良いのでしょうか?

F’それまでは、実ファイルがあったって事ですよね。

GVSSでの管理をやめた場合は、元の実ファイルフォルダで、元々のファイル管理運用形態に戻す事は、
できないのでしょうか?

G’VSSでの管理をやめた場合は、最後に最新ファイルの取得で全ファイルを取得し、
それに対して、元々のファイル管理運用形態(実ファイルをサーバーから落としたり上げたりする)を
しなければならないのでしょうか?

Hシャドウフォルダは、知っています。ここは、リアルタイム更新なのですね。
ですが、ここのファイルをコピーして編集して再度、VSS環境に戻すのは、マニュアルにありますが、
面倒ですよね。

半分質問では、ないですが宜しくお願いします。
962947:04/05/14 15:36
>>961
>7
出来ないわけじゃないですが、手間が増えるだけでメリットがありません。

>8'
そういうことになります。

>9
ええ、シャドウフォルダは編集には向きません。
編集が必要なら、通常通りチェックアウトして作業する方がいいでしょう。
963945:04/05/14 16:17
>>947さん。
大変有難う御座いました。
おかげさまで運用形態が見えてきた気がします。

営業所から本社へのアクセスが増えて重くなるような気がして、
固定観念で現状通り、ソースを本社サーバと営業所サーバで管理しようと思いましがた、
作業フォルダの内容を毎回書き換える訳ではないので、必要ない気がしてきました。

ほんとに、有難う御座いました。
964945:04/05/14 16:50
VSSに関して再度、質問です。最初にこれを聞くべきでした。

IVSSDBを作成した時点で、作成元になった実ファイルとは、全然関連性はなくなるのでしょうか?

>>964
なくなります。
966デフォルトの名無しさん:04/05/14 17:17
MSFlexGridでスクロールした状態の場合、表示の先頭レコード(Row)が
いくつになるか知るにはどうしたらいいのでしょうか?
967デフォルトの名無しさん:04/05/14 17:21
ハードディスク上にHTMLファイルを置いて、それを開くとリファやIPなどを表示する
VBスクリプトを作りたいのですが、どのように記述すればいいのでしょうか?
>>967
まずFTPの使い方から覚えてください。
MSDNでMSFlexGridのプロパティ全部見ろ
970945:04/05/14 17:53
>>965さん。
ありがとうございました。
971960:04/05/14 17:54
レコードセット→レコードセットと
レコードセット→コマンドで
速度を調べたんだけど1ぽうでは同じはやさで
もういっぽうではレコードセット→コマンドのほうが
10倍はやかった
Addnew-updateというコードは基本的に遅い?
>>971
レコードセットにaddnewするとinsertした後、selectでその行を再取得してた気がする。
そのせいじゃないかな。
副問い合わせでINSERTする方が速い予感。
974デフォルトの名無しさん:04/05/14 20:09
単純にレコードセットの処理が遅いだけだと思う。
975974:04/05/14 20:11
非常に言葉足らずだった。

>>972の言うようにaddnew後にselectで再取得しているというのも
(真偽は知りませんが)あると思うが。再取得がなくても単純にaddnew
が遅い。というか根本的にレコードセットの処理が遅い。
976960:04/05/14 20:18
レコードセットにaddnewするとinsertした後、selectでその行を再取得してた気

え!まじですか?
でも考えてみればそうですね....つじつまが合うし

>副問い合わせでINSERTする方が速い予感。
もう少しヒントくれませんか....
>>975
AddNewとInsertの速さは使ってるDBによって違った気がする

AccessはAddNewが早いけど
SQL ServerはInsertの方が早かったと思う。
実際比べたこと無いけどね。

スピードを気にするなら↓これで
insert into TABLE_A select * from TABLE_B
978960:04/05/14 21:38
>>977
ありがd!
>AccessはAddNewが早いけど
>SQL ServerはInsertの方が早かったと思う。
実験してみます

>insert into TABLE_A select * from TABLE_B
確かにこれははやそうです。項目になんらかの加工を加えるとなると
鬼のようなSQLの長さになりそうですね......
979デフォルトの名無しさん:04/05/14 23:31
>>977
へー。どちらもVBからの操作での比較?

ちなみにどこでその情報を?
>>979
なんかでググると検証したページが出てきたはず。たしか。
>>955
質問スレっていうのは、答える方は答えるのが好きで、くだらない質問でも
それをネタに答え方の練習をしてるんだよ。つまり自己満足。
善意や厚意は二の次だ。

>>931よ・・・
とりあえずMSDNインストールすれ。
したら「Visual Basic フォームの有効期間」で検索してそのページ嫁。
あと「Formクラスのカスタマイズ」も。

Terminateイベントというのは、フォームでもクラスでもその他でも、
遅くともプログラムが終了するまでにはどこかで発生する。
ブレークポイント張って見張ってみりゃわかるだろ。
ブレークに引っかからなかった?それは主に以下の2通りの場合だ。
・エラーで落ちた
・Endで終わった
なに?>>931はMSDNはコピーしてこなかった?
しょうがないな。
ttp://www.microsoft.com/japan/developer/library/VBCon98/vbconlifecycleofvisualbasicforms.htm
答え方の練習ねぇ
どっちかってと部下をリストラさせる練習してるやつの方が多いんじゃねぇ?
こんな上司の下で働けないって思わせる(w

984デフォルトの名無しさん:04/05/15 13:28
>>983
自分で考えた痕跡すら感じられないあふぉな質問する新人に
対する適当な解答ばかりですが。
985977:04/05/15 16:06
>>979
ttp://homepage2.nifty.com/inform/vbdb/addnew.htm

おれが実際に調べたわけじゃないけどね
>>984
まともな質問にまともに回答するのは自分も勉強になって
いいんだけどね。。。
987デフォルトの名無しさん:04/05/16 10:54
>>986
まともな質問にはまともに回答してますが。
988デフォルトの名無しさん
調べればすぐわかる質問は、まともな質問ではないらしい(w