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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
ここは Visual Basic 〜6.0 の質問スレです。
質問者は使用しているOS、VBのバージョン、サービスパック
何がしたくでどうしたけどどう困っているのかを明確に書きましょう。

○関連スレッド
VB.NETは別物なので、基本的に質問はこちらへ
VB.NET質問スレ (Part6)
http://pc5.2ch.net/test/read.cgi/tech/1088812165/

API関連の質問はこちらへ
Win32API質問箱 Build20
http://pc5.2ch.net/test/read.cgi/tech/1088140233/

MSDN Online Japan ホーム
http://www.microsoft.com/japan/msdn/default.asp
Visual Studio 6.0 Service Pack 6 正式リリース
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
API 技術関連 - VBでのWin32APIのサンプル
http://homepage1.nifty.com/MADIA/vb/VBKANREN.htm
Google
http://www.google.co.jp/
※「まず自分で調べる」を身につけよう。

○VB以外の質問スレ
C++相談室 part33
http://pc5.2ch.net/test/read.cgi/tech/1090180012/
C++Builder相談室 Part10
http://pc5.2ch.net/test/read.cgi/tech/1089299158/
★初心者にVisual C++を教えるスレ★ Part13
http://pc5.2ch.net/test/read.cgi/tech/1089011118/
2○過去スレログ:04/07/20 10:21
5デフォルトの名無しさん:04/07/20 11:04
5
6デフォルトの名無しさん:04/07/20 11:10
>>1

おつかれ〜
7デフォルトの名無しさん:04/07/20 11:41
質問です。

ディストリビューションウィザードについてですが、
インストール時のメッセージを変える事は出来ますか?

まず最初に、
セットアップ:コピーしています。しばらくお待ちください
というウィンドウが出ますが
これについては Setup.lst の SetupTitle と SetupText を変更すればいいというのが分かったのですが、

"インストールを開始します"とか"セットアップ完了しました"などのメッセージは変更出来ないのでしょうか?
ディストリビューションウィザードではダメ?
WEBカメラを操作するソフトを作りたいのですが
参考になるサイトありませんか?
1分間隔で画像を保存したいのですが
>>7
迷わず他のインストーラーに移りましょう
10名無し募集中。。。:04/07/20 11:58
>>7
SETUP1.VBP 開いて改造しろ
又は SETUP1.EXE のリソースを弄れ
>>7
VBインストールしたフォルダ\Wizards\PDWizard\Setup1
の中のSETUP1.RCとかにそれらしき文字列を見える。
オレはやったことないけど、書き換えてみれ。
127:04/07/20 12:23
>>9
その方がいいのかなぁ・・・。

>>10>>11
これいじりたくないなぁ・・・。

他のインストーラでもうちょっと簡単に出来ないかどうか調べてみます。
13デフォルトの名無しさん:04/07/20 12:46
>>12
いじりたくないというか、VBの付属インストーラーをカスタマイズするにはいじるしかない。
コピーして改造が基本。
ヘルプにも若干説明が書かれているはず。
>>7
http://dobon.net/vb/installer/
じゃあ、全部試してレポートよろしく!
>>8
Google DirectShow カメラ VB
>7
弄りゃいいじゃん。文字列だけなんだから何も起こりゃしないって。
>>7
VB98\Wizards\PDWizard\Setup1

にあるSETUP1.VBPを開いてみた。
setup1.resにメッセージのリソース入ってるやん。

ここ弄るだけでええやん。
>>15
ほほー
19デフォルトの名無しさん:04/07/20 16:12
前スレ997の
>Dim i, j as Integer
>って書いたらiはIntegerになってくれると、
>勘違いして書いてた次期がオレにあるのは内緒だ。

ぐぐってみたら、結構こう思っている人がいるね。
上の書き方で.NETだとIntegerになってくれるみたいだけど。
20デフォルトの名無しさん:04/07/20 17:05
>>19
Functionとかモジュールの引数とかは どうなるの?

Sub nantoka(i, j as Integer)
の場合 i は?
i はVariant型になるね。
>>20
ついでに言うとi、jともにByRefとなる。
23デフォルトの名無しさん:04/07/20 17:57
ByRefって何だ?
24デフォルトの名無しさん:04/07/20 17:58
変数をすべてVariant型にした場合の弊害を教えてください。
>>23
ぐぐれば、いくらでも出てくる。
Variant型にすると内容に関わらず変数1個で最小12バイト消費すること。
DLL等の外部関数を使う場合に、特定の型へのポインタを使用する(ByRef で指定されている)場合にVariant型は使えない。(関数がVariant型に対応している場合は別)
ByValで指定されている場合も型変換する必要がある。
>>24
コンパイル時に型チェックしてくれない
VBでのstring型について、ご教授していただきたいのですが、

以下のプログラムで、文字列strにasciiコードiの文字を結合
そして、文字列からasciiコードを取得してそれを表示したいと考えています。
結果は、text1の129-159,224-252であるはずの所が全て0になっています。
文字列型での中で制御文字等の扱いはどのようになっているのでしょうか?
加えて、MSCommでのBinaryデータの取り扱いに関しても教えて頂けないでしょうか?

Private Sub Command1_Click()
Dim i As Byte
Dim chars(256) As Byte
Dim str As String

str = "" '初期化
For i = 0 To 254
str = str & Chr(i) '文字列にASCIIコードiの文字を結合
Next i

For i = 0 To 254
chars(i) = Asc(Mid(str, i + 1)) '上の文字列をASCIIコードにして配列に表示
Next i

For i = 0 To 254
Text1.Text = Text1.Text & chars(i) & " " 'ASCIIコードを表示する
Next i
End Sub
>>28
たしか、MSComm.Output って Variant型だったから、

Dim ucaData() As Byte
Dim vPointer As Variant

' ここで送信データを ucaData() に格納。

vPointer = ucaData
MSComm.Output = vPointer

