VBプログラマ質問スレ(6.0以前) Part52at TECH
VBプログラマ質問スレ(6.0以前) Part52 - 暇つぶし2ch127:デフォルトの名無しさん
07/06/07 00:48:57
>>125
時間がある人なら、とりあえずテキストエディタとか作ってみるといいんじゃない?
システムの設計の方法とか方針とか少しは見えてくると思うよ

逆に設計についてサッパリな状況なら何も作れないってことが分かるだろうし

128:デフォルトの名無しさん
07/06/07 06:22:20
Rnd関数か何かを使って任意の計算式を創出できるようにしたらいいかも。
VBの達人なら、この程度のプログラミングなど簡単すぎて興味も湧かないでしょうが、
いかに、短くてエレガントなコードを書くかには興味を持つかも知れん。

129:デフォルトの名無しさん
07/06/07 09:47:53
>>128
確かにアルゴリズムは考えるのが楽しい
が・・・・ある程度いったら飽きるんだよorz

130:デフォルトの名無しさん
07/06/07 10:14:13
ESCキーで終了させるにはどうしたらよいですか?

131:デフォルトの名無しさん
07/06/07 10:15:39
ほんの一瞬、「VBで暗算を行う」の意味がわからんかったわ。

132:デフォルトの名無しさん
07/06/07 10:35:32
>>130

よく知らんが
フォームにでもKey Pressのせて
if key asciiがEsc
End 'Unload me
end if

じゃだめですか

133:デフォルトの名無しさん
07/06/07 10:51:55
>>125
式作成部分だけ造ったが、こんな感じか?

134:デフォルトの名無しさん
07/06/07 10:53:09
張リ 忘レタ ヨー
URLリンク(kansai2channeler.hp.infoseek.co.jp)

135:デフォルトの名無しさん
07/06/07 12:02:30
>>133
おまっ・・・・Cかよwwww
式は自動作成なのかな?

俺が予想してるのはこんな流れ

前提:式のリストがある(いわゆる算数の穴埋め問題集的な)
X+2=5 Xを求めよ みたいな

流れ
1.式のリストから式を取得(あとはユーザが選択したりとか)

2.その式を分析して解を求めるような値を算出(方程式解くような感じで)
  (例だと:X=5-2 X=3)

1に戻る

136:デフォルトの名無しさん
07/06/07 19:42:07
>>135
予め式のリストが用意されてるんなら、
リストインデックスから解を出力すりゃいいだけじゃね?
解も配列で内部的に持っとけばいいだけだし。

137:デフォルトの名無しさん
07/06/07 22:04:08
>>135
>125を見た感じ、延々と繰り返すってことは、
有限な感じがするその前提は使えないんじゃね?


つか、式を自動生成する時ついでに、
内部的に解を求めとけばいい気がする。
暗算すんのはユーザなんだろ?
システム的にはただ淡々と計算してけばいいだけ。

悩む点は特に無さげ。

138:125
07/06/08 00:01:50
遅くなってすいません
134をコピーしてみたんですが、エラーが出まくって上手くいきません
多分フォーム内に全部直接貼り付けただけで、変数を宣言する場所とか
が自分でよく分かってないからだと思いますが・・・
全く素人すぎてすいません・・・

139:デフォルトの名無しさん
07/06/08 00:17:32
>>138
Cでもいいわけか?
VBじゃなくって?

あのソースはVBではないぞ・・・・・

140:125
07/06/08 00:23:13
>>139
そうなんですか?
自分はVB作りたいです
今日乱数を発生させてどうのこうのとかやってたけど
全く上手くいきませんでした・・・

141:デフォルトの名無しさん
07/06/08 00:28:25
Cを全く知らない俺が変換してみたw
Private Function fmotome(n As Integer) As Integer
Dim Res As Integer
Select Case n
Case 0
Res = 0
Case 1
Res = 1
Case Else
Res = fmotome(n - 1) + fmotome(n - 2)
End Select
fmotome = Res
End Function

Private Sub Form_Load()
Dim Temp As String
Temp = InputBox("Nの値を( ゚д゚)クレ", "数値入力")
If IsNumeric(Temp) = False Then
MsgBox "数値入れろ", "カス"
Unload Me
End If
Dim Res As Integer
Res = fmotome(CInt(Temp))
MsgBox "Fnの値は'" & CStr(Res) & "'"
End Sub

もすこしやりたいことを具体的におしえてはくれんか?
乱数を発生させるのは簡単だがそれを使ってどうするのか とかさ

142:デフォルトの名無しさん
07/06/08 00:35:52
ちなみに上限と下限決めて乱数作る場合こんな感じだったとおもう
使い方はあってると思うけど…

下限1 上限10

dim hi as integer
dim Lo as integer

Hi = 10
Lo = 1
Ransuu = Int((hi - Lo + 1) * Rnd + Lo)


143:デフォルトの名無しさん
07/06/08 00:38:06
ていうか、いまさらVB6~を始めるな。
せめてC#かVB.NETにしろ。

144:125
07/06/08 09:12:07
>>141
ありがとうございます
実は具体的に実現したい機能としては
画面上に2桁の加算を行なう数式が2つ表示されて、ユーザー側が計算して値が大きい方の式を選ぶと
その正誤がすぐに画面上でフィードバックされ、すぐにまた同じような暗算課題が画面上に表示され
同じことを30分とか決められた時間ひたすら繰り返されていくようなものです
考えて作ろうとはしてるんですが、まだ暗算機能されまともに作れなくてやばいと
いった状況ですね・・・

145:デフォルトの名無しさん
07/06/08 09:15:40
URLリンク(hp.vector.co.jp)
ここの十字カーソルのように、デスクトップ(というかスクリーン)の最前面に
文字や画像を描画するにはどうすればいいのでしょうか?

146:133
07/06/08 09:21:42
勘違いさせてしまった様だが、俺が創ったのは
URLリンク(kansai2channeler.hp.infoseek.co.jp)
のレス21な

