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

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

前スレはこちら
  Part21 http://pc2.2ch.net/tech/kako/1044/10440/1044028945.html
  Part22 http://pc2.2ch.net/tech/kako/1046/10463/1046354784.html
  Part23 http://pc2.2ch.net/tech/kako/1047/10477/1047743187.html
  Part24 http://pc2.2ch.net/tech/kako/1050/10501/1050151126.html
  Part25 http://pc2.2ch.net/tech/kako/1052/10526/1052627913.html
  Part26 http://pc2.2ch.net/tech/kako/1055/10551/1055145106.html
  Part27 http://pc2.2ch.net/tech/kako/1058/10586/1058674927.html
  Part28 http://pc2.2ch.net/tech/kako/1061/10612/1061296197.html
  Part29 http://pc2.2ch.net/tech/kako/1065/10654/1065446334.html
  Part30 http://pc2.2ch.net/test/read.cgi/tech/1069160036/
  Part31 http://pc2.2ch.net/test/read.cgi/tech/1073732636/

【VB.net関連スレ】
VB.net質問スレ (Part4)
http://pc2.2ch.net/test/read.cgi/tech/1065269043/
【Win32 API関連スレ】
Win32API質問箱 Build16
http://pc2.2ch.net/test/read.cgi/tech/1073830065/

心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
五.荒らしは相手しない。
六. VB情報募集中。
七.VB.NETの話題できるだけひかえる。
2デフォルトの名無しさん:04/02/20 03:42























4超電磁ロボ・コンバトラーVB:04/02/20 13:08
このスレッドは、

どんなにくだらない質問でも、誰かが優しくレスを返してくれるスレッドです。
身の毛のよだつほど低レベル、もしくは質問者自身、何が何だかわからない質問を
勇気をもって書き込んでください。

VB使いが優しくレスを返してくれますが、お礼はVBの普及と初心者の救済を
御願いします。

  V・I・C・T・O・R・Y  サインはVB!
まあスレ最初が荒れるのはいつものことだが、

五.荒らしは相手しない。
6デフォルトの名無しさん:04/02/20 15:54
> 六. VB情報募集中。

VB6.0が売られている店の情報とか?
7お尻から練乳:04/02/20 16:24
VB6.0って見つけたら是非買っておくべきだよ。

オブジェクト指向的に不完全だとか、なんだとか言われるけど、
QuickBASIC(これはMSの製品で数少ない名作だと思う)にGUIビルダーが
合体した感じの、手軽で小気味よい開発環境だと思っている。

ランタイムの配布の問題や動作スピードの問題も、最近の通信事情や
マシンパワーの増大により、ほとんど(自分自身はまったく)問題がないと思っている。

もし、VB6.0Pro版が見つかったら超ラッキー!! そくゲットしましょう。

クイックライブラリが好きだった。VBで無くなっていて愕然とした。
9まだまだ現役で:04/02/20 22:53
VB6.0ってまだ、現場で使われていますか?
これからVB6.0を勉強しようと思っているのですが。
>>9
Cでも勉強した方が良いよ。あらゆる構造化手続き型言語のエッセンスが詰まっている。

VB使えます!とか言ってる新卒が仕事で使えた試しもなし。
基礎さえ分かってればあんなもん数週間で人並みに書けるわけで。

それよりも今のうちにもうちょっと広い視野でプログラミングに取り組んでみてはどうだろう?
11デフォルトの名無しさん:04/02/21 02:16
>>10みたいなレスする人って少なくない、というか激しく既視感感じるんだけど、
いつも思うんだがかなりずれてるよなあ。

C言語そのものの習得なんてそれこそ3日もあればできるじゃん。
VBより遥かに覚えること少ないよ。

こういうこと言う人って、アルゴリズムとか処理系のお約束のことを
Cって言ってるのかな?だったらそれこそ勉強したほうが。。
>激しく既視感感じるんだけど
おまえが2chばかりやってるからそう感じるだけだ。気にするな。
13デフォルトの名無しさん:04/02/21 13:27
だれか、>>933の質問に答えてやれよ。
>>13
自作自演のつもりですか?
15(゜Jし゜):04/02/21 13:32
構造体をフォームやクラスの引数、戻り値に使えないのは何故なんでしょう?
クラスモジュールを使うと可読性が落ちるから、と言われるんで出来れば使いたくないんですが。
それとも、引数を構造体にまとめずに全部引数として扱うのが普通なんでしょうか?
>>15
>構造体をフォームやクラスの引数、戻り値に使えないのは何故なんでしょう?
COM的な仕様です。

>クラスモジュールを使うと可読性が落ちるから、と言われるんで出来れば使いたくないんですが。
アホな上司なり友人ですね。

>それとも、引数を構造体にまとめずに全部引数として扱うのが普通なんでしょうか?
何も考えたくないのならニートな解だと思います。
ファイルリストボックスの pattern プロパティを "*.txt" にしたのですが
"aaa.txtbak" というファイルも表示されてしまいます
"*.txt" だけを表示させるにはどうしたら良いのでしょうか?
18あぼーん:あぼーん
あぼーん
19お尻から練乳:04/02/21 17:17
>>17

自分の環境では、何の問題も発生しないのですが・・・。

                 _./ ̄ ̄ ̄ ̄\
                /(  人____)   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
              / .|ミ/  ー◎-◎-) < 見ろ俺のセクシーなヌードを!! │
             ,/  (6     (_ _) )\ \_____________/
             `、  `,| ∴  ノ  3 ノ‐'`ノ モワ〜
               \ ヽ,._____ノ ノ←>>1-1000
                 豸.  ``Y"   拜."..::.::.::.::.::・・'゚。.・'゚。.::。.::・'・'゚。.::。.::・'・'゚。.::。.::・'・'゚。.::。.:
               ;": :: i. 、   ¥   ノ       ・'゚。.:・・'゚。.::。.::・'・'゚。.::。.・:(;´Д`)オエーッ
            ; .;: :∴:(. ` -‐´;`ー )         ・'゚。.::。.::・'・'゚。.::。.::・・'゚。.::。.::・''・'゚。.::。.::
        . ': .;".;":  (   彡   ミ )  モワ〜
      : .;"∵;": ::″: ;  ゝ     '´ ̄"`ヽ
   : .;".;":: :.;".;":  /   ■_,,,,,、   ノ
 ´ ..‘ :´ ;` :. ~. ;.   /   /`'   (  ノ
 :´ `:  .``:.  ;' ~ヾ  (   ノ      | (_,,-,,,
 : : .~.. :´; `  :` , `: \  `ヽ    / __ノ
 ;`:   ,´ ;:  ;` : :. .~..  \  \    ̄
; : ..‘:´ ;`:. ~.. ; :,´ :    ノ  _)
 ` ;..``:.   ; ' ;.~   ;ヾ (.,,_/~

>>19
ありがとうございす。もう一度よく調べてみます
22デフォルトの名無しさん:04/02/21 22:17
GrapeCity社のSpread6でヘッダの連結の仕方が分かりません。
セルの連結は分かるのですが・・・

ヘルプも結構見たのですがまだ分からないです
ヘルプのここを読めという情報でも良いです。
23デフォルトの名無しさん:04/02/21 22:36
>>22
そんなこと自体が出来るのかな?
24デフォルトの名無しさん:04/02/21 22:48
>>23
 Spread6.0 からできるようになったと思います。
 ヘルプで「複数ヘッダの設定」という箇所を見るとイメージが見れるのですが
 設定方法がどこにも書いてないのです・・・
25デフォルトの名無しさん:04/02/22 00:06
13 名前: デフォルトの名無しさん 投稿日: 04/02/21 13:27
だれか、>>933の質問に答えてやれよ。
26(゜Jし゜):04/02/22 00:59
>>16
ありがとうございます。
他の人の作成した関数を見てみたところ、最後の
引数に全部ぶち込む方式が一般的なようなのでそれで行くことにします。

後、EnumとかCollectionとかFor Eachって一般的に使われてるんですかね?
さっきのクラスモジュールと同じく、弊社では全く使用されてないのですが。
Collection はあまり使わないけど、Enum と For Each はよく使う。
28デフォルトの名無しさん:04/02/22 02:59
>>26
2ちゃんで弊社って…(w
5〜10行ぐらい空けて

乱交乱交!
毎日乱交!!

って書いてくれたらなお受けたのにな。
29(゜Jし゜):04/02/22 03:59
0001
0002
0003
0004
0005 乱交乱交!
0006
0007
0008
0009
0010 毎日乱交!
>>27
Collectionも結構使うぞ。
>>26
井蛙。
質問です。TextBoxをFormのリサイズ時、Formの高さに合わせるために、以下のようにしました。

Private Sub Form_Resize()
Text1.Height = Form1.ScaleHeight 'テキストの高さをフォームの高さに合わせる。
Text1.Width = Form1.ScaleWidth 'テキストの幅をフォームの幅に合わせる。
End Sub


しかし、TextBoxはFormのサイズより小さいので、以下のように変更したところ、
ウィンドウ最小化時にエラーが出るようになりました。

Text1.Height = Form1.ScaleHeight 'テキストの高さをフォームの高さに合わせる。
  ↓
Text1.Height = Form1.ScaleHeight - 1100 'テキストの高さをフォームの高さに合わせる。

解決策、助言等よろしくお願いします。
マイナスになるときは何もしない、とかすれば
>>33
即レスありがとでした。

If Form1.ScaleHeight - 1100 > 0 Then
Text1.Height = Form1.ScaleHeight - 1100 'テキストの高さをフォームの高さに合わせる。
End If

これで解決出来ました、ありがとでした。
35お尻から練乳:04/02/23 08:09
>>34

TextBox の TopとLeftのプロパティを[0]にして >>32に記述してある

Private Sub Form_Resize()
 Text1.Height = Form1.ScaleHeight 'テキストの高さをフォームの高さに合わせる。
T ext1.Width = Form1.ScaleWidth 'テキストの幅をフォームの幅に合わせる。
End Sub

で、何か支障があるのですか?  今ひとつ、自分には趣旨が分からないのですが・・・。
On Error Resume Next しといた方がよい気もする。
リサイズのみなら。
>>36
エラーがそれ以外発生しないと自身を持っていえるのならそういうのもありかもしれんけど、
本来エラーをチェックする機能であるOn Error Resume Nextを
エラーを無視する用途に使うのはおすすめできない。
自身→自信
39デフォルトの名無しさん:04/02/23 15:11
VB6.0でEXCELを参照設定してEXCELの機能を使った開発しているのですが、
このプログラムをコンパイルして配布する場合、
EXCELのインストールされていない環境でも動きますか?

VS6.0 と OfficeXP Developer で開発しています。
40デフォルトの名無しさん:04/02/23 15:14
>>39
参照設定した場合はだめだと思った。
CreateObjectで生成するようにする。

まあ、VBで何か作った場合は、クリーンな環境でインストールテストは必須です。
41デフォルトの名無しさん:04/02/23 15:34
>>40
サンクス。あれ、でも
CreateObjectで生成するのに、参照設定は必要ないのでしょうか?
>>41
不要、VB アーリーバインドで検索するとPCDNのサイト出てくるからそこ参照。
43デフォルトの名無しさん:04/02/23 16:25
>>42
サンクス
調べてやってみます。ありがとうございました。
44デフォルトの名無しさん:04/02/23 16:42
>>39 - >>43 を見ててふと思ったのですけど

ADOって参照設定でやってます?
それともCreateObjectでやってます?

参照設定で開発して最後にCreateObjectに置き換えるってのを
聞いたことあるけど最終的にはCreateObjectにしておいた方が良いのかな?
45デフォルトの名無しさん:04/02/23 17:10
>>44
まあ、最終的にはインストール先の環境限定を出来るか否かだと思うけど。
限定できるなら参照設定、できないならCreateObjectか。
46デフォルトの名無しさん:04/02/23 20:00
私はCreateObjectでやってます。
参照設定で開発っていうのがどういうものなのかわかりません。
47デフォルトの名無しさん:04/02/23 20:40
開発してる時は ガイド出てくるから参照設定の方が楽じゃない?
参照設定したままCreateObjectで今のところ問題無いようだが?
49デフォルトの名無しさん:04/02/23 23:33
うちの会社、
Property Get/Let/Set
クラスモジュール
オブジェクトの参照操作
FileSystemObject
とか使っていたら、一般的ではないから使うなとか言う少々上の上司がいるんですが、いったいどうすれば。
今は一人で組んでいるからいいものの、なんかやな感じです。
実際、グローバル変数だらけでワケワカメなソースばかりだし。

こんなんじゃあ、MFCやBCBでも凄いグローバリーなコードになっていないか心配です。きっと後でメンテナンスさせられるんです。
会社辞めようかと検討中です。
>>48
意味もないよな。
>>48
参照設定とCreateObjectの両方とも理解してないな。
そのEXEを配布するときは参照しているDLLを一緒に撒かなきゃだめだよ。
CreateObjectの場合は、必ずしもそのDLLを撒く必要はない。
あと、バージョン差に対してある程度対応可能になる。(検証は別としてだが・・・)
>49
ttp://www.gj.il24.net/~nakasima/vb/tech/style/
とかを見せて、一般的にはこう、というのを認識させるべし。
でも正直そこにしがみつく理由は無いと思う。
スイマセンが教えてください。
VB6.0からEXCELのセル更新をする場合、
まず、ブックを開いて、
xlsControl.Workbooks.Open FileName:=StrXlsFilePath, ReadOnly:=False
セルを指定して更新
xlsControl.Sheets("sheet1").Cells(1, 1) = Format(DATE, "0000/00/00")
で済むと思うのですが、VB6.0とは別に起動しているEXCELのセルを更新するのは
簡単に出来るのでしょうか?

状況としては、常に開いているEXCELが存在して、値が更新されたらイベントを発生
させているのですが、これに更新されなくても一定時間ごとにイベントを発生させたいのです。
EXCELは、ケーブルによって繋がれている他のパソコンにより自動的に更新されます。

EXCELのVBAでタイマーコントロールが使用できれば簡単なのですが・・・・
無いようなのでVB6.0のタイマー機能を使用しようかと考えているのですが・・・
環境は VB6.0、EXCEL2000、OSはWINDOWS NT4.0です。
御分かりの方是非とも御教授を m(_ _)m
EXCELで開いていると、シートに排他がかかるから、他からは不可だと思うけど。
(単にキーを鮮度するってもの危険だし)
55デフォルトの名無しさん:04/02/24 17:49
>>54
そーなのか、じゃ、VBのタイマーコントロール使用するためにはVB側から開くしかないですね・・・
ありがとうございました。
VBってfor文の中で脱出条件変えられないの?

For i = 1 to 100
 If ちょめちょめ Then
   i = 50
 End If
Next i

ってゆうループでiの値変えてるはずなのに
100回周りやがるぞ。
俺の気のせいか?
限りなく気のせいなのでわ。
56のケースは意図通りに動作するけど、

for i = 1 to j
if xxx then
j = 20
end if
next i

みたいな終了条件を変更するケースは
微妙だった気がする。
>>56
気のせいだな。以下でhogeが80を表示。
Dim i As Integer
Dim hoge As Integer
For i = 1 To 100
hoge = hoge + 1
If i = 30 Then
i = 50
End If
Next
Debug.Print hoge
6056:04/02/24 20:00
>>58
それです。
そのパターンで終了値の変数をループ内で変えても
律儀に最初に決めた回数周りやがった。

しかも、ループ脱出後に
変数の値見ると、ループ内で変化させた値になってやがる。

ちなみに純粋なVBじゃなくて、ExcellVBAでのお話です。
俺VBほとんどわからんのだけど(普段はC,Java,Perlプログラマ)
Excelでマクロ書いててこれ食らいました。
ちょっとカッチーンと来たね。

みなさんは、ループの途中で回る回数変えたくなったときどうしてるんですか?
>>60
無限ループとか怖いからもっぱらexit forとif文のみ。
てかどんな処理するとループ回数を途中で変えたくなるんだ?
>>61
件数が増減するデータを配列に読み込む時とか?
まわす回数が不定なら Do 〜 Loop 使うかも。
6456:04/02/24 20:16
>>61
やりたかったのはこんなこと。
・N日間(分のデータに対して)ある作業を続ける。
・ただしある日(のデータ)にある条件が成立すると、その週いっぱいで作業は終わり。

結局別の方法使ったけど、
こんな場合のVBでの標準的な解決策ってありますか?
> ちょっとカッチーンと来たね。
自分が無知なのにカッチーンと来たのだろうが落ち着け。

Forは一定回まわす命令。
Doは条件を満たしている限りまわす命令。

場合にあった命令を適切に使え。
6661:04/02/24 21:10
>>64
んー、その処理だったら漏れはこうする。
ちょっとややこしいかもしれんが無限ループの心配がないし。
ちゃんと動かしてないからバグがいるかもしれん。
dim daysinweek as integer
dim weeks as integer
dim days as integer
for weeks=0 to 100
 days = days + weeks * 7
 for daysinweek=1 to 7
  days = days + 1
  if ('A`) then
   exit for
  endif
 next
next
6761:04/02/24 21:11
あー、早速バグがあったよ。5行目。
 days = weeks * 7
だな。スマソ。
6861:04/02/24 21:14
連投スマソ。仕様良く読んでなかった。
後のnextの間に
if days=_| ̄|○ then exit for
がいる。
>>65
出自はそうだけど、C言語系の文法を持つ言語でのfor 文は
柔軟性が高く、ループ条件の初期化、判定、繰り上がり
(でいいのかな?)の3つを纏めて記述できる便利な前判定
ループになっていて、継続条件文を毎回評価するのよ。

対して、VBのは初回に取り込んでお終いみたい。
(大昔のBASICは変えられた様な気もしたんだけど)

文化の違いみたいなもんだから、こういう勘違いが起こっても
不思議ではないよ。


>>64
break に相当するものとして Exit For ってのがある。

但し、continue に相当する文なかったかと。
ここらへんの痒いところに手が届かないのがVBの難点で
あり、他言語使う人間から嫌がられる所以。
7065:04/02/24 21:37
>>69
わざわざ説明されなくても知っているってw

俺はC言語でも終了条件が変わるものにはwhile
終了条件が変わらないものにはforを使うことにしている。
英単語そのものの意味を考えるとその方が自然でしょ?
>>70
釈迦に説法でした、ごめん。

