トップページ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
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
マルチポストかよ。
0324デフォルトの名無しさんNGNG
>>322
おっけ。
0325デフォルトの名無しさんNGNG
>>309
実害以前に、耐えられない仕様だ。
1秒おきの場合、
最後にTimerの関数が実行された後、ボタンが押されるまでに、
フォーカスが複数移動したらどうするんだ?

ってことは思いつかなかったんでしょうか?

すなおに TabStop = True であるコントロールの GotFocus イベントに書くのが余計な負荷をかけない。
0326デフォルトの名無しさんNGNG
>>325
まあまあ、VBだから許してあげてよ。
0327デフォルトの名無しさんNGNG
GotFocusにイベントを書くとめんどくさいから、クラスを作って
コントロールごとインスタンスを割り当ててそこから、
フォームに通知した方がいいね。
0328デフォルトの名無しさんNGNG
>327
サンプルきぼん
0329デフォルトの名無しさんNGNG
>>328
適当に作ったけどこんな感じかな。
Formにいくらコマンドボタンを置いても共通のIAllGotFocus_AllGotFocusが発生する。
この例はコマンドボタンだけ対応。他のコントロールに対応したかったら、
それ専用のClass1を作成するか、Class1を改造したり、まぁ他にも色々工夫してくれ。

<Form1>
Implements IAllGotFocus
Private m_controls As New Collection

Private Sub IAllGotFocus_AllGotFocus(ByVal ctrl As Control)
  Debug.Print ctrl.Name
End Sub

Private Sub Form_Load()
  Dim ctrl As Control
  For Each ctrl In Controls
    If TypeOf ctrl Is CommandButton Then
      Dim c1 As Class1
      Set c1 = New Class1
      c1.SetControl ctrl, Me
      m_controls.Add c1
    End If
  Next ctrl
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Set m_controls = Nothing
End Sub
0330つづきNGNG
<Class1>
Private WithEvents m_cmd As CommandButton
Private m_AllGotFocus As IAllGotFocus

Public Sub SetControl(ByVal ctrl As Control, ByVal AllGotFocus As IAllGotFocus)
  Set m_cmd = ctrl
  Set m_AllGotFocus = AllGotFocus
End Sub

Private Sub m_cmd_GotFocus()
  m_AllGotFocus.AllGotFocus m_cmd
End Sub

<IAllGotFocus>
Public Sub AllGotFocus(ByVal ctrl As Control)

End Sub
0331デフォルトの名無しさんNGNG
要するにDecoratorパターンだな。
0332328NGNG
>329
thx−
なるほど。たしかにスッキリしてていいすね

Implementsってこう使うのか。。
0333デフォルトの名無しさんNGNG
へ〜そんなことができるんだ。
<IAllGotFocus>
↑ってどういうこと?モジュールかな?
0334デフォルトの名無しさんNGNG
いちばん便利なのはGoToだ
0335みのもんたNGNG
>>334
正解!
0336NGNG
>>325
>実害以前に、耐えられない仕様だ。
つまり目立った実害は無いという事ですか?
タイマーイベント内もたった一行だし余計な負荷がかかると言ってもたかが知れてますしね。

>1秒おきの場合、最後にTimerの関数が実行された後、ボタンが押されるまでに、
>フォーカスが複数移動したらどうするんだ?ってことは思いつかなかったんでしょうか?
インターバルを調節すればいいってことは思いつかなかったんでしょうか?

>すなおに TabStop = True であるコントロールの GotFocus イベントに書くのが余計な負荷をかけない。
だったらそう書けばいいのになんで余計な煽りするんですか?
質問者が他に手段はないかと聞きに来てる時に手段の1つとして上げてる、適切なレスだと思いますが。

つまらない言い合いしてすみません。。。
でも自分的にはくだらない煽りより面白い意見を聞きたいと思うんです。

>>329
そんなことが出来るんですか。勉強してみます。
0337デフォルトの名無しさんNGNG
>>336
> インターバルを調節すればいいってことは思いつかなかったんでしょうか?

インターバルを調整しても、本質的には解決しませんよ。
Timerは優先順位が低いので、負荷がかかるとイベントが後回しになり
取りこぼすことになります。
0338デフォルトの名無しさんNGNG
date型の変数の初期化ってどうするのが最良ですか?
0339デフォルトの名無しさんNGNG
ファンタジィと呼ばれるピンク色の汁を出すよ
0340338NGNG
Emptyを代入。それでいいのだな?
0341325NGNG
>>336
以上のような理由でネタもしくは、
質問者を混乱させようという悪意かと思っただけ。
なので、質問者が混乱しないようにネタだと注意をしておいただけ。
あおってはいない。

>>337にもあるとおり、実際取りこぼしのないようにインターバルを
を小さくすればするほど余計な負荷がかかる上に、
どれだけ小さくしても完全ということはない。

>質問者が他に手段はないかと聞きに来てる時に手段の1つとして上げてる、適切なレスだと思いますが。
質問を良く見てみろ。
この手法はすでに質問者が自分で言っていて、他にいい手段はないのかと問ういている。
だからわざわざ質問者に対して書くべきことでもなかったのだ。
0342デフォルトの名無しさんNGNG
質問です。

Dim Date1 As Date
Dim Date2 As Date

Dim Min As Integer

Date1 = "2002/09/30 12:00:00"

で、Date2にDate1のMin分後の日時を入れたいんですが、
スマートな方法教えてください。
お願いします。
0343デフォルトの名無しさんNGNG
>>342

DateAdd 関数
0344デフォルトの名無しさんNGNG
>>343
ありましたね。
ありがとうございました。
0345327=329NGNG
>>333
あぁ、そうか。使ったことが無い人にはいきなり名前だけ書いてもわからんわな。

<Form1>はフォームモジュール、<Class1><IAllGotFocus>はクラスモジュール。
ちなみにIAllGotFocusのIはこれがインタフェースであることを表している。
VBはクラスもインタフェースも宣言が同じなので名前でわかりやすくしている。
0346デフォルトの名無しさんNGNG
VB6.0初心者です。相談に乗ってもらいたくて来ました。モマー(;´Д⊂ 
MSDNのヘルプを見ながらTCPのサーバーを作ってます。
クライアントからの通信を、クライアントそれぞれに返したいのですが、
色々いじっても、1つのクライアントにしか返送できませんでした。
(最初に立ち上げたクライアントしか返らない、通信を送ったクライアントにしか
 返送しない。最後に立ち上げた〜以下略。下のソースは、最初に〜の一部です。)

Winsock1(Index).GetData strData
txtData(Index).Text = strData

For i = 1 To intMax Step 1
If Winsock1(i).State = sckConnected Then
Winsock1(i).SendData strData
End If
Next

通信が確立しているソケット全てに対して、データを送っているイメージで、
プログラミングしています。
ちなみにクライアントとサーバ間はどれも通信はできていました。
通信できる状態でも、sckConnected 以外の値を取ったりしているのでしょうか?
それとも何か根本的な間違いをしてるんでしょうか?
わかる方がいたら教えて下さい、お願いします。
0347デフォルトの名無しさんNGNG
DeveloperとかProfessionalっていうのはどう違うんですか?
単語の意味はわかるがあらわそうとしているものがわからない。
0348デフォルトの名無しさんNGNG
6.0Enterprise Edition に付属のMSDEは配布可能なんでそうか?
0349333NGNG
>>345
ヘ〜。
ありがと〜。
0350デフォルトの名無しさんNGNG
>>347

ちゃんとパッケージに書いてあるよ。
(あなたがVBを不法な手段で手に入れたのでなければね)

メーカーのテクニカルサポートサイトにも明示されているはず。
0351デフォルトの名無しさんNGNG
>>350
あんがと。
まだ買ってないので<パッケージ
どれがいいかなと。

microsoftのページみてるけど、書いてることがいまいち意味がわからなかったりする。

例:右記の製品インストール時の追加必要システム > Microsoft Data Engine

これがあらわしてることがわからない。
0352デフォルトの名無しさんNGNG
それから、6.0にするか.NETにするかもなやみどころ。
0353デフォルトの名無しさんNGNG
>327 (=>329 =>345)
合格です。このスレでコテハンになる許可が下りました。
0354346NGNG
http://support.microsoft.com/default.aspx?scid=kb;ja;JP409932
現在上記のページで、winsockをコントロール配列で使う時の制限事項で、
同様の問題の解決方法が載ってました。
Winsock1(i).SendData strData
DoEvents
このようにDoEventsが必要だ、との事です。お騒がせしますた。
0355デフォルトの名無しさんNGNG
はじめまして。

RaiseEventを使ってイベントを発生させております。
イベント発生先の処理が終わるまではイベント発生元の処理は
進展しないのでしょうか?

スレッドのように処理を同時に行いたいのですが、
VBではどのような方法があるのでしょうか?

みなさま、宜しくお願いします。
0356デフォルトの名無しさんNGNG
>>355

VBのバージョンを明記すべき。
VB6.0以前と.NETでは、答えが全然違うものと思われ。
(つうか、VB6.0以前では、スレッド並行処理は不可能では??)
0357デフォルトの名無しさんNGNG
>>356
できることはできるがサポート外
0358355NGNG
申し訳ありません。
VBのバージョンは6.0です。
0359デフォルトの名無しさんNGNG
>>357
それをできるというのはどうかと思うが
0360デフォルトの名無しさんNGNG
皆さん、VBの検定は難しいのでしょうか??今年か来年に受けるのですが・・・・経験者の方いますか??
0361デフォルトの名無しさんNGNG
>>360
そんなもんあるのか
0362デフォルトの名無しさんNGNG
>>361
MSがやってるベンダー試験のことじゃないか?
VB以外にもNT ServerとかSQL Serverとか色々有った気がする。
0363デフォルトの名無しさんNGNG
VC検定ってのも聞いたことがあったが本当にそんなのがあるのか。
MSぼろもうけだな。
0364360NGNG
学校でVBの授業があって、検定に向けて授業をやってるんですけど・・・
どのくらいの難易度なのか分からないんですよね・・3級だからそんなに難しくは
無いと思うけど・・・どうなんでしょう??
■ このスレッドは過去ログ倉庫に格納されています