147:デフォルトの名無しさん
07/06/08 09:47:19
>>145
見てないから分からんのだが、
ひょっとしてAPIのSetWindowPosのことか?

148:デフォルトの名無しさん
07/06/08 13:28:14
>>144
ふむふむ・・・
俺設計力とかはあんまないから今一歩かもしれんけどさ

1. 2桁の(+-の)数値の和・差の式をランダムで自動生成して
2. その自動生成された式を自分の内部で計算して 大きいほうの数を持つ式を選べば正解として処理

1.2を決められた時間ないひらすら繰り返す
で点数とか正誤率表示するような感じなのかな?


149:デフォルトの名無しさん
07/06/08 13:47:37
>>146
ここまで作ってあげてる優しさに俺は脱帽した
質問者が理解できるかどうかはしらんがw

150:145
07/06/08 14:54:37
>>147
SetWindowPosはウィンドウの位置やサイズを変更するAPIですよね。
もしかして常に最前面にしてウィンドウを完全に透明にすればできるということでしょうか?

やりたいことは、↓これと同じようなことなのですが…
URLリンク(www.forest.impress.co.jp)

151:デフォルトの名無しさん
07/06/08 15:21:40
そのソフトの事は知らないが、簡単に作るのであれば、
・二つウインドウを作り最前線にもってくる
・一つは縦が1ドットx横がデスクトップの横サイズで。もう一つは(ry
・マウスカーソルの位置に二つのウインドウを位置合わせ
こんな感じでできるべ?

152:125
07/06/08 19:59:32
>>148
だいたいそんな感じですね
正確には

1. 2桁の正の数のみの数値の和の式をランダムで二つ自動生成して
2. その自動生成された式を自分の内部で計算して 大きいほうの数を持つ式を選べば正解として処理

1.2を決められた時間ないひらすら繰り返す

で一回1ポイントとして終了後に合計得点と正答率を示す
ついでに可能だったら合計得点の今までチャレンジした人の中でのランキングも示す

というところまで作りたいんですが、プログラムの基礎もさっぱりな段階なので
全くダメといった感じです・・・

可能ならばどなたかに参考になりそうなアドバイスを頂きたいです
よろしくお願いします


153:デフォルトの名無しさん
07/06/08 20:01:14
>>152

まずは>>133
が作ってくれてるのうごかしてみ?

154:125
07/06/08 20:11:54
>>153
やってみたんですけどエラーが出て実効できないです・・・
多分自分が変数を宣言する場所とかを間違ってるのがいけないと思うんですが・・・

155:デフォルトの名無しさん
07/06/08 22:07:20
>>154
VB6環境ないんでEXCEL2003のVBAでやってみたがちゃんと動いてくれたぞ?

あれをモジュールにはっつけて

Private Sub CommandButton1_Click()
Call Eq_Sample1
End Sub

Private Sub CommandButton2_Click()
Call Eq_Sample2
End Sub

これでちゃんと数式ができてるいいサンプルだと思うけどなぁ?

どんなエラーがでてどこでエラーが起きてるか出来るだけkwsk書いて
ちょっとそっちで動かないソースここにはりつけてみないか?
貼り付けたのはもちろん>>146の言うとおり21レス目のVBソースが直書きしてあるやつだよな?

156:125
07/06/08 23:05:39
今146のやつを標準モジュールに全部貼り付けて
実行するフォームにコマンド1,2を用意して155のソースを書いて実行したら
エラーは出なくなりましたが、画面に何の変化もないといった感じです・・・
標準モジュールに貼り付けるのが何か間違ってますか?

157:デフォルトの名無しさん
07/06/09 00:04:57
>>156
なにも表示されないよ
ヒント Debug.Print
適当にラベルにでも表示してみれば?

158:125
07/06/09 07:34:35
>>157
Debug.Print
というものを調べてみたらファイル操作というもので色々なことに
使われてるみたいだってことは分かったんですが
146のソースにどういう役割で導入すればいいかというのは分からないです・・・
可能ならばもう少しヒントを頂きたいです

159:デフォルトの名無しさん
07/06/09 09:23:11
>>158
根本的に基礎を勉強しなきゃ話にならないとは思うけど
”イミディエイトウィンドウ”という所に文字を表示する機能がDebug.Print
>>146のソースの中にDebugPrintてあるのは確認用で実際のフォーム内には表示されない
なので表示するためにはラベルやテキストボックスに表示させる必要がある

ぶっちゃけどれ位かけるの?
ボタン押してラベルの文字と色を変更することくらいはできるの?

160:デフォルトの名無しさん
07/06/09 11:19:36
むしろ今からVB6を「基礎から」勉強してどうする。

161:デフォルトの名無しさん
07/06/09 14:50:50
>>160
会社によっては未だにVB5使ってるところもあるんだし、
勉強するのに時代遅れもなにもないんじゃない?

必要だから習得する。
必要なければ習得しない。

こんなもんでしょ?

162:デフォルトの名無しさん
07/06/09 15:13:25
むしろこのスレの住人なら
もうバージョンアップしない「 完 成 さ れ た 」この言語を
一生使い続けるぐらいの気持ちで

163:デフォルトの名無しさん
07/06/09 15:22:47
>>162
そこまでは愛せない俺ガイル

164:125
07/06/09 15:36:26
>>159
遅くなってすいません
下の二行に書かれていることはできると思います

本当に簡単なことは多分できるのですが、例えば

Option Explicit

Public Enum ELEVEL
LV_PLS = 1
LV_MIN = 2
LV_MUL = 3
LV_DIV = 4
End Enum

Public Type TMATH
Level As ELEVEL
Max As Long
Min As Long
Length As Integer
Brackets As Byte
End Type

などのソースはいきなり見たことない書き方の連続で
何が何を意味してるとかが全く分からない状況です・・・

165:デフォルトの名無しさん
07/06/09 15:49:48
>>164
そんな事すらいちいち教えなきゃいけないのか?
自分で調べる気は毛頭ないのか?
トイレまで他人が手伝ってもらわないといけないのか?
ふざけんなこの野郎

166:デフォルトの名無しさん
07/06/09 15:51:25
>>164
基礎を勉強してからアプリなり何なり作るといいと思うよ。
処理云々以前の問題。

167:デフォルトの名無しさん
07/06/09 15:58:10
EnumもTypeも調べられない程度の人間にプログラムは向いてないんだってばっちゃが言ってた!

168:デフォルトの名無しさん
07/06/09 18:09:57
>正誤に関らず ・・
という部分が非常に気持ちわりいな
誰か、正誤判定出来るよう修正キボンヌ

169:デフォルトの名無しさん
07/06/10 01:04:18
>>168
正誤判定はしてるんだろ?
指定された時間が経過したら正解率出すんだし。

答える度に毎回ヴィジュアル的に軽く表現させる程度なら
普通にやるもんだろーと思うが。

質問者が言ってるのは、
正解でも不正解でも次々と問題が表示されていくってことだと思うんだが。

170:デフォルトの名無しさん
07/06/10 11:31:53
SMTPでメール受信するプログラムをVBで作成しようとかんがえているのですが、受信したメールをポップアップで表示するのは可能ですか?

171:デフォルトの名無しさん
07/06/10 11:42:18
>>170
SMTPでメールを受信とは、サーバを作りたいと言ってるの?

172:デフォルトの名無しさん
07/06/10 11:50:28
>>170
受信したメールは貴方がメールだと思っているだけで、実はタダの文字列なんじゃないか?

173:デフォルトの名無しさん
07/06/10 12:00:44
いい感じに荒れてきた

174:デフォルトの名無しさん
07/06/10 12:50:39
BSMTPの話?

175:デフォルトの名無しさん
07/06/10 12:53:29
>>173
つ アロエ
  肌にいいらしいぞ

176:デフォルトの名無しさん
07/06/10 13:14:50
このスレにSMTPは送信用のプロトコルだと勘違いしてるやつがいる。

177:デフォルトの名無しさん
07/06/10 14:03:02
あげあしとり出現w

178:125
07/06/10 16:15:19
取りあえず今自分なりの書き方でプログラムを作っていて
一個一個順を追って152に書いたことに近づけていっている感じなんですが
取りあえずフォームが開いたらランダムで一つの数式を表示しようということを
やろうとしていて

Randomize
Dim a As Integer
Dim b As Integer
a = 99
b = 10
Label1.Caption = CInt(Rnd(a) * 100)
Label1.Caption = CInt(Rnd(b) * 100)
Label1.Caption = CStr(a) & "+" & CStr(b)

と書いたんですが、これだとaとbの値が変化せずに99+10と表示されてしまい
値が固定化されてしまいます・・・
ランダムの効果を利かせるには何かソースが足りないんでしょうか?

179:デフォルトの名無しさん
07/06/10 16:24:35
ワラタ
なんかこうなってくると釣りクサイよなwww

180:デフォルトの名無しさん
07/06/10 17:08:23
初心者の俺でも分かる。
1行ずつ追っていけよww

181:デフォルトの名無しさん
07/06/10 17:10:27
相手にするから付け上がる

182:125
07/06/10 17:23:20
いや142さんのをヒントにやってみたつもりだったんですが・・・
2桁同士の加算にしたいから上限99、加減10に設定して
その値をランダムかしてa+bのところに表示
みたなイメージで書いたつもりです

183:デフォルトの名無しさん
07/06/10 17:29:48
うるさい
だまれ

184:デフォルトの名無しさん
07/06/10 17:35:17
(´・ω・)

185:デフォルトの名無しさん
07/06/10 17:42:30
>その値をランダムかして
ってランダム化表示してるだけだろ?aとbは元の値のままぢゃん

186:125
07/06/10 18:42:37
a = 99
b = 10
のすぐ下の
Label1.Caption = CInt(Rnd(a) * 100)
Label1.Caption = CInt(Rnd(b) * 100)
でランダム化して、その下の
Label1.Caption = CStr(a) & "+" & CStr(b)
でランダム化したa、bをa+bの形式で出力できると思ったのですが
どの辺がおかしいですか?
プログラムを色々前後させてやっても値が0になったりしてしまいます・・・

187:デフォルトの名無しさん
07/06/10 18:48:48
ヘルプ使えよカス
Rnd()でググるなりしてもすぐ解決するだろうに
いちいちその程度のことを人に聞くなよタコ助が

188:デフォルトの名無しさん
07/06/10 18:49:12
>>186
>>165

189:デフォルトの名無しさん
07/06/10 19:35:21
>ランダム化したa、bを
ランダム化してねぇぇぇぇぇぇぇぇ!



...それともRnd()は呼び元で用意しているパラメータの値を書き換えるのか?

190:125
07/06/10 19:49:48
すいません、調べてもあまり出てこないし
ヘルプも自分はインストールしてなかったし今手元にCDもないんです・・・

Dim a As Integer
Dim b As Integer
をDim arandom As Integer
とか色々書き換えてみましたが違うみたいで
Label1.Caption = CInt(Rnd(a) * 100)
Label1.Caption = CInt(Rnd(b) * 100)
でa、bをランダムかしてるのかなと思ったんですが
Rnd(a)とかの表現がおかしいですか?

191:デフォルトの名無しさん
07/06/10 19:56:51
質問は手元にCDがある状態になってからにしてくれ
このままではお前のくだらない質問だらけでスレがいくつあっても足りない
はっきりいって迷惑なんだよ

192:デフォルトの名無しさん
07/06/10 20:13:14
くだらないはないんじゃないか?
もともとVBに関する質問をするスレなんだから
初心者はホントに簡単なプログラムでも微妙なとこ
どうすればいいとかわからんもんだよ
お前も慣れるまではそうだっただろ?
何なら俺が125の実現したい機能全部書いてやってもいいけどね


193:デフォルトの名無しさん
07/06/10 20:17:01
> Rnd(a)とかの表現がおかしいですか?
いいえ。
a,bの値を書き換えるようにしていないのがダメなだけです。

194:デフォルトの名無しさん
07/06/10 20:18:56
>>192
125とあなたでメールでやり取りしてくれ
せいぜい125の辞書にでもなればいい

195:デフォルトの名無しさん
07/06/10 20:32:38
とりあえずマニュアルを入手するのが第一。
これはVBScriptのだけど、VB6でも同じだからよく読んでみろ。
URLリンク(www.mhl.janis.or.jp)


196:デフォルトの名無しさん
07/06/10 20:33:34
だからF8キーで1行ずつやってどういう動きをするか見ればいいのに。
Label1.Caption = CInt(Rnd(a) * 100) で、
たとえばLabel1は55と出たとする。
その時のaの値は???  99だろ?
いい加減気づいてよ…。


197:125
07/06/10 20:48:58
すいません、193さんのコメントで数式はランダムで
上手く出てくるようになりました
明日以降からはしっかりとMSDNをインストールして来れると思うので
最後に今日中にもう一つだけ教えていただきたいのですが
2桁の整数同士を加算したいから142をヒントにして
Ransuu = Int((hi - Lo + 1) * Rnd + Lo) をa、bに置き換えてみたんですが
一桁の整数がまだ出てきてしまいます
多分ここがポイントになってると思うんですが、この式は何を行うための
式なんですか?


198:デフォルトの名無しさん
07/06/10 20:59:45
>>197
ステップ実行すりゃいくらでも分かるだろ
何故それをしない?

>>142の式はRansuuに1~10の値をランダムに代入してるだけだ

199:デフォルトの名無しさん
07/06/10 21:01:03
上限と下限の間の乱数を得る式

200:125
07/06/10 21:01:57
>>198
ステップ実行って何ですか?

201:デフォルトの名無しさん
07/06/10 21:03:58
やってみればわかる

202:デフォルトの名無しさん
07/06/10 21:31:01
例えばコマンドがクリックされるたびに
数字が一つ増えていくといったような機能は
VBで作ることは可能ですか?

203:デフォルトの名無しさん
07/06/10 21:32:23
はい

204:デフォルトの名無しさん
07/06/10 21:46:41
Wubi - Ubuntu installer for Windows
スレリンク(software板)l50

205:デフォルトの名無しさん
07/06/10 22:07:53
あまりにも初歩的な質問はこっちの方が親切に答えてくれるぞ

くだすれVB6.0以前(超初心者向け)
スレリンク(tech板)

住人は共通化もしれんが

206:デフォルトの名無しさん
07/06/10 22:10:36
このスレだって、相手のためになるように親切に答えてるじゃないか。失礼だな。

207:デフォルトの名無しさん
07/06/11 00:42:45
1から全部教えるのは可能だが、
それじゃ人に教えられたことしか出来なくなるからな。

理解せずに"書き方"としてコードを覚えて貰っても意味がない。
同じことの繰り返しになるだけ。

208:デフォルトの名無しさん
07/06/11 09:16:10
これ一度わんくまで質問してもらいたいな
どんな素晴らしい回答が帰ってくるのか
いや・・・それすらないかもしれんw

>>125
現在全てのソースで現状何処までできて何処がどう理解できないのか
折角だからkwsk書いてみ?

それの判らない事は教えないと思うけど調べる為の術はきっと優しいお兄さん方が教えてくれるかもしれないw
でも・・・・判らない事を適切に調べることができるのもPGとしてのスキルだと思うぜ

209:デフォルトの名無しさん
07/06/12 11:01:28
>>202
こんな感じか?
このくらいVBでなくとも余裕だと思うが。

Private m_lCnt As Long

Private Sub Command1_Click()
m_lCnt = m_lCnt + 1&
Label1.Caption = CStr(m_lCnt)
End Sub

Private Sub Form_Load()
m_lCnt = 0&
Label1.Caption = CStr(m_lCnt)
End Sub


210:デフォルトの名無しさん
07/06/13 14:24:13
VB6でテキストボックスからフォーカスを他へ移さないようにしたいのですが、どうしたらいいんですか?
後、カーソルを左端じゃなくて右端に固定したいのですが…


211:デフォルトの名無しさん
07/06/13 15:41:21
なんのためのプロパティだ。

212:デフォルトの名無しさん
07/06/13 15:54:20
どうして複数のスレで聞くんだろうな
答える人間は一緒なのに

213:デフォルトの名無しさん
07/06/13 16:56:23
スペシャルヒント
ろすとふぉーかす
せっとふぉーかす
あらいんめんと

214:デフォルトの名無しさん
07/06/13 22:01:45
ご冗談を。

215:デフォルトの名無しさん
07/06/14 08:29:36
validateでいいんでね

216:デフォルトの名無しさん
07/06/14 19:37:29
エクセルのデータを読込むために以下のスクリプトを作りました。

Set pExlApp = CreateObject("Excel.Application")
Set pExlBook = pExlApp.Workbooks.Open(strFileName)

1段目は正常に動くのですが
2段目が
OfficeXP時は正常に動き
Office2000時にエラーがでてしまいます。

どのような理由が考えられますか?

217:デフォルトの名無しさん
07/06/14 20:41:52
2つ質問です。

自作のActivX DLL を exe から呼んでるんですが、

1、プロジェクト→参照 でDLLを参照すると、DLLの配置ディレクトリを
  フルパスで設定しているように見えるんですが、この認識はあってますか?

2、他のマシンに自作プログラムを持っていくとき、exeとdllの配置場所を任意に
  したいのですが、どうしたら可能ですか?



218:デフォルトの名無しさん
07/06/15 00:09:41
>>217
1、ActiveXコンポーネントはレジストリ登録して使えるようになる訳だから、
当然場所はフルパスで設定されている。

2、ActiveX DLLはどんな場所にインストールしようと構わない。
インストーラでActiveXコンポーネントを登録をするようにするだけ。

219:デフォルトの名無しさん
07/06/15 00:36:15
>>218
なるほど、ありがとうございます。
うすうす勘付いてはいましたが、やっぱレジストリ登録するのか。

ということは、DLLの位置は気軽に移動することはできないってことですね?
Win32APIのLoadLibrayEx だといくつかのサーチパス候補のどれかにあれば
いい、・・・というようなやり方は無理と。

220:デフォルトの名無しさん
07/06/15 00:37:52
× いい、・・・というようなやり方は無理と。
○ いいという仕様ですが、そういうやり方は無理と。

221:デフォルトの名無しさん
07/06/15 05:57:23
Msxml2.XMLHTTPとかWinHttp.WinHttpRequest.5.1などを使用して
Webページをリクエストした時に
送られてくるクッキーを取得したいのですが
これは可能なのでしょうか?

222:デフォルトの名無しさん
07/06/15 09:56:07
質問ですが
例えば、コマンドボタンが3つありそれをある規則に従って
順番にクリックしてもらった後に次の処理が実行される
といったコードを書きたいんですが、
コマンドが1、2、3と順に押されたことの判定と
最後のコマンドが押された瞬間に行わせたい処理はどこに記述すればいいのでしょうか?
コマンドが押される順番は毎回決まってないといった感じなので、
特定のコマンド内に書くやり方ではうまくいかないと思うのですが
何かやり方をご存知の方がいたらご教授よろしくお願いします

223:デフォルトの名無しさん
07/06/15 10:35:08
>>222 こんないい加減なコードとかどうよ?www 動作は環境ないから試してないけど
private m_ButtonFlag(1 to 3) as long
private m_cnt as long

private sub form_load
 m_cnt = 0
end sub
private sub Button1_click
 m_ButtonFlag(1) = cnt+1
end sub
private sub Button2_click
 m_ButtonFlag(2) = cnt+1
end sub
private sub Button3_click
 m_ButtonFlag(3) = cnt+1
end sub
private sub ButtonManage
 dim i as long
 for i = 1 to 3
  if m_ButtonFlag(i) =0 then
   exit sub
  end if
 next i
 
 if m_ButtonFlag(1)= 1 and m_ButtonFlag(2) = 2 and m_ButtonFlag(3) = 3 then
  msgbox "ボタンが123の順に押されました"
 end if
end sub

private sub Button4_Click
 erase m_ButtonFlag:m_cnt=0
end sub

224:デフォルトの名無しさん
07/06/15 10:37:42
書き忘れてた
ボタンのクリックで ButtonManage を最後に追加しないと判定しないわw

225:デフォルトの名無しさん
07/06/15 11:55:18
>216
エラーメッセージくらい書けよ

226:デフォルトの名無しさん
07/06/16 02:40:44
>>223
変数cntが未定義&インクリされてない件について

それじゃどの順番でボタン押しても、
配列の値はみんな同じじゃね?w

227:デフォルトの名無しさん
07/06/16 02:43:19
m_cntにも0しか代入してねぇwwwワロタwwwww

228:デフォルトの名無しさん
07/06/16 04:59:00
第三者が通知を受けてチェックすれば言いだけジャン。

Private m_IdQue As String
Private m_ValidOrder As String

Private Sub Form1_Load()
  m_IdPool = "  "      'ダミーの3桁データを入れておく
  m_ValidOrder = "123"  ' 最初の規則は123の順
End Sub

Private Sub Button1_Clock
  AddEventToQue "1"
End Sub
Private Sub Button2_Clock
  AddEventToQue "2"
End Sub
Private Sub Button3_Clock
  AddEventToQue "3"
End Sub

Private Sub AddEventToQue(id As String)
  m_IdQue = Right(m_idQue, 2) & id
  If m_IdQue <> m_ValidOrder Then
    Exit Sub
  End If

  ' 規則の順に押された。
  DoNextProc  ' 次の処理

End Sub

規則を変えたくなったら、好きなタイミングでm_ValidOrder を変更すればいい。

229:デフォルトの名無しさん
07/06/16 05:05:38
ミスった、コードの中の m_IdPool  は m_IdQue に置き換えて読んでくれ。
修正漏れがあった。

230:デフォルトの名無しさん
07/06/16 05:07:30
しかも、Clock になってた oRzz

231:デフォルトの名無しさん
07/06/16 11:57:16
>>222
クラス使ってステートマシン作るのがいいと思う。
実際書いてみたんで要望があれば言ってちょ。

232:デフォルトの名無しさん
07/06/16 14:55:25
VBからAccessにデータを追加する場合
オートナンバーの項目はどうすればいいのでしょうか?

wrkSql = wrkSql & "INSERT INTO MSTDB VALUES("
wrkSql = wrkSql & "" & & "," 'オートナンバー
wrkSql = wrkSql & "" & wYear & "," '年
wrkSql = wrkSql & "" & wMonth & "," '月
wrkSql = wrkSql & "" & wDay & ")"    '日

'クエリ実行
gConnDB.Execute wrkSql

これの一番上のオートナンバーの追加がわかりません。

233:デフォルトの名無しさん
07/06/16 18:36:29
>>232
オートナンバーはINSERTの対象にしなけりゃいいんだよ。
勝手に値が入る。


234:デフォルトの名無しさん
07/06/16 21:25:30
ありがとうございます


235:222
07/06/17 10:11:22
遅くなってすいません、なぜか規制がずっとかかっていて書き込めませんでした・・・
みなさんいろいろありがとうございます

>>228
buttonをcommandに変えてそのまま実行してみたんすが
Private Sub AddEventToQue(id As String) というところの
AddEventToQueでsubまたはfunctionが定義されていませんという表示が出てしまいます・・・
ここを変数宣言してみたり色々やってみたりしたんですが、まだうまくいかないので
アドバイス頂けると助かります

>>231
ありがとうございます
クラス使ってステートマシンというのについてよろしければ
もう少し具体的に教えていただけませんか?
取りあえず今はコマンドが3つ押されたことを認識したら
例えば画面上にあるラベル内の数値などが変更されるといったようなことを目指してます



236:231
07/06/17 12:39:24
>>235
こんな感じ

'---- クラスモジュール CInputOrderValidator ----
Private mInputCount As Integer
Private mValidInputOrder() As eInput
Private mInivalidInputEntered As Boolean
Public Event ValidationFinished(result As eValidationResult)

Public Enum eState
  Initial = 0
  DuringInput = 1
  ValidationFinished = 2
End Enum

Public Enum eInput
  Button1 = 1
  Button2 = 2
  Button3 = 3
End Enum

Public Enum eValidationResult
  Indeterminate = 0
  Invalid = 1
  Valid = 2
End Enum

Private Sub Class_Initialize()
  mValidInputOrder = GetDefaultValidInputOrder()
  Me.Reset
End Sub

237:231
07/06/17 12:40:54
Private Function GetDefaultValidInputOrder() As eInput()
  Dim vValids() As Variant
  vValids = Array(eInput.Button1, eInput.Button2, eInput.Button3)
  Dim valids() As eInput
  Dim i As Integer
  Dim lastIdx As Integer
  lastIdx = UBound(vValids)
  ReDim valids(lastIdx)
  For i = 0 To lastIdx
    valids(i) = vValids(i)
  Next
  GetDefaultValidInputOrder = valids
End Function

Public Sub Reset()
  mInputCount = 0
  mInivalidInputEntered = False
End Sub

Public Property Get State() As eState
  If mInputCount = 0 Then
    State = Initial
  ElseIf mInputCount >= Me.ValidInputLength Then
    State = ValidationFinished
  Else
    State = DuringInput
  End If
End Property

238:231
07/06/17 12:42:08
Public Property Get ValidInputLength() As Integer
    ValidInputLength = UBound(mValidInputOrder) + 1
End Property

Public Property Get ValidationResult() As eValidationResult
  If Me.State = ValidationFinished Then
    If mInivalidInputEntered Then
      ValidationResult = Invalid
    Else
      ValidationResult = Valid
    End If
  Else
    ValidationResult = Indeterminate
  End If
End Property

Public Sub SetNextInput(nextInput As eInput)
  If Me.State = ValidationFinished Then
    Exit Sub
  End If
  If mValidInputOrder(mInputCount) <> nextInput Then
    mInivalidInputEntered = True
  End If
  mInputCount = mInputCount + 1
  If Me.State = ValidationFinished Then
    RaiseEvent ValidationFinished(Me.ValidationResult)
  End If
End Sub

239:231
07/06/17 12:43:38
'---- Form1 ----
Private WithEvents mValidator As CInputOrderValidator

Private Sub Form_Load()
Set mValidator = New CInputOrderValidator
End Sub

Private Sub Command1_Click()
  mValidator.SetNextInput (Button1)
End Sub

Private Sub Command2_Click()
  mValidator.SetNextInput (Button2)
End Sub

Private Sub Command3_Click()
  mValidator.SetNextInput (Button3)
End Sub

Private Sub mValidator_ValidationFinished(result As eValidationResult)
  If result = Valid Then
    MsgBox ("OK !")
  Else
    MsgBox ("NG !")
  End If
  mValidator.Reset
End Sub

240:222
07/06/17 14:30:34
ありがとうございます
まだコードを実行してないんですが、これを実行する場合って
Buttonのフォームが必要ですよね?
本を見た感じだと画面左のコマンドやらラベルやらを引っ張ってくる場所から
ボタンも引っ張ってこれるようになってるっぽいんですが、自分のVB6.0には
入ってないっぽいんですよね・・・画面色々いじくって表示させられないか試したりもしたんですが・・・
あとこれを実行して上手く自分の目的の機能を実現するためには、コマンドやボタン
以外にもフォーム上に引っ張ってくるべきアイテムはありますか?

241:デフォルトの名無しさん
07/06/17 18:39:51
>>240
必要な操作は、

(1) プロジェクトにクラスモジュールを追加して、プロパティグリッドで名前を"CInputOrderValidator"
  に変更して>>236以降のコードを貼り付ける。

(2) Form1にコマンドボタンを三つ(Command1、Command2、Command3)貼り付けて
  >>239のコードを貼り付ける。

これだけだよ。

242:デフォルトの名無しさん
07/06/17 19:04:45
>>235
まさかとは思うが、
DoNextProc
これもコードとしてそのまま書いたのか?

243:デフォルトの名無しさん
07/06/17 23:04:21
>>242
そのまま書いていました・・・

>>241
実行できましたありがとうございます
この場合だとコマンド1、2、3の順で押された場合はAの処理
他の順で押される5通りの場合はBの処理が行われるといった感じになっていて
これを全てバラバラに考えて(例えば、2、1,3の順で押されたらCの処理)
といったようにしたいと思ってクラスモジュール内でこの機能を実現するために
関係してきそうな部分を探して考えてみたんですがいまいちどこをいじればいいかが分かりません・・・
何度も申し訳ありませんが、これに関してアドバイスいただけると助かります
よろしくお願いします

244:デフォルトの名無しさん
07/06/18 09:09:47
>>243
一連の流れを眺めてみたけどさ、もっと本質を理解したほうが良いと思うよ
VB6以前なら強力なデバッグ実行機能もあるんだしさ

・暗記すべき部分はきっちり暗記汁(VBの予約語等
・エラーが出たら、メッセージ良く嫁
・デバッグ実行でどんな処理がどこで行われているか調べるべし
・コードの全体をイメージ出来るまでひたすら読んだり書いたりデバッグ実行したり汁
・つーか、ちっとは自分で考えろw

245:デフォルトの名無しさん
07/06/18 17:16:16
>>243
Select Caseも知らんのか。

あと>>242で言ってるのは要約すると、
サンプルとして挙げられたソースに記述してあるコメントくらい普通に理解しろってことなんだが…

分かるか?

246:デフォルトの名無しさん
07/06/18 19:56:33
ここ1,2週間で聞いてきてるやつは全部同一人物っぽいな・・・

247:デフォルトの名無しさん
07/06/18 19:59:25
終わった言語をいまさらスタートする奴なんてそんなにいないしな

248:デフォルトの名無しさん
07/06/18 22:03:55
勝手に終わってろカオス

249:デブオ
07/06/19 16:58:10
すみません。VB(6.0)で指定されたURLにファイルをPOSTする。
又、指定されたURLからファイルをダウンロードすことってできますか?
できるとすればどのようにすればいいのでしょうか?
どなたか教えてください。

250:デフォルトの名無しさん
07/06/19 17:00:28
>>249
WEBBROWSERコントロールでも使ってろよw

251:デブオ
07/06/19 17:16:19
WEBBROWSERコントロールというのは標準で入っていないようなのですが?
MSWebDVDコントロールのことでしょうか?

252:デフォルトの名無しさん
07/06/19 17:24:11
マジレスすると
メニュー>プロジェクト>コンポーネント>コントロールで
該当するやつのチェック外せばいいよ
どのコントロールかぐらいは自分で調べろ

253:デフォルトの名無しさん
07/06/19 17:33:11
×チェック外せば
○チェック入れれば

254:デフォルトの名無しさん
07/06/19 19:06:09
VB6のWebBrowserコントロールは
ビスタでも問題なく使えますか?

255:デフォルトの名無しさん
07/06/19 21:20:25
使えるかどうか自分で試して
それをここに報告すれば良いのでは

256:デフォルトの名無しさん
07/06/20 00:49:42
VBって遅いよな

257:デフォルトの名無しさん
07/06/20 01:37:24
Cって速いよな
でもC++って劇遅だよな

258:デフォルトの名無しさん
07/06/20 02:09:20
>>256-257
つまんねえ釣りはVIPでやれ

259:デフォルトの名無しさん
07/06/20 15:30:14
FlexGridの行選択についての質問です

FormLoadに
flexGrid.SelectionMode = flexSelectionByRow
をいれることにより行選択は可能になりますが、

範囲指定を不可能にする方法はありますか?

また選択している行の位置を求める方法はどうするのでしょうか?

260:デフォルトの名無しさん
07/06/20 23:19:49
レジストリのキー値(ツリーの枝の部分)の取得方法をご教授ください。

例)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-18
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-19
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-20

のS-1-5-18、S-1-5-19、S-1-5-20を検索して取得したい。


以上宜しくお願い致します。


261:デフォルトの名無しさん
07/06/21 09:26:00
>>259
範囲選択を不可能にする方法はある

行に値を調べる方法は
Rowプロパ


262:261
07/06/21 09:26:52
誤植

行の位置を調べる方法は
Rowプロパティのヘルプを見てみないか?



263:デフォルトの名無しさん
07/06/21 14:41:36
まずアプリケーションウィザードを使って適当なプロジェクトを作る。
そのときバージョン情報ダイアログを組み込むように指定する。
そのフォームの「システム情報」ボタンがレジストリにアクセスしてるから
そこをパクる。
簡単な取得だけならこれで済むと思います。
このコードは、レジストリに読み書き権限でアクセスするので、guestとか制限ユーザーだと
エラーになるかもしれません。APIビューアからKEY_READを探してきて、
読み取り専用権限に直しておいてください。


264:デフォルトの名無しさん
07/06/21 15:36:44
>>263>>261です。悪かったな。


265:デフォルトの名無しさん
07/06/21 15:39:02
すいません>>263>>260へのレスです。たびたびごめんなさい。

266:デフォルトの名無しさん
07/06/21 16:29:07
イ~ンダヨ~

267:デフォルトの名無しさん
07/06/21 16:50:01
ブル~ダヨ~

268:デフォルトの名無しさん
07/06/24 08:29:21
Visual Basic 5.0でActiveXコントロールを作成し、セットアップウィザードを利用して
インターネットで配布するファイルを生成しましたが、
サーバに配置してアクセスしてもインストールが開始されず、
左上に×マークがでるだけの状態です。
どうすれば正常にインストールされるようになるのでしょうか?
なお、配布ファイルには署名をしており、ブラウザはIE6で、
ActiveX関係の設定は有効にしています。

269:デフォルトの名無しさん
07/06/25 04:30:11
コンポーネントShockwave Flashで外部から読み込んだSWFファイルの右クリックメニューを完全に消す方法を教えて下さい

270:デフォルトの名無しさん
07/06/25 10:36:03
>>268
ディストリビューションウィザードのこと?
サーバ上に配置したファイル名を全て挙げてみ?
それとVB関係無いがファイルのアクセス権限はどうなってる?

>>269
なにそのVBのVの字も出てこない素敵Questionはwwww
Flashについてはよく知らないが、ひょっとしてJavaScriptの話じゃね?
スレチにも程があるよ?

271:デフォルトの名無しさん
07/06/25 14:17:00
上から質問に答えると
・6.0でディストリビューションウィザードといわれるものが5.0でのセットアップウィザードのようです。
・CABとHTMファイルです。
・読み、書き、実行権限を全員にすべて与えている状態です。

272:デフォルトの名無しさん
07/06/25 15:05:43
>>271
CABは圧縮ファイルであって、インストーラではないのだが。

273:デフォルトの名無しさん
07/06/25 15:08:21
>>271
ウィザードで作られるファイルは3つあるはず。
CABしかあげてないから駄目なんじゃね?
Setup.exeともう一つなんかあったような

274:デフォルトの名無しさん
07/06/25 17:15:51
>>273
SETUP.LST

275:268
07/06/25 17:32:31
セットアップウィザードで作成されたファイルは
CAB・HTMファイルと、SUPPORTフォルダ(中にOCX・DDF・INFファイル)でした。
Setup.exeやSETUP.LSTといったファイルは見つけることができませんでした。


276:デフォルトの名無しさん
07/06/26 05:31:24
VBはよく知らないC使いなのですが、
VBで作られたEXEファイルは完全な機械語のファイルなのでしょうか?
それとも中間言語が入っているのでしょうか?

277:デフォルトの名無しさん
07/06/26 08:05:21
>>276
Pコードのオプションつければ中間もつくれる

278:デフォルトの名無しさん
07/06/26 09:33:00
>>276
コンパイルするとC2.EXE と LINK.EXEが裏で動いている。

279:デフォルトの名無しさん
07/06/26 16:02:51
みな様お世話様です。
VBScript(WSH)をかじり始めたものです。

作成したCVSファイルに1行追加したいのです。

Set objText = objFile.OpenAsTextStream(8,0)
objText.WriteLine("搬入年月日,Xコード,工場コード,得意先コード~他")

(8,0)で8が追加モードとのことですが挿入ってのはないんでしょうか?
最終行ではなく一行目にWritelineの内容を挿入したいのです。

何かヒントいただければ幸いです。

280:デフォルトの名無しさん
07/06/26 18:03:16
VB6なんですが、
WebBrowserを利用してどこかのサイトを読み込ませて、読み込み完了まで待機するという処理で、
実行エラー -2(fffffffe) オートメーションエラーが発生してしまいます。
以下、例
WebBrowser2.Navigate "URLリンク(www.yahoo.co.jp)
DoEvents
Do While WebBrowser2.Busy = True
⇒ DoEvents 'ここで発生
Loop
Do While WebBrowser2.Document.ReadyState <> "complete"
DoEvents
Loop

処理自体がいけないのでしょうか?
DoEventsの使用方法がおかしいのでしょうか?

281:デフォルトの名無しさん
07/06/26 23:30:18
>>279
案1
 既存のファイルを全部読む
 先頭に連結して保存
案2
 バッチ

282:デフォルトの名無しさん
07/06/27 01:11:48
>>266-267
どうでもいいけどあのCMの曲って全員集合のアレンジなんだよね。

283:デフォルトの名無しさん
07/06/27 01:13:28
あと>>279につっこませてくれ。それを言うならCSVです、と。

284:デフォルトの名無しさん
07/06/27 01:18:50
>>276
>>277
メニューのプロジェクト→プロジェクトのプロパティ
「コンパイル」タブの話です。


285:279
07/06/27 11:21:18
>>281
どうもです。
案1の場合、既存のCSVをInputにして1行ごとにOut。。
その時にヘッダー、、項目行と結合って事でしょうか?


>>283
( ̄□ ̄;)!! あっ

286:デフォルトの名無しさん
07/06/27 12:14:14
VBScriptでCVS作ったらまさに神だな・・・
いつ落ちるか怖くて使いたくないがw

287:デフォルトの名無しさん
07/06/27 13:15:23
>>285
横レスだが
別にStreamだし一気に読みこんでそこにくっつけるんでいいんじゃないの?


288:デフォルトの名無しさん
07/06/27 13:55:51
他のアプリケーションでオープン中のファイルを直接編集・更新かける方法は
御座いませんでしょうか?


289:279
07/06/27 14:27:03
>>287
objRead.AtendOfStream ~ こういうやつ?
InsertLine なんてもあったとは知らなかった、、、
なんとなくどうすればいいか見えてきた気がします。

みんなヒントサンクスです。もうちょい頭ひねってみます




でも。。。(´・ω・`)突っ込みあってから元気でないよー

290:デフォルトの名無しさん
07/06/27 14:42:16
>>288
「他のアプリケーション」はオープンしてるファイルを
横から書き換えられて誤動作しないの?

291:279
07/06/27 15:18:43
Set objRead = objFso.OpenTextFile(読込CSVの保存パス , ForReading)
objRead.ReadAll
intLine = objRead.Line

まずこんなんやってみました。
ここから行数わりだして、その値をとりあえず「x」として
その「x」が1行目をさす所に"InsertLine~"を考えています。

たぶんいろんなやり方あるんだろうけど、ここからやっていきます。
また詰まったら指導お願いすると思うのでよろしくです。

292:デフォルトの名無しさん
07/06/27 15:29:17
>>279
のような行動が当たり前なんだろうけど、このスレではものすごい優秀な行動に見えて困るw

293:デフォルトの名無しさん
07/06/27 23:01:08
tempというエクセルファイル(マクロを実行するファイル)と同じ階層に
財務****.xls(*は日付)というファイルが複数あって、
財務ファイルのセルA1とA10の値をtempにリスト化させるにはどうしたらいいのでしょう?
財務ファイルを一つずつ開けてたらきりがないので一気に処理できたらと思うのですが・・・。
できれば、
財務ファイル名、A1、A10
が横に並んでて、縦にファイル全ての値がリスト化できるようにしたいのですが、どなたかご存じないですか?

294:デフォルトの名無しさん
07/06/28 01:56:51
・フォルダ内の全てのファイル名を順に得るようなコードを書いてみる
・任意のエクセルファイルを開いてA1~A10を読むコードを書いてみる
・二つをくっつける。ファイル名が自身と同じなら読まない。開くたびに一行ずらす。

って、VBAはスレ違いじゃなかったっけか。

295:デフォルトの名無しさん
07/06/28 04:42:41
> ここから行数わりだして、その値をとりあえず「x」として
> その「x」が1行目をさす所に"InsertLine~"を考えています。
何言ってるかわからんのだけど誰かわかるの居る?
>>279の目的で行数調べる必要どこにあるんだ?

>>292



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch