トップページtech
1001コメント306KB

(*´д`*)ウッ… VB初心者質問スレ Part15

■ このスレッドは過去ログ倉庫に格納されています
0001エロチカセブンNGNG
  Part 1 http://piza.2ch.net/tech/kako/968/968328471.html
  Part 2 http://piza.2ch.net/tech/kako/990/990793224.html
  Part 3 http://piza2.2ch.net/tech/kako/1000/10005/1000523122.html
  Part 4 http://pc.2ch.net/tech/kako/1006/10069/1006922992.html
  Part 5 http://pc.2ch.net/tech/kako/1010/10106/1010624646.html
  Part 6 http://pc.2ch.net/tech/kako/1013/10138/1013844542.html
  Part 7 http://pc.2ch.net/tech/kako/1015/10158/1015836357.html
  Part 8 http://pc.2ch.net/tech/kako/1018/10187/1018794901.html
  Part 9 http://pc.2ch.net/tech/kako/1020/10208/1020830472.html
  Part10 http://pc.2ch.net/tech/kako/1022/10221/1022127528.html
  Part11 http://pc.2ch.net/tech/kako/1024/10243/1024380249.html
  Part12 http://pc3.2ch.net/test/read.cgi/tech/1026642565/
  Part13 http://pc3.2ch.net/test/read.cgi/tech/1029241786/l50
Win32 API関連スレ
  Win32API 質問箱 Build4
  http://pc.2ch.net/test/read.cgi/tech/1023361418/
心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.VBScript もこのスレでOK。
4.インストーラーなどの質問もOK。
五.下ネタもたまにならOK
0224デフォルトの名無しさんNGNG
VisualBasic6.0でクラスにMultiUseプロパティを定義してActiveXDLL
を作っています。

おもに、IIS上のASPからCreateObjectで関数を呼び出して使うた
めです。その関数は、別のWebサーバへHTTP通信をして値を取得
するという動作をします。

HTTP通信をするためにWinsockコントロールを使用しました。開発環境
(Windows2000)では動作しましたが、それをWindows2000Server上
で動かそうとするとWinsockのConnectでコケてしまうんです。

セットアップ媒体を作成したり、ocx周りの不足は散々確認したのですが
どうしても動きません。同じソースをNT4.0Server上で展開してステップ
実行して確認すると動作します。pingも通ります。他のコントロールは
使っていません。

なにか考えられることはありませんか・・・。
0225224NGNG
コケるというのは、間髪入れずに、接続エラー番号9を受信して
しまうと言うことです。
0226 NGNG
プログラムは ベテランですが VBは 最近、始めたので
初心者ですが、何か?
0227デフォルトの名無しさんNGNG
>>226
お前、ふぅ?
0228FIGHTNGNG
現在VB6.0SP5.0を使用しております。TreeViewコントロールでエクスプローラのような階層の
表示をさせております。
例)
+神奈川県
 +蒲生町
 +米五町
+東京都
 +安芸町
 +三輪町
のように上記のようなデータがあるとします。(100件ほど上記のデータが続きます)そこで検索
の画面をだして該当する場所を指定したいのです(カーソルが移る)「神奈川県」の「米五町」を指定
させた場合そこの階層が開いてわかるようにしたのです。何かよい方法はないでしょうか?
サンプルなどがあればそこのHPなども紹介して欲しいのですが・・・。
よろしくおねがいします。
0229 NGNG
>>228

町名が 複数ある場合は、どうするんだ?
0230FIGHTNGNG
>229
ユーザー側に検索させる時は、「県」と「町名」を必ず指定させます。
町名の重複はあっても県名の重複はないですよね。
0231 NGNG
県のすぐ下が町ってのも変だに。

東京は
東京都なんとか区なんとか 1−1−1
というふうに 町名がつかない場合がある。
神奈川県なんとか市なんとか町 なんとか 1−1−1
というパターンもある。
また、田舎だと
なんとか県なんとか郡なんとか町なんとか大字なんとか小字なんとか 1
とかいうのもある。
つーか
配列に 階層に入ってるもの(入れるときに)別に入れてやって
その配列で、何番目か調べて 開けばいいじゃん。

っーか TreeViewの何番目を開けってのは知らん(爆)
0232NGNG
>>230
ツリービューにノードを追加する時にキーを設定する。
キーは検索入力させるデータ("神奈川県米五町"など)と同じにする。
あとは検索画面(テキスト検索ならInputBoxでいいんじゃない)を表示して
その返り値をtre.SelectedItem = tre.Nodes("神奈川県米五町")って感じにすれば出来上がり。
0233デフォルトの名無しさんNGNG
>>228は中島みゆきオタ
0234FIGHTNGNG
>231
>232
なるほどそういう手もありますね。
早速参考にさせていただきます
ご教授ありがとうございます。
>233
えっと、中島みゆきの歌の「ファイト」ですかね?
ギリギリわかりました。ちょっとかんがえてしまいました。
結構古い歌ですね。なつかしい。ちなみにオタではありませんyo。

0235NGNG
232補足
存在しないキーを指定した場合はエラーになるのでその対応も忘れずに。
0236デフォルトの名無しさんNGNG
>>235に補足
キー文字列には罠があるので注意。勝手に文字の同一視したりする。
できればHexエンコードなどを行った方が安心。
0237NGNG
>TreeViewの何番目を開け
TreeViewを追加すると自動的に追加された順番でインデックスが付加されます。
後は同様にtre.SelectedItem = tre.Nodes(インデックス)って感じです。
0238NGNG
237訂正 TreeViewを追加→TreeViewにノードを追加
0239 NGNG
ループ処理で ListBoxにアイテムを追加しているんですが、
追加する件数が多いので、ListBoxの表面に出てる部分の数を追加した
時点で、一旦表示したいんですが、可能でしょうか?

なお、表示後、listbox1.AddItemを 続けます。
0240224NGNG
>>225の続きです・・・。

同じクラスをPrivateにしてexeを作成したら
アッサリ動作しました。ActiveXDLLではダメな
ようです・・・。
0241デフォルトの名無しさんNGNG
VB6.0でWebBrowserを使いVBのフォームの中にページを表示させるようにしました。
それでなんですが表示されたページの懸賞などの入力フォームなんかに自動入力させたいのですが
教えてください、お願いします
0242デフォルトの名無しさんNGNG
VisualBasic6での質問です。

コモンダイアログで選択した複数のファイルを、
1つずつ取り出したいのですが、うまくいきません。
実際、選択したファイル群は、

"パス ファイル名1 ファイル名2 ・・・"

のようにスペースで区切られた形で取れるのですが、
Split関数を使って以下のようにしたいのですが、だめでした。
(1番目の配列にすべて入っています・・・)

F() : 配列
Files : ファイル群

F=Split(Files," ")

Split関数の使い方の間違い、またはその他のよい方法がありましたら
お教え願います。
0243デフォルトの名無しさんNGNG
>>242
それホントに半角スペース区切り? NULLだったりしない?
コモンダイアログコントロールは使ったこと無いから知らないけど、
APIならNULL区切りだから、Split(Files,vbNullChar)ってやらなと
駄目だと思うが。
0244 NGNG
>>242
スペース区切りだったら C:\My Documents や C:\Program Filesは
どうなる?
0245デフォルトの名無しさんNGNG
>241
君の文章には「何を」という言葉がぬけているぞ。
0246デフォルトの名無しさんNGNG
>>242
ロングファイル名を有効にするフラグを立てた場合はNULL区切り、
無効にする場合はスペース区切りだな。
ちゃんとコモンダイアログのヘルプ(Flags プロパティ)に載ってるよ。
APIの場合でも同様だな。
0247241NGNG
あ、すいません。
自動入力させたいのは、iniファイルから読み込んだデータです。
懸賞なんかであれば名前や住所などです。
では改めてお願いいたします。

>245さん、ご指摘ありがとうございます。今自分で文章読んでみてアホだなと思いました。
0248242NGNG
MSDNより
---
[ファイル名]ボックスで複数のファイルを選択できるようにします。
ユーザーは、実行時に Shift キーと上下の方向キーを使って複数の
ファイルを選択できます。
複数のファイルが選択されると、選択されたすべてのファイルの名前を
含む文字列が FileName プロパティに設定されます。
FileName プロパティの文字列内のファイル名は、スペースで区切られます。
---
のようになっています。
特にスペースとしかかかれていません。一応全角、半角、space(1)で
確認しましたがだめでした。

実際の戻り値は、debug.printしたところ、
C:\Documents and Settings test.txt test2.txt
のようになっています。

C:\Documents and Settingsの部分はどうなるんでしょう?
0249242NGNG
>>243 さん
>>246 さん

cdlOFNLongNamesを設定して、vbNullCharでSplitできました。
ありがとうございます。

>>244 さん

実際上記の方法で取得したときには、
1番目の配列 "C:\Document and Settings"
2番目の配列 test1.txt
・・・
となりました。
0250デフォルトの名無しさんNGNG
>>249
>>248のMSDN、下の方の「解説」の部分にちゃんと書いてあるので読んでおくよーに。

もしかしたら、OSのバージョンなどでcdlOFNLongNamesかcdlOFNExplorer
あたりが勝手に立ってしまうことがあるのかもしれない。無いかもしれないが。
0251NGNG
>>239
Refresh(かDoEvents)すればいいんじゃないかな。
でもひとつ追加するたびにRefreshするととても遅くなるので
ループカウンタがいくつになった時、とかにすればいい。
もしくはループを分割してしまえばループ内で分岐判定する必要も無くなる。
コード汚くなるけど。
0252 NGNG
>>251

そのボックスに表示できる数にいったら、一旦 Refreshさせてるけど
ダメなようです。
その後は、Refreshさせてませんが。
0253デフォルトの名無しさんNGNG
DoEventsはよ。
0254 NGNG
>>253
ああ なるほど!

DoEventsでokだ。
さんくすこ
0255 NGNG
>>251
Refresh(かDoEvents)って 書いてあったらから 同じもんかと
思っちゃったヨ!

Delphiだったら どうやったらいいか知ってたんだけどね。
VBは あんましやってなかったからさ。
おかげで 表示が 速くなったヨ。
0256デフォルトの名無しさんNGNG
Winsockコントロール使って、サーバアプリケーションを作っています。

ConnectionRequestイベントの中で、acceptしたあと、
すぐにErrorイベントが2回続けて発生することがあるんですけど。

エラーの内容は、エラーコード=10053 「タイムアウトまたは他の問題によって、接続が中断されます」。

具体的になにが原因なのでしょうか?

0257デフォルトの名無しさんNGNG
LAN上にあるVB製exeを起動したら、
ランタイムやコンポーネント(ocx)などは、
そのLAN上のマシンから読みとられるんですか?
それとも起動したマシンから読みとられるんですか?
0258 NGNG
Dim lRtn As Long
lRtn = SetWindowPos(form1.hWnd, -1, 0, 0, 0, 0, &H40)

これで 最前面に表示させようとしてますが、
実行すると タスクバーにもうひとつバーが表示されて
ほかの画面をクリックすると それが 最前面になってしまいます。

常に 最前面にするには どうしたらいいのでしょうか?
0259デフォルトの名無しさんNGNG
>>257
よみとられません。
0260デフォルトの名無しさんNGNG
>>256
サーバーアプリはVBじゃないほうがいいと思う
0261デフォルトの名無しさんNGNG
>>258
Private Const HWND_TOPMOST = -1
Private Const SWP_SHOWWINDOW = &H40
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOMOVE Or SWP_NOSIZE

多分、SWP_NOMOVEとSWP_NOSIZEを入れてないせいでしょう。
0262258NGNG
lRtn = SetWindowPos(Me.hWnd, -1, 0, 0, 0, 0, &H43)
とやったら OKでした〜〜

ActiveX DLLだと Form1のハンドルという取得の仕方ができないらしい
0263秋山蓮NGNG
>>262
はしゃぐな!!
0264デフォルトの名無しさんNGNG
VB画面(frmAA)上からコマンドボタンを押したら
MDBへのデータ登録を行い、
登録が上手く行ったら
その画面(frmAA)のForm_Load処理を通すようにしたいんですけど、
その場合、

unload me
frmAA.show

と書く以外に良い方法ありますか?

0265デフォルトの名無しさんNGNG
>>264
単純にForm_Load呼び出したら?って言うかその仕様妙かも。
0266デフォルトの名無しさんNGNG
VB6+ADOでアプリを組んでいます。

あるレコードのフィールドAが更新されたら、その値に応じてフィールドBを更新しようと、
FieldChangeComplete イベント内に
pRecordset.files("B").Value=hoge
と言うコードを書いたのですが、「コンシューマのイベントハンドラはプロバイダの再
入不可能なメソッドを呼び出しました」となりうまくいきません。WillChangeFieldイベ
ントでも同様でした。

いい解決方法があれば教えていただけませんか。

OLD DB Provider は ODBC 、サーバはPostgreSQLを使用しています。
0267デフォルトの名無しさんNGNG
>>241
無視されてかわいそうだから教えてあげる。
でもその手の垢取りツールまがいのものはあんまり好まれないから
こういう場で堂々と質問するのはちょっとマズったね。

それで、質問についての回答だけど。
ずばり、良い方法は無いと思って良い。俺も前やったことあるので。
無理矢理やるなら、WebBrowserコントロールにフォーカスを当てて
SendKeysでTabキーを送ってやれば、WebBrowser内で次のフォームか何かにフォーカスが移る。
そうして{TAB}{TAB}{TAB}{TAB}とやっていって、入力欄にフォーカスが行ったら
これもスマートな方法じゃないが、一旦入力したい文字列をクリップボードにコピーし
SendkeysでCtrl+Vを送る。(貼り付け)
こうすることでWebBrowserのフォーカスのある項目に文字列をセットできる。
次の項目にまた文字列を入れたい場合は、一旦クリップボードの内容をClearしてから
その項目に入れたい文字列をクリップボードにまたコピー、SendKeysでCtrl+V。
0268デフォルトの名無しさんNGNG
みんなよけろ あきやまれん だけは ゆるせない!
0269デフォルトの名無しさんNGNG
VBでシステム時刻(通算秒)を取りたいのですがどうしたら良いでしょうか?
わかる方教えてください。お願いします。
0270デフォルトの名無しさんNGNG
Time関数ちゃうのン?
0271デフォルトの名無しさんNGNG
>>241
受け取ったHTMLのStringを解析し、
input タグ内の value プロパティを任意の文字列に入れかえたHTMLを表示ってのが好きそうなやりかただけど。

何に使うのかわからないけど、決まりきったフォーム内容なら
最初からPOSTメソッドを作成して送るほうが手っ取りばやいと思うけど。

その場で図書券のスリーマンモスの時はそれにしたなぁ(藁
クッキーデータも取得して作成しなければならなかったけけど。
0272デフォルトの名無しさんNGNG
>>271
ユニックスタイムスタンプみたいに、
通算秒にできればいいんですけど。
TIME$ でふたつの時間さを求めるには、秒や分が60までしかなかったり、
23の次が0だったり、
2月が28や29だったり30や31の月があったりするところで大変なので。
0273271NGNG
つづき。
または、onLoad関数に、

document.forms[0].name.value='hoge'

とかいうのを付加してHTMLを表示させるとか。
0274デフォルトの名無しさんNGNG
>>272
timerじゃだめなのか?
0275デフォルトの名無しさんNGNG
ディスプレイの解像度を変更してフルスクリーン化するプログラムを作りたいです。
DirectXとか使わないと無理なんでしょうか?
0276デフォルトの名無しさんNGNG
ChangeDisplaySettings?
0277241NGNG
>>267 >>271
お二方ありがとうございます!!
>でもその手の垢取りツールまがいのものはあんまり好まれないから
>こういう場で堂々と質問するのはちょっとマズったね。
なるほどそうだったんですか・・。大変勉強になりました。
では、早速両方の方法で試して見ます。本当にありがとうございました!!
0278デフォルトの名無しさんNGNG
>>272
Time関数から時分秒がわかるから、後は掛け算足し算だけじゃん。
0279デフォルトの名無しさんNGNG
サブネットマスクの取得はどうすればいいのでしょうか。
0280デフォルトの名無しさんNGNG
サブネットマスクって洗濯機に入っているゴミを集めるあれですか?
0281   NGNG
>>280
煽りで程度がわかるな。
0282デフォルトの名無しさんNGNG
ある絵の上にマウスポインタを持っていくと、別の画像に切り替えるようなことはできますか?
0283デフォルトの名無しさんNGNG
>>282
できます。
0284初心者NGNG
質問させていただきます。

フォーム上にコントロールがいくつかある時、現在フォーカスを持っている
コントロールは Screen.ActiveControl で確認できますが、
「今現在の"一つ前"にアクティブだったコントロール」を取得するにはどうしたらよいですか?
グローバルな変数を用意して、全てのコントロールの LostFocus 時に
コントロール名を保存しておく……と、これくらいしか思い浮かびません。

よろしくお願いします。
0285デフォルトの名無しさんNGNG
Window98なんだけど、どういうシリアルキーで登録したかみるにはどうしたらいいでしょうか?
0286デフォルトの名無しさんNGNG
>>284
なんでそんなものを取得したいの?
何をやりたいのかわからんけど、
たぶん別のアプローチで解決できると思うよ。
どうしても!ってことなら、
サブクラス化とかで方法がない訳でもないだろうけど。(思いつき発言)

一つ前のアクティブコントロールなんて
普通必要がないから簡単に取得できないんだと思わない?
0287284NGNG
>>286
ありがとうございます。
一つ前のアクティブコントロールを取得したい訳は、
「あるボタンが押されるとある処理が走るが、それがエラーになった場合、
 フォーカスを元の位置(ボタンをクリックする前の位置)に戻したい」
という仕様にしたいのです。

別のアプローチとはどういうことでしょうか。
0288デフォルトの名無しさんNGNG
>>287
「状態」を保存しておく変数をひとつ持ってそれをもとにアクティブにするコントロールを割り出すとか。
各コントロールの状態からアクティブにすべきコントロールを返す関数を用意しておくとか。
いろいろあるじゃん。
0289デフォルトの名無しさんNGNG
>>287
タイマーコントロールでグローバル変数にアクティブコントロールを
保存しとくってのがVB房らしくていいぞ
0290デフォルトの名無しさんNGNG
>>287
タイマーコントロールで1秒おきにグローバル変数にアクティブコントロールを
保存しとくってのがVB房らしくていいぞ

0291284NGNG
>>288
ありがとうございます。

>「状態」を保存しておく変数をひとつ持って〜
つまり、状態Aならこれ、状態Bならこれ……という感じですかね。
その状態の"変化"を感知するにはやはりすべてのコントロールのイベントプロシージャが
必要になってくるのかな、と思いますが、どうでしょうか。

>各コントロールの状態から〜関数を用意しておく
その関数内ですべてのコントロールを調べて該当のものを返す、と。
つまりコントロールになにかしらの目印(フラグ)が必要になってきますね。(Tagプロパティを使ったり)
だとするとやはり、各コントロールのイベントプロシージャを記述する必要が……(?)。
0292284NGNG
>>289 >>290
ありがとうございます。
タイマーを使うとは考えつかなかったです。
確かにこれで要件は満たせそうですが、極力無駄なイベントを発生させたくないのと、
タイマーコントロールは規約で使用不可だった気が……スイマセン。
0293デフォルトの名無しさんNGNG
>>292
タイマーはおそらくネタだから無視しろ。
0294284NGNG
>>293
あっ、そうなんですか(笑)
失礼しました。
「そういう方法もあるな」とマジメに思ってしまいました(笑)
0295デフォルトの名無しさんNGNG
>>269
UNIX時間が欲しいなら、
UnixTime = DateDiff("s", #1/1/1970#, dateVB) - 32400 'JST-9
で取れる。
0296NGNG
>>291
フォーカスの移動自体を無くせばいいと思います。
イメージコントロールはフォーカスを取得しないので、
押されてない状態のボタンの絵と押された状態のボタンの絵を
イメージコントロールで切り替えてそれをコマンドボタンの代わりにすればよろしいかと。
0297デフォルトの名無しさんNGNG
>>294
ネタじゃねーぞ
0298デフォルトの名無しさんNGNG
キーボードで操作できないボタンってのも、VBらしくてス・テ・キ。
0299デフォルトの名無しさんNGNG
>>297
マジだったのか。これだから VB 厨は...。
0300デフォルトの名無しさんNGNG
VB初心者スレ
歴代1位の厨は誰ですか?
0301デフォルトの名無しさんNGNG
?はドラマ板のロッカーの花子さんスレにも書き込んでたな
0302デフォルトの名無しさんNGNG
VB6でFormのタイトルバーを独自のものにしたいです。(色とか)
どうやれば出来ますか?簡単には出来そうもないので質問してみます・・・
0303デフォルトの名無しさんNGNG
>>300
お ま え
0304デフォルトの名無しさんNGNG
>>302
タイトルバーなしにして、自分で描画すればー。
0305300NGNG
>>303
そんなバナナ
0306284NGNG
>>296
ありがとうございます。
イメージを使った「偽コマンドボタン」ですか。
おもしろいかもしれませんね。

結局、「一つ前のコントロールにフォーカスを移す」仕様はやめました(笑)。
そこまで要求されませんでした。
皆さんありがとうございました。
0307デフォルトの名無しさんNGNG
すみませ〜ん。
ピクチャーボックスで文字を表示してるのですが、
ピクチャーボックスに自動改行機能を付けるには
どうしたらいいのでしょう?

それと、適当な文字が左から何ドット上から何ドットの
位置にあるか取得できたら、自動改行ができるような
気がするのですが、取得方法はありますか?
0308デフォルトの名無しさんNGNG
>>307
プログラムしろよ!
なにかわからないところがあるならそれを質問しろ。
0309NGNG
>>298
キーボード操作なんて簡単に実装できますよね?
>>299
タイマー使うのそんなに実害あるかな?そんな事より、
使う使わないはともかく、一番短いコードで実現できる点を評価したい。

自分じゃ何も思いつかない能無しが見当違いの煽りしてんじゃないよ。
とかたまには言ってみたりしていいですか?

>>301
別の人ですね。今のところ?はこのスレでしか使ってないです。
でもあのドラマは何回か見ましたよ。面白かった。
0310デフォルトの名無しさんNGNG
>>307
TextWidthで文字幅がわかるから、文字の描画位置は自己管理しる。
0311310NGNG
APIのDrawText関数を利用する手もあるかな。
03121NGNG
文末の vbCrLf を削りたいのですけど、どういった方法がいちばんスマートでしょうか。

たとえば、Foo = "ABC" & vbCrLf & "DEF" & vbCrLf の場合の、
Perl で言うところの chop Foo や、Foo =~ s/\n$// です。
0313312NGNG
すんまへん。あげます。
0314デフォルトの名無しさんNGNG
>>312
hoge = Replace(hoge,vbCrLf,"")
じゃ駄目なの?
0315312NGNG
>>314
それだと文中の vbCrLf も削られます。
0316デフォルトの名無しさんNGNG
>>315
あぁ、なるほど。
If Right$(hoge,2)=vbCrLf Then
  hoge = left$(hoge,Len(hoge)-2)
End If
ってやって地道にやるしかないよーな…。
0317デフォルトの名無しさんNGNG
>315
hoge = Left(hoge, Len(hoge) - 2)& Replace(hoge, vbCrLf, "", Len(hoge) - 1, 2)
か?
0318デフォルトの名無しさんNGNG
Perlと同じように正規表現使ってやればいいじゃん
0319312NGNG
>>316-317
うへえ。泥臭いことしなくちゃいけないんですね。

>>318
.NET ぢゃないんです。
0320318NGNG
>>319
> .NET ぢゃないんです。
わかってるって。
0321デフォルトの名無しさんNGNG
>320
Microsoft VBScript Regular Expressions 5.5を参照設定しる。(WSH5.6必要)
でもたかだかそのためだけにって感じも無きにしも非ず。
0322デフォルトの名無しさんNGNG
VBSってここで聞いていいでちゅか?
0323デフォルトの名無しさんNGNG
>>307
マルチポストかよ。
■ このスレッドは過去ログ倉庫に格納されています