for、whileの使い分けは本当はそうすべき
なんだけど、馴れちゃうと面倒で(w
>>7
わざわざ説明しなくてもとか言っているが、Forの途中でカウンタや
終了条件をいじろうって言うのは根本的に間違っちょると思うよ。
Exit For使うなりなんなりするべき。
バグの温床になる。
言語仕様でいじれなくしても良いぐらいだと思うけどな。」
分かっててやってるんなら考えを改めると思うべきですが如何。

>>69
Continueほしいのぅ・・・。
結局GOTOでcontnueをシミュレートすることになるが、GOTO排他教信者が
うるさいし。
7372:04/02/24 21:47
>>7>>70の間違い。
>>70氏へ
オマケにリンク読み間違えた。スマン。
>>49
・・・転職したほうがいいかもなマジで。

>26
コレクションと For Each はいいぞー こればっかり使ってしまう。
てかオブジェクトを使ったプログラミングするなら欠かせないと思うけど。
まぁ変わった会社みたいだしなー
ExcelにアクセスとかVBが良くやるところでも使わないか?

ところで構造体は関数宣言をFriendですれば引数に使えなかったっけ。
>>72
GOTOは多重ループからの脱出とかケースバイケースで
使っても良いと思うんだけど、VBのGOTOの一番の難点
は、ラベルが勝手にインデントを無視したレイアウトに
されてしまう事かと。

折角、タブ打っても詰められちゃうし、考えてみるとあの
エディタも結構な難物だったりするかも。

あと、欲を言えば、エラートラップの処理もGOTOだけで
なく構造化してくれんと。

なんか、書いていて涙でてくるな、、、、、、、


>>49
・・・・・・ガクガクブルブル・・・・・・
>ところで構造体は関数宣言をFriendですれば引数に使えなかったっけ。
使える。

正直、最近まで知らなかった
>>76
両者の関係がprivate扱いになるからってお話?
7856:04/02/24 22:22
確かにループの中でカウンタや終了判定変数を変えちゃうのは気持ち悪い。
バグの温床になりやすいってのもわかる。
でも便利だからついやっちゃうだよね。これが必要になること結構あるし。

俺が>>64の仕様をcやjavaで書くと

for(i=0; i<n; i++) {
 もろもろの処理;
 if(ちょめちょめ) {
   n = i + weekend(i); //weekend()は0〜6を返す関数
 }
}

ってな感じになるのね。
で、VBでも同じようにやったらうまく動かなかったんだよね。
動いて欲しかったんだよ。俺としては。

そういや、俺このときcontinue(に相当するもの)探しちゃったよ。
「あるはずだ」って思って本見て探したけど見つからなくて、
詳しい人に聞いたら「ないよ」の一言。悲しかったぜ。
>>78

flag = 0;

for(i = 0;i < length(data);i++){
if(hoge(data) && !flag){
flag = 1;
}

if(weekend(data) && flag){
break;
}

}
80デフォルトの名無しさん:04/02/24 22:32
1バイト文字,2バイト文字混合のテキスト部分を含むバイナリファイルから
テキスト部分をstring変数にうまく格納する方法はありますか?

(MP3ファイルからID3タグを読み込みたいんですが)
>>80
SJISでいいの?StrConvのvbUnicodeでいいんじゃない?
>>80
バイナリアクセスでOpen、Getでバイト型配列に格納
string変数 = StrConv( バイト型配列 , vbUnicode)
mp3タグ取得のサンプル探せ
>>75
タブ打ってもつめられるのはむしろイイと思うけど。
# 左端にくるのがいい、というのではなく、自由度が無いのがいいということ
と言うかインデントはすべて固定にしてホスィ
コーディングスタイルなんかでもめたくない。
If文もブロックIfだけとか…
VBは割と新しいせいかそんなにもめないが、
Cとかはもう宗教がかった連中がうるさくてたまらん。{の位置がどうとかで。

GOTOは・・・無きゃ無いで済むんだが、そのためにはContinueはほしいねぇ。
On Error Goto はあっても良いな。
ってかTry Catchがいいんだけどね。
>>78 = >>83

メッキのような知識だな。
>>81,82
ありがとうございました。解決しました。
8683:04/02/24 22:52
いや俺75ちゃうけど・・・74だけどな。
どこら辺がめっきっぽかった?反省するズラ
continueは

Do
Exit Do
Loop While False

で代用できるけど、正直お勧めしない。
>>87
break?
・・・代用できる?それで。
Gotoの代用なら分かるが・・・
>>88-89
Dim i As Long
For i = 1 To 10
 Do
  If i = 5 Then Exit Do
  Print CStr(i)
 Loop While False
Next

みたいな感じ。
>>90
素直にifで構造化した方が良いと思われ。
>>91
俺もそう思うのでお勧めしないっす。
9380:04/02/24 23:09
>>90
納得できた。物分り悪くてごめん。
VBにもCみたいなプリプロセッサマクロがあればそれっぽくマクロ化できるかも
しれんのやけどのぅ
>>78
面白いと思うけど、
個人的には他の人も書いている様にそのスタイルよりも
breakやフラグの方が良いと思う。


>>83
新旧で言えば逆。
VBの勝手にフォーマットは、BASICが旧式のインタプリタ
であった事を引きずっていて、

入力ソース → 中間コード → ソース形式で再表示

って流れの中で入力ソースのフォーマット情報が失われる
せいと思われ。途中のVerで治す事も出来たと思うんだけど
.netで改善されるまでやっとらん。

しかも、読みづらい。
(デフォルトの色使いが工夫されているのが救いだけど)


On Error GOTO は 例外をブロック単位で処理できないのが×。
Try{}catch(){}と同じ事しようと思うと、細かく関数を分割か
ラベルを貼りまくる必要が出て来る。
80って大嘘、89ね
>>94
> 入力ソース → 中間コード → ソース形式で再表示
>
> って流れの中で入力ソースのフォーマット情報が失われる
そりゃ嘘だろ〜インデントとかコメントとか保持されているわけで、
中間言語の形式なんてソースレベルでは関係ない。

エディタで書いてコンパイルしたらラベルにインデントしてもコンパイルできるぜ。
エディタは意識的に前にずらさせてるんだろ。
>>96
だから、古い時代からのBASIC故の伝統だと言っている。

ちなみに、インデントは構造から勝手に生成している。
BASICではコメントはrem文と言う命令の一種。
(内部でどの様扱っていたかは流石に知らんけどね)
98デフォルトの名無しさん:04/02/24 23:30
おっさん臭いからどっかいけ
>>96
少なくとも94が言うような実装をしたBASICは存在した。
ソースのテキスト料に較べて保存している情報が結構少なくできるメリットがあったんじゃないかと勝手に納得。
>>97
左に詰められるのが伝統、ってことねこりゃすまんかった。
>>83で書いた古い新しいって言うのはそういう意味じゃなかったんで
つい勘違いした。
確かに分かりにくかったな。ごめん
101デフォルトの名無しさん:04/02/25 08:18
なんでそこで納得するかな?
>>97は何の反論にもなってないじゃん。
「vbのエディタの仕様はBASICの伝統踏襲してるわけじゃない」、っていってるのに
「いや、そういう伝統があったんだ」なんていってんだから。
古い形式の引きずる以外の理由で縛りのない筈の
新しいエディタが、あんな表示を強要する訳もないのだが。
>>102
翻訳に失敗したか?
今から
Microsoft(R) Visual Basic(R) Programming System Version 5.0 Professional Edition
を入れ直そうと思っているのですが、
Microsoft(R) Windows(R) xp Operating System Home Edition Service Pack 1
にインストールする時に何か問題は発生しますか?
105デフォルトの名無しさん:04/02/25 16:30
>>104
そもそも保障が無いと思う。
106ビート大根:04/02/25 18:02
おはようございます。

実は非常に困っています。VB + ADO + Access2000にてデータベースソフト
を作っています。

問題はサブフォームでして、Accessではめちゃくちゃ簡単に実現できるの
に、VBでは非常に難しい。しかもクエリで作ったテーブルをデータグリッ
ドに投げると、確かに実現はできるのですが、例えばその中のレコードを
削除すると、商品マスタのレコードまで消えうせるのであります。

ということで、select * from 受注明細 にもともとあった親のフォームの
IDと同じものを表示せよという命令を書いたところ確かに消えなくなった
のですが、今度はIDをいれてEnterを押しても、商品名やら単価やらがすぱ
っと出てこなくなりまいた。

どのようにしたらこの状況下で、IDを入れただけで商品マスタのデータを
このデータグリッドに導き出せるのでしょうか?是非にご教示のほどよろ
しく賜りたく存じます。
107104:04/02/25 18:07
>>105
動作自体しないかもってことですか( ̄□ ̄;)!
当時アカデミック(今も学生)で5-6万したのに(;_;)
さらばVB…
108おしえて偉い人:04/02/25 18:29
ユーザーコントロールのサイズの仕組みを教えてください。

「フォントサイズ小」の時
UserControl.width = 1000
? UserControl.width
1005

代入した値と違う値が帰ってきます。

? Clng(1000 / Screen.TwipsPerPixelX) * Screen.TwipsPerPixelX
1005

こうなるので、ピクセルに丸められているのかなと思ったけど
画面のプロパティーの設定詳細でフォントサイズを
「カスタムサイズ200%」にすると

UserControl.width = 1000
? UserControl.width
931
? Clng(1000 / Screen.TwipsPerPixelX) * Screen.TwipsPerPixelX
1001

こうなります。
これは、どういうことなのでしょうか?
>106
画面もソースもDB見ないでその質問に答えられると思うか?
だからといってソース○投げなんかすんなよ。
怪しい日本語でダラダラ書いてないで、もうちょっと問題を切り分けろ。
>>109
↑口だけ
>>108
1000から1100ぐらいまで調べれば法則性がわかるはず。
112デフォルトの名無しさん:04/02/26 00:44
VBscriptで、自分自身(vbsファイル)のパスを取得したいのですが、
自分自身を表すクラスってなんでしょうか?
>>112
Wscript.ScriptFullName
114ぶぶ:04/02/26 01:42
どなたか教えてください。
NTからUNIXサーバーにFTPでファイル転送はできるのですが、ファイル転送後にサーバーにPUTしたファイル
名称の変更をしたいのですが方法がわかりません。どなたか教えてください。
よろしくお願いいたします。


115デフォルトの名無しさん:04/02/26 01:43
>>113
dクス

そこからパスを抽出します
>>114
それ、VBの質問じゃないです。
117ぶぶ:04/02/26 02:35
え?どこに質問したらいいの?
>>117
それも、ここで質問するこっちゃないな。
>NLST -alL
150 Opening ASCII mode data connection for file list
226 Transfer complete.
ファイル一覧の取得は正常終了しました. (594 Bytes)
>RNFR pgsql.dump.1073709904.deleted
350 File or directory exists, ready for destination name.
>RNTO pgsql.dump.1073709904.deleted_
250 Rename successful
>TYPE A
200 Type set to A
>PORT 218,124,112,68,14,211
200 PORT command successful
>NLST -alL
150 Opening ASCII mode data connection for file list
226 Transfer complete.
ファイル一覧の取得は正常終了しました. (595 Bytes)

ffftpの出力より
後、知らないならず知らないと言った上で誘導しましょう。 >ねちねち絡んでる方々。
1. コマンドプロンプト立ち上げる
2. ftp xxx.xxx.xxx.xxx (NT側からUNIX側にFTP接続)
3. put NTでのファイル名 UNIXでのファイル名

これでOKだと思う。
いったん相手先に送ったらrenameコマンドで変えられるかも
(renameって使ったことないけどリモート用コマンドだっけ?)

ここでも見とけ↓
ttp://www.page.sannet.ne.jp/mtoga/html/etc/bih-h_84.htm
122おしえて偉い人:04/02/26 10:19
>>111

1〜1000 の全てを出力して比較しているのですが
「フォントサイズ小」の時はScreen.TwispParPixcel = 15 で
UserControl.width の挙動は Clng( x / 15 ) * 15 とまったく同じでした。
しかし
「フォントサイズカスタム200%」の時はScreen.TwispParPixcel = 7 で
UserControl.width の挙動は Clng( x / 7 ) * 7 とは微妙に異なります。

これは、VB6のバグなのでしょうか?
123ビート大根:04/02/26 10:30
>>109
すみません。状況はフォーム・サブフォームのつくりをしたDB用のフロントエンド
でありまして、改善したいのはサブフォームの側にあります。

テーブル構成は
受注(親フォーム) - 受注明細(サブフォーム) そして、サブフォームのテーブ
ルには、商品マスターのテーブルがつながっています。
http://tool-ya.ddo.jp/2ch/trash-box/contents.jsp?file=20040226102803631.jpg

上記のような状況の時、前回はクエリーを使ってテーブルをつくりそれをDBGridに
表示する形をとっておりました。この方法ですと確かに表示はできるし、目的であ
るIDを入れるだけでスパっと出るのですが、レコード削除のときに商品マスタのデ
ータも削除されるのです。
リレーションシップは以下のような感じです。
http://tool-ya.ddo.jp/2ch/trash-box/contents.jsp?file=20040226102924632.jpg

そこで、単純なSELECT * FROM 受注明細 where 受注コード = " & txt受注コード.Text
を発行したところ、削除しても商品マスタのデータは消えませんでしたが、問題のIDを
いれただけでスパっとは出なくなってしまい困っています。

クエリを使いたいのですが、いかんせんレコード削除の際に商品マスタまでもが削除さ
れてしまうのではどうにもなりません。お助け願えれば幸いです。
質問なんですが、
"D:\test\a.txt"という文字列があった場合、ディレクトリ部分のみ("D:\test\")を抜き出したいんですが
どうすればいいんでしょうか? 自分で"\"をカウントして抜き出さないとダメですか?
125ビート大根:04/02/26 11:49
>>124
カレントディレクトリを取得する関数を使うと良いですよ。
すると、あるディレクトリにあるファイルという場合には、そのフルパス
を、、、そこのディレクトリの場所をというときは、ディレクトリをとっ
てくれます
>>124
こんなのもあるが
PathRemoveFileSpec
GetParentFolderName

VB の機能で自作したほうがいいと思われ
127124:04/02/26 12:59
ありがとうございます。やってみます。
パス名に \..\ (カニじゃないぞ)を付加してGetFullPathname、という手もある
129デフォルトの名無しさん:04/02/26 14:22
>>124
InStrRev関数とLeft関数を使うとヨサゲ.
>>122
15/2=7.5を整数化してるのでは?
質問なのですが、
VBのスライダーの位置を示すヒントが消えないんですが〜〜
今、実数を使っているんですが整数値がヒントで出てしまってうざいんです。
コレって消す方法あるんでしょうか?
132おしえて偉い人:04/02/26 16:44
>>130
ええと、その7.5という数字は、なにから求めるのでしょうか?
133デフォルトの名無しさん:04/02/26 19:06
>>132
少しはヘルプ見ようよ。
TwipsPerPixelXの動作に疑問をもったら、普通TwipsPerPixelXでヘルプ検索するでしょ。
そこから芋づる式にヘルプをたどっていくと、「ScaleMode プロパティ」の解説に
Twipの意味が書いてあることがわかる。

それ読めば、どうして"15"って数字が出てくるかわかるでしょ。
小学校の算数ができればだけどね。

# フォントサイズ小のとき
  1inch = 96Pixel = 1440Twip ……
>>106
 遅レスですが・・・
 マスターの方のデータまで削除される問題は、前スレに
追求した結果を書いてあります。
 Jet4.0 OLEDB Providerの仕様だと思われます。
 MDBファイルに読み書きを行う時は、DAOを使った方が確
実で変な仕様に悩まされなくて済みます。
 標準で付いてくる表系のコントロールは使わず、サード
パーティ製のを使った方が楽ですよ。
 標準で付いてくる表敬コントロールは、はっきり言って
サンプル程度のレベルですし、勉強用程度には良いんだが。
135134:04/02/26 21:54
>>124
 クエリを使わない方法で表示されるのが遅いのは、
インデックスの作り方の問題とか考えられる要因は
色々あるんだが・・・(SQL文の記述も含め)
 VB6.0になってDAOの代わりにADOを強制する様に
なって非常に駄目になった部分ではありますが。
 M$的には、MDBファイルではなく、MSDEを使う事を
推奨しているのかもしれませんが。
 OLEDB Provider for SQL Serverは安定しているし
変な仕様も無いんです・・・
136デフォルトの名無しさん:04/02/26 22:38
VB6+MDBファイル(Access2000)のプログラムで
Data Environmentを使ってるんですけど、それって
あんまり推奨しないんですか?

何をどうすればいいのか・・・。
>>134
なるほど。 散々っぱら苦しんで、それが仕様だったとは,,,,,,,,,
なんか、どっと疲れがでてきました。それって、明らかにバグですよね?

SQL的には間違ってはいないはずですし、これ以外はきちんと動いてい
るもんですから、おかしいとは思っていましたが(つまり、レコードの追加
はしても、それが商品マスターにあるものでなければ、間違いがちゃんと
帰ってきていたので)

DataGrid Controlは一見すると、あの特定の列のセルでプルダウンメニュ
ーをはじめから出せるみたいなのですが、いかんせん仕様もなにも公開
されていないみたいで、全然コードが書けないし。

逆に、MSDEつかったら、今回のような問題は起こらないのか?それとも
Access97を使ったら(つまり、Jetの前バージョン)なら問題は起こらない
のか?そこが知りたいです。なにか、お手持ちの情報でありませんか?

この部分以外はかなり作り込まれていまして、今からAccess2000ランタイ
ム使ってやるってのにかなり抵抗が遇ったりはします。インターフェースの
作り直しはそれほど難儀しないんですが(馴れていますから)
138デフォルトの名無しさん:04/02/26 23:00
windowsのタスクの設定をVBから行う事は可能ですか?
定時処理をしてるんですが、起動時間をアプリケーションから自由に設定したいんです。
139デフォルトの名無しさん:04/02/27 00:13
>>138
そういうアプリ組んだことあるけど、たぶん想像しているより簡単にはいかない。
まず、たぶんタスクスケジューラを操作するようなAPIは私の調べた範囲では存在しない。

簡単に言えば(w、タスクのフォルダに.jobって拡張子のファイルを作ればいいんだけど
ファイルのフォーマットが結構クセがあったはず。まあ、でもこれはいろんなタスクを作って
根気よくバイナリエディタで調べればなんとか解析できると思う。

次に、単純ににタスクのフォルダにファイル作っても、タスクスケジューラに認識されない。
削除や上書きも同様にダメ。あるオマジナイ的な方法でタスクスケジューラに
確実に認識させられるのだが、苦労して発見した方法を簡単に教えちゃうのは
なんか悔しいから教えてあげない。(笑)

さらに、Win98だとハードがACPIにちゃんと対応していてもベタにやると
サスペンド状態からタスクで起動すると条件によってはアプリがちゃんと起動しない、
という問題がある。これもあるオマジナイで回避できるのだが…。
NetScheduleJobAdd とかでわないのですか?
タスクの設定ってのが理解できてないから的外れかもしれんけど。
141デフォルトの名無しさん:04/02/27 00:38
VBでプリンタへESCコマンドを出力したいのですが、
どうすれば実現できるでしょうか?
142134:04/02/27 00:53
>>137
 バグっぽい動作だとは思うのですが、現象を見る限り、敢えて
そういう仕様で作ってある様に思えます。
 Access97でも、ADOを使う場合はJet 4.0 OLEDB Providerを
使う事になるので結果は同じ事になるかと。
 MSDEは、データベースエンジンがSQL Serverと同じ物ですか
ら、OLEDB Provider for SQL Serverを使用する事になります。
 なので、こう言った変な現象は出ないと思います。
(SQL Serverでは出ませんから)
 アプリケーションに付けてMSDEを配布する事は問題ない筈な
ので、配布方法の調査と検討は必要だと思いますが。

>>136
 DataEnvironmentは開発段階で余計な事をされる様に感じて
使った事は無いのですが、やるならDAOをコードで制御する方が
確実かも。(コードを書く量が増えて生産性は落ちるのですけどね)
143134:04/02/27 00:57
>>141
 そりゃまた、面倒な事を・・・(汗)
 Printステートメントでプリンタポートに直接送り込んで
やる方法とか、そう言うのはあるのですが、プリンタドライバに
よる制御管理が厳しくなってきて、それをやろうとしても
出来ないケースが結構あるのですよ。
Escape()関数
145141:04/02/27 01:40
>>143
ちょっと面倒かもしれないとは思っていたのですが
やっぱり無理がありますか?

open "LPT1" for output as #1
プリンタの指定はこんな感じになるんでしょうか?

>>144
それでやってみます。

>>143-144ありがとうございました。
146小学生:04/02/27 14:55
>>133
ああ、いえ、そういう意味じゃなくて・・・
プログラムでどう取得したらいいのかって・・・
147デフォルトの名無しさん:04/02/27 16:10
だから、NT系ならミニポートドライバーというのがあるわけで。
そのくらい、会社もしくは学校ならMSに聞けば直ぐに答えてくれるだろうに。
プッ、
148デフォルトの名無しさん:04/02/27 23:02
初心者で失礼します。

プログラムが自動でキーを押すには、どうすればいいのでしょうか?
>>148
まずはプログラムから動かす事ができるロボットを用意して、そのロボットに対して
キーを押すという命令を発行します
>>149
アホか。

そんなインテリジェントな指令じゃなくて右小指の第二関節を48°曲げるとかだよ。
>>150
馬鹿。

曲げるのは第三関節だ。
手の形でなくてもいいじゃん
>>150-151
おいおい。
VBなんだからそこらへんは隠蔽されてるに決まってるだろ?
>>148
APIのkeybd_event関数でも使え。
sendkeyという言葉を使わないゲームですか?(汗
>>155
最もダサい方法。そう言うことだ。
157デフォルトの名無しさん:04/02/28 13:29
ていうか、SendKeyじ「プログラムが自動でキーを押す」ことはできないと思うのだが。
わかったふうなことを書く奴に限って、わけがわかってない。
>>158
自己分析ですか、良い心がけです。
レス速いな(w
質問者が何をやりたいのか知らんが、
察するに、SendKeyのことを聞いてるんじゃないのか?
もっとも、質問者はもう現れない罠。
便乗質問だけど、キーボードから押せないボタンはマウスカーソルを
移動させて左クリックするしかない?
でも、ボタンの座標って環境によって変わりそう。
>>162
その通り、しかしながらコンテナからのオフセットというのはなかなか変わらないので
コンテナのWindowハンドル + 座標で対応可能。
>>163
ありがとう
165デフォルトの名無しさん:04/02/28 17:34
GrapeCity社のOCXを使ったプログラムをフリーウェアとして配布するとした場合
一番良い配布方法はどういった方法でしょうか?

インストーラーの選定とか、注意事項とかありましたら教えてください。


開発環境
WindowsXP Pro SP1
VisualBasic6.0 SP5
Spread6.0 (最新修正モジュール)
166デフォルトの名無しさん:04/02/28 17:42
ソースを印刷するときに
サブルーチンや関数ごとに区切りがわかるように
例えば線が入るとかするには
どうすればいいのですか?
>>166
開発する。
印刷するプログラムを作るだけだよなあ
ソースプログラムを読んで
"End Sub"や"End Function"を見つけたら
次行に線を挿入する簡単なプログラムを作ればいいんじゃないの。
>>169
VBのアドオンとして作ればできそうだね。
end sub

'----------------------------------------------------------

Function hoge()
>>161
(・∀・)ノ[s] ワスレモノ ドゾー

>>162-163
ボタンのウインドウハンドルが取得できるなら座標はキニシナイ

>>162
自分で作ってるVBアプリの話なら、ボタンクリックイベントを起こせばいいのでは。
>>173
んなわけねーだろと。
>>172
そのほうが確実ですね。

>>173
他アプリです。

ユーザがフォントを変えれるアプリだとボタンの相対座標が微妙にずれるので、
getpixelでスキャンして微調整してました。
176デフォルトの名無しさん:04/02/29 13:39
質問です。
VBでフォームからフォームへ変数(引数?)を渡すことはできますか?

form2.show

などとして開いたフォームにパラメータを与えたいのですが・・・。
>>176
一体なんのパラメータなのかも書かないでなにを逝って居るんだ?

だいたい、目的はなんだ?
178デフォルトの名無しさん:04/02/29 14:01
>>176

------------------------------------------------
Form2
------------------------------------------------
Private m_strCD As String

Public Property Let PR_strCD(ByVal l_strCD As String)
m_strCD = l_strCD
End Property

------------------------------------------------
Form1
------------------------------------------------
Load Form2 '<-- 無くても動くけど書いた方が良い
Form2.PR_strCD = "001"
Form2.show

※注意する点としてはプロパティを渡す時点でForm2のForm_Load は既に通過しているという点




教えすぎ?
>>177
世界征服です。
180デフォルトの名無しさん:04/02/29 14:44
VB6でアプリつくっているのですが
“完全コンパイル後に開始”をしてから
アプリを終了して、VB6を終了しようと
すると、必ずアプリケーション・エラーが
起こります。
何が原因だと考えられるのでしょうか。
181デフォルトの名無しさん:04/02/29 14:44
>>177,178
サンクス!
まさにこのような方法が知りたかったのです。
本当にありがとうございました。m(_ _)m
182デフォルトの名無しさん:04/02/29 14:49
>>178
>※注意する点としてはプロパティを渡す時点でForm2のForm_Load は既に通過しているという点

これって、不要でないの? たとえフォームがloadされていなくても、変数のやり取りは可能だし、勝手にフォームもロードされない。
もちろんアンロードしても、渡した変数は初期化されない。(標準モジュールのモジュール変数と同様で、アプリ終了まで解放されない)

ちなみに下記のように動的に生成した場合なら、スコープが抜けたときに動的フォームそのものの情報がなくなる(内部変数も含む)ので、ダイアログを呼ぶときには便利。
dim lfrmForm as Form2
set lfrmForm = new Form2
lfrmForm .PR_strCD = "001"
lfrmForm.show
>たとえフォームがloadされていなくても、変数のやり取りは可能
メンバ変数にアクセスすると、その時点で勝手にロードされるでしょ??
表示はされないけどさ。
>アプリ終了まで開放されない
って言うのも、
Set From2 = Nothing
ってしなければの話でしょ。
184178:04/02/29 15:20
>>182
 >これって、不要でないの?
 たしかに理解できてる人には不要だけど、あなたのように理解できてない人の為に書いているのです

 >>183 でも指摘してるように ロードされないという事はないです。
 変数にセットした時点でForm_loadが呼ばれるからステップ実行してみなさい。

 プロパティで渡したつもりの値をForm_loadで参照して「セットされてない・・・」という
 状況になるのを避けるために書いただけです。
185デフォルトの名無しさん:04/02/29 16:07
正直、>>176の質問が本気だったと思えないんだがそれは俺だけか?
こんな初歩的なことしらない人が、>>177のリスト見ただけで

>サンクス!
>まさにこのような方法が知りたかったのです。
こうはならんだろうと思うのだが。。最近この手の知ってること敢えて聞く
寂しい「かまって君」多くないか?
>>184
玄人気取りですか。かっこいいですね。
>>178
> メンバ変数にアクセスすると、その時点で勝手にロードされるでしょ??
ロードされません。

>  変数にセットした時点でForm_loadが呼ばれるからステップ実行してみなさい。
見事に呼ばれません。実際にステップ実行してみましたか?

というかロードと、インスタンスの生成の違いを勉強してください。

フォームが勝手にロードされる条件は、
・フォーム自身のプロパティ・メソッドを参照した。
・フォーム上のコントロールを参照した。
場合のみです。

フォームにユーザーが作ったプロパティを
参照しただけではロードされません。
他フォームのグローバル変数を参照しただけでもロードしなかったっけ?
昔、そんなゾンビアプリを見たことある気がする。
愉快な言語でつね。
>>188
ロードしないよ。
フォーム = クラスなんで、
フォームのグローバル変数なんて言い方はおかしいけど。

>>189
理解できないだけでしょ。と煽りに煽り。
191デフォルトの名無しさん:04/02/29 16:25
>>187
このレベルの話しでそんなムキにならんでも。。

>>188
いや、だからForm2クラスのインスタンスはメモリに「ロード」されるんだけど、
その時点ではForm2クラスのインスタンスはVBの"Formクラス"を継承した
クラスのインスタンス(つまりそれが「フォーム」なんだけど)はロードしない、
ってことよ。
>>191
無理やり取り繕うとしても無駄。
>  変数にセットした時点でForm_loadが呼ばれるからステップ実行してみなさい。
Form_Loadが呼ばれると勘違いしていることから、
分かっていないのは明らか。

あと書いている文は意味不明。
人のIPが分かるソフトなんてありませんよね?
ちゃんと用語を分かりやすく使い分けようぜ。
VBを本当に知っているのなら、「(フォームの)ロード」という言葉に
特別な意味があるのを知っているはずだろ?
195191:04/02/29 16:31
>無理やり取り繕うとしても無駄。
なんか勘違いがあるような。わたしゃ178じゃないよ。>>185とは同一人物だけど。
>>191
えっ? ムキになっているのはあんたでは?
間違いをそのままにして置いたらダメでしょ。
なんで間違いを正したら、ムキになっているって逆切れするの?
結局、
> Load Form2 '<-- 無くても動くけど書いた方が良い
これは無くてよい。

> 変数にセットした時点でForm_loadが呼ばれるからステップ実行してみなさい。
変数にセットしてもForm_loadは呼ばれない。

>>178は馬鹿ということで終了ですね。
198191:04/02/29 16:36
>> Load Form2 '<-- 無くても動くけど書いた方が良い
>これは無くてよい。
いや、不適切だけど何も書かないより遥かにマシでしょう。
VBって罪な言語ね…
200178:04/02/29 16:41
うーむ

どうやら間違った知識を会社で教えられていたみたいです...
先輩の馬鹿ー
>>198
動作が違う。

書かない場合は、
「プロパティの初期化」→「フォームのロード」「フォームの表示」
という順番だが、

書いた場合は、
「フォームのロード」→「プロパティの初期化」「フォームの表示」
という順番になる。

フォームのロードになにも書いてない場合は問題ないが、
フォームのロードでプロパティの値を参照すると違うことになる。
>>199 他の言語でもGUI部分は同じような仕組みになってるけどね。
>>200
プログラマなら与えられた情報の裏も取らずにそのまま信じるのは気をつけようね。
204191:04/02/29 16:50
>>201
この人が何言いたいのか分からないのですが、
だれか解説して。。

参照によるインスタンスの暗黙の生成を許せるかどうか、って話しが
なんで>>201みたいな話しになるのか。。
Form_Initialize
フォームクラスのインスタンスが作成されたときに発生する
 Class_Initializeと同じようなもの

Form_Load
 フォーム上のコントロールやフォームのCaptionなどを触ったりして
 フォームがロード(CreateWindow?)されたときに発生する


・・・という解釈でいいのかな?
>>202
VBはなんにも考えずにお手軽にできるところがイヤ。
これが
> Load Form2 '<-- 無くても動くけど書いた方が良い
> Form2.PR_strCD = "001"
> Form2.show

こうなら間違いではないんだけどね。
(俺は書いたほうが良いとは思わないけど、好みの範疇)

Form2.PR_strCD = "001"
Load Form2 '<-- 無くても動くけど書いた方が良い
Form2.show


もしくはコメントを変かえて、こういう目的なら問題ない。
何のためにForm_Loadを発生させるのかはすぐには思いつかんけど。
初期化とかならForm_LoadじゃなくてForm_Initializeでやればいいし。

Load Form2 '<-- プロパティの設定の前にForm_Load発生させるため。
Form2.PR_strCD = "001"
Form2.show
>>204
その前におまえが言ったこと(>>191)を説明したらどうよ?

> 参照によるインスタンスの暗黙の生成を許せるかどうか、って話しが
> なんで>>201みたいな話しになるのか。。
そんな話してないしw
>>205
OK。
VBではフォームに対して単にロードというメモリにロードじゃなくて
Form_Loadを発生させてGUIを管理し始めることだと思われやすいので注意。
取りあえずステップ実行してみたよ。
誰か確認するのが面倒だからしないけど、誰かの言ったとおり。

自分で追加したプロパティにアクセス
-> Initializeは通るけどLoadは通らず

元からフォームの持つプロパティ、あるいはコントロールのプロパティにアクセス
->InitializeもLoadも通る。

ややこしいなぁ。
初心者にはきついよな。
型名で暗黙的に作成されている変数ってのは便利だけどややこしいな。
Delphiはその辺透明感があってよい。

でも、RADしたいならVB。
>>210
> 自分で追加したプロパティにアクセス
> -> Initializeは通るけどLoadは通らず

これって、本当か?

漏れはformオブジェクトのInitializeイベントは、EXE起動時の全フォーム作成時、
あるいは動的フォーム生成時のSet lform = New Formするときだけだと思ってたぞ。
>>212
ごちゃごちゃ言わんと試せと言うことで。
214178:04/02/29 22:58
お騒がせしております...
確かに他人のソースを見ていたときに見たことがあった現象なので
思い出してみました。

以下のようにすると確かにForm_Loadが呼ばれます。

Form2にTextBoxを配置、名前をText1とする

----------
Form1
----------

Form2.text1.text = "123" ’←いきなり値をセットするとForm_Loadが呼ばれる
Form2.show


これを間違って記憶していて、
値をセットする→Form_Loadが呼ばれると覚えていてしまったようです。
普段はPropertyを使うのでこういった作りはしませんが、他人のソースを見ていると時々見ます。

これの勘違いは仕方無いかなぁって思うよ。
呼ぶ側のコードで、それがロードされるのかそうでないか、判断できない場合が多いしね。

フォームにロードしないで初期化するメソッド作ったり、呼び方に一定のルール持たせたり、
チーム内でのローカルルール決めとかないと、これの勘違いに起因するつまらないバグ
なんかが出てくるから、割と注意しなきゃいけない個所だね。
しかし、そもそも別のフォーム上のコントロールを直接触りに行くのがクソだと思う。
参照を使ったアクセスにすべき。

というかうちの先輩社員、Form1というフォーム上のコードで、
Me.captionとForm1.captionの区別を付けていなかった。
多分、今でも同じだと思っているはず・・・、もうちょい勉強して欲しい。
結構あるよね。別フォームのコントロール見に行ったり、グローバル変数たらい
回しにしたり、関数同士が癒着してたり。初めて見たときに頭痛くなった。
DOS時代のコードは捨てて作り直せよぅ。と泣きそうになりながら思った。
そうだ、表示前の初期化時以外にも、フォーム内のコントロール直接
触りに行くやついるなぁ。
そっちはもうひたすら勘弁してくれって感じだ_| ̄|○
まー暗黙の変数宣言がまず分かりにくいからな。
Option Explicitみたいに暗黙の宣言を無しにできる
オプションがあれば良いのにな。
なんかがたがた言い過ぎ
>>216
インスタンスをべつに作らなきゃ問題ないじゃん
Form1なんて名前付けてるだけに、Form1しか使ってないんだろ?
>>217
別フォームのコントロール直接見に行かないでメソッド作ってやるわけ?
設計書かかなきゃだめじゃん。みんな書きたくないのに
グローバル変数たらいまわし、まさにグローバルじゃん
>>218
そこまで言うなら、初期化時もさわっちゃだめじゃん
>>219
暗黙の宣言しようがしまいが、変数の名前問題は常についてまわるじゃん
変数使わなきゃいいんじゃん

って思う俺は相当VBにいかれてるんでしょうか
>>220
> って思う俺は相当VBにいかれてるんでしょうか
お前がいかれているだけ。VBは関係ない。
暗黙の「Public Form1 As New Form1」が全ての元凶。
223220:04/03/01 12:44
>>221
そうだよな
俺がいかれてるだけだよな
VBは関係ないんだよなあ
224デフォルトの名無しさん:04/03/01 16:23
バイト配列を文字列のプロパティとして保持し
後で再びバイト配列に展開したいんだが
そのまま代入すると一部値が変化してしまう
今は1バイト毎の二文字の16進を連結しとるが
他にいい方法あれば教えてくれ
VBの無料版のダウンロードページ知ってる方居たらアドレス教えてください
>>224
それが一番安全なんでは?
領域がもったいなければ、Basel64とかもあるけど。
unicodeにしろ何にしろ、禁止されたコードというのは存在しうるし、
そいういうのを使ったときの可逆性は保証できない。
227224:04/03/01 18:04
>>226
どうも!
おかげでBASE64ってのがよくわかったよ
こっちのほうが小さくて見た目にもいいな
LockWorkStation()で強制的にコンピュータのロックを行なった後、
ユーザーの再ログオンをアプリ側で検出したいのですが、
何か方法はないでしょうか?

↑環境は、Win2K+SP4 VB6.0 です
230デフォルトの名無しさん:04/03/01 20:18
>>224
同じようなことやるアプリ書いたことがあってちょっと不安になったんで
下のコードでやってみたけど、別に化けたりしないよ。
変なところで余計なStrConvとかかましてるんじゃない?
Private Sub Form_Load()
  Dim Source(255) As Byte
  Dim Destination() As Byte
  Dim Temp As String
  Dim i As Long

  For i = 0 To 255
    Source(i) = i
  Next i

  Temp = Source
  Destination = Temp

  For i = 0 To UBound(Destination)
    List1.AddItem Destination(i)
  Next i

End Sub
>>230
UNICODE文字列にマップできないバイト列を渡すと化けたはず。
232デフォルトの名無しさん:04/03/01 22:53
ツールチップを強制的に表示する方法ってありますか?
SendMessageでできるんじゃないかな。
SPYでメッセージ取りまくれ
>>225
CCEのことか?
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=1ceb1b0d-24ac-4c66-bf45-0c79aa500c22&DisplayLang=ja

前スレでも同じ質問が出てたし、学習用としても便利だから、次のテンプレに入れてはどうか。
235224:04/03/02 09:33
>>230
んあ!ホントだ
直接ぶち込めばよかったんだな
CopyMemory使ってたがこれじゃANSIに変換されている罠
スマンカッタ
>>234
ありがとうございます
VB6.0でゲームのコントローラーの制御をしたいです。
たとえばF1を押すと
波動拳コマンドというようにするにはどういうAPIを使用すればよいでしょうか?
よろしくおねがいします
void F1KeyToHadohken( void );
239デフォルトの名無しさん:04/03/02 16:24
VB6.0でバッチファイルを実行して、そのバッチ実行後の戻り値を取得したいのですが、
どうやったら良いかわかりません。
Shell関数だと、プロセスIDしか取得出来ませんし。。。

Cなら出来ると聞いたのですが・・・
どなたかご存でしたらご教授下さい。
>>239
batに戻り値あったっけ。忘れたな。
多重実行だの排他とか無ければbatで環境変数やファイルに値をつっこむのもありかな。
241デフォルトの名無しさん:04/03/02 20:11
BAT でなく CreateProcess で直接実行しては?
GetExitCodeProcess で実行中か終了したかわかるし、終了コードも取得可
242デフォルトの名無しさん:04/03/02 20:14
>>240
レスありがとうございます。
>多重実行だの排他とか無ければbatで環境変数やファイルに値をつっこむのもありかな。
環境変数に入れた値をVBで取得するにはどうしたら良いのでしょうか?
243デフォルトの名無しさん:04/03/02 20:17
VBの質問とは離れるかもしれないが、教えてください。
VB6でVBレポートを使用して作成しました。
セットアップウィザードでXlsReport.dllはセットアップすることにしました(当然)。
それだけでは、帳票は出ませんでした。Excelをセットアップしたら印刷できるように
なりましたが。Excelをセットアップしないでもよい方法はないでしょうか?
Excelは、必須なのでしょうか?

244デフォルトの名無しさん:04/03/02 20:25
>>241
アドバイスありがとうございます。
CreateProcessは初めて知りました。
でもバッチファイル内に複数のコマンドを書いていますので、
今回は無理なようです。
でも参考になりました。
>>242
Environ
VBからバッチファイルを動かしてバッチファイルで環境変数を変えても
ローカル変数のようにバッチファイル内でしか影響を与えないから意味ないよ。
VBでFunction Main(arg as Integer) as Integerからはじまるアプリとか作れたらおもしろかったのに。
>>247
VBでOSに戻り値を返すプログラムは一応作れるけどね。
激しく推奨されてないけど。
249デフォルトの名無しさん:04/03/03 10:05
質問です。
VB6.0でアプリケーションを作っているのですが、
VB6.0内で「実行」なり「完全コンパイル後に〜」なりは問題なく行えるのですが、
EXEファイルを作成してそれを実行しようとすると、一瞬画面が表示されてすぐ消えてしまいます。

ためしに適当なものをつくって同じようにEXEファイルを作成・実行してみたら、そっちは
問題なく起動できるのですが・・・。
メモリ確保などの問題かなとも思ったのですが、そんなに大きなものでもないので。

よろしくおねがいします。
>>249
環境依存のパスを使ってるとか
251デフォルトの名無しさん:04/03/03 11:02
そーす見ないと良くわからんので

起動時に通るロジックで
unload me とかしてる箇所全てにMSGBOXでメッセージを出すようにする。
当然メッセージの内容は全部変えておく。  連番とか
 ↓
EXEファイル作成して実行してみてメッセージが出たら・・・
Sub Main()
  Load Form1
  Form1.Show
  Unload Form1
End Sub

時々、これ系の間違いをするときあるなぁ。
質問です。

テキストファイルを Line Input #1 , strTest で読み込み、strTestの中のタブ文字を半角スペースに
変換したいのですが、どうしても位置がずれてしまいます。見た目の位置が変わらないように、タブ文字を
半角スペースに変換するにはどうすればよいのでしょうか。
Win2kでVB6を使っています。

RegSetValueEXでレジストリにバイナリの値を書き込む時に
String型の変数にchr(&h**)と一旦入れ、その文字列を書き込んでいます。
これは条件によって書き込む値の長さや値自体が変わる為、こう処理しました。

しかし、&hE0を入れると、その値だけ00となっています。
他の値ではSetできるのですが、E0を書き込む事だけができません。

回避策としてはstring型の文字列に入れないことだとは思うのですが
レジストリにバイナリ型で書き出すときはどういう処理が適切でしょうか?

よろしくお願いします。
255デフォルトの名無しさん:04/03/03 11:46
>>253
何に対しての見た目の位置か?
TEXTBOXで表示?ファイル内のTABを半角に置換したファイルを他のエディタで読んだ場合?
>>254
Byte型を使わずにやれってことか?
>>253
フォントとフォントサイズにもよるからなあ
>>255
どちらかと言えば後者ですね。例えば、テキストエディタ上で100文字に見えるタブを含む文字列を、
タブを半角スペースに変換して出力し、同じテキストエディタで全く同じように見えるようにするという感じ。

実際には、読み込んだデータを固定長として扱い、その内何文字目から何文字目を抽出する・・・・・
と言った処理を行っています。
259253:04/03/03 11:57
あ、フォントは固定幅です。
>>256
なんというか、直接「E0」を書き込みたいのですが、一旦String型変数に
WriteCode = chr(&hA0) & chr(&hE0)
のような形で入れています。

それをBINARY型の値を作って放り込む、という面倒な事をしています。
もっと楽にできそうなのですが、試してみるとデータ型の違いでエラーを吐くもので。
>>258
バイナリで読み込んで、タブ文字をスペース4(8?)に置換しても駄目なの?
そもそも、その見た目は表示するエディタがTABをどう表示するかの問題では。
262249:04/03/03 12:15
>>250,251,252さん
回答ありがとうございます。
作ったアプリには、ひとつもUNLOADを指定していないのですが
もしかしたらそれがやばいのでしょうか・・・。


こちらでもいろいろためしてみたところ、他に起動しているプログラムを
終了させてから実行したところ、問題なく動作確認できました。
やはりメモリの問題なのでしょうか・・・。

EXEファイル作成の際、あらかじめメモリ領域を確保するように設定することなどは
できるものなのでしょうか。
すみませんがよろしくおねがいします。
>>258
やり方が悪いんじゃないかなぁ。1文字ずつ読み込んで処理してったら普通にできたよ。
タブ位置の計算方法間違ってんじゃない?
264デフォルトの名無しさん:04/03/03 13:19
すいませんSQL特に初心者です

以下のコードはヘルプから抜粋ですが、一度のExecuteで
3フィールド(同一レコード)をUPDATEしたいのですが
SET 以降のフィールド=更新値の区切りをどうすればいいでしょうか?
Sub UpdateX()

Dim dbs As Database
Dim qdf As QueryDef

' この下の行を、使用しているコンピュータ上の
' Northwind のパスに変更してください。
Set dbs = OpenDatabase("Northwind.mdb")

' 社員のレコードで現在 2 に設定されている
' ReportsTo フィールドの値をすべて
' 5 に変更します。
dbs.Execute "UPDATE Employees " _
& "SET ReportsTo = 5 " _
& "WHERE ReportsTo = 2;"

dbs.Close

End Sub
>>262
OSは何使ってんの?win9x系か?
>>264
"," で区切れ。
>>264
せめて本屋でSQL入門買うか、ネット上でSQL入門のページを見つけてから聞いてくれ。

聞いてる内容がいろはのいの一画目ぐらいだぞ。
>>267
だって、本代とかネット接続料金がもったいないじゃん。
しかも質問に答えてないし、これぐらいサクッと答えろよ。クズ
>>268 騙って煽るんじゃねーよ。
270デフォルトの名無しさん:04/03/03 13:36
>>266
ありがとうございました やってみます

>>267
すみません緊急をようしましたので
甘えた質問をさせてもらいました。
前にトピックで聞いたら鬼のように叩かれてしまいまして。。。。
トピキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
272253:04/03/03 13:38
>>263
わかりました。複数件のタブをまとめて処理しようとしていたのでずれていました。ひとつずつ消していく処理に
したら上手くいきました。
とりあえず、緊急の場でこのレベルに仕事されたくはないわな。
274デフォルトの名無しさん:04/03/03 13:49
そのプログラムがアクティブな場合にだけ、手前にウィンドウを表示する方法ってないでしょうか.
今SetWindowPosで常に手前に置いてる状態なんですが、使用するプログラムがOS上でアクティブな場合にだけ
発動してほしいんです。

お願いします。
>>274
普通はそのプログラムがアクティブなら手前にウインドウが表示されるだろ?
>>274
何が言いたいのかがわからないっす。
OS上でアクティブってどういうこと?普通に取ったら対象アプリを使用している状態だよね。
それならば普通に常に手前に来ると思うけど。

アクティブなのに背面に行くのは、他のアプリがSetWindowsPosで前に来てるからじゃないの?
あっ。アクティブでないときは他のウインドウに隠れて
アクティブになったら、他のウインドウ(常に手前になっている奴も含む)
よりも前に出したいということか。

プログラムがアクティブになる状態ってのはサブクラス化して直接
ウインドウメッセージを処理しなきゃならないと思う。
278264:04/03/03 14:02
ありがとうございました。迅速に教えていただき感謝します。
無事動きました。
取り急ぎご報告まで
>>277
早い回答ありがとうございます。
文脈変ですいません。わかり辛かったですね。
やっぱりサブクラス化しないと駄目ですね。

ありがとうございました。
280デフォルトの名無しさん:04/03/03 18:23
VBのアプリが動かないのですが、原因が良くわからないので質問させてもらいます。
Win98とMEでは動くんですが・・・・
Win2000だとrun-time error429と表示されてしまいます。
VBのバージョンや作成環境はわかりません。
何かヒントがあったら教えてもらえないでしょうか。
281デフォルトの名無しさん:04/03/03 18:36
質問です。

現在、VB6で以下のような処理を行っています。

1.印刷データを生成
2.印刷データをプリンタへ出力
3.出力先プリンタをPDFライターに切り替える。
 (レジストリ操作)
4.印刷データをPDFへ出力
5.終了
(PDFとプリンタに出力している情報は同一です)

以上の4の部分へ移ったときにエラー448となり、PDFに出力されません。

デフォルトプリンタ切り替えが終わる前に、
プリンタ出力を行ってエラーとなっているのではと
疑っていますが、スマートな解決策が思い浮かびません。

やはり素直にウェイトをいれるほうがよいのでしょうか?
ご教授おねがいします。
282281:04/03/03 18:48
書き忘れてました。
OSは2000及び98になります。
283281:04/03/03 18:58
さらに追加・・・
3のレジストリ操作でPDFのファイル名も指定しています。
284249:04/03/03 19:13
>>265
OSはWinXPです。
ほかのOS環境が身近にないので他の環境ではどうかちょっとわからないの
ですが・・・。
285デフォルトの名無しさん:04/03/03 22:05
>>281
そもそもプリンタ切りかえるのにレジストリ操作ってのが意味不明な気が。

もう旧VB1年以上触ってないんで自信ないけど、
プリンタオブジェクトのコレクション(たしかPrinters)のから、名前が一致する
プリンタオブジェクトを探せばいいんじゃないの?
>>280

429は「ActiveXコンポーネントはオブジェクトを生成できません」
だな。

Excel必須なアプリなのにExcel入ってないとか、そんな感じだろう。
何かDLLが足りないんだよ。
何かまではわからん。

>>249
別にUnloadの前だけじゃなくてそこらじゅうにメッセージボックス
貼り付けてみたら?
>>281
OS書いてないけど、プリンタ切り替えが有効にならないのはFAQ
>>281
何をしたいのかわからん。
普通プリンタ選んでから出力だろ。
Printersオブジェクトとか使おうよ。
289249:04/03/03 22:46
>>286さん
お返事ありがとうございます。
ためしに一番最初に実行されるLOADのところにMSGBOXをはりつけてみたところ、
一瞬メッセージボックスが現れ、OKを押すまえにプログラムが終了されてしまいます。

この自作のプログラムはとあるひとつの大きなソフトの補助的なもので、
(二つのプログラム間でのやり取りはありません)
できればその大きなソフトと同時に起動していたいのですが、
そのソフトを起動していると上記のような現象がおき、
ソフトを終了させると問題なく自作プログラムを起動できます。

タスクマネージャでそのソフトの使用メモリ量を調べてみるととんでもなく膨大で(約270MB)、
こちらの勝手な予想ですがそれが問題ではないかと踏んでいます。

そのソフト自体は市販のものなのでこちらではどうすることもできないので、
自作のほうでちゃんと確保してやる必要があるのかなぁ、、、と。

今までこのような現象が起きたというかたも少なそうですが、
ご意見お伺いしたいです・・・。
そのソフトがどんなものかは知らないけど、そいつが殺しに来てるんじゃないの?
たとえばそれがゲームだとして、あなたが作ったソフトはチートソフトと思われているとか。
他のアプリの起動を阻害する何かが入ってるんじゃないかねぇ。
270Mのメモリを使用するソフトが横にいたからといって、起動するなり死亡なんて
事は無い。
起動する前にメモリを確保しておくなんて事もできないし、できる必要も無い。
291 ◆.jC7ANgFY. :04/03/03 23:52
メモリが足りませんってきっと裏でエラーがでてるんだよ。
292291:04/03/03 23:57
DLLのロードに失敗したりする可能性も。
とくに98系ならかなり可能性が高いと、
294249:04/03/04 03:36
>>290、291さん
お返事ありがとうございます。
なるほど、殺されている可能性もありますね・・・。
たしかに、自作プログラムをたちあげておいて、ソフトを起動してみると
途中で消されてしまいます。

しかし、起動が無事できるプログラムもある(たとえば初心者用のテキストにのっている
簡単な電卓プログラムなど)ので、
いろいろと試行錯誤してみようと思います。
やろうとしていることはそんなに大したことではないので・・・。

長々とお付き合いいただき、ありがとうございました(_ _)。
295デフォルトの名無しさん:04/03/04 08:24
>>249
なんか「サポセン」に載ってるアホな客みたい。
ただ「動かない、動かない!」じゃ、なんのアドバイスもしようがないでしょ。

特殊なケースについて聞いてるんだから、最低ターゲットのアプリは具体的に何かとか、
自作アプリはどういう処理をしているかとか書かなきゃ答えは得られないんじゃないの?
VB6+Win2000環境にて、細かい宣言などは省略しますが

dim Data() as Byte

fot i = 0 to 9
Data(i) = 1
next i

RegOpenKeyEx(Rootkey, Subkey, 0, 2, nHandle)
RegSetValueEx(nHandle, KeyName, 0, REG_BINARY, Data, i + 1)

だとRegSetValueEXの行で「型が一致しません」、と出ます。
RegSetValueEXのバイナリ値のSetを使用しているソースを探したのですが
同じような記述しか見つかりませんでした。
バイナリはどう設定すればいいのでしょうか?
>>296
APIの定義はどうなってるの?
as Byteの配列にするか、as Anyの配列とかにしてる?
>>297
Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "ADVAPI32" (ByVal hKey As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As Any, ByVal cbData As Long) As Long
というように定義してあります。
上記の状態でString値は書き込めるので、lpData以外に変更が必要な所ってありますか?
299デフォルトの名無しさん:04/03/04 12:37
>>298

ByVal lpData As Any
これを
ByRef lpData As Any か、ByRef lpData As byte に変えて、
コールする時に次のように配列の最初の要素を渡してやったらどう?
RegSetValueEx(nHandle, KeyName, 0, REG_BINARY, Data(0), i + 1)
300296:04/03/04 12:58
>>299
ありがとうございます。
試してみたところ
ByRef lpData as Any
で問題なく動作しました。
激しく感謝です。
301デフォルトの名無しさん:04/03/04 14:06
MicrosoftActiveXDataObject2.0Libraryのバージョンを上げたいのですが
どうしたらいいでしょか?

>>301
開発環境においてなのか、既に稼動してる環境に対してなのか?
何から何にバージョンを上げるのか?

質問になってない質問が最近多いよな。
304sage:04/03/04 16:13
>>302
開発環境です
2.5からx.xに。。。

>>303
あぁ通じてよかった
ありがとう。ぼくの求めていたものですありがとう。

305デフォルトの名無しさん:04/03/04 21:07
VB6ですが、フォームの中にフォームを入れる事って出来るのでしょうか?

オブジェクトが多いので、オブジェクト数を減らすために別フォームにしたのですが、
使い勝手が悪いので、フォーム上にフォームを貼り付けることが出来れば色々
都合がいいのですが、可能でしょぅか?
>>305
MDIにしたら?
>>305
ユーザーコントロールにしてしまえばいいのでわ
308デフォルトの名無しさん:04/03/04 21:24
ていうか>>305はネタ(少しも面白くないが)でしょ?違うの?
309デフォルトの名無しさん:04/03/04 22:00
先日、新しいデスクトップ型PCを購入しました。
ノートPCで作成していた、VB6の自作コードを新しいデスクPCにコピーして実行したところ、
ノートPCの時は問題なく動作していたプログラムが『メモリが不足しています』という
エラーメッセージで動いてくれません。

コードの改変は一切行っていないのに・・・、何度実行しても同じ理由でアウトです。
(※試しにノートPCで再度実行したところ、きっちり動作するのですが)

ちなみにPCのスペックはそれぞれ以下のとおりです。
ノート→ メモリ:128MB HDD: 30GB CPU:Pen3 1.13GHz OS:XP Pro
デスク→ メモリ:512MB HDD:120GB CPU:Pen4 2.80GHz OS:XP Pro

メモリが足りないということは、どう考えてもあり得ないと思うのですが・・・。
どなたか原因が分かる方、教授して下さい。よろしくお願いします。
んなもんマジでメモリ足りないわけが無い。
何でエラーでてんの?
ソースあるんでしょ?
ステップ実行して未りゃ分かるんちゃうの。
そもそもXPで、VB6は動くのか?
>>311
バグありだけど一応動くみたいだ。
IDE上でフォント切り替えトラブルが、漏れ的には許せないがな。

ttp://www.microsoft.com/japan/msdn/vs_previous/vstudio/techinfo/toolos.htm
ファイル別のところ読んでるんじゃない?
フルパスで指定しているとかそういうことしてたときに
空ファイル読んでしまってエラーでたり。。。
# 確か、strconvかsplitでメモリが足りませんって出ることが
314デフォルトの名無しさん:04/03/04 23:51
>>309 です。

>>310
ステップ実行してみても原因不明、コードそのものに誤りはないはず。
(ノートPCでは動作するので)

>>313
strconv も split も使ってません。

まったく原因不明だす。氏のう。
315デフォルトの名無しさん:04/03/05 00:03
なんか同じような内容の質問が続いているけど同一人物かなあ?
偶然とは思えないんだが。

ひょっとしてVBのソフトはランタイムやocxレジストリに登録されてないと動かない、
なんて基本的なことを知らないんじゃないの?
ファイルのバイナリで特定アドレス位置に値を「挿入」する方法を教えてホスィのです・・・
どなたかこんな初心者道まっしぐらの漏れに温かい救いの手を・・・

とりあえず特定アドレスの値を新たな値で「上書き」する関数は出来てます。
open 〜 For Binary As FileNumber の後
getで配列にぶっこんでおいて、書き換え位置の配列の値を直接書き換えて、
元のファイルをKillした後に新たに置き換えたファイルをputしてるんだけど、
やっぱ挿入位置の後の配列を全部+1する手しかないでしょうか? _| ̄|○

激しく長文でスマソ
>>314
>ステップ実行してみても原因不明、コードそのものに誤りはないはず。
なんていう関数で出てるかここでいってくれればいいじゃん、
ってかなんでそれを言わないの?
デバッグ環境じゃ出ないの?
わざと情報隠してるとしか思えない。
これ読んでこいや
http://www.redout.net/data/osietekun.html
>>316
ひとつづつずらすのは嫌なの?
きわめて普通なやりかたやとおもうけど。
Byte型の配列ってLeftBとか使えたような気もするから、
それでうまいことできるかもしれんけどなー
319316:04/03/05 00:20
>>318
いや、他にもっとスマートなやり方あるのかなと思って(w
それ聞いて安心しました
アリガトです!ヽ(´ー`)ノ
>>319
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Function JoinByteArray(ByRef bytArray1() As Byte, ByRef bytArray2() As Byte) As Byte()
Dim bytTemp() As Byte, lngUbound1 As Long, lngUbound2 As Long, i As Long
lngUbound1 = UBound(bytArray1())
lngUbound2 = UBound(bytArray2())
ReDim bytTemp(lngUbound1 + 1 + lngUbound2)
Call CopyMemory(bytTemp(0), bytArray1(0), lngUbound1 + 1)
Call CopyMemory(bytTemp(lngUbound1 + 1), bytArray2(0), lngUbound2 + 1)
JoinByteArray = bytTemp
End Function
参考までに。(たぶん、動く。)
VBでWAVを格納したEXEって作れますか・・・?
格納できる便利だなぁ・・・と思いまして・・・
>>305
SetParent(Form2.hWnd, Me.hWnd)とかw
>>321
できるよ
>>321
リソースとして追加するとか
325自己レス:04/03/05 01:13
>>322
SetParent(Form2.hWnd, Me.Picture1.hWnd)の方が便利かも<んなわけない
326デフォルトの名無しさん:04/03/05 10:03
繰り返し構文で繰り返しをスキップする命令がないみたいですが
なにかいい方法はないでしょうか...exit do とかではないです
C言語でいうwhile とcontinueの関係なんです
>>326
goto
328326:04/03/05 10:15
>>327
その手があったか。
サンクスコ

>>315
上の人とは違うけど
>ひょっとしてVBのソフトはランタイムやocxレジストリに登録されてないと動かない
って説明のあるところを教えてください。
MSDNのこの場所とか言うのでも構いません。
orこの言葉でMSDN検索しろって言うものでもいいです。
>>329
あ・・・
ランタイム ocx レジストリ でMSDN検索したら
実行可能ファイル (.EXE) の作成、実行、配布 ってところで出てきた・・・

でもこれってファイルがありませんって事はあってもメモリ不足とか表示されるもんだろうか?
331VB初心者 ◆wxqClswUC2 :04/03/05 13:31
「SWC」っていうオブジェクト名のテキストボックスに
「aaa」という文字を表示させたいときに
SWC.Text = "aaa"
とするとエラーが発生するんですがなぜでしょうか
>>331
エラー内容すら書けないのか
333VB初心者 ◆wxqClswUC2 :04/03/05 13:52
失礼しました。

コンパイルエラー:
メソッドまたはデータ メンバが見つかりません。
>>333
SWCってのはどうやって作ったの?
335VB初心者 ◆wxqClswUC2 :04/03/05 14:18
テキストボックスのオブジェクト名を「SWC」にしまいした
>>335
別のフォームなどからSWCをいじろうとしているとか
337VB初心者 ◆wxqClswUC2 :04/03/05 15:32
ああ、できました、ありがとうございます
>>337
おいおい。何が原因だったんだよ
単なる釣りか。
339デフォルトの名無しさん:04/03/05 18:09
VBのReDimで確保したメモリをVC++で作ったDLLで参照することが出来ませんでした。
そこで、VBでVC++のmallocと同じようにメモリを取得するらしいGlobalAllocを使って、
実現しようとしたところ、どうしてもうまくいきません。CopyMemoryがメモリを荒らしてくれます。
以下にソースを載せます。何か悪いことをしているところがあるでしょうか?

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function GlobalAlloc Lib "kernel32" (ByVal Flags As Long, ByVal Size As Long) As Long
Public Declare Function GlobalFree Lib "kernel32" (ByVal Mem As Long) As Long
Public Const GMEM_FIXED = 0

Dim pc1 As Long, pc2 As Long
pc1 = GlobalAlloc(GMEM_FIXED, 10 * 4)
pc2 = GlobalAlloc(GMEM_FIXED, 10 * 4)
CopyMemory pc1, pc2, 10 * 4
GlobalFree pc1
GlobalFree pc2

【最終的にやりたいこと】
VBで確保したメモリをVC++で作成したDLLで参照したい。

どなたかご存知の方、教えていただけないでしょうか?
>>339
GlobalLock/UnLockくらいは使おうね
>>339
俺はReDimで問題なくVCのDLLに渡せてるぞ?
どんなやり方してるんだ
メモリアドレスをvarptrあたりで取ってそれを渡すべき。
まぁ、いったん要素数を1にしないといけないと思うけど。
>>342
ByRef hoge as Any で普通に渡せるぞ。
biteArray(0)を渡すのがミソ
ByRef hoge as Any
で byteArray(0)を渡すって言うのは
ってのは
ByVal hoge as Long
でVarPtr(byteArray(0))を渡すのと等値です。
>>339
ByRef と ByVal の違いについても調べた方がよろしかと
プログラムの起動時に
同じパスにあるa.datを読み取って
中身は
山田
佐藤
武田
だとします

それでメニューの中の
人物リスト
・・・山田
・・・佐藤
・・・武田
みたいなことをしたいのですが可能でしょうか・・・
可能ならばメニューに追加する方法だけでいいので
教えていただけないでしょうか・・・
>>346
あなたのレベルがわからんのですが・・・

ファイル読み込み
dim strName() as string
dim i as long
Open App.Path + "\" + ファイル名 For Input As #1
do while (EOF(1) = false)
redim Preserve strName(i)
Line Input #1, strName(i)
i = i + 1
loop
Close #1

まぁこんな感じ。
メニューに入れるのは

For i=0 to ubound(strName)
if i <> 0 then
load mnuName(i)
mnuName(i).Visible = True
mnuName(i).Caption = strName(i)
Endif
Next
こんな感じ。

あらかじめmnuName ってのを作っておいて、
そのとき「インデックス」ってのに0を入れるのを忘れずに。
For i=0 to ubound(strName)
if i <> 0 then
load mnuName(i)
mnuName(i).Visible = True
Endif
mnuName(i).Caption = strName(i)
Next

こうだろ
>>347-348
ありがとうございます!!
無事できました!!!
このスレの人たちって優しいですね
>>339
なにも気にせずレスしてたがよく考えてみると矛盾があるぞ。
CopyMemoryAPIの使用方法・・・
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
の場合は、CopyMemory(コピー先の変数, コピー元の変数, コピーバイト数)
でもってGlobalAllocでかえってくるLongは"変数のアドレス"
これじゃうまく動かないどころかpc1で取得したメモリがメモリリークを、、、
変更例は

Public Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Long, Source As Long, ByVal Length As Long)
Public Declare Function GlobalAlloc Lib "kernel32" (ByVal Flags As Long, ByVal Size As Long) As Long
Public Declare Function GlobalFree Lib "kernel32" (ByVal Mem As Long) As Long
Public Const GMEM_FIXED = 0

Dim pc1 As Long, pc2 As Long
pc1 = GlobalAlloc(GMEM_FIXED, 10 * 4)
pc2 = GlobalAlloc(GMEM_FIXED, 10 * 4)
MoveMemory pc1, pc2, 10 * 4
GlobalFree pc1
GlobalFree pc2

一例なだけだけど。
>>350
もちつけ
VB6でPictureBoxの背景を透過(Lineとかで描いた所だけ表示)とかって出来ますか?
サブクラス化してWM_EraseBkGnd無視したり、SetWindowLongでWS_EX_TRANSPARENT追加したりしたんですが、
なかなか出来ないです(´д`;)

誰かやり方解る方いたら、よろしくお願いします
353デフォルトの名無しさん:04/03/06 23:42
>>350

339のCopyMemoryの呼び出しを、
 CopyMemory ByVal pc1, ByVal pc2, 10*4
にするのが良いと思うけど。

339はうまく動かない気がするが、問題はByValかByRefなのかなので、350もおかしい。
>>352
背景をピクチャボックスにコピーしちゃダメなのか。
>>354
レイヤーみたいな感じで使いたいんです・・・
前はTransparentBltとか使ってやってたんですが、
画像サイズが大きくなるにつれて転送の処理が重くなってくるので、PictureBoxに直に描画させたかったんです
356デフォルトの名無しさん:04/03/07 00:15
352とは違うけど
PictureBox上に Lineとかで描画した結果のイメージを
そのまま印刷 もしくは 画像として保存したいのだけど
何か方法あるでしょうか?
357デフォルトの名無しさん:04/03/07 00:18
ByVal、ByRefの区別つかない人ってやっぱりまだ多いんだよね。
フォンノイマン型コンピュータの仕組みを概念的にでも知っているか、
アセンブラでコード書いたことがあれば、別にたいして理解むずかしくないんだけど
いまどきそんな実入りの少ない回り道する人いないからなあ。
>>356
BMP保存で良いなら、SavePictureで行けるんじゃない?
>>355
リージョンという手もないことはないけどお奨めしない。

UserControlの背景透過でどうにかならないかな?
>355
レイヤーにしたいんだったら見えないピクチャボックスを用意しておいて
それぞれのレイヤーの描画はそれに対して行うようにして、
表示だけ合成すればいいじゃん。

手で書くときはその表示用の奴と、見えない対応レイヤピクチャボックス
両方書き込むようにしておいて、レイや切り替えとかのときだけ合成
するようにすれば割と軽いんではないか。
>>360

一番上のレイヤーのみが変更(手で書く)の対象になるなら、それでいいだろうけど。
そうとは限らない場合が多いんじゃないか?

だからといって良い方法を思いついたわけでもないんだけど・・・

もし「手で書く」の意味が違ってたらごめん
早速のお答え感謝します。

>>359
先ほどUserControlをフォームに貼り付けて使ってみたんですが、
BackStyleを透明にするとイベントが受け取れません(ノДT)
色々やってるんですが、よくわからなかったです・・・

>>360
それでも良いんですが、下のレイヤーに描こうとすると上手く行かないんです・・・
363361:04/03/07 02:23
というか、360で書いた方法で現在実装していてそれで遅くて使い物にならない
って話なんだよね(?)。変なこと書いてごめん

とりあえず、359が書いてる方法でできないか試してみて、
だめだったら転送範囲をクリッピングようにするしかないんじゃない?
面倒くさいと思うけど
>>363
処理が速いPCではそうでも無いらしいんですが、私のPCは低スペックなもので・・・(´д`;)
とりあえず今は>>359の方法で色々やってみています。
どうしても出来なかったら転送範囲指定で・・・
リージョンはだるすぎると思うよ・・・マジで。お勧めしないけどな。

360が書いてある方法は最上面に描くのであれば普通の描画の倍の
時間しかからないわけで、そんなに遅いとは思えんけど。

途中のレイヤを編集するときも、レイヤ選択時に合成用の上レイヤ
も作成してもっておくようにすれば、合成用上レイヤのみを合成コピー
すればいいんだしそんなに重くないと思うけどなぁ・・・

・描画用バックグラウンドとレイヤピクチャボックスに描画
・描画用バックグラウンドに合成用上レイヤを合成
・必要な部分だけ描画用バックグラウンドを転送
・・・ちょっと遅いかな

リージョンができるんならいいけど、結構だるいよ。
リークとかやりがちだし。不定形リージョン作成させるのもビットマップ
解析で時間喰うと思うけどなぁ。
366361:04/03/07 02:44
あ、なるほど。
編集中より上のレイヤをあらかじめ合成しておけば速くなりますね。

勉強になりました。
>>365
なるほど、そういう事ですか・・・
後でその方法で試してみます。

今は>>359のUserControlを使う方で試してみてます。
リージョン作成の方法はまだやった事ないですね・・・
>>362
UserControlの後ろにPictureBoxでも配置してそこでイベントを拾う…



やっぱり美しくないかな
>>357
フォンノイマンコンピュータにポインタって必須だったっけか?
プログラムカウンタは文字通りカウンタで実装できるしな。


と、吊られず頑張った同志達の思いを無にするテスト。
と、言うかRADツールを使うのに低級言語を学ぶって本末転倒。
その辺は大丈夫か。
低級言語を「学ぶ」のは本末転倒じゃないよ。
RADで作れる物を作るときに低級言語を「使う」のは無駄だが。
「学ぶ」と「使う」は違う。学ぶ低級言語。使う高級言語。
>>371
手段と目的がごっちゃになってませんか?それって。
>>372
なってませんよ。
コンピュータの基礎知識を勉強するという目的には
低級言語を学ぶという手段が最適です。
>>373
その通りです。

だからと言ってVBでちゃっちゃと物作れと指示したのに、おもむろにアセンブラを勉強しだしたらあなたはキレるのでしょう?
>>374
> だからと言ってVBでちゃっちゃと物作れと指示したのに、おもむろにアセンブラを勉強しだしたらあなたはキレるのでしょう?
あたりまえでしょ?
誰がVBで仕事をする時にアセンブラを勉強しろといいましたか?
>>375
そのニュアンスで書いたのにあなたが突っかかってきたんですよ。
377375:04/03/07 11:04
>>375
そもそも、物を作るという目的が勉強する目的に変わってるしw
目的ははっきりさせないといけないよ。
勉強するのが目的のときは低級言語とか勉強する。
作るのが目的のときはVBなり適した言語で作る。
わかった?
378375:04/03/07 11:08
>>376
えっ? あなたが勉強するのも大事って流れに、
RADツール使って作れ。勉強するのは本末転倒って突っかかってきたんでしょ?
379357:04/03/07 11:56
>>369
>フォンノイマンコンピュータにポインタって必須だったっけか?
こういう疑問が出てくるのは、それこそフォンノイマンコンピュータが
概念的にすら理解されてないからでしょ。

ByVal,ByRefの意味、あるいはポインタの意味がわからないのは、
「変数」という仮想化されたもののフォンノイマン型コンピュータ上での
実体がわからないからじゃん。

まあ、「実体」なんていったって厳密にいえばどのレイヤーの話しかによって
全然ちがうんだけどさ。メモリだのアドレスだのだって電子工学的視点からいえば
仮想化の産物でしかないわけだし、固体電子工学的視点から言えばトランジスタだって
仮想化の産物なわけだけど。
VBユーザーはVBユーザーらしく
スパゲッチーコード書いてれば良いです。でダメか?(w
>>380
必要充分な速度が出て、それなりにバグ駆除してるなら、スパゲッチー
でもパスタでもいいんでないかな? 「ユーザー」にとっては「プログ
ラマ」の志向なんで正直どうでも(・∀・)イイ!!。
>>381
おまえ、会社とかで複数の人と開発する仕事するなよ。まわりが迷惑だ。
383デフォルトの名無しさん:04/03/07 17:53
ていうかVBとか使ってる限り、アンポンタンが書いてもあんまり
スパゲティで困る、ってことはないんじゃないの?

困ったクンの困るところは、

● やたらグローバルやモジュールレベル変数・フラグを使う。
● しかも命名センスがなかったり略し過ぎだったりして意味不明。
● 処理の関数への分け方が不適切。1つの関数が無意味に長かったり、
  逆にバカの1つ覚えで「関数は<絶対に>短くなければならない」と思い込んでいて
  無意味に細切れだったりする。(これがスパゲティと言えないこともないか)
● コメントがコードの直訳only。「'hogeにpiyoを代入」ってそんなのコードみりゃわかるよ。

こんな感じのがむしろ多いんじゃないかな。
>>383
経験から学ぶのもいいが、ソフトウェア工学勉強した方が近道だぞ。
385383:04/03/07 18:26
>>384
意味不明。経験から学ぶ愚者にぜひ、「ソフトウェア工学的な観点から」、
「VBとか使ってる限り、アンポンタンが書いてもあんまり スパゲティで困る
ことはない」ってのが間違いであることを解説してください。

いや、できないなら別に無理することないですよ。
でも実際、アホが書いたコード見ても「スパゲティで困る」なんて
経験はあまりないんですけどね。
この文脈では、ノイマン型コンピュータの勉強する必要も、低レベル言語の勉強する必要もないと思うけど。

ByVal・ByRefの使い方とか、Cの関数呼び出す方法なんて、MSDN読めば書いてあるんだから。

自分の使うAPI・言語(・アルゴリズム)について、きちんと勉強してればいいだけじゃん。
まあすんなり理解するには、ソフトウェア工学とか、いろいろな知識があったほうが良いに決まってるけど。
>>383
スパゲティなVBソースを見たことがないのかい…

Gotoだけじゃなくて関数の再入までついてくるともうねアボカド(ry
388デフォルトの名無しさん:04/03/07 19:40
>>380がいう「VBユーザ」ってのは、2ちゃん的にいうとVB厨だと思うんだけど、
そういう人はリカーシブコールなんてまず知らないし、知ってても使えない。

また、そういう人は、GOTOもかなりの確率で知らないか、知ってても使わない。
なぜなら、VBの入門書のかなりはGOTOは扱ってないし、書いてあってもそれは
「GOTOは使うべからず」というネガティブな紹介の仕方をしているから。
>>387
再帰が理解できないひがみ?
390380:04/03/07 21:26
えー、漏れのレスした意図は
工学とかアーキテクチャ、プログラミングスタイルにこだわるなら
C++でもJavaでも別の言語を使ったほうが良いんじゃないかと。人好き好きだけど。
あと、事態の収拾。こんな議論してたら質問する人もしないんでねぇのと。
>>390
言いたいことは分かる。その通りだ。

そんなスレでノイマンとか持ち出すアホは癌だな。癌。
VBでもプログラミングスタイルにこだわれるし、こだわるべき。
たとえこだわってない人が多いとしても、こだわらなくていいという結論にはならない。
たとえ汚く作れたとしても、汚く作っていいという結論にはならない。
再帰とか理解しなくて作れたとしても、理解しなくていいという結論にはならない。
プログラムスタイルにこだわるのなら他の言語を使うべきというこにもならない。

ただの一言語ですよ。VBは。もちろんC++もJavaもね。
言語より大事な物があるでしょ。それはどの言語でも有効だし適用すべきだよ。
>言語より大事な物があるでしょ。

その通り。

よって開発効率主義にいらんテクニックは不要。
そりゃ、「いらん」テクニックは「不要」でしょう。
「いる」テクニックは「要ります」

再帰とか(使うのなら)要るテクニックですね。
一般的な基礎知識も開発効率を上げるのに役立ちますよ。

たとえば「こんなこと」も知らないからぐちゃぐちゃになると言われるのなら
「こんなこと」は開発効率を上げるのに有効な知るべき知識でしょう。
395387:04/03/07 22:05
>>389
まともな再帰なら理解しているよ。

まともじゃないからスパゲッティなんだ…
再帰は再帰はスパゲッティ♪
再入を再帰と勘違いしている馬鹿がいるな。
>>397
マルチスレッドって使えたっけ?
汚い再帰ってなんだろう?
本来再帰を使うべきじゃないところで再帰になっているとかかな。

例えばShowMessageって関数があって引数によって
メッセージをラベルに表示、プリンタに表示、ダイアログボックスに表示
に処理をわける。そして、プリンタに表示した後に「終了しました」と
ダイアログボックスに表示したいからShowMessageを呼び出す。
ん〜。これで汚い再帰になったかな?
400デフォルトの名無しさん:04/03/07 22:23
えてして>>397みたいのが一番わかってない。
再帰的なアルゴリズムでもないのに再入が起こるようなコードがあったら、
そりゃ単なる無意味にトリッキーな冗長な処理をしているかバグだ。
>>399
論理分割?
>>400
だからマルチスレッド。
> プリンタに表示した後に「終了しました」と
> ダイアログボックスに表示したいからShowMessageを呼び出す。
この部分。ダイアログボックスに表示したいからShowMessage内で
ShowMessageをダイアログ表示の引数で呼び出す。ということね。

関数自体の仕様も変だが、(言っとくけどただの例だよ。)
本来はShowMessage呼び出し元がShowMessageをダイアログ表示の引数で
呼び出すべき。もしこれでShowMessage内でグローバル変数なんか使われていたら…

>>401
さぁ?

汚い再帰ってのが思いつかない人がいるみたいだから
例を考えてみただけ。
誰かが再帰自体がわからんと言っているわけじゃないよね。
俺が過去にやってしまった汚い再帰もそんな感じ。

MoseMoveとかでなんかやってるとうっかり2回入っちゃったりするんだよなー
>>403
上でも書いたがソフトウェア工学勉強した方が良いぞ。
>>403
>>404

なるほど、再帰と再入を取り違えてるってのがなんとなく分かった。
>>404
ああ。なんかわかる。changeイベント内で
値を修正した途端、その場でchangeイベントが発生するとか。
それ、呼び出し元が厳密には自分じゃないから再帰とは言わない気がします。

俺が言ってたマルチスレッドによる再入に近いかと。
>>405
わざと汚い例だしたのに、それに突っ込まれてもなー。
410404:04/03/07 23:36
>408
再帰とは違うのは分かってるけどさ、今このスレでの用語として「汚い再帰」があったから
それを使ったまでよ。

出まぁ汚い再帰ネタはこれぐらいでいいでしょ。まったり次の質問者をまとうや。
>>410
それでは的確に的を射た「再入」を用いるべきだったのでは?
412デフォルトの名無しさん:04/03/08 11:21
えーと、話の流れ的に解釈すると
>>407を防ぐ方法があるってことですよね。
いきなりレベル低くてすみませんがやりかた教えてください。
>>412
素人だけど、フラグ使えばいいんじゃないの?
414長島監督ガンバ!:04/03/08 16:31
Accessのフォームで競馬のデータを作っているんですが、1着から5着までの賞金が
1着=1倍
2着=0.4倍
3着=0.25倍
4着=0.15倍
5着=0.1倍
なのですが、ここで、数値の左から3桁目を四捨五入しなければなりません。
どなたかプログラムできませんか。参考にさせていただきたいと思います。
415デフォルトの名無しさん:04/03/08 16:35
VB6で、一定秒数待たせる処理をしたいです。
でもそこで空ループを使うとCPU使用率が100%になってしまって嫌です。
どうしたらいいですか?
>>415
タイマーイベントは?
>>415
Sleepでも試してみたら
418デフォルトの名無しさん:04/03/08 17:03
ADSIでIISのFTPサーバーの”説明”(既定のFTPサーバー 等の説明文)
を取得するにはどうしたらいいですか?

Dim IISObject As Object
Set IISObject = GetObject("IIS://LocalHost/msftpsvc/1/Root")
Debug.Print IISObject.Name

だと"Root"って出るだけだし、どんなプロパティやメソッドがあるのかも
よく分からないので・・・
参照設定してなくてもプロパティやメソッドが分かる方法もあれば知りたい
です。
419415:04/03/08 17:08
>>416 タイマーイベントはどうすれば良いですか?
>>417 いままでずっとそれでやってきたのですが、例えば、

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sleep2 ( 10 )

Private Sub Sleep2(Sec As Float)
  For m = 1 To sec * 100
    Sleep (10)
    DoEvents
  Next
End Sub

と。でもこの方法だと、CPU使用率が高くなると、
10秒以上かかるようになるのです。んで、

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Sleep2(Sec As Single)
  Sec = Sec * 1000
  From = GetTickCount()

  While Sec >= Diff
    Diff = GetTickCount() - From
    DoEvents
  Wend
End Sub

に変えたのですが、空ループでCPU使用率100%になって嫌でつ。。
>>414 log10
>>419
> >>416 タイマーイベントはどうすれば良いですか?

"待つ"という考え方を変えなければならないと思うけど、
タイマーイベントなら取り敢えずCPU使用率100%にはならないよ。

但し精度は厳しいかもね。

フォームにボタン一個とタイマーコントロールをを貼り付けて・・・

Private Sub Timer1_Timer()
'五秒後に終了
End
End Sub

Private Sub Command1_Click()
Timer1.Interval = 5000
End Sub
422デフォルトの名無しさん:04/03/08 21:33
ていうか、>>419の後半のコードでCPU使用率100%になんてならんと思うけど。。
そのためのDoEventsじゃん。
CPU使用率100%ってのは、他の、例えばタイマイベントかなんかで
再入が起こるような変な処理してるんじゃない?

OSがNT系だとタイマの挙動が9x系と違うよ。
派遣なんだが
VB+ASPの仕事が終わっちまった
VB.NET勉強するかな
もうちょいVB使いたいんだが、世の中の流れには勝てんかなぁ
どっかいい派遣会社ないですか(w
>>423
板違いするような馬鹿が仕事できるのか?
>>419
Sleep2の方にSleep(10)とかをはさもう。
10ミリ秒程度の誤差も気になるのなら
Sleepの引数をループの最後の一回を(もしくはその都度)微調整する。
>>422
いや。後半のコードは100%になるよ。DoEventsは他の処理に制御を渡すだけ。
他の処理がすんだらすぐに自分に帰ってくるので結局100%になる。
427長島監督ガンバ!:04/03/08 22:20
AccessVBAで競馬のデータを入力しているものからです。競馬の賞金で、
1着=賞金の1倍
2着=賞金*0.4倍
3着=賞金*0.25倍
4着=賞金*o.15倍
5着=賞金*0.1倍
で出すのですが、この後、それぞれの数値を、左から3桁目を四捨五入しなければなりません。
どうすればうまく数値が出ますか?よきアドバイスをお願いします。
参考およびコピー&ペーストさせていただきます.
どうでもいいけど、なかなかレスくれる人いないみたいです。
> どうでもいいけど、なかなかレスくれる人いないみたいです。
名前が悪いんじゃない?
429デフォルトの名無しさん:04/03/08 22:28
>>427
log10ってレスしてくれてる人いるじゃん。
log10って聞いてピンとこないならそういう処理は諦めたほうがよくない?

まあ、対数とらなくてもやる方法はあるけど、この程度のこと人に聞くような
奴には無理。
430422:04/03/08 22:36
>>426
やってみたけどやっぱりならないよ。
232C使った通信で、相手からの応答待ちでよくこの手のコード書いてたけど、
そんな問題が起こったことは今まで一度もないし。
431よこからすまん:04/03/08 22:41
VBAではなりました(ほぼ100%)(pen1GHz)
>>430
後半のコードだぞ。なるって。ちゃんとやってみ。
あ〜。そういや9x系だとバグかなんかでCPU使用率を
正確に取得するのができないとか難しいとかあったような。
>>424
一応、VB情報かなぁって
VBの現状とかあんまないんだよね
仕事でやってるってやつはあんま書き込まんのだろうけど

まぁ日曜大工程度の仕事しかできないんですがね
>433
ホームラン級のバカだな。
プログラマー板にでも行ってこいよ。
>>432
 あのコード、確かにタスクマネージャーに表示される
数値は100%になるのだけれども、他のアプリケーションを
動かしてみるとその動作が重くならないのに気付く筈。
 100%と言っても、CPUにはかなりの余力がある状態なので
処理能力を使い切っている訳ではないです。
後半のコードにSleep10はさむでOKでしょ。

>>427
左から三桁目とか訳わからんよ。
123456678 とかあったら 123000000 にしたいって事かね?

桁数数えて1000000でわって小数点以下を切り捨てて、またかけたらダメなの?
桁数はLog10で求まるけどまぁ何やって求めても問題ない。
VB5でオーナーフォームを指定できるようになる以前、VB2や4で
同じことをする方法があったはずなんですが忘れてしまいました。
SetWindowPosとかの「常に手前に表示」じゃなくて、VB5のShowと
同じ効果のやつです。
たしかSetWindowLongじゃないかと思ってかなり探したのですが
みつかりません。ちゃんとForm_Unloadでオーナー指定解除しないと
バグるとかは覚えてるのですが・・・。
誰か知って(覚えて)ますか?
>>435
処理能力を使い切っているよ。
他の動作が遅くなったように感じないのは
他の動作に適切にCPUが割り振られているからなだけ。
CPUの温度とか計測したら分かる。
>>438
違う
CPUのあまった時間をVBプログラムが使っているだけ
温度が下がらないのはCPUのHOLTなどがきかないため
440422:04/03/08 23:34
>他の動作に適切にCPUが割り振られているからなだけ。
そういうの、「使いきってる」っていわないでしょ、だから。
441デフォルトの名無しさん:04/03/08 23:35
環境
VB6.0 SP5
Windows98
標準FormにMSCommを1つ貼り付けて
MSCommを用いてRS232C通信をしようとしています。
CommPort=1
setting="9600,n,8,1"
RTSEnable=true
Rthreshold=1
InputLen=0
InputMode=comInputModeText
PortOpen=true
上記のように設定して、後はOnCommで待っています。
何もしなければ受信もできます。
が、OnCommに来る前にFormをドラッグすると、
100%固まってしまいます。
OnCommの頭にDoEventsを入れると、
スタックエラーと表示されます。
MSCommが受信しようとしているにもかかわらず、
ドラッグして処理をとめているために、
固まるのではないかと思うのですが、
解決策が思いつきません。
ActiveX.DLLにMSComm受信処理を逃がしても
症状変わりません。
WindowsXPでも試してみたのですが、
同様の症状は見られず。ドラッグもできますし、
正常に受信しています。
Windows98の場合、何かしなければならないことがあるのでしょうか?
よろしくお願いします。
あまった時間ってのは優先度が一番低いやつ。
NT系だったらSystem Idle Processが使う。
VBがCPUを100%使っているのは確かだよ。
>>440
でもCPUを100%使っているとは言いますよね?
現にCPU使用率が100%になっているのですから。
444422:04/03/08 23:50
>>443
Windowsのマルチタスクの仕組みでも何かで読んでもらったほうがいいかも。
ていうか、普通1コしかないCPU本当に占有してるんだったら他に何も
できないことは常識でもわかると思うけど。

>>441
対策1:NT系のOS使いましょう。ドラッグしてもOnCommきまっせ。

対策2:OnCommイベントなんて使うの止めましょう。パケット長固定で
受信するとかでなければ、OnComm使う意味なんて全然ないです。
どのみちWinでリアルタイム処理なんてできないんだから。受信バッファ
ちょっと多めに取って、タイマイベントなんかでRead入れましょう。
つーか、実際あのコードでCPU使用率を100%にすると他のアプリ遅くなるけどな。
感じないだけで。そもそも、Do:Loop (無限ループ)を実行したって
他のアプリは遅くなったように感じない。

遅くなったと感じるのは処理を期待した実行時間で処理できなかったときだけさ。
他のアプリが遅くならないから問題ないと思っているのなら書き直したほうがいい。
>>444
なにが問題なのか分かってないの? マルチタスクなんだからCPUを
完全に占有しないのはあたりまえ。誰もそんなこと問題にしていない。
問題なのは不必要にCPUを使用すること。
そんなコード書かなきゃいいじゃん
>>422
通常NT系のはCPUはCPU能力があまっているときはHALT命令を実行して休んでいます。
動画を見たりゲームをしている場合以外はCPU能力はあまっているので、
HALT命令を実行して休んでいます。もちろん小さい間隔で休んでいるので
人間は休んでいると気が付きません。

しかしあのコードを実行するとCPUが休まなくなります。
これは分かりますよね? これが望ましい動作だと思いますか?
このときのことを一般的にCPU使用率が100%といって避けようとしているのです。

>>447
その通り。こうやってループして何かを待つことをビジーウェイトというね。
一般的に代替方法があるのなら他の方法でやるべき。
タイマーコントロールとか使うのが良いけど、正確さを求めるのが難しいからね。
そもそもWindows環境で期待できる精度なんてたかがしれているし。
質問人はどの程度を期待しているんだろう?
450デフォルトの名無しさん:04/03/09 00:12
すみません、質問させてください。
VS-FlexGridを使った画面を作っています。
セルをドロップダウンリストのようにして
データ抽出したいのですが、方法がわかりません。
どなたか親切な方、教えてください。
451デフォルトの名無しさん:04/03/09 00:24
デストリビューションウィザードではなくてVisualStudioInstallerを
使いたいと思って、マイクロソフトのサイトからダウンロードしてみたのですが、
難易度が段違いでどう使って良いのかさっぱり分かりません。
ていうか、デストリビューションウィザードも単にウィザードの赴くままにしか
使えない体たらくですけど・・・

やりたいことは単純で、たった一つのプロジェクトのインストーラーを
作りたいだけなのですが、その際にプログラムのショートカットを
スタートメニューのプログラムの方に持っていきたいのですが、
どうやって良いのかさっぱり分からなくて、教えて頂けないかなと思いまして。

VSInstaller使うのはターゲットマシンにXPがあり、デストリビューションウィザードでは
XPでは相性が悪いようなのですね。
>>452
Thanks! 助かりました。Dobonのページは知っていたのですけど載ってたとは。
しかし、なかなか大変そうですねぇ、VSIって。
454441:04/03/09 07:31
>444
使う環境がWindows98から変更できないのです。
対策2もやってみました。
バッファを10500程度とって、Timerこんぽーねんとで
ポーリングしてみましたが、だめでした。
同じように固まってしまいます。
ポーリングのときもRthreshold=1にして、OnCommは無処理にして
TimerでEventを監視してやるようにしているんですが、
これが間違ってるのでしょうか。
昔の人はどうしていたんだろう・・・
>>454
こんなの発見。検証はしてないけど。
これも違う症状だが98でおかしく2000なら問題なしと書いてある。
これと同じくバッファを1バイトにしてみれば直ったりして。
http://d.hatena.ne.jp/nanashi666/200311

> 昔の人はどうしていたんだろう・・・
自分はPDQComm(有料。MSCommはPDQCommのお試し版?)を使った。
バッファをどうしていたかは忘れた。
PDQCommにソースコード付きのモジュールが入っていたんだが
それがバグありで苦労した。
USBのハードウェア(認識キーやその他のデバイス)が
デバイスマネージャで認識されているかチェックする方法ってあるのでしょうか?
認識されていたらtrueでなければfalse等・・・

よろしくお願いしますm(__)m
457412 :04/03/09 09:17
スレすすんでるなあ・・・今更ですが、
>>413 それはstaticのフラグをchangeイベント内に用意してうんぬんってやつですよね。
それだとイベント内の「処理」は飛ばせるけどイベントの発生は抑えられないですよね。
>>407読んで、イベントの発生自体を回避する方法があるのかと思ったんで。
今度社内で開発でよく使う手法をActiveX.dllにまとめようという意見が
出たのですが(Cの開発者が社内にいないのでDllファイルは作成不能)
DLL化することのデメリットは何があるでしょう?DLL HELLは聞いた事は
あるのですがそれ以外に重要な物は何かありますか。宜しくお願いします。
>>458
DLL HELLのみだ。重要な物は。

広い意味でな。
>>458
自社の専用DLLならHELLするのも自分次第だろ?w
自社のバージョン違いがだめなんてのは、自己管理責任。減るの意味がわかってるのかと。

で、ActiveX DLLは普通のDLLと若干イメージが違うので注意してください。
461415:04/03/09 18:30
1日たったらいろんな書き込みが。

結局ループの中に Sleep 10 を入れました。
これがいいのか悪いのかわかりませんが。

>>449 いま簡易マクロ言語を使うアプリケーションを書いていて、

SLEEP 10.5

で10.5秒、そのプロセスが停止するようにしたかったんです。
でも Sleep 使うと、例えばそのプロセスと同時にリネージュ2なんか
立ち上げるとどんどんずれていくんですよね。。
で、いまは後者のコードで、

While Sec >= Diff = GetTickCount() - From
  Sleep 10
  DoEvents
Wend

Sleep 0 じゃ駄目な
462422:04/03/09 19:21
>>454
>ポーリングのときもRthreshold=1にして、OnCommは無処理にして
ポーリングするんだからRthreshold設定する意味ないかと。
Rthreshold=1だと、空っぽだろうが何だろうがイベントハンドラ(OnComm)
残ってたらなんか受信するごとにいちいちコールされるんじゃないかな?

でもどんなスペックのPC使ってるかわからないけど、今時のPCが
その程度のイベントの連鎖で「固まる」かなあ。。

なんかMSCOMMと無関係なところで他におかしなことしてる気もするけど。
463454:04/03/09 22:18
>>455
>PDQComm(有料
有料だけど、ナイスなツールがあったのですか。
今回の件でVCでMSCommExみたいなものを作ろうかと思いました。ハァ
リンク先も読ませていただきました。
1バイトで受信すると、受信データを逃してしまいました。
ちょっと違ったようですが、大変ためになりました。

>>462
設定0で大丈夫ですか。
PentiumIIIでクロックは不明ですが。
メモリーが64Mです。
ActiveX.DLLを2つ使っているので、
そこらへんも怪しいといえば怪しいのですが、
これも、サンプル読みまくって、
手続き間違えていないように思えますし。。。

結局FormのBorderStyleを0にして、触れないように、、、
だめだめな俺仕様です。(グスン
他の問題点も探して見ます。ありがとうございました。
464デフォルトの名無しさん:04/03/09 22:22
すみません、作成したアプリケーションが
使用しているDll,Ocxを調べる方法ってあるのでしょうか?
>>464
いろいろあるけど、あえてこれ。
Dependency Walker
ttp://www.dependencywalker.com/
466464:04/03/09 22:48
>>465
どうもです!
早速試してみます。
現在、ランチャーのようなものを作成しているのですが、
システムに常駐して特定のキー(Ctrl + Alt + F12等)を感知して動作するようにするためには
どのようにすればよいでしょうか?
ホットキー VB ぐらいで検索すべし
>>456
の方法知っている勇者キボンヌm(__)m
ちょっとListViewコントロールでお尋ねしたい事が。
表示がreportの状態で自分の好きなようにソートしたいのですが出来るでしょうか?
例えば大、中、小でソートすると小、大、中になってしまいます。
自分なりにやってみた事は大、中、小それぞれに番号をつけて幅0の列を作りその番号を幅0の列に入力。
それでその列でソートしてみたんですが上の列タイトルを動かすと番号が出てきますし。
やはりこちらでソートしてaddで一つづつ加えていくしかないでしょうか?
471デフォルトの名無しさん:04/03/10 12:32
>>469
WinDDK手に入れて(わたしゃWin2k DDKしか知らないけど)
サンプルコードのUSB View(微妙に名前ちがったかも)を解析しる。

これだけは言える。
こんなところで「こうすればできる」、なんて簡単に言えるような、
お手軽にはいかないのは確か。
472デフォルトの名無しさん:04/03/10 12:43
マイクロ社によると、VB6の後継版(ネイティブ実行)が計画されているみたいだね。
>>471 そこまでしなくてもHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB以下を調べれば
>>470
ソート後、ソート用の列を削除すればいい。
アイコン表示、自動整列のリストビューでアイコンをドラッグして左上に持っていくと、
リストビュー内の表示位置がズレてしまうんですが、回避、もしくは表示位置を手動で設定する方法ってありますでしょうか?
>>473
それは正式な調べ方なのか?
仕様書はちゃんと存在するのか?
将来のWindowsで変更されたりしないのか?
たまたまそれっぽいのが見つかっただけじゃないのか?
>>472
ネタだとしても、.NETが出た今、言語仕様、どーすんだろ。
>>476 OSのバージョン毎に対応するに決まっている その点はDDK使っても似たようなものだし
VB6で、

Dim sHoge As String
sHoge = "1"

If sHoge = 1 Then
MsgBox "OK"
End If

この書き方でメッセージボックスが表示される・・・・
おかしくねーか?

文字と数値を一緒にするなと言いたい。
>>479
数値はオブジェクトであり、文字との比較の場合
内部でtoString()が呼ばれるだけ。
演算子のオーバーロードってやつだ。
気にするな。
ん? それは.net?
482デフォルトの名無しさん:04/03/10 16:59
ADO2.6 + OraOLEDBでOracleに繋いで、ADODB.CommandとParameter使ってINSERTしてるんですが、
NULL許可のフィールドに対して明示的にNULLを挿入する場合って、
何か特別なパラメータとか与える必要があるんでしょうか。

Command.CreateParameter()のValueにNullを渡してCommand.Executeすると、
OracleのプロバイダがOra-01036(変数の名前/数が無効)のエラーを返してきます。
プロバイダがいかんのかとMSDAORAに変えてみたらアクセス違反で落ちるし。
空文字列渡したらOracle仕様でNullが入ってくれるっぽいんですが、なんか気持ち悪い……。
DBNullは.NETにしか無いし。
VBの推薦図書を教えてください
484デフォルトの名無しさん:04/03/10 18:41
>>473
そんなとこ見ても>>456が要求しているような情報は得られないと思うけど。
485479:04/03/10 20:46
>>480
VB6にはtoString()は無いと思うが・・・

作成者以外の人がソース見たときに
混乱を招くような書き方はやめてほしいな。
漏れだったらこんな書き方は絶対しないな。


>>481
漏れもそう思った。
.netでもこの方法が使えるのか?
まあ.netなら480の発言に納得。


VB6ってオブジェクト指向っぽい言語で、
オブジェクト指向ではないという認識を持ってるが
それは間違いなのだろうか?
486470:04/03/10 21:00
>>474
その方法で試したところ、
苦戦しましたが何とかできました。有難うございました。
失礼します。
PC起動時にスタートアップに登録しておいてEXEを起動してタスクトレイに
格納するようにしています。
フォームはHideして隠しておき、タスクトレイ上でクリック、又はデスクトップ上の
アイコンダブルクリックでフォームをShowする処理を作りたいと思っています。
タスクトレイに格納されている間は常にバックで通信をしています。

で、タスクトレイに格納、タスクトレイクリックでフォームをShowはできるのですが
アイコンダブルクリックでもShowというのができず困っています。

App.PrevInstanceですでにEXEが立ち上がっていることを確認した後フォームを
Showしても二重起動の状態になってしまいますし、どうしたらいいのか分かりません。

どなたかアドバイスがありましたらお願いします。
488482:04/03/10 21:06
>>482 の補足です。

いろいろやってみた結果、エラーが発生するのはCommand.Execute()の第二引数に
Parameterの配列を渡して呼ぶ場合のみでした。
Command.ParametersにAppend()した上で、引数なしでExecute()すると正常に動作します。

とりあえず再現する最低限のコードです。

Dim objCmd As New ADODB.Command
Set objCmd.ActiveConnection = objCon ' objConは接続済み
objCmd.CommandText = _
"INSERT INTO SOME_TBL(P_KEY, SOME_DATA)" & _
" VALUES(:P_KEY, :SOME_DATA)"
Dim params As Variant
params = Array( _
objCmd.CreateParameter("P_KEY", adVarWChar, , 9, strPrimaryKey), _
objCmd.CreateParameter("SOME_DATA", adVarWChar, , 1, Null)) ' ここのNullが"0"とかだとうまくいく
Call objCmd.Execute(, params)

おとなしくAppend()しろってことかしらん……。
>>485
 暗黙の型変換がVB6.0までの有名な仕様ですね。
 混乱以前に、この暗黙の型変換に頼っていると思わぬ所で
思わぬ型に変換されて、エラーが出る事もあるので、トラブルを
避けるなら明示的に変換するなり、型を合わせておくのが当然だと。
 良くあるのが、整数型に長整数型を代入する形になって
オーバーフローエラーとかだったかな。
 絶対しないのが正しいし、それが当然です・・・
>>487
俺はDDEで通信して先に起動していた奴に情報を送った後、
後で起動したほうを自殺させてるよ。
VB6.0では確か
msgbox 1000*1000
ってやったらエラーがでたはず。

>>485
toStringはあの.netの中間言語の話だねたぶん。
VB6で MsgBox ("12" > "2") & ("12" > 2) & (12 > 2) すると
False,True,True
むしろ数値に変換される(リファレンスの比較演算子の項に書いてあるが)
へぇ〜

495デフォルトの名無しさん:04/03/10 22:13
>>494みたいに鬼の首とったようにズレたこと書く人って恥ずかしいな。
まーFindWindowを使ってSendMessageと言う通知手段もあるしな
497487:04/03/10 22:49
>>490>>494

頂いたアドバイスを参考に調べてみようと思います。
ありがとうございました。
>>495
うん、鬼の首をとったように書く奴は結構いるけどな(w
499デフォルトの名無しさん:04/03/11 11:31
VB6使用者です。VBAのDLOOKUP関数のような関数は存在しないでしょうか?
ヘルプで探してみたんですが見つかりませんでした。いちいちDBにSQL文を
使ってアクセスしていると時間が多くかかってしまいます。
DLOOKUPの方が遅いと思うが?
501デフォルトの名無しさん:04/03/11 11:42
>500
そうだったんですか。現在自作の関数で引数にIDを使い、そのIDでSQL文を
使ってデータを引っ張ると言う事をやっているんですが上司に遅さが気にな
ると言われ何とか早くする方法を探しているところなんです
>>501
SQL文、ライブラリの設定、データベース側の
問題である可能性が大きいだろうな。

使っているライブラリ(DAO、ADO等)はなんなのか、
データベースサーバーはなんなのか、どういうSQL文なのか、
IDはちゃんとキーになっているのか、
そもそもネットワークが激遅なんじゃないのか、とかが気になるな。
503502:04/03/11 12:03
> IDはちゃんとキーになっているのか、
インデックスはちゃんとついているのか? と言うべきだったか?
なんせデータベースがらみから2年ばっかり離れているので忘れている。
504デフォルトの名無しさん:04/03/11 12:52
>502
インデックスはちゃんと付けています。DBはオラクルです。
SQL文なんですが
"Select * From 得意先 Where 番号 = '" & CODE & "' "
こんな感じで書きました。
>>504
*は良くない、いらないフィールドは取得しない。

番号って文字型だよね、数値だったりしたらORACLEさんが勝手に変換はするけど遅くなるよ。
(数値文字変換が計算結果となるためにインデックスが利用されなくなる)
506デフォルトの名無しさん:04/03/11 13:17
>505
ありがとうございました。早速作り変えてみようと思います。
507デフォルトの名無しさん:04/03/11 13:28
教えてください。

String型の配列をVariant型配列に簡単に変更することはできないでしょうか?
具体的には、Split関数で取得した配列が、String型配列で、
その配列をADOのAddNew関数の引数として使用したいのです。
AddNewの引数は、Variant型配列じゃないとダメみたいなのです。
単純に、CVar(Arr1) とやっても変換できませんでした。
ループで1つずつ代入するしか方法はないでしょうか?
String型とVariant型のメモリ配列ってどんなだったかな?
互換性があるのならAPIがあったり、メモリの型情報を
直接書き換えて・・・なんてやってできるわけ無いだろうな。
Variant型って中で型を保持してるだけだから
Variant型配列作ってString型配列から一つづつ入れてけばいいんじゃ?
一括ってできたっけ?
処理速度的にはSplit自作の方が早いかもね。
511507:04/03/11 16:26
そうすることにしました。
皆様ありがとうございました。
最初Split自作したのですが、配列変換の方が汎用性があると思い、
単純に配列の型を変換する関数を書きました。
>>331と同じエラーです。
なぜでしょう
513デフォルトの名無しさん:04/03/11 17:08
VB6SP5でPGをしているのですが、テキストボックスなどを動的に生成したいです。
それもオブジェクトを配列化で宣言したのですが、
VB6ではそれが可能でしょうか??
>>513
可能。
515デフォルトの名無しさん:04/03/11 17:40
>514
それは、Controls.Addを使う事?
処理内容は同じだから配列化にして処理を行いたいんだけど
どうすればよいのでしょうか??

すみませんがお教えください。
516デフォルトの名無しさん:04/03/11 17:49

今度の仕事先でVB6.0+DBで仕事するというので、
データベースの勉強してるんですけど、
「VB逆引き大全500の極意」で

Set rst2 = New ADODB.Recordset
rst2!社員名 = rst1!氏名

といったソースがあるんですが、この!マークってのは
どういう意味なんですか? VB自体、勉強始めたばかり
なんですが、こういう演算子はないみたいだし。

他にも
Dim namae As String
namae = ![受注コード]
なんてのもあるんですが。

やっぱちゃんとした本で勉強しなきゃ駄目かな?
517512:04/03/11 17:49
解決しますた。

Cに数値を入力する。
if C>=50 then
ABC.Text="aaa"
End if

50以上の数値を入力してもテキストボックスに表示されません。
(Cに数値が格納できていない)

誰か親切でエロイ方へるぷ
518デフォルトの名無しさん:04/03/11 17:53
>517
C の型は?まさかStringではないでしょうねぇ?
>516
rst("フィールド名") or rst.Fields("フィールド名")
って書き方と同じ意味合いだが、!を使うのは推奨されていなかったキヲク。
理由は忘れた。

520517:04/03/11 18:13
すいません、自分まじ初心者です。

Stringって何ですか?
>>519
どもども。なるほど。
>>515
あのだな・・・・
「controls add vb」でググると、一発目にまんまのソースが出てくるわけだが。
もうちょっと調べ方を身につけよう (´-ω-`)
523517:04/03/11 18:29
Dim C As Integer

If C <> 0 Then
ABC(0).Text = "aaa": SWN(0) = "bbb"
Else ABC(0).Text = "bbb"
End If

Cというテキストボックスに何を入力してもbbbになります
524517:04/03/11 18:30
>>523ミス

Dim C As Integer

If C <> 0 Then
ABC(0).Text = "aaa"
Else ABC(0).Text = "bbb"
End If
525デフォルトの名無しさん:04/03/11 18:31
>520
初心者以前の問題かと・・・・。
526デフォルトの名無しさん:04/03/11 18:44
>515
いやいや、イベントを拾うならWithEventsで宣言しなきゃだけど、
配列は宣言できないジャン。それでほか方法ではできないかと質問したわけざんす。
おとなしく一つのオブジェクトをつくって、Loadして増やします。
527デフォルトの名無しさん:04/03/11 18:45
>524
変数Cにはどうやってテキストボックスの値を入れているの?
C = CInt(テキストボックス.Text)
を追加してみれさ。
Form1!Text1.Text なんて書き方もあったな。
いや、なんとなく思いだしただけ。
529デフォルトの名無しさん:04/03/11 19:58
質問があります。

WebBrowserコントロールを使ってるんですけど、他のコントロールがWebBrowserにフォーカスを奪われてしまいます。
どうしたらよいでしょうか。
>>526
そんなことが一体元質問のどこに?
検索の仕方以前に、質問の仕方も勉強しようね (´-ω-`)
531デフォルトの名無しさん:04/03/11 21:06
>530
はぁ!?
あの質問内容で十分わかるだろ?
イベントを拾わないオブジェクトは何するのさ?
それもテキストボックスとかいてあるじゃん?

お前も少しは頭を回せや
>>531
イベントを拾う必要のないコントロールなど

 く  さ  る  ほ  ど  あ  る

おまいのテキストボックスには 必 ず イベント処理があるのか?w
クラッシュミーアドレスとはなんでしょうか?
ブラクラもどきで使われるそうですが
>>533
クラッシュミーをアルファベットに直してぐぐれ
535 :04/03/11 22:21
質問させてください。

リストボックスを右クリックしたときに
右クリックメニューを表示して
選択行の削除などを行いたいのですが

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button <> 2 Then
Exit Sub
End If

PopupMenu IDMStart, vbPopupMenuRightButton

End Sub

では行が選択されずにポップアップだけが表示されます。
(どの行に対して削除を行うのかがわかりにくいので・・・)

リストを選択しつつ、ポップアップを表示するいい方法はありませんか?
>>531
配列で宣言したいって時点でおいらもイベント処理はしないもんだと思ったよ・・・(^^;
配列に拘るならフォームにイベントハンドラのインターフェースを持たせるやり方はどう?


---- クラスモジュール cMyClass
Private mEventHandler As IMyClassEvent
Private mIndex As Long
Private WithEvents mText As TextBox
Public Sub Create(ByRef Frm As Form, ByRef EventHandler As IMyClassEvent, ByVal Index As Long)
  Set mText = Frm.Controls.Add("VB.TextBox", "MyClassTextBox" + Format$(Index))
  With mText
    .Move 0, .Height * Index
    .Visible = True
  End With
  Set mEventHandler = EventHandler
  mIndex = Index
End Sub
Public Property Get TextBox() As TextBox
  Set TextBox = mText
End Property
Private Sub mText_Change()
  mEventHandler.OnChange mIndex
End Sub
つづき

---- クラスモジュール IMyClassEvent
Public Sub OnChange(ByVal Index As Long)

End Sub

---- フォームモジュール Form1
Implements IMyClassEvent
Private mTexts(3) As cMyClass
Private Sub Form_Load()
  Dim x As Long
  For x = 0 To 3
    Set mTexts(x) = New cMyClass
    mTexts(x).Create Me, Me, x
    mTexts(x).TextBox.Text = Format$(x)
  Next
End Sub

Private Sub IMyClassEvent_OnChange(ByVal Index As Long)
  Debug.Print "Change! "; Index
End Sub
>>535
ポップアップメニューは MouseUp で出すものだと思うの。
リストを選択→ポップアップを表示 なんだから。
539535:04/03/11 23:19
>>538
言われてみればその通りですね。
気がつきました。
ありがとうございます。
>>536
あんたやさしいな。531みたいな書き方されたらぶちきれるけどな。
541535:04/03/12 13:19
すいません535ですが、今試してみたのですが
List1_MouseUpでやっても
リスト選択 → ポップアップメニュー
にはなりません。 (右クリック時のみポップアップを表示したいのです)
何かいい方法は無いでしょうか。
>>541

なるほど、右クリックだけで選択とポップアップの二つを同時にやりたい訳か。
或いは、マウス移動だけでその位置の行が選択されているってのでも良いか。

ふーん・・・・・オレには分からん(;´Д`)
>>541
SendMessageで左クリックを送って、、、とか
544デフォルトの名無しさん:04/03/12 18:37
VBを終了するとき、下のようなエラーが出るんですけどわかりますか?
よろしくお願いします。 m(_ _)m
      ↓     ↓     ↓

vb6.exe - アプリケーションエラー

"0x0044f7cd" の命令が "0x00000038" のメモリを参照しました。
メモリが "read" になることはできませんでした。
545デフォルトの名無しさん:04/03/12 20:08
ListViewコントロールのListItemの最大数っていくつですか?
詳細表示にしてデータベースのテーブル表示に使おうと思ってるんですが、
表示のリミットつけておかないとやばいですよね?
>>544
使っているDLLがオーバーランしてるとか。
自作のDLLが原因か、API使って何かしてるところ(CopyMemory使ってるところとか)が怪しい。
547デフォルトの名無しさん:04/03/12 20:40

VB6のエディタって、「アンカー」は使えないんですっけ?
VB.NETだとアンカーでテキストボックスなんかのサイズを
ウインドウの大きさに合わせて変更できるんですが。
VB6だと自分で処理するんでしょうか?

548544:04/03/12 20:49
>>546
お返事、ありがとうございます。

プログラムをコンパイル実行したら、必ずなんです(涙)

VB6SP5、SPREAD6.0、DataEnvironment、AccessのMDBを使ってます。

以前、アクセスのテーブル名に、-(ハイフン)を入れてるだけで
エラーが出たことはあったんですけど、今回は全く思い当たる
ところがなく困っています。
549デフォルトの名無しさん:04/03/12 21:19
テキストボックスに名前を入れて変換したらもう一つのテキストボックスに
変換する前の名前が半角かなになって自動的に入れることができる
機能を作ろうとしているんだけどできるかな?(アクセスにある機能)
ヒントでも誰か教えて
>>472
詳細キボンヌ
>>548
あれこれ悩むよりVBを再インストしたほうが早いと思う。
>>549
IMEクラスがどうとか・・・あったような・・・
http://nienie.com/~masapico/api_sample_ime01_c.html
この辺をヒントにできそうかな?

>>547
できない。自分でやるべし。

>>545
メモリが尽きるまで。
AddItemのラッパでも作るか
DTPickerコントロールでCheckBoxをTrueにすると、
Valueプロパティに日付を返すか返さないからをユーザーがチェックボックスで選べるようになりますよね。
このチェックの状態をコードで変更するには、どう弄くったらいいですか。
554デフォルトの名無しさん:04/03/12 23:05
切り捨てのやり方を教えてくれませんか?
>>551
「OSから」ですな。

>>549
ガリバーさんの著書のどれかにあったと思う。
 http://www.galliver.co.jp/book/vb300ac/
 「269{初} フリガナを取得する」ですね。
>>554 思い切り振りかぶるのがコツ

─‐────────────‐────────‐∧_∧ ───‐──―
─────‐∧ ∧,〜 ────────────‐(; ´Д`) ────―─‐
──−──‐( (⌒ ̄ `ヽ───_ ───────‐ /    /─―./ヽ────
──―───‐\  \ `ー'"´, -'⌒ヽ──────‐| |  ../ ‐─‐/ | | ───
―‐――──‐ /∠_,ノ    _/_───‐―──―─‐| |  /─―/ | |―───
─────‐ /( ノ ヽ、_/´  \―────‐──‐∪ ./──,イ ∪ ───
────‐ 、( 'ノ(     く     `ヽ、 ―────―‐| /−─/|| | ──−─
───‐‐/` ―\____>\___ノ ──────‐|/──/ || | ────‐
───/───―‐/__〉.───`、__>.―‐―───‐─―‐| || | ────
──/──‐──────────────―−───‐(_)_)───
─/────────−────────────‐─────────
557デフォルトの名無しさん:04/03/13 00:03
>>551,555
そういう問題じゃなかろう。
>>548のいう症状からして、VBやOSに起因する問題とは考え難い。
>>544
うちのWord2000も終了するとき同じエラー出るよ
気にすんな(違
>>558
そうそう。
うちのPC(XP)なんてOS起動時になんか落ちたっていうダイアログがでてたけど、
気にしなければぜんぜん問題なかったぞ(w
560553:04/03/13 00:46
自己解決しました。
DTPicker.Value=Nullってやったらチェックオフ、
Data変数の値をぶち込むとチェックオンになりました。
561553:04/03/13 00:47
Dataじゃない、Date。
562デフォルトの名無しさん:04/03/13 13:54
>>549
>>552
ありがとうごさいます。
アクセスの機能にそういのがあるみたいです。
今アクセスからVBに移植しているので
VBにそのような機能がないかなと思っています。
C言語ですか・・・・あまりやりたくないので(w
VB.NETはどうかな?
コンソールアプリを終了したいんだが、

ID = FindWindow(vbNullString,"dosdos")
ret = TerminateProcess(ID, 0&)

で終了されない。どこが間違っていますか?

ちなみに
ID = FindWindow(vbNullString,"dosdos")
ret = PostMessage(ID, WM_CLOSE,0&,0&) 
だとウィンドウを強制終了することは(ry の
DOSのお決まりのダイアログが出ているので
ハンドル取得自体は間違っていないとおもわれます。
564デフォルトの名無しさん:04/03/13 14:39
Visual Studio 6.0 Service Pack 6 まもなくリリース
http://www3.tok2.com/home2/itatisan/cgi-bin/src/itachi0965.jpg
565デフォルトの名無しさん:04/03/13 15:03
itatisanって。。。
高校生のガキならまあまだ理解できるが、こういうことするのはえてして
20過ぎのhikkieだったりするんだろうな。何か哀れ。
566デフォルトの名無しさん:04/03/13 15:36
こういうことってどういうことよ
567デフォルトの名無しさん:04/03/13 16:28
568デフォルトの名無しさん:04/03/13 17:26
質問なのですが
テキストボックスに
text1.text=rs.fields(1).value
で値を入れるときNULLは入れことができませんよね?
みなさんはIF文で判断していますか?
IF ISNULL(RS.FILEDS(1).VALUE) THEN
TEXT1.TEXT=""
END IF
30個もあるなら結構汚らしいコードになるんですが
なんかいい関数か方法はないですかね

>>568
関数作ればいいじゃん。
570デフォルトの名無しさん:04/03/13 18:21
前に再入の話題が挙がってましたが、例えばテキストボックスのChangeイベントの中で、
Textプロパティの内容を受け取って数秒かかるような処理をするコードを書くとき、どうすればよいのでしょうか。
こんなかんぢ:
  Private Sub Text1_Change()
    Call func1(Text1.Text)
  End Sub
  Private Sub func1(ByVal strValue As String)
    List1.Clear
    Do
      '(List1.AddItem foo)
      DoEvents
    Loop
  End Sub
こーゆーケースだと、新しくfunc1を呼ぶ前に前のfunc1をアボートさせるべきだと思いますが、
一行ごとにフラグチェック->Exit Subみたいなのを挿入しなければならないのでしょうか。
571デフォルトの名無しさん:04/03/13 18:36
すいません
どんなふうにですか?
関数使ってもできないような
>>571は偽物のような気がする。
>>571

Private Function Func(Src As String) As String
 IF ISNULL(RS.FILEDS(1).VALUE) THEN
  Func = ""
 EL SE
  Func = Src
 END IF
End Function


text1.text=Func(rs.fields(1).value)

とか。
>>571
何を目論んでるのか知らないが
For i = 0 to 29
Text1(i).Text=IIf(ISNULL(RS.FILEDS(i).VALUE),"",RS.FILEDS(i).VALUE)
Next i
みたいなのがやりたいたいわけか?
>>574
=(RS(i) & vbNullString)
 と文字列と連結するとNULL値が空文字に自動変換される
癖を利用する物と思ったが。
 VB.NETではエラーになるので悪い例ではあるが。
>>562
 VB.NETでも同じ。
 APIを使ったコーディングが嫌なら、InputMan等の
市販のコンポーネントを買うか、フリーウェアや
シェアウェアのライブラリを探す事ですね。
577デフォルトの名無しさん:04/03/13 22:23
>>571
>>何を目論んでるのか知らないが
>>For i = 0 to 29
>>Text1(i).Text=IIf(ISNULL(RS.FILEDS(i).VALUE),"",RS.FILEDS(i).VALUE)
>>Next i
>>みたいなのがやりたいたいわけか
そうです。IIF忘れていますた。
しかし、パフォーマンスがかなり悪いと聞いたことがあります
>>576
しかたないですね。あきらめます。
厨な質問ですいません。

HPで公開している、例えば気象情報を定期的にDLして
DBに読み込みたいのですが、DLして該当部分からデータを切り出すくらいしか思いつきません。
なにか上手い方法ってあります?
SP6でトナー設定が繁栄されるといいな
580デフォルトの名無しさん:04/03/13 23:38
>577
やりたいことは、AccessのNZ関数なんかが要求する仕様にもっとも近いので、わたしがおなじことをやるときははMyNZ関数を自作してます。

MyNZ関数の仕様
 INPUT:
第1引数 フィールドオブジェクト
第2引数 フィールドの値がNULLの場合の返り値(オプショナル)
 OUTPUT:フィールドの値(NULLなら"" or 第2引数の値を返す)

昔のことなのであまり記憶に無いですがこんなかんじ
581デフォルトの名無しさん:04/03/13 23:54
>578
言語が何でもよければ、
1)EXCELのWEBクエリ機能を利用してEXCELにWEBデータを必要部分のみ取り込み、
2)そこからDBへの取り込みはEXCELのRANGEオブジェクトからDBに保存するプログラムをVBAで自作する

ってなかんじが楽そうですけど、かっこ悪いですね。それにそうか。ここはVBプログラマのスレですよね。失礼しました。
やっぱ、DLして該当部分からデータを切り出すのがいちばん、いちばん。
どうやって切り出すかにポイントを置いて議論するのがいいのでは?
やっぱ切り出すならvbscrptかな?(じつはよく知らず)
582デフォルトの名無しさん:04/03/14 04:57
>>581
>>578さんじゃないけど、
エクセルでWEBのデータ取り込みって以上に時間がかかるね。
しかもakamai....ナントカっておかしな所に勝手につないでるし・・
なんかちょっと不気味だ
> しかもakamai....ナントカっておかしな所に勝手につないでるし・・
それはエクセルなんかは関係なく単にスパイウェアが
584デフォルトの名無しさん:04/03/14 12:37
ちょと質問。VB6です。

Inetの場合以下で見れるデータを
  Inet.Password = "パスワード"
  Inet.UserName = "ログインID"
  wByte = Inet.OpenURL("https://URL", icByteArray)

WebBrowserではどうするの?
ちなみに以下ではログイン出来ないので駄目です。
  WebBrowser.Navigate "https://URL"
>>584
ダイアログボックスが出るので入力して下さい。
586デフォルトの名無しさん:04/03/14 14:07
>>585
もういっぱい、いっぱい、なんですよ。

ログインした状態にしたいに決まってるじゃないですか。
いじわるしないで下さいよ。
お願いしますよ。
587デフォルトの名無しさん:04/03/14 14:09
>>567
通報しました
588デフォルトの名無しさん:04/03/14 14:44
どう通報したんだろ
589デフォルトの名無しさん:04/03/14 15:07
>>583
え、自分だけですか?
>584
https://USERNAME:PASS@URL/
試してないから動くかわからんし、いろいろ問題あるし。
>>590
BASIC認証はMSの自転車操業アップデートのおかげで無効化されてるん
でなかったっけ?
592デフォルトの名無しさん:04/03/14 19:47
>>590 >>591
ありがとうございます。ですが駄目っぽいです。

inetで取得してローカルファイルに「ファイル名.html」として書き出して、
そのファイルをNavigateで見れないかなと思ったのですが駄目っぽいです。

inetで取得したデータをなんとかWebBrowserに表示出来ないでしょうか。
>>592
file://なるスキームがあるけれど。
594592:04/03/14 22:07
>inetで取得してローカルファイルに「ファイル名.html」として書き出して、
>そのファイルをNavigateで見れないかなと思ったのですが駄目っぽいです。

ごめんごめんフルパスで指定したらとれたわ。
>>592
文字列でいいのなら
WebBrowser1.Navigate "about:blank"
WebBrowser1.Document.Clear
WebBrowser1.Document.Open
WebBrowser1.Document.Charset = "Shift_JIS"
WebBrowser1.Document.Close
WebBrowser1.Document.body.innerHTML = String
これで出来る。
以前にちょっと作ったブラウザはこれで動いた。
最後の行以外一回実行しないと怒られる。
596デフォルトの名無しさん:04/03/15 11:12
>>584
あんた、某MLで相談しなかった?
597デフォルトの名無しさん:04/03/15 11:13
>>596
していませんが。
変な言いがかりはやめてください。
>>597
ごめん。
していてもいわんわな。
600デフォルトの名無しさん:04/03/15 11:52
VB初心者です。
Windows XP home
VB6.0です。

ゲームのウィンドウの任意の座標のRGB値を監視するという物を作りたいのですが、
どうしたらいいのでしょうか
>>600
DirectXを使ったゲームの事か?
>>600
どういう目的でそういうことをしたいのか書いたほうが早いと思う
603デフォルトの名無しさん:04/03/15 14:27
UNIXのコマンド郡をVBScriptでリプレースするプロジェクトとかどっかにないのかね。
604600:04/03/15 15:19
オンライン対戦ゲームのJavaAppletをプレイするにあたって補助的役割をするソフトを作りたいので、
例えば、将棋ゲームなとで対戦相手が来たら音で知らせるとかそのために、画面上の色を判別して変化を監視したいんです。
605デフォルトの名無しさん:04/03/15 15:22
age
>>603
なぜに? インストールすれば普通に使えるじゃん。
ソースが見たいとか?
607デフォルトの名無しさん:04/03/15 17:53
age
608584:04/03/15 18:58
>>594
しまった。

>Inetの場合以下で見れるデータを
>  Inet.Password = "パスワード"
>  Inet.UserName = "ログインID"
>  wByte = Inet.OpenURL("https://URL", icByteArray)

ログイン出来てなかったわ。
ログイン出来てない時表示される画面が出てきた。がっくり。
しょうがないからSendKeyでもするか。
なんかいい方法ありませんか?

>>596
まぁ、そうかな。
609596:04/03/15 19:36
>>608
>>596
> まぁ、そうかな。

やっぱりでしたか(w
がんがってください!
>>584
Private Sub Command1_Click()
  WebBrowser1.Navigate "http://www.google.co.jp/"
  Do While WebBrowser1.Busy
    MsgBox "ページが表示されるまで待つ"
  Loop
  
  With WebBrowser1.Document.Forms("f")
    .Item("q").Value = "VBプログラマ質問スレ"
    .submit
  End With
End Sub
>>596
最近おまえのような言いがかり吐く馬鹿が多く見かけるが、
同じような質問が存在していたら

マルチか? おめでたい馬鹿だな。ここ来るなよ。
お前のような非生産的な人間の脳味噌のプログラミングな
ど誰も見たくも聞きたくもない。

>>611
はあ?
>>612
はぁ?
はぁ。(´・ω・`)
うゎーい、春がいっぱいだょー。('A`)
616デフォルトの名無しさん:04/03/15 22:01
質問です。
キーボードから指定したキー(例:ALT+A)を入力した時に、
VBプログラムウィンドウのアクティブ/ノンアクティブにかかわらず、
指定した関数を呼び出すという処理は、VB6.0でできますでしょうか?
わかる方いましたら教えてくださいませm(__)m
フックすることになるかな。
VCなどで作ったDLLを利用するならVB6.0でもできるけど、VB単独ではたぶん無理。
>>616
ここの過去スレで見たぞ。
619616:04/03/15 22:18
>>617
回答ありがとうございます。
VB単独では無理なんですね・・・
VCをやったことがなくて、フックについてよくわかって
いないので、この機会に勉強してフックのDLL作ってみます。
ありがとうございました^^
>>616
RegisterHotkey でホットキーを登録して、サブクラス化してウィンドウプロシーヂャで
WM_HOTKEY を処理で出来た気がする。詳しいことは忘れた。
621616:04/03/15 22:22
>>618
まじですか〜^^;
探してみます。
ありがとうございましたm(__)m
>>619
>>618は無視か。検索もできないとは。
>>622
プッ
624616:04/03/15 22:27
>>620
いろんなやり方があるんですね〜
詳しいやり方調べて試してみます。
ありがとうございました。
DLLの動的呼び出し、がんばったらできるので
Cでできることは基本的にできるはず。
と、言っておく。ただし、Cより面倒になる危険性あり。
>>625

BTreeとか言ってみる。
627デフォルトの名無しさん:04/03/16 10:27
初歩的な質問ですみません。
VBアプリケーションを関連付け起動したときに
起動時のファイル名を取得する方法を教えてください。

例)
拡張子bmpをvbapp.exeに関連しておいて
test.bmpでvbapp.exe起動したときに
test.bmpのファイル名パス名が知りたいのです。
>>627
Command
複数のファイルやスペースの入ったファイル名に(ry
629デフォルトの名無しさん:04/03/16 12:13
dim cn as ADODB.CONNECTION
dim rs as ADODB.RECORDSET
dim cm as ADODB.COMMAND
三つの違いってどうなってるんですか?
まずコマンドの発行はcn.executeでやれるからCOMMANDの存在理由がわかりません
そんでレコードセットの取得も
rs.openかset rs = cn.execute()かset rs = cm.execute()と3種類あるがどうちがうのか
さっぱりわからん。

みなさんどのように使い分けてますか?
>>629
使い分けって・・・。
オブジェクト階層図を見れば一目瞭然なんだけど。
きちんと理解すればなぜそのようになっているかわかるよ。
631デフォルトの名無しさん:04/03/16 13:23
dim cn as ADODB.CONNECTION
dim rs as ADODB.RECORDSET
dim cm as ADODB.COMMAND
三つの違いってどうなってるんですか?
まずコマンドの発行はcn.executeでやれるからCOMMANDの存在理由がわかりません
そんでレコードセットの取得も
rs.openかset rs = cn.execute()かset rs = cm.execute()と3種類あるがどうちがうのか
さっぱりわからん。

みなさんどのように使い分けてますか?
>>629
使い分けって・・・。
オブジェクト階層図を見れば一目瞭然なんだけど。
きちんと理解すればなぜそのようになっているかわかるよ。
コピペ基地が・・・。

コネクションは文字通り接続管理、ログイン、トランザクション制御が役割。
コマンドで更新系を発行、レコードセットは導出表がある場合に使用。
634629:04/03/16 13:56
>>632
>オブジェクト階層図を見れば
MSDNにありますか?

>コネクションは文字通り接続管理、ログイン、トランザクション制御が役割。
>コマンドで更新系を発行、レコードセットは導出表がある場合に使用。

更新形のコマンドはみんな、Commandオブジェクト使ってるますか?
私はCommandオブジェクト宣言するのがあれなのでコネクションから発行してます
>>634
MSDNには無いと思う。
昔のVBマガジンを漁ればある。

あと、どのように使い分けてるか質問して、>>633でそれに対して回答してるんだから、
>>634では何を聞きたいのか判らないよ。
ADOオブジェクトモデル、MSDNにあるよ。
リンク張る前に書き込んでしまった。再度。
ADOオブジェクトモデル、MSDNにあるよ。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdconadoobjectmodel.asp
638629:04/03/16 14:42
>>635

オンラインMSDNでありました

>どのように使い分けてるか質問して
>何を聞きたいのか判らないよ。
すみません。生理できていませんでした。
MSDN読んだら雰囲気的ですがわかりました。

>>636
キーワードサンクスです。
MSDN漁るの苦手なんです。
639629:04/03/16 14:56
>>637
リンクサンクスです。

質問した経緯は処理時間が異常にかかったからなんです。
もしかして、記述がわるいのではいのか。。。。
ACCESSのT1というテーブルの3700レコードをレコードセットでまわして
いたら、15分くらいしてから処理が戻りました。もう、フリーズでもしたのかと
ADO+ACCESSってこんなに時間かかるものですか?
>>639
オブジェクトの参照する階層が深ければ、遅くなります。
最初の話からすると、列の値を見るのにConnection.xxx.xxx.xxxってな感じでオブジェクト辿ってるとかありません?
0〜4の数字をバラバラに表示させるプログラムを作ってるんですが、↓のようにするとインデックスが有効範囲にないというエラーがでます。
どこが間違ってるんでしょうか?

Dim a(6), i

Private Sub number()
  For i = 0 To 5
    a(i) = 6
  Next i
  For i = 1 To 5
  a(i) = Rnd * 5 Mod 5
    For j = 1 To 5
      If a(i) = a(j) And i <> j Then
        i = i - 1
      End If
    Next j
  Next i
End Sub
If (a(i) = a(j)) And (i <> j) Then
643629:04/03/16 15:30
>>640

>オブジェクトの参照する階層が深ければ、遅くなります。
ADOの場合に限ってのたとえが思いつきませんが
こういうことですか?
dim obj1 as Obj1a
do while obj1.obj2.obj3.propaty1 = 1 ← 遅い

set obj3.propaty1 = obj1.obj2.obj3.propaty1
do while obj3.propaty1 = 1 ← 早い

>列の値を見るのにConnection.xxx.xxx.xxxってな感じでオブジェクト辿ってるとかありません?
列の値を見るのにConnectionオブジェクトからたどれることは知りませんでした
むしろ、スピードで気になっていたのは、レコードセットのループの中で
レコードセットを毎回生成することがいけないのかと気になっていました。
set recordset = nothing
set recordset = new adodb.recordset
recordset.open,,,
if recordset.eof = true then goto owari
recordset.close
set recordset = nothing
644629:04/03/16 15:34
>列の値を見るのにConnection.xxx.xxx.xxxってな感じでオブジェクト辿ってるとかありません?
列の値は普通?にたどっています。
recordset!フィールド名 = 値
recordset.field(x) = 値

このどちらかです。
>>643
前段はまあそういうこと。

後段は一つのSQLで取れるならばそれのほうが早い。
あと、開くレコードセットはなるべく軽いオプションにするといい(=読み取り専用、前方のみ・・・とかあるはず)
646デフォルトの名無しさん:04/03/16 16:13
質問です。
データベースからアクセスしてコンボボックスに値をセットするのですが
入れることができる制限がありますよね。
みなさんはどうしています。
>>646
聞き方が629さんっぽいんだが。w

何に対する制限でしょうか?で、何が上手くいかなくてどうしてるかを聞きたいのでしょうか?
>むしろ、スピードで気になっていたのは、レコードセットのループの中で
>レコードセットを毎回生成することがいけないのかと気になっていました

大元のループの件数が可変であるなら、基本的にこの手法はNGと思っておいた方が・・・
テスト環境だとデータの件数が少なくて大した事無くても運用に乗ると目も当てられない
事になりそう。
>>642
それも以前試したんですが、エラーが出ます
650629:04/03/16 16:49
>>645
サンクスコ
>>629
> ADO+ACCESSってこんなに時間かかるものですか?
十中八九作り方が悪い。

> むしろ、スピードで気になっていたのは、レコードセットのループの中で
> レコードセットを毎回生成することがいけないのかと気になっていました。
> set recordset = nothing
> set recordset = new adodb.recordset
> recordset.open,,,
> if recordset.eof = true then goto owari
> recordset.close
> set recordset = nothing
これでしょ。なにやってんのか知らんが、connection/recordsetのオプション。
データ量、SQLの書き方によってはeofの取得にものすごく時間が掛かる。
もちろんeofが悪いんじゃないよ。使い方が悪い。

それとレコードセット自体を生成するのが悪いのではなく、
生成するレコードセットが問題だろう。
必要なく大量のデータのレコードセットを生成しているとか。
ループの中でのレコードセットの生成もそこでいま必要とされているデータを
そのタイミングで取得しなければならないのなら問題ない。

まず、RDBというものをちゃんと理解して効率の良い書き方を知ること。
なんでもそうだが、書き方次第で強烈に早くなったり強烈に遅くなったりする。

適当にオプションを弄くるなんて小手先のテクニックで解決しようとせずに、
根本的な問題を解決してね。
652629:04/03/16 16:57
>>648
現在実運用のレコード件数でテストしています。
だいたい4000件程度です。
4000件に対してキーを取り出して、別のマスタを開いてそのキーで
問い合わせしています。

>基本的にこの手法はNGと思っておいた方が・・・
では、もう大元のレコードセットにマスタも合体させてから
ぐるぐるまわすほうが根本的にいいってことですか?
>>652
651さんも書いているが、SQLで結合して一発で取り出せないの?
654629:04/03/16 17:43
>>651
>>653

>SQLの書き方によってはeofの取得にものすごく時間が掛かる。
do while not recordset.eof
処理
loop
こんなんやってます。。。。
>根本的な問題を解決してね。
OK牧場

>SQLで結合して一発で取り出せないの?
結合考えます。
作る前に。。from inner joinとかで結合するのと
from table,table2,table3 where table.a = tabale1.a...
どっちのほうがいいとかありますか?

655629:04/03/16 17:55
あと質問したいのですが、、、
textboxの入力時にリターンキー押したらエラー音がでます。
別にbeepとか実行していないのですが、この回避策はありますか?

処理としてはtextboxの中でリターンキーを押すと次のtextboxに
フォーカスをあてています。。。
>>654
VBのコードとSQLの組み合わせはやりたいことで最適な方法が
大きく変わる可能性があるのでなんとも・・・。
一連の処理全体で考えないといけないし。
657570:04/03/16 19:06
>>604
アプレットなら、
  WebBrowserコントロールをペタ
    ↓
  アプレットを開く(スタイルシートでアプレットの座標を(0,0)あたりに絶対指定すると良し)
    ↓
  GetDC(もちろん使い終わったらReleaseDCを忘れずに)
    ↓
  GetPixel
でいけるハズ。アプレットを開く方法に関して、object.Document.Writeを使えばファイルを介さずに表示できる。

(…で、だれか俺の質問に答えてください…)
658627:04/03/16 19:29
>>628さん
ありがとございました!
Text1.Enabled = Falseじゃだめかな

少なくとも、Text1_Changeの中でfunc1を呼び出す前にチェックするようにすればいいでしょう。
そもそもfunc1の中でDoEventsしなければText1_Changeもこないわけだが、
まあそれは大人の事情でダメなんだろうと推測
>>655
プログラムでキーを押していなかった事にすれば音はでません
661570:04/03/17 00:17
>>659
言葉ッ足らずでゴメンナサイ。大人の事情を説明します。
なにがしたいかというと、テキストを入力->その文字列から始まるファイル/フォルダ一の覧をリストビューに表示という処理。
すなわち俗に言う自動補完をしたいんですが、アイコンを取得したりしてるので、ファイル数が多いと結構な時間がかかるのです。
(もちろん、拡張子ごとのキャッシュはしてますが)
その間も、テキストボックスの入力は受け付けなければなりません。
Doeventsを呼ばなければならないのはそのためなんですが、Text1_Change()の中でフラグを見てしまうと問題が出てきます。
このタイミングだと、ビジーなときは「関数を呼ばない」という選択をしなければならないとゆーことになるハズです。こーなると、
リストビューの内容を逐次更新できなくなってしまいます。そこで、前書いたようなどうにかアボートさせたいと思ったわけです。
うーん。他の言語ではこういうケースに対応できたりするんでしょうかね。
俺はそういう風にやってるよ。
えーと
Private mCount as long

private Func1

dim myNum as long

mCount = mCount + 1
myNum = mCount
do
...
DoEvents
If mCount > myNum then exit do
loop

if gCount > myNum then exit sub
gCount = 0
続き処理

とかまぁこんな感じで。
かなり力技だけど。スマートなやり方もあるんかしら。
あっとそういえばDoEventsって結構遅いから、
リストボックスに追加する数が少ないうちはやらないほうが却って
いいかも知れんぞ。
10回に一回にするとかでもいいかも。
664659:04/03/17 02:07
誤解してたね。すまん。
残念ながら、スマートな方法は思いつかんなぁ・・・
662の方法が、現実的な解かも。

とりあえず、他の言語なら、入力を受け取るスレッドと補完リストを作成するスレッドに分ければ、少しはましかも。
あるいはlispならcall/ccという最終兵器がある。(よくわからんが、たぶんこれでなんとかなるんじゃないかな)
まあVBの開発なら無い物ねだりだね。

ちょっと仕様が変わるからダメかもしれないが、入力文字が少ない内は補完候補が多いので補完せずに、
ある程度入力が進んで補完対象が減ってから補完リストを作成するとか。

あるいは、Commandパターンで、func1に対応するConcreteCommandに相当するクラスを使って、
いろいろやればなんとかなるだろうけど、無駄にソースが複雑になるよなぁ・・・
>>661
遅延をかけてみては?

タイマーを配置してIntervalを500くらいに設定する。
テキストの変更があったらタイマーのEnabledをFalse→Trueにする。
タイマーイベント中でタイマーのEnabled=Falseにしてからファイルを列挙。
ファイルは全部列挙せず上限を設けて表示する(リストに5000とか表示したってユーザーは見ない)。

http://www.vector.co.jp/soft/win31/game/se029073.html
VB2製のこれをVB6に移植しようとして、いきなり
どんな処理してるんだろう?というところで躓いた。
処理の重さを数値で指定してその間隔も指定するみたいな感じに見えるけど
どうやれば他のプロセスの有無に関わらず一定のCPU負荷を保てるんだろう…

CPU負荷は軽くするのが普通だからかぐぐっても軽くする方法しか出ない…
>>666
Win3.1とNT系じゃプロセス管理が違うから無理だと思う。
668デフォルトの名無しさん:04/03/17 09:23
ctlEnterOrderのコントロールをツールバーに追加するにはどのOCX選んだら
いいですか?
669668:04/03/17 09:51
自己すれです。
すいません、前の人が作った.ctlでした。
自作.ctlの作り方ってなんで.ocxでないのですか?
670570:04/03/17 09:56
>>662-665
DoEventsはplanet-source-code.comに、
  If GetInputState() <> 0 Then DoEvents
とするとグーと書いてあったので、そうしてます。
遅延も考えましたが、根本的解決という面で結局は参照カウンタもどきなフラグを使った
>>662の手法がいちばん手っ取り早そうですね。キューイングするようなものでもないですし。
ファイルの列挙については、FindFirstFileとゆーよーなかったるい関数を使うよりもむしろ、
DirListBox/FileListBoxで取り出した方が簡単で速いので、この部分はVBサマサマです。
みなさまありがとうございました。m(__)m
ちなみにウィンドウをサブクラス化したいときは、↓のが便利です、海の向こうって結構イッちゃってますよね。
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=37102&lngWId=1

>>666
http://www.vector.co.jp/soft/win95/util/se221407.html
こんなのもあります。
671570:04/03/17 10:04
>>669
日本語おかしいけど、.ctlはユーザーコントロールという名前がついていて、
「GUIが持てるクラス」みたいなものです、OCXと同じように扱えるし、コンパイルすれば
OCXになるわけですが、あえてする必要はないかと。連続投稿スマソ
>>666
それのドキュメントから
> スライダが二つあります。IとLっての。
> Iは、インターバルの値で、値が大きいとCPU負荷は軽くなります。
> Lは、ループの値で、値が大きいとCPU負荷は重くなります。
ソフト起動してないけど、インターバル値ってのがTimerコントロールの
Intervalの値で、ループの値ってのがタイマーイベント内で負荷をかけるための
処理のループ回数のことじゃないかな?

> どうやれば他のプロセスの有無に関わらず一定のCPU負荷を保てるんだろう…
このソフトにはこんな機能無いよね。自分の案? 案自体はいいと思うんだけど、
ちょっと難しそう。CPU使用率は取得できるわけだから、TimerのIntervalを
少なめにしておき、CPU使用率を見てループ回数を自動的に調整すればいいんじゃない?

>>667
そんなこともないでしょ。確かにプロセス管理はそれとはほぼ同じ方法でできると思う。
注意する点といえば、アクティブなプロセスにより多くのCPUリソースを割り当てられるから
負荷かけソフトの優先順位を上げておいた方が良いかもしれないってとこかな。

そういえば、ストレステストと呼ばれる類のテストツールで
負荷をかけるソフトがありそうな気もする。
それとWindowsって特定のプロセスのCPUリソースを制限することって出来ないんだっけ?
673672:04/03/17 10:29
文章ミスった。
× 確かにプロセス管理はそれとはほぼ同じ方法でできると思う。
○ 確かにプロセス管理は違うけど、それとはほぼ同じ方法でできると思う。
(それとはVB2製のソフトのことね)
674668:04/03/17 10:34
>>671
ありがd
へーvb見直したよ
675デフォルトの名無しさん:04/03/17 12:03
質問なんですけど、ウイルスバスターをアンインストールしようとすると、
「windows インストーラ」というものが起動して
「選択した機能は現在使用できないネットワークリソースにあります」
と言うメッセージが出てきてアンインストールできないんですがどういう状況なのでしょうか?
また、どうやったら強制的にアンインストールできますか?
>>675
えーと、それはVBになんと関係があるのかな?
>>676
VB=VirusBuster
じゃあこのスレはトレンドマイクロ御用達なのか(w。
679デフォルトの名無しさん:04/03/17 13:57
初歩的な質問何ですけどグローバルモジュールで(複数のフォーム間参照)
Const msg="Error Msg"
を定義してからコマンドモジュールで参照すると
”変数が定義されていません”とエラーがでるのですけど
定数は一般モジュールから参照できないのですか?
すいませんがご教授お願いします



>>679
Public~

ってゆーかヘルプ嫁
>既定では、定数はプライベートになります。
>>679
Public Constにしてもだめ?

今デフォルトがどっちだか忘れたけど、スコープ定義はデフォルトに頼らずに明示するほうが後が楽。
682デフォルトの名無しさん:04/03/17 16:02
ADOのレコードセットが閉じているかどうかはどうやって調べたらいいですか?
そんなことを調べないといけないロジックは嫌だな。
例外とればいいんじゃないの?
>>682
State プロパティ



・・・がそれっぽい
>>672
内部で何やってるかは見当つきませんが
気になったので>>666に書いてあるGHelperをWinXP(P4-2G非HT環境)で試しました。
(問題なく起動した)
他にゲームなど起動せず最大負荷(L=10000)でCPU使用率約40%。
そのまま他のゲームを起動してもGHelperのCPU使用率は約40%を保っているようです。
その為ゲームがCPU60%までしか使えず少し遅くなる。

あとそのゲームは>>670の「こんなの」対策がありましたw
「こんなの」が起動してるとゲームが激烈に不安定になる(速くなったり遅くなったり)
>>682
俺は、レコードセットをテキストボックスと連結してるんだけど
そのフォームを閉じる前に、必ずそのレコードセットを、close
してます。

開いているかどうかチェックしてのオープンは、
if ( rs.State <> adStateOpen ) then rs.open
にしてます。
687682:04/03/17 19:00
みなさんありがとうございます。
>>686氏の if ( rs.State <> adStateOpen ) then rs.open
でうまくいきました。
688676:04/03/17 20:22
>>677
あー、なるほど。 _| ̄|∵:'、○
じゃぁこのスレはそのVBとやらを作ってるマ専用のスレなわけですね。
689デフォルトの名無しさん:04/03/17 22:23
>>Public~

>>ってゆーかヘルプ嫁
>既定では、定数はプライベートになります。
>>681 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/17 15:09
>>679
>>Public Constにしてもだめ?
いけました。ありがとうございます。
MSDNいれられないんです(大きすぎ)
本も近くにないので。
>>689
オンラインで見れるじゃん。
ttp://www.microsoft.com/japan/msdn/library/default.asp
>>689
CDからみればいいじゃん。
692デフォルトの名無しさん:04/03/18 00:15
>577
>やりたいことは、AccessのNZ関数なんかが要求する仕様にもっとも近いので、わたしがおなじことをやるときははMyNZ関数を自作してます。
お返事ありがとうございます。
力作業でもできるんですけどやはり関数作れば便利ですね。
こんな話題でてもいいけどなかなかでえませんね
(私が厨房なのかも)


693デフォルトの名無しさん:04/03/18 09:14
コマンドボタンをコントロール配列にして沢山並べています。
一つ一つをクリックするのは大変なので、ドラッグするとクリックした事にしたいのですが
どうすればいいでしょうか?
Set Picture1.picture = LoadPicture(filename)

が時々固まってしまいます。
これはどういった原因が考えられるのでしょうか?
695デフォルトの名無しさん:04/03/18 09:36
Set は要らないのでは?
>>695
まじですか?
やってみます。
Setなくてもできました。
でも固まるのが発生しました。
ファイルの書き込みのときにFreeFileで
番号をとってなかったのがいけないかと思い
ただいま試験中
うーん。imageコントロールにしたら調子いいです。
>>693
フレームのマウスダウンで座標を覚えておきマウスアップでその中の
範囲のボタン全部にクリックをCallなど
わかりました。壊れたjpgを読み込むと固まるみたいです。
701デフォルトの名無しさん:04/03/18 19:05

Optionボタンの配列を Option(0)からOption(2) まで
作ってフォームに配置して、別にチェックボックス
も1つ配置します。

それでチェックボックスがTrue の場合に Option(0)を
選ばないようにしたいのですが、どうやったら
できるでしょう?

Click イベントを拾って、index = 0 のときに
Option(1).Value = true としても
うまく行かないんですよね。どうも Valueプロパティに
代入した段階で再度 Click イベントが呼ばれてしまう
ようで実にややこしい。

オプションボタンでウインドウの状態を遷移させる
前に、修正フラグが立ってたら、遷移させない
ような処理がしたいんですが。

702デフォルトの名無しさん:04/03/18 19:31
>>693とか>>701
本当に問題を解決したいのなら、まず問題を他人に正確に伝える努力をしないと。
こんな質問の仕方じゃ、まずどんな親切な人も答えようがないと思う。
だって、言ってることの意味が理解できないもの。
703デフォルトの名無しさん:04/03/18 20:06
>701
Option(0)のValueとEnabledをFalseにすれば良いだけでは?
>701
普通チェックボックスがONになったときにオプションボタンはEnabe=False
にするだろ。
ぎゃくにFalseになってないのに変えられr内なんてストレスたまるぞ
>>703
ども。

OptionA(0).Enabled = False
OptionA(1).Enabled = False
OptionA(2).Enabled = False

この状態で Value プロパティに代入しても
Clickイベントが呼ばれました。
やはりダメみたいです。

ユーザーの入力ができないだけで
アプリからの操作はできるみたい。

>>704
例えば、スプレッドシートの「表示」と「修正」と「追加」の
3つの画面の遷移をオプションボタンで変更するという
状況を想定しています。

修正画面で修正項目に変更が加えられている場合は
表示画面に遷移する前に修正画面の変更を破棄するか
どうかを問い合わせたい場合があると思います。

破棄していいのであれば、そのまま画面を遷移させる。
また破棄したくないのであれば、画面を遷移させずに
オプションボタンも前の位置に戻したい。

706デフォルトの名無しさん:04/03/18 22:20
>>705
それじゃあ、Clickイベントの中で、Enabledの値を見たらいいんではないの。
>>705
チェックボックスにオプションボタンが従属しているわけじゃないのね。

とりあえず、押される前にイベント取るのは無理。
押されてから、Option1(1).Value=1とかするしかなかろうな。
もう一度Clickに来ちゃうのはフラグでも使って明示的に回避するしかないだろう。
708デフォルトの名無しさん:04/03/19 00:34
ListViewコントロールをlvwReportにして表として使ってるんですが、
スクロール位置をコードで制御する事は可能ですか?
表を生成したあとに、自動的にスクロールバーが一番下がっている状態(一番最後の行が見えている状態)
に移動するようにしたいです。
>>707
色々やったけど難しいんです。
どういう動作になってるのか分からないんですが、
フラグを使って回避しようとしても1回は回避される
んだけど、2度クリックすると切り替わってしまうんです。

>>705のスプレッドの例は実際に仕事で関わったことの
あるケースです。そのケースでは変更破棄の確認を
行わずに、すぐに画面を遷移させていました。(当然
修正内容があっても破棄される)

はじめから、こういうデザインを行わないようにするしか
ないのでしょうかね。

>>709

どういう動作になっているか分からないって、確認すればいいじゃん。
良くわからん。

Private Sub Option1_Click(Index)

If CancelOptionClickFlg = True Then Exit Sub

If Index = 0 and Option1(0).Value = True then
CancelOptionClickFlg = True
Option1(1).Value = True
CancelOptionClickFlg = False
End If
...

これでいけないか?
CancelOptionClickFlg はフォームレベル変数で。
If Index = 0 and Option1(0).Value = True then
 If CheckBox.Value = 1 then
  CancelOptionClickFlg = True
  Option1(1).Value = True
  CancelOptionClickFlg = False
 End If
End If

こうだなすまん
>>708
VBだけじゃできなかったような・・・
EnsureVisibleで検索してみると分かるかな?
リストビューのウィンドウに鮮度メッセージでEnsureVisibleに対応する奴を
投げればいけると思うよ。
>>708
SendKeys "{END}"
だけじゃだめなの?
>>708
ListView_Scroll マクロ
実際は SendMessage で LVM_SCROLL メッセージとXYを送る
715デフォルトの名無しさん:04/03/19 10:19
PictureBoxにスクロールバーを内蔵したいのですが、
何かよい方法はないでしょうか?
>>715
ないです。APIで正規の実装方法もありますが、なにかと面倒です。
(確かWM_SCROLLとかを引っ掛けなきゃいけない。)
直に実装するとゴミゴミするので再利用したいなら
ユーザーコントロールにしてスーパークラスっぽくするのがオススメ。
あと、Windows2000だと標準のスクロールバーは白くなる仕様ですので気をつけて。
>>710-711
先ほど再度確認してみたらできますた。
どうもです。
718デフォルトの名無しさん:04/03/19 12:37
>>716
だからゴミゴミだろうと何だろうとその実装方法が知りたいんじゃない?

実際に表示したいピクチャーボックスの他に、そのコンテナとなる
ピクチャーボックスを用意して入れ子にして、実際に表示したい
ピクチャーボックスのTopなりLeftプロパティをスクロールバーでコントロール
してやればいいと思うんだけど。
>>715
MSに定番のサンプルコード載ってるけど。
>>718
フォローすると、外のピクチャーBOXが枠になって、その中を動かすことで擬似スクロールとなると。

VBの開発環境で、ピクチャーBOXの中にピクチャーBOXを置いて、内側の奴をマウスで動かしてみればイメージがわくと思う。
あとはそれを動かすロジックを、スクロールバーと連携させればいいだけ。
Dir関数でファイルを取り出す順序を指定したいのですが
どうすればいいでしょう?
>>721
全部取り出してソート。
>>722
まじかよ!
724デフォルトの名無しさん:04/03/19 18:59
前々から不思議に思っていたんですけど
Text1.text=rs.Fields(0).valueに
rs.Fields(0).valueがNULLで値を
代入しようとしたときエラーになるのはなぜ?
別にいいじゃんと思うが
String型にnullは入らないんじゃない?
726デフォルトの名無しさん:04/03/19 20:11
>725
そそ!Nullと""は別物ですよね。
Text1.text=rs.Fields(0).value & ""
だな
すごく言いたい単語があるけど殴られるだろうから止めた。
        _
  ∧_∧.(_)
 ( ;・∀・) ||ドキドキ
 (    つ||
 | | |
 (__)_)
730デフォルトの名無しさん:04/03/19 20:36
ファイルパスを引数として渡すと、読み取り専用属性がついているかどうか確かめて、
もし読み取り専用属性がついていたら解除する関数を作りたいんですが、
どうすればいいですか。
GetAttrで読み取り専用属性がついているか確かめ、
SetAttrで読み取り専用属性をつける事ができるのはわかったのですが、
解除が分かりません。
ぬるほ
>>730
SetAttrで解除もできます。

SetAttr path,GetAttr(path) And Not vbReadOnly

VBで関数内のstatic変数を初めて関数が実行されたときに
初期化したい時はどうやるんでしょうか?
はじめて実行のための booleanフラグでも用意しておかないと
ダメですか?

それと社長に変数の宣言をプロシージャの冒頭にまとめろ
っていわれたんですけど、このスタイルはどうなんですかねぇ。
しょうがないので、会社ではそのスタイルで書くことにしますけど。

>>733
古い考え方だな
>>732
んー、よくわからないけどコピペしたら出来ました。
ありがとう。
>>733
static変数はVB.NETで廃止される。(C#やJavaにもない)
その変数がある所はフォームやクラスモジュールだろ?
だったらメンバ変数にすれば良い。
フォームはクラスの(General)の部分にかけばメンバ変数になる。
あとはフォームやクラスのInitialize(他言語で言うコンストラクタ)で初期化する。
関数が初めて実行されるというより、関数が含まれるオブジェクトが始めて生成されたときだが。

標準モジュールに置いた変数の場合は無理。
あとは変数はそれぞれの型の規定値に初期化されると
決まっているのでそれを上手く利用するとか。

> それと社長に変数の宣言をプロシージャの冒頭にまとめろ
冒頭に置く理由は無いんだけどね。でもVBの場合はスコープとして見れば
プロシージャより小さいスコープ(ifやfor等のブロック内のスコープ)は無いので、
冒頭にまとめるようにしてもいいんじゃないかな?

途中で宣言したくなるって事は関数が長いってことかも
知れないから分割した方がいいのかもしれないし。

まあ趣味レベルの問題。
737デフォルトの名無しさん:04/03/19 21:39
>>Text1.text=rs.Fields(0).value & ""
>>だな
Isnullで判断してもいいんですけど(関数作ってもいいし)
みなさんはどうしてるのかなと
Text1.text=rs.Fields(0).value & ""
ようにしてるんですか?
ネタじゃないんですよね?
IF ISNULL(rs.Fields(0).value) THEN
Text1.text=rs.Fields(0).value
END IF

普通に関数作るだろ?
Function Nz(ByVal Value As Variant)
 If IsNull(Value) Then
  Nz = ""
 Else
  Nz = Value
 End If
End Function
Text1.text=rs.Fields(0).value & ""
の方が処理速度はかなり速いけどなー
>>739
関数呼び出しのコストだけどな。

Value = rs.Fields(0).value
 If IsNull(Value) Then
  Text1.text = ""
 Else
  Text1.text = Value
 End If

が一番速い。
違うよ。遅いのはIsNull()だよ。
742デフォルトの名無しさん:04/03/20 00:19
>>736
>static変数はVB.NETで廃止される。(C#やJavaにもない)
>その変数がある所はフォームやクラスモジュールだろ?
>だったらメンバ変数にすれば良い。
釣りだと思いたいところだがなんかベタマジっぽいなこの人。。。
しかし俺のほかに誰も突っ込む奴がいないこのスレってどうなってんだおい。

たしかに↓はコンパイラ通らないよ。(Java)
privateメンバ変数とメソッド内部のstatic変数では
使い方が違うので、後者が廃止されるのが流れと
すれば残念だなぁ。

class StaticTest {

public static void main(String args[]) {

System.out.println(GetNum());

}

private static int GetNum() {
static int x = 1;
return x++;
}


}
744デフォルトの名無しさん:04/03/20 02:08
データ追加のとき
rs.addnew
rs.fields(1).value="Hello"
rs.update
でフィールドがオートナンバならrs.fields(0).valueに値を入れなくて
いいですよね?
なんでエラーでるのかな
>>744
なんてエラーが出るの?
>>741
お前動かしてみてないだろ?
rs.fields(0).value & ""を関数にすると>>738よりも遅くなる。
>>738の関数を>>740のように関数から出すとrs.fields(0).value & ""よりも速くなる。
IIF(IsNull ・・・)のほうが早くない?
ただ、IIFはTRUE/FALSE両方評価しちゃうから、変数アクセスで例外がでるならだめだけど。
インライン関数クレ
というか、
>>738の引数のByValをByRefに変えて、標準モジュールに置いたら、
rs.fields(0).value & "" と速度は全然変わらん。
よって見やすいように関数にするのがいい。
""と連結している奴はアフォだな。
>>741の意見(どうせ推測だろうが)のIsNullも全然遅くないようだ。
>>747
Iif(条件,引数1,引数2)は、条件の結果にかかわらず、
引数1,引数2の両方を評価するから遅い。
>>750
関数呼び出しのオーバーヘッドとの比較だな。
>>749のいうようにByRefじゃなければ、変数のコピー分遅い。
752749:04/03/20 09:15
そういや、
Function Nz(ByRef Value As Variant)
じゃなくて
Function Nz(ByRef Value As Variant) As String
にするべきだったな。
しばらくVBやってなかったから忘れてた。

もう検証ソース消しちゃったけど、
As Stringをつけたら""と連結する方法より速くなりそうだな。
元のDBMSって何だ?
SQL文でNVLとかダメなのか?
754デフォルトの名無しさん:04/03/20 10:18
8万回ループでテストしたよ(元データは8件でisnullを10000回loop)
 if isnull( )then =9秒
 &""=8秒
 function=8秒
結論=たいしてかわらん
個人ならなんでもOKだけど 共同開発なら分かり易さでfunctionだろうね
俺ならSQLに組み込むけどね
ちゃんとランダムな8万件でテストしてくださいよ
756デフォルトの名無しさん:04/03/20 14:32
text.textがNULLのとき
rs.fields(0).value=text.text & ""
でエラーがでた。
ネタか.だまされた
( ゚Д゚)ポカーン
758デフォルトの名無しさん:04/03/20 15:05
>>755
あのね DBの仕組みを理解しているかい?
isnullの問題と読み込みの問題は別だよ

>>756
意味不明
>>758
CPUの仕組みを理解している?
  ∧_∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>731
>>759
CPUは関係ないだろ?
762デフォルトの名無しさん:04/03/20 15:41
VB6.0が欲しいんだが、どこに行けば買える?
来月からの仕事(某銀行)でいるので誰か教えて。
763デフォルトの名無しさん:04/03/20 15:54
  ∧_∧
  ( ・∀・)   | | カッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>731
┐(´∇`)┌
>>762
ヤフオク
766デフォルトの名無しさん:04/03/20 19:07
VB6.0で時刻を監視してfunctionを実行するプログラム(cronやタスクスケジューラみたいな
ものの簡易版)を作りたいのですが、スマートにして効率的な手法はありませんか?
どこかのサイトを参考にして

While true
doEvent
hogehoge'設定時刻と現在時刻を比較
Wend

こんな感じで書きましたが、CPU使用率が100%になってしまいます。
(CPUの余剰分をすべて使ってしまう)
タスクスケジューラみたいにきれいに動かないものでしょうか。
>>759
VBのプログラマスレでCPUがどうとかほざいている馬鹿を見るのは久しぶりだな。
Basicがどういったものなのかまずはお前から勉強してこい(w

CPUの仕組み?アセンブラでも組むつもりか?
現代のPCでCPUの仕組みなど考慮する必要もない。 未だにCPUの命令セットが
どうとか、テクニカルな要望するのはサーバー分野以外はっきりいってただのハー
ド馬鹿の戯言。

消えろ そして二度と来るな。 CPUの言葉でた段階でアセンブラ当然書けるだろ?
test
>>766
タイマーコントロールで数秒か数分ごとに
時間をチャックすればいい。
なんで>>767はこんなに興奮してるんだ?
なんでだろう
私生活で辛いことでもあったんだろ。
>>766
atでくんじゃダメなの?

あと、タイマーで毎秒監視、前回と今回の間に設定時間があったら起動でいいんじゃないの?
>>767
組込みならともかくサーバ分野でそんなに要求されるのかな
>>774
さあ ?
>>767 の脳内では、サーバー ≡ すごい機械 (= アセンブラが要求される) となっているんじゃないかな。
776デフォルトの名無しさん:04/03/20 23:59
Date型にnullってセットできないのね・・・

変数でDate型宣言したとき
初期値ってどうしてます?
CPUのキャッシュサイズとか意識しないとVBだって遅いのしか書けないよ
本題からズレてきてるしこの話は他でやって欲しいと思う今日この頃
>>777
たしかにそうだが、そもそもCPUを持ち出してきた>>759
CPUの仕組みとは全く関係ないところにCPUを持ち出してきている。
>>779
データの分布によっては分岐予測などで速度が変わりうる
大差無いだろうが
>>780
その通りだが、それが何の関係があるの?
だから他でやれって
VBをヤルような奴はたいていそこまでの知識が必要なほどのコードは書けないからスルー
784デフォルトの名無しさん :04/03/21 12:50
エクセルVBAで処理を終えた後最後にVBを起動してエクセルを終了させる
                  ↓
数十秒後にVBでエクセルを起動しまたエクセルの処理をして終了後に
VBを起動してエクセルを終了という処理を繰り返したいのですが
タイマーの使い方がよくわかりません。
教えてください
785デフォルトの名無しさん:04/03/21 13:04
>>784
何が言いたいのか全然わからない。

文章の推敲ってものを知らないのか、あるいは自分以外の人は
エスパーか何かで、君の言わんとすることを皆まで言わずとも
理解できるとでも思っているの?

しかし最近こういうレス多すぎないか?
786デフォルトの名無しさん:04/03/21 13:08
コントロールを貼り付け、
booleanの変数を用意しておき?(この部分はいまいち)
API(sdkプラットホームで検索)を使って実行ファイルの処理を行う。
ぐらいかな。(タイマーよりアプリの終了とかの法が面倒かな)
わからんけど。
>>784
何でそんな変な処理が必要なのかよくわからん。
VB でできることは、ほとんど VBA でできるから VBA で統一するか、VB 側をメインにして適時 Excel を起動するように作るとかの方がいいと思う。

ちなみに、タイマーはタイマーコントロールをフォームに貼り付けて (名前を仮に Timer1 とする)

Timer1.Interval = 10000
Timer1.Enabled = True

とかすると、10秒後に Sub Timer1_Timer() が起動されるはず (だったと思う。最近 VB 触ってないから間違ってたらスマン。)

>>785
これぐらいの文章の理解力がないと、実社会では厳しいぞ。
788757:04/03/21 13:29
>>787
全然理解できてないと思うよ。
そういうのは「理解」でなく、「思い込み」と言う。
相手の考えを勝手に推測することなんて誰にでもできますけど。
maybe
789757:04/03/21 13:31
ていうかVBやってる奴で
>Timer1.Interval = 10000
>Timer1.Enabled = True
>とかすると、10秒後に Sub Timer1_Timer() が起動されるはず

こんなことも知らない奴が果たしているだろうか。。
>787
連続して処理をするとリソース不足になるため処理を細切れにして
リソースを回復するために処理ごとにエクセルを終了しようとしています。
VBAの方でリソースの回復命令のようなものを探したのですが見つからなかったので。
使用しているのはwindows98、Excel97です。

791デフォルトの名無しさん:04/03/21 14:30
>連続して処理をするとリソース不足になるため処理を細切れにして
それでどうしてその「リソース不足」の方に手を打つことを優先せずに、
そんな妙ちくりんな回避方法を考えてここで質問するのか、まったく理解不能ですな。

こういう人のいう「リソース不足」ってのは、そもそも本来の意味で
「リソース不足」なのか大いに怪しい。

VBからオートメションでエクセル操作するコードを何にも考えずに
漫然と書くと、よくエクセルが固まったりするが、そういうエクセルの
不具合に起因する問題のことを、なんかどっかで聞きかじった「リソース不足」
って言ってるんじゃないの?

ていうか、
>Timer1.Interval = 10000
>Timer1.Enabled = True
>とかすると、10秒後に Sub Timer1_Timer() が起動されるはず
こんなこと書いてる人に聞いたって答えなんて得られっこないだろう。
>>787
> >>785
> これぐらいの文章の理解力がないと、実社会では厳しいぞ。

読解したつもりで的外れな回答をするよりは、
判読可能な文章に書き直してもらうほうが、ゴールは近い。

プログラムは思ったように動くのではなく、書いたように動く。
プログラマは読む側の努力でなんとかするべきでない。
>>788-789, >>791
ぷぷっ、指摘されたのが相当悔しかったみたいだな。

>>789
>> タイマーの使い方がよくわかりません。
タイマーの使い方ってこれ以外になんかあるか ?

「VB やってる奴全員がタイマーの使い方知ってる」と考える方が、よっぽど「思い込み」が激しいぞ。

>>790
まあ、どっかでリソースの解放漏れしてると言うのがありがちだけど、Win9x + Excel ででかい表扱うと単に使ってるだけでもリソース不足になることあるから、一概にプログラムの問題とも言えないしな。
いちばん簡単なのは OS を変えることだろうけど、それも難しいんだろうな...。
でも、相互に起動し合うというのはちょっといただけないから、VB 側をメインにして Excel の終了を待った方がいいと思うよ。

VB の Shell() できどうしたプログラムの終了を待つ方法はググれば出てくる。
例えば (申し訳ないが、内容は未確認)
http://www.bcap.co.jp/hanafusa/VBHLP/tap_PrgEnd.htm

>>792 (あんまり思いたくないけど、>>788-789, >>791 とは別人か ?)
悪いけど、読解できてないのは君たちだと思うぞ。
読んでて恥ずかしいな。(´・ω・`)
ほとんどの奴はタイマーの使い方ぐらい知っているだろうが。
まだ始めたばっかりの奴はしらんだろうが、
今知らないだけで、すぐに使い方ぐらい知る。
なんか荒れてるみたいだけど、初心者禁止なら、次のスレからそう書こうよ
レベルあわせってのが現実には一番大切なのは皆わかってることだろ
でも、掲示板でできるのも限度があるでしょ?
質問がわかんなかったら、答える必要ないじゃん
こういうこと言ってるのかもって思う奴だけが書けばいいんだよ
誰も答えてくんなかったら、答えてくれるようにどうにか考えて書くだろ?

おまえの質問はわからんって言われてきた奴ばっかなのかもしれんが
ここでその憂さを晴らされてもなぁ・・・
797792:04/03/21 18:25
>>793
> >>792 (あんまり思いたくないけど、>>788-789, >>791 とは別人か ?)
> 悪いけど、読解できてないのは君たちだと思うぞ。

悪いけど、>>788-789, >>791とは別人。
言ったろう、思い込みで話を進めるから、ややこしいことになるって(汗
>>794
自分がか ? そりゃそうだろうな。(藁

>>795
だから、>>789 と言うのか ?
君にはマルチスレッドのプログラムは無理だね。
(さて、この比喩がわかるかなぁ...。)

>>797
はぁ...、わけわかの奴が複数いるのね。

で、どうややこしいことになってるって ?
悪いけど、それは流石に「理解」できないから説明してくれる ?
「思い込み」で解釈しちゃダメなんだろ ? (藁
799デフォルトの名無しさん:04/03/21 19:06
VB6でRecordSetから直接エクセルのセル(範囲)に貼り付ける方法ありますか?
また逆も可能ですか?

#2次元配列からエクセルのセル(範囲)に貼り付ける方法はやったことがあります
#ので、上記も可能なのかとは思いますがどこから調べていいかわからず。
>>798
文章が厨っぽい。放置します。
801デフォルトの名無しさん:04/03/21 20:26
コンボボックスについて質問です。
コンボのテキスト(Addnewで入れたリスト内のText)が変わった瞬間に発生するイベント
を起こして、EnabledのTrue Falseを変えたいのですが、うまくいきません。
コピペするしこんな感じなんですが

Private Sub Com編集_KeyPress(KeyAscii As Integer)
If Com編集.Text = "編集する" Then
Tex見積.Enabled = True
Else
Com編集.Text = "編集しない"
Tex見積.Enabled = False
  End If
End Sub

「KeyPress」の所を変えてあげればいいのかな?と思ってるのですが、うまくいきません。
どなたかご教授を・・
>>801
全角のコントロール名は…はおいといて
Changeイベントじゃだめなの?
>>802
残念ながらチェンジはだめでして。。
チェンジだとTextに「入力しようとする」と発生していいのですが、「クリック」や「スクロールボタン」
では発生しないのです。
「クリック」や「スクロールボタン」で発生させたいのです
>>803
ならClickイベントは?
805801:04/03/21 21:10
Clickで出来ましたーーー(涙
さっきまでだめだったのになんでだろ。。。_| ̄|○
>>802
全角使ってあるの、あたい初めてみた。(゜Д゜)
807801:04/03/21 21:14
全角は突っ込まない方向で・・・
全角だったからさっきダメだったのかな?
塩ラーメン食べたい
>>800
ププッ、反論できないだけだろ ?
新事実!
タイマーは別スレッドで実行されるぞ!
マジ?
812デフォルトの名無しさん:04/03/21 22:10
ネットワーク上のファイルがOPENされているか判断するには
どうすればよいでしょうか?
>>810
で、それがどうかしましたか ?
>>813
タイマーはアトミックだからなぁ・・・。
>>812
ネットワークとは、どこからどこまでの範囲?どうやって繋がってる?相手のOSは?
>>814
同意。スレッドとは挙動が全然違う。
>>814, >>816
>>813 の名前欄
>>817
麦茶をビールと呼ぶのは比喩とは言わんよ。
ここも春真っ盛りでつね。_| ̄|○
>>818
マジで理解してないの ?
>>795 に書いてあることには、「隙間」があるんよ。
で、マルチスレッドのバグ一例として、その「隙間」に気づかないことをあげつらったわけ。

と説明しても、理解できないんだろうな...。

まあ、これは理解できなくてもしょうがないと思うよ。
俺も簡単にはわかるようには書いてないから。(比喩だし。)
>>820
タイマはスレッドでもなければ割り込みでもないよ。
>>821
>>820 の「隙間」と言うのは、

今知らないだけで、
^^^
すぐに使い方ぐらい知る。
^^^^^^          
の間のこと言ってんだけど、伝わってないのかな ?

VB のタイマーについては、ここでは関係ないよ。
比喩って物事をわかりやすく表現するためのもんだが、わかりにくい比喩って存在意義が微妙だな。
・・・・・全部自作自演だろ
825812:04/03/22 00:28
>>815
すみません。イントラネット環境です。OSはWin系。
VBアプリからサーバ上の共有ファイルを複数のクライアントPCから
アクセスしたいんです。
1クライアントがOPEN中の場合は、CLOSEされるまで待つようにしたい。
現状は、「aaa.txt」をOPENする時、

IF 「aaa_(xxxxxx).loc」というファイルがあるか THEN
  ファイル使用中
ELSE
 「aaa_(クライアントPC名).loc」というファイルを作成し、「aaa.txt」をOPEN
ENDIF

CLOSEする時に「aaa_(クライアントPC名).loc」を削除。

という形でやってますが他に方法が無いかと…
>>825
まっとうなDBを使うかサーバに専用のプログラムを動かしてクライアントは
それにアクセスするか、etc.etc.・・・
>>825
受付係なソフトを作ってサーバーに置いて状況管理・通知をそれに頼るとか。
>>825
CreateFileでdwShareModeを0に。
オレなら素直に、>>825と同じ処理でやる。
ファイルを作りたくないなら、リードオンリーにしておけないかな。
>>825
厳密に言えばそれじゃだめだけどね。

・現在誰も使ってない状態
・クライアントAが使ってないと判断
・クライアントBが使ってないと判断
・クライアントAがlocファイル作成
・クライアントBがlocファイル作成

という流れもありうる。

単純に、aaa.txtをロック状態で開いて、(openの引数でロックできるのは
知っているよね?)エラーが起きたかどうかで判別した方が良い。

>>826が書いているようにDBサーバーを使うほうが何かと便利だと思うけど、
DBサーバーを使うにしろ使わないにしろロックについてもう少し調べて方が良い。

ロック中は他クライアントが読めなくてもいいのかとか、書き込むときだけロックするのかとか、
その場合はクライアントA読み込み、B読み込み、B書き込み、A書き込みとなったらどうするのかとか、
そういう一般的な問題の解決の手がかりにもなると思うし。
>>829
>>825はその流れを考慮してると思うよ。
それが証拠に、ロックファイルにマシン名が入れてある。つまり、

1) ロックファイルを作成
2) 自分以外が作成したロックファイルがあるか調べる
3) なければファイルを開く

ということをやってるんじゃないかな。
こちらの場合、開ける状態で譲り合うケースがあるけどね(汗
>>830
いや、やってないな(w
マシン名のとこだけ見て、考慮してるんだろうと思ってしまった。
単に、だれが開いてるか知りたいだけか。
832825:04/03/22 09:15
>>826-831 ありがとうございます。
>>826,827
いまさらDBに出来ないし、別ソフトはサーバマシンに負荷がかかるし・・・
(サーバマシンもクライアントとして動かすので。サーバ専用マシン入れるほど予算が無い)
>>828
それって、CLOSE前にクライアント側が異常終了した場合に残ってしまうので・・・
>>829-831
1.OPEN前にチェック
2.locファイル作成
3.再チェック
という手順でやってます。お見合いを避けるため占有権を取得できない場合は、
MAX10回まで再試行すると・・・
833825:04/03/22 09:23
READ/WRITEについては、
実はlocファイル名は、「aaa_(クライアントPC名)_(x).loc」
x=0:READ占有権(他PCのREADは許可する)
x=1:WRITE占有権(他PCからのアクセス全て不許可)
としてます。

やはりOPEN時にロックモード設定して、エラートラップしかないでしょうか?
「ロックによるエラー」って判別可能ですか?単にOPENエラーでは困るし・・・
834825:04/03/22 09:27
今の私の方法ですと、占有中に異常終了するとlocファイルが残ってしまうんですよね。
PC名指定して占有権ファイルを削除する機能を一応付けてるんですけど・・・

うーーん・・・あふぉですみません。。。
まあ、解決するにはサーバ側にプロセス作って、
そいつがロック監視及びロックしてるクライアントの生存確認をするようにしたほうがいいわな。
ソケットかなんかで通信して。
836デフォルトの名無しさん:04/03/22 18:41
VB6を使用してソフト開発をしています。帳票印刷用のフォームを作成してツール
バーを貼り付けて、プログラムでデータ表示等のボタンを配置しているのですが、
データ表示の処理中にボタンを押せないようにしたいのですが、どうしても上手く
いきません。解決策をご存知の方がいたらよろしくお願いします。
EnabledやVisibleは使用してみたのですが、やはりダブルクリックをしてしまう
と連続処理に入ってしまいます。
Clickで処理開始とEnableの設定をしていたらそんなこと(2回入っちゃう)にならないと思うけど。
なるの??
どこでEnabled設定してるの?
>>836
Enabled=Falseの直前にDoEvents。
>>838
できるかもしれんが、どっちかってっと直後?
というかDoEventは止めたほうが・・・後でややこしいことになったりするよ
>>839
>後でややこしいことになったりするよ

それは使い方が悪いからだろう
>>840
そのとおり使い方が悪いからだが、>>836の質問者が
使いこなせるとは思えないので、やがて使い方が悪くなると思うわけよ。
それでお勧めできないなと。
842838:04/03/22 22:25
>>838
ごめん、デバッグさせて。
Enabled=Trueの直前にDoEvents。

DoEventsが嫌ならマウスカーソルから逃げ回るボタンを実装するとか。
843デフォルトの名無しさん:04/03/23 08:21
このスレ大丈夫か?普通はRefreshメソッド使うんだよ。
ていうか、Enableプロパティって別にコントロールがリフレッシュされなくても
値を設定した直後から有効だと思うんだが。。
DoEventsはOSに一旦制御を戻す。(ほぼ=メッセージキューに溜まってる奴を消化させる)
だから、その辺のWindowsの仕組みをきちんと理解せずに使うと副作用でまくり。

845836:04/03/23 09:24
みなさんレスありがとうございました。DoEventsは確かに自分にはまだ
使いこなせそうにないですね。Refreshを使ってみようと思います。
>>845
>>843が間違ってるとおもうぞ、この件に関しては。
リフレッシュはあくまで再描画命令。
溜まったクリックイベント(=メッセージ)を吐かせるにはDoeventsだと思うけど。
847836:04/03/23 10:43
Refreshも連打してしまうと連続処理に入ってしまいました。
Enabledを入れた部分はツールバーのボタンクリック時イベントプロシージャです
。プログラムの流れはボタンをクリックすると実際の表示関数に飛ぶようになって
います。DoEventsをHELP読んで勉強してみます。もしこのやり方に間違いがある
ようでしたら教えてください
単に何かある程度重い処理の後でEnabled=Falseにしているだけだと思うんだが・・・
順序変えればいいだけ何じゃないの?
Private Sub Command1_Click()

  Command1.Enabled = False

  処理A
  DoEvents
  処理B
  DoEvents
  処理C

  Command1.Enabled = True

End Sub
>>849
Trueにする直前で一発でいいと思うんだけど。
851836:04/03/23 13:32
>848>849>850
教えてもらった通りに書いたら思い通りに動きました。本当にありがとう
ございました。
852デフォルトの名無しさん:04/03/23 15:06
指定した回数だけTABとReturnを交互に連打するスクリプト書いてくれませんか
おねがいします
>>852
SendKeyでやれば。
854852:04/03/23 15:10
>>853
小生はVBとかプログラムさっぱりなので・・・
WebBrowser1.execCommand "ClearAuthenticationCache"
WebBrowser1.Navigate2 "http://www.google.co.jp", 4 + 8

どこかのサイトにこうすればキャッシュを削除して
ページを読み込めるって書いてあったのですが、
オブジェクトがサポートしてないとか出て
うまく動作しません・・・・

誰か解決方法を知っていたら教えていただけませんか・・・?
>>854
じゃあマクロでやりなよ。フリーで使い手いいのがいっぱいある。
ttp://www.vector.co.jp/vpack/filearea/win/util/bat/index.html

「できないからやって」みたいにコード作成依頼するのは、宿題丸投げ
っぽくていくない。
もう、VBとか、イラネ。RFCで十分ジャン?
只だしw
マウスカーソルを変更したときに、影をつけさせるにはどうしたらいいですか?
>>858
影つきのマウスカーソルを使う。
860デフォルトの名無しさん:04/03/23 17:24
すみません。
別のスレに書いたのですが、そちらはどうも質問スレじゃないみたいで
マルチになるかもしれませんが、ここで質問させてもらいます。
VB6サービスパック5でDAO3.6ライブラリーを使用してレコードセットを作成しているのですが、
Private Sub Form_Load()

   Dim db As Database
   Dim re As Recordset

   Dim strDBName As String
   Dim strREName As String
   Dim intRecs As Integer

   strDBName = App.Path & "C:\Documents and Settings\xxx\xxxxxxx\xxxx\xxx.mdb"
   strRSName = "Titles"

  ★Set db = DBEngine.OpenDatabase(strDBName)
   Set rs = db.OpenRecordset(strRSName, dbOpenDynaset)

   With rs
      .MoveLast
      intRecs = .RecordCount
   End With
   
   MsgBox strRSName & ":" & CStr(intRecs), vbInformation, "Total records in set"
End Sub

★印の付いた行を指定して、
『ファイル名が無効です』『ファイル名が違います』というエラーがでるのですが、
これはなにがいけないのでしょうか?
パス表記の仕方が間違ってるってことでしょうか
>>860
氏ねカス野郎
すみません
向こうでご指摘頂けました。
重複して申し訳ないです
そういうエラーが出た時には、該当変数にどんな値が入っているのかを
Debug.Printなりで表示させて確認すればいいのに。そうすれば今回の
は明らかにおかしいって見つけられたはず。
864デフォルトの名無しさん:04/03/23 17:57
ShellExecute関数を使って関連づけ実行して、
その後もそのウィンドウを操作するようなプログラムを組みたいと思ってます。
ShellExecuteの戻り値はウィンドウのインスタンスハンドルなのですが、
これをウィンドウハンドルに変換できないのでしょうか。
調べてみたんですが、ウィンドウハンドルからインスタンスハンドルの取得というのはありましたが、
逆は見つかりませんでした。
分かる方いらっしゃいましたら、教えてください。よろしくお願いします。

環境:VB6.0, windows2000
865843:04/03/23 18:43
>>846
こういう人がいるから「VB厨」って言葉ができるんだな。
コントロールのイベントを無効にしたい、って話してるのに、何が

>溜まったクリックイベント(=メッセージ)を吐かせる
なのだろう。意味わかっていってるのかねえ。。
>>865
意味がわかってないのはお前のほうだ。
春になると、いかれた人が多く出てくるのかな?>>865のような。
それとも、リストラや左遷されて、さびしかったの?かまってほしいの?
もしそうなら、他の板でやってね。
どうすれば、こんなエラーを作れるんだw
リフレッシュ→すっきりする→溜まってるメッセージなんて(゚ε゚)キニシナイ→2回目以降のクリックは処理されない
870855:04/03/23 19:21
誰かわかるか平らッしませんか・・・?
871855:04/03/23 19:21
変換ミスしたぁ。。。
スレ汚しスマソ。。。
マクロとVBAのモジュールとの区別が僕には付いていません。

なんとかしてください。
WebBrowserコントロールで
リファラを設定することってできますか?
>>873
どっかのスレでその話題あがってたが、どこだったか忘れたな
>>864
一つのインスタンスが持っているウインドウは一つとは限らないからねぇ〜
0個かもしれないし32767個かもしれない。

存在するウインドウを列挙してそのインスタンスを調べてみるとか?
(APIでプロセスIDかスレッドIDからウインドウの列挙できる方法が
 あった気がするけど夢だったのかもしれない)
876デフォルトの名無しさん:04/03/23 22:30
テキストボックスに日付を入力する際のCHECKをどうしてますか?
コード書きますか?
左から4番目が数字で6から7番目が月で数字とか
書いています
>>876
IsDate
878デフォルトの名無しさん:04/03/23 22:38
すいません
だれかわかりませんか?
2つのコマンドボタンがあってどれを押されたか判別するにはどうしたらよいのでしょうか?
トリガーみたいなのはVBにないのでしょうか?
>>878
コントロール配列にしてClickイベントにてIndexの値を参照
880デフォルトの名無しさん:04/03/23 22:50
>>878
あえて釣られてみるか。
まずフォームにコマンドボタンを2つ貼り付けて、
エディットモードのままそれぞれのボタンをクリック汁。

そんでもピンとこなかったらプログラミングの適正はゼロだと思って
諦めることだね。

まあ、この程度のことでヘルプも引かずにいちいち人に聞いているようじゃ
どのみち先は暗いと思うけどさ。

ところでトリガーみたいってトリガーって何??
881デフォルトの名無しさん:04/03/23 22:50
879>>
ありがとうございます。
すこし頭ぼけてむつかしく考えすぎました
>880
>ところでトリガーみたいってトリガーって何??

ピンとこなかったらプログラミングの適正はゼロだと思って
諦めることだね。
まあ、この程度のことで辞書も引かずにいちいち人に聞いているようじゃ
どのみち先は暗いと思うけどさ。
883デフォルトの名無しさん:04/03/23 23:20
初心者ですおしえてください。
とある事情でメイン画面がActiveXEXEなのですが、他の外部ActiveXDLL
が共通で使用するアカウントやホスト名、パスワードなどを
メイン画面のクラスに定数として持たそうとしているのですが
当然ながらCLASSにPublic宣言は不可能です。
で標準モジュールにパブリックで定数を宣言して
CLASSの何とかゲットと何とかレッツを使いたいのですが
コードの書き方がわかりません。
何とかゲットってのはなんとなくわかるが、何とかレッツってなに?
ふたつ合わせて「ゲッツ!」なわけないよなぁ。
886デフォルトの名無しさん:04/03/23 23:27
Bフレッツみたいな

じゃなくてLETSだたような VBって難しすぎですよね
Property Let のことですか?
ってかあなたの言っている意味が分かりませぬ。
もちっと整理したら?
用語もわからん状態で聞くより、用語を調べたほうが
解決に近いと思うよ。
888デフォルトの名無しさん:04/03/23 23:44
>>887
はい 仰せの通り基本を調べてきました

Property Let と Property Getっぽいです。失礼しました。

通常このプロシージャーは 定数のやり取りを外部と行う為に
用意されているものなのですよね?
どっちがどっちかとか あまり説明ではイメージがわきません
厨みたいな質問ですいません。
>>888
定数とかかぎらない。
また、変更するときの範囲のチェックなどもそこで行う。
890883:04/03/23 23:50
DLL側
Private sub Aproc()
Dim objCls as class1 'OLE EXEのクラス
Set objCls = New class1 'インスタンスの作成
Call objCls.ConstData1(strHostName) 'OLE EXEプロシージャコール
Set objCls = Nothing
End sub

とした場合
この外部DLLへ提供するべき定数はGet ですか? Letですか?
イメージで質問してすみません
891883:04/03/23 23:53
訂正
×この外部DLLへ提供するべき定数はGet ですか? Letですか?

○この外部DLLへ提供するべき定数のやり取りはGet ですか? Letですか?

クラスにパブリックな定数を書きたいだけなら、
列挙型を使えば良いと思った。
893883:04/03/24 00:10
Enumという宣言ですね、ありがとうございます
今 ちょっとテストで作ってみました。
これを外部から呼び出す時は
Call objCls.とやっても宣言した定数の一覧がでてきませんが
コールする際はどのように書くのでしょうか?
GetとLetの説明を読んで分からないなんて考えにくいけど。

Public Property Get Hoge() as Long
Hoge = 定数
End Property
で一応出来るよ。
Enumはクラスでパブリック宣言できたっけ?

まぁインテリセンス使いたいならPropertyGetでいいんじゃね。
でも本来これは定数を返すためのもんじゃないよ
895843:04/03/24 00:57
ていうか、釣りでしょ?

定数クラス、って発想をする人がプロパティの意味がわからんなんて
ちょっと考えにくい。
アホなVB厨どもが知ったかして素っ頓狂なことぬかすのを笑ってやる腹とみた。
>>895
あんたの853の返事の抜け作加減からして他人を厨呼ばわりする資格は
無いと思うが如何?
熱い議論の中、物凄く底辺レベルの質問で恐縮なんですが
絵を数枚用意してボタンをクリックすると、絵が動くというプログラムを組みたいのですが
フォームにPictureBoxとコマンドボタンを付けてPictureboxに絵を読み込み、コマンドボタン
をWクリックしてPicture1.Picture = LoadPicture ("ファイルへのパス")を数枚やってみたのですが
コマンドボタンを押すと超亜速で絵が動いてしまい、ハハーンここは時計のマークのやつを
使うんだな?という事くらいまではわかったのですが、どうやらここで脳みその限界を迎えてしまいました。
そこで、コマンドボタンを押す→絵が0.5秒単位くらいで動く→終わり
というプログラムを組むにはどうすればいいのでしょうか
898843:04/03/24 08:20
>>896
>>853ってのは>>843の間違いだよね?
「抜け作加減」ってのは、具体的に何のことを指すのでしょうか?
厨房な私としては是非ご指導を仰ぎたいのですが。
ま、ただの釣り師のつもりの「知ったか君」の予感がしますが。。

>>897
またそんな釣りみたいなレスを。。
本当はそんなこと分ってるんじゃないの?
899883:04/03/24 09:42
釣りではありません。まじめに聞いてます。
そしておはようございます。
>>894
ありがとうございます。
今からちょっと作ってみます。インテリセンス
っていうか また厨なイメージのレスになってしまいますが
本当はTypeのようなで複数要素の集まりを宣言した中に常に静的な定数を保持しておき
Property Getの型をこの要素の集まりを宣言します。
で 外部からこのプロシージャ(仮にProcGetAとして)を
コールし、
ProcGetA.HostName
ProcGetA.UserName
ProcGetA.PassWord
のように一つのプロシージャコールより それぞれの要素レベルで
帰ってきた定数を各外部DLLで使いたいなあと思いました。




>>897
時計のマーク=タイマーコントロールをはりつけたら
それをダブルクリックして出てくるSUB関数の中に絵を切り替える処理を書くんだよ
そのSUB関数が定期的に
901デフォルトの名無しさん:04/03/24 09:57
VB6より、EXCEL2002(XP)のシートを参照したとき、

Run-time error '9':
Subscript out of range

というエラーが出て、落ちてしまいます。

原因わかる方いらっしゃいますでしょうか?
よろしくお願いします。
>>901
そもそもその組み合わせって可能なのか?
VB6にはOffice2000じゃないの?

VBとOfficeを連携させる場合、結構バージョン限定しないとつらいよ。
(他のツールでもOffice連携の場合はそうだと思うけど。)

で、質問のエラーの場合、オブジェクトの生成、ファイルのOpen はOKで
シートオブジェクトに触ったところでエラーという感じですか?
>>902さん
すいません、説明不足でした。
補足しますと、日本語環境で開発したものを英語環境で動作させています。
日本語環境では、問題なく動くのですが
英語環境だと今回のエラーがでてしまいます。
今までは、EXCELシートに書き込みに行くという処理を行っており、
それは両環境で正しく動作していたのですが、
今回、EXCELシートを参照しに行くという動きを取り入れ、
今回のエラーが出てしまいます。





904デフォルトの名無しさん:04/03/24 11:07
エラーの内容のとおり
ランタイムエラーなんでしょうね
>>902さんが言うようにMSアプリ間でのバージョンの互換に
より結構影響を受ける事があります。
ただ偶然にも日本語環境では互換がとれていて問題なく動いていただけで
英語環境に変わる事で動作リンクズレを起こしてしまったのでしょう
よくある事です。開発環境を見直すか別のほーほーを思考しましょう
>>904さん
ありがとうございます。
環境を見直して見ます。
>>905
一応、お金はかかりますが、Excelインストール不要なExcel操作ツールはあります。
製品名がぱっと出ないのですが、どっとネットマガジンとかの最初のほうの広告を見れば出てると思う。
907VB.NETに間違えてかいていしまったので:04/03/24 16:35
レコードセットオープンで
rs,open "ビュー"・・・・ と
オープンするとレコードの数がー1になるんですけど?
これはなぜなんでしょうか?
degub.print rs.RecordCount
DBはSQLサーバですが?
ビューが悪いのでしょうか
(ビューの中からさらにビューを呼んでいる)
908デフォルトの名無しさん:04/03/24 17:12
Rs.MoveLast
Rs.MoveFirst
>>907
openした瞬間とかは一度もフェッチが行われていないので
recordCountはタイミングによっては正しくない値が入ってる時がある。
だから、>>908のように一度、レコードを移動させるかしないと駄目だったと思う。
どっかのマニュアルに書いてあった記憶があるな。
間違ってたらごめん。

逆にレコード件数チェック(1件以上あるかどうかのチェック)程度ならば、
recordCountは使うべきじゃなくて、以下のようにするのが一般的だと思う。

if (not rs.EOF) and (not rs.BOF) then
...
end if
910デフォルトの名無しさん:04/03/24 18:34
なんで?
911デフォルトの名無しさん:04/03/24 18:36








そ う い う 仕 様 だ か ら だ
912Qest:04/03/24 18:37
VBのプログラムでAccessの.mdbファイルを作成した場合に、
その.mdbファイルにログイン/パスワードを設定する方法が
VBのプログラムでありますか?
ありましたら教えて下さい、お願いします!
913Qest:04/03/24 18:41
VBのプログラムでAccessの.mdbファイルを作成した場合に、
その.mdbファイルにログイン/パスワードを設定する方法が
VBのプログラムでありますか?
ありましたら教えて下さい、お願いします!
914843:04/03/24 18:46
>>903
>今までは、EXCELシートに書き込みに行くという処理を行っており、
>それは両環境で正しく動作していたのですが、
>今回、EXCELシートを参照しに行くという動きを取り入れ、
>今回のエラーが出てしまいます。
もうちょっと意味の通る文章を書かないと、知ったかぶりしたい人から
見当違いなレスはあっても、あなたの問題に解答する能力を持つ人からの
レスはもらえないと思う。

まず、ワークシートに書き込みはできるのに参照でエラーが出る、
ってところがそれだけでは矛盾するようにも聞こえるので最低これを
補足しないと。(これに突っ込まないような人のレスは信頼できんでしょ?)

だって、書き込みができる、ってことは、少なくともその書き込みを
行ったワークシートへの参照は成功してるんでしょう?
根に持つタイプ?
えらい暗いね。
916デフォルトの名無しさん:04/03/24 19:24
あの、英数半角文字だけ受け付けて、漢字が入ると誤動作するシステムがあるんです。
それで漢字はすべて、?一文字に変えたいのですが、どうやって調べたら
いいんですか?
 Strconv(str,vbNarrow)ではカナはおけで、かなはだめでした。
昆布はあきらめてisKanji(”漢字”)みたいな方法ないですか?
>>916
漢字とか考えないで、全部16進数やbase64などの名前に強制変換すりゃいいじゃない
ファイル名の長さだけには気をつけて。
918デフォルトの名無しさん:04/03/24 19:32
>>909さん
お返事ありがとうございます。
参考になりました。
>>914
あんたが一番の知ったかぶりだね
920デフォルトの名無しさん:04/03/24 19:50
とあるPC端末から、vodafoneのJ-T09に絵文字入りメールを送信しても、
絵文字がきちんと表示されません。ちなみに、J-SH?はうまくいった。
そもそも J-T0?って携帯以外からの絵文字入りメールを受け取っても、
きちんと表示してくれない?
>>920
VBとはどんな関係が?
922920:04/03/24 19:57
激しくスレ違いますた…
逝ってきます…
923916:04/03/24 20:04
>917
for Count = 1 to len(InputString)
if isKanji(mid(InputString,Count,1)) then
mid(InputString,Count,1) = "?"
end if
next
にしたい。どうしても。なんかない?
>>923
if LenB(StrConv(InputString,vbFromUnicode)) <> Len(InputString) Then
  MsgBox "2バイト文字が入ってるよ"
End If
>901
なんか英語版だからという気はしないけど。
インデックスが違うって言うんだから、インデックス値とか調べてみた?

それからVB6とExcelXPは可能だと思うけど。
Excel2000と2002は違うかもしれんけどさ。
取りあえず俺が作った奴はフツーに動いてるぞ。
926916:04/03/24 21:56
>924
 ありがと。意味わからんけどやってみます。
LenB(StrConv(InputString,vbFromUnicode)) > Len(InputString)
ってことですね。
>>926
どうでもいいが、"?"なんて文字をファイル名にしようとするなよ
928デフォルトの名無しさん:04/03/25 08:43
質問です。
データを行と列の表で表示させたのですが、
DataGridを使用すれば列でソートも出来る表を
作れるのでしょうか?
やってみればすぐわかる、って思わないのかな
VS-VIEWという印刷ツールで用紙サイズを設定する際に用紙番号を
送っているのですが、クライアントごとに番号が異なるようなんです。
考えられる原因を、どなたかご存知ないでしょうか?
よろしくお願いします。
931デフォルトの名無しさん:04/03/25 11:45
VBのフォームにあるボタンからUNIXサーバに置いている
DCLコマプロをキックするなんてできますか?
>>930
ハコとかマニュアルとかに、問い合わせ先書いてません?
933931:04/03/25 11:51
ちなみに今現在フォームデザインでReflectionコンポーネントを追加して
@Menu のような文字列を
センドキーにて送っているので 挙動がおかしい時があり
処理の信頼性がないのです。
FTPセッション等の関数より直に起動できるといいのですが
>>931
変な略語は使わない->コマプロ=コマンドプロンプト?キック=起動?何を?

出来る出来ないは、両PC間のRPC等の方法を見てからじゃないのか?
>>931
コマプロとは?
キックとは?
936931:04/03/25 11:55
>>934
すいません こちらの業務の略語つかってしまいました
癖になってます。
コマプロ= ○○○.COM等の DCLコマンドプログラムです
キック= 起動 及び実行です
DCLはDos Command Line?
938デフォルトの名無しさん:04/03/29 10:07
保守
939デフォルトの名無しさん:04/03/29 11:35
>>937
消えたログに説明があったな
数日分ロールバックしてしまったのね。w
938 名前:931 投稿日:04/03/25 12:40
いいえ違います
Digital Command Languageの略で
DOSのVAXとかopenVMS版コマンドという意味合いでは似ています。はい
939 名前:933補足 投稿日:04/03/25 12:55
このようにキーを送り実行しています

Public Sub SendTxt(ByVal StrLine As String)
Dim cutStr As String
Dim i As Integer
i = 0
'長さの分ループする
Do While i < Len(StrLine)
'送信文字列を一つ取得
cutStr = Mid(StrLine, i, 1)
'文字列をセンドする処理呼び出し
Call SendkeyChr06(cutStr)
i = i + 1
Loop
'リフレクションセッションへのセットフォーカス
R2winCtrl1.SetFocus
SendKeys "{ENTER}", True 'ENTERキーを送る
End Function

Private Sub SendkeyChr06(cutStr As String)

setKey = "{" & cutStr & "}" '送信キーのセット

R2winCtrl1.SetFocus 'リフレクションセッションへのセットフォーカス
SendKeys setKey, True '対象キーを送る

End Function
940 名前:デフォルトの名無しさん sage 投稿日:04/03/25 13:50
>>939
そのやり方だと、フォーカス当てた後にDoEventsを何個か入れないと間に合わない。

941 名前:933補足 投稿日:04/03/25 15:05
DoEventsですか
なるほど。
いずれにしましてもUNIX側の稼働率や回線のコンディションで
希に文字を送りきれない不具合になっているので
別の方法を考えたほうがよさそげですね

それとEnd Functionは End Subの誤りです

942 名前:デフォルトの名無しさん sage 投稿日:04/03/25 15:11
>>941
だな、入出力をエミューするのではなく、通信コマンドとして直接送受信しないと安定しないだろうね。

943 名前:教えてください。。@初心者です。 投稿日:04/03/25 17:46
VB6です。

作ったアプリを常に最前面に表示させてたいのですが、
VBから他のアプリの制御って可能なのでしょうか?
方法を教えてください。。

もし無理ならAPIでもいいのですが・・・・・

よろしくお願いします。。
944 名前:デフォルトの名無しさん sage 投稿日:04/03/25 18:00
SetWindowPos

945 名前:教えてください。。@初心者です。 投稿日:04/03/25 18:18
>>944さん
ありがとうございます!!
やってみます!!

946 名前:デフォルトの名無しさん 投稿日:04/03/25 18:49
感謝するのは早いと思うよ。
だってSetWindowPosなんて>>943に書いてあるようなことには使えないから。

とにかく多すぎるんだよ、>>944みたいな人を糠喜びさせるものでしかない
おたんちんなレスが。

947 名前:デフォルトの名無しさん sage 投稿日:04/03/25 18:55
>>946
スレ違い。
キチガイアンチはうざいからでてってね。

948 名前:デフォルトの名無しさん sage 投稿日:04/03/25 18:55
>>946
何が悪いのかよくわからないなぁ。
ウィンドウハンドル取得できれば別に問題無いのでは。
それとも、ウィンドウの列挙と、プロセスの列挙の方法も教えないと駄目ってこと?
949 名前:デフォルトの名無しさん sage 投稿日:04/03/25 20:03
>>948
 >>943 で示している用件をどう受け取っているかの
違いだと思うのですが。
 他のアプリのウィンドウを制御して、相対的に自分の
アプリを一番上に持ってきたいと書いてある様に受け取れる。
 やりたい事とやりたい方法をごっちゃにしている悪い例
じゃないかなぁ。
 やりたい事を取り出せば、944になるよなぁ。
 やりたい方法が出来なければ駄目、ってのは視野狭窄以外の
何物でもないです。
 946 = 「やりたい方法が出来ないじゃないか!!」だろう。

950 名前:デフォルトの名無しさん 投稿日:04/03/25 20:20
WebBrowserコントロールを使って、自動ログインツールを作ろうと思ってるのですが、
ホームページ上のテキストボックスにIDとパスワードを入力しなければなりません。
調べてみると、WebBrowser.Document.All.xxx.valueという方法があるらしいのですが、
そのページがフレーム使用なためか、うまくいきません。
なので、ページの読み込みが完了したら、プログラムにSendKeysでIDを送ろうと思うのですが、
これもうまくいきませんでした。
プログラム上のコントロールにキー入力を送る上手い方法はないでしょうか。

分かる方いらっしゃいましたら、ご教授願います。
VB6.0です。
951 名前:931 投稿日:04/03/25 22:54
>>942
そーなんですよー
それにこのコードだと というか 多分仕様だと思うんですが
Redlectionコンポーネントにプロパティが少なくて
Visibleくらいしかコントロールを制御できなくて
センドキー送ってる間にユーザーがフォーカス他に移すと
キー命令がヨソ飛んでちゃいます。だからって
可視 見えなくしたりフォーム使えなくするとセットフォーカス時に
エラーになってしまう。
なんとかCInterNetSessionみたいな接続方でDCLコマンドを起動する事が
できないかと思案してます

952 名前:デフォルトの名無しさん sage 投稿日:04/03/25 23:17
良くわかんないけどFTPで出来るんならFTPでやったら?
Inetコントロール使うなりなんなりで。FTPクラスとか落ちてるし。

953 名前:デフォルトの名無しさん sage 投稿日:04/03/26 02:19
2次元の配列を用意します。それにはいくつかデータがはいっています。
それの中の1つを消したら、後ろの方のデータをつめていく。
というようなことはどう書けばいいのでしょうか?へたな文章ですいません。

また、if ぶんの条件式にfor文を組み合わせることはできるのでしょうか?
if for i 1 to 10 ・・・then のように。
954 名前:デフォルトの名無しさん sage 投稿日:04/03/26 03:47
>>953
1つずつ代入
組み合わせ可能  ←やってみればすぐわかることをいちいち聞くな。

955 名前:デフォルトの名無しさん sage 投稿日:04/03/26 06:00
>>950
こんな感じでいいか?

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "http://homepage2.nifty.com/winfaq/"
Do While ie.Busy
Loop

With ie.Document.frames.Item(0).Document.Forms.Item(0)
.Item("query").Value = "文字化け"
.submit
End With


956 名前:デフォルトの名無しさん sage 投稿日:04/03/26 06:46
>>955
ひでえな。実在するURLでテストコード出すなよ!何考えてるんだ!
957 名前:デフォルトの名無しさん 投稿日:04/03/26 11:09
開発者向けのツールをInputManを使って作ったとします。
InputManが入っているか、いないか解らない環境へセットアップする場合
入っていた場合の開発環境へ影響を与えないようにインストーラーを作成する事ってできます?




958 名前:デフォルトの名無しさん sage 投稿日:04/03/26 11:26
>>957
インストーラを作るのに何を使うかによるけど。
InstallStudioとかだと、ファイルの上書き挙動を指定できる。
(日付比較、バージョン比較で上書きとか、無条件で上書きとか、絶対上書きしないとか)

VB付属のウィザードの場合、ソース添付だからそれを見れば?(VBでやってるよね)

959 名前:デフォルトの名無しさん 投稿日:04/03/26 11:35
>>957
フォルダ作ってそこにInputManのOCXとDLL入れてパス通せば問題ないのでは?


960 名前:デフォルトの名無しさん sage 投稿日:04/03/26 11:36
>>959
OCXはREGSVRなどでのレジストが必要でしょ。
961 名前:デフォルトの名無しさん 投稿日:04/03/26 11:42
dim adoCon as Object
Set adoCon = CreateObject("ADODB.Connection")
とセットしたときのadoCon.CommandTimeoutの値に
デフォルトで'30'が設定されていますが、これを'60'に変えたいのですが、
adoCon.CommandTimeout=60
と書かなくても設定できる方法はありますか?
宣言された地点で60が入ってる状態希望なんですが・・。
数百個のSQLでタイムアウトになってしまい困っています。

962 名前:デフォルトの名無しさん 投稿日:04/03/26 11:43
>>960
インストールシールドなら設定でやってくれるのだが・・。
インストーラによるかな。

963 名前:デフォルトの名無しさん sage 投稿日:04/03/26 11:46
>>961
毎回セッションのCreateObjectをしてるんでしょうか?
でもそんなの何百程度だったら、検索して下に入れてけば?

コネクションって別に毎回開かないよな。
Webアプリでもプーリングするだろうし。

964 名前:デフォルトの名無しさん 投稿日:04/03/26 11:56
>>963
CreateObjectしているものもあれば
ado宣言してるものもあり、Openで使うコネクションがDLL化されていて
Setされているため値が変更できなくなってるなど。
おまけにこんなPGが200ほどあって・・。
すべて変更しなければならず、おまけに今日中。
やっぱ地道にやるしかないのかなー。
965 名前:デフォルトの名無しさん sage 投稿日:04/03/26 12:01
>>964
レジストリ書き換えれば?
ここに詳細がのってる。
http://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado.asp

966 名前:デフォルトの名無しさん sage 投稿日:04/03/26 12:01
>>964
まあ、今日の仕事であれば、機械の体になってやるしかないんじゃないか?

最終的に、破綻すると思うよ。
そんなに時間がかかるSQLだらけってのはしょーもない。
根本的な見直しが必要だと・・・まあ誰もが思っていてもいえないんだろうね。
がんばってください。

967 名前:デフォルトの名無しさん 投稿日:04/03/26 12:37
>>958

InputManインストールすると以下のフォルダに各ファイルが配置されます。
C:\Program Files\InputMan65\Controls

仮に別のアプリのインストールでOCXを
バージョン比較で上書きと指定した場合は
上記フォルダのものを上書きするのでしょうか??


合わせて質問ですが
InstallShieldでインストーラ作成する時に
このOCXは指定したアプリだけでしか使わないという設定はできるでしょうか?

とにかく開発環境に影響を与えずにインストールできる方法が知りたいです。
よろしくお願いします
968 名前:デフォルトの名無しさん sage 投稿日:04/03/26 12:44
>>967
1つ目の方。
開発用インストールと実行用インストールでは確か違うので注意を。
後のインストーラーが何処に入れるかだと思うけど、上書きはしないはず。

2つ目。
WindowsXPはできるんだっけ?DLLHellとかで調べてみれば情報は腐るほどあるよ。

環境に影響を与えずというのはVBでは不可能です。
それが必須要件ならば、スタティックリンクできるツールを使いましょう。(VCとかDelとか)
どっちにしても、OCXはスタティックリンクできないから。

969 名前:953 sage 投稿日:04/03/26 12:48
>>954
レスありがとうございます。
if for 1 to 20 ・・・ thenのことですが、やってみてできなかったから聴いてるんです。
どうしても赤くなってしまいます。初心者ですいませんがもっと詳しく教えてください

970 名前:デフォルトの名無しさん sage 投稿日:04/03/26 12:50
>>969
まず、本屋にいってVB入門初級編を買って来い。
いろはの書き方を聞いてるレベルだぞ。

971 名前:953 sage 投稿日:04/03/26 12:58
>>970
2冊もってます。けど、それには書いてないんです。
972 名前:デフォルトの名無しさん sage 投稿日:04/03/26 13:07
VB入門書は糞ばっかだからなぁ。
ヘタに「1週間でマスター」みたいな本は止めて、しっかりと言語仕様解説してる本を選ぶべし。
で、仮にIf For 1 To 20って書き方ができるとして>953はどんな動作を期待してるんだ?
それは、Do〜Loop等の制御構造で代用できる物じゃないのか?


973 名前:デフォルトの名無しさん sage 投稿日:04/03/26 13:10
>>972
配列の各要素に対してIf文を適用したいんじゃないかな(予想)

974 名前:953 sage 投稿日:04/03/26 13:21
配列を削除したところから、あとの方のデータを1つづつくりあげると言う動作をしたいです。
975 名前:デフォルトの名無しさん sage 投稿日:04/03/26 13:33
>>974
構造体の配列にして、実削除をせずに削除フラグを立てれば?

type hoge
data as string
flag as boolean
end type

aaa[] as hoge

for i = 0 to xx
if aaa[i].flag = true '削除済みデータ

endif
next

あとは、単純に配列にせずに単方向リストで作るとか。

言葉がわからなければ、ネットで調べるか、プログラムの基礎を勉強。
976 名前:950 投稿日:04/03/26 16:59
>>955
解答ありがとうございます。

この方法で試してみたんですが、アクセスが拒否された。とエラーが出ます。
ネットで調べてみたんですが、この場合無理みたいですね…。
あきらめるしかないんでしょうか。

977 名前:デフォルトの名無しさん sage 投稿日:04/03/26 18:18
次スレまだーチンチン

978 名前:デフォルトの名無しさん sage 投稿日:04/03/26 18:29
>>977
とっくに
VBプログラマ質問スレ(6.0以前) Part33
http://pc5.2ch.net/test/read.cgi/tech/1080223005/

===
ここまで
※ログぶっ飛んでるので新スレは存在しません
955デフォルトの名無しさん:04/03/29 17:18
VBのListBoxの指定した項目を
コマンドボタンで上下させたいのですが
どうすればよいのでしょうか

(難民板から移動)
せっかく答えてもらえたのに 消えてなくなった

List1.SetFocus
SendKeys "{DOWN}", True
またはSelected回す
958デフォルトの名無しさん:04/03/29 21:43
環境:Windows2000ProでVB6sp5

質問なんですけど、Accessで.mbdファイルを開いたままVBからDAOでアクセスすると
共有違反でエラーが出ます。
第二引数、第三引数をTrue,Falseなど、色々やってみましたがダメです。
たしか前はできたと思うんですけど・・・
詳しい方おりましたら、よろしくお願いします。
959デフォルトの名無しさん:04/03/29 21:48
発想を逆転させるんだ。
960598:04/03/29 22:06
>>959
発送の逆転でちゃんとできました。
ありがとう!
961955:04/03/30 13:37
>>957
項目の位置を移動させたいのです
>>961
ボタンがクリックされたらリストの中の選択状態をチェックして選択されたリストインデックスのテキストや付随するデータを上の行や下の行のものと入れ替える。
なんかスレの状態がおかしくね?
まだ安定してないのかな。
964デフォルトの名無しさん:04/03/30 15:20
724 名前:毎度すみません :04/03/30 15:19
【板名】プログラム
【板のURL】http://pc5.2ch.net/tech/
【スレタイトル】VBプログラマ質問スレ(6.0以前) Part32
【スレのURL】http://pc5.2ch.net/test/read.cgi/tech/1077216109/
【名前】955
【本文】
>>962
ありがとうございます
「移動」ではなく「データの入れ替え」という発想ですか

-------------------------------------------------
オラさん 毎度ありがとうございます
965955:04/03/30 20:45
>>962
ありがとうございます
「移動」ではなく「データの入れ替え」という発想ですか
Oracle+oo4o+VB6.0で開発しています。
30万件のデータがあり、その中のDATE型カラムの値を
2004/03/01〜2004/03/25までを抽出したい
といった場合、どのようにやるのが高速に処理できるでしょうか?
今はto_char()してやっていますがとても遅いです。
試しにインデックスを張ってみましたが変化なしでした。
>>966
INDEXは計算・変換された項目に対しては適用されません。(バージョンに夜かな?)
なので、(要点だけ書きますが)

TO_CHAR(元カラム) BETWEEN '比較始点' AND '比較終点'
では、インデックスが使われない

元カラム BETWEEN TO_DATE('比較始点') AND TO_DATE( '比較終点')
なら使うはず。

あと、インデックスが期待通り使われているかはPLANを見るようにしてみて。
>>967
なるほどー
TO_DATEでやってみます。結果は後ほど
>>967
激速になりました。多謝
970デフォルトの名無しさん:04/03/31 14:50
ActiveXプロジェクトが「新しいプロジェクト」ダイアローグにありません
どうすればActiveXプロジェクトを作れますか
971デフォルトの名無しさん:04/03/31 15:02
 
972デフォルトの名無しさん:04/03/31 15:42
Visual Studio 6.0 Service Pack 6公開〜
973デフォルトの名無しさん:04/03/31 17:16
PowerGres絡みでの質問です。
(1)PowerGresへVBからODBCを使用してADO経由で接続する。
(2)必要処理(PowerGresのプロシージャを実行)を行う。
(3)切断する。
上記(1)〜(3)を繰返し行うと、
ある所(決まった回数では無い)で、
プロシージャ実行時に
「Parse ERROR at near;」
というエラーが発生して、異常終了してしまいます。
何か情報をお持ちの方は、教えて下さい。
>>973
エラーに対する情報が欲しい場合は、きちんとエラーの内容を書く。
(誰が吐いたエラーかとか)

あと、PowerGresってODBCも製品に込みだっけ?
サポートに聞いてみるのが早いんじゃないの?
割れだからサポートに聞けません
割れでもここだったら問題ないと思ったのかな?
>>976 どうせ偽物なんだからほうっておけよ。
今日VBをはじめたんですが(VB6.0です)
一つの画面で複数のフォームを呼び出すことは可能ですか?
教えてください
>>978
貴方の言う一つの画面とやらが何を意味するかわからないのですが、
Alt+P,Alt+Fで出てくるアレか、
↓こんなコードでできるソレの事ですか?

Dim AForm As New Form1
Dim BForm As New Form1

AForm.Show
BForm.Show
980デフォルトの名無しさん:04/03/31 23:51
ボタンを押した時あるアドレスの値を変更するプログラムを作りたいのですが、
何か簡単な方法はないですか?

例、004914E2 02 ボタンクリック→004914E2 07
>>980
Game Cheaterなら専用のを使った方が安全だよ。
982デフォルトの名無しさん:04/04/01 00:01
>>980

それがですね、プロセスエディタでアプリ起動ごとに値を変更せんといかんのです・・・
それが面倒なので、一度そういうの作れば楽かと・・・
すいません、質問です。
OCXモジュールの作成ができるのは、
VB4からだったでしょうか、VB5からでしょうか?
984978:04/04/01 22:18
>>979
えーっと
ボタンを押しても2つウインドウがでるわけじゃなくて
一つのウインドウだけで動かしたりできますか??
>>978
たとえばどんなソフトのようにしたいんだ?お前は人に説明しようという気持ちはあるのか?
MDIの事言ってるのかな?
説明がわからないんでなんとも言えないが。
WEBのブラウザみたいに、
ページを切り替えても新しいウィンドウを開きたくないんじゃないかな?
SP6いつの間に
989デフォルトの名無しさん:04/04/03 12:02
すいません。
特定のWebページを保存するプログラムって簡単に書けますか?
VBSで書けると助かります。

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

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

何卒宜しくお願い致します。
VBSはようしらんけどURLDownloadToFileというAPIが環境依存で使える。
991デフォルトの名無しさん:04/04/03 23:42
オブジェクト指向まんせー。継承できないからクラス使わないというのは嘲笑の的
またまた。
継承できないなんて発言して厨の振りするのは今時流行りませんよ。
>>992
継承できるの?
ヘルプ嫁
フォームとかテキストボックスとか
レコードセットとか、普通にクラス使っているけどな。
>>991は、VBにクラスがある。カプセル化できる。
インターフェース継承もできる。
こんなに便利なのに、実装継承できないだけで使わない
(自分で作成しない)のはもったいないって言ってるんでしょ?

使うだけなら誰でも使っているし、
クラスは当たり前だけど便利だよ。
俺もよく作っているよ。
997
998
で、次スレはどうするの?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。