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

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

前スレはこちら
  Part20 http://pc2.2ch.net/tech/kako/1041/10418/1041879465.html
  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/

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

心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
五.荒らしは相手しない。
六. VB情報募集中。
七.VB.NETの話題できるだけひかえる。
2デフォルトの名無しさん:04/01/10 20:04
あれ、まだVBなんてしている人っていたんだ。
五.荒らしは相手しない。
5デフォルトの名無しさん:04/01/11 08:59
インストーラーの選定で迷っていまして
聞きたいことがいくつかあります。
今まではディストリビュージョンウィザードとVisualStudioInstallerを少し使った事ある程度です。

GrapeCityのInstall Studio 7.1JでWindowsXP対応と書いてありますけど
試用版の7.0を7.1にできなかったので、誰か実際に使っている人いませんか?
(次バージョンとか出る予定あるのかな?)
あとこれができないとか、不満とかありましたら教えてください。

Install Shield は新しいのが年末に出たみたいですね
試用版はこれから試してみるところですが
VB6(SP5)とGrapeCityのOCX で作ったものを
異なるOS(ME/2000/XP)に入れたい場合 InstallShield Express5.0で十分でしょうか?
(理解できていればフリーのインストーラでもできるのでしょうか?)
6デフォルトの名無しさん:04/01/12 17:48
すいません。最近プログラムの勉強を始めたばかりなのですが、
「スクリプト」とは何なのでしょうか?プログラムのこととは違うのでしょうか?
VBとVBスクリプトの違いについても教えてください。
初心者なので、簡単に説明してくださるとありがたいです。
8デフォルトの名無しさん :04/01/12 18:14
for nextを使って
http://www.hyou.net/ka/kuku.htm
このようなかけ算の表をコマンドボタンを押すと表示するプログラムを作りたいんですが
縦一列にしか表示できません。
VBの癖にプログラマとはおめでたいですね
VB も使えない、君よりはましだろ。
11デフォルトの名無しさん:04/01/12 22:18
質問です。
複数の変数をまとめて宣言した場合、
その変数をByRefで、ファンクションに渡すことができません。

Dim hoge1,hoge2 as Integer の変数の宣言の仕方は、
単に
Dim hoge1 as Integer
Dim hoge2 as Integer
をまとめて記述したもの、ではないということなのでしょうか。


コードで書くと、
-------------------------------
Dim hoge1,hoge2 as Integer

Function funcAA(pHoge1 as Integer,pHoge2 as Integer)
funcAA = hoge1 + hoge2
End Function


hoge1,hoge2をfuncAAに渡そうとすると、
「byRef引数の型が一致しません」とエラーになります。


ByValでは、渡せたのですが、
なぜ、ByRefで渡せないのか、教えて頂けないでしょうか。
この手のスレには必ずジャイアンのようなことを言う
輩が出てくるな。○○のくせにって。
ったく厨房じゃあるまいし。
>>11
勘で書くと、hoge1 が Variant になってるヨカーン。
14デフォルトの名無しさん:04/01/13 00:12
これ↓をエクセルのマクロでやるにはどうすればいいのでしょうか?当方何も分かりませんので、どなたか教えていただけないでしょうか?
ある小売店では、1日 10,000円以上で10パーセント
          10,000円未満で5パーセント
          のポイントを付ける。

清算金額を入力して、ポイントを計算する関数を作りなさい。
1511:04/01/13 00:43
>>13
おっしゃる通りhoge1をVariant型で受け取ると、うまくいきました。
Dim hoge1,hoge2,hoge3 as Integer というふうに、
複数の変数をまとめて宣言した場合は、
宣言した型になるのは一番後に記述した変数だけ、みたいですね。

ありがとうございました。
16デフォルトの名無しさん:04/01/13 00:56
6ですがVBスクリプトはインターネットエクスプローラー上で
動作すると書いてますが、ブラウザ上でしか動作しないんですか?
頻繁に聞くんですが・・・
17広島寺行:04/01/13 01:35
<清算金額への返信>
Sub 清算金額()
Dim which As Integer
which = Range("A1").Value 'セルの買上金額を代入
Select Case Not IsNull(which)
Case which >= 10000    'セルの買上金額10000円以上
which = which * 0.1
Case (which < 10000) And (which>0) 'セルの金額0円以上10000円未満
which = which * 0.05
End Select
Range("A2").Value = which
End Sub

以上
※Range("A1").Value=>A1は清算金額セルの位置=>別にどこの値でもよい。
Range("A1").Value=>A2はポイント金額
とにかく、清算金額とポイント金額を分かるセル位置にすべし。
清算金額とポイント金額のセルは、入力規則を出来れば0以上の整数にすべし。
私はちなみにド素人です。ですので、あまり期待は出来ませんが。

18広島寺行:04/01/13 01:39
すみませんが、競馬レースの賞金をACCESSのVBAで行いたいのです。
数値を、左から3桁目を四捨五入するやり方を知っていますか?
知っていたらメールでも掲示板でもいいですからください。
コードはAccessVBAです!
19デフォルトの名無しさん:04/01/13 12:15
function Culc_Syokin(Kingaku as long ) as long '賞金はlong型でいいっすか?
dim stKingaku as string
dim stSanKeta as string

stkingaku = cstr(kingaku)
stSanKeta = left(Kingaku,3)
if cint(right(stsanketa,1)) < 5 then
else
stsanketa = cstr(cint(stsanketa) + 1)
endif
stkingaku = stsanketa & right(stkingaku,len(stkingaku)-3)
Culc_Syokin = clng(stkingaku)

end function


20デフォルトの名無しさん:04/01/13 12:18
ところで、OSがWindows2000、VB6.0でこさえたプログラムを
XPに持っていったとき、
なぜかラベルの表示がずれてしまったんだけど、
そういう場合、どうしたらいいか、誰かご存知ないですか?
21山太郎:04/01/13 12:46
>16
ASPなんかではサーバサイドで動くよ。
あとWSHとしてWindows上で動かす事もできる。
ASP、WSHとかでぐぐってみてけろ
>16
拡張子をVBSにすれば最近のOSなら動くよ。
それでマクロウィルスとか作られるわけですが。
>20
標準のフォントが違うとか日本語化DLLが入ってないとかそんな事無い?
明示的にフォント指定してみたらどうかな。
それからVBとVBSは文法はそっくりだが違う言語ですので、
それを忘れないでね。VBSには6とか5とか無いよ。
>>24
> VBSには6とか5とか無いよ。

まあ確かに 6 とか 5 はないが、1.0〜5.6 まで取り揃えられてるわけだが。

http://www.asia.microsoft.com/japan/msdn/library/ja/script56/html/vtoriVersionInformation.asp
26301 ◆si65ga2MW6 :04/01/15 09:35
>>19
 As Currency の方が適当かと。
 Longで収まらなかったら遊んで暮らせる訳ですが、夢は大きく( ´ー`)y-~~~~
Longの最高値は21億ちょいだろ。 21億もあったら………いいなぁ。
28デフォルトの名無しさん:04/01/15 10:12
個人の金の取り扱いならLongでいいけど、会社の金ならCurrencyだな。
オーバーフローした時に、客を舐めてると思われかねない。

なに!うちの売り上げが21億以下だと想定してたのか?!
29301 ◆si65ga2MW6 :04/01/15 10:42
>>28
 あるある。
 納品→運用開始後、集計表の合計桁が足りなくって慌てて広げたり。

 プログラム定石
 「相手が要求する桁に+1桁余裕を持って設計する」
「マイナス符号+相手が要求する桁+1桁余裕を持って設計する」
わかっていても、後から追加された集計フィールドとかでやっちゃうんだよな。
32301 ◆si65ga2MW6 :04/01/15 19:14
>>31
用紙幅の制約とかあるし。
文字が小さいと怒る40代後半組管理職な人も多いし。
WINxpにVB6.0をインストールしようとすると
問題が発生したため、vs60wiz.exe を終了します。
ご不便をおかけして申し訳ありません。と出てインストールできません。
どなたか解決法がわかる人いませんでしょうか?5.0を前にインストールすることは
できたのですが6.0だけはなぜかできません。わかる方いましたらよろしくお願いします。
このエラー報告には以下のファイルが含まれていますとでてました。
C\〜\LOCALS~1\Temp\WER9.tmp.dir00\appcompat.txt
ボタンを押すとディレクトリ内のTXTファイルをメモ帳で立ち上げれるようにしたいのですが、
どうすればよいでしょうか?
質問です。
文字列連結を行う場合、

@ 
Dim strBuf as String

strBuf = "A"
strBuf = strBuf & "B"
         :
         :
strBuf = strBuf & "Z"

A
Dim strBuf as String

strBuf = "A" & _
      "B" & _
          :
          :
      "Z"

とではどちらが高速なのでしょうか?
>>34
shell notepad テキストのパス
>>36
shell notepad readme.txtでいいのですか?
>>37
そんな感じだけど、聞く前にMSDN読めやモルァ!!
>35
さぁ、知らんけど多分2.1は遅い。

取りあえず最速なのはこうだ。
Dim strBuf as string
Din nLength as long

nLength = Len(StringA) + Len(StringB) + .. +Len(StringZ).
strBuf = String(nLength, " ")
Mid$(strBuf, 1, len(StringA)=StringA
Mid$(strBuf, ,len(StringA + 1, Len(StringB) ) = StringB
...

文字列操作で遅いのは長さが変わるときなので、長さを変えないようにすればよい。

何回やってもエラーが出る。
なんでだろ。
ヘルプ読み返してきます。
>>39
うはぁ、それの方が遅そうじゃない?
MidとLen駆使して、文字列置換なんて・・・
つーか、そのコード動くの?

2ならコンパイラが上手い事やってくれてそうだけどなぁ。
>>41
無茶早いって。
2なんてループとかじゃ使えないしあんまり実用的じゃないでしょ。
1000行ぐらいになると断然違うよ。
結局遅いのは文字列のリサイズ、特に長い文字列のリサイズ。
mallocガ遅いんだろうな。
俺の作ってるソフトのセーブファイル、テキスト形式で30Kぐらいだけど、1000倍は違うぞ。
ちなみに39のコードは括弧があってないところがあるからそのままじゃ動かんけど、
Midに代入は可能。
VBではLenはメモリアクセス一回(CのSTRLENと違って毎回長さを調べてるわけではなくて、
長さは常に計算されていてそれを取り出すだけ)だから早い。
数字の計算速度/メモリコピーの速度>>>>>>メモリ確保速度だから、かなり数値を扱うことが
増えてもMIDでの代入(=メモリコピー)でやったほうが文字列をリサイズするよりは早いよ。
騙されたと思ってやってみ。
>>42
( ´・∀・`) ヘー
明日ベンチとってみよ。
>>20
Win2000以前とWinXPでフォント周りの仕様が変更されたのが原因。

下記の「半角 2 文字と全角 1 文字の幅が揃わないのですが」を参照。
ttp://homepage2.nifty.com/winfaq/c/hints.html#569
>>35みたいな、自分でループまわして試せば
一発で分かることを、他人に聞くやつってなんなんだろーね・・・・
まーそれはさておき、>>39の内容が気になったのでコード書いてみた。
面倒なのでStringAからStringEまでしか用意しなかったのはご容赦。

Private Const lngMax As Long = 100000
Private Const stringA As String = "AAAAA"
Private Const stringB As String = "BBBBB"
Private Const stringC As String = "CCCCC"
Private Const stringD As String = "DDDDD"
Private Const stringE As String = "EEEEE"

Private Sub Command1_Click()
Dim i As Long
Dim strBuf As String
Dim nLength As Long
Dim sngST As Single

sngST = Timer
For i = 1 To lngMax
nLength = Len(stringA) + Len(stringB) + Len(stringC) + Len(stringD) + Len(stringE)
strBuf = String(nLength, " ")
Mid$(strBuf, 1, Len(stringA)) = stringA
Mid$(strBuf, Len(stringA) + 1, Len(stringB)) = stringB
Mid$(strBuf, Len(stringA) + Len(stringB) + 1, Len(stringC)) = stringC
Mid$(strBuf, Len(stringA) + Len(stringB) + Len(stringC) + 1, Len(stringD)) = stringD
Mid$(strBuf, Len(stringA) + Len(stringB) + Len(stringC) + Len(stringD) + 1, Len(stringE)) = stringE
Next
Debug.Print "(1)=" & Timer - sngST
4645:04/01/16 09:42
続き。

sngST = Timer
For i = 1 To lngMax
strBuf = stringA & stringB & stringC & stringD & stringE
Next
Debug.Print "(2)=" & Timer - sngST

sngST = Timer
For i = 1 To lngMax
strBuf = stringA
strBuf = strBuf & stringB
strBuf = strBuf & stringC
strBuf = strBuf & stringD
strBuf = strBuf & stringE
Next
Debug.Print "(3)=" & Timer - sngST
End Sub

結果は
(1)=0.21875
(2)=0.125
(3)=0.15625

で、どうも>>39の言ってるコードが一番遅いようなのだが?
IDE実行じゃなくEXE化してもたいして変わらず。
4745:04/01/16 09:46
書き忘れ。
文字列の長さや個数、長さ計算時の値の保持などで
結果が変わってくるなら指摘してくれ >39
俺のコーディングミス、テスト方法ミスの可能性もあるしね。。。
>>45
もっと長い文字列でもっと多くの結合を行うと >>39 の方が速いみたい。

4945:04/01/16 13:48
なるほど、各文字列を10000文字の長さにした場合は、下記のようになった。

(1)=13.98828
(2)=35.67578
(3)=88.05078

ケースバイケースってことだな。
しかし、たしかに長くなればなるほど効果が出てくるのかもしれんが・・・・
でもいくらなんでも、1000倍(>>42)ってことはないんじゃないか?w
50デフォルトの名無しさん:04/01/16 14:21
C言語で記述された構造体を、VBでの形式に変換、または
変換を支援するようなツールはありませんか?
.hファイルのstructを、VBのstruct形式に変換したいんです。
よろしくお願いします。
参照設定の
Visual Basic runtime objects and procedures の項目で
場所 C:\WINNT\system32\msvbvm60.dll\3 とあるのですが、

この \3 て何を表してるんでしょうか?
>>50
確認しながら自分でやったほうが、最終的に早いと思うよ。

VBの型からCの型ならば結構自動化できそうだけど、逆は結構めんどそう。
C言語自体の許容範囲の広さで、同じことでもいろいろな記述ができるし、
そもそもVBで実現できない概念もあるし。
>>52
そうですか・・・。int → longとか、単純な部分だけでも
なんとかならないかなーと思ったんですが。
結局、置換しまくりでやっちゃいました f(^^;) サンクスコ
54デフォルトの名無しさん:04/01/16 23:51
コード上から、「HTMLをブラウザで開いた状態の文字」を取得
って出来ないですか?

例えば、ブラウザ上で、「あいうえお」と書いてあって、
フォントタグなんかで一文字ずつ色をかえてあるとして、
これをコピーしてExcelにペーストすると、テキストだけじゃなく、
色まで取得して貼り付くじゃないですか。

これをコード上からやりたいんですが。
5539:04/01/16 23:58
すまん、変な手間かけさせちゃったな。
長い文字列を何度も足すのがおそいっつー話でして。
10文字ずつ1万回足してみよう。

Option Explicit

Private Sub Command1_Click()
Dim strLong As String
Dim strOne As String
Dim Index As Long
Dim LastTimer As Double
strOne = "AAAAAAAAAA"
LastTimer = Timer
For Index = 1 To 10000
strLong = strLong + strOne
Next
Command1.Caption = Timer - LastTimer
End Sub

5635:04/01/16 23:58
Private Sub Command2_Click()
Dim strLong As String
Dim strOne As String
Dim Index As Long
Dim LastTimer As Double
Dim nLength As Long
Dim nPoint As Long
strOne = "AAAAAAAAAA"
LastTimer = Timer
For Index = 1 To 10000
nLength = nLength + Len(strOne)
Next
strLong = String(nLength, " ")
For Index = 1 To 10000
Mid$(strLong, nPoint + 1, Len(strOne)) = strOne
nPoint = nPoint + Len(strOne)
Next
Command2.Caption = Timer - LastTimer
Debug.Print strLong
End Sub
1000倍違ったぞ。9秒と1ミリ秒。
早いほうは早すぎて確認のためにデバッグ文まで入れてもた
当たり前だろ
5939:04/01/17 00:01
>>55-57 は俺です。
名前代わりまくりでスマン。
3は「長い文字列の長さを変えると遅いので、少しづつ足すのはすごく遅いよ」って話でした。
>>54
ペーストするならクリップボードにHTML形式のデータが
入っているかどうか確かめて、それをレンダリングすればよい。
コピーするなら、クリップボードにコピーするときにHTML形式を指定して
HTMLを入れればよい。
Clipbordのヘルプを睨みつけてみては。
6139ではないがフォロー:04/01/17 00:03
>>45
>For i = 1 To lngMax
>nLength = Len(stringA) + Len(stringB) + Len(stringC) + Len(stringD) + Len(stringE)
>strBuf = String(nLength, " ")

文字列を格納する領域の確保が遅いのだから、この処理はループの外へ出すのでは。
39の言っている通りなら、確保する領域の大きさが事前に分かっているという前提でなら
速いような気がする。まだ試してないけど。
俺は、速さを求めるなら、素直にDLLで外だししちゃうな。
_| ̄|○ 一歩遅かったー
6339:04/01/17 00:11
DLLに出さなくていいぐらい早くなるから試してミソ
正規表現の置換なのですが、
「あいうえおあえいうおあえいうえおあ」という文で
「あ.*う」を「×」に置換させようとすると
「×えおあ」となってしまいます。

「×えお×お×えおあ」というようにしたいのですが、
「あ.*う」という書き方が悪いのでしょうか。
GlobalとTestを使うのかなあと思って色々触っているのですが・・・
そりゃ最長一致と最短一致の問題だ。
ライブラリの説明見てみんとと分からんが、その辺でチェックすべし。
>65
早いレスを有難うございました。
早速探してきます。
>65
64に書いたやりたかった処理でできました。
私が書いたのは最長一致で
「あ.*?う」と書かないかんかったようです。
どうもありがとうございました。
>>61
DLLにしたらなんでも速くなるってもんじゃないぞ。
どうせVBの文字列型を使うんだからめんどくさくなるだけ。
というかVBの標準関数はDLLという罠
昔シミュレーションゲームを作った。大戦略みたいなの。
思考ルーチンをどうしても早くしたくて、いろいろやった。
具体的には勢力範囲計算用の歩数カウントプログラム。
結局100倍程度苦労して早くした。
DLLにしたらさらに200倍早くなった。
これは完全に純粋な計算ルーチンだったからな。

それから今度は画像を大量に使う奴をやはり高速化したくて
DLLにした。つかVCで作り直した。ほとんど早くならなかった。
律速しているのが描画ルーチンだったのだから当たり前。

同様に、文字列の操作も、35みたいにすれば律速しているところは
ほぼメモリコピーとMallocと思われるのであまり変わらんと思うな。
文字列のネタ作るのはVBのほうが楽だし。
VBで使うUnicodeの文字列をCで扱うのはだるいしな。
変換で遅くなるんじゃ本末転倒だし。
7170:04/01/17 01:09
思い返してみれば、歩数カウントルーチンにはインクリメントが
多かったな。
それが速度の違いになったんかなぁ、などと思ってみた。
VBもコンパイラオプションをいじれば
インクリメントは単純なincだけになったはずだよ。
デフォではオーバーフローのトラップなどでincだけにできない。
>>54
shdocvwを参照設定して ShellWindows を
74デフォルトの名無しさん:04/01/17 10:21
C++でプログラムを作っていたんですが
VBのほうが扱いやすいのでふたたび
VBに乗り換えました。しかし、クラスとかの扱い方が
よくわからず困ってます。
VBでクラスを扱う場合どのような手順でやればいいのか教えてください
>>74
クラスモジュールとしてファイルを作成すればそれがクラス。
あとはそこにメソッドなりプロパティなり書けばいい。
76素人K:04/01/17 15:45
ここは専門的な質問のみでしょうか?
学校の宿題を聞いてはいけませんか?
すみません
VBでプログラムの勉強をしているんですが、まだ98を使ってやっています。
2000にアップグレードしようと思っているんですが、何か不具合がでますでしょうか?
セキュリティでなんか出ちゃうんじゃとびくびくものなんです。
プログラミングするときに必要なセキュリティ関係の
書籍なり情報を教えていただけると幸いです。
>>76
宿題は宿題スレへ。
処理を絞った具体的な質問ができるのなら、ココでも良いと思われ。
79デフォルトの名無しさん:04/01/17 17:28
>>75
ありがとうございました
>>77
全然意味わからん。
8177:04/01/17 18:01
>>80
意味不明ですいません
98だと特にユーザアカウントとか気にしてないですけど
(しないといけないのかもしれませんが)
2000だと気にする必要があるのかということです。
たぶんそのユーザのアクセス権の中で使うんだろうと思うんですけど、
例えばプログラムの中でなにか取得するのか、
それともCOMのように設定するのか
プログラムに対してアクセス権設定でするのか
べつに気にしなくてもいいのかと言うことです。
>>81
そんな面倒な設定必要無いから安心しれ。
会社で使うんでないからアクセス権なんかどうにでもなるし。
>>33
最新のServicePackを入れれば治る。
>>81
アクセスできない機能でエラーになるだけ。
たとえば、制限されたユーザではc:\winnt\とかのファイルを読もうとすると
エラーになったり、Dateステートメントへの代入(日時の変更)でエラーになる。

プログラムでできたり回避できたりしたらアクセス権の意味が無い。
まあ、一時的に管理者権限に移行して日時を変えて戻るということも
出来なくは無いが。

その場合はユーザーにその場でパスワードとか入力するようにしてね。
入力の手間を省くためにパスワードをテキストファイルにそのまま書いたら
セキュリティの意味が無いから。
8577:04/01/17 22:54
ありがとうございました。
Win2000を一緒に勉強していて、
実際にAdmin権限でプログラム動かしてもいいものだろうかと疑問に思ったのが最初でして、
SQLServerだとユーザーとパスを入れてるので、それと同じ機能があるのかなと思ったのです。

必要なファイルをフォルダ入れて、そこに権限を与えればよいかなと
ただ、システムファイルを使うときに問題がありそうですね
でも基本的にはeveryoneにフルコントロールってとこでしょうか
うーん難しい。
テキストボックスに数字とバックスペースしか入力できなくするにはどうしたらいいですか?


初心者の質問ですいません。
87素人K:04/01/18 00:24
>>76です。
>>78
宿題スレを探してみたのですが、VBのものが見当たりません…
ある程度までは出来ているのですが、機械オンチなので最後の方が仕上がらないのです(><)
>>86
KeyPressイベントでKeyAsciiを調べる。
数字かバックスペースが来たときにKeyAsciiを0にしてやればよい。
後は頑張れ。
>>88
だから、それではCtrl+Vやマウスからのができないとあれほど(ry
数字だけ入れたいんならこう言う手もあるぞ。
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long

Public Sub SetTextboxOnlyNumber(inTextBox As TextBox, bSetOnlyNumber As Boolean = True)
Dim lngTextBoxStyle As Long

lngTextBoxStyle = GetWindowLong(inTextBox.hWnd, GWL_STYLE)
If bSetOnlyNumber = False Then
If lngTextBoxStyle And ES_NUMBER Then
lngTextBoxStyle = lngTextBoxStyle Xor ES_NUMBER
End If
Else
lngTextBoxStyle = lngTextBoxStyle Or ES_NUMBER
End If
Call SetWindowLong(inTextBox.hWnd, GWL_STYLE, lngTextBoxStyle)

End Sub
9190:04/01/18 01:47
定数定義を忘れてた。
Private Const ES_NUMBER = &H2000&
Private Const GWL_STYLE = -16
でもこれたしか負の数はできなかったような。
>>91
Private Const GWL_STYLE = (-16)
>>92
なにそれどういう意味?
94素人K:04/01/18 10:34
>>87ですけど、ここで聞かせていただいてよろしいですか?
>>78も書いてるけど、具体的にポイントを絞った質問なら許諾される可
能性あり。何が分からないのか分かりません‥‥みたいなのはやめれ。
96素人K:04/01/18 12:07
ありがとうございます。実は前にも書き込んだのですが、反応なかったのでダメなのかなぁと不安です。
ソースはここに貼ってあります。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&rm=50
どうか宜しくお願いいたします。
97素人K:04/01/18 12:08
番号入れ忘れました。
上のリンク先の176です。
VB上から、他のアプリケーションのウィンドウを
画面上の指定位置に移動したいんですが、
こうゆうことは可能でしょうか?
当然可能です
>>96
何だこれそんなに難しいか?
でも説明は面倒だなぁ。
四角を書いたり線を引くにはLineを使う。
Line (左上のX,左上のX)-(右下のX,右下のY),色,コマンド
コマンドは無しで線、Bで四角、BFで塗りつぶし四角。
四角を書くならLineを呼ぶだけ。
星型を書くなら、例に出ているよな頂点計算で、一つ飛ばして
線で結べばよい。
たとえば5角形なら、頂点が0,1,2,3,4とあるとすると、
0-1,1-2,2-3,3-4,4-5,5-0と線を引けば5角形だが、
0-2,1-3,2-4,3-5,4-0,5-1
と線を引けば星型になる。
つかこれぐらいなら質問している間にテキトーにガンガン書けば
その打ちできると思うよ。まず手を動かせ手を。
>98
SC_MOVE sendmessage
こんな感じで検索するといいのかな
102素人K:04/01/18 23:19
>>100
ありがとうございます。星型の理論は理解できました。
すいません、ホントに素人なんでチョットわかりません。Lineはflagなど使わないのでしょうか?
この授業今年から必修になったのですが、パソコンをいじった事がない僕には全然わかりません(T0T)
多分みなさんからしたら本当にくだらない質問なのでしょうね。
お願いします助けてください。
103デフォルトの名無しさん:04/01/18 23:26
ポーカーみたいなもんで、3つの枠に数字が入り、
これが役に当てはまっているかチェックしたいのですが、
こういうのは総当たりで調べるのが妥当なのですか?

例)
*枠
 3|1|2

*役
 1|2|3
 3|4|5
 6|7|8
 9|10|11
 12|13|14

全通り当たると時間がかかるので、何か良い方法があれば
教えて下さい。
>>102
悪いことは言わない。
先生に聞け。
105素人K:04/01/18 23:36
それが、この課題提出が明日なんですよ(泣)
前に聞きに行ったのですが、もう質問は受け付けられませんって
>>102
Flagとかいわれてもなぁ。
Picute1.line
とかこんな感じ。
BとかBFとか言うのがフラグといえばフラグだけど、
君が言っている意味では使わないよ。
もうちょっと詳しく書いておくか。
Picture1.Line (100,100)-(200,200),RGB(0,0,0),BF
これで黒い塗りつぶし四角がかけるよ。
Picture1.Line (100,100)-(200,200),RGB(0,0,0),B
これで黒い四角
Picture1.Line (100,100)-(200,200),RGB(0,0,0)
これで線だ。

>>103
役の法則性が全くわからんのでなんともいえんぞそんな例では。
カードの位置に意味があるかどうかすら、君の例ではわからん。
位置に意味がないのなら、取りあえず大きさ順に並べてチェックすれば
多少減るんじゃないの?