でいけたはず。うろおぼえでスマン。
30デフォルトの名無しさん:04/07/20 20:51
質問です。(VB6)
コントロール配列はloadコマンドで新しいコントロールが追加できますが、
例えばpic1(0)というPictureBoxの中にpic2(0)というPictureBoxがある場合、
pic1(1)はloadコマンドで追加できましたが、pic2(1)をpic1(1)の中に
追加する方法がわかりません。どなたか教えてください。
>29
なるほど、MSCommのinput,outputは
variant型でしたか。
Cのイメージで、char*だと思っていました(汗

さらに質問なのですが、
Variant型変数(実際は文字列の様に扱っている)に対して
それを、Byte型にキャスト(?)するにはどのようにすればいいのでしょうか?
以下のコードでは
chars(i) = Mid(str, i + 1, 1)
で、型が一致しないというエラーが帰ってくるし、ならばと思い
chars(i) = Asc(Mid(str, i + 1, 1))
とすると、28で書いたように、129-159,224-252の区間が0と表示されてしまいます。

Dim i As Byte
Dim chars(256) As Byte
Dim str As Variant

For i = 0 To 250
str = str & Chr(i)
Next i
Text1.Text = str

For i = 0 To 250
chars(i) = Mid(str, i + 1)
Next i

For i = 0 To 250
Text2.Text = Text2.Text & chars(i)
Next i
32デフォルトの名無しさん:04/07/20 21:27

フォーカスをロストさせるには、どうすればいいのでしょうか?
よろしくお願いします。
>>30
Set pic2(1).Container = pic1(1)
>>31
&H81 〜 &H9F および &HE0 〜 &HFC のASCIIデータは String型 にすると強制的に別のコードに置き換えられます。
ここらのコードを使いたい場合は Byte(Integerでも可) の配列のみにし、String を使うのは諦めましょう。
>>31
MSCommのOutputは29のとおり。
Inputにかんしては、InputModeプロパティをcomInputModeBinaryにすれば、
バイナリデータとして読める。それをバイト配列に格納すればいい。
>34>35
お返事ありがとうございます。
VBは慣れてないので、どこまで自動でやってくれるのか
理解できてなく。ちょっと戸惑っている所です。

シリアルについてですが、MSCommで受けるのは
InputMode=comInputModeBinary
inputlen=1 (これも必要なのかな?)
にして、リングバッファに格納するという方法で言い訳ですかね?

どうも、ありがとうございました。
>>8
Webブラウザーコントロールつかえ
38デフォルトの名無しさん:04/07/21 09:43
なぜ
Dim i, j as Integer
のような書き方をしてもエラーにならないのでしょうか?

正式には
Dim i as Integer, j as Integer
と書けばいいのでしょうか?
39デフォルトの名無しさん:04/07/21 09:47
バリアント型というのは、マイクロソフトがユーザーが何も考えなくてもいいように
ということで作られた型なのでしょうか?
バリアント型を使うと大変重たくなるから
止めた方が良いと言う話は過去のものなのでしょうか?
Variant型の最大の欠点は、他人が見た場合に変数宣言だけではそれが何を意味するのか判らない事だ。
42デフォルトの名無しさん:04/07/21 10:09
変数宣言でわかる変数は i だけだ(w
43デフォルトの名無しさん:04/07/21 10:09
>>33
ありがとうございます。思っていることができました。
44デフォルトの名無しさん:04/07/21 10:17
>>32
他のコントロールにセットフォーカスしてやればいい。
45デフォルトの名無しさん:04/07/21 10:20
Formに貼りつけてあるコントロールのタブ順の一覧を表示するには
どうしたらいいのでしょうか?
>>45
Formのタイトルバーで右クリックして「タブオーダー」を選ぶ
47デフォルトの名無しさん:04/07/21 10:30
>>46
当方VB6ですが、タブオーダーってのが 表示されません。
48デフォルトの名無しさん:04/07/21 10:48
MSFlexGridのEnabled を Falseにしても、セルの文字が
薄くなりません。
どうしたら EnabledtがFalseというのが 見た目でわかるようにできるのでしょうか?
49デフォルトの名無しさん:04/07/21 11:55
質問です。

ここで聞くのが適切かどうかはわかりませんが…
簡単に言うと2つの郵便番号を元に大まかな距離が知りたいのです。
ので、郵便番号を元に緯度経度がわかるようなデータベースか
そういったコンポーネントを知ってる方がいらさいましたら
お教えください。
ふぇちゅいん様に相談しる!
53デフォルトの名無しさん:04/07/21 13:10
22歳会社員です。今までディスプレイの解像度を800×600に設定してプログラム
を作成していたのですが、近々1024×768に設定しなおして今までのプログラムも
統一することになりました。今までに作ってきたformのコントロールを1024×768
に対応させて大きさを変えるようなミラクルな方法ってありますでしょうか?
>>53
WindowState=最大化 じゃ嫌なの?
>>53

For Each ctl In Controls
  With ctl
    .Move .Left*1.28, .Top*1.28, .Width*1.28, .Height*1.28
  End With
Next ctl
>>53
横着しない
57デフォルトの名無しさん:04/07/21 13:33
>>51-52
うーまさにコレです、ありがとうございます。
58デフォルトの名無しさん:04/07/21 13:42
>>54>>55
レスありがとう。やってみます。

>>56
これをやるのは自分じゃないんです、社長です。社長が担当したんですが一つ一つ
やっているのが大変そうだったので、何かないかと調べていたんです。
>49
業務に使うんだったら大口の郵便番号はしょっちゅう変わるし、
最近市町村の合併が多いから注意されたし。

>53
年齢と職業は関係ない(w
社長サンに「横着するな」といっときな。
確かに>55の方法で一応は何とかなるが、見た目がダサいことこの上ない。
つーか解像度が小さくなるんなら手直しも必要だろうが、
今回の場合、なぜ手直ししなきゃならんのかサッパリ分からんのだが。
60デフォルトの名無しさん:04/07/21 13:53
>>58
そんなことは ヒマそうな22歳会社員にやらせろ!
61デフォルトの名無しさん:04/07/21 14:04
>>59
変更する理由なんですが、数年前に800×600の解像度でつくったプログラムを納め
た顧客が今回新しく作り直して欲しいと言って来てくれたらしく、これを機会にこ
の顧客用のプログラムの解像度も1024×768に合わせようと思ったみたいです。

>>60
ヒマではないんですが、、、何か方法があれば教えてあげたいと思っただけです。
62デフォルトの名無しさん:04/07/21 15:36
>>61

それって新しく作りなおすことになるのか?
なんか詐欺のような気がするが・・・(w
63デフォルトの名無しさん:04/07/21 15:45
>>62
違います、言葉の使い方がおかしかったです。前のものにいろいろ上乗せするんで
す、だから前のものも当然使えるようにと
えー、だからデフォルトで最大化設定じゃ駄目なのかYO
>>64
それだとコントロールが全部左上に寄ってる感じになる。
テキストボックスとか小さいままだし。
>>65
そんなもん、Resize内でなんとかせい
安易に最大化っていうのもちょっと違うような。
アプリ起動時に解像度を800x600に変更、アプリ終了時に元に戻す
>>66
まあそうなんだけど、けっこう面倒。
53が探してるのはコンバートソフトだと思う。
対象がプロパティだけなら作れそうな気がするんだけど、
コードでいじってるとややこしい。
70デフォルトの名無しさん:04/07/21 16:45
>>55
俺もコレに近いことやったことあるけど、
後で修正が入ったときがキツいんだよね。
実行時にじゃなくて、デザイナでこれと同じことする方法があったら
いいのになーといつも思う。
71デフォルトの名無しさん:04/07/21 16:52
タイトルバーに ○の中に aとか bとか cなどの入った文字を出すことができますでしようか?

今 OSが 98なんですが 2000になったら、ユニコードとかでできるのでしょうか?
>>71
そんなことするな。
>>71
VB.NETならUniocdeにある文字は表示できるんだが、(a)の囲い文字って
Unicodeにあるのか?(1)とかなら表示したぞ
VB.NET+WinXP
74デフォルトの名無しさん:04/07/21 17:29
>>73
○のaは ユニコード 0x24d0 です。

>>72
できるのかできないのか 聞いてるだけです。

>>74
そんなことするな。
7673:04/07/21 17:40
>>74
表示したよ。
77デフォルトの名無しさん:04/07/21 17:44
>>73
ここは VB6までのスレなので VB6で表示できればいいのですが・・・。

.NETは、使ったことがありません。
>>74
やれるかやれないかならやれる。
7959:04/07/22 01:39
>53
理由は分かった。
ただなぁ、他の人も書いてるけどcode内でやるとどこかに無理が出そうだぞ。
もうお客さんに「やる」って言っちゃったんなら泣き泣き徹夜でデザイン修正するしかないと思うが、
(社長がな。藻前は手伝ってやれよ(w)
過去に作った物だし使えない訳ではないんだから、現状のままでいいんじゃねーの?

つーか調子こいちゃったっつーか口から出ちゃったっつーか、
そのサイズ変更の分はロハ仕事のスメルがプンプンするんだが、どうよ?(w
>>53
全部作り直すか、>>68の方法が良いと思う。
>>53
ロジックいじらなくてコントロールを再配置するだけなんだから
すげえ楽じゃん。
これが嫌な奴はプログラマやめるべき。
社長の仕事を奪うようなことするな
>>79
画面内のコントロールとかをてきとーなあんばいでリサイズしてくれるコントロール(?)はあるけど。
グレープシティーかどっか見てみれば?
5万ぐらいだから、あんた1日から2日分だ。
何画面あるかしらんがそろそろ終わってるんじゃないか?
85デフォルトの名無しさん:04/07/22 09:17
22歳だから 一週間分ぐらいじゃないの?(w
コントロールのサイズだけじゃなくて
ボタンの中のフォントとかのサイズを
いちいち変えてたら文字通り日が暮れそう
やっぱり >>68 か、逆にシステムフォントを
大きい文字に変えるとかじゃないかな。
8753:04/07/22 09:28
みなさんたくさんのレスありがとうございました。ただ急ぎの作業ではないので
まだ手をつけていません。別な事を任されたので、この作業は社長にがんばって
もらうしかないです。
ShellExecuteでhttp://〜をopenするときにクッキーも渡したい場合
どのようにすればよいでしょうか?
>>88
それはVBの問題じゃないよな。
>>89
そういえばそうですね。
でも知ってたら教えてちょ
まずはクッキーの仕組みのお勉強からだろ
>>91
仕組みは知ってますよ。
printf("Set-Cookie:") で吐いてgetenv("HTTP_COOKIE")でゲットします。
ShellExecuteは関連付けに従って実行するだけなんだから、
普通にOSのこまんどぷろんぷととかから逝ければ逝けるよ。

で、クッキーの仕組みをしってるなら、それを実現できるかは判断付くだろ?
>>93
やっぱりできないっすね。
そしたらcreateobjectでIE起動した場合はcookieは制御できますかねー
95デフォルトの名無しさん:04/07/22 14:08
少数点以下に数値あるものだけ小数点を表示させたいのですが
どうすればいいですか?

format(a,"#.#")

にしたら.は無条件に出てしまうので・・・
そうか。わかったぞ。
まずクッキーファイルから値とりだして
ソケットで送って帰ってきた値から判断すればいいんだな。
>>95
小数点以下があるか判断してフォーマットする関数を自作する。
>>96
つうかさ、クッキー保管の実装なんてブラウザ側の問題じゃないの?
そこまでやるなら、ブラウザもどきを作れば?
9995:04/07/22 14:16
>97
それもそうでしたね。
できますた。ありがとん(・∀・)。
100デフォルトの名無しさん:04/07/22 14:19
100ゲチョ-
VB5をWindowsXP(Pro)で使ってます。
実行ファイルを作るたびに、少しずつサイズが大きくなっていくんですけど、なんででしょう。

無論、ソースは変更していない状態での話です。
だいたい800K前後の実行ファイルで、3Kずつぐらい増えていきます。
で、「完全コンパイル後に開始」を行なったあとで実行ファイルを作ると、
サイズがしぼみます。
102デフォルトの名無しさん:04/07/22 17:35
どうして OptionButton や CheckBox には Labelにある AutoSizw というのが
ないのでしょうか?
>>102
なんでだろう?
MsgBox "hoge", vbSystemModal
でメッセージを出すと親ウィンドウのタイマーコントロールが
止まってしまいます。
自分でフォームをモードレスで開くしかないでしょうか?
105デフォルトの名無しさん:04/07/22 18:00
>>104
その通り
>>104
VBはシングルスレッドですから。
>>106
こういうときスレッド欲しいよねー
ネタなのかな。
EXEにすればちゃんと動くだろ?IDEだと止まるが。
>>108
以外に知らない人多いよ。
前スレでこれが原因のバグに質問者が気づかなくてなかなか
解決しなかったな、たしか。
どっちなのよ?
>>110
自分で試せよ
試すと止まるよ
VB6.0を使っているんですが、
配列の宣言時に初期値を設定したいのですがどのように書けばよいのでしょうか?
出来ません
まじですか・・・?_| ̄|○
初期値が98個あってもすべて1回1回入れていかないとできないんですかね?
宣言と同時とは言えないが・・・

Dim a As Variant
a = Array(1, 2, 3, 4)
>>116
おー、ありがとうございます。
今日VB始めたばっかりで全然わからんかったですよ。
精進します。
>>113-117
他にもっといい方法あったら教えてください
初期値が98個って何?
>>119
そのくらいあったら外部ファイルから読み込んだ方が良さそうですね
同じやつだったり規則的なやつならループさせて一つづつ入れてけ。
122113:04/07/22 23:45
まったくのランダムな数で決まった数なんですよ。
ちなみに118は僕じゃないです。
だったらfor文で回しながらランダムで生成していけばいいんでないの?
そーゆー意味じゃなく?
>>123
決まった数ってランダムで生成できるの?
125113:04/07/22 23:58
書き方がおかしかったです_| ̄|○
98個の値は決まった値なんですが、値に規則性はまったくないです。
>>125
たった98個ならコードで書けばいいじゃん。
ためらう理由がわからない。
98は結構面倒だろ・・・
やっぱ外部ファイルから読む込むのが楽だろうね
面倒かな? ソースとして目ざわりだとは思うけど。
データが二度と変わらないのならソース埋め込みでも許せるが、
そっくり別パターンと入れ替えたいとかいう用途なら絶対外部ファイル。
>113
ん〜とだな、VBの勉強も大事だがtext editorを使いこなす事や、
Excelで演算子や関数を利用して思う様にtextを作成する術を
覚えておくといいかもしれん。
さすれば98個の値が1万個になろうが、またそれをどうしてもcode内に記述せねばならんとしても、
1万個の値が何らかの形にデータ化されているなら慌てる必要は全くなくなる。
結局何に使うんだ?その98個の値。
98個と言えば確か間寛平の一発ギャグ数だったなぁ。アヘアヘ
98といえばPC-9801に決まってるじゃないか。
133虫だらけ:04/07/23 22:33
Win98は無視ですかそうですか
えっとMMOの経験値テーブルです。
1からはじまって最高レベルが99なので98個でした(;´д`)ゞ
>>134
MMOって何ですか?
136135:04/07/24 05:11
ググッたらわかりました。
>>134
あーなるほど。
つまりスライム数匹倒したら
プレーヤーのレベルが低い時はレベルが上がり、
レベルが高い時はレベルが上がらないようにしたいわけだな。
じゃぁレベルが高ければ高いほど次のレベルに上がらないように
経験値を多くすれば良い。
iでループまわして
 Exp(i)=i^2
 Exp(i)=Exp(i-1)+a 'aは定数
見たいにすればいいんでない?
>>137
既存のゲームの話だと思う。
やっぱ直接コードで書くか、外部ファイルしかないだろ。
規則性無いものを規則的に打ち込もうとするのがそもそも間違い。
113がなんで悩んでるのかわからない。
データのファイルがあれば、代入するコードを別のプログラムで生成できるし。
>>140
ちなみに 113 はなにも悩んでいない。

>>116-117
で解決済み。
>>140は激しく文盲
>>141
>>118 は?
144デフォルトの名無しさん:04/07/24 13:04
テキストボックスの文字列を「全て選択」したいのですが、
32768バイト以上になると正常な動作をしません。
オーバーフローだと思うのですが、
どなたか解決法教えていただけないでしょうか。

ちなみに、今は下のように書いてます。
text1.SelStart = 0
text1.SelLength = Len(text1.Text)

よろしくお願いします。
>>144
そもそもテキストボックスは95系では長さの制限があるわけだが。HELP参照すべし。
>>143
>>122 は?
>>140
晒し上げ
148144:04/07/24 14:41
>>145
回答ありがとうございます。

>>144で32768と表記しましたが、65536みたいです。
失礼しました。

ヘルプで見つけることはできませんでしたが、
何かで64kBと聞いたことがあります。
(64kBはWindowsのメモ帳の最大サイズだった気もしますが…)

いずれにしても、テキストボックスの長さの制限は
65536Bよりも大きいと思います。
故に、それに対応したコーディングが必要と思っております。

何かいい方法ご存知でしたらお願いいたします。
どうしてもテキストボックスを使わないといけないの?
>>148
API
使えばいいじゃん
151144:04/07/24 14:49
>>149
Windowsのメモ帳よりも多機能なメモ帳を作ろうとしております。
文字を入力するエリアとしてテキストボックスを使う必要があります。
152144:04/07/24 14:50
>>150
APIですか。
それも視野に入れて検索してみたのですが、
適当なページを見つけることができませんでしたので、
参考になりそうなURLを教えていただけませんでしょうか。
お願いいたします。
>>151
どんな機能つけるんだい?
>>151
試してないけどリッチテキストボックスを使ってみたら?
155144:04/07/24 15:12
>>153
必要な機能が思いつき次第、随時拡張という感じですので、
今は基本枠を造っている段階です。
現時点では、文字数のカウント機能を付加させようと思っております。
DoCoMoの携帯にメール送る際に必要性を感じたためです。
Wordでやらずに、わざわざ作るのは、
Wordに貼り付けたりすると、余計なデータが付加されたりし、
文章の体裁が意図しない形式になる恐れがあるためです。
この前も、改行の部分がおかしくなり、変なメールを送ってしまいました…
(たいした機能でなくてすみません…)

>>154
前述のように、リッチテキストの形式を避けたいため、
願わくば、テキストボックスを使用したいところであります。
・・・
という建前もありますが、恥ずかしながら、プログラマとして
経験が浅いため、さしあたり、テキストボックスを使おうかと…
また、追加したコンポーネントを使用すると、
VBの開発環境が無いPC等で使用すると、
別途コンポーネントを入れる必要がありそうなので…
>>155
リッチテキストボックスでもテキスト形式で保存できるよ。
157144:04/07/24 16:21
>>156
保存形式よりも、その場での処理内容のほうを問題視しております。
コピー・ペーストの際に、不要なリッチテキストの形式を
付加されると、不都合な場合があるものでして…
(Outlook等、リッチテキストに対応したメールソフトとか…)

>>154 , 156
リッチテキストボックスで、同様の方法ですべて選択
してみたところ、すべて選択することに成功しました。
リッチテキストボックスは普通のテキストボックスよりも
大きい数値を扱えるように設計されているのですね。

しかしながら、普通のテキストボックスでも
なんとかできないものかと考えてしまいます。
何かいい方法はないものでしょうか?
無駄な努力は止めた方がいい。
他の有意義なことに力を注ごう。
>>157
あ り ま せ ん 。
160144:04/07/24 16:36
>>158
それもそうですね…
いっそのこと、リッチテキストを採用して、
メモ帳ではなく、ワードパッドくらいのものでも…
(初心者にできるかどうか…)

>>159
やっぱり言われてしまいましたか。
でも、無いなら無いとはっきりした意見を聞けたので、
もう割り切ってやるしかないですね。
回答ありがとうございます。

リッチテキストボックスを使用した際に、
VBの開発環境が無いPCで動かそうとしたとき、
そのPCに、何かコンポーネントのモジュールのようなもの
(RICHTXT32.OCX)を追加する必要はあるのでしょうか?
また、それを入手/追加することは容易でしょうか?
>>160
入門書くらい買って来い。インストーラーの作り方書いてるやつもな。
標準のウイザードよりもVSIを入れるのがおすすめ。
ランタイムは他からダウンロードさせるのが今の流行
>>162
うわぁ、目の前で言われたら殴ってるかも
164144:04/07/24 16:44
>>161
VSIの話がでてくるとなると、コンパイルしたものを
コピーしただけでは動作しないようですね。

参考にします。ありがとうございました。
>>160
>>14を全部試してレポートよろしく!
>>163
変わってるね
167144:04/07/24 16:51
>>165
レポート作るのはちょっと厳しそうです…
ごめんなさい(^^;)

作成する際の資料としては有用そうです。
リンク、ありがとうございます。
168花鳥:04/07/24 17:51
すいません。また教えて下さい。

ようやくプログラムも完成し、いざディストリビューションウィザードを
使用して配布。。。と思ったのですが、、、

無難にインストールできるマシンとそうでないものがあり困ってます。

出来ない場合、エラーになるのですが、

['path not found]

とメッセージが表示されます。

開発環境はWidowsXP_pro / vb6.0です。
インストールを試みた他のマシンは全てWindowsXP_home or Pro のマシンです。
エラーになるかどうかは特に法則などないようです。
>>168
VSIにしましょう。
また、エラーの法則は全角文字のユーザとかのオチはありませんか?
http://support.microsoft.com/default.aspx?scid=kb;ja;416585
ぐぐればすぐ出てくるのにねぇ
どーしてMSはVB標準インストーラをVBで作ったんだろ
「Visual C++ は Visual C++ によって作成されました」
みたいなノリかな
「Visual Basic は Visual Basic によって作成されていません」
173デフォルトの名無しさん:04/07/26 10:04
DelphiはDelphiによって作成されています。
174デフォルトの名無しさん:04/07/26 11:10
GetDiskFreeSpaceとGetDiskFreeSpaceEXがありますが
GetDiskFreeSpaceでGetDiskFreeSpaceEXの働きをさせようと
思ったらどうすればいいでしょうか?
175花鳥:04/07/26 11:30
>>169

ありがとうございました。m(_ _)m
すいません、無知で・・・。

対象PCが全角ユーザーでした_| ̄|O
>>173
マジで?
177デフォルトの名無しさん:04/07/26 13:04
majide
>>174
GetDiskFreeSpaceでGetDiskFreeSpaceExの働きをさせられないからGetDiskFreeSpaceExができたんだろ
179デフォルトの名無しさん:04/07/26 13:17
じゃあどちらも使わずにGetDiskFreeSpaceExに変わる
方法はないの?
>>179
単に「ないの?」と聞かれたらあるよ、としか答えようがないんだが?
デバイス直接叩いて情報集めるとかね。VBでできるかどうか知らんが。

できる方法があるのにそれを使わない方法を聞きたいのなら、背景事情くらい書けや。
でないと↑のような回答しか来ないぞ。
181デフォルトの名無しさん:04/07/26 15:32
グリッドを横スクールさせた場合、左端のセルが 何列目なのか知るには
どうしたらいいのでしょうか?
何を使ってるんだよ
183デフォルトの名無しさん:04/07/26 15:58
MSFlexGrid
VB6で開発しております。

実行時エラー28
スタック領域が不足しています。

というエラーが出るのですが、対処法をご存知の方おられませんか?

MSの頁を見て、ネスト階層や再帰処理をチェックしましたが、
問題ないようです。
他にチェックする箇所があれば教えていただければ幸いです。

よろしくお願いします。
関数の引数の数多すぎないか?
もしくはでか過ぎないか。
あと、関数内で宣言されている自動変数が
でか過ぎるとか・・・
>>185

落ちる箇所は単なるサブプロシージャ内ですので、引数はありません。

そのサブプロシージャ内で
LABEL1.caption = TEXT1.text
という箇所があるのですが、必ずココで落ちます。
188185:04/07/26 16:48
185=187

追加
プロシージャ内は変数はstring型2個で
LABEL1.caption = TEXT1.text
は変数宣言の直後です。
>>188
エラーが出たとき、そのString型に入っている変数の容量は確認してみた?
>>189

容量ですか。
中身は確認しましたが、容量はどうやって確認すればよろしいのでしょうか?
中身のほうは問題なく初期化されていました。

追加情報です。
エラーが発生したあと、デバッグボタンを押し、
F5を押すと問題なく実行できます。
さらに、EXEを作って実行すると、
同じタイミングで落ちます。
Doevents
LABEL1.caption = TEXT1.text
じゃ駄目なのか
192185:04/07/26 17:36
Doeventsを加えたらそこで落ちました。
>>192
何かDLLとか使ってメモリ破壊してるんでは?
194185:04/07/26 18:09
DLLは多数使っています。
が、問題の位置まではDLLの関数は通過してないようです。


コメントに「絶対テストしてない」って書いてるの見つけちゃった(´Д`;)
>>190
「問題なく」とかいう文言がすげー気になるんだけど、
お前さん的に問題があるかないかはどうでもよくて、プログラム的に問題があるかが問題なの。
スタック不足ってことはメモリを食いつぶしてる可能性が高いわけだから、
>>189をきちんと確認したほうがいいと思うよ。
お前さんの意図通りに、1MB近い文字列入ってるとかいうパターンじゃないよね?
stringって2ギガまで入るんじゃなかったっけ?
stringの仕様と実際に自動変数用にスタックが残ってるかどうかは別
>194
そのDLLの内部にある関数が再帰だとかで
スタック使いまくりという可能性は?
可能ならDLL部分とか、怪しそうな部分を削除して動作確認するか、
問題部分だけを抜き出したテストプログラムを作るとかしたほうが良いのでは?
誰かにサポートを依頼するにしても、単純化したプログラなら問題も判り易いと思う。
いっそのこと捨てちゃえ
大々的にリファクタリングだ
LABEL1とTEXT1のChangeイベントでお互い呼び合っているとか、
そんなんじゃないの?
202デフォルトの名無しさん:04/07/26 18:59
>>189,195
エラーが発生したのは変数宣言直後です。
イミディエットでLenBで確認したところ0でした。

>>198
DLLファイルを全部移動させて、関数内でセットする値をイミディエットで設定して
該当箇所を飛ばしても同現象が発生しましたので、
DLL内は問題ないと思います。
185=202
>>202
コールスタック確認した?
たぶん何か値を変更したときにイベントが発生して、そのイベントの中から何か呼んで
ってのを繰り返してスタック食いつぶしたんだと思うよ。
再帰以外でスタック食いつぶすことなんてあんまり無いよ。やたらでかい構造体使って
出てくるかなって程度。
文字列はスタックとは別の領域に確保されるはずだから、あんまり気にしなくてもいいと思う。
たぶん。
205184:04/07/26 20:04
>>204
VBだと呼出し履歴ってやつですね。
main

[非Basicコード]

フォームロード

[非Basicコード]

OKボタンイベント

サブプロシージャ

別のサブプロシージャ   ←ここで落ちる

フォームをモーダルで開いているのでスタートのmainからずっと続いています。
この作り自体良くないですか?



上で185って書いてるのは全部184ですねm_ _m
206184:04/07/26 20:33
自己解決です。

スプレッドに列を追加していたのですが、
ソース側で数値型の列に空文字 "" をセットして初期化していました。

↓こんな感じです。
Spread1.SetText COL, i, ""

COLを追加分ずらして、ちゃんと初期化するようにしたらうまくいきました。

みなさんの意見も場所を絞り込むのに参考になりました。
ありがとうございました。

追記
これはスプレッドのバグって考えていいのかな?
スタック消費して落さないし。。。
ある箇所に特定の文字が入っている場合は弾きたいのですが

if mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" or
  mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" then.....

上記のように記述した時「abXcY」などと入ってくると素通りしてしまいます。
andとorの使い方がおかしいのは分かっているのですが、幾ら考えても分かりません。
都合でフォーマットが使えないので、1文字ずつチェックするしかない?のですが・・・・・
本当に初歩的な質問ですが、よろしくお願いします。
>>207
適用したい条件ってのがよくわからんが、
str="abXcY"の場合、その条件式はFalseになるよ。
>>207
一般的に、論理演算子は最後に処理されます。
また、And と Or だと、Andが優先されます。
従って、この場合だと、
mid(str, 3, 1) <> "X" → False
mid(str, 3, 1) <> "Y" → True
mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" → False
mid(str, 5, 1) <> "X" → True
mid(str, 5, 1) <> "Y" → False
mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" → False
ですから、演算結果はFalseになります。

対処方法としては、全部 Or にするのが楽かな。
カッコ付けた方が楽じゃない?
211デフォルトの名無しさん:04/07/26 21:43
>>207
"X"と"Y"をそれぞれ
InStr関数でチェックしていった方が楽じゃないか?
とりあえず全部ORじゃだめなの?
mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" → 常に偽

mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" → 常に偽

偽 or 偽 でこの条件式は 恒偽
>>213
あ、嘘だ。
<>と=見間違えてた。
スマソ
さすがVB房は論理演算もできないのか・・・・
VBにかぎったことでは無かろう
>>216 ただの夏厨だ。放置しとけ。
ほんとに取り出したい条件が何かはよくわからんが、現状では、

if mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" or
  mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" then
 strは"abXcY"でない
else
 strは"abXcY"である
endif

じゃないですか?
219207:04/07/26 22:04
たくさんのレスありがとうございます。

適用したい条件は「3文字目と5文字目がXかYの時は真」です。

>>209氏のレスの
>mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" → False
>mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" → False

がFalseになるのは分かるのですが、残りがどうしてそうなるのか分かりません・・・・
全部orにすると「abXcY」で真になるような。

括弧で括ると

if (mid(str, 3, 1) <> "X" or mid(str, 3, 1) <> "Y") or
  (mid(str, 5, 1) <> "X" or mid(str, 5, 1) <> "Y") then

こうなるのでしょうか

>>215
独学なので論理演算の意味が分からない・・・・・だめぽ。
220207:04/07/26 22:06
連続すみません。
分かりにくいですね。

3文字目と5文字目のどちらかにXとYが含まれている場合は真、です。
if not (mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" or
  mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y") then

こうだ
3文字目と5文字目がXかYの時は真
3文字目と5文字目のどちらかにXとYが含まれている場合は真
これらは違うはずだが?
223207:04/07/26 22:14
>>222
後者です・・・・・その通りです。

3文字目:X→真
3文字目:Y→真
5文字目:X→真
5文字目:Y→真

これで正しいはず・・・・・何が何だかil||li _| ̄|○ il||li
依頼者が要求仕様を分かってないんじゃ
たのまれても作れる訳ないよ

3文字目と5文字目のどちらかにXとYが含まれている場合は真--------
if mid(str, 3, 1) = "X" or mid(str, 3, 1) = "Y" or
  mid(str, 5, 1) = "X" or mid(str, 5, 1) = "Y") then


3文字目と5文字目がXかYの時は真--------

if not (mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" or
  mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y") then

あるいは、

if (mid(str, 3, 1) = "X" or mid(str, 3, 1) = "Y") and
  (mid(str, 5, 1) = "X" or mid(str, 5, 1) = "Y") then
226207:04/07/26 22:46
>>224
仰る通りで・・・・情けない限りです。

>>225を参考に少し頭を冷やして考えてみたいと思います。
板汚し本当に失礼しました。
気にしないでまた来てね
228デフォルトの名無しさん:04/07/27 10:43
ツールバーにある 上下に並べて表示とかは どうすればいいのでしょうか?
>>228
おまえが知りたいのはArrangeメソッドのことか?
basicで二次方程式の解を求めるプログラムを作り、動作させたいんですが、
何か書くためのソフトは必要なのでしょうか?メモ帳で書けますか?
231デフォルトの名無しさん:04/07/27 13:11
メモ帳に書くなら 必要なのはシャーペンだな(w
232デフォルトの名無しさん:04/07/27 14:23
グラフを表示するのに おすすめな OCXなどは どこのやつですか?
>>232
Excel
234デフォルトの名無しさん:04/07/27 16:53
ADOを使ってmdbにアクセスしています。
アプリ起動時にコネクションを張って、終了時に切断と言う方法です。
SQLの実行は関数でその中でレコードセットを取得しています。
select文を実行してレコードセットに保存後、同じ処理を再度行うと
エラーで落ちます。エラーコードは-5031です。
insert文は何度行っても落ちません。(同じ関数でSQLが違うだけ)

何か制限などがあるのでしょうか?
select文で作成したレコードセットはセットしなおし時に何かしないといけないとか。
ご教授お願いします。
235デフォルトの名無しさん:04/07/27 17:17
UPDATEしてるのか?
236デフォルトの名無しさん:04/07/27 17:26
UPDATEってSQLのことですか?
Update文は使っていません。

Updateメソッドのことですか?
使用していません。

VBのテキストボックスについて質問したいのですが、

現在、デバッグプログラムの為に、
処理データを随時テキストボックスに表示させるという事をやっています。
所が、テキストボックスの文字数が大きくなると
表示速度がかなり遅くなってしまいます。
(場合によっては、メインの処理がタイムアウトしてしまいます)

現在やってるのは、
各関数での処理中は、
string型の変数でまとめて
その処理の最後でtext=text+str
といった方法でまとめて貼り付けています。

なんとかして、早く出来る方法はないでしょうか?
238デフォルトの名無しさん:04/07/27 18:36
Updateメソッドを使用してみろ。
2〜5個のスペースで区切られた数値の羅列のテキストを
csvみたいに一個のカンマで区切るように直すには
どう書けばいいのでせう?
ちなみにVB6.0です。
Microsoft VBScript Regular Expressionsを参照設定して
Dim r As New RegExp
r.Pattern = " {2,5}"
Debug.Print r.Replace("0123 4567", ",")
241239:04/07/27 20:06
>>240
当方、今日生まれて初めてVB触った人間でして。
レスもらっといて何ですが全然わかりませぬ。
もうちっとわかりやすく教えてもらえませんか?

後ひょっとしたら質問が誤解されるかもしれないので
言い直すと、
・データは大体100行5列
・列の区切りがスペース2〜5個(ランダム)
で、このスペースを1個のカンマに直したいと。

こんな意味不明な仕様のテキスト作ったのやつが悪いのか・・・
「正規表現」でぐぐれ
244239:04/07/27 21:01
ぐぐってみた。
なるほど。こんなんあったのか。
これで挑んでみます。
どもでした。
>>237
デバッグなら、ファイルに出力するとか、一部のデータだけ表示するとか。
あと、文字列の連結演算子の「&」「+」はサイズが増えてくるとかなり低速になるので
別の方法をとるか、もしくは
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=11968&lngWId=1
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=42042&lngWId=1
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1444&lngWId=1
あたりを参考に最適化しる
ディレクトリの場合は
c:\hoge
ファイルの場合は
c:\hoge\hoge.txt
といった文字列が与えられたとき
パスがディレクトリを指しているのか,
ファイル名を指しているのか判断するには
どうしたらよいでしょうか?
247デフォルトの名無しさん:04/07/28 00:00
>>246
質問をもう少し明確にする必要があると思う。

MSのパスの表現の文法上の話をしているのか、(つまり、パス名そのものに
フォルダとファイルを区別する仕組みが存在しているのかどうかを聞いているのか)
それとも与えられた文字列があるシステム上で指示する実態がファイルなのか
フォルダなのかを識別する方法があるのかどうかでは答えが違う。

前者はない。後者はある。
248246:04/07/28 00:32
>>247
すいません,後者の方ですね.
パスが指している物の実態がファイルなのかディレクトリなのか判別したいのです.
249デフォルトの名無しさん:04/07/28 00:49
>>248
Dirでいけるんじゃない?下のリンクはVB.NETのだけどVB5,6でも同じのはず。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vblr7/html/vafctdir.asp
あるクラスAのプロパティとしてクラスBをいくつも(配列として)使いたいのですが、
getやletをどのように記述すればいいのでしょうか?
そもそもプロパティにしようとしているのが間違いなのでしょうか?
どうかご教授お願いします。
Private m_array() As ClassB '(要ReDim)

Public Property Get B(ByVal Index As Integer) As ClassB
Set B = m_array(Index)
End Property

Public Property Set B(ByVal Index As Integer, ByVal NewValue As ClassB)
Set m_array(Index) = NewValue
End Property
>>250
なぜ配列?
フツーにコレクションかと
>>251
ありがとうございます。おかげで解決しました。
>.252
collectionを良く知らないので、使うことを思いつきもしませんでした…。
す、すいません自分超初心者なんですが
別の人のプログラム(RS232Cを使って機械を制御する)を書き換えろって言われまして
修正しているのですが
実行時エラー'424' オブジェクトが必要です
と出てどうにも行き詰ってしまいました。
デバッグを押すと通信ポートの初期化で突っかかってしまいます。
Private Sub Form_Load()
MSComm1.CommPort = 1 <-ココ
MSComm1.Settings = "2400,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
LabAR.Caption = "Auto Repeat - OFF"
StartFormat
TextHand.Text = "Left"
End Sub

是非ヒントをください。m(_ _)m
>>254
スマソ・・・VB良くしらんが、多分こう?

MSComm1.CommPort = "COM1"
256255:04/07/28 12:35
あ、全然違った
257デフォルトの名無しさん:04/07/28 12:40
>実行時エラー'424' オブジェクトが必要です
2ch風に翻訳すると、
「MSComm1なんて知るかヴォケ」
むしろ「ぬるぽ」
259デフォルトの名無しさん:04/07/28 13:04
MSComm1関係をインストールしろよ となるのかな?
とりあえず、ヘルプで424を引け。
で、結構パターンがあるから、自分で潰せ。
>>254
・一度フォームからMSComm1を削除。
・プロジェクト-コンポーネントを開き、Microsoft Comm Control のチェックを消してOK。
・プロジェクト-コンポーネントを開き、Microsoft Comm Control のチェックを付け直してOK。
・フォームにMSCommを設置。(名前はMSComm1)
これでダメならダメかもなぁ。
262デフォルトの名無しさん:04/07/28 17:04
ありがとうございますm(_ _;)m
何とか解決しました。
お手数おかけしました
>>262
何が原因だったか書けよ
>>262
つうか誰?
265デフォルトの名無しさん:04/07/28 18:03
質問者一同 (w
lll
267デフォルトの名無しさん:04/07/28 18:25
eVB で PocketIEを起動させたいのですが、どうすれば良いか全然わかりません。
どなたかご教授願います。
268デフォルトの名無しさん:04/07/28 19:24
最小化で起動させるには、どうしたらいいのでしょうか?
/min
270デフォルトの名無しさん:04/07/28 19:41
>>269
複数あるFormのうち、一つだけを 最小化したいのですが。
271ひみつの検疫さん:2024/12/21(土) 11:11:11 ID:MarkedRes
汚染を除去しました。
>>270
WindowState
273デフォルトの名無しさん:04/07/28 21:00
VB6ですがlabelの文字にKeypressで押した文字を
一文字ずつ上書きせずに増やすにはどうすればいいでしょう?
ラベル→| ahy | keypress でaを入力  | ahya |
>>273
らべる.きゃぷしょん = らべる.きゃぷしょん & えー
275273:04/07/28 21:09
ありがとうございます 素人な質問ですみませんでした。・゚・(ノ∀`)・゚・。
276デフォルトの名無しさん:04/07/29 10:55
配列が どれぐらいまであるか 調べるにはどうしたらいいのでしょうか?


dim a as variant
a = split("abc,def,123", ",")

の場合、 2 まである(a(2)まで)と いうのが知りたい。
277デフォルトの名無しさん:04/07/29 11:02
ココって VBS.LoveLetter.Aに感染してますか?
>>276
LBound()、UBound()
>>276
ubound
>>277
スクリプトの一部が書き込まれているために反応しているだけ
いまごろ何いってんの?って感じだよな。
なにも気にならない人よりはマシかもね
For i = LBound(a) To UBound(a)
284デフォルトの名無しさん:04/07/29 13:15
DAO3.6で
SELECT max(項目) From tableA;
というSQLを流すと
「FROM 句の構文エラーです。」
となります。
max とか使えないのでしょうか?
285デフォルトの名無しさん:04/07/29 13:17
あ、
SELECT 項目 From tableA;
でも同様のエラーが出ました。
テーブル名とかがダメなのかなぁ?
使用できないテーブル名とかありますでしょうか?
セミコロンいらんだろ?

SQL*PLUSとかの文区切りとしてのセミコロンだよな。
>>286
SQL文の終端にもセミコロンを要るだろ?
>>287
元質問者?
あんた、私が書いたことを試したの?
289元質問者(:04/07/29 15:44
>>288
別人だ。
290デフォルトの名無しさん:04/07/29 15:46
テーブル名を変更したら、問題がなくなった。
セミコロンは、関係ない。
291デフォルトの名無しさん:04/07/29 16:55
■を押して、終了させると VB6自体が終了してしまいます。

なぜなんでしょうねぇ。
●を使いなさい。
DLLとかを使っていてなんかやっちゃってるからとか、
さぶクラス化しておいて、後始末せずに終わってるからとか。
こんにちは
VB6でコンソールプログラムを作っているのですが、
コンパイルしたバイナリをコンコールから呼び出しても
別窓が開いてしまいます。
VB5の時はたしかバイナリエディタで0xDCかどこかを書き換えれば
よかったように記憶してるんですが、VB6では何か対応策無いでしょうか?
よろしくお願いします
295デフォルトの名無しさん:04/07/29 19:23
DAO3.6 ですが、SELECTするときに
"Axx0001"のような項目の Axxの中で 右4桁が最大の レコードを取得したいのですが
どのようにすればいいのでしょうか?


Axx001
Axv002
Axx012
Axs030
Axs080

このとき Axxならば Axx012 のレコード
Axsならば、Axs080のレコード を抽出できるようにしたいのです。

教えて下さい。

ベクターサイトからVisual Basic 6.0 SP6 ランタイムライブラリをダウンロードしました、
自動解凍でしかも自動インストーラーが起動してインストール出来たのですが、
vb6sp6rtフォルダが出来中に数個のファイルがありますが、このフォルダは削除
していいのでしょうか?

ttp://www.vector.co.jp/soft/win95/util/se188840.html
SELECT *
FROM テーブル
WHERE 項目 = (select max(項目) from テーブル where 項目 like 'Axx%')
>>294
/subsystem:console
じゃないかな?
うP
300デフォルトの名無しさん:04/07/30 00:42
VBCCEで作ったプログラムが保存できません。
実行すら出来ないし・・・
一体どうすればいいんでしょうか。
OSはXPです
>>300
買って来ればいいじゃん
302300:04/07/30 05:20
いや、そらそうなんですけど…
それができないから悩んでるわけで…
保存はいいとしても、実行が出来ないのはツライっす。
どなたか対処法教えてください…orz
>>302
何をどうやってこうなるはずなのにこうなって・・・などの説明をどうぞ。
今の状態だと、馬鹿につける薬は無いとしか。
304300:04/07/30 06:43
自分プログラムは触ったばっかりの初心者でして、
何もわからないからとりあえず解説ページにある通り「project1 - UserControl1 (Code)」というウィンドウの中に

Private Sub UserControl_Initialize()
MsgBox "hello world"
End Sub

と書き込んで実行ボタン押したんですけど

Control projects be run alone. Use File/Add Project to add a Standard Exe project; close the User
Control design window; and then place a test instance of the control on Form1

というエラーしか表示されなかったんです。
その解説ページにはどういうふうになるかは自分の目で確認してくださいと書いていたので、
最初はこれでいいのかなとも思ったんですけど、
表示されるときにエラー音とかなるし「hello world」なんてどこにも出てこないしで多分これは違うんだろうなと…
説明不足すみませんでした。
>>304
・その解説ページを晒すか別のサイトで勉強するか本でも買ってくるかしろ。
・英語は読めるか?エラーメッセージを辞書片手でもいいから読んでみよ。
306300:04/07/30 08:02
>>305
ご指摘ありがとうございます。
エラーの英文よく読んだら解決しました。
307デフォルトの名無しさん:04/07/30 09:15
ぷっ

ま、たいていは、読んでも わからん場合、質問するんだけどな。
308デフォルトの名無しさん:04/07/30 09:21
ご教授お願いします。

sYear = Right$(Space$(4) & Year(vDate), 4)

とすると
"プロジェクトまたはライブラリが見つかりません"
というエラーが発生します。

傍から観るとあほらしい事かもしれませんが
本気で訳がわからず困っています。

よろしくお願いします。
☆新しく卓球板が出来ました☆
卓球経験者は是非来てください!
http://sports7.2ch.net/pingpong/

必見!ヨーロッパ選手の凄まじいラリー動画
http://rupan.zive.net/~kain/cgi-bin/upload/src/up4578.mpg.html
http://rupan.zive.net/~kain/cgi-bin/upload/src/up4579.mpg.html
http://rupan.zive.net/~kain/cgi-bin/upload/src/up4580.mpg.html
この動画に感動した人は今すぐhttp://sports7.2ch.net/pingpong/へ
310デフォルトの名無しさん:04/07/30 10:09
>>308

Dim sYear, vDate As Variant
sYear = Right$(Space$(4) & Year(vDate), 4)

とすると 無問題。


311308:04/07/30 10:39
>>310
どうもサンクスです。
多謝!
312デフォルトの名無しさん:04/07/30 10:39
VB6でソースをエディットする個所で、インテリマウスのインテリが使えるようにするには
どうしたらいいのでしょうか?
313デフォルトの名無しさん:04/07/30 11:26
どこでもホイール、でぐぐる
314デフォルトの名無しさん:04/07/30 11:35
こりゃ便利だ。
315デフォルトの名無しさん:04/07/30 11:40
みんなー 回答ありがとう!
(多質問のレスにて)
>>310
なんで sYear,のVariant宣言は省略してるのに後ろのvDateには書いてるの?
317デフォルトの名無しさん:04/07/30 14:51
省略すれば バリアント型。
しかし、宣言しないと エラーになるようなので、とりあえず
バリアントと宣言するために 書いただけ。
つーか 後ろのも省略できたのかな?
ただ単に知らなかっただけだよな。
318デフォルトの名無しさん:04/07/30 15:07
はじめまして、こんにちは。
現在VB6で社内のクライアントのソフトウエアー稼働率を調べるソフトを計画中でして
以下について分からずツマズイテます。

?実行中のソフト(電卓やワード。・エクセル)をVBで検出できないか?

教えてください、よろしくお願いします。
>>318
ttp://www.mitene.or.jp/~sugisita/vb6_wnd.html
の一番下のやつみたいな感じかね。

俺は試してないから知らないが。
320デフォルトの名無しさん:04/07/30 15:32
>>319
どうもありがとう御座いました。
使えそうです!
しかしOutlook Expressが認識しない、、、考えてみます。
321デフォルトの名無しさん:04/07/30 16:10
Formに貼り付けた コントロールをいくつかまとめて グループ化なんてできませんか?
>>321
ユーザーコントロールにするとか
ピクチャーボックスの上に置くとかフレームコントロールの中に置くとか
323デフォルトの名無しさん:04/07/30 19:09
Formが すでに表示しているかどうか知るには、どうしたらいいの?
>>323
FormsでLoadされているモノをあつめて表示中かどうかを見る
>>317
アフォですか?
326デフォルトの名無しさん:04/07/31 13:49
>>325
オマエがな。
つまりこういうことだろ?
>なんで sYear,のVariant宣言は省略してるのに後ろのvDateには書いてるの?
328デフォルトの名無しさん:04/07/31 14:36
どちらにしろしょうもないので、次の質問ドゾー
329323:04/07/31 15:07
>>324
具体的にコーディングは、どうすればいいのでしょうか?

AというFormが 表示されているかどうか知りたいのです。
すでに表示されてるものに対して A.Showとかしても問題は ないかな?

表示していない場合は、そのAに貼り付けた テキストボックスとかに
値をセットしようとするとエラーになるので、表示されていないときは、
セットしないように しようかと思うのです。
330デフォルトの名無しさん:04/07/31 17:00
ラベル表示についてなんですが、
1 表示するデータ 単位
という 内容のものがあったとき
一つのラベルで 3つ分を 入れたらいいのか
もしくは、それぞれ 3つに 分けたほうがいいのでしょうか?

表示するデータだけ 随時 変わるのです。

ラベル3つにしたほうが 簡単そうですが、量が多いので ラベルの量とメモリの関係が気になります。
ラベルを1つにすると 表示がズレそうで、余計な気を使いそうです。
どちらに気を使うほうがいいでしょうか?
>>330
量による。
多いのであれば、UIから見直せ。
332デフォルトの名無しさん:04/07/31 17:13
表示だけだからUIは、関係ないと思うが?
…表示もUIのうち。
メモリを圧迫するほどのラベルの量を気にしないといけないほどの
表示量を出すようなユーザーインターフェイスは再考の余地ありと思うが?
コントロールは255個まで配置可能。
コントロール配列にすれば255以上表示可能。
量が多いとリソース不足になる。開発環境がXPや2000で、実行環境が
98やMeの場合、最終段階で悲惨な目に遭うことがある。
1項目3種類の情報を複数項目表示したいなら、グリッドつかったほうがいいかも。
>323
ヒントだけ出してやる。
AというFormが表示された時に「何か」が変わる仕掛けをしておいて、
他からはその「何か」が変わっているかどうかを見る。

>330
要は見た目揃えるかどうか、だと思うがどうよ?
ただ数が多いんなら上でも出てるけど、ListViewなり
変更不可にしたTextBoxに整形して表示するなりした方が
見やすくなると思うぞ。
>>323
visibleじゃだめなんだ?
loadはしてそうだもんな
>>323
オリも、最初の質問だけだったらVisibleで良いとおもったんだが
多分>>323はForm_Loadイベントの発生条件とフォームの有効期間をちゃんと理解してない希ガス
338デフォルトの名無しさん:04/08/01 11:26
>>330
1つのラベルでも、1つのテキストでもいいが
表示する項目の文字列の加工方法で切り抜けられるんじゃない?
各項目の最大表示桁数(文字数)を揃えればokだと思うが

>323
Formsコレクションを調べれば、LoadされているFormが分かる。
FormのVisibleプロパティを調べれば、表示されているFormがわかる。
>>330
文字列が全部全角文字か、動作環境がXPなら>>338の方法でもOK。
動作環境がXP以外で半角文字も使うなら固定ピッチフォントにしないとズレる場合があるので注意。

漏れだったら、Captionの値が固定のLabelをひとつのコントロール配列にして、
Captionの値が変化するLabelも別名のコントロール配列にするかな。
そもそもラベル位いくら貼り付けたってメモリ消費なんて知れたもののような
気がするけど。
Wまあ、in9x環境だと、フォームに貼れるコントロールの上限が結構低かったような
記憶もあるけど。

どうしても気になるなら、フォームかピクチャーボックスに自分で文字
ドローするのが一番根本的な解決だと思う。
VBならAutoRedrawをTrueにしとけば、必要なタイミングで必要な分だけ
書き足すだけでいいからコードも大して大掛かりにはならないし。

もちろんAutoRedrawの裏画面が消費するメモリも気になるならFalseにして
OnPaintで全部描画するようにすればいい。
比較的長時間かかる処理を行っている間、
「処理中です」のメッセージをダイアログの様に
表示しておくにはどうしたらよいでしょうか?
ダイアログにはキャンセルボタンを配置し、
処理を途中で中止できるとなお良いのですが。
>>342
Modeless でキャンセルボタンをもつフォームを表示して、キャンセルボタンが押されたら、どっかのフラグを立てる。
フォームを表示した側は、処理中に適当なタイミングでフラグを見て立ってたら処理を中止する。
>>342
悪名高いDoEvents の使い方調べるとよろし
345はちみつ六郎:04/08/01 22:06
リストボックスのHeightプロパティをフォームのリサイズで変えようとすると、
一行ごとの高さで変わっていくためスムーズに見えません…
行の途中までしか見えなくてもいいのでスムーズにリサイズできるようにはならないでしょうか?
>>345
できる。ヘルプ見ましょう。
347はちみつ六郎:04/08/01 23:48
>>346
勉強不足でした、申し訳ありません。
ありがとうございます。
>>343-344 サンクスです。

重ねて初歩的な質問で申し訳ないのですが、
モードレスでフォームを表示する方法についてもう少し。

処理開始の直前にフォームをShowメソッド(引数なし)で呼び出して表示し、
処理終了後にUnloadしているのですが、フォームは表示され、処理も中断
せずに行われるのですが、なぜかフォームの中止ボタンが押せない状態に
なってしまいます(タイトルバーの×ボタンも押下不可能)。
まだ何か足りない処理があるのでしょうか?
>>348
処理ループの中にDoEventsが入ってないとか?
>>349
入ってはいたのですが、ロジック的にまずい位置に…。
お騒がせしました。無事解決です。
さすがはVB房
352323:04/08/02 11:54
>>336,337

unload された場合に そのFormに貼り付けてあるコントロールに
値をセットしようとするとエラーになるので、unloadの時は、
処理を飛ばしたかったのです。

Formsコレクションに入ってれば Loadされているのですね?
>>352
聞く前に行動しろよ
354323:04/08/02 13:02
>>353

これから、それをどうやってやるのか調べるところです。
お客さんからVBのソース等一式もらったんですが、
VB4かVB5で作ったと思う・・・というだけで詳細が不明です。
どのようにすれば、作成したVBのバージョンが分かるのでしょうか?
どなたか教えていただけませんか?
作成されたVBのバージョンを知る意味ってあるの?
VB4〜6って関数とか大きく違ったっけ?
357デフォルトの名無しさん:04/08/02 13:27
>>355
VB4で動けば VB4は OK
VB5で動けば VB5は OK
両方OKだったらVB5で開発。
358355:04/08/02 13:40
ありがとうございました
*.VBPファイルをメモ帳ででも覗けばわかるかも。
意味ないけど。
6は判るんだけどね。
5にない1行があるから、6->5の戻しはその行を削除しないと5側でエラー。

あとは、参照してるコントロールとかのバージョンで類推するぐらいかな?
361デフォルトの名無しさん:04/08/02 16:05
いきなり上から今更VB6.0でアプリを
開発するように言われました。

急ぎの話なんで
3日ぐらいでVBを理解したいんですけど、
これは読んどけって本はありますか?
向こうは俺に任せれば大丈夫だと勝手に思いこんでるみたいですが
VBは実は経験ありません。

経験のある言語
C,C++,Java.COBOL,Perl
>>361
Windowsアプリの経験はあるの?VC++とか。
あるなら、つどこのすれで聞けば問題ない
363デフォルトの名無しさん:04/08/02 16:11
>>361
バイト代くれるんだったら、質問に即回答してやるぞ。

バイト代は ココのポイントで
http://www.hatena.ne.jp/
364361:04/08/02 16:15
>>363

あげますよ。
是非。
>>361
真っ当な問題解決としては、正直にVBの経験がありませんと告げる事だ
366デフォルトの名無しさん:04/08/02 16:37
>>361

じゃ そこで じゃんじゃん質問してくれ。
既出、なんでもOK。
見かけて、答えられそうだったら回答してあげる。

>>365

告げたら
君なら出来ると言われました(w
Cとかの経験が、生Cなのが、VCなのかで全然話が違う。
Windowsアプリの開発経験があれば、VBはそれほど難しくは無い。
それが無い場合、イベント駆動式とかを理解できれば多分大丈夫。
369デフォルトの名無しさん:04/08/02 17:06
できないと言って、仕事を押し付ける人はいない。

押し付けるときは、ヨイショしまくりが当然。
370デフォルトの名無しさん:04/08/02 17:17
>>368

CはUNIXメインで使ってたんで
VCはやったことないです。
イベントハンドラな言語は
DelphiでWindowsアプリ作ったことあります。
じゃあ結構大丈夫かも。

でも今更なんで6.0なんだ!!!!
.NETやらせろおおおお。
Delphiやったなら3日もいらねー
372デフォルトの名無しさん:04/08/02 17:21
>>371

一応もらったの
明日から3日なんで。

結構楽できそうな気がしてきた。

ありがとうございました。
>>370
じゃあ、簡単にポイントだけ。

・変数宣言は強制するようにオプションをきちんと設定する。
・普通のプログラムと同じようにモジュール化をして、小さい関数を心がける。
・関数の引数はデフォルトで参照渡しなので注意。
・基本的にはVBで出来ること、Windowsでできることをやる。
当然の話のように思われるかもしれないが、無理仕様は受けないというのが正解なので。
・あくまでVBはVBでできることを行う箱庭ツールだということを心がける。
PowerBuilderは糞
375デフォルトの名無しさん:04/08/02 18:04
>>374

オラクルがらみは、作りやすいぞ。
といっても、クソには 近いけど・・・。
どうせ3日しかないのだったら、もう作りながら覚えた方が
少しでもデスマ回避するためにはいいんじゃないか?
開発期間がどのくらいか知らないけど、
VBに慣れた人と同じに考えられていたら死ぬよ。
377デフォルトの名無しさん:04/08/03 10:38
Excelファイルの指定シートの指定セルに値をセットするには
どのようにコーディングしたらいいのか教えて下さい。
378デフォルトの名無しさん:04/08/03 10:56
On Error GoToでチェックされる有効範囲についてききたいのですが
使用している Functionの中のエラーもチェックしてくれるのでしょうか?
>>378
プロシージャの中だけで有効。
Functionの中でOn Error GoToを使えばいい。
その結果が呼び出し側でほしかったら、戻り値に入れる。
>>379
( ´,_ゝ`)プッ
381デフォルトの名無しさん:04/08/03 11:17
なんか 笑われてますよ?
つまりErr.Raiseを使えって事ですよ
383デフォルトの名無しさん:04/08/03 11:21
VBでユーザーの切り替え時に処理を行うことは可能?
VCならできるらしいが......
384デフォルトの名無しさん:04/08/03 11:29
385デフォルトの名無しさん:04/08/03 11:34
三井坂って何ですか?
VBに関係してるらしいんですが・・・。
>>377
http://www.google.com/search?num=100&hl=ja&ie=UTF-8&q=excel+%22object+library%22+vb&lr=lang_ja

>>383
わかりません。
VC++での例を見せてくれたらわかるかも。
387デフォルトの名無しさん:04/08/03 11:36
>>386
で 具体的にどうするのが一番?
388デフォルトの名無しさん:04/08/03 11:43
>>386
http://www001.upp.so-net.ne.jp/yamashita/doc/xp.session.htm
自分も少しはVCさわれるけど、ちょっとこれは不明
>>388
やってみてないけど、同じ方法でできないの?
WTSRegisterSessionNotificationっていうAPIを呼んで、
WM_WTSSESSION_CHANGEをサブクラス化して
捕まえればできそうじゃないかい?
390デフォルトの名無しさん:04/08/03 12:03
なんか捕まらないな。まぁ適当に頑張ってみる
ダメなら仕方がないからVCで作るわ......
VCは時間がかかるから嫌いなんだよな〜
C#でも使うか.....


>>386
サンクス
>>381
>>379の説明だけなら、笑っているほうが正しい。

作り的には論外だが、呼び出し先で例外を補足していない場合、呼び出し元の例外処理に入る。
JAVAとかだと明示的に例外をスルーしないとだめだけど、VBはスルーしてしまう。
ただ、最初にも書いたとおり、予期しない動きをするようになるので、仕事のプログラムとしては論外。
392デフォルトの名無しさん:04/08/03 13:02
VBの動きを理解するのに一苦労だよ。
393デフォルトの名無しさん:04/08/03 13:03
>>385
394デフォルトの名無しさん:04/08/03 13:30
配列のとり方によりメモリの効率は 変わりますか?


a(4,5)

a(20)
とした場合、どちらが 効率いいでしょうか?
プログラムとしては a(4,5)のほうが 使いやすそうなんですが
どうなんでしょうねぇ。
>>394
独り言ですか?
数値を大量に取って実測したりとか、何故しないんですか?
つうか、VBで製造する類の物なら、そういうところでのメモリー効率より、ロジックに忠実に配列定義しろ。
397デフォルトの名無しさん:04/08/03 13:40
>>395
そんなこと言うなら、オマエがやってやれ。
398Option Base 0:04/08/03 13:51
a(4,5) 要素数 5 x 6 = 30
a(20) 要素数 21
399デフォルトの名無しさん:04/08/03 13:56
Sub の引数に値をセットしなおすには どういうふうに宣言を記述すれば
よかったでしょうか?
ByRef
401デフォルトの名無しさん:04/08/03 16:11
ByRefって必要なの?
設定によっては省略時ByValの場合もあるしな。
403デフォルトの名無しさん:04/08/03 16:38
ByValとByRefの違いは?
>>403
ヘルプか入門書を読め。
>>404
エェーー 面倒くさいじゃん。
>405
どっちも似たようなもんだから気にせず使え。
ソケット通信で末尾が4桁の数字になっているWEBページを
取得しようと思うのですが
1ページずつ順番に取得していると1時間ほど掛かってしまいます。
winsockコントロールを100個くらいLoadして
一気にコネクション張れば速くなりますか?
>>407
動機が不純だから教えない。
>>408
純粋ですよ。
とりあえずいくつまでWinsockコントロールがロードできるか
試してみよう
やばいくらい速くなった。ヽ(´ー`)ノ
さすがに100個は多すぎないか?
ラベルとかテキストボックスのキャプションを、部分的に文字属性を変えることってできますか?
該当する文字を赤くしたりしたいんですが。
>>413
他のリッチテキスト等を使ったほうがラク。
>>412
1000個までは大丈夫でした。それ以上は遅くなります。
VBにてACCESS連結のデーターベース作ってるのですが
オプションボタンにテーブルのフラグがうまいこと表示できません。
どなたかご教授お願いします。
>>416
Yes/No型をラジオボタンのオンオフに対応させたいってこと?
418416:04/08/03 22:13
フォーム上では動くのですが。。
データがレコードと連結しないのです。
○○○.DataSourceとか○○○.DataFieldみたいな設定がわからないです。
>>416
まずは、417氏の質問に答えなよ。
420416:04/08/03 22:41
>417・419
すいません。418で説明をいれたつもりだったのですが
私の日本語がおかしかったようで。
申し訳ありません。

>417
そうです。ACCESSのチェックボックスのYes/Noの用にVBのフォームで
オプションボタンをクリックすることで0とか1とかをテキストでいれたいのです。
ちなみにオプションボタンは配列コントロールで設置しています。
>>416
なんでチェックボックスじゃだめなの?
422デフォルトの名無しさん:04/08/03 23:41
テキストボックスに 8/3 と入力したら、
2004/08/03 と自動的に表示されるにはどうしたら
いいんですか?
Format関数でしてるんですけど、上手にいきません。
どうかご教授願います。

Private Sub Form_Load()
'フォームを読み込んだ時に txt1 に現在の日付を表示する
Me.txt1.Value = Date
Me.txt1.Format = "Medium Date"'dd-mmm-yy 形式で表示
End Sub
それはFormat関数じゃなくてFormatプロパティ。
しかもテキストボックスにFormatプロパティは無い。
>>422
ここはVisualBasic6.0までのスレです。他の言語は適切なスレでお願いします。
425416:04/08/03 23:48
>421
項目が性別で ”男” ”女” だけなのです。
>>425
チェックボックスを非表示でACCESSに連結させて、オプションボタンのクリックイベントと(めんどくさいので説明略)
427デフォルトの名無しさん:04/08/03 23:56
オプションボタン使いたきゃ面倒くさい事やってないで
普通にUPDATEのSQLなげたら?
更新はUPDATEで処理して
選択状況取得はSELECT文で取得する
428デフォルトの名無しさん:04/08/04 00:05
こんな感じかな?
これだとおかしくなるし。
8/3と入力したら自動的に西暦になって欲しいんだけど。

Private Sub dtDate_Change()

Me.dtDate = Format(Me.dtDate, "yyyy/mm/dd")

End Sub
429416:04/08/04 00:08
>426
想像できない使い方です。ちょと興味わいてしまいました。

>427
すでにSQLでとってきた7つのレコードセットを連動させているので
SQLなしで進めれたらと思ったのもあります。
でもお話聞く限りでは最もベストな方法ですね。。。
設計自体に難あったかもしれません。
も一度作り直す覚悟でやってみます。

ありがとうございました。
>>428
チェンジでするなよ・・・
せめてLostFocusかKeyDownで改行押された時とかだろ?
431デフォルトの名無しさん:04/08/04 00:18
いや設計うんぬんより質問の仕方が悪い方が問題だよ
>うまいこと表示できません。

これじゃあ事象やら不具合がまるっきしわからん
こんな部下が来たらとりあえず1時間絞りあげる
>>431
ここまでくると、俺は1時間もそんな奴のために時間を割かないな。
ほかにマシな駒はいくらでもいるし。
byte型の配列をファイルに追記書き込みしたいのですが
どのように書けばよいでしょうか?
テキストファイルでいうところの
open "hoge.txt" for append as #1
print #1, hage
close #1

のような感じです。
434デフォルトの名無しさん:04/08/04 00:37
困ってます。皆様できればお教えください。

得意先マスタの登録フォームを作ってます。
テキストボックスに会社コードを入力して新規か修正かを判断したいです。

会社コード入力時に、会社コードの有無を確認し既に存在すれば修正できるように
そのレコードの情報(会社コード、会社名、住所、TEL 等)を各テキストボックスに代入したいです。
435デフォルトの名無しさん:04/08/04 00:42
>>433
バイト型?中に入る値はなんですか?
通常だとアペンドモードでファイルを開き配列がある分ループを繰り返して
出力するかな

>>434
レコードセットで抽出条件を会社コードでSELECT文を投げて
EOFがFALSEだったら新規 TRUEだったら更新でどうか?
436433:04/08/04 00:45
>>435
winsockのdataarrivalイベントで取得したバイト配列を
そのままファイルに書き込みたいだす。
>>433
Dim hage(0 To 9) As Byte
Open "c:/hoge.dat" For Binary As #1
Seek #1, LOF(1) + 1
Put #1, , hage
Close #1
回答がきたら無視るのがここの伝統か
>>438
そうだ。
このスレ見ただけでもわかるだろう。
そんな時はこのサイト。
ttp://myu.daa.jp/osiete/teigi.html
441デフォルトの名無しさん:04/08/04 06:02
>>438
たった1時間程度で無視とか判断するなよ。
まあ、この場合は教えて君だろうけど…。
>>441
たった1レス程度で判断するなよ。
まあ、1時間程度じゃなくて、質問>回答>返事無しの流れの事だろう。
443433:04/08/04 07:07
>>437
すみません。いつのまにか眠っていました。
ありがとうございます。さっそく試してみます。
444デフォルトの名無しさん:04/08/04 09:08
ディストリビューション ウィザードでセットアップファイルを作成すて
インストールを実行すると下記のエラーメッセージが出てしまい全然インストール
が出来ません。
ナゼなのでしょうか?教えて下さい。
※win98とかMEは出来ます。

OS:WIN−XPでMicrosoft Visual Basic 6.0使用

Error
Path or File Not Found
↓【OK】クリック


セットアップするファイルC:\ocuments and Settings\myst\デスクトップ\cvb\Package\\@ODKOB32.DLL が見つかりません
445デフォルトの名無しさん:04/08/04 09:14
>>416

-1 と0 だったような。
あと True と False でもできたと思う。
>>444
VBの場合、経験則的にインストールするOS毎にEXE、インストーラーを作るってのがあります。
対象のインストーラーを作ったOSはなんでしょうか?
447デフォルトの名無しさん:04/08/04 09:33
>446
はいそうです。
\\@ODKOB32.DLLが\ODKOB32.DLLのパスにならないのが
おかしいと思いますがナゼなのでしょか?
>>447
会話になってない。こたえようが無いだろ。
450デフォルトの名無しさん:04/08/04 09:51
>448
失礼しました。
はい、インストールしようとしているパソでパッケージを作成して
実行してます。
>444
ディストリビューション ウィザードってかなり古いから、
通常はMSインストーラーで作っていると思う(win98だと使えなかったと思うけど)

MS社に行ってDLサイトでVisualStudioのキーを入れると落とせたはず。
そっちだとWin2000・XPでも入れられる。

誰でもあほみたいに簡単に作れる。
452デフォルトの名無しさん:04/08/04 09:59
>451
行ってきます
453デフォルトの名無しさん:04/08/04 10:21
http://www.bcap.co.jp/hanafusa/VBHLP/excel02.htm
このページを参考にしながら
エクセルファイルを変更して保存したら
400kbのエクセルファイルが 36MBになりました。
どうしてでしょうか?
454453:04/08/04 10:31
エクセルファイルが そういうファイルだったみたいです。

どうして そんなファイルができるのでしょうか?
>>453
VBからに限らず、EXCELのファイルサイズって編集範囲に関係なく太るよ。
多分、自分が意図していないセルに対しても範囲選択で書式設定していたりしてるからだと思う。

ただ、確か昔読んだ話だと、単にファイルオープンセーブを繰り返しても太ったような・・・。w
456デフォルトの名無しさん:04/08/04 10:34
>449,451
行ってみたのですが分かりません
>>456
MSの障害報告に対応策そのものが書いてあるじゃん。
何を試行して何が判らないかは書いてくれ。

ほんと、>>456見たいのが自分のしただったら、とりあえず1時間説教だよ。
458デフォルトの名無しさん:04/08/04 10:47
>>457

そういう上司だったら、一時間分の説教をテキストにして
メールしてくれといいたくなるな。
今は 忙しいから、後から 読んでおく。
>>458>>456だとしたら。

それは忙しいんじゃない。あんたに能力がないから仕事が進んでいないだけだ。
460(つД`)タスケテクダサイ:04/08/04 11:02
ここのスレの人に作ってもらった計算機のプログラムなんですけどこのプログラムの説明とアルゴリズムを教えてください。
出力結果としては3+4*2と入力すると=11とでるようになってます。
どなたか得意な方お願いします。m(__)m

#include <stdio.h>
#include <conio.h>

#define EXPRESSION_MAX 64

double myMath(char *pcExpression, unsigned char ucLength)
{
char cDecimal = -1;
unsigned char ucIndex;
double dAns = 0.0;
461デフォルトの名無しさん:04/08/04 11:11
>>460
そんなもんVBでは 動かん。
462デフォルトの名無しさん:04/08/04 11:26
456ですが458は私ではありませんので。。。
Visual Basic 6.0 ユーザーは、Setup1.vbp において Setup1.frm の Form_Load
イベントを以下のようにカスタマイズすることで回避できます。
と記述してありますがSetup1.vbpって自分で作ったソースの事なんですか?
>>462
違う。VBインストールしたフォルダに入ってるから探せ。
464デフォルトの名無しさん:04/08/04 11:38
TabStripの使い方を教えて下さい。

タブを切り替えたいのですが、マウスでクリックする以外
(コーディングで) タブを切り替えるには どうしたらいいのでしょうか?
>>462
ヘルプのインストーラーのカスタマイズのところを読む。
あのインストーラ自身がVBで作成されてるんですよ。
だから問題もあるわけで・・・。
466デフォルトの名無しさん:04/08/04 12:03
TabStrip1.Tabs(2).Selected = True
467デフォルトの名無しさん:04/08/04 12:05
>462.465
出来ました!助かりました!
ありがとう御座いました。
dim buff as string
dim total as string
open "hoge.txt" for input as #1
do until eof(1)
line input #1, buff
total = total & buff
loop

この処理なんですが、一発でファイルの中身を
totalに入れることできないでしょうか?
>>468
Line Inputをヘルプで読んで理解し、それから関連項目を見る。
>>469
読んでみました。
しかし、わかりませんでした。
>>470
じゃあ、君には出来ないわけだ。
それを教えても理解できずに書くだけだから、動いてる今の処理でいいじゃん。

Line Inputは改行コードまでを読むって書いてあるでしょ?
だから取れなくて当然、あんたが改行まで持って来いって書いてるんだから。

で、関連項目のReadとかInputは読んだの?で試した?
>>471
Line Inputは改行コードまで読むなんてわかってますよ。
だから一発で読む方法聞いてるのに。
>>472
関連項目の奴らは試したの?
ファイルは無制限に一発読みはできないよ。

少しは自分の頭と手を使えよ。
関連項目の読み込み系のメソッドを全部試して、それで駄目なら聞けばいいじゃん。
即答で判らないってのは、判らないじゃなくて考えたり試したりしてないでしょ?
474デフォルトの名無しさん:04/08/04 13:02
>>472
Delphiだったらできるんだけどなぁ〜
>>474
さすがDelphi
Delphiで作ります。ありがとう。
>>468
Open "hoge.txt" For Binary As #1
total = Input$(LOF(1), #1)
Close
477デフォルトの名無しさん:04/08/04 13:07
DelphiとVBのどちらでもいいという状態なら迷わずDelphiを使う。
どうしてもVBじゃなけゃダメという時だけ やむをえずVBを使う。
>>476
すげー。すげー。まじですげー。
479デフォルトの名無しさん:04/08/04 14:54
そかそか
480デフォルトの名無しさん:04/08/04 16:43
WIN98SE、VB5SP3で
48 65 6C 6C 6F のようなバイト型(バイナリ?)データを
s-jisで変換して「Hello」みたいに表示したいのですが、解る方いらっしゃるでしょうか?

ぐぐってみたらVB単体だとs-jisは使えないって事で
NKF32.DLLを使えば出来るらしいというのを発見したのですが
使用方法がサッパリ解りません・・・。
詳しい方がいらっしゃいましたら、宜しくお願いします。
>>480
SJISならstrconvで変換できるよ
StrConv(hoge, vbUnicode)
って感じだな
483デフォルトの名無しさん:04/08/04 17:29
>>481
>>482
こんなに簡単に解決するとは思いませんでした。
的確なアドバイス、有難うございました。
unicodeもs-jisもアルファベットは同じじゃなかったか?
485デフォルトの名無しさん:04/08/04 23:13
>>476
横レスすまんがあんたスゴイな!!ウチのプロジェクトにほしいよ
>>484
俺が言うのもなんだが君はヤバイ
>>484
1バイトか多バイトかの違いがある
488484:04/08/04 23:52
わりい、ウニの方はアルファベットも2バイトだったわ。
ファイル出力時に勝手にs-jisになるの忘れてて勘違いしてた。
VBで16進数”C8”等の上位数ビットを指定して取り出したいのですが
今は16>2進へ手動で変換してから取り出しているのですが
もっと効率の良いやり方って無いものでしょうか?
>>489
今のソースをどう書いているかわからんのに、もっと良いものも糞も無い。
>>489あぁ、書き方が悪かったですね。すみません。
2進などに分解せずに16進で操作できる方法はありませんか?
と言う事を聞きたかったのです。
>>491
その16進数というのは、文字なのか?
繁栄に文字からビット取り出しするのであれば、16進数文字列から
数値変数に入れておくといい。
繁栄にしないのであれば・・・ていうか、今のソースどうやってんのよ。
>>492
繁栄じゃなく頻繁だ!切腹!
>429
16進は文字列ですね。
エラー定義等細かいのを省くと、単純にこんな感じです。
解り辛いかもしれませんが・・・。

頻繁?
初めて聞きますが・・・調べてきます。

その1
Private Sub Command1_Click()
Dim strWork As String
Dim lngWork As Long
Dim lngCut As Long

strWork = "&H" & Text1.Text
lngCut = Text2.Text
lngWork = strWork

strWork = NI_SIN(lngWork, lngCut)
lngWork = JU_SIN(strWork)

Text3.Text = Hex$(lngWork)
End Sub
うわ、改行が・・・

その2(続き)
Private Function NI_SIN(ByVal lngA As Long, ByVal lngCut As Long) As String
  Dim lngNum As Long
  Dim strA As String

  lngNum = lngA
  Do
    strA = CStr(lngNum Mod 2) & strA
    lngNum = Fix(lngNum / 2)
  Loop While lngNum > 0

  NI_SIN = Mid$(strA, 1, lngCut)
End Function

Public Function JU_SIN(ByVal strN As String) As Long
  Dim lngI As Long
  Dim lngLength As Long
  Dim lngWork As Long
  Dim strB As String

  lngLength = Len(strN) - 1
  For lngI = 0 To Len(strN) - 1 Step 1
    If Mid(strN, lngI + 1, 1) <> "0" Then
      lngWork = lngWork + (2 ^ lngLength)
    End If
    lngLength = lngLength - 1
  Next lngI
  JU_SIN = lngWork
End Function
あぁ、プログラム用語かと思ったら
一度読み返したら意味が解りましたw
Text3.Text = hex(CLng("&h" & "C8") And (2 ^ lngCut))
ってな感じか?
mask = ((2^lngCut)-1)*(2^(8-lngCut))
result = (lngWork and mask) / (2^(8-lngCut))

32ビットだとオーバーフローするから使えないけど8ビットなら大丈夫かな。
>>497
>>498
なるほど!論理積を使ってビット単位の比較ですか。
AND演算子なんて全然知らなかった。
これだけ短くなるとは凄い。

オーバーフローの方は、8ビット固定なので問題ありません。
目から鱗です。有難うございました。
>>499
正直な感想、ああいうプログラムを書くあなたが凄い。
>>500
ANDも知らないんだから、ビット操作どころかVB初心者なんだろうさ。
初心者が自分の考えを物凄くストレートにコーディングしたらああなるだろ。
ま、概念は解ってるっぽいから直ぐ理解できるんじゃね?





とか言って、おいちゃんも目からウロコだったヨ♪
ビット操作なんて、大学以降仕事でやった記憶ねーし。
皆はそんなに使うのか?
>>501
Windows上でプログラムしていると嫌でもやることになるとおもってた。
制御系なら必須じゃないかな? 他の環境はしらんけど。

VBでもKeyDown/MouseDownのお仲間ではビット演算使うでしょ?
最後の
/ (2^(8-lngCut))
この部分不要に思えるが。。

いや、もし不要じゃないなら、最初からビット演算なんか不要で
単に2のべき乗の商を求めればいいはずだと思うんだけど?
504デフォルトの名無しさん:04/08/05 13:03
くだらない質問ですみません
dim objdll as cls001
set objdll = new cls001

も dim objdll as new cls001
も別に処理的にはどっち使ってもいいんですよね?
別に問題ない。
上の方の書き方は、オブジェクトを使用しない場合はsetしない等の様にソフトを組めばメモリの節約になる利点がある。
506デフォルトの名無しさん:04/08/05 13:58
なるほどありがとうございます。
確かに条件命令の個所は定義とは別にSetされていますし
確実にインスタンスを使用する個所は定義個所でNEWされていました。
納得しました。
507デフォルトの名無しさん:04/08/05 14:04
はじめまして。教えていただきたいのですが、VBで参照設定を選択すると、「システム レジストリへのアクセスエラーが発生しました」
とメッセージが出ます。対象方法はありますでしょうか…。色々と調べてみたのですが、解決策が見つからなくて…。
もし、わかる方がいれば、よろしくお願いいたします。
>>505
別に下の書き方も使わなければ生成されないからメモリを多く食うわけじゃないぞ。
If objdll is Nothing Then
みたいなときに下の書き方だとインスタンスが作られて困ったような気が…
あと、インスタンスを参照するときに毎回実体があるかの確認が入ってパフォーマンスにわずかながらの影響が…


オレの記憶違いならいいんだけど。
すいませんVB.NETすれから誘導されてきました。
学校でVB6.0を使っているのですが
家でやるためにspoke premiumを買うのはやっぱりやめた方がいいでしょうか?
511デフォルトの名無しさん:04/08/05 17:27
>>510

時代は、.NETだ。
安いから買って勉強しろ。
512510:04/08/05 17:37
>>511
それはわかるんですが
互換性の問題などはどうなんでしょうか?
何の互換性を懸念しておるのだ?
>>510
VB6.0とVB.NETはまったくの別言語だ。
515デフォルトの名無しさん:04/08/05 18:48
>>510
家で何をやりたいの?
516510:04/08/05 21:16
>>513-515
レスありがとうございます。
VB.NETはVB6.0の上位互換のような物だと思っていたのですが全く別物なんですね。
安いんで.NETの方を買おうかと思います。
とんちんかんな事言ってましたら、すいません。
質問です。
VB6.0で、ロードされてないフォームの名前を取得する方法ってありますでしょうか?
調べたのですが、FormsコレクションはLoadされた物しか見れないようなので。

具体例としまして・・・
Form1〜6を作成し、
スタートアップフォームをForm1とし、Form1にListboxを置き、
Form1のForm_Loadイベントにて、Form1〜6の名前をListboxに設定したいのです。
ロードされる前のForm1〜Form6のForm名をConst等で持つというのではなく、自動的(?に
取得すること・・・出来ますか?
教えてくださいませ。
できない。
>517
無理。

とんちんかんではないと思う。
どういう物が作りたいのかサッパリ分からんが、
むしろForm1〜6の名前を別の手段で作成し(Constじゃなく生成するなり何なりで)
Form1〜6のLoad時にそれを適用した方がいいんじゃないかと。
この方法じゃどうしてもアカンの?
520517:04/08/06 00:46
>518>519

レスありがとうございます。
無理なんですね・・・わかりました。

上司の「フォーム一杯あって、いちいち追加するごとに名前打つのめんどくさいから
フォーム名を動的に取得できないかなぁ」という一言が発端でして。
調べても無理っぽいと思ったんですが、個人的判断だけでなく、
ほかの方にも意見を伺いたかったものでして。

無理と明日伝えます。ありがとうございました。
6個くらいでウダウダ言うなんて最近暑いとは言え廃人ですよ。
522デフォルトの名無しさん:04/08/06 00:59
フォームが最小化されたときに
最小化されたというイベントを検出する方法は無いでしょうか?
>>522
リサイズとWindowStateを見るか、メッセージ見るか
>>522
Resizeイベント内でAPIのIsIconic使えばできそう
525524:04/08/06 01:10
WindowStateって動的に変わるんだね。表示時の指定だけかと思ってた。
526522:04/08/06 01:37
>>523-524
レスありがとうございます。
さしあたり、WindowStateで検討してみます。
っていうか俺が前スレで同じこと質問して解決した。
>>520
動的に云々に該当するかわからないが、一応関数の引数としてフォームを渡すことも可能だからね。
共通的な処理はフォーム名によらずにできる。

529519:04/08/06 12:50
>517
なんかアリモノを修正してるっぽいな。上司が面倒臭がり屋なだけか?(w

んまぁどうしても、ってならHideしたままLoadして、Formsコレクションの中から
>528の方法で処理するしかないんじゃないかな?
「Loadせずにやれ」って言われたら上司をヌッコロしてよし(w
っていうかロードするにはフォーム名を指定しなければいけないわけで
そんなのフォームを変数に格納すればアプリケーションに1回書くだけだろ?
532 :04/08/06 14:23
自フォーム内でその変数(配列かな?)に格納する関数を作っておいて
hogeAdd(Me)とか書けば、実は1回も書かなくてもコピペだけで
>>533
Formがプロジェクトに1つしかなく、スタートアップに設定されていればな。
535デフォルトの名無しさん:04/08/06 15:22
Format関数について質問があります。

Format( Now, "yyyy")

とした場合年が入るはずですが、なぜかyyyyとセットされている
現象がたまにあります。こういう経験のある方いらっしゃいますか?

VB4・16bitVerです(w
気のせいだ。
背理、背理触れ、背理法、背理入り触れホッホウ
Do: F = Format(Now, "yyyy"): Loop While F = "yyyy"
VB6.0で.NETのクラスを呼び出して使うにはどのように記述すればいいのでしょうか?
>>539
そうさのぅ
北極で月の地面を掘って温泉を発見する感じだね
541デフォルトの名無しさん:04/08/06 18:27
昔から思っていたのですが、
VBでわざわざサブクラス化する価値ってあるんですかねぇ?
>>541
規模によって違ってくるなぁ。
WM_MOVE拾いたいだけなのにVCで作り直すなんてアホらしいけど、、
標準で用意されていないイベントばっかり使うのに、ずっとVBで
画面作り続けるのもアホらしい。

VBのデバッグ機能殺すほど大規模なものなら使わないほうがマシだと思う。
そうじゃなければ使う。
544デフォルトの名無しさん:04/08/07 00:20
コードのサンプルとかを見ていると、関数の戻り値を使いもしないのに
取得しているのはなぜでしょうか。
たとえば、APIでiniファイルにデータを書き込む場合に
Call WritePrivateProfileString(strSection, strKey, strData, striniFn)
とはせずに、
lngRet = WritePrivateProfileString(strSection, strKey, strData, striniFn)
としているような場合です。
>>544
ふつうは使う。
何も考えずにコピペしたからに決まってるだろ。
>>544
俺はデバッグ考えていらなくても一応変数に入れとく。

あと、VBだとCALL付けない時は引数を括弧で括らないことになっているために、
引数が1個で参照渡しの関数の場合、うっかり括弧つけちゃうと
意図せぬ結果になる、という問題を避ける狙いもあるかも。
まあ、その、なんだ、いわゆるYAGNI。
ttp://www.geocities.co.jp/SiliconValley-Oakland/1933/t/20020413.html

ここの通りにバイナリエディタ作ったんですが処理が遅いです
20MBのファイル開くのに30分以上掛かりました。
初心者なんでどの段階が枷になってるか分かりません。
速く展開するにはどうしたらいいですか?
>>549
まさかと思うけど、この通りに作っているわけ?
>>549
大きなサイズのバイナリエディタの作り方としては、これは全く通用しない。
データの読み込みも編集も表示も書き込みも、色々なテクニックが必要だ。
>>549
そこのページにもちゃんと書いてある。
>テストにあまりデカイファイルを使うと激遅いけど(笑)
>>550>>552
おまい達、549は解らないから聞いておるのに、一体何が言いたのじゃ?
@アドバイスが面倒臭い。
A初心者苛め。
B釣り。

>>549
このソースであえて挙げるとするなら、表示・保存が最大のネック。
処理高速化の一番簡単な近道は、ループ処理を減らす事。

上記のソースを元に大雑把にアドバイスするなら
@テキストボックスに表示するデータを16×16等、適当に固定する。
Aページカウンタを設ける。
で、バイナリモードでファイルを読込後、16×16分のデータだけをテキストボックスに表示。
以降、表示はページ単位で処理する。
データ修正後はページカウンタの値を元に、画面内のバイト範囲だけを修正保存する。

以上の修正が出来れば、実用に耐えられる範囲で使えるじゃろう。
後は自分の創意工夫で。もっと高速化も可能。

データサイズが大きい場合は、全て表示・全て保存と考えるのではなく
表示・保存は必要最低限に。発想の転換が大事。
>>549
いまさらあえて言う必要もないと思うが、一連の処理で何処がボトルネックになっているのか知ることも大事。
>>553のいうように、表示・保存の処理については改善すべき点がいくつかあって、幾分か高速化が望めるが、
VBに付属の関数がボトルネック場合は、いろいろと厄介だから気をつけること。
三十何年生きてて得た経験則の一つを紹介しよう。

口調が偉そうな奴のアドバイスはたいてい何のアドバイスにもなっていないか、
ひどくどうでもいいことをさも重要であるかのように書いているだけで。
自ら身を以て示してくれた>>555に感謝だな。
プログラマ業界ってさぁ、>>553みたく初心者に親切に的確なアドバイスしてくれる人って貴重でない?
新人を教えるだいたいの人って、ベテランにしかわからん専門用語を並べ立てて
こんな事も解らんのか?まだ解らんのか?頭わりーなってな感じで、素人のレベルに立って考え様としない
俺様特別みたいな考えの人多くて、全然底辺が育たないんだよねぇ。。。俺の会社だけか?
まぁ、新人にも問題ある人多いけどさ。

そして何事もなく次の質問へどうぞ↓
558デフォルトの名無しさん:04/08/08 00:32
VB6.0sp5を使用しています。

デスクトップのアイコンテキストの背景を透明にする方法を
教えてください。よろしくお願いします。
>>558
その質問、「ものすごく馬鹿な質問」を意図している可能性と、
まあありえなくもない質問を意図している可能性があるけど、
「ものすごく馬鹿な質問」に取られることに対する警戒が少しもないところを見ると、
たぶん君はベタに「ものすごく馬鹿な質問」を場違いにもしていると思われる。

ていうか、いまじゃこんな表現力が欠如しているというか、
他人の視点から自分を見れない奴がPGやってるのか?
>>559
君は会社で空気が読めない香具師だと言われているに違いない。
空気を読んでプログラムを作るなんてとても危険だ
私のことで喧嘩しないで
>>558
CLR_NONEを検索
アクティブXがヒント
>>558
SP6入れないの?
>>563
1.デスクトップのListViewのウィンドウハンドルを取得する。
(FindWindowEx()あたりかな・・・Spy++あたりを使いながら小一時間考えてくらさい)
2.そのListViewにSendMessage()を使ってLVM_SETTEXTBKCOLORを送る。lParamには-1を指定。
(LVM_SETTEXTCOLORを送ればアイコンのテキストの色を取得できます)

動かしてないから、働くかわかんない。ま、ぐぐってみること。
http://www.google.co.jp/search?q=%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E3%80%80%E9%80%8F%E6%98%8E%E3%80%80%E8%83%8C%E6%99%AF+SysListView32&btnG=Google+%E6%A4%9C%E7%B4%A2&hl=ja&ie=UTF-8&c2coff=1
正式なファイル名を取得するには、どうすればよいのですか。
例えば、"c:\program files"と存在するディレクトリ/ファイルを"C:\Program Files"と改めたいです。
親ディレクトリから検索するのは、効率が悪い気がします。
>>567
気にするな。
>>549
手っ取り早かったのは、やっぱり表示と書き込み。
編集しながら文字列変数に入れた上で
TextBoxに入れたり、書き込みすればお手軽。
>>549
PCをスペックアップ汁
>>566
そんなの当然知っているぞ
572566:04/08/08 23:19
>>571
レス番間違えたんですよorz
>>570
素晴らしく簡単で、素晴らしくブルジョワな解決法だな。
>>567
GetLongPathName
ただしc:\program files→c:\Program Filesだったんでドライブ文字は自分で直せ。
>>574
Windowsでは大文字、小文字の違いは無視される。ので、UCase()等を使うのが吉。
つうか、彼は何を基準に”正式な”って言ってるんだろう?
577デフォルトの名無しさん:04/08/09 10:31
テキストボックスに入力するとき、数値のみ入力できるようにしたいのですが、
どのようにすればいいのか 教えて下さい。

入力後チェックではなく、入力(コピペ)できないようにしたいのです。
578デフォルトの名無しさん:04/08/09 10:36
MSFlexGridですが、セルの幅を画面上で変えることができるようにするには、どうしたらいいのでしょうか?
579578:04/08/09 10:37
あ、もちろん、実行時です。
>>577
KeyPressでふせげなかったっけ?

>>578
ColWidthとかその辺は?(行列どっちがどっちだっけ?W)
581578:04/08/09 11:31
>>580

自分で ColWidthを調整しろってこと?
>>581
ごめん、元文を読み違えてた。オペレータがぐいんぐいんできるようにするのね。
プロパティーページのサイズ変更がそのもの。
そこを変えれば、マウスが境界にいったところでぐいんぐいんできるカーソルになるはず。
583578:04/08/09 14:05
>>582
サンクス
AllowUserResizing のことね。
584デフォルトの名無しさん:04/08/09 14:43
KeyPressのイベントでできるの?
>>584
半角数字以外の入力は、すべて例外処理に飛ばすってことでそ。
586577:04/08/09 14:47
>>580

具体的にどうすればいいか教えて。
あと、タブとかカーソルは入力OKみたい。
>>584
マウス右クリックでのクリップボードからの貼り付けで文字を流されるから
それだけではダメだ
まともにやるにはメッセージを処理するしかないね。サブクラス化して。
そういうユーザコントロールを作っておくと便利。
589577:04/08/09 15:03
わりと大変なのね。
どこかにそういうのないのかな?
そんなことをするなら、VBならばコントロール買ったほうがいいね。
安全だし、安定するし、結果安くつくし。数値専用入力とかなら5万もなく買える。
>>589
リロードしないで590書き込んだ。
コントロール探してるなら、まずグレープシティーを見てみる。
あと、コンポーネントワンとかも。
592デフォルトの名無しさん:04/08/09 15:12
5万円はする内容のものなのか・・・。
593デフォルトの名無しさん:04/08/09 15:14
別にコントロールってわけではなくて、イベントで処理できればいいと思うけどね。
まあ、InputManだとしたら他に色々ついてるし。
そもそも5万なんて、1日かそこらの工数でしょ?
社内共通のコンポーネントとして作るならまだしも、そのプロジェクト専用じゃ、自作じゃ割りが合わん。
595デフォルトの名無しさん:04/08/09 15:34
私のコストは 安いから 一日 1万2千円だ(w
>>595
それはあんたの手取り?それとも会社があんたを外に出すときの値段?
後者だとしたら、手取り半分としてコンビニ以下だよ。w
597デフォルトの名無しさん:04/08/09 15:50
もちろん手取りしか わからんぞ。
>>597
大体2.5から3倍ぐらいすれば外に出している値段になるよ。
(会社によって非効率だったり、ボーナスとの給与比で違うけど)

なんで、あなたの工数がまあ1日4万弱として、その金額で安定したいいのもが作れるならよし。
そうじゃなければ、条件が許すならば市販のコントロールを購入。
599デフォルトの名無しさん:04/08/09 16:21
入力制限って そんなに大変?
>>599
元質問者のレベルを一連のやり取りから見ると、とても市販品以下のコストじゃできないでしょ?
メッセージフックとかになった場合、きちんと知識がないと副作用ありだし。
副作用も含めて経験させればいいじゃん
>>601
まあそうだけどね、選択するのは元質問者でちょっと前で買う気になってるし。
603デフォルトの名無しさん:04/08/09 17:28
表示されていないほかの画面(まだLoadされていないと思われる)の
テキストボックスに値をセットすると その画面が表示されてしまいます。

こういうものなのでしょうか?
それとも私が何かしているのでしょうか?
>>603
そういうものです
>>567
質問者じゃないけど、Windows XPで試したら
GetLongPathNameだと、ちゃんと変換してくれるときと、
元のまま返してくるときがある。

http://www31.ocn.ne.jp/~heropa/vb08.htm
↑の人は、一度GetShortPathNameを使ってから
さらにGetLongPathNameを使ってるんだけど、
何か回りくどいような気もする。

というか、一発で実現するAPIは無さそうっすね。
606デフォルトの名無しさん:04/08/09 18:35
>>577
超適当だけど、こんな感じじゃ駄目なん?
テキストボックスのIMEプロパティも変えからどうぞ。

Private Sub Text1_Change()
  Dim curtTmp As Currency
On Error GoTo error
  curtmp = CCur(Text1.Text)
  Exit Sub
error:
  Text1.Text = ""
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
  Select Case KeyAscii
    Case 8
      Exit Sub
    Case 48 To 57
      Exit Sub
    Case Else
      KeyAscii = 0
  End Select
End Sub
>>577
マスクエディット(MaskEdBox)コントロールなんてのがある。
俺は使ったことないけど。
608デフォルトの名無しさん:04/08/09 19:02
>>607
どのコンポーネントを追加すればいいの?

VBって コンポーネントを追加しないと ある程度のものが使えないから イヤだよねぇ。
>>608
Microsoft Masked Edit Control (MSMASK32.OCX)

いまいち使いにくいので、俺もほとんど使わない。
610デフォルトの名無しさん:04/08/09 19:54
使いにくいのか・・・。残念!
マイクロソフトのなんとか斬り〜

って テキトーなのが思い浮かばなかった。
>>610
馬鹿か?自分で試してみたのか?
612デフォルトの名無しさん:04/08/09 20:09
>>611
おまえ、お笑いのネタも知らんのか(w
>>577
普通のテキストボックスの上に、>>606のソース貼り付けたテキストボックス重ねればいーじゃない。
OKなら下のテキストに反映、上は退避。

んでも話の流からして、君には無理そうだ。
5万円?

Private Sub Text_Entry_MouseDown(Index As Integer, Button As Integer, _
                       Shift As Integer, X As Single, y As Single)
  If Button = vbRightButton Then
    Dim ret As Long
    ret = SetCapture(Me.hwnd)
  End If
End Sub


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyV And Shift = 2 Then
    If IsNumeric(Clipboard.GetText) = True Then
      Me.ActiveControl.Text = Clipboard.GetText
      KeyCode = 0: Exit Sub
    End If
  End If
End Sub
>>614
せいぜい500円。
問題点はわかってる?
>>614 でいいや。
617614:04/08/09 20:27
>>615 まだ穴あいてる?
>>614
Price less
>>617
ああ。IsNumericはここでは相応しくない。それと・・・
5万円のソース目指すには足りなすぎる。自分で色々ためしてみた?
テキストボックスのチェンジイベントで

public strOldtext as string
---------------------------------
for i = 1 to len(textbox1.text)
if Not(48 <= Asc(Mid(textbox1.text, i , 1)) <= 57) then
textbox1.text = strOldtext
exit sub
end if
next
strOldtext = textbox1.text
---------------------------------
こんなんじゃだめなん?




>>620
プラスやマイナス、小数点にカンマ、その他色々
あそうだね・・・数字だけかと思ってた。
まぁ条件分岐を追加すればいいだけど。

文字が増えるたびに再三同じものをチェックするのは
あまり美しくないど。
>>606, 614
大枠これでいいんじゃないかな。
あとはトライアンドエラーで潰せるレベル。

>>619
>IsNumericはここでは相応しくない
詳しく
>>623
IsNumericの問題は過去スレで論議あり。
621の問題にも通じるものがある。
>>624
プラス、マイナス、小数点にカンマが混じっててもOKなハズだが?
その他色々が混じってて数値とよべるものがある?あ、過去スレね。はいはい。
俺なら見やすさとメンテナンスとか色々ひっくるめて
>>606>>613の案を取るかなぁ。
>>614>>620だと、新人とかVB経験浅い人は何やってるか解らないだろうし
修正入った時に弄れそうにない。
>>614 はコピペの抑止しかやってないよ。
>>625
例えば、1E1、&10なんかが、IsNumericだとTrueになる。
>>623が言うみたく、>>606>>614がケコーンするば幸せになれる。
>>626
色々ひっくるめてってあんた。
新人だろうと浅かろうと、そんなレベルの低いことを言ってくれるなよ。
>>628
数値として評価できればいいんじゃ・・・
Isnumeric()通した後Clng(), CCur() 等で変換してオケ。
>>630
626の言い分はともかく、悲しいかなそれも現実だ。
ベテランは新人を育ててる時間なんてないしな。
ループにFor文使わず、Gotoで回してた強者もいたし・・・・・新人って怖い。
>>631
おまいさん、プログラマな感覚から離れてみてはどうか?
プログラムのプの字も知らないお客さんが、間違って1Aとか入力しちゃったとしよう。
でだ、エンター押した瞬間に数字に変身よ?何も知らない方としてどう思う?
壊れてんじゃねーの?とか思わん??
勝手に>>614を修正するとこうかな。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyV And Shift = 2 Then
    If IsNumeric(Clipboard.GetText) = True Then
      Me.ActiveControl.Text = CLng(Clipboard.GetText)
      'Me.ActiveControl.Text = CCur(Clipboard.GetText)
      KeyCode = 0: Exit Sub
    End If
  End If
End Sub
>>633
>>606で抑止済み。
>>633
「ああ、数値項目なんだな」としか思わんが。
637善人プログラマ:04/08/09 21:46
私の見解を述べさせてもらう。

なぜ世の中にはベテランと新人がいるのかわからん。
このような経験差、能力差がなければ、もっと柔軟で心のこもった
ソースが書けるのに、と最近つくづく思う。
やはり教育というのは大事なものだと思う。最近の新人プログラマは
昔のプログラマに比べて圧倒的に基礎力がないというのも
悲しいかな事実だと思う。それにベテランがいらついて、怒鳴りつけられたして
自信のなくした新人が、自分のプライドを守るために、ベテランを憎むようになる。
これでは、本当の意味での心の通い合いというものがまるで生まれない。
ここに社会の混沌を招く一つの要因であるように思う。
>>637
優しく教えてやれよ。
>>637
スレ違いとは思うが
無能はいつまでたっても無能
できるやつは教えなくてもできるやつ
入社前までにある程度良質のプログラム書けるやつ以外は入れる必要なし。
逆恨みなんてするアホにつきあう必要無い
>>637はむしろ悪人
なんていうかジョン・レノンのイマジンの世界だな。
ここは>>557指摘する典型の人が、盛り沢山集るスレです。

>>639
そんな出来る人間は、底辺の会社になんて見向きもしてくれね〜のさ。。。
底辺の会社は、地道に育てていくしかね〜のさ。

ルールルルルー
643デフォルトの名無しさん:04/08/09 22:42
私の見解を述べさせてもらう。

なぜ世の中には内職商法があるのか。
このような企業、ネットワークがなければ、もっと柔軟でリーズナブルな
職を探せる、と最近つくづく思う。
やはり就職というのは大事なものだと思う。最近の企業は
昔の企業に比べて圧倒的に信用がないというのも
悲しいかな事実だと思う。それに俺のような人間がいらついて、怒鳴りつけて警察に通報されたりして
折角設立した会社が、元をとる前に、警察のブラックリストに載る。
これでは、本当の意味でビジネスというものは、まるで生まれない。
ここに求人案内の存在自体が詐欺行為のほう助として現実にあることが伺える
さすがにあきたな
次の質問の方どうぞ↓
↑お願いします
実行中なのに、EXEのファイル名が変更できてしまいます。
普通は変えられないと思うのですが、何でですか?
できればVBの質問をお願いします。
648デフォルトの名無しさん:04/08/10 01:37
で、結局5万円のコントロール買わなきゃいかんのん?
>>648
作ればいい。どっちが得かは別。
>>646
EXEファイルは実行前に全てメモリにロードされて実行中は既にEXEファイルは不要になっているから。
651デフォルトの名無しさん:04/08/10 09:59
614ので SetCapture ってあるけど、アレは何?
DLLをレジストしないで、VBから使用する方法ってないでしょうか?
CreateObject ("ここにDLLのパス")
↑これだとDLL自体呼び出せませんでした…
やっぱりAPIとか使用しないと無理でしょうか?
653デフォルトの名無しさん:04/08/10 10:10
起動時に レジストして、終了時にレジストから削除するとか・・・。
レジストリにキーを揮発性(再起動すると勝手に消える)で
書き込むことってできるんだよな。
これを利用すればレジストリに登録していないかのように
使えるはずなんだが。
655デフォルトの名無しさん:04/08/10 10:22
MSFlexGridで、EnabledをFalseにしたとき、セルの文字を
薄くしたいのですが、どうしたらいいのでしょうか?
656デフォルトの名無しさん:04/08/10 10:24
馬鹿らしい質問かも知れませんが教えてください。

spdSpread.
と.まで打つと定数の一覧が表示されるのですが、一瞬で消えてしまいます。
以降 = と打つとTrue False の選択も表示されますがこれもすぐに消えてしまいます。

一瞬で消えられ困っています。
どうすればよいのでしょうか?

教えてください。よろしくお願いいたします。
657デフォルトの名無しさん:04/08/10 10:25
Ctrl+Space で 何度も出せる。
658656:04/08/10 10:29
>>657
Ctrl+Spaceで出ました。
しかし種類を選択する間もなく消えてしまいます…。
押しっぱなしだと選択できないです。
うう、定数をあまり覚えてないので辛いです
659549:04/08/10 11:26
わからない。誰か速いバイナリエディタのソース書いて下さい。
そんなことより、>>577
コピペ対策はクリップボード監視でどうでしょうか?
下は特には関係無いけど・・・・・・・
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc("0") Then
Exit Sub
ElseIf KeyAscii = Asc("1") Then
Exit Sub
ElseIf KeyAscii = Asc("2") Then
Exit Sub
ElseIf KeyAscii = Asc("3") Then
Exit Sub
〜〜〜〜〜〜(途中略)〜〜〜〜〜〜〜〜〜
ElseIf KeyAscii = Asc("8") Then
Exit Sub
ElseIf KeyAscii = Asc("9") Then
Exit Sub
Else
KeyAscii = 0
End If
End Sub
>>659
ポカーン
>>659
なめてるのか
話の流れを一切見ずに馬鹿な書き込みをして恥ずかしくないのか?
処理自体が論外なのは、昨晩のやり取りを見れば一目瞭然。

それに、せめてIF-ELSEの連続じゃなくて不等号で一発でやれよ。
文字コードに関して一切理解していないって公言してるソースだぞ。
>>660-662
いや、誤爆だろ。
664デフォルトの名無しさん:04/08/10 13:30
>>663

>下は特には関係無いけど・・・・・・・

何も関係ないようです(w
665デフォルトの名無しさん:04/08/10 13:39
そんなことより誰か655を教えて。
666652:04/08/10 14:18
>>653 >>654
サンクスです。
>>654の揮発性で書き込む関数が、自分が無知なせいか
調べても分からなかったので、>>653の方法でいこうと思います。
とりあえずDLLはレジストする事が前提って事ですね。

>>665
文字色を灰色にする。
668デフォルトの名無しさん:04/08/10 15:30
>>667
ソース見せて
669デフォルトの名無しさん:04/08/10 15:31
Enabledを戻すときは、最初から灰色は 灰色のままだぞ。
>>668
お前の態度が気に入らない
671デフォルトの名無しさん:04/08/10 15:41
>>670
たかがBasicでもったいぶるなよ(プ
672デフォルトの名無しさん:04/08/10 15:48
>>671
もったいぶる以前の問題。
できるわけがない。
>>671はたかがブビも使えない奴。ゲラ
674デフォルトの名無しさん:04/08/10 19:02
とかいいつつ誰にもできない罠w
675デフォルトの名無しさん:04/08/10 19:16
VBで、Cでいうdeffineってできますか?
できるならやり方を教えてください。
よろしくお願いします。
>>675
#Const のことか?
677デフォルトの名無しさん:04/08/10 19:32
HSPで言う

#define pr print

のことです。
説明にはprはprint命令と同じになる、と書いてます。
>>659
>>606のKeyPress部と君の書いてる処理の結果はたいして変わらん。
しかし、そのソースが書けるなら
どちらが無駄なく美しいか、一目見て解らんか?何がしたかったんだ?

バイナリだって、>>553が簡単に説明してくれている。
参考のソースは16列まで連結してくれているんだから
For文をMAX16行までにすれば良いんだ。
For i=Lbound(byTMP) To Ubound(byTMP)
の部分を
For i=Lbound(byTMP) To 15
と書きかえるだけで、初回表示なら速くなる。

こののままだと永遠に0〜15の表示しか出来ないが
553の言ってる事はこんな感じだ。
クルップボード監視やらが解るなら
後のページカウンタ、保存の部分だって理解できるだろ?
配列の順番を操作するだけだぞ?
#define HOGE_HOGE 0

Private Const HOGE_HOGE As Integer = 0
みたいに定数の定義はできるけど、マクロとして使うのは無理だと思う。
>>678
言っても無駄でしょう。
>>675
Cのなんでもできちゃう置き換えのDefineは無いよ。
C++とかの定数としてのConstはみんな言っているけどConstがある。

他の言語でもそうだけど、型の制限とかも出来ないDefineは避けるべき。

テクニカル(というか自己満足)なソースはDefineを使えば組めるんだけど、
可読性、メンテナンス性を犠牲にするので、Constとかを使うのが普通。
682675:04/08/10 19:45
わかりました。
アドバイスしてくれたみなさんありがとうございました!
683デフォルトの名無しさん:04/08/10 22:36
oracle8i + VB6.0 で開発しています。
BBテーブルのレコード(70万件)をAAテーブルにコピーし、同一にしたいです。
毎回 AAテーブルのデータを削除して、もう一度insert するのは大変なので、
前回コピーした差分だけを更新コピーしたいです。
hincdに主キーがかかってる場合、BBからAAにinsert構文があっても、
差分しか追加されないということは、わかりました。
下記のようなコードでいいのでしょうか?

INSERT INTO AA(hincd,hinnm) SELECT hincd,hinnm FROM BB;

>>574
>>575
>>605
ありがとうございます。GetLongPathNameは比較的新しいAPIのようですね。
一緒にLB_DIRでロングファイルネームを扱いたかったところだったので、DOSベースの9x系を捨てて2000/XPに限定して動かすことにします。
FindFirstFileで列挙してると、ディスクがガリガリして激しくウルサくて、遅いですね。
>>683
やった結果主キーエラーでしょ?
後のSQLでAに存在しないBという一文を入れないと。(EXISTSで書ける)

で、もともとAにある奴って更新しなくていいの?
普通こういう処理ってあった場合はUPDATE、なければINSERTでしょ?
>>684
98/MeならGetLongPathNameは動くぞ、動かせ。
687デフォルトの名無しさん:04/08/11 13:01
>>685 ありがとう

BBには常に新しい、レコードが発生するんですけど、
AAにはそのBBで発生した(hincd,hinnm)の項目だけを更新したいんですよ。
BBはオフコンからのレプリケーションでオラクルにデータ移行してるんで、
BBのテーブルとAAテーブルを常に同じにしたいです。

688デフォルトの名無しさん:04/08/11 13:08
vsFlexGridの質問なので若干スレ違いとは思いますがよろしくお願いします。

NT4.0(SP6a)、VB6(SP5)でFlexGrid6.0を使用しています。
FlexGridのColComboListプロパティを使って特定の列をコンボボックスに
しているのですが、コンボボックスの項目数を表すプロパティComboCountが
-1になってしまいます。
設定そのものは成功しているようです。表示させてマウスでセルをクリックすると
指定した内容がちゃんと出てきます。
ですが、内部で項目数を調べ、ある条件に該当する項目を自動的に表示させようと
すると、ComboCountが-1なのでエラーが発生してしまいます。

正常なプロパティを得るにはどうしたらいいのでしょうか。
689688:04/08/11 15:13
自己解決しました。
一度実体化させてからでないと有効にならないようです。
お騒がせしました。
質問させていただきます。
マウスポインタを窓の裏側にまわす方法はありますでしょうか?
裏側って何だよ
あれでしょ、筋のある側。
693690:04/08/12 10:28
説明不足でスマソ
たとえ、ば半透明の何かの画像を最前面に表示させっぱなしの状態で
マウス操作は画像を無視して(画像の窓の裏側にまわす)
画像がないときと同じように普通の操作はできないかと


>>693
ret = SetCapture(画像の窓の裏側のウインドウ.hwnd)
初心者的な質問で申し訳ないのですが、
変数の宣言で
N=3
dim A(N,N)
のように変数を用いる方法は無いでしょうか?
もしくは、Nのところがプログラムで使用される任意の大きさに対応されるような
宣言の方法は無いでしょうか?
Option Explicit を消せと言われればそれまでなんですが・・・
Dim A()
Redim A(N,N)
697デフォルトの名無しさん:04/08/12 18:51
質問です。

Private Sub Form_Resize()
If WindowState <> vbMinimized Then
With WebBrowser1
.Hight = Form1.Height - 1150 ←
.Width = Form1.Width - 350
End With
End If
End Sub

矢印のところに「オブジェクトはこの特性あるいは方法を支援しません」という趣旨のエラーが表示されるんですけど、
この部分はどう改善すればいいんですか?
1150引いてゼロ以下になってるんじゃネーノ?
>>693
マウスフック
700697:04/08/12 19:10
>>698
いくら数字を低くしてもエラーが出るんですが…
というかそもそもWebBrowserのHightってどうやったら調べられるんですか?
初心者な質問ですみません。
701697:04/08/12 19:14
間違えた。FormのHightでした。
ソースにもHightって書いてるんじゃないか?
>>701
あ、ほんとだ。
見落としてました(汗

やっと解決できた…
ありがとうございました。
704697:04/08/12 19:24
>>703のレスは>>702の間違いです。
ネタでしょ?なんかハマグチェみたい。。
でもこれ「ヘイト」って読む奴がマジで多いんだよな。。
このスレにも笑えない奴がいるはず。
ファイル切り貼り処理を行うに当たって、既に同じ名前のファイルがあるとエラーになってしまいます。
その場合は上書きで処理したいのですが、どう書けばいいでしょうか?
現在以下のようなコードで切り貼り処理をしています。

'strOKU_FILE = 切取側ファイルパス
'strUKE_FILE = 貼付側ファイルパス
Set FsoFile = fso.GetFile(strOKU_FILE)
FsoFile.Move (strUKE_FILE)
707デフォルトの名無しさん:04/08/12 20:03
>>706
VB.NETスレに貼ってきたよ。
Visual Basic 6.0 Pro SP6 @ Windows Meで使っているのですが、
物理メモリを指定したサイズ確保して解放するというプログラムって作れませんか?
いわゆるめもりーくりーなーのような動作を行いたいのです。
ぐぐっても変数のメモリを解放するといった内容しか出てこなくてお手上げでした。
delete & copy
>>708
作るにしても、VBで作るもんじゃねーよな。
システムコールしたりAPIだけのプログラムじゃないの?
711708:04/08/12 23:19
>>710
実を言うとめもりーくりーなーでサイズを与えるとそのサイズ分解放するっていう動作を
別なプログラムから使いたかったんです。
でもそれを実行させるために、めもりーくりーなー本体とdllだけを移動させて実行すると
「ディレクトリ付きで解凍されていない」と怒られたため、だったら自分で作って使えばいいやと思ったわけです。
APIか何かのサンプルでもあればいいのですが・・・。
712デフォルトの名無しさん:04/08/12 23:21
VBで複数の値を返す関数って作れますか?
VBは配列とかないみたいなので、うまく複数の値を返せません。
どうしたらいいでしょうか?
配列あるよ・・・。
クラスもあるよ
(  д ) ゜ ゜
716デフォルトの名無しさん:04/08/12 23:28
ほんとだ。配列あった。
括弧()で指定するんですね。[]じゃなくて。Thanks.
717683:04/08/12 23:32
SQL文は下記のような感じでいいのかな??

INSERT INTO AA(hincd,hinnm) SELECT hincd,hinnm
FROM BB WHERE EXISTS (SELECT hincd,hinnm FROM AA WHERE AA.hincd = BB.hincd)

AAテーブルとBBテーブルを同データにしたいです。
BBテーブルはオフコンからのレプリケーションテーブルの為
常にユーザー入力があるのですが、AAには無いのです。

どうか尊敬する2CHの尊敬する先輩方、お願いいたします。


>>717
SQLじゃなくてOracleの機能を使ったほうがいいんじゃない?
719サッカー日本がんばれ:04/08/12 23:42
今まで開発はACCESSしかしていなかったのですが、
今回の仕事からVBでしている、ナンチャッテPGです。

フォームで明細画面を作る場合、ACCESSではサブフォームって感じで、
明細行が発生する限り自動で作成してくれてたんですが、
それがVBではできないのでしょうか??
上記ででていた、配列を使用すればできると聞いてんですが。
職場の先輩に聞くのも、失礼ですし。・・
あんまり聞くと自分で学習する能力がないと思われるから。 
ナンチャッテにもほどがある
721717:04/08/12 23:45
>>718
ありがとう。
oracleのトリガー機能を使おうと思ったんですけれども
客からレプリケーションに影響がでるのではないかといわれてるんで
だめなんです。
なんとか,VBの中にSQL文を書き込んで処理しなければなりません。
皆さん、お知恵をお貸しください。
722706:04/08/13 00:15
>707
すいません。スレ違いだったでしょうか?
そのスレは何処ですか?この板のVB.NET質問スレを見てみましたが、それらしいレスは無かったのですが・・・
>>719
>自分で学習する能力がないと思われるから
実際、無いんじゃん。
>>721
影響あるかといわれれば、トリガーで何かあっても相手に影響はないでしょ?
レプリケーションのスナップショットの更新と、こっちのエラーは影響しえない。
725デフォルトの名無しさん:04/08/13 08:56
>>722
ここは、VB6.0スレです。
↓見てください。
http://pc5.2ch.net/test/read.cgi/tech/1088812165/478-481
726saya:04/08/13 09:20
失礼ながらVBの質問です(^^;)

今、私はVBの改造をしているのですが、仕様をみるところ構造体の中に構造体を
作る内容になっているのですが、そんなこと可能なのですか??
VBそのものを改造してるの?すごいね
728saya:04/08/13 09:36
あっ、いや、違うんですよ。「VBで改造」です(>_<;)
ごめんなさい。。。
>>726
できる。
ところでお前、デフォルトの名無しさんが全部同一人物だと思っているだろ。
730saya:04/08/13 09:45
えっ!?ひとり芝居なんですか!?
731デフォルトの名無しさん:04/08/13 10:10
VBで作ったActiveX DLLをエクセルVBAで使いたいのですが
Excel2002だけインストールされているパソコンでそのDLLを使う場合
ランタイムは必要ですか?

Windows2000
VB6.0
Excel2002
>>731
必要
いらないんじゃない?
734731:04/08/13 12:54
>>732
>>733
テストできるマシンがないので試せませんが
作ったDLLの中にランタイムも含んでいると考えるのが普通でしょうか?


>>734
それはない
>>734
基本的には要る。
737731:04/08/13 13:31
試してみないとわからないということでしょうか/////

インストーラにかけてみると登録するコンポーネントがでてくるから
わかるかもしれません。
そのコンポーネントはたぶん、.vbpのreferenceだと思いますが。。。

お勧めのインストーラ教えてください

738デフォルトの名無しさん:04/08/14 01:34
VB6で、c:\hoge\hogefileと同名のファイル、ディレクトリの有無をしらべたいのですが、
以下の問題でどうしたらいいか迷っています。

1.Dir関数だと、ファイルが隠し属性のとき、検出できません。
2.GetAttr関数だと、ファイルが存在しない場合、エラーを起こしてしまいます。

2.について、GetAttrがエラーを起こす場合は、ファイルやディレクトリが存在しない場合のみ
であれば、On Error Resume Next でエラーを無視しようと思っているのですが、どうなのでしょうか?

何かよい方法があれば、教えてください。
objFoldersColl.Item(index) でナッチさせるのは?
>>738
Dir関数の第二引数にvbHidden を指定すれば隠し属性も検出するぞ。
わかってるかもしれんが、
「ファイル又はディレクトリがあるか?」判断するならいいけど
「ファイルがあるか?」を判断するなら
GetAttrの戻り値にvbDirectoryが含まれていないことも
確認せんといかんぞ。
741738:04/08/14 03:25
>>740
調べなおしました。
@ファイルがない、A通常ファイル の場合をOKとして、
Bリードオンリー、Cシステムファイル、Dディレクトリ、E隠しファイル の場合をNGとしたく。
Dir関数を調べたら、↓になりました。(Win2000,VB6sp5)
┌─┬─┬─┬─┬─┬─┐
│@│A│B│C│D│E│処理
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│0│Dir("c:\hoge\hogefile" )
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│1│0│Dir("c:\hoge\hogefile", vbDirectory)
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│1│Dir("c:\hoge\hogefile", vbHidden)
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│0│Dir("c:\hoge\hogefile", vbNormal)
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│0│Dir("c:\hoge\hogefile", vbReadOnly)
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│0│Dir("c:\hoge\hogefile", vbSystem)
└─┴─┴─┴─┴─┴─┴──────────────────
@とC、AとBの区別がつきません。
そこで、AとBは、
Rtn = GetAttr("c:\hoge\hogefile") And vbReadOnly
で、区別がつきましたが、@とCは、
Rtn = GetAttr("c:\hoge\hogefile") And vbSystem
としたとき、@では、エラーを起こしてしまいます。

↑のとき、GetAttr関数でエラーを起こす=ファイルがないと判断していいんでしょうか?
φルが無い→エラー でないの?
743デフォルトの名無しさん:04/08/14 10:11
オブジェクトを動的生成した後のイベントの実装に関して聞きたいのですが

Private WithEvents test As CommandButton

Private Sub Command1_Click()
Set DynButton = Form1.Controls.Add("VB.CommandButton", "test")
End Sub

とかでオブジェクトの動的生成した後、

Private Sub test_Click()
MsgBox "OK"
End Sub

とやれば、イベントが取得できることまでは分かったのですが
オブジェクト名称を変数にして動的生成を行い、そのオブジェクトの
イベントを取得する方法が分かりません。
つまり、n個のオブジェクトを動的に生成したのだが、
n個分のイベントの取得方法が分からないという事です。

動的生成したいオブジェクト
・フレーム、テキストボックス、ラベル、フレキシブルグリッド
※フレキシブルグリッドがオブジェクト動的生成時の配列に
対応していなかったと思います。。

個人的用途で貸借対照表の入力画面を作っているのだが、、、
これが、障害でなかなか先に進めない・・・
>>743
コントロール配列に追加するようにすればいいのでは?

というか、個人的には「コントロールを実行時に動的に生成する必要がある」
というのは単なる思い込みのような気がするんだけど。
動的生成に固執する理由ってあります?
745デフォルトの名無しさん:04/08/14 12:56
Form上のキー入力で、ALTキー+CTLキーが
入力されたのを知りたいのですが、
どうすればいいのでしょうか?

>>745
FormのKeyPreviewをTrueにして
KeyDownでGetKeyboardStateなどの関数で同時押しをしらべたり。
用途によってはキーの状態の変化を見てやらないといかんがね。
747デフォルトの名無しさん:04/08/14 14:11
>>746

そこらへんを具体的にどうすればいいのか教えてください
>>747
キーワードでぐぐるとか、MSDNで調べるとかしてみた?
749デフォルトの名無しさん:04/08/14 14:51
>>748
キーワードでぐぐるとか、MSDNで調べるとかしてみた?
ここのその1〜その3が参考になるんでないの。
ttp://www.mb.ccnw.ne.jp/garger-studio/vbgame/141.html
>>743
コントロールをラップするクラスを作って
動的に作成したオブジェクトのそれぞれのイベントは
そのクラス内で受け取るようにすればいけると思うよ。
ラップクラスには識別子を持たせれば
どのオブジェクトでイベントが発生したのかもわかるし。
こんな感じ。
-------------------------------
クラス:cButton

Public WithEvents mControl As CommandButton
Private mEventHandler As IClickEvent
Private mIndex As Long

Public Sub Create(ByRef Frm As Form, ByVal Index As Long, ByRef EventHandler As IClickEvent)
  Set mControl = Frm.Controls.Add("VB.CommandButton", "cButton_" + Format$(Index))
  Set mEventHandler = EventHandler
  mIndex = Index
End Sub
Private Sub mControl_Click()
  mEventHandler.OnClick mIndex
End Sub

-------------------------------
クラス(インターフェース):IClickEvent

Public Sub OnClick(ByVal Index As Long)
End Sub

つづき
-------------------------------
フォーム:適当な名前

Implements IClickEvent
Private mBtn(4) As cButton

Private Sub Form_Load()
  Dim x As Long
  For x = 0 To 4
    Set mBtn(x) = New cButton
    mBtn(x).Create Me, x, Me
    With mBtn(x).mControl
      .Move 0, x * .Height: .Caption = "ボタン " + Format$(x): .Visible = True
    End With
  Next
End Sub
Private Sub IClickEvent_OnClick(ByVal Index As Long)
  MsgBox "Button" + Format$(Index) + " Click"
End Sub

754743:04/08/14 21:27
>744様
フレーム、テキストボックス、ラベルは、コントロール配列が
できたか、、と思うのですが、フレキシブルグリッドが配列に
できないようです。。
動的生成にしたい訳は、有価証券報告書の各社の貸借対照表に
柔軟に対応したいからです。。(項目の分け方、記述内容が微妙に
違い、数を明確に定めることが難しい。。)
>752様
アドバイス、有難う御座います。
クラスですか。。。当方、クラスとかを使ったことが無いため、、
思いもよりませんでした。。
早速、上記のコードでサンプルを作ってみます。
>>754
VB6で確認しましたが、フレキシブルグリッドのコントロール配列に
実行時に動的に新しいコントロール(つまりフレキシブルグリッド)
追加することできましたよ?

確認したのはこんなコード。
フォームにFlexGridという名前のフレキシブルグリッドを一つ貼り付けて
Indexプロパティを0に設定しておきます。

Private Sub Command1_Click()
Static count As Integer

count = count + 1
Load FlexGrid(count)
With FlexGrid(count)
.Left = FlexGrid(count - 1).Left + 1000
.Top = FlexGrid(count - 1).Top + 1000
.Visible = True
End With
End Sub
756デフォルトの名無しさん:04/08/15 14:22
こんにちわです。手持ちのVBはVer4.0です。

これで、特定のフォルダ内の古くなったフォルダ(例えば作成後5分経過)を消去する
プログラムを組みたいと思っています。

タイマーで30秒ごとに起動され、今の時間と比較して、そのフォルダが作成後5分以上
経過していれば消去するような形ですね。

ファイルを消去するものならば、Dirのループ+FileDateTime(pathname)で現在時間と
比較して実行すももの作ったことがありますが、フォルダが作成された日付時間は
どうやれば分かるんでしょうか?

VB4.0では出来ないんでしょうか?

以上、よろしくお願い致します。m(==)m

>>756
ぐぐればすぐ出てくるべ?どうして検索しないのか理解に苦しむ。
ttp://www.bekkoame.ne.jp/~ilgg/VBMain/VB/Folder/FileDate.html
758デフォルトの名無しさん:04/08/15 23:54
inetコントロールをつかって、DIRコマンドでディレクトリ名を取得しようと
しているのですが、うまくいきません。
インターネット環境が、ルーターを使ってる場合、特別な設定が
必要なのでしょうか。

ちなみに、プログラムは、イベントプロシージャが次のとおりです。

Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vntGetData As Variant
If State = icResponseCompleted Then
vntGetData = Inet1.GetChunk(1256, icString)
MsgBox vntGetData
End If
End Sub

設定するサブプロシージャが次のとおりです。

Private Sub aak()
With Inet1
.url = "ftp://ftp.microsoft.com/"
.Execute , "DIR"
End With

Do While Inet1.StillExecuting = True
DoEvents
Loop
End Sub
>>758
うまくいきませんなんて書かずにどうなるかくらい書きやがって下さいませんかね
は?知りたければ試せって?そうですか。ごもっともでございます。
>>759
実行しても、ディレクトリを取得できないんです。
反応なしで。
761全然わかりません。お教えください。:04/08/16 05:50
oracle8i + VB6.0 で開発しています。
BBテーブルのレコード(70万件)をAAテーブルにコピーし、同一にしたいです。
毎回 AAテーブルのデータを削除して、もう一度insert するのは大変なので、
前回コピーした差分だけを更新コピーしたいです。
下記のSQLでできるとは思いますが、Oracleのトリガーを使ったほうが安定するのでは
ないかと思うんですが、トリガの使い方をネットで検索しているんですがどうもあまり掲載されて
ないようです。
よければ皆様お教えください

INSERT INTO AA(hincd,hinnm) SELECT hincd,hinnm
FROM BB WHERE EXISTS (SELECT hincd,hinnm FROM AA WHERE AA.hincd = BB.hincd)
スレ違いかと思ったが一応VBなんですかね
763デフォルトの名無しさん:04/08/16 06:27
GetAsyncKeyStateで Ctrl+Altをどうやったらわかるのか
さっぱし わかりません。
指定するキーコードは いくつなんでしょうか?

二つの場合は、二回 それぞれで調べるのでしょうか?
764763:04/08/16 07:53
Altのキーコードが不明です。
あとどのイベントで調べたらいいのでしょうか?
Formには いくつかボタンが貼ってある状態です。
フォーカスは、ボタンにあります。
>>761
ORACLEのHPに逝けば、マニュアルを無償でDLできます。
まず、それを見て理解できなければもう一度。
トリガーについては、きちんと理解しないと、トランザクションとの関係やパフォーマンスに問題が出ます。
766デフォルトの名無しさん:04/08/16 09:57
>>761
オラクルのスレにもカキコしてるな
マルチかよ!
767デフォルトの名無しさん:04/08/16 09:58
Formやコードのウィンドウのみを一回で 全部閉じるには どうしらたいいのでしょうか?
>>767
IDEのを?
Ctrl+F4押しっぱなし
>>763
>>746見ろ
inetコントロールのことが馬鹿にもわかるサイトを教えてください。 m(_ _)m
771デフォルトの名無しさん:04/08/16 11:22
>>769
やってみたのか?
やってわかったなら教えてくれ。
>>771
やってみたのか?
>>763
じゃあFormのKeyUPとDownでShift見るだけでもいいよ。
774デフォルトの名無しさん:04/08/16 11:51
>>773
Shiftで ALTキーが 押されてるのかわかるの?
>>774
やってみたのか?
つーか、やれよ。
776758:04/08/16 11:55
だれか、>>758に答えてください。
お願いします。
777デフォルトの名無しさん:04/08/16 11:57
CtrlとAltキーだけが 押されてるのって どうやってわかるのかな?
>>777
きちんとイベント関数のヘルプぐらい嫁。
ビットが立つからそれぞれを見ればわかるだろ?
>>777
Shift And (vbAltMask Or vbCtrlMask)) = (vbAltMask Or vbCtrlMask
780777:04/08/16 12:09
>>779

たとえば Aを押しながら CtrlとAltを押す場合
CtrlとAlt以外も押されてるから 無効としたいのだ。

Shiftは 6にしかならんが、どうなんだ?
>>780
ビット演算ってものを理解しろ。
普通にVB使ってるときはこの部分でだけ必要になる。
>776
まずは基本中の基本、「何がどううまくいかなくてどんなエラーメッセージが出るのか」を書いてみれ
>>780
なんだその態度は。
答えはすでに出ているだろうが。
Private Const VK_CONTROL = &H11 'Ctrl
Private Const VK_MENU = &H12 'Alt
GetAsyncKeyStateだとそれぞれ検出するならいけたみたい。
If (GetAsyncKeyState(VK_CONTROL) <> 0) And
(GetAsyncKeyState(VK_MENU) <> 0) Then
MsgBox "both"
End If

>>784
それじゃ他のキーが押されてる云々ができねーだろ
GetKeyboardStateでしらべりゃいいのに
786758:04/08/16 12:32
>>782
実行しても何も起きないんですよ。
>>786
うちではちゃんと動くな。
IEに ftp://ftp.microsoft.com/と入れるとどうなる
Call GetKeyboardState(state(0))
If state(VK_CONTROL) And &H80 And _
state(VK_MENU) And &H80 Then
MsgBox "こうですか?"
End If
789758:04/08/16 12:38
>>787
IEにいれたら、フォルダーが表示されてます。
>>788
違うだろ!
他のキー全て見ないとできねえだろ!
If state(VK_CONTROL) And &H80 And _
state(VK_MENU) And &H80 Then
For i = 1 To &HFE Step 1
Select Case i
Case VK_CONTROL, VK_MENU, VK_HANJA, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU, &HF0, &HF3, VK_ATTN, VK_ZOOM
Case Else
If state(i) And &H80 Then
Label1 = "別のも入ってる"
Exit Sub
End If
End Select
Next
Label1 = "AltとCtrlのみ?"
End If
すまん。ちゃんと他のも除去しないとだめなのか。
何か勝手に押されてる事になってるの多いなぁ・・・
792デフォルトの名無しさん:04/08/16 13:22
>>791
けっこう チェックが必要なのね。
793デフォルトの名無しさん:04/08/16 13:23
ん?!
>>791

最初の
Case VK_CONTROL, VK_MENU, VK_HANJA, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU, &HF0, &HF3, VK_ATTN, VK_ZOOM
は 何?
>793
えっと、
左Ctrlと左Altだけ押してそれでもまだ押してる状態って
判定されちゃったキーコードを除外していったらこんなことに・・・
理由は不明(特に定数ないやつなんてMSDNでみたら
「OEM specific」だとか何とか。
795デフォルトの名無しさん:04/08/16 13:34
>>794

右のCtrlとAltを区別しないとすると 別の処理が必要ですか?
>795
上のコードだと一応右左のどっちも区別せずにいけると思います。
キーコード定数に両方と左右で区別されて用意されてるのはそういうことなのかなぁ・・・
ttp://www.indigorose.com/webhelp/ams50/Program_Reference/Misc/Virtual_Key_Codes.htm
797デフォルトの名無しさん:04/08/16 13:42
質問させてください。
VB6で、タスクバーに入ってるウィンドウ(最小化されている)を、
タスクバーをクリックでなく、プログラムから復帰させるにはどうすればいいでしょうか?

別ウィンドウでボタンを押したら開くみたいにしたいのですが…
798デフォルトの名無しさん:04/08/16 13:47
show ?
親画面からボタン押された時に。
子画面(Form2)がモーダルだとこれではムリだけど
If Form2.WindowState = vbMinimized Then
Form2.WindowState = vbNormal
End If
800デフォルトの名無しさん:04/08/16 13:52
>>799
出来ました〜
ありがとうございました
話は少し逸れるが、スペイン語キーボードだと右Altキーと左Altキーで別の役割がある。
802761です。:04/08/16 23:08
オラクルホームページに行ったり、ネットを検索したのですが、
全然見つかりません。
テーブルの内容をそのまま違うテーブルにコピーするトリガーとかって
あんまり使わないのかな?
スナップショットでもできるとか書いてあるんですが、なんか上手くいかないです。

もう泣きそうです。
オラクルシルバーの俺様に言わせればこんな物、さっぱり分からん。
そんなもの飾りです
えらい人にしか騙せんのです
お聞きします。
ショートカットボタン(たとえばF1)とか押したら、
何かしらの動作するようにしたい場合は
どのようにすればよいですか?
も一つ簡単な質問ですが お願いします。
初心者的で申し訳ありません。
窓のはじっこにマウスをもっていくと、窓の大きさが変えられるのですが、
これを不可にする方法を教えてください。
>>805
フォームのKeyPreviewをTrueにして、Form_KeyDown()イベントでKeyDownがvbKeyF1であるか評価する
もっとグローバルに監視したいなら、"HotKey VB"とでもしてぐぐること
>>806
BorderStyleを1-固定に。
>>807
失礼。KeyCodeね。
親切にありがとうございました〜
810758:04/08/17 08:01
>>787
今日、AirH”でやったら、ディレクトリが取得できました。
ということは、ルータに遮断されてるってことでしょうか?
ルータを使用している場合、どうすればいいのでしょう。
>>802
それはあなたがトリガーを理解できてないだけじゃん。
マニュアルDLした?で読んだ?
トリガーはレコード単位で追加更新削除なんかがあったときにイベント的に処理する仕組みですよ。
なんで、あなたの考えてる一括コピーじゃありません。
元側が操作されたときに逐次同期をとるような感じになります。

質問だした最初のころに書いたかもしれないが、リネームじゃだめなの?
1.ダミーにデータ挿入
2.現テーブルをリネーム
3.ダミーを現テーブルにリネーム

2−3間が問題になるが、これが一番早いと思うけど。
あと、インデックスなんかがある場合は、その名前はテーブルと独立してるので注意。
812デフォルトの名無しさん:04/08/17 09:03
>>810
ルーターが原因なら、ルーターの設定をしないと。
VBとは 関係ない。
だな、ルーターの説明書を読んで、必要なポートを開ける。
814デフォルトの名無しさん:04/08/17 09:48
Functionを記述する際に 頭に Privateとか Publicをつけなかった
場合は、それらのどちらになるのでしょうか?
>>814
MSDNのFunctionの解説の一番最初の文章に書かれているが。
どうしてそれぐらい調べないの?
816デフォルトの名無しさん:04/08/17 11:02
どうしてMSDNを見ないやつが多いのか?
1.それは見ないのではなく、見れない。
2.インストールしても CD2が要求される。
などからであろう。
817デフォルトの名無しさん:04/08/17 11:12
お聞きしたい事があります。

win2000上でVB6.0 と farpoint spreadデザイナ var6.0を使用しています。
まずはデザイナでデフォルトとして1行2列の表を作っています。
それからプログラム内で行数を増やすために
Private Sub Form_Load()
With vaSpread1
'既存行への設定   
.Row = 1
.Col = 1
.Text = "hed"
.Col = 2
.Text = "head2"

.MaxRows = 2
.MaxCols = 2

'新規行への設定
.Row = 2
.Col = 1
.Text = "2"
.Col = 2
.Text = "naiyoiu2"
End With
End Sub
というプログラムを組んだのですが、実行すると1列目はテキストが設定され
表示されるのですが、表示されるのは1行目だけで2行目が表示されません。
スプレッドのプロパティを始め色々調べてみたのですが解りません。
解決方法をご存知の方よろしくお願いいたします。
818デフォルトの名無しさん:04/08/17 11:21
819デフォルトの名無しさん:04/08/17 11:32
Rowって 0から始まるから MaxRows = 2 だと 多分 0と1行しか有効では
ないかと思われ。
820817:04/08/17 11:40
>>819
レスサンクスです。
試しに.maxrows=3にしてみましたが、駄目なようです。
821デフォルトの名無しさん:04/08/17 11:55
WIN2000上でVB6.0(SP5)を使用しています。
EXEを実行しているとエラーメッセージとして「8007000E」
というエラーが出ます。このエラーの内容を教えてもらえないでしょうか。
色々調べたのですが、メモリ不足という情報もあったのですが、
実際そうなのでしょうか。確実な事を知りたいので
どうかよろしくお願いします。
>>821
Google等で調査済みでしょうから細かいことは言いませんが、普通に考えればメモリ不足です。
それが確実にメモリ不足で発生してるかどうかを他の人に判断させたいならソースを公開するしか無いと思います。
823デフォルトの名無しさん:04/08/17 13:20
どっかで無限ループしてメモリを消費しているに間違いないっ。
824デフォルトの名無しさん:04/08/17 14:36
>>816
指定項目 内容
Public 省略可能です。
すべてのモジュールのすべてのプロシージャから参照できる
Function プロシージャを宣言するときに指定します。
Option Private ステートメントが記述されているモジュール内で
使用した場合、その Function プロシージャは、プロジェクトの
外からは参照できません。

Private 省略可能です。
Function プロシージャを記述したモジュール内のほかの
プロシージャからのみ参照できるプロシージャを宣言するときに指定します。

これのことか?
省略した場合は、どうなるのか書いてないぞ。
825デフォルトの名無しさん:04/08/17 14:39
ADODBを使うには、何をインストールすればいいのでしょか?
>817
  | A | B |
-----------------
1 |hed |head2|
-----------------
2 |2  |naiyoiu2|
------------------
デフォルトでは一応こうなった。
何か別のプロパティをSpreadデザイナで
変えてない?
>824

>解説
>
>キーワード Public、キーワード Private、またはキーワード Friend を
>指定しない場合、Function プロシージャはパブリックが既定値になります。

どう考えてもこっちじゃねーの?
>>824
その下にある、解説の1行目だよ。
ていうかHelp引いたんだったら、一応全文読め。
>>824
815だけど、きちんと”解説”を読めとかいてあるだろ?
なんで>>824の部分だけ読んで、そこまで強気になれるんだ?
たかだかFunctionのヘルプのページぐらい全部読めよ。

以下、ちょっと下も読めないあんたのための抜粋。

解説

キーワード Public、キーワード Private、またはキーワード Friend を指定しない場合、
Function プロシージャはパブリックが既定値になります。
830デフォルトの名無しさん:04/08/17 14:53
ぷっ
そんなに引用したいなら聞いた時に出せよ。
>>830
あなたを元質問者として、一応書いておくけれど。
その程度のことを聞くから、誘導・教育を含めてMSDNを読めと書いてるんだよ。

Forループの書き方がわかりませんとか、変数ってなんですか?ってのと同レベルだから、
あんた勉強足りないよ、少しは資料を読みなさいっていうこと。

つうかさ、普通は恥ずかしくて聞けないよな。このレベル。
まあ>>830みたいなのは、ここで注意しなくても社会が制裁を加えてく
れるよ。相手にしてもイライラするだけ無駄だからスルーしよう。
833デフォルトの名無しさん:04/08/17 15:37
文字列の変数A、BがあってAにForm名、BにTextBox名が入ってます。
そのAのBに値をセットするには、どうしたらいいのでしょうか?
ループとかさせずに一行とかでできる方法を教えて下さい。
>>833
ループさせたくない理由は?
つうか、質問の意味がわかってるのか?>>834さん。
私はわからんぞ。

1.2行目の文面が何をやりたいのかわからん
2.なぜ3行目でループの話がでてくるかわからん。
836833:04/08/17 15:47
ループさせると時間がかかるのではないのかと思うからです。

テーブルに 30個分ぐらいのコントロールのデータをもたせてそれをセット
させようと考えているのです。

ループさせるとデバッグも大変かな?と思うのですが・・・。
837833:04/08/17 15:51
ま、ループさせればできないこともないからです。

っていうか、そこらへんが見えてないと 835みたいになってしまいますが。

で意味は、いろんなFormがあるので、その変数にFormのテキストボックスに
値をセットしたいという意味です。

テキストボックスも複数あるので、オブジェクト名を変数に入れて処理できないかと
思っているのです。
インデックスを使えば、少しは 簡単になりますが、他に与える修正量が
大きくなるので、インデックスは使えません。
ま、そのテキストボックスの一部は、インデックスを既に使ってますけどね。
つうか、まずてにおはがおかしい。それを注意してくれ。
文面が全然読めない。w

オブジェクトを動的に名前で参照する仕組みはこのスレのどっかに話題が出てたはずなのでそこを参照。
839デフォルトの名無しさん:04/08/17 16:05
昔のスレじゃないのか?
840デフォルトの名無しさん:04/08/17 16:07
>つうか、まずてにおはがおかしい。
>文面が全然読めない。w

おまえが、おかしすぎ(w
841デフォルトの名無しさん:04/08/17 16:09
てにをはも使えないやつw
http://www.tt.rim.or.jp/~rudyard/hirago013.html
>>840
じゃあさ、
 >で意味は、いろんなFormがあるので、その変数にFormのテキストボックスに
 >値をセットしたいという意味です。
って日本語としてきちんと読めますか?

あと、元質問者へ・・・CallByNameじゃ駄目なの?
>>842
質問者じゃないけどForm名TextBox名からどうやって使うの?
844デフォルトの名無しさん:04/08/17 16:16
>>842
CallByNameの使い方が、いまいちよくわかりません。
845842:04/08/17 16:25
最初の質問のあれとしてはCallByNameじゃないですね。ごめん。

オブジェクト名からオブジェクト実体を取得するのはVBでは確かできないはず。
ただ、オブジェクトの参照自体を変数にはできるので、TextBoxへの参照をアプリのグローバル変数として
一括して配列とかで管理はできます。
846デフォルトの名無しさん:04/08/17 16:29
with a
.Controls(b).Text =値
end with

でOK
847デフォルトの名無しさん:04/08/17 16:34
なおインデックスがある場合は、
.Controls(b).Item(index).Text =

となる。
>>846
多分元の質問は、値と入れ先に順番性というか1:1関係を求めてると思うんだが。
849デフォルトの名無しさん:04/08/17 16:37
>>848
じゃ、どうするんだ?
a = "Form2"
b = "Text1"
With a
.Controls(b).Text = "値"
End With

できないのだが・・・
>>849
順番性を持たせるには、配列番号で管理するしかないでしょうね。
Formとその中のコントロールで二元配列にして、それぞれの値を定数で全部定義(ベタだなw)

public objCtls[][] as object
public FRM_A as integer = 1
public FRM_A_TXT_A as integer = 1
public FRM_A_TXT_B as integer = 2

で、その二元配列構造と、代入すべき値のテーブル(?)を連携させる。

つうか、元の人がそもそも具体的に何をやりたいのかわからない。
大体において、そういう場合は、根本的に考え方が間違っていて、変な実現案をやろうとして質問しているような。
852pakuchan:04/08/17 16:56
Windowsのログインの制御をVisualBasicのプログラムで行いたいのですが,
できないものでしょうか? 具体的には,USBやRS232Cで接続した磁気カード
リーダーから磁気カードの内容を読み込むことにより,Windowsへのログイン
をおこなうようなシステムを作りたいのですが...
>>852
やろうと思うと、通常のアプリじゃなくて、サービスで動く形になるよね。
あと、ログインの制御ってAPIばりばりでできるのかな?ってぐらいAPI使うと思う。
なので、まずVBで作るものじゃないと思います。
854デフォルトの名無しさん:04/08/17 17:00
>>852

Form2に Text1があれば、できるはず。
なければできない。
できないって、なんかエラー出たの?
>>854
横レスだけどあれはできないでしょ?

文字列変数に対してWithブロックを適用して、その中にコントロールがあるってのは無理がある。
>>850

Dim a As Form
Set a = Form2

ってしてみ
>>856
そういう問題じゃないって。
>>856
その"Form2"をオブジェクトじゃなくて、文字列として持っていて、
それをオブジェクトに変換(?)して操作したいんでしょ?
859833:04/08/17 17:55
よく見てみたら Formは 文字列でなくても、よかったです。
関数にして呼ぶとき、Formをセットしてあげればできるので
文字列は、テキストボックスだけでいいです。
質問の意味がわからないが、

Dim x As TextBox, y As TextBox

Set x = Form2.Text2
Set y = Form3.Text1

x.Text = "あああ"
y.Text = "いいい"


でいいんじゃないのか?
> 質問の意味がわからないが、
この手の質問は常にオブジェクト指向が破綻しているので仕方ない。
VBでオブジェクト指向を語ること自体(ry
863デフォルトの名無しさん:04/08/17 18:50
VBでオブジェクト指向もどきをすること自体(ry
VB.NETならよかったのにね。プ
865デフォルトの名無しさん:04/08/17 19:16
VB.NETだったら、このスレには、きてないって。
866デフォルトの名無しさん:04/08/17 20:40
右クリックでポップアップメニューを出すには、どうしたらいいのでしょうか?
>>866
マウスのイベントで右クリックを検出してPopupMenuで表示
TreeViewコントロールのフォントをMSゴシックにしても
全角1文字の横幅が半角2文字分の横幅にならず
やや半角2文字分の横幅が大きくなってしまいます。何故でしょうか?
環境は、vb6 sp5,win2000です。
>>868
フォントサイズを3の倍数にしてもそうなりますか?
透過GIFをリソースファイルから読み込みたいんですが,
どうしたら良いのでしょうか?

保存して、LoadPictureは嫌なのですが。。。

871802:04/08/17 23:21
>811さん ありがとう。

マニュアル読んだけど、自分なりに理解して試したんですけど駄目でした。
私が考えてたのは、元に元表からSQL*PLUSでinsert文発行して、それから
発生するデータはトリガーで逐次更新させようと考えてました。
811さんからお教えいただいたリネームも勉強して、問題解決の一つの手段として
考えたいです。 
またお教えください。 ありがとうございました。
質問です。
フォームとそれに貼り付けられてるオブジェクト全てを半透明化するにはどうすればいいでしょう?
VBからVCで作ったDLLにRGBQUAD構造体(多次元配列)を渡したいのですが
上手くできません(´・ω・`)
どのようにすればいいでしょうか・・・。
>>874
配列の最初の要素をByRefで。
つまり、配列の先頭アドレスを渡す。
876874:04/08/18 05:00
>>875
できました!ありがとう。・゚・(ノД`)・゚・。
877874:04/08/18 07:04
とおもったら出来てなかった。・゚・(ノД`)・゚・。

//VB側
Declare Function fncTest Lib "test.dll" (ByVal p_rgbquad As Long) As Long

Dim rgbquad as RGBQUAD '実体
Dim p_rbgquad as Long 'ポインタ変数
p_rgbquad = VarPtr(rgbquad(0,0)) '先頭のポインタ取得
ret = fncTest(p_rgbquad) '呼び出し


//DLL側
TEST_API int __stdcall fncTest(RGBQUAD *rgbquad)
{
rgbquad[0,0].rgbRed = 255; //これを戻したいです
return 0;
}

といった感じでDLL側に渡す事はできたのですが、
これでは戻り値(rgbquad)を上手く格納できません。
どこがおかしいのでしょうか(´・ω・`)・・・。
>>877
(*rgbquad[0,0]).rgbRed = 255; //これを戻したいです

rgbquad[0,0]->rgbRed = 255; //これを戻したいです
でどうだろう?

一度SAFEARRAYも調べた方がよさげ
VC側でデバッガを動かして、
渡された領域がきちんと確保されて、かつVC側で認識できてるでしょうか?
それぞれの配列要素にVB側で値を適当に設定してVCで見たときに期待通りに渡ってる?

この手の問題って、ヘルプに若干記述があるけど難しいよね。

別策として、共有メモリーとかで情報を受け渡ししてはどうでしょうか?
どうでもいいけどVBの宣言はこうでもいいはず。
Declare Function fncTest Lib "test.dll" (ByRef p_rgbquad As RGBQUAD) As Long
881874:04/08/18 13:51
レスありがd。

>>878
アロー演算子を用いた場合、
error C2819: クラス 'tagRGBQUAD' にはオーバーロードされたメンバ 'operator ->' がありません。
error C2227: '->rgbRed' : 左側がクラス、構造体、共用体へのポインタではありません。
となってしまいます。
とりあえずSAFEARRAYについて調べてみようと思います。

>>879
デバッグの仕方がいまいちわからず確認できていませんが、
値を操作できるので渡っていると思います。
デバッグの仕方についてなんですが、VB側でexeを出力するときに
シンボリックデバッグ情報を作成してアタッチしているのですが
シンボリック情報が合致しないとでて上手くいきません。
何か間違っているのでしょうか・・・。
882デフォルトの名無しさん:04/08/18 13:55
>>881
DLL側のデバッグの設定で、実行可能ファイルに対象のVBのEXEを指定するだけ。
その状態でDLLのデバッカを起動すると、VBのEXEが上がるはずです。
あとはDLLをコールする操作をしてあげればVC側でブレークできます。
追記で、詳細はMSDNの DLLのデバックを参照。
あと、MSDNでDLLをキーワードにして出てくる見出しを一通りみといたほうがいいよ。
884874:04/08/18 14:17
>>882
できちゃったヽ(・∀・)ノ
>>883
がんばります。ありがとう!
VB側の宣言も、C側の引数も多次元配列じゃなくない?
>>885
配列の先頭ポインタを渡すからアレでいいとおもうけど。
MSDNのDLLプロシージャに配列を渡すの項とか見る限りはそうおもう。
887874:04/08/18 14:39
どうやら先頭の値だけは変更されますが、
他の値がまったく返ってきてないようです。
>>885さんが言ってる事が関係しそうな感じがします・・・
>>887
ちょこっト前に書いたけど、VB側で多元配列の先の方の要素に値を入れて、
それがきちんとVC側に渡ってる?(=自分が思い描いている領域がきちんと両者で共有されてる?)

あと、MSDNのDLLプロシージャにxxxを渡すシリーズをきちんと読んでみてね。
対象の構造体に文字列とか入ってないですよね?その場合って確かNGです。
rgbquad->rgbRed = 255;
だったら値が入るのでは?
Dim rgbquad as RGBQUAD ←が配列ではないし

Cの関数に多次元配列を渡すんだったら、
fncTest(RGBQUAD **rgbquad)
とかじゃないの?
890874:04/08/18 15:37
>>877のコード写し間違ってました(゜Д゜;)
×Dim rgbquad as RGBQUAD '実体
○Dim rgbquad() as RGBQUAD '実体
申し訳ないです(つд`)

>>888
配列の先頭の値しか渡されていないような感じがします。
値は、「255 '・'」みたいな感じになってます。
891デフォルトの名無しさん:04/08/18 15:38
>391
そんでは自作のクラスのプロパティに変な値を突っ込まれたんで Err.Raise したら
突っ込んだ元でキャッチできないのはなんで?
モジュールを超える方法は?
892874:04/08/18 15:39
Redim rgbquad(x,y)
という風にあとから動的に確保しています。
つうか、>>889さん指摘の箇所はどうなの?
C側がその通りだとしたら、構造体のポインタ渡しなんだから、言われたとおりの処理してますって状態だよな。
894デフォルトの名無しさん:04/08/18 15:58
教えていただきたい事があります。
他の掲示板でも質問したのですが、流されたようなので質問させて下さい。
環境はwin2000 VB6.0 farpoint SPREADデザイナ ver6.0 です。

スプレッド行の特定の行をクリックしたときに、クリックに対して無反応
(反転も選択もされない)にする事は出来るのでしょうか?
扱い的にはヘッダのような扱いが出来る設定をしたいのです。

行単位で設定したいのですが、ご存知の方がいましたらお願いいたします。
というか、VBのRedimで確保するとメモリ上でCの配列とは違う風になっていそうな予感。
Redimで配列の要素数を変える都度、一旦古い分を破棄してから、
新しい要素分確保するってなわけじゃないんじゃないだろうか?
896895:04/08/18 16:10
いや、ゴメン。
MSDN見たらそれは大丈夫そうでした。
897874:04/08/18 16:13
>>889,893
その場合、VBからはどのような値を渡せばいいのでしょうか。

>>895
わざわざ調べてもらって申し訳ないです(つд`)
898895:04/08/18 16:18
いや、待てよ。
「DLL プロシージャがオートメーションの配列データ型を直接受け取らない場合でも、
数値配列であれば、配列全体を渡すことができます」って書いてあるな。
何これ?

もう面倒だからオレだったら、
VB側から配列の要素を一つずつループで渡して誤魔化すけどダメ?
多元配列を一気に渡して処理しなければならないなら、ループは難しいでしょ?
だとしたら、最初に書いたけど共有メモリ(めもりーまっぷどふぁいる。)で一気にやり取りだよ。
>>898
そこの説明を正しく理解するには、オートメーション(=OLE)をかなり理解していないど駄目です。
数値型がOK言ってるのは、多分VBの他の型がOLEオブジェクトだからです。文字列もBSTR型でしょ?
>>894
デザイナじゃなくてLeave*** イベントでキャンセルするしか思いつかん。
902894:04/08/18 16:47
>>901
デザイナ側で初期設定は出来ないのですか…。
レスサンクスでした
>>877
多次元配列なら[0,0]じゃなくて[0][0]じゃないのか?(Cだと[0,0]は[0]と同じ。)
それにCだと多次元配列は最外周以外の添え字を省略できないから、
TEST_API int __stdcall fncTest(RGBQUAD rgbquad[][256])などと固定する必要がある。(ただしVBから多次元配列を渡せないなら使えない)

あるいはTEST_API int __stdcall fncTest(RGBQUAD rgbquad[], unsigned n)として、
rgbquad[x][y]の代わりにrgbquad[x * n + y]とするかしかない。(nは2次元目の要素数)
この場合VBでも1次元配列にしてrgbquad(x * n + y)としていく必要がある。
904895:04/08/18 17:20
>>899-900
フォローありがとう。
しつこく調べてたら、
http://www02.so-net.ne.jp/~handa/deadend/c_vb.html
こんなん見つけました。
905875:04/08/18 17:30
>>874
//VB側
Declare Function fncTest Lib "test.dll" (rgbq As RGBQUAD) As Long

Dim rgbq(15, 15) As RGBQUAD
Dim i As Long, j As Long
dim ret As Long

ret = TestFunc(rgbq(0, 0))
Text1.Text = ""

For i = 0 To 15
For j = 0 To 15
Text1.Text = Text1.Text & rgbq(j, i).rgbRed & ", "
Next j
Text1.Text = Text1.Text & vbCrLf
Next i


//DLL側
int __stdcall TestFunc(RGBQUAD *rgbq)
{
int i, j;

for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
(rgbq + (16 * i + j))->rgbRed = 16 * i + j;
}
}
return 0;
}
906875:04/08/18 17:32
>>905
×int __stdcall TestFunc(RGBQUAD *rgbq)
○int __stdcall fncTest(RGBQUAD *rgbq)

スマソ。
907デフォルトの名無しさん:04/08/18 17:33
テキストボックスのようなので、表示のみに使いたいのですが、
カーソルがいかない設定か、ほかのコントロールはありますでしょうか?
label
909874:04/08/18 18:05
なんとか形に出来そうです。
ありがとうございました。
>>909
できれば、最終的にどうやってできたかご報告くだされ
911デフォルトの名無しさん:04/08/18 18:21
AというFormのソースの中で BというFormを表示せずに
Bにあるテキストボックスのテキストに値を入れたいのですが、
どうすればいいのでしょうか?
load formB
formB.Text1 = "hoge"
913デフォルトの名無しさん:04/08/18 19:02
なぜ、他のFormのコントロールに値をセットすると
そのFormが開くのかが知りたい・・・。
仕様
開かれても表示しなければいいんじゃない?
>>913
まず普通に考えて、実態のないものにセットできっこないじゃない。

で、CとかJAVAなら実体のないものにアクセスしたら、本当にぬる・・・になる。
でもって、VBの場合、VBさんって気が利くからそのオブジェクトをアクセスできるように
親を含めてロードしてくれると。w

ぬるぽ
>913
え、マジでそうなる?
今試してみたけど、Form上のTextBoxに値をセットしただけじゃ、LoadはされるけどShowはされなかったにょ。
VB6.0SP5+Win2K
Form_Loadに、
Me.show
が入ってるんじゃないの?
920デフォルトの名無しさん:04/08/18 20:26
教えていただきたい事があります。

環境は win2000 + VB6 です。

あるmdbファイルを、リソースファイルとして保持しておき、フォームからパスワードが通ったときだけ特定のフォルダにインストールするようなアプリケーションを作成しています。

で、ファイルをコピーする部分なのですが、以下のソースでコピーしているのですが、このファイルを開くことができません。
(「データベースの形式’C:\hoge\hoge.mdb’を開くことができません」というエラー。)
バイナリエディタで開いてみたところ、、の12バイトに何かが追加されていました。
そこで、頭12バイトを削除してみると、開けるようになりました。

Private Sub Command1_Click()

M = LoadResData(101, "CUSTOM")

Open "C:\hoge\hoge.mdb" For Binary Access Write As #1
Put #1, , M
Close #1

End Sub

これは何が原因でこうなっているのでしょう?
また回避策はございますでしょうか。

すいませんが、どうぞよろしくおねがいします。
PUTするまえにMの先頭12バイト削除すれば?
922デフォルトの名無しさん:04/08/18 20:33
>>921
ありがとうございます。
それも考えたのですが、なにか根本的な間違いがあるのかなと思いまして・・・。
それなら後学のために知っておきたいと思って、お伺いした次第です。
924デフォルトの名無しさん:04/08/18 21:01
>>923
まさにこの通りですね、納得です。スッキリしました。
本当にありがとうございました。m(_ _)m
ヘルプや書籍を読んでもなかなかファンクションプロシージャを理解できなく
いつも標準モジュールにグローバル変数を宣言して値を扱っています。
どのドキュメントやホームページよりも詳しくファンクションプロシージャについて説明してくださいませ。
926874:04/08/18 21:56
>>905のコードほとんどそのままで出来ました。
理屈としては>>903が言ってるような感じでしょうか。
>>905のコードを実行して描画すると黒->赤のグラデーションが表示されます。
>>925
ヘルプや書籍を読め、
それで理解できなければヘルプや書籍を読め、
それでも理解できなければヘルプや書籍を読め。
>>925
ファンクションとは関数である。
引数を与えることによって戻り値が帰ってくる。
これ以上どうやって説明をしろと?
>>928
ウゼェよ。クズ
少し勉強して、実際の実務で使うプログラムを組めば、
標準モジュールにパブリックの関数をかいて、そこでグローバル変数を扱う、
なんて発想は絶対出てこなくなるよな。

まあ、それが何故ダメか理解できないで、そういうのを続ける奴は、一生そうなんでしょ?
言語とかの問題じゃなくて、根本的にプログラムを組むべkじゃない人種。
931925 ◆ExGQrDul2E :04/08/18 22:14
荒れる悪寒なのでトリップつけますた
>>931
つうか、そういう問題じゃない。
For文ってなんで使うんですか?っていうレベルの問題。
言語スレじゃなくて、もっと根本的なプログラムの基礎のスレに逝ってくれ。
933925 ◆ExGQrDul2E :04/08/18 22:23
では論点をすりかえて、
クラスやファンクションプロシージャを使わないで、
Visible=Falseなフォームやグローバル変数を駆使すれば
クラスやファンクションプロシージャと同じ機能を実装したモノをつくれるというのは
正解ですよね。
>933
NG
似たような挙動をさせる事はできるが、同じ機能は無理。
スコープとか生存期間とか諸々の問題があるから。
変な理屈こねくりまわしてないで入門書嫁。
>>933
不正解。
Formは画面のWindowを現すもので、特定の値の集合とかを扱うものではない。

つうか、そういう話はこのスレの話じゃないから、どっか適当なところへ逝ってくれ。
プログラムの一般論の話でしょ?
しかもかなり電波が入ってるか、釣ってるか。
そもそも論点をすり替えようなんて(w
久々に真性が登場ですか。
夏の風物詩でつね。
938925 ◆ExGQrDul2E :04/08/18 22:35
基本や定石はできないけど
他の人には思いつかないウラワザはよく思いつきます。
結果の出せない天才です。
というわけで、以下皆様無視を。
940925 ◆ExGQrDul2E :04/08/18 22:40
将来的にはVBやVB.NETでデバイスドライバを開発できるようになるんでしょ?
だってVBの予約語などをアセンブラや機械語に変換してからコンパイルするだけだし・・・
941デフォルトの名無しさん:04/08/18 23:43
なんというか中途半端な知識を駆使している新人みたいな理屈だな。
手持ちの材料で勝負しようという意気込みは買うがな。
ビギナーズラックはすぐに枯渇する禁断の技能だよ。
次の質問ドゾー
>>941
ヤツのトリップでぐぐってみなよ。
945デフォルトの名無しさん:04/08/19 00:11
なにをしつもんしようとしていたかおもいだせまんせ
947デフォルトの名無しさん:04/08/19 00:43
948デフォルトの名無しさん:04/08/19 01:41
ひとつ、お願いします。
フォーム上に配置したFileListがあるのですが。

この中にファイル名を表示させた時、縦にファイルが収まらない時は
自然にスクロールバーが出現しますよね。
で、ファイル名が長すぎて横に収まらない場合。途中でちょん切れてしまいます。

横のスクロールバーを出す方法はあるのでしょうか?
よろしくお願いしますm(__)m

>>948
「VB リストボックス 横スクロールバー -NET」でぐぐれ
950デフォルトの名無しさん:04/08/19 09:48
VB6.0SP6を使っています。

FORMを最初にロードしたときに一緒に、
Combo1_Click()
Form_Resize()
等のイベントが一緒に起動してしまうんですが、
これを抑制する方法はあるのでしょうか?
ありません。
普通はそれらのイベントが起こっても問題ないようソフトを組みます。
952デフォルトの名無しさん:04/08/19 10:17
すみません、VB6.0SP6 なんですが・・・
自作クラスの Public Property Let プロシージャで
Err.Raise(vbObjectError + 513・・・)
しても呼び出した側、つまり値を代入した側では ON ERROR GOTO ・・・で取れないもんなのでしょうか?
953デフォルトの名無しさん:04/08/19 10:18
そろそろ次スレ、誰かたてて。
>>950
コンボのアイテムをFormロード中に選択したりして連鎖してるんだろうね。
まあ、ベタな逃げとしては、フォームロード中フラグをグローバルかフォームレベルで保持して、
そのフラグがonなら連鎖したくないイベントはそのイベント関数の頭でチェックして抜けるようにする。
955875:04/08/19 10:20
>>950
Loadイベントプロシージャ内において、
Combo1_Click():現在の選択項目に関する変更を行わない。(ex.ListIndex)
Form_Resize():SetWindowPos()をSWP_SHOWWINDOW指定でコール。
956デフォルトの名無しさん:04/08/19 10:41
コマンドボタンのキャプションを複数行で中央そろえで表示したいのですが、
どのようにすればいいのか、どなたか教えて下さい。
>952
取れるよ
958デフォルトの名無しさん:04/08/19 11:11
構造体の中身を一気に初期化する方法を教えてください
type SAGE
SAGE1 as LONG
SAGE2 as STRING
SAGE3 as ...
....
end type
dim s as SAGE

s.SAGE1 = 0
...
959デフォルトの名無しさん:04/08/19 11:13
>>957
なぜか出来ません・・・。
何がしたいかっつーと、DAO で MDB にアクセスするクラスがあって、EXECSQL のエラーを ON ERROR でトラップ、
それをそのまま クラス内で Err.Raise(Err.Number,Err・・・) して呼び出し元でも ON ERROR でトラップ・・・していって
最終的にフォームまで戻したいのです。フォームと アクセスクラスの間には別のクラスもはさまっています。
ON ERROR の処理中に Err.Raise するのがダメなのでしょうか?
Err.Raise する前に ON ERROR Goto 0 してもダメですし・・・。
960デフォルトの名無しさん:04/08/19 11:26
リソースファイル500MBって無謀ですかね?
取り込もうとするとフリーズしちゃうんですが。
こういうときって、みなさんどうされるんでしょう?
961デフォルトの名無しさん:04/08/19 11:52
ON ERROR は、全体でするのではなくて、関数ごとに入れたほうがベスト。
962デフォルトの名無しさん:04/08/19 12:08
>>961
続行不可能なエラーの場合、メッセージを出して End するとしても、ActiveX DLL 内では End 出来ませんよね・・・。
クラスですから、インスタンスを作る側が EXE か DLL かを意識して作るべきでは無いでしょう。
この手のエラー処理は皆さんどのようにされているのでしょうか?
私としてはエラーが発生したらメッセージを出してフォームの「終了」ボタンしか押せなくしたいのです。

継承も無い不完全な VB6 でクラスを使い倒すなって事なんでしょうか・・・。
>ON ERROR の処理中に Err.Raise するのがダメなのでしょうか?
なんだ、自分で答えわかってるじゃん。
だったらこんなとこにレスしてる間に(以下略

VB批判する前に、もう少し自分を研鑽するべきじゃないのかと小一時間(以下略
964デフォルトの名無しさん:04/08/19 13:01
初心者に使いやすそうなフリをして実は・・・。
965デフォルトの名無しさん:04/08/19 13:03
961の内容は、
エラーが発生しそうな部分は、関数とかで外だしにして、その関数の
戻り値でエラーが発生したかどうか判断しろっていう意味。

そうすれば、どこでエラーが発生したのか、つかみやすくなる。
全体で、エラートラップをかけると原因解明に 困難をきたす場合がある。
966958:04/08/19 13:03
質問が変でしょうか?
>>966
定期的に出る質問だから、過去スレみてくれ。
VBのみではできない。APIを使えばMemsetみたいなことはできる。
>959
多段階のエラートラップも普通にできるはずだけど・・・
On Error中のErr.Raiseも普通にやるし。
どっかでErr.ClearとかResumeNextしてるんじゃねーノ?
ステップで実行してみるとかして、期待してない動作をしてる部分を特定すべし。
969959:04/08/19 13:29
>>968
こじんまりしたプロジェクト作ってみましたが・・・やっぱり出来ません。
コントロールのプロパティ異常はトラップできるのだから出来てもよさそうなんですが・・・。

'フォームはこんだけ
Private Sub Form_Load()

Dim c As New Class1

On Error GoTo EH

Call c.sss

Stop

End
EH:
Stop

End Sub

'クラスはこれだけ
Option Explicit

Public Function sss()

Err.Raise (vbObjectError + 100)

End Function

なぜなんでしょう?
Call c.sss
の次にStopで止まるって事け?
こっちでも試してみたけど正常にEH:のStopで止まったぞ。

ちなみに
Err.Raise (vbObjectError + 100)
のカッコは不要。カッコ付きならCallを付加すべし。
>>958
ありません
>>969
?ちゃんとエラートラップできたけど?
ひょっとしてVB上から実行して Err.Raise の行で止まってしまうと騒いでいるだけ?
・・・そういうオチか・・・
974959:04/08/19 13:48
すんません、そうみたいです。
EXE作ると上手くいきますね・・・。そういうもんなんですか・・・?
知りませんでした。完敗です。
ツール-オプション-全般-エラートラップ-エラー処理対象外のエラーで中断
つーか、関数の戻り値でエラー返すのってダサいよね
977959:04/08/19 13:55
>>975
ありがとうございます。
みなさんプロフェッサーですね・・・。
つうか・・・。
オプションのそこの仕組みをいじらないで、今までどうやってデバックしてたの?
エラートラップ内のデバックするときとか、逆にエラー時に止めたい場合とか切り替えないとできないじゃん。
979958:04/08/19 14:31
>>967
ありがとうございました。
API使ってまではやりません
980デフォルトの名無しさん:04/08/19 14:32
>>976

オブジェクト指向はしないのか。
981デフォルトの名無しさん:04/08/19 14:34
そんなことより誰か 956 を教えて。
>>956 >>981
複数行でも普通に真ん中に表示されるよ?
>>980
オブジェクト指向では、エラーの情報自身もオブジェクト同士のメッセージのやり取りと考えるので、
エラーを投げるほうがいい。
984デフォルトの名無しさん:04/08/19 14:49
>>979
簡単方法
もう一つ同じ構造体で定義した
変数を用意して、
初期化したい構造体変数 = もう一つの構造体変数
という様に、ぶち込めば初期化される。
>>984
そのダミーを誰が初期化するのかと・・・・。
単純に諦めて構造体初期化関数作ればいいじゃん。
>>985
その初期化って、
別にメモリを解放する意味で言って
いるわけではなかろう。
初期値に戻すという意味だろ。
type SAGE
SAGE1 as LONG
SAGE2 as STRING
SAGE3 as ...
....
end type
dim s as SAGE

s.SAGE1 = 0
その構造体をどういうことに使いたいのかわからんから何とも言えんよね。
クラスモジュールでやった方がいいのかもしれんし。
988デフォルトの名無しさん:04/08/19 15:21
>>982
vbCrLfで改行させてるんだけどさ。
テキトーなところでは 改行できないからね。
>>986
対象の構造体を初期化する場面が、いろいろな場所にある場合、
あなたの考える初期化用変数ってスコープが大きくなりますよね。
それなら、普通に初期化関数を通してもらったほうが安全だとおもうけど。
990958:04/08/19 15:42
>>984
一瞬キター!!って思いました
>>985
ですね

>初期値に戻すという意味だろ。
そうですよ


>その構造体をどういうことに使いたいのかわからんから何とも言えんよね。
データベーステーブルの項目入れに使ってます
VBの変数がIsEmptyの状態でデータベースの項目に代入すると
おこられます
>クラスモジュールでやった方がいいのかもしれんし。
できたらワンシートでやりたいです。
関数にするかクラスにするか、ベタに貼り付けるか考えることにします
For i=0 to 100
Ary(i)=i
i=i+1
Next

配列Ary(i)に0、1、2、3、4、・・・と入れたいのですが値がくるって代入されてしまいます。
一日考えたりしてもわからなかったのですがお願いします。
992デフォルトの名無しさん:04/08/19 17:36
i=i+1 ←この行要らない

誰か次スレ頼む。
>>990
質問時に初期値の定義を
 自分で設定した初期値なのか
 VBの変数宣言時にセットされる初期値
なのか書いておけ。
994959:04/08/19 18:01
995デフォルトの名無しさん:04/08/19 19:55
995
996デフォルトの名無しさん:04/08/19 20:46
>>958
普通にEraseではダメなのか?

Erase s

997デフォルトの名無しさん:04/08/19 21:37
997
998デフォルトの名無しさん:04/08/19 21:46
うめーーっしゅっ
999
1000デフォルトの名無しさん:04/08/19 21:47
ついでに 999をげっとーっ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。