それから
> 全通り当たると時間がかかる
いまどきのマシンでカード3枚で「時間がかかる」なんてありえない。
君が全通り書くのが面倒なだけちゃうか。
109素人K:04/01/18 23:46
ホントにありがとうございます。
今、やってみました。
別の質問になるのですが、自宅PCでは無償バージョンのVBを使っているのですが、実行(開始)した時にFormウィンドウが開かなくて確認できないです。
これは何かの設定がおかしいのでしょうか?
>102
ぐだぐだ言わずに適当に書け。壊れやしないよ。
上手くいかないなと思ったら適当に変えてみれ。そのほうが早いぞ。
111デフォルトの名無しさん:04/01/18 23:50
すみませんがVBで簡単にUTF-8のテキストを編集する方法ってありますか?
ん〜ASC、unicodeはいいのですが
最近主流のUTF-8が・・・。
Openしても良い関数がないため文字化けするような気がします
エンコードする関数をゴリゴリなんて書けないので(汗
>109
無償バージョンのVB?そういえばそんなのあったかな。
使ったこと無いから知らん。
ステップ実行してみて、Form1.showとかそういうフォームを
表示するコードとおってるか確認してみたら?
Main()
というところに入っていくようなら、その中に
Form1.Show
を入れればよい。
っつーか宿題はもっと早くからやっとけ。
Form出無いなんて基礎中の基礎以前だろ。
>>111

UTF-8 VBで検索。即解決。
ttp://www.geocities.co.jp/SilkRoad/4511/vb/utf8.htm

まず検索するべし。
114素人K:04/01/18 23:54
すいません、忙しかったとはいえ反省してますm(__)m
もう少しやってみます。
>>114
ここで教えているような人はプログラムが好きなのよ。

でも君はあからさまにめんどくさそうにやっている。
宿題を聞いていたのに、Formの出し方も分からないってことは、
自分では全然試さずに人に聞いていることがまる分かりな訳よ。
そうなれば、好きなものをくさされたように聞こえると思わんかね?
Formがどうしても出せないならまた聞きに来ればいいかもしれないが、
出せたんなら自分で描画にトライして、どうしてもだめになってからのほうが
いいよ。
自分で苦労してわかったら君もプログラムの楽しさに目覚めるかも知れんぞ。
最初から聞いてちゃダメだ。
>>112
> 無償バージョンのVB?そういえばそんなのあったかな。
> 使ったこと無いから知らん。

Visual Basic 5.0 Control Creation Editionかな?

これはActiveXコントロール作成用の機能限定バージョン
なので、Formは作れなかったような気がするよ。

>>109
学生さんならちゃんとした開発環境手に入れても罰は当た
らないと思うに。

ただまぁあれだ、もはや一般の流通じゃVB.netしか手に入ら
ないから、VB6.0以前が欲しいとなると、ちと値が張るけどのぉ。
117301 ◆si65ga2MW6 :04/01/19 09:55
VB6のアカデミーパックが売りにでてますね。
ttp://search3.auctions.yahoo.co.jp/jp/search/auc?p=Visual+Basic&auccat=2084022767&alocale=0jp&acc=jp
11898:04/01/19 10:18
>>101
ありがと!やってみます。
こうゆうヒントが一番嬉しいですね。
119デフォルトの名無しさん:04/01/19 11:46
do while
qqqqqqqq
wwwwwwwww
eeeeeeeeeee
zzzzzzzzzzz
loop

ってのが、あるとします。んで、ある条件のとき、2行目の
ところで、頭に戻りたいのですが、そういうステートメントってありますか?

C言語では continue ってやつです。
Do while
qqqqqqqq
wwwwwwwww

if ある条件=False then
eeeeeeeeeee
zzzzzzzzzzz
end if
loop
   
こんな感じでどう? ある条件=Trueの時に、Doループ内の3行目以降の
式を飛ばしてloopさせりゃよろしいんじゃないかと。
121デフォルトの名無しさん:04/01/19 12:03
>>120
ありがとです。
continue的なのもはないってことなのですね。
122301 ◆si65ga2MW6 :04/01/19 14:04
>>119-121
 gotoでloop直前へjumpする。

 Do While ***
  ***
  If (flag = True) Then GoTo NEXT_LOOP
  ***
  ***
NEXT_LOOP:
 Loop

 昔 continue と同じ動きをするキーワード探してみたけど、
 見あたらなかった。 やっぱり無いのかな?
123デフォルトの名無しさん:04/01/19 16:58
過去のある日付を入力すると、その日から今日まで何日たっているかというプログラムが分からず困っています。
今日=Date関数でそこから引き算すればいいというのは分かってるんですが、実際のコード部分がどうしても無理で・・・。
テキストボックスに日付を入れ、ボタンを押せば別のテキストボックスに表示される的なプログラムを作ってます。
>>123
DateDiff
DAOでmdbにReadOnlyでアクセスしたいのですが、OpenDatabaseのプロパティを
ReadOnlyで開いてもmdbのファイル属性が読み取り専用だと
ファイル 'C:\hoge.mdb' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。
とエラーが出てしまいます。
ファイル属性が読み取り専用でもオープンする方法はありませんか?
126301 ◆si65ga2MW6 :04/01/19 19:25
>>125
 Dim db As Database
 Set db = OpenDatabase("test.mdb", True, True)

これでmdbファイルが読み取り専用でも開けると思いますが。
>>126
できたました。ありがとう!
12898:04/01/19 21:43
>>101
すみません。
sendmessageとSC_MOVEでググってみましたがわかりませんでした。

やりたいことは、VBのコマンドボタンを押したときに、
他のアプリの画面を画面の右上(15、280)に移動したいんです。
sendmessageは座標に移動できるんでしょうか?
SC_MOVEとは求めているものが違う気がするなぁ。
こっちじゃないかな。
http://homepage1.nifty.com/MADIA/vb/API/VBFORMMAE.htm
ウィンドウをハンドルを指定して、そのウィンドウの位置などを変える。

対象ウィンドウのウィンドウハンドルはこれでGetだ。
http://www.infonia.ne.jp/~maximum/Window/FindWindow.htm

DataComboなのですが、あのセルはプルダウンメニューが付けられる
ようなのですが、どのように、そのセルというか部分にたとえば

商品一覧

を当てるためにはどうしたらいいのですか?
この商品一覧を選ぶと、すぱっと他の金額とか特徴などリレーションを
張っている他の項目などが出るようにしたいのですがどうしたらよいで
しょうか?
http://tool-ya.ddo.jp/2ch/trash-box/contents.jsp?file=20040119233950431.jpg

DataComboじゃなくて、DataGridえした。すんません
初歩的なことですが

byRef で引数の型が一致しません。

のエラーメッセージが出るのですが意味がよくわかりません。
Function() で引数を Integer にしており、引用する別の関数でも
Dim *** as Integerにしているのにエラーとなります。
処理の方法を教えてください。
すみませんあげます。
134デフォルトの名無しさん:04/01/20 12:41
>>96
青学生キタワァ(n‘∀‘)η!!!!!
135デフォルトの名無しさん:04/01/20 14:13
C++を使ってたんですが最近VB6に乗り換えて見ました。
ところで、C++を使ってたんでクラスの書き方はわかるんですが
VBでのクラスの書式がわからないのでちょっと困ってます
参考にしたいんでだれかVBで使える簡単なクラスをひとつ作ってください
>>135
C++でいうところのClassの考え方はVBに持ち込めないからね。
138デフォルトの名無しさん:04/01/20 16:25
Windows2000ProfessionalでVisualBasic6.0を使っています。
日本語入力はIME 2000です。

プロジェクトを新規作成し
フォームにテキストボックスを一つ貼り付けた状態です。

テキストボックスに”枘”(ほぞ)を入力すると
”?”(半角のハテナマーク)が表示されてしまいます。
テキストボックスのフォントはMS ゴシックに設定していますが
MS 明朝などを試してみても結果は同じでした。
どうすれば正しく変換されるのでしょうか?
ご存知の方、宜しくお願いいたします。
>>138
UNICODEに無い文字なんじゃない?
>>139
あぁぁ・・・それだ・・・
レスありがとうございました。
諦めて外字で対応します。
>>139
あまり笑えないジョークだな
>>141
だな。
143139:04/01/20 19:00
えぇぇぇぇぇぇぇぇぇぇ
>>143
それはこっちの科白だ
Windows2000SP4 + VB6.0環境でアプリ製作を行っております。

Globalhookで、keybd入力を取り込むDLLをVCで書いて、
VB6.0上でkeybd入力をhookするアプリを作成中なのですが、
DLL→VBへのデータの持ち越しがどうも上手く行きません。

最初は、PostMessage→PeekMessageで受けようとしたのですが、
上手く行かずに諦め、取り込んだKey入力が保持されているGlobal変数を
返す関数を用意し、これで値の取り込む方式に変更しました。
この方式も、Formがアクティブになっている間は、問題無く動作するのですが、
Formがフォーカスを失い、ThreadIDが0(IDLE)になると、ダメぽ状態に。

原因は、おそらくGlobal変数の格納されているアドレスが、Threadが切り替わると
あちこちに分散してしまう点だと思われるのですが、こういったケースの場合、
DLL→VBへのデータの送信はどういった手法が一番堅実でしょうか?
ご教授下さい。
>>145
そもそも、そのDLLをVCで作ったアプリできちんと動くことを確かめているのか?
>>132
多分こうだろ。

Private Sub Main()
Dim A, B As Integer

SubRoutine A <-ここでエラー

End Sub

Private Sub SubRoutine(A As Integer)

End Sub

このように書くと、AはVariantになる。
Dim A as Integer, B as Integer
と書くこと。

つか、エラーが出たらそこで止まるでしょ?そのとき
デバッグウィンドウで

? typename(A)
とやれば型が分かるよ。ほんとうにIntegerになってるか確認すべし。
>>145
なんか俺フツーにできてるけどな。

あれ?コードがどこかに…
グルーバルフックのDLLをVBから使ったけど普通に使えたけどなぁ。
ちなみにフツーに、って言うのは、VBからDLLの関数を読んで
帰り値で返すってことね。
>>138
マジレスすると、あんたがここに書き込むに際し指定しているのが
Unicodeだ。
Shift-JISに無い文字ってことだな。
VBはUnicodeでも、MSゴシックはそのフォントを持ってない。
つかIEで見たって明らかにそこだけMSゴシックじゃないだろ。
>そもそも、そのDLLをVCで作ったアプリできちんと動くことを確かめているのか?
C同士なら、#pragmaでsegment切ってやれば、同じメモリ共有出来ますので、
それで行けそうですね・・・。

>ちなみにフツーに、って言うのは、VBからDLLの関数を読んで
>帰り値で返すってことね。
これが、アクティブになってるThreadによって、返すGlobal変数の入ってる
アドレスが変わるんですよね。
そもそも、VBのアプリって、アクティブじゃない時は、ThreadIDが0(IDLE)になるのが
普通なんでしょうか。
ThreadIDが0だと、PostMessage()も失敗しますし。

やはり、DLL側に問題あるんでしょうかね。
全部Cに移植した方が早いんでしょうか。
明日一日色々やってみて、まだダメだったらソース持って相談に来るかもしれません。

ありがとうございました。
会社がProxy規制にひっかかるのが、痛い・・・。
>>150
堂々と嘘を書くな。恥ずかしいと思わないのか?
嘘書いたつもりじゃないんですが…嘘ですかね?
>151
でも俺はそれでいけてるけどな。
VCのほうのソースならあったけどVBのほうが見当たらんなぁ。
最新のVisual Basic6.0SPを入れようとしたのですが同意した後に正常に
インストールが終了しませんでしたと出てしまうのですが・・・
156150:04/01/21 01:20
Unicode対応のエディタでに件の文字をペースト
->Unicodeで保存->保存可能
->ShiftJISで保存->保存不能
だけどな、取りあえず。
MSゴシックはUNICODEのフォントを持ってないというのは本当ですか
IMEパッドにはちゃんと出てくるし、UNICODE対応の入力欄に入力できるんだけど
MSゴシックに無くても勝手に違うフォントから持ってきたりする。
MSゴシックに無い文字だと微妙にフォントが違いません?
取りあえず157さんは文字コードセットとフォントを混同しているな、多分
テキストボックスはMBCSで処理している、でいいじゃんか
シフトJISとか言い出すから妙な方向にdj
161デフォルトの名無しさん:04/01/21 12:34
質問です。
TextBoxはWin98などでは扱えるテキストが64kbyteに制限されますので
RichTextBoxを使おうと思うのですが、RichTextBoxは
ForeColorの変更ができないのです。
SelColorで変更ができると別のところで言われたのですが、
文字が入力されるたびにいちいち全部のテキストを選択状態にしてから
SelColorで変更するのはものすごく不便です。
サイズ上限がもっと大きいTextBox上位互換のコントロールはないでしょうか?
>>161
そんなでかいテキストは外部エディターを起動するのが吉
163161:04/01/21 13:03
>>162
作ってるアプリがエディタなんですが。。

今ごろWin98なんか使うなと言われたらそれまでですが、
まだまだWin98, Meなんかの需要もあるみたいですし。
>>161
金出してもいいなら、GrapeCityのInputMan。。。と思ったが、
やっぱり64kb制限あった。
つーか、エディタ作ってて、そのメイン部分・・・機能のほとんどを占める
テキスト入力部分を自前で作らないのってどーよw
需要を気にしてるってことは練習やお遊びじゃないんだろ?
素直にその部分は自力で書けばいいと思う。
>>161
単一色だったら、いちいち設定しなおさなくても良いんじゃ
166161:04/01/21 14:01
>>165
やってみたらそのとおりでした。
SelColorの仕様はどうなってるのかよく分からない。。
167161:04/01/21 14:37
何度もすみません。
RichTextBoxのことで再質問です。
RichTextBoxでかな漢字変換をすると変換候補の文字が
見えにくくなります。
変換候補の部分だけ背景色が黒に近いグレー、文字色が黒なのです。
なぜだーーーー!!!
RichTextBox逝ってよし!

どなたか、この色を設定しなおす方法を教えてください。
MS-IMEの色設定ではどうにもなりませんでした。
耳の痛いのにはレスなしか。やれやれ・・・
169161:04/01/21 15:14
>>167は下記のサイトの情報を総合して一応解決しました。
http://vbvbvb.com/jp/gtips/0451/gSendMessageEmSetimecolor.html
http://member.nifty.ne.jp/samidare/dev/t006.html

しかしつくづくRichTextBoxは逝ってよしだね。。
170161:04/01/21 15:40
>>168
>>164の人ですか?お金出してツール買えるぐらいなら
こんなところこないですよ。
普通に標準のものだけでやる方法を教えてください。
あなたも逝ってよしです。。。
なんか変なのが来たな。
馬鹿な俺に英知をくれないか?

一つのコマンドボタンで2つのOUT命令を実行したい。これはVB制御のアームロボットの出力
の事なんだが・・・

d1 = AU '腕を上げた時、タイマー関数でカウントした値
d2 = WR '胴を右に回した時、タイマー関数でカウントした値

AU = 0
WR = 0

IbpciOutPortByte IC2-C,HA0 '腕と胴を同時に動かす出力
Timer1.Enabied = True
Timer2.Enabled = True
Do
IbpciInportByte IC2-C,d 'ロボットから限界範囲の命令を受け取る入力
   If AU >= d1 Then IBpciOutByte IC2-C,(d And &HDF):Timer1.Enabled = False
IbpciInPortByte IC2-C,d
If WR >= d1 Then IBpciOutByte IC2-C,(d And &H7F):Timer2.Enabled = False

If (AU >= d1) And (WR >= d2) Then Exit Do '腕、胴の両方の移動量に達したら終了
   Do Events 'クリックで抜ける
Loop
IbpciOutByteIC2-C,0 '全動作終了出力

このプログラムで腕と胴を同時ではなく別々に動かしたい。分ければ簡単かと思ったが
後の記述の命令しか受け取らなくて最初の命令をしてくれない。どうすればいい
頼むー教えてくれ
>>172
ここできいてもどうにもならんかも。
社内の人に聞いたほうがいいよ。

IbpciOutPortByte IC2-C,HA0 '腕と胴を同時に動かす出力

こんなのがあるくらいだから、他の命令があるか調べてみたらどうでしょう?
>>173
禿同
>>173
レスthx
腕と胴、単体で動かす出力ポートはある。(腕がH10で胴がH80)
別々に分けてやってみたんだがどうもうまくいかない・・・

IbpciOutByte IC2-C&H10



終了条件

IbpciOutByte IC2-C%H80



終了条件

ってやると胴しか動かなくて腕の方が反応しないのよ。私の予想では腕が動く前に胴の命令
になっているのではないかと。だから、腕が動き終わるまで、胴の命令までいくのをやめたい。

ループでも分岐でもいいんだが。ループで終了条件をAU=0とかにすると他の終了条件にひっかかるのか
起動しなくなる。

一つの命令でRUNを二つ実行する方法であればうまく使えると思うんだよ。そんな方法ってないのかな・・・
>>175
>ってやると胴しか動かなくて腕の方が反応しないのよ。私の予想では腕が動く前に胴の命令
>になっているのではないかと。だから、腕が動き終わるまで、胴の命令までいくのをやめたい。

ときに腕のコマンドを確実に実行しているってのはステップ実行で確認したのかな?
いやすまん、「予想では」、ってのが気になったので。

あと、腕が動く前に胴のコマンドを実行しているかどうかは、たとえばタイマーコントロールを
貼り付けて、Intervalを充分大きな値にして

Private Sub HogeHoge()

  (腕のコマンド)

  Timer1.Enabled = true
  Do While Timer1.Enabled = True
    DoEvents
  Loop

  (胴のコマンド)

End Sub

Private Sub Timer1_Timer()
  Timer1.Enabled = False
End Sub

こんな感じで確認出来そうですよね。
未知の環境のデバッグの仕方は教えにくいな。
176のアドバイスの通り、腕用の命令が実行されるか確認するのが
先決だろうね。
面白そうな仕事だなぁ。俺もロボット動かしてぇ。
>>176
それは思いつかなかった。早速試してみるよ。thx

>>177
大変だってw
デモでいきなり渡されて動かしてみろって・・・私知識ないんですけど泣。
>>178
きちんとフィードバック回路がついてないテスト用ロボットだと、プロ
グラムミス=物理的破損に直結するから怖いよな‥‥はい、むかしやり
ますた。相反する駆動系を同時にオンしてしまって、モーター焼けちっ
た(w。
180>>130-131:04/01/21 23:33
あの、僕の質問はやっぱきびしいんですか?


データグリッドの2列目(Column2)のセルでプルダウンさせてアクセスの
ルックアップみたいにしたいのですが......................................................................................


DataGridに関する項目ってほんと情報すくなくって困っているのです。
ここが山なんです。これを超えたら90%ソフトが完成で、完成したら公開
しようと試みているのですが......

181>>130-131:04/01/21 23:34
この次につくるソフトは、VBでRSSリーダを作る計画があり、今回の
結果を生かしていきたいのであります。
>>180
カラムの幅や高さから計算して、自分で場所を取得してくることもできないのか?
つまりコントロールそのものの機能ではなく、自前で上にコンボボックスを
表示してやるということ
すみません。宿題スレの方ではスレ違いと言われたのでこちらでお尋ねします。

問題1
整数データ(80,41、35、90、40、20)を配列に登録し、
選択ソートを用いて、昇順に並び替えるプログラムを作成せよ。

問題2
アルファベットの列を入力すると、各文字のASCIIコードを出力する
プログラムを作成せよです。

正直お願いします。
>>183
・ここは宿題スレじゃない
・だから丸投げするな
・たしかにVBの宿題スレはない
・おい、だからって立てるなよ
・このまま追い返すとしつこそうだからヒントだけやる
・ヒントっつーか問題がそのまま答えみたいなもんだろう
・選択ソート、mid$、asc あたりでググッてみろよ
・多分専門学校あたりの宿題なんだろうな
・でもその程度で詰まってるなら、どうせ卒業できまい
・じゃあ今やめても同じだな
・もうやめちまえよ ヽ(´ー`)ノ
質問です。

VBでWebBrowserコントロールを使ってWeb表示しているのですが、例えばログイン画面で、項目に
パスワードを入力してボタンを押す(SUBMITする)ような処理をするにはどうすればよいのでしょうか。
186デフォルトの名無しさん:04/01/22 12:28
>>185
それってブラウザ(=VB)の問題じゃないんじゃないか?
ログインを自動化したいの?
>>183
問題1は
Dim Data( 5 ) As Long
みたいに配列を宣言して、整数データで配列を初期化して、数値の比較と
値の入れ替えの処理を作ればOK

問題2はAscだったかAsciiだったか、そんな関数があるので、調べてみるよろし。
すみません、教えてください。

Dim test() As String

この様に宣言した変数を処理中でReDimで初期化して使用したいのですが、
格納するデータ数が0だった時は初期化されない状態です。

この時、変数testが初期化されていないという事を知る為の関数はありませんでしょうか。
IsArryとかIaNothingとか使ってみましたが思った通りの動きをしませんでした。
もしかして、根本的勘違いをしているのかもしれませんが。

>>188
on error goto
>>189
(゚Д゚;) まじですか?
>>190
マジ
>>188
共同で書いてるならともかく、自分ひとりで書いてるのに
初期化の確認が必要ってことがそもそもおかしいわけで。
動的配列はクラスモジュールでラッピングするべし、べし。
>この様に宣言した変数を処理中でReDimで初期化して使用したいのですが、
>格納するデータ数が0だった時は初期化されない状態です。

んーと、恐らくデータ数に応じてReDimで要素数を変更する処理を
行っているのだと思うのですが、データ数が0なら要素数を変更する
必要すらないと思うんですがどうでしょう?

だって、入れる物が無いのに、容器を用意するのって変でしょ?

Dim lngDataCount As Long  'データ数
Dim strTest() As String   'データ用の配列

If lngDataCount = 0 Then  'データが無ければ

  Erase strTest '配列をクリア

Else

  '要素変更時に内容を保持する必要がなけりゃPreserveは不要ですな。
  '配列の要素とデータ数との整合性を取る為に、要素1から宣言してみた。
  ReDim Preserve strTest(1 To lngDataCount) 'データ数で配列初期化

End If

こんな感じでどうかの?
188です。
クレラップくらいしか使った事がありません……
196デフォルトの名無しさん:04/01/22 16:58
>>194
データ数とその配列が乖離するのは面白くないので、
セットでクラス化したほうがいいと思う。
>>194
データ数を確保する変数を用意しないで確認する方法はないかなぁとか思っておりました。
いろいろ関数作っていると、それ関数あるよって言われる事多くて、調べていたのですが。

おとなしくデータがないよってデータを持つ事にします。
ありがとうございました。
返信していたら>>193,>>196さんからクラスという返信が。
勉強がてら、調べてみる事にします。
こんな感じでいいかな
Dim arr() As String
Dim cnt As Long

Private Sub class_initialize()
cnt = 0
End Sub

Private Sub class_terminate()
Erase arr
End Sub

Public Sub add(s As String)
cnt = cnt + 1
ReDim Preserve arr(cnt)
arr(cnt) = s
End Sub

Public Function getcnt()
getcnt = cnt
End Function
>>199
なるほどぉ。そう言う事かぁ。



変数3個の為に、クラスファイル3個出来た、よ。
あれ?
>>200
クラスは一個でnewすればいくらでも作れるんだからさ
行き当たりばったりでクラス作ってるとドツボにはまるよ。
dim a as new clsarray
dim b as new clsarray

a.add "hage"
b.add "page"

みたいなー
行き当たりばったりですまん
とてもインチキ臭いが、リストボックスを配列の変わりに使っちゃうと言う手もある。
>>204

>>135あたりを読んでくるといいかもかも。
0ベースで浅間すりゃいいやん

データ0個 > ReDim Hoge'0)
データ1個 > ReDim Hoge'1)

Uboundで0ガでりゃデータ0個ってこった。
もちろん配列の0個目にはデータは入れないんだよ。
あるコンボボックスの値がNullの時には

命令を実行しない

きちんと選択されているときは

命令を実行する

というのを作りたいです。Nullの場合にはをどのようにプログラミング
したらよいのでしょうか?
コンボボックスの値はNullにはならない
よく伸びてるよなーこのスレも。

今も使われてるんだな>.NETでなく6.0
VB.NETで作られたソフトって見たことないな
212デフォルトの名無しさん:04/01/23 00:43
教えて下さい。
VBからSQLSERVERのスドアドプロシージャを実行しています。
この時に、スドアドプロシージャで
DBに存在しないテーブルを呼び出していて途中で落ちていました。
それにもかかわらず、VB側ではなにごともなかったごとく
処理がすすんでしまいます。
スドアドプロシージャが落ちたことにVBで気がつくにはどうしたらよいでしょうか?

ストアドは下記の方法で実行しています。
Set Cmd = New ADODB.Command
Cmd.ActiveConnection = Cn
Cmd.CommandTimeout = 0
Cmd.CommandType = adCmdStoredProc
Cmd.CommandText = "AAA01"
Set R01 = Cmd.Execute

お願いいたします。
>>208
NULという意味が分からん。
text=""じゃダメなの?
214広島寺行:04/01/23 03:53
競馬のレースデータをAccessで入力している者です。レースの賞金は、1着=1倍、2着=0.4倍、3着=0.25倍、4着=0.15倍、5着=0.1倍
と計算しているはずだと思うのですが、おそらく各々算出した数値を、左から3桁目を四捨五入していると思われます。
(例)1着 1670(万)の場合
1着=1670、2着=670、3着=420、4着250、5着=167(単位は万)
これを、1着賞金入力と同時に他の着も同時数値表示させたいのです。
このやり方を知っている人、どうか掲示板あるいは上記メールアドレスに送信してください。
(追加メールアドレス [email protected])
215デフォルトの名無しさん:04/01/23 09:13
>>212
ストアド側でまず例外をきちんと補足する。
で、その結果を戻り値かOUTのパラメータにする。(SQLサーバあまり詳しくないんですまん)

VB側はパラメータクエリだっけかで、その戻り値を取得して判断。

最近ORA+oo4oしかやってないんですまなんだ。
216あげ。:04/01/23 11:18
>>188>>189にアフォがいます。

初期化で
ReDim test(0) As String
として、(0)は使わないってことにしとけばUBound()でもこけない。

こういう発想ができないあなた達は、COBOLerでしょ?
217189:04/01/23 11:24
アフォとは何ですか、アフォとは。

初心者のころはそうしていましたよ。
でもね、それはバグの入る確率が高くなるでしょう。
処理速度優先ならばそれでもいいですが
やはりクラスで対応した方がいいと思いますよ。
218デフォルトの名無しさん:04/01/23 11:29
VBで自前でスレッド作って実行って出来る?
CreateThreadにファンクションのアドレス渡せばいいのかな?
って、自分で試せってレスがきそうだな
かったりーからやっぱりVCで作るかな
>>217
こんなものにどっちが正しいなんてことはない
一人で組んでるのか、グループなのか、他のメンバーのスキル、信用度は
どうなのかによっても事情違ってくるし、安全性、利便性、速度とかのトレードオフもある
一概に正解とか間違いなんて言えないはず
くだらない煽りに反応しないほうがいいよ
220189:04/01/23 11:41
>>219
そうですね。でも>>216のやりかたはいまいちやっつけ的な
やり方なので好きではないですね。
221216:04/01/23 11:49
>>217=189
On Error Goto を簡単に使うという発想が間違っている。

どんなクラスを作るのか知らんが、まともなクラス作ってね(プッ)。
少なくとも配列を初期化する「Redim test(0) as String」は、Class_Initialize()に書きませう。
フラグとかカウンタとか使わないでね〜。
222デフォルトの名無しさん:04/01/23 11:51
>>216
私も最初はそうしていたけど、0を使わないというのが不自然なルールなので止めた。
I/FをつけたClass(といっても構造体に関数がついたものですが)が普通じゃないか?
223デフォルトの名無しさん:04/01/23 11:53
>>221
何を言いたいのか判らないし、なにを調子に乗ってるのかも良くわからないんだけど。

エラートラップは基本的に多様すべき。
ただし、モジュール化を極力進めて、Try-Catchと同じ状態になるように。

で、ちみVBやっと使えるようになったの?w
どっちがいいかは使うヤツが手前で決めろって事で

次の質問ドゾー
225デフォルトの名無しさん:04/01/23 12:37
>>218
できるできないは、できる。
関数ポインタはVarPtrだっけ?さぶクラス化で検索すると出てくる。

お勧めはしない。VBはそういうことをやる言語ではないから。
VCが選択肢にできるならそうしたほうがいい。
226デフォルトの名無しさん:04/01/23 13:29
VB6.0SP5 & Win2k ProSP4
上記でプログラムを趣味の範囲で勉強中なのですが、困っております。

MSHFlexGridを使ってCSVファイルを表示するだけのプログラムにチャレンジしてみてました。
試行錯誤の末にやっと表示させることは出来ました。
しかし、列幅の自動調節が出来なくてつまずいております。
イメージとしてあったのはエクセルみたいに境目の所をダブルクリックすると自動で幅が中に書いてある
文字の長さにジャストフィットするって感じにしたいのですが。
列幅を変更可能に設定するように、グリッドのプロパティのどっかを設定すればなるようになるのかな?と
思って調べてみましたが無いようです。
今まで出来て当たり前と思っていた機能もほとんどがプログラマによって便利に使えるように組まれてい
たのだなぁ、と思うと勉強しててとても面白いですが・・・。
自力での限界にたどり着きました。
どなたか知恵をお貸し下さい。
>>226
プロパティ一発ではムリ(君が調べたとおり、本当に無いならだが)
ダブルクリックされたときにクリックされた列を調べ、その列内の
すべての文字列の文字幅を調べて(TextWidthで)、列幅をその最大長に
合わせてやるしかないだろう
>>226
VS-FlexGrid Proを買う
>>188とか>>189とか配列でごちゃごちゃ言っている人へ

ON Error以外にも初期化されてない配列を判定する方法はあるぞ。
詳しいやり方は忘れたが、SafeArray〜系のAPIを使えばいい。
どこかにサンプルが落ちていたはず(日本語サイトで)

この他にも
ReDim test() As String : test=Split("")
ReDim test() As Variant : test=Array()
とすることで初期化されてない配列ではない、空の配列が作れる。
初期化されてない配列は、UBound・LBoundでエラーになるが、
空の配列はエラーにならない。
空気が読めずに得意がってごちゃごちゃ言っている(ry
五.荒らしは相手しない。
232226:04/01/23 15:05
>>227
素早いお返事ありがとうございます。
なるほど、そういう風に組めばよかったわけですね。
ばっちり動いております。ありがとうございました。

>>228
http://www.grapecity.com/Japan/vs-flex/
うっはー、6万3千円はちょっと手が届きませぬ・・・。
老後の楽しみに買ったこの言語も年金暮らしではとても高い出費でした。
アカデミーパックの他にシルバーパックなんて出ないものかなぁ?(笑)
>>232
.netの無償構成に移行するというのはどうでしょうかね。
ベースとなるアプリケーション上で、実行時にActiveX DLL(以降DLLと略記)を
CreateObjectでバインディングしたい場合、DLLが発生するイベントを捕捉する
にはどのような手法を用いればよいのでしょうか?

同一のクラス、プロパティ、メソッド、イベントを持ち、内部での処理と
DLL名が異なるDLLを複数作成し(DLL1,DLL2...DLLnとします)ベースアプリ
では、DLLのロード/アンロード、DLLのプロパティへの値の設定とメソッド
の実行、処理結果の総合評価のみ行い、例えば

AさんはベースアプリにDLL1、DLL2、DLL3の処理を行わせる
BさんはベースアプリにDLL2、DLL4の処理を行わせる
CさんはベースアプリにDLL3、DLL4、DLL5、DLLnの処理を行わせる

と言った感じで実際の処理は全てDLL側で行い、処理の終了をイベントで通知し
てベース側に処理を渡す形式にしたいのです。

プロパティへの値の設定と、メソッドの実行は、クラス名、プロパティ名、
メソッド名を規定してDLLを作成し、

private hoge() As Object

Set hoge(i) = CreateObject(DLL名 & クラス名)

と言った形で、DLLの数だけ配列にインスタンスを生成する事でプロパティの
操作やメソッドの実行は出来たのですが、WithEventsを使おうとすると、宣言に
As Objectは使えないわ、変数に配列は使えないわで、はたと困ってしまったの
です。なにかよい手だてはないですかね?
235234:04/01/23 15:55
もしかして、コールバックメソッドを利用すれば実現できる?





すまん、吊ってくる…
現在テキストエディタなんかで特定のキー(F1など)を押すと
特定の文字が入力されるツールを作ろうと思って作業中なのですが
バックグラウンドで動作させていると当然form_keydownなんかのイベントは取れません。
で、ネットで調べてみてもゲーム作る系のフォーム内でのキーイベントばかりで
常駐ソフトとしてバックで動作する場合のキー入力の取り方がわかりませんでした。

常駐ソフトでキーの待ち受けしてるのって一般的にどういう処理の流れなんでしょうか?
よろしくお願いします。
>>236
グローバルフックを使えばできるだろうけどVBでは無理だね
>>236
直接の解答ではないが、VB単体でやるのは恐らく不可能。
素直に他のOCXに頼るのがいい。
これなんてどーよ?
ttp://member.nifty.ne.jp/nyankoro/sw/nyaocx.htm
>>237
なるほど。VBだとやっぱり制限多いですね・・・
慣れないCでやってみます。ありがとうございました。

>>238
と思ったらそんないいものがあるんですね。試してみます。
ありがとうございました。
240デフォルトの名無しさん:04/01/23 17:14
VB6の質問です。

単純にテキストファイル作って保存してからプログラム自体は終了させないで
5分後くらいに同じプログラムで先ほど作ったテキストファイルをオープンしにいったら
「テキストファイルがみあたりません」ってな感じなのですが、同じような目に遭遇された方はいませんか?
もちろんエクスプローラで見ると、ちゃんとファイルはあるのですが・・・

回避法とかあれば教えていただけませんでしょうか?
>>240
6時までに再現コードを示せばテストしてやろう
ファイル、フルパスで指定してなくて
カレントフォルダが変わったとかじゃない?
5分後じゃなければ見れるのかな?
エクスプローラとかじゃなく、単にopenするのが間違ってるとか。
244218:04/01/23 17:33
>>225
お、レス、サンクス
関数ポインタはaddressofね

今の会社がVB推奨(というかVCでC++で書いたら俺以外保守できない)なので
出来たらVBが良かったんだけど
ま、しょうがないからVCに移植することにするわ
245240:04/01/23 17:38
>>241
すいません、それは無理なんです。ごめんなさい!ご好意に感謝です。

>>242
DIR で フルパス使ってます。

>>243
すいません、もう少し詳しく書くと・・・
同じルーチン使ってオープンやクローズなんかをやっているので
openは大丈夫だと思います。

そこで5分後という書き方がまずかったのですが、現象が不定期で再現されます。
5分後に開けるときもあれば、開けないときもあるので困っていますっっ!
>>245
別に今のコードをモロに出せとは言ってないんだが。。。 まあいいやw

で、アドバイスだが、俺の知る限り、そんなファイルが見つかったり
見つからなくなったりするようなバグはない。
多分、単にやり方が悪いのだろう。
(OSやファイルシステムがおかしい可能性は限りなく低い)

dir関数はちゃんとファイルが見つからなくなるまで回さないと
おかしくなるので要注意。あと、ファイルの存在確認をしたいだけなら、
dirじゃなく FileSystemObject のFileExists を使ったほうがいいよ。
>>240
横から割り込みさせてもらうと
ファイルを開く部分のソースを簡単なVBアプリに
貼り付けて単体でファイルのオープンが出来るようにしておく

1.そのアプリで同じ現象が起きるかどうか確認する
2.そのアプリでオープンした状態で本アプリ側でどう動くか検証する
ってやってみたらどう?

あと、
>「テキストファイルがみあたりません」ってな感じなのですが
これ最悪、感じってあいまい過ぎるので本当のエラーをちゃんと報告しよう
248240:04/01/23 18:20
>>246
FileSystemObject の FileExists を試してみます。
ありがとうございました。
存在自体は知っていたのですが、DIRとOPENでムキーになってしまいましたっっ!
ちなみに、これってIE5以上が入ってないと動かないんでしたっけ?

>>247
ご指摘の通りです。「感じ」なんて、ありえませんね。
プログラムを組んでいるのが私ではないので、ついいいかげんなことを
書き込んでしまいました。以後、気をつけますので、お許しを。
249デフォルトの名無しさん:04/01/23 18:41
質問です。今度からVBとSQL(Oracle)を使った開発チームに
行くことになったペーペーPGなんですが、初心者にオススメの
VB関連の書籍ってなにがありますか?SQLは以前研修で勉強したので
なんとかわかるのですが、VBは初めて触るのでどうしたものか困っています。
>>249
他にできる言語は?
>>249
VBはMSDNを読めばいいんでないかい?
252デフォルトの名無しさん:04/01/23 19:24
>>250
ものすごいマイナーな言語の修正作業とHTMLを仕事でやってました。
CとかJavaなどの一般的に知られている言語を触るのは今回のVBが初めてです。

>>251
話すと長くなるのですが、今の私の状況が
・VBを触れる環境がない
・ただし一〜二週間ほど仕事が暇(勉強ができる)
・自宅のPCが壊れて、今度の給料日に購入予定
ということになってるんですよ。
なので書籍で勉強しておきたいなと。
>>213

つまり

if combo1.text = "" then
処理1
else
処理2
end if

ということですね?ありがとうございますた
>>232
いや、これから先の話、その発想は意外な盲点として注目
されると思う

シルバーパック 恐るべし
お爺ちゃん、VB買ってよ〜
ウワーンウィルスバスターなんていらないよ!
お爺ちゃんなんてキライダー
257デフォルトの名無しさん:04/01/23 23:15
タイマーイベントを利用して、画像を切り替えながら入力ファイルの文字情報を編集するプログラムを作っています。しかしデータ件数が増えると画像切り替えが止まります。テンポよく画像切り替えしつつ編集処理を行なう方法は無いでしょうか。お願いします。
>>257
切り替えを何故しないといけないのか、小一時間問い詰めたい
259212:04/01/24 02:05
>>215
ありがとうございました。なんとか形になりました。
遅レスですいません。
>>257
ほどよく適度な回数でどぅいべんっつを入れる事だ
261デフォルトの名無しさん:04/01/24 23:09
APIを使って、FTPからサブディレクトリを含む全てのファイル名を
取得したいんだけど、どうやったらいいですか?
FtpFindFirstFileとやらを使うってのは分かったんだけど
サブディレクトリ以下が取得できない( ´・ω・)
教えてくださいませ。
フォルダ内のファイルの変化(ファイル作成・削除・上書きなど)が起きた場合の
ファイル名を取得したいんですがご存じのかたいます?。
FindFirstChangeNotification
を使ったソースは見かけますが変化したファイルの名前はどうやって取得するんでしょう?

ttp://vbvbvb.com/jp/gtips/0051/gFindFirstChangeNotificationFileNotifyChangeFileName.html
>>262
自分で変化の前後の状態を取得して比較するしかないと思うが。
>>262
そのAPI使いにくい
265デフォルトの名無しさん:04/01/24 23:58
今までずっとマジックナンバーを使ってました。

(例)
MsgBox "メッセージですよ", 1, "メッセージ"

でも保守性を考えると定数を使う方が良いと色んなところに書いてあります。
定数と数値では、処理速度はどちらが上なのでしょうか?
266デフォルトの名無しさん:04/01/25 00:05
>>265
んー処理速度は数値の方が上だと思うけど、定数にしても
問題なけりゃ定数にした方が、遥かに保守しやすいと思うよ。

そんなぎりぎりの所をVBでコーディングしてるのかしらん?
>>265
いや、単に軽いプログラムができたらいいなぁと思っているだけの
初心者です(^^;
どうもありがとうございました。
268267:04/01/25 00:10
すいません>>266でした。
教えてください。
論文作成のためにVB6.0のサービスパック4が必要になったんですが、どこで落とせばいいのでしょうか?
マイクロソフトのHP見たけど、見当たらないし・・・。
271269:04/01/25 01:16
>>270
アリガトゴザイマス。
論文審査で、要約を提出した再に、環境を『VB6.0SP4』って書いちゃったからなんです。
>>265
コンパイルすれば同じだ
273デフォルトの名無しさん:04/01/25 13:57
vb素人ですが、1000までの任意の正整数を素因数分解するプログラム
を作りたいのですが、どういう仕組みにすればいいのかさっぱりわかりません。
ブロックif文を使いたいのですが、どなたかどうか御教授お願いしたいです。
>>273
ぐぐったらいくつか見つかる。
宿題を丸投げするなよ。
VB6.0で、Formをリサイズする際に、Formのサイズに合わせて、
Form上のコントロールを再配置したいのです。

・Resizeイベントが発生する度に新しい位置を計算するコードを書く。
・そういうActiveXコントロールを買う。(ぐぐってもシェアのものしか見つけられません)
他に解決策はありますか?
>>275
ふつーは前者で対応するけど、面倒なら後者もありだね。
277デフォルトの名無しさん:04/01/25 23:23
ディストリビューションウィザードを使ってインストーラー
を作成したのですが、それを用いて別マシンにインストールしようとすると
”モジュールが見つかりません。”
”***.ocxの登録に失敗しました。”
と出ます。
ocxはフォルダ内(作ったインストーラーのフォルダ)にちゃんと有るにも関わらず
上記のエラーが出てきます。解決法をどなたか教えてください。
>>275
resizeイベントでやるしかないね。市販コントロールも同じことすることになると思う。
コントロール数によっては、どちらも動作速度がかなり重くなるから、
基本的には、再配置自体をやらずになんとかならないか、検討したほうがいい。
279デフォルトの名無しさん:04/01/26 00:00
>>277
 別マシンは違うOS?
>>276>>278
ありがとうございます。
>>277
OCXの中で使ってるDLLが存在しないと、登録できなかったと思う。
DependencyWalker使って、必要なDLLがちゃんとあるか確認してみれ。
>>278
コントロール100個ぐらいじゃ遅いって程にもならないと思うけど…
283デフォルトの名無しさん:04/01/26 00:52
現在ある計測器から3次元座標(x,y,z)を取得して
それを画面上(picture1)に点としてプロットしていき
ボタンを押すと点同士を線で結びひとつの立体物を表現させる
というテーマで課題が与えられています
psetとかlineで点を打ったり線を引いたりするのはわかるんで
すが
3次元座標への変換方法がわかりません・・・
ぜひアドバイスをください、留年がかかっておりますので本当
に頼みます
>>282
ホント?
VB4時代にはもっと少ないコントロールで激重になったもんだけど、
最近のVBやPCじゃ、100個でも問題にならないのか。
いや、最近のVBやPCを使ってないわけじゃないけど、
あれ以来、たくさんのコントロールを貼るようなプログラムを避けてきたので。

>>283
わからないなら素直に留年したほうが君のため。
>> 284
まぁ「激重」の程度にも寄るけど。100個ぐらいじゃそんなに
問題にならんと思うぞ。
でもまぁ100個もコントロール並べるのは間違ってると思うけど。

>> 283
3次元座標を取得するんなら、「3次元座標への変換方法」
じゃなくて「2次元座標への変換方法」でしょ?
マジ留年したほうがいいかもよ。

とりあえず立体っぽくかくなら斜投影図法とか使えばええ。
X= x + z/(2^(1/2))
Y= y + z/(2^(1/2))
とかな。
286277:04/01/26 07:43
ありがとうございます。試してみます。
>>284
確かに。
VB4時代とPCのスペックを比べても10倍(クロック数)ですからね。
メモリーでGigaって単位を普通に聞く時代だし、HDDドライブじゃなしにメモリーがGigaなんて・・・。w

でも、コントロールを多数貼り付けるのはやっぱり良くないと思う。
配列になってるならOK、あと、画像がいっぱいとかだったらいいとは思う。

テキストとかコンボとかボタンが画面に100個あったら嫌だ。
288デフォルトの名無しさん:04/01/26 09:26
ソースを解析するフリーの良いソフトってありませんか?
289デフォルトの名無しさん:04/01/26 09:44
>>288
VB仕様書工房の体験版
ベクターは見た?
ツリーが欲しいのか、関数一覧が欲しいのかとか、要望を上げてみたら?
客先からメッセージボックスの変更以来がありました
"続行","再入力"と"続行","中止"です。
オリジナルでダイアログボックスを作ってはダメ
といわれました。どうすればキャプションを変更できるのでしょう?
>>291
そんな要求却下
>>291
SetWindowsHookEx その他
294291:04/01/26 14:38
>293
どんな風にするのでしょう?
フックプロシージャをインスト

メッセージボックス表示

メッセージボックスをフックして改造

だっけか?
オリジナルで作ったほうが10000倍安全確実だな
297デフォルトの名無しさん:04/01/26 22:33
Windows2000環境で作ったアプリをXPにインスコするとフォームのサイズがおかしくなります・・・。
誰かたすけてー><
コントロールのレイアウトに余裕持たせておけ。ってあんまり良くないなあ。
もっとスマートな方法ないのかな。
俺も一緒に助けて(≧▽≦)
>>297
どうおかしいのか説明しないと救いようが無い
>>291
そのクライアント、オリジナルかどうか区別できるの?
STLのvector配列をVBの配列に渡したいのですがどのようにすればいいでしょうか?
>>297
多分だけど、フォントが違うからじゃないの。
画面サイズをDotとかで作ってるとそうなるぞ。
Twipで全部作っていればならない。
画像とかは引き伸ばしたりする必要があるけどな。

>>301
多分無理。
素直に新たな配列とかに詰めなおすのが吉。十分早いよ。
303301:04/01/27 00:01
>>302
ありがとうございました。


(´・ω・`)ショボーン
>>303
どうしてもって言うならそりゃメモリ読み出したりいろいろ屋って何とでもできるだろうが
メリット無いと思うな。
それが「VBに渡せている」といえるかどうかも疑問だし。
ちょっと質問です。
たとえば
for i = 1 to 5
‥処理‥
next i
みたいなので i=3 のときは処理させないというのは
どうかけばいいですか?
>>305
中にIf条件でi=3を検出、処理を無効化しる。
307305:04/01/27 00:37
>>306
あ、そっか!
ボケボケでした〜。
ありがとね。
308デフォルトの名無しさん:04/01/27 21:47
超既出だと思いますが、VBで.png形式を表示する一般的な方法を教えてください。
>>308
表示するだけでいいならIEコンポーネントを利用
311308:04/01/27 23:13
>>309,>>310 ありがとうございます。
メモリ上にデバイス独立ビットマップの作成までするつもりです。
312デフォルトの名無しさん:04/01/28 06:40
指定したソフトをテンキー1とか2とかで
バイナリとかメモリ書き換えるソフトは
作れますか?

まだ初心者なんでお願いします。
>>312
意味不明。
わかるようにかいてよ。
314312:04/01/28 06:52
あるソフトを起動して
テキン1とかでそのソフトを
登録したコードに書き換えれでますか?

わかるかな^^;
315312:04/01/28 07:00
例えば
ギコナビのメモリ部分
3250の03をFFにテンキの1で書き換えるソフト
>>315
テンキーの数字は10種類、数値は256種類。
どうする?
どっちみちあんたには無理だけど。
317デフォルトの名無しさん:04/01/28 09:24
つうかさ、この手の人の場合、その部分で何をやりたいか書くのではなく、
根本的に何をやりたいか書いたほうがいいと思う。

そもそも聞く部分が間違っている可能性が大きいし。
(すでに手段がまちがってるのに、その間違った手段の実現方法を聞いていると)
あくまでも予想だけど、>>312でやりたいことは、テンキーにマクロの様に
いくつか登録できるようにして、ショートカット的に書き換えが出来るように
したいんだと思うがどうだろう?

でもそれだと、なぜファンクションキーやctrl+英数文字じゃないんだとの疑問も有るが・・・

まぁ本人じゃないとわかんないけど。
>>317
ゲームソフトのパラメータを、プレイ中に簡単に書き換えたいだけでな
いの(w。
320312:04/01/28 10:32
>>319
そうそれ
別にファンクションキーやctrl+英数でもいいよ


321びら:04/01/28 11:37
携帯から失礼します。
VB.netとCで作るDLL間で構造体の配列の受け渡しをしたいのですが上手くできません。
どうすれば実現出来るか知っている方いますか?

VB6ではAs Anyを使ってたのですがVB.netへ移植したら出来なくなってお手上げ状態なんです
322デフォルトの名無しさん:04/01/28 11:44
>>312=320
昔のBASICの"MON"でつね?。
"A"〜"F"をテンキーの"*"や"/"に割り付けたいなら、KeyDown()で判定できる。
あとは、「Open "???.exe" For Binary ...」でByte配列に読み込んで(Get #)表示、
編集したら、書き込めば(Put #)できまつ。
>まだ初心者なんでお願いします。

>テキン1とかでその

>書き換えれでますか?

>ctrl+英数でもいいよ

・・・・・・・・これを釣り以外の(ry
>>321
そもそも、.netってそういう考えじゃなくてもデータを渡せないか?
全ての言語の基本オブジェクトが共通化されたのは何の為なのかと。
VB6を使っているのですが、メモリ上に特定の文字列があるかどうか検索する方法ってありますすか?
例えばIEを開いて特定の文字列が表示されているかどうかを調べる、とか。
Trueであればそのメモリのアドレスを取得したいのですが、メモリの書き換えなどは必要ありません。
動作しているソフトの変化していく値を監視したいのですが・・・
検索したらVBではメモリを直接参照することはできない、とあったのですがよい方法あれば宜しくお願いします。
327デフォルトの名無しさん:04/01/28 13:18
質問です。

フォームAとBがあり、両方ともLoadされているとして
BからAを閉じたい場合、Bから:

     Unload A

とすれば、Aは閉じるハズですよね?
それが、閉じないのです。

     Set A = Nothing

などとやってもみましたが、効果無し。でも

     Load A

を投げると、Aはロードされるのです。
UnloadできないけどLoadできる、という状態なのですが
何か間違ったことをしているのでしょうか。。。


よろしくお願いします。
>>327
問題なくできるよ
ちなみに開発環境は?
>>327
Aのアンロード後にAのオブジェクトを参照してたりしていない?

デバッカで追ってみて、
 1.Bの呼び出し部分
 2.Aのアンロード関数
 3.Bの呼び出し以降
 4.Aのロード
とかなってないか?

3の部分でAのラベルとかなんかを参照すると、その時点でまたAはロードされるよ。
>>326
VBであろうとなかろうと、NT系では他のプロセスのメモリに対して
許可なくアクセスを行うなんてことは、普通できない。
ただし、VirtualAllocExあたりを使えば、あるいは?
でも動的に変化するメモリ全体の中から、特定の文字列の検索
だなんて、めちゃくちゃ重そうだけどな。
>>326
IEの中だけなら SHDocVw.ShellWindows で・・・
>>326
ReadProcessMemoryを使えばいいよ。
仮にメモリ内から文字列検索したとしても、それが画面表示されているかどうかなんて判断できるのだろうか?
ほっといてやれよ
>>317
そうそう、実装方法が根本的にまちがってる質問多いよね。
まあ、どう実装するかがセンスなわけだけど。
目的を明記するべきってのは、オレも賛成。
>>330
Diabloのチートツールはまさに同じことをするツールだったよ。
メモリダンプをファイルとして吐き出し、テキストエディタで修正後、書き戻せる。
まあ、テンキーからの入力方法で悩むような初心者に作れるものじゃないけどね。
よくよく考えてみたら動作が重くなるという点も重要でした。
メモリ全体から1度だけサーチできれば、と思ったのですが常にそのアドレスに対して
そこの変数や項目が出てくるとも限らないことに思い当たりました。
もうちょっとやりかた自体を考えてみます。ありがとうございました。

>>331
IEは例に出しただけで、特定のアプリの持つ変数を監視したかったんですよ。
なのでちょっと考えてみます。ありがとうございました。

>>332
そう、まさにそれです。でもVOID main()とかの言葉はわけわかんないですこんちくしょう。

>>333
上でも言ってますが表示されてるとかどうとかいう問題ではないのです。
でも、内部的にその変数を2,3箇所で保持してたらどうしようもないですよね。

>>335
。・゚・(ノД`)・゚・。

>>336
テンキーからの入力方法は別に必要ないのですが。
上のゲームのツールみたいなの作ろうとしてる人とちょっと被ったからぽいですね。
VBでやろうとするのが間違いだなーと思いつつももうちょっと頑張ってみます。
あああ>>337の一番上は>>330です抜けてましたごめんなさいこんちくしょう。
あと>>335って書いてあるのも>>334でしたもうやだこんちくしょう。
ウザイから二度と書き込むな。
>>337-339
もちつけこんちくしょう。
InnoSetupでスプレットのOCX、DLLのレジストリ登録はどうやればいいのでしょうか・・・
>>342
InnoSetupを使わないといけない理由が聞いてみたいのですが、何故それを使うんですか?
344デフォルトの名無しさん:04/01/28 21:07
文字列が数字であるかどうかを調べる方法を教えてください

たとえば "12345" なら True, "12A45" なら False
といった具合に
>>344
IsNumeric
346デフォルトの名無しさん:04/01/28 21:20
>>345
詳しく教えていただけるとありがたいのですが

ss = IsNumeric("12345")
の時
ssの値はTrueになるということでしょうか
>346
いや、あのさ、俺は>345じゃないんだけどさ、
関数なんだからMSDNのキーワードに「IsNumeric」と入れてみれば
一撃で分からんか?

つーか>346だけじゃなくこういう聞き方するヤシが多すぎる。ちょっとは自分で調べれ。
でないと回答してくれる人がこのスレからいなくなっちまうぞ。
>>346
MSDNで検索しる。
わかりました
350デフォルトの名無しさん:04/01/28 22:13
1.ビットマップファイルを数十枚メモリに読込む。
2.フォーム上のPictureBoxに1.で読込んだビットマップを、
拡大縮小したりして位置ばらばらに散りばめて配置。(重なりOK。)

VBで1,2を実現したいのですがVBの標準のコントロールだけで出来るのでしょうか?

VBにあまり詳しくなくて、途方にくれてWin32APIのDIBでほぼ実現確定まできたのですが、
もっと簡単に実現する方法があれば、教えてくださらないでしょうか?
>>350
拡大縮小はAPI使わないと綺麗にできない
>>351
速度さえ考慮しなければAPI使わなくても出来るだろ。
stdPicture型の変数にLoadImageで読み込んで、
PaintPicture繰り返せば良いんで無いの?
あっという間に作れるぞ。
まぁPaintPictureの拡大縮小は美しいとは言いがたいけどな。
API使うほうが速くてキレイで簡単なんだから、
できるかできないかの議論をする意味はないと思うぞ(汗
自前でなんとかするより、存在しているコントロールをどんどん使うほうがVB流だろう。
PaintPictureって言うほど遅くないと思うぞ?計測してみ
LoadImageやVBのコントロール類はGDIリソースガンガン使ってたような気がする。
数十枚の画像を扱うなら、DIB使って合成処理自分で書いたほうが、後からの機能追加が
楽になると思う。
まあ、9x系のWindowsは終わりが近いから、気にする必要は無いかもしれないが。
自前のコントロールでやってダメなら自分のせい。
他人のコントロールでやってダメなら他人のせい。
ダメなら、断然後者だ(w
359デフォルトの名無しさん:04/01/29 03:35
ちょっと長いです。すみません。

読み取り専用にしたいプロパティのProperty1を考えてみてください。 このとき、
Property1はPublicな適当なクラス(ClassAとします)で あると考えてください。

素直に実装すると、
 Public Property Get Property1() As ClassA
  Set Property1 = mProperty1
みたいなコードになると思います。

ところが、上のコードでは、クライアントがとちくるって
 obj1.Property1.Hoge = huga
とかした場合に、容易にProperty1が破壊されるわけです。

Property1を確実に保護する方法として、自分では、
 1.ClassAを更新できなくするメソッドを実装する(rubyのfreezeみたいのを追加する)
 2.ClassAに読み取り専用のインターフェイスを実装する
 3.ClassAをクライアントに見せない
 4.ClassAの複製を返す
 5.あきらめる(クライアントに破壊される可能性には目を瞑る)
といった方法を考えつきました。

1,2は面倒なのと、ClassAがCollectionとかのVB組み込みクラスだった場合に、
それらを全て置換するのが余りに無謀なので、パスかなと思っています。3も同
じです。そこで、4も考えるのですが、今度はプロパティのセマンティクスを破
壊しそうな 気がします。

ここで質問したいのは、次の2点です。
・読み取り専用プロパティを実装するには、どうすれば良いのか?
・プロパティのセマンティクスとして、4(複製を返す)は正しいか否か?
よろしくお願いします。
>>346
イミディエイトウィンドウで

print IsNumeric("12345")

とやれば一発で確認出来るやん。折角強力なデバッグ環境あるんだから
使ってあげようよ。

>>345
IsNumericなんて関数あったのか。この手の関数っていつも自分で作ってた。
関連項目ともども参考になりましたわ。サンクス
IsNumeric()は指数表現を通すから、10進限定なら自作に限る。
?IsNumeric("12345")
True
?IsNumeric("&HFF")
True


363>>346:04/01/29 09:35
ssの値がTrueといってるようじゃ
if rs.eof then
というのも
if rs.eof=true then
と書いていることだろう
? IsNumeric("1e8")
True
数値チェックの関数を自作すればいいの。
>>363
つまんないツッコミ。
そうゆうことはみんな思ってるけど言わない。
っていうとオレもつまんないか?
>>365が最悪
367初心者007:04/01/29 10:36
初心者です。お願いします。
VB 6.0 SP5 → アプリケーションウィザード→ 次へ→エクスプローラスタイル
→ 次へ→ 次へ→ 次へ→ 次へ→ 次へ→ 次へ→ 次へ→ 完了→ OK
→ 
でProject1-frmMain(Form) が作成されますが、そこで作成されている、
1 フォームの右端の方に作成されている、picSplitter(黒い縦の帯状のもの)
  は何物か ?
2 ツリ−ビューに見られる、ボタン状のようなアイコンは何物か ?

  教えてください。お願いします。
368327:04/01/29 10:40
>>328

質問しておきながら亀レスで済みません。
環境は:

win2000SP4 + VB6 SP5 + Office 2000 SP3 + IE 5.0

です。 .net frameworkはインストールしていません。




>>329

ご回答ありがとうございます。
デバッガで追ってみましたが、Unload自体が行われていませんでした。。。
初心者的な質問なんですが、
テキストボックス等のカーソル移動を
マウスクリックを使わずに、タブキーだけで移動させる時、
どうすればいいんでしょうか?

もしくはどこかのプロパティをいじればいいんでしょうか?
>>369
なんもしない。
371369:04/01/29 11:21
すいません、質問撤回…。
クリックでの移動は許可、との見解でした。

Enterによる移動がだめ、とのこと。お騒がせしました。
372350:04/01/29 12:00
>>351-358
ありがとうございます。
非常に参考になりました。

VBのコントロールのみで画像の回転(30度とか)までは
サポートしてなさそうなので結局DIBを使用します。
Winsockを使ってメール受信を行いたいのですが
日本語部分がエンコードされているのでデコードしたいのですが
どうすればよいのですか?
ISO-2022-JPというのでエンコードされているようなのですが。
今年度のバレンタイン大作戦

女性店員がレジにいるコンビニでチョコを買う

わざとチョコを受け取り忘れて店を出る

女性店員が走って渡しに来る「あの・・・これ・・・」

ちょっぴりバレンタイン気分
375301 ◆si65ga2MW6 :04/01/29 19:13
376373:04/01/29 19:53
VBだけではデコードできませんか?
>>359
面倒でも2で作ったほうがいいのではないかと思う。
コピー渡してどうのってのは、データによっては大げさすぎる機能だろうし。
読み書きを完璧に制御することは可能だとしても、VBだと他の言語より回り
くどくなるだろうから、コストが掛かってもVBでそれをやるか、不完全であっても
いいから単純な作りにするかは、仕事を見て決めればいいと思う。

おいらは、VB6はサクサクっと小便利なアプリが作れるからいいんだろ、
そんなに気になるなら他の言語でやればいいじゃん。という姿勢なので、
2か5でやっちゃうだろうな。
>>376
デコードするプログラムを書けばできる
>>367

境界をドラッグしてる間表示されるやつ

どれのことかわからない
>>359
クラスを返すって言うのはそういうことじゃないの?
とち狂ってというが、そういう風に使いたいこともあっても全然おかしくない。
クラスを返していること自体が誤っていると見た。

ふっと思ったが、読取専用プロパティだけを持つインターフェイスクラスを作って、
それをIClassAとして、それに入れて返すってのはどうだ。
ClassAにIClassAをimplementしておけばよいではないですか。

といっていることが矛盾している俺…
381キノコパウダー:04/01/29 21:43
アイコンをICLにパッケージしました。拡張子はdllです。

このアイコンパックからVBのアプリの各ボタンやWindowアイコンなどの
あらゆるアイコンを参照させるようにしたいです。

通常、コマンドボタンでもなんでもそうですが、Pictureを参照して、スタイ
ルをグラフィクスにするわけですが

このdllから参照するためにはどうしたらよいでしょうか?
383373:04/01/29 23:42
デコードのプログラムってどんな?
サンプルある?ちなみに、日本語対応のものが知りたい。
英数対応のもは発見したんだけど。。。
よろしくお願いします。
>>383
具体的に、どのエンコードがほしいんだ?
COMアドインの作成で教えていただきたいことがあります。

まずは、VBEで作成してくれる雛型を理解しようとしています。
そのため、
1.[新しいプロジェクト]メニューで[アドイン]を選び、
2.デザイナのConnectを選択し、ダブルクリック
3.[アプリケーション]をExcelに、[既定のロード方法]をnone
としました。このまま手をくわえずに、ステップインで走らせたところ、
ExcelにてComアドインを組み込む際に下記のところでエラーとなります。

Public VBInstance As VBIDE.VBE
Private Sub AddinInstance_OnConnection( _
ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, _
custom() As Variant)

On Error GoTo error_handler
''Visual Basic のインスタンスを保存します。
Set VBInstance = Application  'ここで型の不一致となります。

VarTypeで調べると、ApplicationがStringとなており、
MsgBoxで値をだすと、"Microsoft Excel"となります。
どうしてこのようなことになるのでしょうか?
386359:04/01/30 01:31
>>377
>>380

ありがとうございます。

結局、今のところは、5の(読み取り専用は諦める)線で実装してます。
2(読み取り専用インターフェイスを実装する)は、Collectionなんかの
VB組み込みクラスに対応できないんですよね・・・

C++でいうところの
 ClassA & Hoge() const { return mHoge; }
みたいにできる機能欲しいな〜という話でした。
387373:04/01/30 02:11
ISO-2022-JP、BASE64です。
ttp://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9802/winsock/
ここに英数対応のデコードはあったんですけど
日本語の対応の仕方がわかりません。
>>387
POP3(RFC1725)
ISO-2022-JP(RFC1468)
MIME(RFC1521)
>>386
friendつかえ
Private Sub vb_ConvIso2022jpToSjis(inString() As Byte, Outstring() As Byte)
Dim Index As Long
Dim OutIndex As Long
Dim bInMB As Boolean
Dim cLeading As Long
Dim cTrailing As Long

ReDim Outstring(UBound(inString))
For Index = 0 To UBound(inString)
If inString(Index) = &H1B Then
If inString(Index + 1) = Asc("(") Then
ReDim Preserve Outstring(UBound(Outstring) - 3)
Index = Index + 2
bInMB = False
Else
ReDim Preserve Outstring(UBound(Outstring) - 3)
Index = Index + 2
bInMB = True
End If
Else
If bInMB Then
cLeading = inString(Index)
cTrailing = inString(Index + 1)
ConvJisToSjis cLeading, cTrailing
Outstring(OutIndex) = cLeading
Outstring(OutIndex + 1) = cTrailing
Index = Index + 1
OutIndex = OutIndex + 2
Else
Outstring(OutIndex) = inString(Index)
OutIndex = OutIndex + 1
End If
End If
Next

End Sub
392390-392:04/01/30 08:25
おっと、ラッパもあったほうが良いか。
Base64は簡単だから自分でやれ。
ちなみにこれエラー処理ないからね。変なのデコードしてエラーでても知らんぞ。

Public Function ConvIso2022jpToSjis(ByVal pSrc As String) As String
Dim ConvedString() As Byte
If Len(pSrc) = 0 Then Exit Function
vb_ConvIso2022jpToSjis StrConv(pSrc, vbFromUnicode), ConvedString
ConvIso2022jpToSjis = StrConv(ConvedString, vbUnicode)
End Function
何か392の関数名悪いね、中途半端じゃね?
ConvIso2022jpToUnicodeじゃないの、それ。
394デフォルトの名無しさん:04/01/30 09:32
時間がかかる&戻り値いらない処理があるので
バックグラウンドで処理させたいと思ってます。
今まではこのような場合、時間のかかる処理を標準EXE(別EXE)で作成し、
コマンドライン引数で制御情報を渡し、Shellで起動していました。
しかし今回は制御情報をオブジェクトで渡したいので
バックグラウンドで動かしたい処理をActiveX EXE(別EXE)で作ってみました。
戻り値無しのメソッド・引数値渡しで作ったのですが
呼び出し元が呼び出し先の処理の終了を待ってしまいます。
うまくバックグラウンド動作させるにはどうすればよいのでしょうか?
教えてください。
395デフォルトの名無しさん:04/01/30 10:58
質問です
DAOを使用して、あるテーブルに指定の名前のフィールドが存在するかどうか
無ければ、作成するってプログラムを作成中です
フィールドを作るのはそれほど難しくないんですが、フィールドがあるかないか
を判断するためには、フィールドコレクションからfor eachで各フィールドを取り出して
あるかないか調べる以外に簡単に分かる方法があるのでしょうか?

windows2000
VB6.0(SP6)
JET3.6ObjectLibrary
Access2000
予想だがfields.countっていうのは無いの?
397373:04/01/30 11:24
390-392さんありがとうございます。
これを参考にがんばってみます。
質問です。本気で悩んでいます…。
テキストファイルの続きにまた文字を書き込んでセーブしようと思っています。
Open................ For Append As .......... を使うと続きから書き込むことができるのですが、
どうしても改行されてから書き込まれてしまいます。

あいうえお(改行)
かきくけこ……

これを
あいうえおかきくけこ・・・・・ とするにはどうしたらいいのでしょうか・・・。

ど素人の私にどなたかアドバイスをお願いします。

VB6.0使用してます。
>>398
Appendする前に書き込んだ時に改行コードは書き込まれてる。
簡単なのはAppendをやめて、追加分だけでなく、全体を書き込む方法。

文字コード変換がわかってたら、終端の2バイト前からBinaryで追加する手もある。
>>399
素人質問で申し訳なかったです。
ご親切に有難うございました!!!!

感謝してます。


401デフォルトの名無しさん:04/01/30 17:17
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
XXX.Move 120, 10440
End Sub

と書いても、テキストボックスを右クリックするとダイアログが出るばかりでXXXが移動されません。
どうすればよいのでしょうか
>>401
サブクラス化しる
403デフォルトの名無しさん:04/01/30 17:48
>>402
わかりません
ごめんなさい
VB6でフレックスグリッドコントロールを使っていますが
クリックされた行の値ってどうやって取得したらいいのでしょう?
VBから「Adobe Distiller 6.0」をプリンタにしてPDFを作成しているのですが、
ファイルを作成する際にファイル名を聞かれてしまいます。

「Acrobat PDFWrite」の時には、フルパスでファイル名をレジストリに指定しておけば
ダイアログは表示されずに、指定ファイル名のPDFが作成できたのですが・・

色々と検索してみたのですが、App.Titleにファイル名を入れても
結局はそのファイル名でダイアログが出てきてしまいます。

ダイアログを出さずに指定ファイル名でPDFを作成させるにはどうしたら良いでしょうか?
>>404
flexGRID(オブジェクト名).TextMatrix(行番号, 列番号)

でダメかな??

ちなみに選択されている行番号は

flexGRID.Row

で取得。
407デフォルトの名無しさん:04/01/30 18:21
サブクラス化についての詳細を教えてください
無知ですみません
>>407
自分で調べてみたか?
409キノコパウダー:04/01/30 18:38
VB6 ADOにて現在Accessに接続するソフトを作っています。

で、肝心の受注フォームでおかしな現象が起きています。
受注フォームには受注サブフォームが存在しその関係は

受注テーブル - SQLにて抽出したクエリーテーブル

であり、抽出したものは、商品テーブルと受注明細テーブルを
合成したものであります。(よくあるクエリーです)

ですが、このサブフォームに登録してゆくことができてもそれ
を消すとどういうことか、商品テーブルの商品まで消えてしまう
のです。

ちなみに、サブフォームのIDは親である受注テーブルのIDを
自動的に代入するようになっており、親レコード移動とともにSQL
を発行して、親フォームのIDと同じものを抽出し表示するようにし
ております。
>409
回答もらっても何の反応もしない奴に誰が答えるかヴォケカス
411404:04/01/30 19:04
>>406
flexGRID.Rowで取れました。ありがとう!!!
412デフォルトの名無しさん:04/01/30 19:06
>>408
調べてもわからないんです
414デフォルトの名無しさん:04/01/30 19:21
>>413
調べましたってば
415デフォルトの名無しさん:04/01/30 19:22
フォームをドラッグするとフォームが動く
ソースを教えてください
>>414
サブクラス化して右クリックのメッセージなどを握りつぶせばいい。
意味がわからなかったらテキストボックス右クリックで移動
という処理をやめて別の方法を考える事。
417キノコパウダー:04/01/30 19:27
>>410
まだ、アイコン抽出はうまくいっていません。
ICLとDLLとではちょっと仕様が違うようで参照ができなかったので、検証中だからです。
418デフォルトの名無しさん:04/01/30 19:29
>>416
いや、タイトルバー以外のどこをクリックしても動くようにしたいんで
いろんなところに同じコード入れてるんですけど
テキストボックスだけうまくいかなくて
>>417
ICLとDLLは同じ物じゃないか?
420キノコパウダー:04/01/30 20:24
>>419
ICLはIconshop(Lion Tech(C))で作ったものですが、普通のたとえば、
shell32.dllなんかはいけるんですが、自作の物はうまくいかない。

そのICLファイルは16*16,32*32、48*48が含まれているので
すが、どうもうまくいかない。

P.S.
Visual Basic Q & A掲示板 なぜかかき込みができない。ファイルが
ロックできませんでしたとなります
>>420や418
情報を小出しにするなボゲ、とでも言って欲しいのでしょうかね。
422キノコパウダー:04/01/30 20:39
>>421
ごめんなさい。
自分でもやっているうちに>>420のようなことがわかってきたもので。

本当にすみません。
僕としても本当に不本意です。

完成したらオープンにしたいです。
>>418
じゃもうちょっと詳しく説明してやろう。
なぜ君のコードが動かないのか?
そればVBより先にテキストボックスが右クリックを処理してしまって、
次に渡さないからだ。
ならば右クリックをテキストボックスより先に処理すればよい。
ではどうやってテキストボックスよりも先に処理できるようになるのか?
それがサブクラス化だ。
サブクラス化することによって、Windowsから飛んでくる情報(メッセージという)
をすべて自分で処理できるようになる。
ここで、右クリックメッセージをテキストボックスより先に横取りして処理してしまえば
いいのだ。ではサブクラス化はどうやるのか?
残念ながらVBでは割と難しい。普通に作るのは簡単だが、
変わったことはやりにくいのがVBだからしょうがない。ここで簡単にいえるようなことじゃない。
まぁ苦心惨憺してサブクラス化を身に付けてくれとしかいえないな。
しかし、サブクラス化しているときはデバッガが上手く使えなかったり、まさに茨の道。
とりあえず「サブクラス化するためのクラス」っつーのがあるから探してそれいれてみれ。
テキストボックスのLostFocusで見た目が同じラベル置き換え、ラベルの左クリックで
テキストボックスになる用にすれば擬似的にシミュレートできるかも
>>394
ActiveXExeのインスタンスをあらかじめ作っておく必要があったような気が…
違ったらごめーん
>>422
んじゃ、ExtractIconEx とか
おっと、DrawIconExも付け足しておこう
428デフォルトの名無しさん:04/01/30 22:03
>418
テキストボックスコントロールを使わないで、
リッチテキストボックスコントロールで代用してみたらどうでしょうか?

自分でちょっと試してみたんですけど、これなら上手くいきましたよ
429デフォルトの名無しさん:04/01/30 23:45
音楽を再生させるプログラムを作っているのですが、
Call mciSendString("Open " & ファイルパス & " Alias Music",vbNullString,0,0)
とコーディングして、ファイルパスにスペースが入っていると、エラーが発生してしまいます。
ファイルパスを「"」や「'」で閉じれば大丈夫かなと思ったのですが、
うまくいきませんでした。どなたか適切なパスの指定方法ご存知の方おりましたらお願いします。
430429:04/01/30 23:49
自己解決しました お騒がせしてすみませんでした。

「"」のつけ方ちょっと間違ってただけでした。
やはり、ファイルパスを「"」で閉じれば大丈夫のようです。
431キノコパウダー:04/01/31 00:05
>>426
なんとか実現できました。大変ありがとうございました。だいぶファイルサイズの
低減とパフォーマンスを改善できました。

ありがとうございます。
432デフォルトの名無しさん:04/01/31 10:17
タスクバーのアイコンを点滅させたり、
重複起動時に自分自身にフォーカスをあわせる方法を教えてください
>>424
>>428
ありがとうございます
では、コードの記述が不要なRTFの方を使わせていただきます
434デフォルトの名無しさん:04/01/31 12:18
DragDropのような感じでドラッグ中(ドロップしないうち)
ずっと動作が行われるようにするにはどうすればよいのですか
>432
点滅 Shell_NotifyIcon(NIM_MODIFY, nidNoftyIconData)
とかそんな感じ。
フォーカス
起動時に素で木に起動しているウィンドウ探して、あったらそれに
フォーカスあわせて自分が終了すれば良いんじゃないの?

>434
Dragメソッドを使わずドラッグを全部自前で実装すれば自由自在
436デフォルトの名無しさん:04/01/31 14:03
質問です。

(VB6.0+Access2000で開発しています)
以下のような処理を行う際、ステップごとに実行すると成功しますが
始めから終わりまで一度に流した場合、テーブルに値が正しく書き込まれません。

処理:

1.トランザクション開始

2.VBでUPDATEのSQLを走らせる

3.Accessの追加クエリを走らせる

4.Accessの追加クエリをもう一つ走らせる

5.トランザクション実行


全てのアクションクエリは、異なるテーブルへの書込を行っていますが
ステップごとに実行しない場合、成功しているのは"2"のみです。

どうやら、3/4の追加クエリが終了する前に
トランザクションが実行されているのではないかと思うのですが
Accessの追加クエリとVBのトランザクションを
シンクロさせる方法などはありますでしょうか?


よろしくお願いします。


437デフォルトの名無しさん:04/01/31 14:27
>>435
>Dragメソッドを使わずドラッグを全部自前で実装すれば自由自在
詳しく教えてください
438デフォルトの名無しさん:04/01/31 15:06
>436
 どんな手順で処理しているんですか。
 UPDATEのSQLもトランザクション制御もAccessの中で全部やるか、
逆に追加クエリをVBでやるべし。
 トランザクションの有効範囲を考えるべし。
439デフォルトの名無しさん:04/01/31 15:26
>>438
トランザクションの有効範囲ですか。
なるほど。ありがとうございました。
>>436
便乗質問すんまそん


VB + ADOで開発をしているのだけれども、Accessのほうと同じ作りにして
あるのだが、サブフォームのレコードを.deleteするとどういうわけか、リレー
ションシップ先の勘定マスターの登録して置いた勘定項目までもが消えて
なくなるという現象にこまっています。

サブフォームの内容はSQLで導き出して居居るのですが、これって完全に
リレーションのホウに問題があるんですよね?
441434=437:04/01/31 16:07
DragOverの存在を忘れていました

ドラッグ中に表示される枠を消す方法はありませんか?
442435:04/01/31 17:04
>441
Dragメソッドを使わない方法を教えてほしいのかどうなんだ。
DragOverはマウスが動かないと発生しないけど良いのか。
君が何をしたいんかよく分からんよ。

ドラッグ時の枠を消すのも、自力でドラッグを実装すれば問題なくなる。

自力で実装って言うのはこう言うことだ。

ドラッグ元
MouseDownでドラッグフラグをON、マウスポインタを適当なものに変更。
ドラッグ先
MouseUpでドラッグフラグが立っていたらOFFにして、マウスポインタを戻す。
ドロップされたときの動作をする

ウィンドウ外などでマウスが放されるかもしれないので、
必要なところのMouseMoveにドラッグフラグがONでボタンが押されていなかったら
ドラッグフラグをOFFにし、マウスポインタを戻す処理を追加

ってな感じだ。
>>442
ご丁寧にありがとうございます
今回は DragOverで用の足りることでした

>必要なところのMouseMoveにドラッグフラグがONでボタンが押されていなかったら
>ドラッグフラグをOFFにし、マウスポインタを戻す処理を追加
これは面倒なので枠を消すのは諦めます
ただ、>>442のご回答も別のプログラムで使わせていただきます
初心者をいじめるスレはここですか?
初心者を鍛えるスレならここでつ。
44677:04/01/31 19:31
俺、初心者だけど助かってますが?
質問の仕方もあると思うけど、
なにがやりたいのかまとまってないってのもあるし
なにができるのかわからんてのもあるから
こういうスレで人の質問とか見てると
結構、具体的にまとまってくるので勉強になるよ
447432:04/01/31 21:54
>>435
おくれてごめんなさい
レスありがとうございました。
448デフォルトの名無しさん:04/02/01 00:07
質問です

VB6.5SP5を使い始めた初心者丸出しですが、DataGirdをうまく使えません
DataGirdのセルをクリック(上下キーでもok)すると1レコード全体を指定するようにしたいのですが、
うまくいかなく万歳状態です。

最終てきな形はどこのセルをクリックしても1レコード全体を指定し、同時に別のテキストボックス等に
選択したレコードデータを表示させます。
が、一体どうしたら、、、、
449デフォルトの名無しさん:04/02/01 00:28
>>440
 説明はしょりすぎなんでは?
 Accessのサブフォームで起きている問題なのか、
VBで起きている問題なのか分かりかねるが。
 ちなみにリレーションが原因なら、一寸調べれば
直ぐに分かる筈。(リレーションシップの定義を)

 VBの側なら何を使っているかによって変わるが、
コントロールやウィザードに頼っていると余計な
事をされるコードになる事がある。
 ADODCとDataRepeaterを使っているのかしらん?
 DataRepeaterに付いては実験してみないと、その現象が
出るかどうか分からないが、テストをして使えないと結論を
出した覚えだけはある。(5〜6年は前の記憶なので・・・)

>>448
 目的からすれば、DataGrid以外のコントロールを使う方が
良くは無いかな?
 MSFlexGridとかね。
450448:04/02/01 00:49
>>449
うっっっMSFlexGridってなんか聞いた事が、、、
また新たな強敵が出たきがするのは気のせいでしょうか(藁

実際はDataGridってDataGridに色々イベントを起こさせようとする場合は不利だから
あまり使われていないのでしょうか、、
MSFlexGridちょっとググってみます
451デフォルトの名無しさん:04/02/01 01:35
>>448
まったく同じ情報を探してます。
自分なりに調べましたがDataGridではたぶん無理。
449の言うようにListViewとかMSHFlexGridの方が良さそうです。
ただ、MSHFlexGridも単一行選択のみさせたい場合は一部自分で書かなきゃいけない。
プロパティだけでは複数行選択できてしまいます。SelectionModeプロパティだったかな?

ListViewだとデータの追加やRecordsetのBookmark変更を自前で書かなきゃいけない。(たぶん)
というのが調べた感じです。

DataGridでむきになってコードかいてみたけど、セルにキャレットが表示されちゃうとか
列選択が一瞬見えるとかいまいち見た目よくないです。
一般的にはどうしてるんでしょうかね?
VBでMSN Messengerを作ろうと思っています。
何か参考になるページ、サンプルとかないですか?
作らなくてもあるよ、MSNメッセンジャー
>>452
ちょっと前なら仕様が公開されてたんだがな今はプロトコルが変わった
もうMS以外のソフトからログインとかできなくなった
どうしても作りたければMSに問い合わせてめんどくさい審査や書類を書かされ
開発する事になると思うぞ
455デフォルトの名無しさん:04/02/01 04:55
>>452
TCP/IPパケットを観察すれば分かるだろう。
あんた馬鹿?
金曜は動いてたけどね、Regnessem。

参考サイトやサンプルを見ないと作れないレベルじゃ、
プロトコルうんぬん以前の問題だけど。
なんでこう、お気楽極楽に作れると思うんだろうか。

VB使ってる立場としては、こういう連中にイメージ悪くされて迷惑。
まぁお気楽極楽なのがVBなのは事実ですからね。
難しいかどうかも見積もれないのははぁ初心者なら仕方ないですよ。
それでプログラム人口が増えるんなら良いじゃないですか。
バカが増えてなんになる
459デフォルトの名無しさん:04/02/01 09:18
質問です。

試験的に印刷物を出力したいのですが、
印刷物を作るには
”DataReport”を使えばいいのですか?
460440:04/02/01 11:03
>>449
ども
ちょっとはしょりすぎてしまいましたね。住みません。

問題はVB側で起きています。Accessの側でもフォームを作ってありこちらでは
こういった現象は起きていないのです。ゆえにリレーションシップが間違えている
とか、サブフォームのクエリが間違えているとかはないことは確認しました。

となるとVB側なのですが、基本的に同じ作り(外観)と同じ仕組み(クエリ)でもっ
て構成してあります。サブフォームにはDataGridコントロールを使用しており、現
在、DataRepeater版も同時に作っていますが現象は変わりません。

たとえば、1個サブフォームレコードを消すと、2個くらい消えることもあります。
ADODCに変えようか検討中でもありますが、殆ど全体をADOだけで作っているの
でなるべくさけたいところであります。

>>451
 MS FlexGridにしてもMS HFlexGridにしても、市販の
コントロールのサブセット版で、機能が制限されている。
 わたしは、それの製品版のVSFLEXArrayを使っていますが、
SelectionModeプロパティ一つをとっても選択肢が多く、
複数選択不可で一行単位で選択するような設定が出来ます。

 ちなみに自動的に処理させると要らない事までされて
痛い目にあう事がある。
 で、結局ブックマークの管理から、追加・削除・更新の
処理を全てコードで実装している。
>>460
 ちなみに、ADODCもADOを呼び出して処理しているので
動作的には変わりません。

 確認した感じでは、下記のようなSQLを書くと発生する
ようですね。
SELECT TABLE1の主キー, TABLE2.キー2, TABLE1の列
FROM TABLE1
INNER JOIN TABLE2 ON TABLE1.キー2 = TABLE2.キー2
(キー2はTABLE2の主キー)
 これに削除を掛けると、TABLE1、TABLE2の双方に削除が
掛かります。(実は更新も両方に)
 SELECTステートメント内の「TABLE2.キー2」を「TABLE1.キー2」に
するとTABLE2からは削除されない代わりにエラーが出ます。

 DataRepaterコントロールを使うなら、SQL文には勘定項目の
テーブルは含めず、DataRepeaterコントロール内に配置した
コンボボックスを用いて間接的に表示・選択する方が良いのでは?
>>458
VB使いこそが一般人に楽しさを教える立場だと思っていたが。
仕事でどうこうというのとは話し違うぞ。
プログラムできるぐらいで他人をバカ扱いするのは人として下の下だな
465デフォルトの名無しさん:04/02/01 14:47
>>442
便乗質問です
マウスポインタってどうやって変えるんですか?
466Java使い:04/02/01 14:53
VB使いって厨房しかいないね。
数年前のJava使いよりひどい。Java使いも今は改善されたけど。
馬鹿がVBにいっぱい移行してるからなんだね。(プ
>>466
お前は数年前まで厨房だったんだな
でも、その発言から考えて今もだ
912 名前:VB使い :04/02/01 14:44
Java使いって厨房しかいないね。
数年前のVB使いよりひどい。VB使いも今は改善されたけど。
馬鹿がJavaにいっぱい移行してるからなんだね。(プ
469デフォルトの名無しさん:04/02/01 15:55
質問です。

DBのテーブルにADO3.51で、オートナンバーフィールドを追加したいのですが
出来るのですか?
470デフォルトの名無しさん:04/02/01 16:16
>>465

Me.MousePointer = vbHourglass
>>470
ありがとうございます
>>464
VBのメインユーザはすでに業務プログラマだと思うが。

なにかを作ろうと思ったら踏むべきステップはあるわけで、
遅かれ早かれ挫折するやつに、最初からあきらめてもらうのも親切。

ホビープログラミングを普及させるためのVBの役割は、すでに終わってると思うし、
勝手にVB使いに楽しさを教える義務を課すのは勘弁してくれ。

ちなみにオレは、すでにVB使いでもプログラマでもないがな。
あと、安易に答えを求めてるやつをバカ呼ばわりはするが、
ちゃんとやってて困ってるひとには、わかる範囲で親切に答えてることだけは書いておく。
473デフォルトの名無しさん:04/02/01 19:07
質問です。
DrawFrameControlやDrawEdgeでユーザーコントロールの外観を描いてますが
WinXPの視覚スタイルが適用されないので困ってます。
"DrawFrameControl 視覚スタイル"とかで検索しても情報出てきません。
代わりのAPIとかあるのでしょうか。
まぁこんなとこで仕事のことを聞いてなんとかしようと言う奴がバカなのは間違いないな。

なんで、このスレには偉くもないのに偉そうにする香倶師がいるんですか?
476デフォルトの名無しさん:04/02/01 20:29
数値データの場合関数使えば簡単にいくんですけど、
文字データの並べ替えってどうすればできるんでしょうか・・・。
どうかひとつお願いします・・・。
477デフォルトの名無しさん:04/02/01 21:07
人数限定のVB学習サイトの中身
学習用テキスト
http://els.hitachi-ia.co.jp/trial1/text/c004.html

目次
1章、Visual Basicのアプリケーション開発概要
  1節、Visual Basicの基本操作と要素
  1章 理解度テスト
2章、ユーザーインターフェースの作成
  1節、ユーザーインターフェース(フォーム)の検討
  2節、画面の作成
  3節、コントロールのプロパティとメソッド
  4節、アプリケーションの保存
  5節、確認問題1
  2章 理解度テスト
3章、コード部分の作成
  1節、Visual Basicのコードモジュール
  2節、変数とデータ型
  3節、プロシージャ
  4節、入出力関数
  5節、実行制御ステートメント
  6節、確認問題2
  3章 理解度テスト
4章、エラーとデバッグ
  1節、エラー処理
  2節、アプリケーションのテストとデバッグ
  4章 理解度テスト
478デフォルトの名無しさん:04/02/01 21:08
>>469
 ADOXで何かする。DAOを使う方が楽で早くてバグも出難いと思うが。

>>476
 どういう並び方を期待しているのかな?
↓これか
1
10
11
2

 文字は文字としてしか並ばないのです。それが嫌なら自前で
ソートするコードを組めば良し。
>476
関数使えば簡単にって、そんな関数あったっけ。
何の話やねん
481476:04/02/01 22:23
ああもう説明が悪かったです。要するに入力された文字を辞書式に
並べ替えたいんです。数値だとこんな感じでできますよね?
For i = 1 To n
a(i) = Cells(i, 1).Value
Next i
For i = n - 1 To 1 Step -1
For j = 1 To i
If a(j) > a(j + 1) Then
w = a(j): a(j) = a(j + 1):a(j + 1) = w
End If
Next j
Next i
For i = 1 To n
Cells(i, 2).Value = a(i)
Next i
これが文字だとわからなくなっちゃいまして・・・。長文すんません。
>>481
Worksheets("Sheet1").Range("A1:A10").Sort SortMethod:=xlStroke
>>481
StrCompでいけなかったっけ?
今手元にVB無いんでどうだったか忘れたけど。
それで駄目なら、俺は,文字列をバイト配列で参照して比較するけど。
型を文字列型にするだけでいけるだろ。
試してみ
それからマルチステートメントは止めたほうが良いよ
485451:04/02/02 00:08
>>462
レスサンクスです。
やっぱ市販のコンポーネントで手間を省くってのが一般的なんですかね。
今日リストビューで実装してみましたが、意外と簡単にいけたので
しばらくこれでしのぐ予定です。(ちょと遅いけど)
ActiveXコンポーネントにできれば楽できそうです。
486476:04/02/02 00:12
ははあ・・。うーん。for文を使ってなんとかうまくいかないもんかなー、
なんて考えてるんですよね。うまく機能しない・・・。
上手く機能しないなんてこと無いだろ、481〜484やってみたのか。
だいたい「うまく」ってなんだよ。並び変わるけど結果が嫌なのか
並びが変わらないのかそれすらもわからん。
まさか漢字が読みどおりにならないとかそういう話か?愚痴が言いたいだけならスレ違いだ
488476:04/02/02 00:25
>487
そうですね。言葉足らずで申し訳ないです。484さんのおっしゃる文字列型
にするとa(i)みたいな記号使えませんよね?型が一致しないとか・・・。
つまるところど素人なもんで全く並び変わらないんです。
>481をどう変えればいいのか・・・。
Stringの配列は普通に使えるよ?
気になるなら
a(i) = Cells(i, 1).Value

a(i) = CStr(Cells(i, 1).Value)
にしてみれ。
490476:04/02/02 00:38
>489
レスどうもです。ただ、4だとか9だとかを入力しておくぶんには
問題ないんですけど、aだのtだのと入れて実行するとやっぱり
型が一致しないそうで・・。親切におしえて下さってる皆さんには
本当に申し訳ない・・・。
たぶん配列の宣言がなんだろうな。

Dim a( 1 To n ) As String
Dim w As String

になってるか確認してみれ。
× たぶん配列の宣言がなんだろうな。
○ たぶん配列の宣言が変なんだろうな。

脳内変換ヨロシコ
自分の作ったプログラムを友人3人に送ったら
システムエラーです:&H80070007(-2147024889)記憶域制御ブロックが壊れてます
2人はって言うエラーがでて起動しなかったらしいです・・・
1人は大丈夫だったのですが・・・

このエラーの詳しい内容もしくは発生原因が分かる人が
いらっしゃいましたら教えていただけませんか・・・?
ググってもエラー集しか出てこなかったので・・・

あと、全員VB6ランタイムは入れてました・・・
もしソフトを晒す必要があったら晒します・・・
494476:04/02/02 00:51
>491
ああ〜、なるほど・・・。全然気にしてなかったです・・。
うああ・・できた・・・。
>477-484,487,489,491ほんとありがとうございました。こんな馬鹿の僕に。
あげ続けスソマセソ。感謝sage
>>493 の
2人はって言うエラーがでて起動しなかったらしいです・・・ 

って言うエラーがでて2人は、ソフトが起動しなかったらしいです・・・

の間違いです・・・
>490
まさかとは思うが、文字列の代入は
a(i)="a"
って"をつけるんだぞ。
つか何行目でエラー出るの?
>>493
ランタイムが無くてもそういうエラーは出ない。
というかVBだけで普通に作っていたらそういうエラーは出ない。
…じゃあなんで出たのかって言うと知らんけど。
>>476
_| ̄|〇 想像を越えていたよ… >>491は天才だな
>>494
まあ、初めのうちはそんなもんだよ。
質問スレで初心者は免罪符にはならんけど、謙虚な姿勢なら答える人も嫌な気はしないだろうし。
やることやって(ググったりMSDN見たりして)から質問するなら、レベル低くても問題無いよ。
500476:04/02/02 01:29
>496
ああそのへんは大丈夫でした。””ではなかったらしいです。
>498
どうも想像以上のオンチでした・・・。


そして500ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
501デフォルトの名無しさん:04/02/02 02:44
わかる方がいましたら、教えてください。
windows2000上からVB6.0,ADO2.7を使ってLAN上の別のWindowsXPのSQL Server
2000のデータをアクセスしたいんですが、接続できません。
コントロールパネルのDNSの設定で接続確認ができません。どのあたりが
問題でしょう?ネットワークコンピュータとしてはPCが見えてます。
localのSQL Server2000のデータは問題なく見れています。
>>501
ADO2.7の既知のバグ
503394:04/02/02 12:47
>>425
遅レスですみません。
難しそうなので、違うアプローチで考え直します。
ありがとうございました。
どこで聞いたらいいのか分からないので
スレ違いですが、よかったら教えてください。
VBなどアプリでよく使うエラーとか警告のようなアイコンを
フリーで公開してるところありませんか?
505デフォルトの名無しさん:04/02/02 13:25
>>504
VBのインストールディスクに入っている
>>505
それ以外で配布してるとこあったら知りたい。
さらに便乗だけど
CDに入ってるアイコンをVB以外に使うと著作権はどうなんだろ?
showメソッドとloadステイトメントの違いって何なんでしょう?
あまり違いがわからないんですが、そう質問された時になんと答えていいやら…。
Load ステートメント ・・・ フォームを「ロードされている状態」にする

Show メソッド ・・・ フォームがロードされていなければロードして、
         「表示されている状態」にする


ちなみに「ロードされているが表示されていない状態」は、
非表示状態の時にコントロールにアクセスすれば作れる。

フォームを閉じてもプロセスが残るのはほとんどこれが原因なので気をつけr
509507:04/02/02 17:21
>>508
ありがとうございます。
非常に助かりました。
>>507
あとはまぁ、あれだ。VBのヘルプに「Visual Basic フォームの有効期間」
と言うトピックがあるから読んでみるといいと思う。

これを読むと生成から解放までのフォームの一生がよく分かるぞ。

Windows98でフォームを半透明にする方法ってあるのでしょうか。
どうあがいても完全な透明か、XP,2000用しか見つからないんです。
512デフォルトの名無しさん:04/02/02 18:20
質問です。

DA0について詳しいサイト知ってる方いませんか?
>>460 直接には >>463
 M$って、ODBCやOLEDBではSQL Serverの事以外は、
物凄くテキトーに作っている印象が強かったので、
同じ事をMDAC2.6SP1(ADO2.6)を使用してやってみました。
 接続先はSQL Server 2000、内容は同じ。
 結果は、FROM句の先頭にあるテーブルからのみ削除され、
JOIN句で結合されているテーブルからの削除は
実行されませんでした。
 これだから、Jet OLEDB Providerなんてカスだし、
M$の言う事を間に受けて、DAOでJet Databaseを触るのは
時代遅れとか抜かす奴なんか以下略・・・
 と言う事で、460さんにはDAO+市販コンポーネントで頑張るか、
MSDEもしくはSQL Serverへの乗り換えをお勧めする。
>511
基本的には不可。
背景画像を取得して自前で合成して書けばまぁ半透明と言えないことも無いわけだが、
実用するのは難しい。あきらめれ。
VB6.0とVB.NETどっちがいいだろ・・・迷ってるんだけど・・・
誰か・・・
VB6.0は20万キロ走行した車みたいなもんだから、素直に新車のVB.NET買っとけ。
517515:04/02/02 22:15
>>516
やっぱり将来的にも.NETがいいのかなぁ。
今ちょっとVB6.0かじったくらいなんだけど、.NETって互換性ある?
>>517
よくは知らないけど、大幅に仕様変更されているらしいから、互換性みたいのは
期待しないほうがいいかもね。
今からVB6.0やっても旨みが無いから、最初から新しいものに行ったほうがいいよ。
M$限定で将来性って言うならC#じゃ?
520515:04/02/02 22:36
>>518
あ、そうなんだ・・・じゃあ今日からVB.NETやろうっと。

>>519
プログラム初心者なんでVBから入ろうかと・・・
521デフォルトの名無しさん:04/02/02 22:38
>>517
VB6.0で作ったアプリのメンテをする必要がなければ
最初から.NETでいいんじゃない?

それはさておき、VB6.0って、MSDNサブスクリプションの
ライセンスがあれば今でも入手出来るんだっけ?
>>518 概ね同意
 今から、と言う部分には大きく同意。
 色々やっているが、Webアプリケーションメインの人間から見ると、
VB.NET(2003)で物凄く飛躍している。(良い意味で)
 WebClassやASPで頑張るのが物凄く馬鹿らしくなる位だ。
 Webアプリケーションの開発〜導入、保守まで含めたステップで
考えると、Websphere Studio Application Developer5と比較して
一長一短かな。(VB6.0は色々な意味でコスト掛かり過ぎ)

 VB6.0とVB.NETの互換性は無いと思った方が楽。
 文法的には似ているんだけど、効率良く構成しようと思うなら
オブジェクト指向の考え方をしないと厳しい。
 効率無視なら、何も考えずにイベント単位にプロシージャを
記述しても構わんが。
 Windowsアプリケーションだと、VB6.0の方が楽な部分も
多かったりするね。VB6.0の癖で、次のウィンドウを開いて
元のウィンドウを閉じるとスレッドが終了してパニック。(苦笑)
 最初にログイン画面だけ出すのが作り難い・・・

>519 不御意
523デフォルトの名無しさん:04/02/02 23:16
参照設定にある
Microsoft ADO Ext. 2.X for DDL and Security

Microsoft ADO Ext. 2.5 for DDL and Security
は、機能が異なるのですか?
524デフォルトの名無しさん:04/02/02 23:19
listviewで
・一行だけ色を変えたい
・スクロールバーをプログラム内で操作したい
のですが、どなたかご教授願えませんでしょうか?
525デフォルトの名無しさん:04/02/03 00:44
>524

>一行だけ
ListItemオブジェクトのForeColorプロパティを変更してみてはどうでしょう?

>スクロールバー
かなりの力技ではあるのですが、こんなんどうでしょう?
80のところは表示させたいアイテムの数で置きかえるとして

ListView1.ListItems(1).Selected = True
ListView1.SetFocus
For i = 1 To 80
SendKeys "{DOWN}"
Next i

・・・駄目?(^^;
VB6からVB.NETへの移行は
ttp://download.microsoft.com/download/VisualStudioNET/Utility/1.0/NT45XP/JA/vbtransitionguide.pdf
こういうのも参考になるかな?
527デフォルトの名無しさん:04/02/03 16:51
6.0sp5です。
基本的な質問だと思うんですけど、コンボボックスをクリックすると一覧が表示されますよね。
その表示される行数って設定できるんでしょうか?
色々やってみたんですけど、そのようなプロパティが見つからないもので・・・
よろしくお願いします。
528デフォルトの名無しさん:04/02/03 16:54
下記のようなコードで、HTMLのソースを取得しているのですが、
SetTimeouts の値をいくつにしても、数値どおりのタイムアウト処理が起きません。
なので、取得先のサーバーがダウンしていた場合などは、こちらの
アプリケーションも長い時間待たされてしまう状態です。
1秒間レスポンスが無ければ、エラーを起こすようにするにはどうしたらよいでしょうか。

Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
oHttp.SetTimeouts 1000, 1000, 1000, 1000
oHttp.Open "GET", "http://www.yahoo.co.jp", False
oHttp.Send
529デフォルトの名無しさん:04/02/03 17:32
DAO 3.6 Object Library + VB6.0 で Access を使用しているのですが、
DBの修復を行う RepairDatabaseメソッドが 3.6 からはなくなっています。
DAO 3.51 Object Library にはあります。
CompactDatabaseは以前から存在しますが。
ここから質問です。

RepairDatabaseメソッドに代わる修復メソッドはあるのでしょうか?
実行時、自動修復をさせたいが目的です。
>>527
Google SendMessage CB_GETITEMHEIGHT
質問です。
自分で作ったプログラムに何かの拡張子を関連付けた場合、
ファイルをダブルクリックで開いた時のそのファイル名はどこにあるのでしょうか?
ドラッグ&ドロップはOLEDragDropとかを使えばいいのはわかったのですが・・。
お願いします。
>>531
Command
533531:04/02/03 18:41
>>532
できました!
ありがとうございます!
>>524
EnsureVisibleとかそんな感じの奴を使うのが普通かと
535デフォルトの名無しさん:04/02/03 20:47
1から100までの階乗を順に表示したいのですが、
数が大きくなるとオーバーフローしてしまいます。
うまく分割して計算するにはどうすればよいのでしょうか
536515:04/02/03 21:11
>>522
ほお・・・色々ありがとう!

>>526
かなり為になりそう。ありがとう!
100の階乗って
93326215443944152681699238856
26670049071596826438162146859
29638952175999932299156089414
63976156518286253697920827223
75825118521091686400000000000
0000000000000
か・・・でかいな。
適当な桁数高ビット数高に区切って地道に計算するライブラリ作るのがよさそうだ。
あるいは探すのが。
538デフォルトの名無しさん:04/02/04 16:48
ある画面(form1)が表示されているときに、
多少時間がかかる処理があります。
この処理中に画面を何度がクリックするとイベントが
発生するらしく、タイトルバーに「(応答なし)」と表示されてしまいます。
(応答なしと表示されてもやるべき処理は正常に行われおり、
処理がおわると応答なしの表示も消えます。)

これを回避する策として、処理実行前に

form1.Enabled = False

を追加すれば、クリック等のイベントを防げるはずなのですが、
やはり、イベントがハンドリングされているようで、「(応答なし)」
と表示されてしまいます。

そもそも使い方が間違っているのでしょうか?
もしくは他にイベントを防ぐ方法がありますか?

>>538
時間がかかる処理していてWindowsのイベントが受けられないから
反応なしと言われるわけだ
ループ中にDoEventsを入れるとマウスイベント等が処理できる
が、気をつけないと遅くなるけどね
540デフォルトの名無しさん:04/02/04 18:41
すいません。
VB5でiniファイルのアクセス方法を教えてほしいんですが...
SDKのころはGetPrivateProfileStringだったんですが、直接APIたたく
こともないと思うので
呼ぶ関数名だけでもご教授ください。
APIしかないよ。iniなんて本来はWindows3.1時代の代物。
MSはレジストリを使うことを推奨しているからね。
>>540
API使いたくなかったらOPENで自力でするしかないよ?
レジストリなんて嫌いだー
544540:04/02/04 18:48
>>541-542
ありがとうございます。
APIたたきますm(..)m
アクセス用の機能があるかと...SaveSettingを今見つけたんですが...
APIビューアみてみまつ。
レジストリ嫌いって言っている奴良くわかんないよね。
ファイルに書く内容をレジストリに書き込んで
何が違うって言うんだろ?
iniなんか前時代のものを使うんじゃなくて、
今流行りのXMLを使ったら?
レジストリ汚しまくるVB製フリーソフトが多い理由がわかった気がする
>>545
設定のバックアップとかは、ini方が楽だろ…
549デフォルトの名無しさん:04/02/04 19:29
パソコンのボリューム(音量)を操作する方法を教えてください
>>549
つまみをいじる
>>547
どうせVB製フリーソフト使ったこと無いくせにw
嘘ばっかりだな。
なんでレジストリに設定保存するの推奨してるんだろ>MS
共有している領域をいじるのは好きじゃないんだよなぁ。
ActiveXもレジストリ使わないやつあったら便利なのに。
> 共有している領域をいじるのは好きじゃないんだよなぁ。
HDDも共有しているだろ?
Unix系OSなんて/etcに保存だぞ。
ActiveXならまだ分かるが、
普通の設定情報程度でなんでそんなに嫌うのか分からん。
>>553
まあ、そうなんだけど、フリーソフトなんかはディレクトリごと消して
使う前の状態に戻したいとか思わない?
RegEdit起動して設定情報消すなんてマンドクセ
> まあ、そうなんだけど、フリーソフトなんかはディレクトリごと消して
> 使う前の状態に戻したいとか思わない?
同じ理由でLinuxもマンドクセ
MSも.NET以降レジストリを廃止の方向へ向かうって言ってなかったっけ?
ディレクトリごと消して使う前の状態に戻るって事は、
ディレクトリに設定情報があるわけか。
マルチユーザの場合(ユーザごとに情報をもたなくてはいけない。権限の問題もある)や
バックアップ(ソフトの数だけバックアップするファイルが分散)が面倒だな。
スレ違い。スレ立てたからこっちにいけ。

設定情報どこに保存すべきですか?
http://pc2.2ch.net/test/read.cgi/tech/1075893261/l50
んじゃ結論は適材適所って事で。
次の質問ドゾー
iniファイルはPrivateのつかないAPIだとWindowsのディレクトリに保存しまくったからなあ
それじゃ収拾つかなくなるんでレジストリに→やっぱり収集つかなくなる
まあほっといてもいいけどな、多くの場合
>>560
あっちでやれ。
WPEのように、パケット弄れるフリーのDLLとかって無いでしょうか?
質問です
シーケンシャルアクセスファイルとして作っているテキストファイルから
リストボックスのアイテムにデータを写すときは
どういった処理をかければいいのでしょうか?

ただのテキストボックスならうまくいくのに
リストになるとできない…
dim hage
open "hoge.txt" for input as #1
do until eof(1)
line input #1, hage
list1.additem hage
loop
close #1
565563:04/02/05 10:23
>>564
すばやいレスありがとうございます。
どうにかうまくいきました。

リストを文字列扱いにしてるので
リストに入れたとき「""」がついてくるのがちと不満ですが。
566563:04/02/05 11:35
…とおもったら
リストだと改行は関係ないから、出力処理を
Write→printに変えればよかったんですね、失礼しました。
Inetコントロールを使って
データをWebサーバのCGIにPOSTで渡そうとしてるのですが、
データに&や=が含まれると具合が悪いので
エンコードしたいと思ってます。
そのような関数はあるのでしょうか?
>>553=>>555
> Unix系OSなんて/etcに保存だぞ。

また、unix 知ったか厨か ?

システム全体の設定は、/etc だが、個人の設定は、$HOME/.xxxx が普通だ。

こういう奴は、レジストリ使ってても HKEY_LOCAL_MACHINE と HKEY_USERS の使い分けもできてないんだろうな。

>>547 の理由がわかったよ。

>567
自分で書くしかないような気がするなぁ。
作ってしまえば楽なもんだよ。
テキストボックスか何かに
中国語を表示させる方法ってないのでしょうか・・・
571570:04/02/06 03:49
>>570はフォント設定で普通にできました・・・
けれども、
WebBrowser1.Document.Body.innerHTML
でフォントが日本語のため文字化けしてしまいうまく行きませんでした
WebBrowserのフォントの指定の仕方を教えていただけませんか・・・?
VB6.0 の For ... Next について伺いたいのですが、
 Dim i as Currency
 For i = 0 To 648191
  ...
 Next i
 Debug.Print i
を実行した場合、i が 429497 と言う結果がでるのですが、
正しくは 648192 だと思うのですが、これは何か For ... Next に制限が
あるのでしょうか?
573572:04/02/06 10:13
とりあえず
 Dim i As Currency, l As Currency
 i = 0: l = 648191
 Do Until i > l
  ...
  i = i + 1
 Loop
 Debug.Print i
で、648192と言う結果を得ることはできたのですが、
For ... Next にこんな制限があるなら、
もう使わないようにしないと…と考えてます。
テキストボックスに入力しているときのカーソル(キャレット)の位置を
取得するにはどうしたらいいのでしょうか?

ほしい情報としては先頭もしくは最後からのキャレットの位置です。
行数はあればうれしいのですが・・・。
Forに問題はありません。
Currencyにも問題はありません。

Forでループ変数にCurrency型を使うことが問題です。
Forでループ変数にCurrency型を使ってはいけません。
>>568 スレ違い氏ねよ。どうせ最後の行のセリフを言いたいだけの厨房だろ。
577デフォルトの名無しさん:04/02/06 10:54
>>574
SelStart
>>577
何の冗談だ。
>>578
? 冗談じゃない答えを知っているなら自分で答えたら?
それが出来なきゃ厨房
>>579
おまえが書いてみろよ。添削してやる
>>574
SendMessage Em_CHARFROMPOS
582572:04/02/06 11:15
>>575
 Σ( ̄□ ̄ノ)ノ えッ!? そうだったんですか!!
 やばッ 結構多用してる... たまたま 648191 で気がついたのですが、
 Currencyじゃないと回せないループ(2G越えるデータを扱う)なので
 Do ... Loop に切り替えます。
 ちなみに使えない理由は何でしょうか?HELPには載っていなかったのですが。
リロードしてなかった
>>579 満足した?
SelStartでも間違って無いじゃん。なんでもAPI使うくせ治したほうがいいよ。
>>584
もうね、阿保かと。馬鹿かと。
SelStartのみって、ループで改行コードカウントして位置を数えるんだろうね
>>582
For構文がCurrencyに対応していないだけだと思われ。
Currencyは特殊なメモリ形式だから、Forがコンパイル時に
生成すると思われるアセンブラ命令(inc)では対応できないのでしょう。
588574:04/02/06 11:39
574です。
ええっと・・・。も、もちついてください。

APIの使い方あんまりよくわかんないんですけど、なんとかやってみます。
ちなみにSelstartだと、指定したバイト数目しかしていできないので、ちょっと
まずいんです。
ああ、なるほどSelStartと聞いて改行コードが含まれている場合でも
一発で取得できる命令だと思い込んじゃったのか。
>>578
荒れ始めの原因になるから、煽るだけで答えを書かないというのは
止めた方がいいよ。
591574:04/02/06 11:43
>>589

>Selstartだと、指定したバイト数目しかしていできない
ってのは間違ってますか?

589さんの言ってる意味がよくわからないんですが、
改行コードが入ってるとやっぱりダメなんですか?
少し詳しく教えてもらえないでしょうか?
>>582
気になったのでやってみたら、currencyではNGでlongではokでした。
で、MSDNで検索したら「コードの最適化」ってページの中で
>長整数型変数と整数演算を使用する
>計算処理では、通貨型 (Currency) 変数、単精度浮動小数点数型 (Single) 変数および倍精度浮動小数点数型 (Double) 変数の使用は避けてください。できる限り長整数型変数を使います。特にループ内では、長整数型の変数を使うようにします。
って書いてありましたよ。
でも、エラーになってくれないのはつらいよ
まあまあ、どっかの言語みたいに数値がオーバーフローしたら
マイナスになったり、配列サイズをオーバーしたのにメモリ破壊して
動くようなことが普通に発生する言語よりはましだと思えば。
595572:04/02/06 12:03
>>587 >>592
なるほど。 最適化の項目は読んでませんでした。
そうですか、Longでオーバーフローしてから、ずっとCurrencyで
やってきたのですが、適材適所ってやつですね。
ソース、見直します。 ありがとうございました ≦(_O_)≧
>>594
VBなら安心してたのにー
>>553=>>555=>>576 なのか ?

すれ違いにレスするお前も氏んだらどうよ。
598592:04/02/06 14:53
>>595
あぁ
でも、時間食うからlong使えっては書いてあるけどCurrencyを使うなとは書いてないなぁ・・・
自分でレスしておきながら微妙に違うことを答えていた感じが・・・
て言うか、For 〜 Next ループ抜けた後の制御変数の値って保証されてんの ?
>>599
VBはOK
ドキュメントのどこに載ってるか教えてくれないか ?

いままでびびって使わなかったから、ちゃんと保証されてるなら使いたい。
602570:04/02/06 18:04
あれからずっと探してるけど
Webbrowserのフォント指定方法が見つからない・・・
_| ̄|○
>>602
 Webbrowserコントロールのフォント設定の前に、
 Webbrowserのソース(文章)は、HTMLファイルないしURLなんですよね?
 で、あればInetnet Explorerに中国語フォントがインストールされている
 ことが前提となるのでは?
604603:04/02/06 18:37
ちなみにInetnet Explorerに中国語がインストールされているかは
Inetnet Explorerのメニューバー、[ファイル(F)][編集(E)][表示(V)]の
[表示(V)]→[エンコード(D)]の中を参照すれば、わかるかと思います。
605デフォルトの名無しさん:04/02/06 23:25
format$(now,"yyyy\/mm\/dd hh\:nn\:ss")
のように、区切り記号の前に\を付けると環境に左右されず、/や:が出せると聞きました。
format$(now,"yyyy\/mm\/dd\ hh\:nn\:ss")
と、スペースの前に\を付けても付けなくても実行結果は変わらなかったのですが
付けた方がいいのでしょうか?
606570:04/02/06 23:52
>>603-604さん
IEで見るときは正常なんですよ・・・
というかそのページはユニコードだったり(;´д`)
>605
とりあえずおれは
Format$(now,"yyyy年mm月dd日")
みたいなのを使っていたが、
Windowsの国別設定が日本以外になっているとエラーとか
分けのわからん事態になって苦労した。

Format$(now,"yyyy\年mm\月dd\日")
とすると設定が日本語じゃなくてもエラーにならなくなった。
>>605
>環境に左右されず、/や:が出せると聞きました。

コントロールパネル → 地域のオプション → 日付 → 区切り記号
を変更すると、環境に左右されることが分かるぞ。
609デフォルトの名無しさん:04/02/07 06:10
VB6.0やそれ以前の製品ってもう販売されていないのでしょうか?
なんか.NETになってありゃもうVBとは思えないようなコードなんですが・・
XP以降のOSとかにはVBで作ったアプリは使えなくなっちゃったりするのかなー
610605:04/02/07 09:55
レスありがとうございます。ちょっと解り難かったですね・・・。
「d h」
「d\ h」
「スペースの前に\を〜」というのは、この部分を質問したかったのです。
611603:04/02/07 10:40
>>606
 じゃぁ Webbrowserコントロール で目的のページを表示したとき、
 右クリックで[エンコード]と言う項目がでるから、そこ参照。
MSDNライブラリの「数値表示書式指定文字 (Format 関数)」に、

- + $ ( ) スペース
  指定する文字をそのまま挿入します。これら以外の表示書式指定文字を
  挿入するには、その前に円記号 (\) を付けるか、ダブル クォーテーシ
  ョン (" ") で囲みます。 
>>611
レスありがとうございます

それは分かるのですが
自動でやりたいんです・・・
動作上WebBrowser1はVisible=falseしてます・・・
614570:04/02/07 11:39
>>613>>570です_| ̄|○
VB6.0のインストーラーですが、DistributionWizerdを使ってます。
これはW2000なんかで日本語のユーザー名を使ってる場合は
インストールできませんね。
なにかいい方法はないんですかね。
 腐るほどHDのメモリーはありますんで、DLLを共有化する必要はまったくないん
ですが、レジストリー登録しないといけないんでしょうか?
616440:04/02/07 13:04
>>615
日本語を使うなと言えばいい。

そもそも、ユーザーアカウントに日本語使うほうがどうかしている。
頭が強烈に悪いとしかいいようがない
>>615
インストーラのバグなので修正する必要がある。
修正方法はどっかで見たけど忘れた。
618603:04/02/07 13:40
>>613
 いや、だから。 そこ参照した時、何が選択されているのか?が聞きたい。
 ソースは、自分自身で記述したものか?スタイルシートで強制的に中国語フォント
 (何使っているか知らないけど)を指定したソースを読み込ませてみては?
 もしくはSendMessage等で操作。
 ってか何故に非表示???
>>615
 DLL、OCXはEXE直下でもOK(ダメな物もあると聞くが)
 VB付属のDLL、OCXなら直下でもOKなはず。
619603:04/02/07 13:43
>>617
 ググッったら、簡単に見つかるね。
620デフォルトの名無しさん:04/02/07 15:31
タイトルバーにあるボタン(最小化/最大化等)を押したときに、
イベントを発生させる方法ってありますか?
621600:04/02/07 15:34
>>620
ない。以上
>>620
サブクラス化して
http://black.sakura.ne.jp/~third/system/winapi/win42.html
この辺りのメッセージを拾えばいいと思われ
623620:04/02/07 15:36
>>621
そうですか…残念です。
レスありがとうございました。
624620:04/02/07 15:37
>>622
なるほど。ちょっと難しそうですけど頑張ってみます。
ありがとうございました。
625デフォルトの名無しさん:04/02/07 16:02
自作プログラム、ソフト、ツールを公開し合うサイトなんて
ないもんかね?
( ´,_ゝ`)プッ
628570:04/02/07 16:22
>>618
WebBrowser1はソースを取得するためだけにあるんです
それでinnnerHTMLでソースを読み取っても
どうしても中国語とかが?????になっちゃうんです
629デフォルトの名無しさん:04/02/07 16:43
>>627
 どれくらいの人が、参照されているのでしょう?
 あまりアクセス数が多いとは思えないのですが(汗)
>>629
これからの発展に期待してみるというのはどうでしょうか
631603:04/02/07 16:46
ソースを取得する為なら、WebBrowser(MS Internet Controls)コントロールよりも
Inet(MS Internet Transfer Control)の方で取得した方が的確に取得できると思いますが
如何でしょう?
632デフォルトの名無しさん:04/02/07 16:47
>>630
 そうですね。
 面白うそうなので、ちょっと見回ってみます♪
>>631
INETだと日本語すら化けてしまうんですよ・・・
UTF-8のページなんで・・・
634デフォルトの名無しさん:04/02/07 17:08
フォーム上の全てのオブジェクトで同一の動きをする
OLEDragDropイベントを発生させたいのですが、
簡単な書き方ないでしょうか?
635603:04/02/07 17:16
>>633
じゃぁ WinSockコントロールは?(mswinsck.ocx)
これなら、ちゃんと取得できる。
>>635
WinSock・・・
というかWebBrowserコントロールでできないのなら
もうあきらめます・・・・゚・(ノД`)・゚・
637615:04/02/07 18:05
> そもそも、ユーザーアカウントに日本語使うほうがどうかしている。
> 頭が強烈に悪いとしかいいようがない

インストール先は東大出の課長連中のPCです。アフォーですが、
頭はいいです。
 日本はアメリカの属国になってしまったのか? TRONよガンばれ。

> >>615
> インストーラのバグなので修正する必要がある。
> 修正方法はどっかで見たけど忘れた。
  
  できたら思い出して。
638615:04/02/07 18:05
>  DLL、OCXはEXE直下でもOK(ダメな物もあると聞くが)
>  VB付属のDLL、OCXなら直下でもOKなはず。

 そうなんでしょうか? MSって説明言語が少ないですよね。
レジストリとインストーラーの関係をチャンと説明して欲しい。

> >>617
>  ググッったら、簡単に見つかるね。
 見つからないです。
 代わりに、VS Installar 1.1というのがありました。
 こっちの方が機能が上なのかな?
 でトライしてみます。
>>634
Private Sub Command1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Call OLEDragDrop(Data)
End Sub

Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Call OLEDragDrop(Data)
End Sub

Private Sub Label1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Call OLEDragDrop(Data)
End Sub

…ってやってから

Private Sub OLEDragDrop(Data As DataObject)
' ここで処理
End Sub

誰かがもっと綺麗な方法を書いてくれることを祈りつつsage
>>639
それしかないんじゃないの?
>>620
Form_Resizeじゃダメなのか。
641デフォルトの名無しさん:04/02/07 19:45
>>638
むしろVB付属のインストーラではなく、自分自身でインストーラーを作るとか。
俺はLZHの自己解凍でも十分だと思ってるから、EXE直下にDLL/OCXを置いてるんだよ。

ってか、なんか(略)  カァー(゚Д゚)≡゚д゚)、ペッ!!
一般的にはCOM経由ものはレジストリに登録した方が
いいとは思うけどな。

>>641
というわけで、regsvr32くらいは使った方がいいと思う。
インストーラーにバグがあってデータ消しまくったソフト会社もあったよな
テキストボックスに検索語句を入れ、AND OR NOT のキーワードで
条件検索もできるソフトを勉強目的で作りました。(複合条件可、カッコ未対応)

で、データファイルが大きい時のために無用な検索を避けたいので、
事前に検索条件の整合性をチェックしたいのですが、可能ですか?

× 東京 AND NOT 東京
○ 京都 AND NOT 東京都
× 東京都 AND NOT 京都
645644:04/02/07 20:54
書いてから気がついたけど、アルゴリズムスレのほうがよかったでしょうか。
646デフォルトの名無しさん:04/02/07 21:14
redim について教えて

Dim buf() As Byte
Dim x As Long
Dim y As Long
Dim c As Long
On Error GoTo EHD
x = 1024
y = 32
c = x * y
ReDim binBuf(1024 * 32) 'オーバーフロー
ReDim binBuf(x * y)     '正常
ReDim binBuf(c)        '正常

Exit Sub

EHD:




なんで1024*32と直書きの時はオーバーフローするの?

647646:04/02/07 21:20
すまぬ
binBufはbufと思ってくれ。
>>646
どちらもInt型だから。
どちらかの数字の後に&を付ければOK。
>>646
ReDimの問題では無く、通常の計算がIntで行われているから
整数型-32,768 〜 32,767の範囲を超えてエラーとなる
1024& * 32& ならばエラーは出ない
リロードすりゃよかった_| ̄|○
651646:04/02/07 21:52
>>648 >>649
レスありがとう
ボケてるなオレ(´・ω・`)ショボーン
>>650
    ○
   .∵  ● ノ  
   ':.  | ̄
_| ̄|  / >
653デフォルトの名無しさん:04/02/08 15:20
質問です。
DistributionWizardでパッケージを作成して配布したいのですが、
WindowsXpで作成したものは、Windows2000では動作しました。
WindowsMeでは、なにやらシステムダウンしました。
下位バージョン(Se,95等)ではやはり制約を受けるものなのでしょうか?
>>653
>>なにやらシステムダウン
のなにやらがわかればわかる。
だいたい検討はつくが。
655デフォルトの名無しさん:04/02/08 18:01
質問です.
HTML文書をフォーマットをなるべく崩さずにテキスト化するには
VBではどうやったらいいのでしょうか。
InetでHTMLを読み込むことはできています。

変換の際にフォントとか画像とかの情報は失われても構いません。
テキスト部分だけなるべく似たようなフォーマットで
表示できるようにしたいのですが。
656634:04/02/08 18:15
>>639-640
遅レススマソ
やはりその方法しかないですか。
for文みたいに、Each〜とか使えないかと甘いこと考えていました。
657620:04/02/08 18:25
>>640
うまくいきました!ありがとうございます。
>655
なるべくってなんだよ。
どれぐらいなら妥協できるんだよ。
そんなあいまいなことできるわけないじゃん。
じぶんでHTMLパースするか、諦めろ
>>655
WebBrowserに表示してコピペ
>>659
アラインメントやなんかは消えるけど、それが一番お手軽だよね。
HTMLの解釈は手打ちや出力ソフトによって、でんでん異なるし。
Wordのウェブページ出力で正直げんなりしたもんだ。(´・ω・`)
661デフォルトの名無しさん:04/02/08 19:51
自前でコントロールを作成する為にクラスモジュールを使ったのですが、
サブクラス化するところで躓いています。

クラスモジュール内で作成したウィンドウをサブクラス化して、メッセージ
(WM_KEYDOWNなど)に応じたイベントをRaiseEventで実行させたいのですが、
コールバック関数からクラス内の関数が呼べず困っています。

拙い説明で恐縮ですが、うまい解決方法を教えてくだされば幸いです…
>>661
コールバック関数にユーザが自由に使える4バイトの引数があるはず。
サブクラス化するときにクラスのポインタをコールバック関数の引数に
来るように設定して、コールバック関数でクラスのポインタを
クラス型変数に戻してからメソッドを呼び出す。
探せばサンプルソースが見つかるはず。
VBでGWL_USERDATA使えたんだ。今まで知らんかった。
664661:04/02/08 20:39
>>662
ありがとうございます。検索したところ以下の様なページが見つかりました。
ソースと睨めっこしながら実装してみようと思います。
ttp://www.remus.dti.ne.jp/~shenron/access/knowhow/samples/stdSubClass.txt

>>663
よくわかりませんが↓が見つかりました。
ttp://vbvbvb.com/jp/gtips/0751/gSetWindowLongGwlUserData.html
>>664
憶測のままのレスだけどユーザーコントロールはダメなのか?
文字列や数字のデータがあるとき、
もうひとつのデータと比較するのはどうしたらいいでしょうか?
たとえば、電話番号のリストを比較したり・・・。
超初歩的質問スマソ。。

ちなみにVB6です
>>666
もちっと具体的に言わないとわからんよ。
DIFFみたいにしたいのか?
668666:04/02/08 22:10
たとえばエクセル等で
比較元と比較先のデータを調べて、
抜けているところがあるかチェックするプログラムを作りたいんです。
うーん、うまく説明しづらい・・・・
669661:04/02/08 22:18
実装成功しましたヽ( ´ー`)丿

>>665
ユーザーコントロールはまだ触った事がありませんが調べてみると
なかなか楽しそうですねw
機会があったら遊んでみようと思います( ´∀`)
>>668
総当りで文字列比較するだけじゃん。
数が多ければソートしてからのほうがいいけど。
ソートと検索はほぼ同じ
2つのデータが
A(100)
B(100)
に入っているとすれば、
For i = 0 to 100
 For j = 0 to 100
  If A(i) = B(i) then
   ほにゃほにゃ
  Else
   ほえほえ
  End If
 Next
Next
こう言うことをしたいのかな?
>>672
jのループが無駄だな(w

If A(i) = B(j) then
おうひょ 失敬
675デフォルトの名無しさん:04/02/09 07:47
全く同じプロジェクトが
 DistributionWizardだと  10Mbyte
 VS Installar 1.1では 2Mbyte
なんでだ。無茶不安になる。
見かけ上はおんなじように動いている。
どっちが正しいとおもう?
676615:04/02/09 07:59
>>642
> むしろVB付属のインストーラではなく、自分自身でインストーラーを作るとか。
> 俺はLZHの自己解凍でも十分だと思ってるから、EXE直下にDLL/OCXを置いてるんだよ。

 え、それだけでいいんですか?

> 一般的にはCOM経由ものはレジストリに登録した方が
> いいとは思うけどな。
COMって、ActiveXのことですよね。
VBではレジストリに登録しないと利用できないですよね。
アプリにしたときは、レジストリー登録しなくても動くのですか?
それなら、なんでレジストリーに登録した方がいいんでしょう。
>>676
何が言いたいのかサッパリ。
もう少し勉強しろ。
>>676
アプリの中に必要なOCXのファイル名が入っててな、レジストリに登録
されてなくても該当ファイルがある場合はアプリが自前でレジストリへの
登録を試みるのだよ。でも、regsvr32しといたほうが無難。
679615:04/02/09 10:37
>>678
> アプリの中に必要なOCXのファイル名が入っててな、レジストリに登録
> されてなくても該当ファイルがある場合はアプリが自前でレジストリへの
> 登録を試みるのだよ。でも、regsvr32しといたほうが無難。

 あ、そうなんですか? 良くわかりました。

 まれにレジストリーに登録を失敗するわけですね。
 それで同じ失敗するにしても、アプリ自前の登録の時とインストール時の登録では、
 インストールの時失敗した方が利点がある。
  あるいは他のアプリを停止せよなどの注意喚起ができる。
 無難というのはそういうことですね。

 
いかん
このままでは>>677のばかさかげんがめだってしまう
がんがれ>>677
681デフォルトの名無しさん:04/02/10 01:56
例えば
rr = 254
gg = 128
bb = 64
color = RGB(rr,gg,bb)
と実行した結果、colorに4227326と値が入ったとします。
この求められたcolorから再び rr gg bb をそれぞれ求めるとする場合
どうすればいいでしょうか?
and演算子とシフト演算をすれば求められると思うのですが、VBでそれを
実現する方法がわかりません。
G = Color \ 65536
B = (Color \ 256) And 255
R = Color And 255
RGBは間違ってるかも知れんけどこんな感じ
683681:04/02/10 02:02
…と思ったら、できました―(汗)
? ((RGB(254,128,64) and &HFF0000&)/256/256)
64
? ((RGB(254,128,64) and &HFF00&)/256)
128
? ((RGB(254,128,64) and &HFF&))
254
>>681
こんな感じだっけか
rr = color And &HFF&
gg = color \ &H100& And &HFF&
bb = color \ &H10000& And &HFF&
685デフォルトの名無しさん:04/02/10 02:06
ユーザー定義型の配列を要素数0で初期化することは不可能でしょうか?
Dim hoge() As String
hoge = Split("")
みたいなことをユーザー定義型でもやりたいんですが…
686681:04/02/10 02:06
>>682
 即レスありがとうございます!!
 試してみたところ、GとBが逆みたいですが、
 算出することができました!!
687デフォルトの名無しさん:04/02/10 03:42
VB若葉マークです

if文に入る条件として、.txtの拡張子を
含むファイル名だったらif文に入る、としたいのですが、
どうにもこうにもうまくいきません。
like関数では文字列が完全に一致しなければ
だめなようですし・・・
なにかうまい方法はありますか?
>>687
Right()
>>687
Likeでワイルドカード使う手もある。
スネーク、何をしている!
>>687
拡張子が3文字とも限らないので、
ファイル名をmidとかrightとか使って右から順に見ていき、
ピリオドが出た時点でのそれまでの文字列を
抜き出して拡張子を判別してそれを"txt"と比較すればいいかと。
>>691
何を言ってるんだ".TXT"と比較すればいいでしょ?
拡張子を取得するAPIがあったような・・・
でも間違って無いじゃん。なんでもAPI使うくせ治したほうがいいよ。
>>691
探すならInstrRevの方が早くないか?
大文字・小文字が区別される問題はUCASE$かLCASE$を使えば良いしね。

>>693
Scripting File System Objectを使用して、GetExtensionNameってのもあるね。
>>694
こういうのはOSが持ってるAPIでやったほうがいいのでは?
>>695
InStrRevにもテキスト比較モードがある。
>>697
全角も半角も一緒にされてしまうだろ
>>698
初心者なら、ファイル名に全角の拡張子モドキもありうるか。
700デフォルトの名無しさん:04/02/10 09:41
>>687
こんなんでいいんでないかい
if LCase(Right(filepath,4))=".txt" then
Mid$(strPath, InstrRev(strPath, "."))
APIにあるものは使ったほうがいい
まあ、使う使わないはひとそれぞれで。
704デフォルトの名無しさん:04/02/10 11:23
MDACってフリーソフトはないのですか?
いくら探してもでてこない。。
誰か助けて ; ;
MSダウンロードセンター行け
706687:04/02/10 12:40
みなさんありがとうございました
無事解決しました
Rightとか便利なのがあったんですね
勉強不足を痛感しました(汗
splitで「"」という文字を区切りに使う場合はどうすればいいのでしょうか
Split(TextLine, "\"")
とやってもダメなんですよね
エスケープの仕方教えてください。
たまたま入力ミスしたら自己解決しました
Split(TextLine, """")
ですた
VBでMpeg2の動画ファイルを同時に2つ以上再生させる方法はありますでしょうか
QuartzTypeLib.FilgraphManagerでやろうとするとオートメーションエラーが出てうまくいきません
Win2000
VB6.0 SP5
です
 関数をループすると、使う度にそれぞれ別に読み込まれ、end function も
その数だけ繰り返されるような感じですが、関数内で計算された値はもう一度その
値を使って同じその関数の計算を繰り返したり、関数を途中で抜けて、また
続きに入るような仕方はないのでしょうか? 後者は関数の入力と出力の
場が同じ時、その合間にその場を編集しようとして思いました・・・・・・。
>>710
前者は変数をStaticで宣言
それぞれ3つのコンボボックスに
年・月・日とあって、年と月の値を取得して
日のコンボボックスのアイテムを変えるときってどう書けばいいのでしょうか?

あと、年のコンボボックスにその年からの前後2年という形で
アイテムに加える時はどうすればいいのかもあわせて教えてください。
>>712
時間内のでヒントだけ。
datediffとdateaddのヘルプを参照知る。
714デフォルトの名無しさん:04/02/10 20:51
VB6のSP5ですが、教えてプリーズ

コマンドボタンなどを押すとテキストボックスやフレックスグリッドの追加や削除って
できるのでしょうか?
超初心者ですが、作っていたら1フォームでオブジェクト数が限られてるようなので
ソース上でテキストボックスやラベルなどを作れればそのあたりがクリアになるのですが、
あるのかな、、、
>>714 できる。コントロール配列にして実行時Load
>710
関数を途中で抜けて続きではいるなんてVBじゃなくても無理。
複数の関数に分けたら?
717714:04/02/10 21:30
>>715
やばいコントロール配列の意味がわからんw
調べに逝ってきます
718デフォルトの名無しさん:04/02/10 21:35
オーディオデバイスの音量を変更させたいのですが、
どうすればいいでしょうか?
>>710
場ってなんだ?編集したいってのは入力値OR出力値を変更したいってことなのか
入力元OR出力先を変更したいってことなのか?

言ってる事はよくわからんが、関数を抜けたりしないで、
関数内でIF文かましてInputboxなり何なり使って、
その編集したいって何かに代入してやればいいんじゃないかと思った。
質問です。Shell_NotifyIconでタスクトレイにアイコンを追加できますよね。
その追加されたアイコンにカーソルを合わせるとツールチップが表示されますが、
このツールチップを複数行で表示させることって可能でしょうか?

以前どこかのサイトで見たような覚えがあったのですが・・
721デフォルトの名無しさん:04/02/11 15:28
ちょっと教えていただきたいことがあります。

ただいま、VB6+SP5にてCSVファイルをDB(Jet)に書き込むという
プログラムを作成しております。FileToFileの処理が中心で、
グリッドを使ってデータ入力という処理ではありません。

CSVファイルからDBに書き込む際は、SQL文を使用しているのです
が、処理の内容からして単にINSERTだけではなく、SELECT文や
UPDATE文も使用しています。そこで、ADOオブジェクトを利用し
てSQL文を発行する際には、以下の3通りがあると理解しておりま
す。

1) RecordsetオブジェクトのOpenメソッド (SELECT文のみ)
2) ConnectionオブジェクトのExecuteメソッド
3) CommandオブジェクトのExecuteメソッド

上記3通りの方法の違いはどこにあるのでしょうか? 1)について
はSELECT文の場合しか使えないということは分かっているのです
が、特に2)と3)の違いが分かりません。

同じプログラムにおいていろいろなメソッドを使うのはメンテナ
ンス性に劣るので、とりあえず3)の方法を使用しておりますが、
2)との違いを知らずに使うのは不安です。

よろしくお願いいたします。
>>720
普通に vbCrLf とかじゃ駄目だっけ?
>>721
 3番の方法は、パラメータークエリーを使用する
場合に使います。
 引数だけ変えて同じクエリーを実行する場合に
レスポンスが良くなります。
 これは、SQL文の解釈が最初の一回目だけで行われ、
それ以降は解釈された結果を使用して実行されるので
処理が速くなるのです。

 でも、JetDatabaseなんかじゃ、ハッキリとした
メリット無いよな。
 (SQL Serverだと明らかに処理が速くなる)
 DAOを使った方が楽で速いよ。
724デフォルトの名無しさん:04/02/11 19:32
質問です。
Windowsの右クリックの送るにVBのEXEをおいたりEXEのアイコンにファイルをドロップした場合に
受け取るファイルのフルパスを取得するにはどうしたらいいのでしょうか?
Command使うといいよ、って最近同じようなレス見たような気がするぞ。
726724:04/02/11 20:14
何となくわかり単純なプログラムに成功しました。
ありがとうございます。

>最近同じようなレス見たような気がするぞ。
以後よく調べてからにします。すみませんでした。
727721:04/02/11 23:56
>>723さん、ありがとうございます

3)はパラメータークエリーが使えるのがメリットなんですね。
説明が不足してましたが、今のところJetを使っていますが、
実際の運用ではOracle8iを使う予定なんです。自宅でしこしこ
プログラミングしているのですが、Oracle8i Personalを
インストールしてみたらめちゃくちゃPCが重たくなったし、
Oracle8iサーバーを作るのが面倒だったので、とりあえず
Jetを使っています。ですから、SQL方言を考慮して、ターゲット
DBMSに応じてSQL文を変えるようにしています。

で、2)と3)ですが、機能的な違いというのはパラメータークエリーが
使えるか否かだけ、という理解でよろしいでしょうか。使えるメソッドや
プロパティに違いがなければ、このまま3)の方法に統一して
プログラミングしたいと思っています。

よろしくお願いします。
728720:04/02/12 00:01
>722
私もそう思って試してみたんですが、
「・・」ってなってしまうんです。
一応Chr(0)〜Chr(255)の文字の中に改行するための
文字コードがないかと探してみたんですがそれでも駄目で(´Д⊂
ツールチップの改行はマジックワードを唱えてからじゃないといけないとオモタ。
730デフォルトの名無しさん:04/02/12 02:05
初心者で恐縮ですが、どなたかお教えいただけないでしょうか。

Dim strName(4) as String
この配列の宣言時に、値を代入するには、どう書いたらよいのでしょうか?
731デフォルトの名無しさん:04/02/12 02:12
cと勘違いしているな
vbじゃ無理
Dim strName() As String
strName = Array("あ", "い", "う", "え", "お")
でええんちゃうん?

ただしArrayの代入先はVariant型限定だったかもしれない。
>>732
String型だとArrayでは代入できなかったーよ。
あと、宣言の時点で配列にするとエラーがでた。

Dim strName As Variant
strName = Array("あ", "い", "う", "え", "お")

で、問題なく代入できてまつ。
734732:04/02/12 03:08
>>733
やはりそうでしたか。検証dクス。

自宅に開発環境が無いときついなぁ・・
会社ならすぐ検証できるのだが。
735733:04/02/12 03:26
>>734
Visual Basic 5.0 Control Creation Editionならフリーで入手できる
からダウンロードしてみそ。実行ファイルは作成とか、いろいろ制限は
あるけど、IDE上での実行は無問題。>>733の検証もこれでやったし。
736デフォルトの名無しさん:04/02/12 09:57
質問です。
MO等の書き込み中、書き込み時間を
取得するにはどうしたらいいですか?

>>736
その書き込み時間とやらは何者だ?
738デフォルトの名無しさん:04/02/12 10:14
>>737
質問が簡略すぎました。すみませんっす。
書き込み時間とは
あとどのくらいで書き込みが終わりますよという
時間予測値です。
MOに書き込み中、プログレスバーにその時間を
表示したいです。
SH系のAPIを調べてみれば。

でもさ、OSのあれも結構テキトーだから、あんまり期待しないほうがいいんじゃないか?w
>>738
だからさー自分でOPENして書き込んでるわけ?それともFSOなどでコピー?
自力でOPENしてたら残りのバイト数と1秒あたりに書き込んだバイト数で
計算しようと思ったらできるでしょう?
それらしく見せるにはコツがいるけどなー
741712:04/02/12 10:26
>>713
スイマセン、あの後すぐ仕事から帰ってしまったのでかなり返信遅れました。
ありがとうございました。返答内容については解決しました。

…しかし、前者の質問についてはまだ未解決のままです。
心優しき方、どうか…。
>>741
年・月のそれぞれのコンボのChangeかClickイベントで、日を毎回設定。
>741
何がわからんのかがわからん。
年と月のコンボから日付を取得するの方法?
選択された年月から、その月の末日を算出する方法?
日のコンボボックスが持つ値のリストを変更する方法?
>>741
末日は
Dim a
a = "2004" & "/" & "05" & "/01"
a = DateAdd("m", 1, a)
a = DateAdd("d", -1, a)
MsgBox Day(a)

てきとーにつくったから正しいかどうかはしらん。
翌月の一日前がその月の最大の日。
>>741
1 to 31 までループしながら日付を設定。IsDate でエラーを返したら
そこでやめる。
>>744であってると思う。
>>745のやりかたはなんとなくいや。
それなら、246911以外は31で、46911は30、2は年を4でわって100でわって・・・のほうが良い。
747741:04/02/12 10:58
短い間にこんなにレスいただいてありがとうございます。
>>742
ひとまず閏年を無視してCase分けでやってみたのですが、
(Case 1 Or 3 Or 〜
For 日付コンボボックス.addaitem 1〜31 Next
ってな具合に。)
どうも月のコンボボックスのchangeではイベントが発生してくれませんでした。

>>743
年と月のコンボボックスを表示した時に、日のコンボボックスに
適当な日数のアイテムを加えたかったのです。
>>747
だから、changeかクリックってかいたっしょ?
コンボのスタイルによって、選択のイベントが確か違うはず。
749747:04/02/12 11:39
スイマセン、文法をよく覚えていなかったがために
初歩的なミスを犯してました…。OTL

月のコンボボックスのケース複数分岐をカンマ区切りでなく
ORで区切るという愚行をしてまして…、そりゃイベント発生しないわ。
いや、、、
なんつーか、バントのサイン出したのにフルスイングで空振りされた心境だ
まあ問題が解決してなによりだ。
752デフォルトの名無しさん:04/02/12 15:08
>>709
 Windows Media Playerコントロールで実現できませんか?
>>749
イベント発生しないんじゃなくて、ブレークポイントまで来なかっただろ?
754デフォルトの名無しさん:04/02/12 17:54
VB6で既存のプロジェクトを開くとき(vbpファイルを
ダブルクリックして開きます)に、データビューって
ダイアログが開くことありませんか?
ダイアログの中には、

「'~' メソッドは失敗しました: '~' オブジェクト」

と書かれており、あとOKボタンがついています。
なお、カッコ内の文書は、~も別に省略ではなく、見たままです。
この原因ってなんなんでしょう?
同じプロジェクトファイルでも、開いても出るときと出ないときが
あります。というか、ほとんどの場合は出ないです。
「YYYY年MM月の最後の日」=「YYYY年MM月1日の1ヵ月後の1日前」
Day(DateSerial(YYYY, MM + 1, 0))
756デフォルトの名無しさん:04/02/12 20:12
フォーム上に配置したオブジェクトを、実行中に消すことはできますか?
例えば、command1をクリックするとcommand2が消えるような感じです。
Visible=Falseではなく、完全に消したいのですが無理でしょうか?
>>756
Visible=Falseで完全に消せるんだが、これでなにか不具合でも?
>>757
Unloadしたいってことかと。
コントロール配列なら

Load ButtonArray(1)
Unload ButtonArray(1)

みたいな感じで作ったり消したりできるけど、
通常のやつはどうだっけ?
759756:04/02/12 21:12
>>757
Visible=Trueにして復活するということは、
オブジェクト自体は残っているのではないのでしょうか・・・
>>758
そうなんです。
set objHoge = nothingとか、unload objHogeってやってもエラーになってしまいます。
DestroyWindow投げるとか
何で消したいのよ。まずそれが問題じゃない?
>>758であるように消せるけど、そうじゃない普通のコントロールを
消すって、そんなに無茶な数じゃあるまいし…
メモリがどうこうって言うんならVB使ってる時点で誤りじゃね?
763756:04/02/12 21:53
>>761
ありがとうございます。今調べています。
>>762
コントロールの数が100を超えるようなフォームがあるんです。
その時の操作に必要の無いものは消し去って、少しでも軽くするのが目的です。
VB自体を否定されると何も言えないです・・・。
>>763
メモリ節約が目的なら、コントロール配列にして、コードで追加すればいいけど、
軽くするのが目的なら、ピクチャーボックスにコードでボタンを描けば?
765762:04/02/12 22:43
>>756
言葉足らずでスマン。別にVBを否定するわけじゃない。
本当にコントロール一つ分のメモリが問題になる状況なんだったら、
VBを使っているのは間違いだと思うけどね。

ようするに、VBランタイムのメモリサイズを考えたら、
コントロールを一つぐらい消したってメモリ的には変わらんよ。
それならVisibleをFalseでいいんではないか?と言いたかった。
どうしてもと言うんなら、コントロール配列がいいと思う。

DestroyWindowsで消せるかなぁ。無理な気がする。
それにコントロールの操作にAPIを混ぜると、後でハマるかも。
Windows9x系の場合、コントロール100個とかなると
リソースのやりくりがシビアになるからなぁ。
可能なら画面分割したほうがいいと思う。
767714:04/02/12 23:35
>762
ぅぉなんか私と同じような現象が起こってるっぽいねw
私の場合は販売管理を作ってるのですが見積もりに必要な総オブジェクト数
数えてみたら350以上必要らしくてビビッタw

あのあとコントロール配列を教えてもらってから ホムペを色々徘徊してたら
Load Unloadがあったから今はソース上でやりくりしてますw

でも問題はAccessのmdbにどうやって書き込むかw
一度コントロール配列化したTextに書いた文字列を変数を350以上用意して
変数に突っ込んでmdbに書き込むか、それともindexの番号を指定しながら
書き込むか、、、
ループで書き込めたら早そうだけど私の知能では良いのが思いつかないです
困ったorz
768756:04/02/13 00:08
レスくれた方ありがとうございます。
DestroyWindowsですが、目的の動作が出来ませんでした。
これは私の力不足かもしれません。

このプログラムは会社の端末で動かすのですが、殆どのPCはWin95です。
画面を分けるか、コントロール配列にするかちょっと他の人に相談して考えてみます。
どちらにしても一画面に100以上はあるし、その殆どは自作のOCXでこれがまた重いんです。
欝だ・・・
769デフォルトの名無しさん:04/02/13 00:53
>>735
cceマイクロソフトのページ見ても消えてしまってるんですがもう入手不可能なんでしょうか?
>>769
これかなあ。
http://www.microsoft.com/downloads/details.aspx?FamilyID=1ceb1b0d-24ac-4c66-bf45-0c79aa500c22&DisplayLang=ja

cceにはむかしずいぶん世話になった。
作ったコントロールは、htmlに貼りつければIEで実行できるから、学習だけでなく、実用にもなる。

ActiveX ControlPadやFrontpage Expressがあると、
htmlに貼りつけるのに便利だけど、こいつらも探すのが手間だね(w
MS-Wordでも大丈夫な気がする。
UNIX ユーザーオフ 2月15日
http://off.2ch.net/test/read.cgi/offevent/1075197039/
>>771
防弾チョッキ着て参加すればいいですか?
>>755
感動した
座標3ついれて
ボタンを押すと点をプロットして
点と点同士の線を引くプログラムを書いてるんですが
Private Sub Command1_Click()
i = i + 1
a(i) = Val(Text1.Text)
b(i) = Val(Text2.Text)
c(i) = Val(Text3.Text)

X(i) = a(i) + (2 * 1 / 2) / 2 * b(i)
Y(i) = (2 * 1 / 2) / 2 * b(i) + c(i)
FillStyle = 0

FillColor = QBColor(0)
Form1.Circle (X(i), -Y(i)), 3, QBColor(0)
If i < i + 1 Then
Form1.Line (X(i), -Y(i))-(X(i - 1),Y(i - 1) ), QBColor(Pcolor)
End If
End Sub

では原点からプロットした点を線を結んでしまいます
プロットした点同士を線を引くにはどうしたらいいでしょう?
アドバイスいただけたら助かります
>>774
-If i < i + 1 Then
+If i <> 1 Then
>>770
すいません、自分の検索不足でした
ありがとうございます!
777デフォルトの名無しさん:04/02/13 23:27
フォームが非アクティブ状態の時にキーの押下判定をさせたいのですが、WinAPI使わないと無理なんでしょうか?
手探り状態なのでDeactivateにGetKeyStateとか適当にやってみてるんですがエラーしか(´・ω・`)
分かるようでしたら助けていただけるとありがたく_| ̄|○
自分がフォーカス持っていないときにキーダウン?
それを取るのはVBだけではAPI使っても無理。
グローバルフック使わないとダメだな
キーロガーでも作りたいのか?
780777:04/02/14 00:07
>>778
VBだけでは無理でしたか…
Cを少しかじってるのとVBに触り出したくらいなのでグローバルフックと言われても分からず
ということなので今回は諦める事にしておきます
ありがとうございますたー
VBで、メッセージポンプを自分で行うことって出来ますか?
doEventのような使い方でWM_PAINTメッセージだけ処理を行いたいんですが・・・
>>781
サブクラス化じゃだめなん?
783デフォルトの名無しさん:04/02/14 11:55
こんな事できるのかなと
ふと思ってやってみたらできた。
常識?

Dim l_dateST As Date
Dim l_dateED As Date
Dim l_dateWK As Date

l_dateST = DateSerial(2004, 2, 14)
l_dateED = DateSerial(2004, 2, 21)

For l_dateWK = l_dateST To l_dateED
Debug.Print Format(l_dateWK, "YYYY/MM/DD")
Next l_dateWK

-------------------------------------
出力結果
-------------------------------------
2004/02/14
2004/02/15
2004/02/16
2004/02/17
2004/02/18
2004/02/19
2004/02/20
2004/02/21

>>783
日付型の中身は倍精度実数だから当然だと思われ。
1752年9月には対応してないのか・・・
>>781
PeekMessage,TranslateMessage,DispatchMessageでDoEventsもどきを作るといいよ。
787デフォルトの名無しさん:04/02/14 19:24
パチンコのCR新海物語のシミュレーション・プログラムを組んでいます。
テストしてみると最高ハマリ回数や最高連チャン回数が毎回同じ数値になります。
rnd関数の特性なのでしょうか?
それとも私のプログラムにバグがひそんでいるのでしょうか・・・
Randomizeやってる?
>>787
おっしゃるとおり、rnd関数には特性がある。
rnd関数は文字通りの関数なので、乱数っぽい数列を毎回同じ値で発生するだけ。
この乱数系列には「種」がある。
>>788がいっているRandomize命令は、この種を変更するものです。
randomize now とかするといい感じ。
790787:04/02/14 19:55
>>788
やってます。

ちなみにフル、ハーフ・スペック共に
最高連続確変15回
最高連チャン22回
最高ハマリ3297回
になります。謎です・・・
791787:04/02/14 20:00
>>789
う〜む、結果は同じでした・・・
792デフォルトの名無しさん:04/02/14 20:01
www.testpp.com/index.htm
793787:04/02/14 21:00
>>789
スミマセン、何回か試したらイイ感じです。
ありがとうございましたー。
794デフォルトの名無しさん:04/02/14 22:03
Inetを使ってデータをpostしたいのですが、postし終わったページ(結果?)を取得することは可能でしょうか?
また、IEのパッチで@を含むアドレスにアクセスできなくなるようですが、認証用に@を使ってる場合、Inetで回避は可能でしょうか?
VB6.0 SP5、IE6.0 SP1、Win2k SP4
795デフォルト名無しさん:04/02/14 22:14
初心者の質問です。
テキストボックスをいくつか作って、Tabキーで
フォーカスを移動させたときに
テキストボックスに移動した順番を表示させるには
どうしたらよいのでしょうか?
796794:04/02/14 22:16
>>795
TabIndexじゃだめですか?
797デフォルト名無しさん:04/02/14 22:23
>>796
795です。レスありがとうございます。早速試してみます。
798デフォルト名無しさん:04/02/14 23:14
>>796
795です。TabIndexの順番でフォーカスが移動することが
わかったのですが、使い方がよくわかりませんでした。

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyReturn Then

Text2.SetFocus
Text1.Text = "1"

End If

End Sub

以上のコードをテキストボックスの数だけ作りテキストボックス1(以下T1)
から順番にTabキーを押していけば順番に数字が入れられたのですが、
T2にフォーカスがあるときにTabキーを押したときは
T2には当然"2"が表示されます。
T2にフォーカスがあるときにTabキーを押したときにも
T2に、"1"をいれて、T3は"2"、T4は"3"と表示させたいです。
つまり任意で選んだテキストボックスから順番を表示させたいのです。
長文でごめんなさい
799794:04/02/14 23:31
>>798
TabIndexからいまいる番号を引けばいいのでは?
TextBoxにIntexつけてあげると楽かも。
直接VBと関係無いんですが、
現在タスクで、何が表示されているか調べる方法はないでしょうか?
要は作成したアプリに何かフックしているか調べたいのですが、
うまい方法が見つかりません。

タスクに
????.EXE "????.exe"
こんな状態かどうか調べたいです。

また、ウィンドウをフルスクリーンにしたり、
ウィンドウ化したりするAPIは何を使ったらよいのでしょうか?

どなたか教えていただけると幸いです。
>>800
あんたの説明はさっぱりわからん。
フルスクリーンにしたりウィンドウ化したり、って言うのはDirectXのことを言ってるのかな?
だとするとゲームをつくって、それに対するチートソフトを検出したいのか?
取りあえずゲーム完成してからにしたら?

根本的に何をしたいのか、を書いたほうがいいよ。解決法も含めて教えてもらえるかもしれん。
Quoted-printableのデコードのソースってありませんか?
あればください。おねがいします。
>>802
自作したら?
804デフォルトの名無しさん:04/02/15 16:16
VB6.0 WinXP home

tabctl32.ocxを使って、タブを配置したのですが、同じフォーム内に設置したボタンを押す事で、タブの現在の順序を切り替える方法を教えてください。
>>801
>だとするとゲームをつくって、それに対するチートソフトを検出したいのか?
そんな感じです。
要は、他のソフトからの起動をチェックしたいのですが、
うまいこと行きません。
簡単なチェック方法はありませんかね?

フルスクリーン化は何となくわかりました。
>805
EnumrateWindowとかそんな感じの奴でどうよ。
807猫田:04/02/15 19:35
済みません、初心者っぽい質問ですが過去ログに
見つからなかったので・・・

 *.OCX で、画面上に「閉じる」ボタンを配置して、
押したらプログラムの終了(&画面閉じ)をさせるようと
していますが、どうすればいいのでしょうか?

 *.EXE の調子でボタン押下時に呼ばれる関数で
  "Unload Me" とやったんですが怒られました。
 OCX で Unload Me は駄目みたいです・・・
直接は難しい気がするなぁ。
取りあえずOCXはそういう風に使うもんじゃないし。
イベントとして定義して、それのハンドラを上位で書いて
やるのが正しいアプローチじゃないの?

Public Event HogeHoge()
みたいに定義して、
これを貼り付けたコントロールで

Private Sub UserControl1_HogeHoge()
Unload Me
End Sub

とかそんな感じでしょ。

やろうと思えば、自分を貼り付けているウィンドウのウィンドウハンドルを
取得してSendMessageでWM_CLOSEを投げるとかでもできるかも知れんけど…
809猫田:04/02/15 20:54
>>808

実は意外に難しいことでしたか・・・

OCX はエクスプローラから起動されたダイアログに
貼り付いてるのですが、この場合は、そのダイアログ
(これもエクスプローラな訳ですが)を終わらせないと
駄目なんですね・・・

判りました、ご助言を参考にも少し方策を考えます
(或いは諦めるか)。有難うございました。
>>809
話がさっぱりわからんな。
エクスプローラから起動されたダイアログに張り付いてる?
しかもそのダイアログはエクスプローラ??
さっぱり分からん
>>803
いろいろ探したんですけどQuoted-printableの仕組みがわからなかったので
サンプルを探しています。
ありませんか?
>>811
おいおい、数秒で見つかったぞ
ttp://www.atmarkit.co.jp/icd/root/24/5784924.html
>>811
なぜに時代に逆行しようとする?
MSがこれでメール送ってくるからじゃねーの?
大変だね
つーか、マイナーだけど普通使われてるでしょ。MacとかPDAとか。
メールに使っても規格違反じゃないし。
>>816
マックでも極一時期使ってただけで、いまは関係ないっすよ。
ttp://www.atmarkit.co.jp/icd/root/24/5784924.html
818デフォルトの名無しさん:04/02/16 15:31
あのですね、
ユーザコントロールにADOデータコントロールを連結したくて
DataSourceプロパティを作ったのですが、このユーザコントロールを
フォームに貼り付けると、プロパティウィンドウのところに
DataSourceの項目が出てきません。

やりたいこととしては、ユーザコントロールにはフレックスグリッドが
貼り付けてあって、これにユーザコントロールを貼り付けたフォーム上の
データコントロールを連結したいだけなんですが。。。

ユーザコントロールのDataSourceプロパティの戻り値は
“IRowCursor”にしてあります。
>>818は九州人。以上。
いや、鳥取県民と見た
愛知県民です。田園風景がとても素晴らしいところにすんでいます。
よろしければご教授ください。
ずばり福岡県民(北九州市近辺)
823822:04/02/16 15:52
_| ̄|○
>>821
ttp://homepage2.nifty.com/inform/vbdb/

   ∧∧
   /⌒ヽ)   ここでも見て参考にしておくれ・・・。
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三
>>818
>DataSourceプロパティを作ったのですが
>DataSourceの項目が出てきません。

どんな作り方をしたのか聞かせてもらおうか。
>>825
ActiveX コントロールインタフェースウィザードで
DataSourceを追加してフレックスグリッドのDataSourceにマッピングしました。
こんな感じです↓。

'警告! 以下のコメント行を変更または削除しないでください !
'マッピング情報=msgDataList,msgDataList,-1,DataSource
Public Property Get DataSource() As IRowCursor
Set DataSource = MSFlexGrid1.DataSource
End Property

Property Setがないからかなと思ってつけてみたんですが、だめでした。
IRowCursor ってナニ・・・
>>827
フレックスグリッドのDataSourceの型と合わせてみました。
というか、ウィザード使ったら勝手に出てきました。
>>826
使ったことはないのだが
・適当な名前のプロバティ作成(ツール>プロシージャーの追加)
・ツール>プロシージャーの属性>詳細>データ連結>このプロ(ry
それっぽいのができる
>>829
あ、でてきました。ありがとうございました。
VisualBasic 6でDLLを作成したいのですが
どなたかご教授いただけませんでしょうか。

例えば
Public Function Shisoku(arg1 As Long,arg2 As Long,i As Integer)As Long
Select Case i
case 1
Shisoku=arg1+arg2
case 2
Shisoku=arg1-arg2
case 3
Shisoku=arg1*arg2
case 4
Shisoku=arg1/arg2
case 5
Shisoku=arg1 Mod arg2
End Select
End Function
上のような関数をDLLで作成して、標準モジュールで
Declare Function Shisoku Lib "MyLib.DLL" (ByVal arg1 As Long,arg2 As Long,i As Integer)As Long
と宣言すれば使用できる
みたいなことをしたいのですが、どこから取り掛かっていいか
わかりません。
>>831
VBだけでやりたいなら、ActiveX DLLを使うしかないかな。
標準モジュールで定義してって感じの呼び方にはならないが。

APIと同じような使い方したいなら、VC等の他の開発環境で
DLL作るしかないと思う。
833831:04/02/16 21:14
>>832
そうですか。
ActiveX DLLを作成する方法を詳しく教えていただけませんでしょうか。
>>833
詳しくもなにも、新しいプロジェクトを作る時に選択すればいい
って、釣りかよ
835831:04/02/16 21:50
いや、釣りをしようとして質問をしたのではないのですが。

何が言いたいのかというと、先ほどのような関数が複数ある場合は

Public Function A(arg1 As String,arg2 As String)As String

End Function

Public Function B(arg1 As Integer,arg2 As Interger)As Integer

End Function


のように、関数を並べるだけでよいのですか、ということなのですが、どうでしょうか。
やべぇ

最近 VBが面白く感じるようになったC言語プログラマの俺
>>831を読んで>>835の質問をしていたと感じ取れるエスパーはいないと思うのだが。
838835:04/02/16 22:15
失礼しました。

それで、DLLの作成方法は>>835の方法でよいのでしょうか。
>>831
VB6ヘルプの「ActiveX DLLの作成」って項目で10ページ以上あるが、
それをここで「詳しく」教えろと?

要約すると「ヘルプよめ」だな。
>>838
試せばわかる事や調べればわかる事は食いつき悪いよ
>>836
最近VB6.0以前を始めたのでしょうか?
842838:04/02/16 22:23
レスをくれた皆さん、ありがとうございました。
>>839さんのおっしゃるとおり、まずはヘルプファイルを読んでみることにします。
あと、>>840さん。アドバイスありがとうございます。
今後の書き込みの参考にさせてもらいます。
>>836
VCからならVBよりC++ビルダーのほうが面白いと思うけど。
VC2003からはペタ貼りでできるんだよね。やっとびじゅあるになったな。w
びじゅある が ぼるじょあ に見えた・・・
VCでも十分びじゅあるだと思うけど
>>845
あれのどこがビジュアルな開発なのかと・・・。
じぇんじぇん直感的じゃないじゃない、ビジュアルな部分とソースが乖離というか隔離というか。
847デフォルトの名無しさん:04/02/17 10:46
VBSでフォルダの有無を確認して、無ければ作成する処理を作っているのですが
現状だと一つの階層毎に「オブジェクト.CreateFolder」をしています。
これを一行で途中のフォルダも作ってくれるようにできないでしょうか?

・駄目例(C:\以下に「1st」フォルダが状態から「c:\1st\2nd\3rd\」を作る場合)
If (FileOBJ.FolderExists("c:\1st\2nd\3rd\")) = false Then
FSObj.CreateFolder("c:\1st\")
FSObj.CreateFolder("c:\2st\")
FSObj.CreateFolder("c:\3st\")
End If


vbsはスレ違いだったらスマソ
現在、Windows2000の[コントロールパネル] - [地域のオプション] - [既定値に設定] - [システムロケールの選択]
で設定出来るシステムロケールの既定値の変更を、コントロールパネルの操作に疎いユーザーでも簡単に行える
ように、ソフト上で行おうとしています。

色々調べた結果、[地域のオプション]で設定した内容は、レジストリに記録されている事が分かったので、
APIを利用してレジストリを書き換えるコードを書けば楽勝…だと思ってたんですが、壁にぶち当たってしまい
ました。

他言語環境、例えばシステムロケールが「英語(US)」の状態で実行すると、レジストリエントリ名や値に日本語
が使用されている部分を書き込んだ時に文字化けしてしまうのです。例えば、

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes

と言うキーに、フォント名が列挙されているのですが、一部、日本語の全角文字や半角文字で構成されて
いるのですよ。この日本語のレジストリエントリや値は、他言語のシステムロケールから、日本語のシステム
ロケールに変更した時に書き込まれるので、日本語以外のシステムロケール上で、日本語を書き込まなきゃ
ならないと言う嫌な状況に陥るわけでして…

コントロールパネルからシステムロケールの変更を行った時の挙動をレジストリエディタで追ってみたら、まぁ当然
なんですが文字化けせずに書き込んでるんですよ。一体どういう技を使っているのやら…

どなたかよい解決策をご存知ないでしょうか?

開発言語はVisual Basic 6.0(SP5)です。
>>848
よく分からんが、ファイルにしておいて取り込んでもダメなのか? regファイル。
850デフォルトの名無しさん:04/02/17 13:36
VBのフォームデザイナでボタンオブジェクトなどを
配置したときに、ボタンをクリックすると
ボタンの周りに、
四角い大きさの変えられるチョボのついた、選択マークみたいな
ものが出てきますよね。
あれをAPIで呼び出すことは可能ですか?
>>850
common control の statusbar
初心者的質問なんですが、
VBでテキストボックの中の文字を左方向にスクロールさせたいのですが
一番簡単で解りやすい方法を教えてもらえませんか?
>>852
スクロールってどういう状態をいってるの?
電光掲示板みたいな感じ?

テキストボック”ス”じゃなければ駄目なの?
>>852
宿題?
入門書のサンプルによく載ってるぞ。
一番最初のほうに。
855デフォルトの名無しさん:04/02/17 16:00
vb6をインストールしたんですけど、最後に「msjet35をシステムレジストリに登録できませんでした」と「msrd2x35をシステムレジストリに登録できませんでした」と出て失敗してしまいます。
どうしたらいいのか教えてください
>>855
Administrator権限のあるユーザーでインストールしてる?
>>849
.regファイルのインポートでもいいのですが、安直にShell関数を使って

Shell ("regedit hogehoge.reg")

とやると、「hogehoge.reg内の情報をレジストリに追加しますか?」と言う
ダイアログボックスが出るのですが、

(1)[いいえ]を押されると、レジストリがインポートされない
(2)[いいえ]を押した事をソフト側でチェックする事が出来ない

ので非常に宜しくないのです。

ユーザーに問い合わせる事無くインポートする手段があれば、この方法も
解決策になるかと思うのですが、なにかよい手段はないでしょうかね?
Inetコントロールについて教えてください。
OpenSSLで構築したセキュアサイトにアクセスすると、
SSLのセキュリティ警告ダイアログが表示されますが、
そのページをInetコントロールで取得しようとするとエラーになり
ResponseCodeに12045
ResponseInfoに クライアントの認証がセットアップされていません。
となってしまいます。
これを回避することはできるのでしょうか?
>>857
Google様で regedit コマンドライン 引数 で検索してみ。
/sってのがあるから。
860859:04/02/17 16:55
861855:04/02/17 16:57
>>856
ログインするにはどうしたらいんですか?
いったんログオフして、administrator でログインしなおす
それ以上は君の環境がわからんとならんし、別の板がよろしいかと
863856:04/02/17 17:12
>>862
レスしようか悩んでたので、サンキュウです。
でも、この質問が出るレベルの時点で>>855さんの最初の問題の解決は無理なような気がして・・・。
>>859
おお、/sオプションなんてのがあるんですか。REGEDIT /?やREGEDIT /hしても
なにも出ないし、ヘルプにも書いてないから出来ないのかと思ったよ。

この方法で試してみますね。どうも有難う。
VB5.0Enterpriseしか持って無い上にこれから勉強しようと思ってるんですが、入門用にいい参考文献教えて頂けませんか?
教えて君で申し訳ないです。
テキトウに作ってみて、分からんことはネットで検索してで行けると思うけど。
書籍かって勉強する気なら正直なところ先の無いVB5は止めたほうが・・・
ネットで調べながら作るって言うならVBかなり強いけどな…
867デフォルトの名無しさん:04/02/17 22:19
長文ごめんなさい。
DB板から移動してきました。

VB5で作成のアプリケーションで下の様な実行時エラーが発生しました。
「レジストリのEnginesセクションのExcelキーに設定されている値が無効です。」(Error 3433)

その時のレジストリは、以下のとおり。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel]
"win32"="C:\\WINDOWS\\System32\\msexcl35.dll"
"ImportMixedTypes"="Text"
"FirstRowHasNames"=hex:01
"AppendBlankRows"=dword:00000001
"TypeGuessRows"=dword:00000008

特定のPC一台(ほぼ新品)のみで発生。
エラーが出るマシンは、ファイルと設定の転送ウィザードで他のマシンから環境を移動
これと同じ設定の他のPCでも、発生しないものが有る。
MS技術情報を元に、Jet,DAOが正しくセットアップされているか
レジストリキーを一つ一つ調べたけど
特に、怪しい所もなし。

上記Excelキーの何処がいけないのでしょうか?
或いは、何か壊れているのでしょうか?
868867:04/02/17 22:26
867は、データコントロールに関する記述で発生します。
VB初心者です。
VB5.0で作成したプログラム(exe)で、XP以外は正常に動いているのにXPでは
「アプリケーションエラー、"0x01b41a37"の命令が"0x023a0010"のメモリを参照しました。
メモリが"written"になることができませんでした。プログラムを終了するには[OK]を
クリックして下さい」
が表示して処理が停止してしまいました。
なぜXPではこのエラーが発生するかわかりません。
エラーの意味さえ判っていないところも正直あります。
教えてちゃんですみませんがエラー原因がわかる方お願いします。
>>869
初心者とあるけど、ドレぐらい初心者なのかわからん。
取りあえずサブクラス化していて、普通にVBエラーが出たときとかそんなエラー出るな。
本当にOSの制かどうかチェックするのが先決だと思う。
インストールした場所が違う、ランタイムのバージョンが違うなど
871869:04/02/17 23:18
>>870
ありがとうございます。
それで調査してみます。

今回初めてVBで作成しました。
実際納品してXP以外ではエラーは発生していませんでした。
パソコンの追加ということで初めてXPがセットされているパソコンに
インストールしてこのプログラム(印刷しながら、ORACLE DBに更新する)
を起動したら途中でそのエラーになったんです。
相手側も処理を急いでいた為、それ以外のOSのパソコンで処理しました。
その後調査しましたが、原因がわからずここで質問することにしました。
872デフォルトの名無しさん:04/02/18 00:05
はじめてさわる初心者なのに他人のBVのプログラム改良することなりました。
とりあえず、ソース読んでて#がでてくるのがよくわからないのですが・・・
#IfはIfと違うのですか?
あと、行末に#1とか#2とかあるのですが・・・
873デフォルトの名無しさん:04/02/18 00:28
>>869
そのエラーはVBコードのエラーじゃなくて
VBからコールしてるDLLのエラーだろ?
何かのDLLがXPに対応できていないんじゃないの?
>>872
Cさえ理解していれば、VBは3日で基本の勉強できるから、まず勉強しろ。
>>872
いやーC知ってたら#ifも想像つくような・・・
まぁヘルプに乗ってるから。
行末の#1って俺もわからんなぁ。何?
>>875
#1とかはファイルアクセスじゃないかなぁ?
そのくらいしか想像つかん。
BVってなに?
ボケヴォケスクリプト
>>874
VBを”きちんと”使うならば、Cの経験より、CでのWindowsアプリ開発経験だろうね。

VBは制限とか勝手にやってくれる部分が多いから、その部分をきちんと理解できてるかが
障害発生時の差になると思う。

VBでとりあえず何か作るだけなら、一月あればとりあえずはどうにかなるけどね。
質問です。

VBで
      0  1  2  3  4  5  〜  24
2/18(水) |-+-|-+***-|-***-|-+-|-- 〜 -+-|
2/19(木) |-+-|-+-|-+-|-*****+-|-- 〜 -+-|

見たいに、例えば会議室の予約を何時から何時までしているかが一目でわかるようなチャートを、
一月分画面に表示する手っ取り早い方法はありますか?
>>880
手っ取り早い方法はないね。
それが出せるグラフを買うのが早いんじゃないの?
VB付属のみでやるなら、グリッドを代用して、1マス1時間とかで色分けするとか。
>>880
そういうの作るの楽しいじゃん。
>>881-883
うーん、手っ取り早い方法は無いのか。地道にやってみますです。ありがとうございました。
>>884
MSFlexGridではダメなのか?
>>880
固定ピッチフォントにしたテキストボックスを使う。
>>886
テキストボックスを31個も並べるのか??
VB房はコントロールに頼りすぎ
>>888
プゲラッチョ
>>887
テキストボックスに>>880見たいな文字列流し込めば解決じゃない。
上下左右にスクロールし放題。大きさも自由自在。なにより手っ取り早い。

見た目は非常にチープでアレだけど。
PictureBoxにPrintすりゃいいじゃんとか思うのはだめなのん?
Lineで囲いとか描けていい感じだと思うのだが。
892デフォルトの名無しさん:04/02/18 22:12
PictureBoxにLineとCommandButtonを計算して配置する
計算式考えたりする過程が結構おもしろい
 文字列操作について・・・
 たとえば abc があって、
a と c を取って b が残らない (left,right とかでの切り出し)
b を取らずに a と c が残る (文字消去?)
後者のような方法はないのですか。
>>893
意図が読み取れんかったんで、具体例を出してくり。
mid$(A , 2, 1)=""
でできなかったっけ。できないか。
つかLeftとRight組み合わせれば即できるじゃん
896名無しさん?:04/02/19 08:24
VBでバイナリファイルの比較する方法はありますでしょうか
またはAPIはありますでしょうか
>>893
何をしたいの?
先頭・末尾の特定の文字数のみをとりたいのか?
真ん中指定文字数を抜きたいのか?
特定の文字を抜きたいのか?
>>896
Openして読み取って比べるだけじゃん
winsockを使ってスリーダイヤオフコンとソケット通信を試みてます。
ユーザーレベルの通信手順を構築中なのですが、通信の過程でPCが
いきなしリブートしてしまう現象が起きてます。
winsock(sp2)にはメモリーリークのバグがあるようなのですが関係があるのでしょうか?
回避方法などご存知の方がいらっしゃいましたらご教授下さい。

環境 VB5 SP3+winXPpro SP1
サウンドカードのライン入力の音を録音したいのですがどうすればできるでしょうか?
録音というか、波形解析みたいなことがしたいのですが
901名無しさん?:04/02/19 10:01
>>900
(´・Д・`)エー?
>>900
■ 音声分析ソフトは作れますか
http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200309_03090079.html
>>900
『理系のためのVisualBasic6.0実践入門』
http://www.gihyo.co.jp/books/syoseki-contents.php/4-7741-0838-3
904900:04/02/19 10:56
FFT解析はそこらからライブラリ拾ってくるんでいいんですが、音声のキャプチャの方法がわからないんです。
DirectSoundとか使えばいいのかな。
>>899
winsockコントロール使ってんの?
まじめな通信するならAPI直叩きの方がいいよ。
>>904
DirectSoundかwaveIn系API使え
907899:04/02/19 12:47
>>905さん
アドバイスありがとうございます。
winsockはやはり信頼性に欠るんですね。
API直叩きに関するサイトか資料、ググルためのキーワードでも
教えていただければ助かります。
よろしくお願いします。
>>907
とりあえずさ、Winsock、VB、API、入門とかでやってみれば?
それからでしょ、次の質問するのは。
909デフォルトの名無しさん:04/02/19 13:26
質問なんですけど
&HF060→-4000
だと
&H400→????
は、どうなるんでしょうか?
また、こういう計算をしてくれるプログラムって無いですか?
>>909
普通にコンピュータの基礎から勉強することを御奨めする。
それがわかってないと、勝手にやってくれてもそれがあってるかわからないじゃない。

コンピュータが数値をどのように扱ってるかっていう基本的なこと。
>>909
Windows付属の電卓で関数電卓にすればいい
大量の画像データ(BMP)があり、
チェックボックスを複数選択することで、
自分の欲しい画像データをピクチャーボックスに表示させたいです。
チェックボックスと画像データを、どう結び付ければよいのかがわかりません。
どなたかよろしければ教えていただけないでしょうか。
よろしくお願いします。
913デフォルトの名無しさん:04/02/19 14:32
質問です。
Alt+Tabが押されたかどうかを検出する方法ってないでしょうか?

Alt+Tabが押されるとアプリ切替画面が出るのですが、
この画面が出たことをプログラム上から知りたいのです。
が、プログラムでキーイベントを取っても、サブクラス化しても
キーボードフックをしても、このキーの組合せは取れないんです。
どうしたらいいんでしょうか。
>>912
ファイルをどのように管理して、それとチェックボックスをどうやって対応つけするだけだろ?
チェックボックスをコントロール配列にするならば、その番号とファイル番号を自分なりの規則
で対応付けするだけ。
915デフォルトの名無しさん:04/02/19 14:50
&H400 = 1024

&HF060 = 61536

FFFFFFFFFFFF0400 = -64512

FFFFFFFFFFFFF060 = -4000
>>915
わざわざマイナスの表現の仕方まで教えてやるなんて優しい奴だな。
お前ら全員死ね
つまり10進<->16進の変換にはこのスレを使えということか
スイマセン、質問です
取得したlong型の数値を、「何時間何分何秒」という形にする時
どの関数を使えばいいんでしょうか?

単純な質問でスマソ
>>919
何で取得した時間よ?
>>920
API関数のGetTickCountです。
数値は取れるのですが、時間に直すとなると…。
GetTickCountで得た数値の単位は何だ?ヘルプ読んだか?
923デフォルトの名無しさん:04/02/19 20:46
YAHOO板から移ってきました。

何とかいて良いのかわからないのですが、MDIで親フォームウィンドウの中に
子フォームウィンドウを呼ぶみたいなことをしたいわけです。

ただし、以下のような条件があります。
・親ウィンドウの中に子ウィンドウを呼んだときに、子フォームの
 メニューバーは子フォームのトップに表示されるようにしたい
(MDIだと子フォームのメニューが親フォームに取って代わってしまう)
・メニューを持ったウィンドウをメインウィンドウ内で何種類か同時に
 開きたい(MDIの追加は2種類以上は不可能)

そういうことはそもそもVB6.0で可能なのでしょうか?
可能ならば、何かキーワードでも教えていただけると助かります。
よろしくお願いします。
やっぱりcを経験することは大事だな
925デフォルトの名無しさん:04/02/19 22:09
指定したURLのHTMLソースを取得しようと思ったのですがうまくいきません。

winsockを使ってTCP接続後、HTTPにのっとってソースを取得しました。
しかし、Yahooなどだと日本語が文字化け?していまいました。
どうしたらいいのか分からず、strconv使ったりしましたがダメでした。
どなたか教えて下さい。
>>925
文字コードの基本から勉強しなさい。
それがわからないようならIEのコンポーネントで我慢すべし。

>>923
面倒だからフォームっぽい自前のコントロールを作ったほうが早いんじゃないの。
そりゃ言い過ぎか?
とにかくそんな標準とは違うインターフェイスはお勧めできない。

>>913
それが簡単にできたらそこら中のプログラムがそんなことやって収拾つかなくなる訳よ。
だから止めとき。

>>907
WinsockはWindowsに移植されたソケットライブラリの名前。
Winsockをラップして使いやすくしたのがWinsockコントロール。
混同していると訳分からなくなるぞ。

927デフォルトの名無しさん:04/02/19 22:50
>>913
自己レス。
Alt+Tabなどのキーコンビネーションはローレベルキーボードフックで
取れることが判明。
http://www.google.co.jp/search?q=cache:gxOt-9Q9EEsJ:msdn.microsoft.com/msdnmag/issues/0700/Win32/Win320700.asp+Alt+Tab+Hook&hl=ja&ie=UTF-8
928923:04/02/19 23:29
>>926 すばやいレス感謝

”やろうとすれば”自分でコントロールを配置することも可能でしょうね。
とりあえず、MDIみたいにVBで用意されてるかどうか、という風に質問の
言葉を補うといいのでしょうか?

”VBで作った”といわれるソフトにそういうのがあったので出来ると
思ったのですが、VBの参考書のどこを探してもMDIしか見当たらない。
不思議に思って聞いてみたわけです。

”標準的な機能の中では無い”ということなのですね。
>>928
できなくはないだろうけど、標準と離れたことをしようとするならVBの優しさが仇になる。
そこまでする理由がある?
標準と離れてるかどうか聞きたかったんだろ
>>928
標準的なやり方ではできないと思うよ。
「変わったことをやるやり方の中では標準的なやり方」はあるかも知れんけど、
VBで普通にやったら無理
932923:04/02/20 00:32
>929-931

了解です。
サンクス湖
933デフォルトの名無しさん:04/02/20 02:26
教えてちょ。

VB6.0、DBがPostgreSQL7.4&ODBCで開発しております。
んで、VBからPostgreSQLのbytea型に画像データをインサートしたいんです。

JAVAやらCやらでは、出来るのだが、VBだときついですかね。

ちなみに、ORACLE+VB+ODBCなら行けました。

抽象的で申し訳ないのだが、同じような開発をした人がいたら
教えていただきたい。

均等割付でお願いします。
935934:04/02/20 03:06
うぉ、誤爆った。

              ┗0=============0┛
     \===========[_|_|_|_|_|_|_|_|_|_|_|_|_|_]===========/
     /三三三三三三三三三三三三三三三三三三三三\
    0 │ |∞∞∞ |::|∞∞田田田田田田∞∞|::|∞∞∞ | ::|  0
 ...[二] | ::|       |::|┏━━━━━━━━┓|::|       | ::l [二]
........|□|.│ |┌┬┐ |::|┃  /        \  ┃|::| ┌┬┐| ::|. |□|
  )三(...| ::|├┼┤ |::|┃/            \┃|::| ├┼┤| ::|`)三(´
   | ::| | ::|└┴┘ |::|┃ / ̄ ̄ ̄ ̄ ̄\ ┃|::| └┴┘| ::| | ::|
   | ::| | ::|┌┬┐ |::|┃彳 人______ ノ.┃|::| ┌┬┐| ::| | ::|
   | ::| | ::|├┼┤ |::|┃入丿ー◎-◎ーヽミ.┃|::| ├┼┤| ::| | ::|
   |: :| | ::|└┴┘ |::|┃ r   . (_ _)     )┃|::| └┴┘| ::| | ::|
   | ::| | ::|┌┬┐ |::|┃ (  ∴.ノ▽(∴  ノ ┃|::| ┌┬┐| ::| | ::|
   | ::| | ::|├┼┤ |::|┃⌒\_____ノ⌒┃|::| ├┼┤| ::| | ::|
   | ::| | ::|└┴┘ |::|┃    ┗━┛   .┃|::| └┴┘| ::| | ::|
   | ::| | ::|   ... |::|┃   . .>>1-1000  .┃|::|      | ::| | ::|
.....┏━━━━━┓| .|┃          ......┃|::|┏━━━━━┓
.....┣┳┳┳┳┳┫|: |┗━━━━━━━━┛|::|┣┳┳┳┳┳┫
     ○    ●        ∫∬∫∬        ●    ○
     ○○  ●●      iiiii iii ii iiii       ●●  ○○
    [ ̄ ̄] [ ̄ ̄]   ( ̄ ̄ ̄ ̄ ̄)    [ ̄ ̄] [ ̄ ̄]
    |_○_|  .|_○_|     |_____|     |_○_|  .|_○_|
 ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧
(    )(    )(,    )(,,    )    ,,)(    )(    )(,    )( ゚Д゚ )
937デフォルトの名無しさん:04/02/20 14:05
教えて下さい。

VB6.0 SP5 でアプリケーションを開発しデストリビューションウィザードで
パッケージ化しました。
Windows 98,Me,2000 ではセットアップ、実行とも正常でしたが Xp では
セットアップ時に "Error Path or File Not Found" が表示されてセットアップ
出来ません。ちなみに、この現象はセットアップウィザードでのアプリケーション
グループの登録の画面で 継続ボタンを押下した後に起こります。
Xp は対応していないのでしょうか?
開発マシンは Xp です。このマシン上ではもちろんセットアップも実行も出来ます。
938デフォルトの名無しさん:04/02/20 16:23
Windows APIの"GetMessage"を使いたいのですが
Msg構造体はTypeステートメントでどう定義すればよいのでしょうか。
どなたか教えて下さい。
>>939
Type POINTAPI
  x As Long
  y As Long
End Type

Type MSG
  hwnd As Long
  message As Long
  wParam As Long
  lParam As Long
  time As Long
  pt As POINTAPI
End Type
941939:04/02/20 22:30
>>940
ありがとうございます。
これからやってみます。
>>923
こういうイメージかな?

Form1は普通のフォーム、Form2はメニューを持ったフォームで。

  Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
  Private Sub Form_Load()
    Load Form2
    SetParent Form2.hWnd, Me.hWnd
    Form2.Show
  End Sub


まぁ、こんなことやってるアプリは絶対つかわないけどw
943鶏肉:04/02/21 14:38
WebBrowserコントロールを使ってCD内のビューアを作っています。
これで作ったソフトをCDに一緒に焼いて、配布しようと思っているの
ですが

このプログラムと同じディレクトリにあるindex.htmlをスタートページに
するためにはどのようにしたらよいでしょうか?

MDIアプリなため、ブラウザは子Windowの1つなのですが
Private Sub LoadNewDoc()
Dim frmB As New frmBrowser
frmB.StartingAddress = "index.html"
frmB.Show
End Sub

といった状態では取得できませんでした。
APIでビットマップのハンドル取得する方法はありますか?
945鶏肉:04/02/21 17:21
すみません。

GetCurrentDir()でカレントディレクトリを取得したものに + "index.html"
で成功しマスタ。
vb なら App.Path で済むと思うが。
App.Pathはルートディレクトリだと
C:\を返すが、それ以外だとC:\hogeと\が付かない(反対かも)
と言う問題があったな。
GetCurentDirは知らんが確認したほうがいいぞ

>>947
うん、反対。
>>947
それはOS上の"仕様"。Unixとかも一緒。
>>945
カレントディレクトリとアプリのあるディレクトリは違うぞ。
プログラム実行中にカレントディレクトリは変えることができる。
アプリのディレクトリならApp.Pathを使うように。
951鶏肉:04/02/21 22:06
>>950
それは、CDに一緒に焼いて、なおかつ不特定多数の人間に配布しても
きちんと動作しますよね?

でしたら、ちょっとやってみます。thanksです
952947:04/02/21 23:48
>>948
サンクス嘘教えるところだった。
自分じゃどっちも同じになるように加工して使うから忘れちゃう

>>949
そうなんだ。何でだろう?
>>952
PGの気分でしょ。
C:じゃそっけないし\もつけちゃえ、みたいな。
ヴァカでつか?
ルートは \ が無いと場所が特定できんだろw
956デフォルトの名無しさん:04/02/22 14:38
Windows2000で作成し、知り合いに動かしてもらったところ実行時エラー430が出ました。
知り合いのOSはXPです。インストーラで必要なものは入れました。
「クラスはオートメーションをサポートしていません。 」とのことですが
依存する何かのバージョンが古いからダメなんでしょうか?
下のような機能を使ってます。
DAOによるデータベース接続
(DAO3.6 Object Library)
(Data Formatting Object Library)
VoiceTextコントロール
FlexGridコントロール、
コモンダイアログコントロール、
Winsockコントロール
Tabbedダイアログコントロール,
Common Controls 6.0(SP4)
Common Control-2 6.0
ディストリビューションでインストーラ作成時
以下のものが依存情報が最新ではありませんと出ました。
comdlg32.ocx , msComctl.ocx , MSWINSCK.OCX
古い情報のままで進めるを選択しました。

こんなんでは参考になりませんでしょうか?
どなたかこれが原因てわかる方お願いします。
957953:04/02/22 14:53
各ドライブにルートディレクトリがあって…
んー、良くわかんね。windowsのファイルシステムでググってきまつ。_| ̄|○
958923:04/02/22 15:45
>>942
ありがとうございます。

思わず、「出来た!すげぇ!神降臨!」とか
口走ってしまいますた。
また壁にぶち当たったら質問させてください。
959鶏肉:04/02/22 15:48
この間は非常に助かりました。CDブラウザの開発はものすごく弾みが
付いております。

960デフォルトの名無しさん:04/02/22 19:11
教えてください。

[参照設定]のところで、
ADO(ActiveX Data Object 2.7)が参照不可になってしまっている場合、
どうすれば参照可になるのでしょうか?
関係ないけどさ、アドビのストリームラインが>>942みたいな感じだったな。
962デフォルトの名無しさん:04/02/22 20:22
java2sdkをインストールしたら、あるHPのネットゲームのページ開くのがものすごい遅くなってさ
コーヒマークみたいなんでてさ、文字もちょっとかわったし、あまりに遅いんで、
javaruntimeとjavaplug-inを削除したら、ふつうに開けるようになったんだけどさ
この二つはとくにいらないのか?学校の先生にきくとさ、runttimeはいるはずなんだけど
とかいって、あやふやにされたんだけど、ちなみにこの二つを削除しても、
ちゃんと、コンパイルもとうるし、コンソール画面で結果も表示されます。
この二つはなんなんですか?
削除してしまってよかったんでしょうかね?
ほかのすれでかいたんですけど、答えかえってこなくてよろしくおねがいします

>>962
インターネットオプションをいじればよかったのに・・・
>960
ADO2.7入ってないんじゃ?
965デフォルトの名無しさん:04/02/23 00:28
漠然とした質問ですみませんが、
システムエラーの原因の探し方ってありますか?
Microsoftに送信しても仕方が無いし。
>>645
VBで自分で作ったプログラムなら、エラーが起きるところに
開発環境を入れて試せば分かることが多い
>>965
コンパイルするときにデバッグ情報吐き出して、VCでデバッグする。
コールスタック見ることが出来るから、どこでエラーが発生したか
知ることができる。
VBでも見ること出来るけど、システムエラーになったらVBごと
落ちるからね。
>>967
詳しく
969966:04/02/23 01:48
>>645>>965の間違いね。間違えすぎ・・・
>>968
VB6ならプロジェクトのプロパティかなんかからコンパイルの仕方を設定して、
ネイティブコンパイルをONにし、デバック情報を出力とかそんな感じのところに
チェックを入れる。
>>968
プロジェクトの設定のところで、コンパイルのオプションにシンボリックデバッグ情報を作成
というチェックがあるから、それにチェックを入れてからコンパイルする。

出来上がったEXEをVCで開いて、デバッグ実行し、エラーが起きる操作を行う。
システムエラーが発生すると、問題のある個所でブレイクするので、一時停止したまま
VCでのデバッグ操作を行うことができるようになる。

そこで、メニューの表示>デバッグウィンドウ>コールスタックで、関数の呼び出し履歴を
確認する。
どの関数からの呼び出しが悪いのか分かれば、ある程度はデバッグの助けになると思う。

VBでデバッグできないエラーっつーと、NULLポインタへのアクセス、初期化されていない
ポインタへのアクセス、メモリの領域外参照なんかが主な原因かな。
VBでAPI使っている個所や、自分で作ったDLLが原因の場合が多い。
でもさ、VBでやってる場合、>>971の言うとおりのAPIとかDLL以外だとお手上げだよな。
973デフォルトの名無しさん:04/02/23 15:28
ActiveX EXEのプロジェクトで、スタートモードを独立型、
Sub Mainから起動するようにしています。
Sub Mainでは、フォームAを起動し、フォームAからフォームBを Show しています。

また、Publicなクラスを一つ持っており、外部からそのクラスのメソッドで
フォームBを Show するようにしています。

さて、クラスからフォームBを呼び出した時に、フォームAを表示したくないのですが、
今、どうしても Sub Main も動作してしまい、AもBも表示されてしまいます。
EXE単体で起動されたのか? それともクラスのインスタンスが生成されたせいで
Sub Main が動作したのか判断できないために、フォームAの表示を抑制できないのです。
この判断はどのように行えばいいのでしょうか。

なお、EXEとして実行された場合はコマンドライン引数をつけて区別することも
考えましたが、もっとスマートな方法がないかと考えている次第です。
また、実行ファイルを2つには分けたくありません。
974973
自己解決。App.StartModeで判別できました。スレ汚しスマソ。