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

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

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

一応前スレ
Part14 http://pc3.2ch.net/test/read.cgi/tech/1030947162/
0005デフォルトの名無しさんNGNG

         |   |      \
         |   ̄| ̄    \
         |  _|_     |       \
         |/|/    / /  \    ̄|
                           /
              ∧             ∧
              / ・           / ';,
            . /  ';          ./  ';
            /   ;______/   ;
          /                  \
         /    /          \     \
        /´       |____|          |
        |  /////    |     |    /////    |
       |        .|     |           |
        |         |    |            |
        |        ';    /           /
         \        \/        .. /
           ヽ             ........:::::::<
0006デフォルトの名無しさんNGNG
VBの小ネタとかTipsとかもOK。前スレ1000は綺麗に終わったね。
0007前スレ979NGNG
とりあえず、スレの最後だったので途中になってしまったみたいなので、
前スレでの質問を答えると同時に、もう一回載せます。
−−−−−−−−−−−−−−−−
A,B,C,Dという四つの変数(整数型)を作って、(1 ≦ A, B, C, D ≦ 100 )
それぞれを乱数にして
A>=B And A>=C And A>=D And A+B+C+D=100
の条件を満たすA,B,C,Dの値を作りたいのですが

Do While A>=B And A>=C And A>=D And A+B+C+D=100
A=int(rnd*100)+1
B=int(rnd*100)+1
C=int(rnd*100)+1
D=int(rnd*100)+1
loop
と書くと非常に効率が悪いです。
もっと効率のいいプログラムってあるでしょうか?
私にはどうしてもこれしか思いつきません…
−−−−−−−−−−−−−−−
是非とも知恵を貸してください
0008デフォルトの名無しさんNGNG
(*´д`*)アハァ… のほうがよかった
0009デフォルトの名無しさんNGNG
Winsockコントロールについて質問があります。
サーバと複数のクライアントとの間でデータのやり取りをしているのですが、
ループなどを使ってサーバから複数のクライアントに一気にデータを送りたい
のですが、どのような方法があるでしょう?
例えば、
For i = 0 To 5
  Winsock( i ).SendData "test"
Next i
みたいに書いても、最後のクライアント(5個目)には送られるのですが、
それ以前のクライアントには送られないのです。
0010デフォルトの名無しさんNGNG
前スレ>>984
977ではないが、VBのCurrency型はかなり癖があるぞ。
VB5では「Int(100@/1@)」がP-Codeでは100,ネイティブでは99になったりする。
(開発環境か実行環境かの判断に使えたりするw)
ちなみにVB6ではどっちも100なんだよな。(まぁ仕様らしいが)
その他にもCurrency型の挙動不審はあったとおもう。(まぁ仕様だろうが)

・Currency型は保存と計算以外には使わない。
・Currency型以外と計算させない。(変換させるときは細心の注意)
・ネイティブできっちり検証する。
ってのがおいらの脳内ルールだな。
(Currencyに限らんがな。ヘルプに書いてあったと思うし)
0011デフォルトの名無しさんNGNG
>>1
そのAAはアハァ…だろ。
文字変える余裕あるならAA変えてみせろ。
0012デフォルトの名無しさんNGNG
>9
Winsock( i ).SendData "test"
の後にDoEventsいれたら?
0013デフォルトの名無しさんNGNG
>>7
サンプルを作ってみた。

Private Sub Command1_Click()
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
Dim n As Integer

Dim datenow As Date

A = Int((100 - 0 + 1) * Rnd() + 0)
B = Int(((100 - A) - 0 + 1) * Rnd() + 0)
C = Int(((100 - (A + B)) - 0 + 1) * Rnd() + 0)
D = 100 - (A + B + C)

datenow = Now()

Debug.Print datenow; "A ="; A
Debug.Print datenow; "B ="; B
Debug.Print datenow; "C ="; C
Debug.Print datenow; "D ="; D
Debug.Print datenow; "A + B + C + D ="; A + B + C + D
End Sub

これじゃだめなのかな?
001413NGNG
やべえ、nが意味ないよ・・・
Dim n As Integer
を脳内あぼーんして読んでください。
スマソ
0015前スレ977NGNG
前スレの978、984へ
>Currency型の変数をFor文の制御変数に使っちゃだめよん。
の理由は、正常にループできない範囲があるから。

214748辺りの値からおかしくなるらしい。(V友より)
以下のコードを試すと暴走します。

Dim i As Currency
For i = 214747 To 214748
Debug.Print i
Next
0016デフォルトの名無しさんNGNG
前すれ >>999
> A,B,C,Dが自然数だったら、
> n = 100
> A = int( rnd * ( n - n / 4 -2 )) + n / 4
> B = int( rnd * iif( A >= n / 2 - 1, n - A - 2 , n / 2 - 1 )) + 1
> C = int( rnd * iif(( A + B ) >= n / 2, n - ( A + B ) - 1, n / 2 - 1 )) + 1
> D = n - A - B - C
> かな ?

ダメ。A = 25, B = 1, C = 1, D = 73 とかなるよ。B, C, D の下限値も必要。
A が決まっている時は、n = A + B + C + D ≦ 3A + B だから、n - 3A ≦ B が下限値となる。(もちろん 1 ≦ B も必要だよ。)
同様に、A, B が決まっている時は、n = A + B + C + D ≦ 2A + B + C だから n - 2A - B ≦ C が下限値。
0017前スレ978NGNG
>>10 >>15
ありがとう。(まず使わないけど)覚えとく。
0018デフォルトの名無しさんNGNG
>>12
( ゚Д゚)お!出来ました。
ありがとうございます。
0019デフォルトの名無しさんNGNG
>>15
おいおい今さら何を。
0020デフォルトの名無しさんNGNG
>>19
>前スレの978、984へ
これ読める?
0021前スレ999NGNG
>16
n = 100
D = int(rnd * (n / 2 - 1)) + 1
C = int(rnd * ( n / 2 - D )) + 1
B = iif((D + C) =< (n + 2)/ 3, int(rnd * (int((n - (D + C))/ 2))) + 1, int(rnd * (n - 2 * (D + C) + 1)) + 1)
A = n - D - C - B
これでどう?
心配なので50000回ぐらい試してみたけど、一度も例外なしだった。
0022デフォルトの名無しさんNGNG
前すれの

1000 名前:デフォルトの名無しさん 投稿日:02/09/23 00:00
次スレ
http://pc3.2ch.net/test/read.cgi/tech/1032706491/l50

なんかすげー
0023前すれの1000NGNG
ありがとう。でも、その話題はもういいよ。
0024HAIRETUNGNG
dim add(16*32) as byte
sub Fget
for l=0 to 15
call Lget(l,add(l*32))
next
end sub
のように配列のN番目を引数にして、addのNからN+31にLgetで値を設定したいのですが
Lget(i,add())のように配列全体をわたすのはできますが、
配列の途中を渡すことができません。
Lget(i,add(),i*32)としてインデックスを別に引数として渡すことは
できますが、VBではこのような方法しかないのでしょうか?
0025デフォルトの名無しさんNGNG
VB上からフォルダに共有をかけるっていうはいったいぜんたいどうすればいいんでしょうか?
002617NGNG
ぐぐって一発検索>>25
002725NGNG
>>26
いや、
http://vbvbvb.com/jp/gtips/0251/gNetShareAddFolder.html
これは見つけたんだが、NT以上対象らしく、
98で試したらだめだったんだ。
0028デフォルトの名無しさんNGNG
>>27
> これは見つけたんだが、NT以上対象らしく、

MSDN では...

Import Library: Use netapi32.lib (Windows NT) or svrapi.lib (Windows 95).

ってなってるから、単に API 定義している Declare 文の Lib オペランドを "svrapi.dll" にするだけじゃないの ?
0029デフォルトの名無しさんNGNG
新山(へろぱ)さんを抱きたい
0030デフォルトの名無しさんNGNG
きしょ。
0031デフォルトの名無しさんNGNG
VBで作ったアプリを、、NT系等のタスクマネージャのアプリケーションの
タブの所に表示しない様にするにはどうすれば良いのでしょうか?
(プロセスのタブには表示されるが、アプリケーションのタブの、
 タスクと状態の表示に、アイコンや実行中、等の表示が無い様に)

例えば、タスクトレイに常駐しているアプリがタスクマネージャに
表示されないのと同じ様にしたいのですが…
色々プロパティやAPIを試してみたのですが、上手くいきません。
どうか宜しくお願いします。
003225NGNG
>>28
svrapi.dllに置き換えていろいろ試してるんだけど、全然成功しないです。
SHARE_INFO_2 の構造体の定義が、上のURLとMSDNでは違う気がして
そこの部分を変えたりしてるんですが一向にうまく行く気配を見せないです。
0033デフォルトの名無しさんNGNG
>>32
> SHARE_INFO_2 の構造体の定義が、上のURLとMSDNでは違う気がして

確かに違うね。svrapi.h と lmcons.h では..

#define LM20_NNLEN 12 // LM 2.0 Net name length
#define SHPWLEN 8 // Share password length (bytes)

struct share_info_2 {
char shi2_netname[LM20_NNLEN+1];
char shi2_pad1;
unsigned short shi2_type;
char FAR * shi2_remark;
unsigned short shi2_permissions;
unsigned short shi2_max_uses;
unsigned short shi2_current_uses;
char FAR * shi2_path;
char shi2_passwd[SHPWLEN+1];
char shi2_pad2;
}; /* share_info_2 */

となってる。netname[] なんかは、Unicode か Ansi かよくわからないので、両方試す必要があるかも...。
0034デフォルトの名無しさんNGNG
>>21
> これでどう?

単純に数値を求めるだけなら OK だと思うけど、これでは n = 100 の時に A = B = C = D = 25 とかはでてこなくなるよ。
0035デフォルトの名無しさんNGNG
新山(へろぱ)さんのことを抱かずにはいられない
0036デフォルトの名無しさんNGNG
Sin(0)は0
Cos(0)は1をちゃんと返してくれるんだけど
ほかの数だと値がおかしくなる
例えばsin(180)は0のはずなのに-0.801152...となる
角度からsin,cosを求めるにはSin,Cosじゃだめなのか?
どうしたら求められるか教えてくれる親切な人、教えてください
0037デフォルトの名無しさんNGNG
ListViewコントロールで、アイテムを選択した時を検出したいのですがうまくできません。
エクスプローラーみたいに、ファイルを選択すると容量とか表示されるようにしたいです。
もちろん、マウスでドラッグしての複数選択や、Shift,Ctrlキー押しながらの複数選択も検出します。
どうやればよいでしょうか?
0038デフォルトの名無しさんNGNG
>>36
> 例えばsin(180)は0のはずなのに-0.801152...となる

ねぇ、「ラジアン」って言う単位知ってる ?
0039デフォルトの名無しさんNGNG
知らないから聞いてるんですよ、たぶん
0040デフォルトの名無しさんNGNG
kanisawa.poti@nifty.com
0041デフォルトの名無しさんNGNG
>>39
> 知らないから聞いてるんですよ、たぶん

知らないなら調べろ。
0042デフォルトの名無しさんNGNG
ここに書き込んで調べてるんですよ、たぶん
004339NGNG
「ラジアン」っていう言葉を知らなかったら調べようがないでしょう?
0044デフォルトの名無しさんNGNG
>>43
> 「ラジアン」っていう言葉を知らなかったら調べようがないでしょう?

MSDN 読んだことないの ? Sin 関数の一番下に...

角度の単位を度からラジアンに変換するには、度にπ/180 を掛けます。ラジアンから度に変換するには、ラジアンに 180/πを掛けます。

と書いてある。これでわからないなら、プログラマー辞めたほうがいい。
004539NGNG
>>44
私は37ではありませんよ、一応。
0046nobukitiNGNG
VB6 + Oracle で本社と各拠点をOCNエコノミーの128kbpsで常時接続し
普通のクライアントサーバーシステムを作りたいのですが、問題点等は
ありますでしょうか?
本社にOracle Serverを置いて、各拠点からoo4oで繋いでデータの参照、
更新等するつもりです。データ件数的には1000件未満を想定しています。
速度面、パフォーマンス等で遅かったりするのでしょうか?
今までLANでの普通の10Base-Tで使用する事を前提とした開発しか経験した
ことがないので、128kbps程度の回線速度だとどうなるかよくわからないのです。
ご面倒でしょうが、お知りの方おられましたらお教え下さい。
0047デフォルトの名無しさんNGNG
ADOでMDBにアクセスするVBアプリ作ってマス!
日付型の項目がNULLの場合のSQL文書いてるンですけど

WHERE 日付 = ##

ではないのですか?
0048nobukitiNGNG
答えろオラ
004946NGNG
>>48
名前がかぶってますよ。
0050デフォルトの名無しさんNGNG
>>46
そりゃ、LANよりは遅いけど、気を配って作れば問題なし。
0051nobukitiNGNG
>>50
ご返答ありがとうございます。
ちなみに 48は私じゃないです。

そうですか、、、
>気を配って作れば問題なし。
この、気を配ってというところはストアドとかを使って
できるだけネットワーク上のトラフィックを減らした
作り込みが必要という意味ですかね?
ストアドはあまり組んだことがないので不得意なので
どうしようか迷っています。
0052デフォルトの名無しさんNGNG
>47
Is Nullじゃないの?
0053nobukitiNGNG
私という戦うバディ♪
0054デフォルトの名無しさんNGNG
質問があります。
VBSでGifヘッダーを取得したいのですが、セーフアレイなバイト配列を
どうしても文字列にする事が出来ません。
s(0)〜(5)までを6文字の文字列に変換したいのですが。

Set astImage = WScript.CreateObject("ADODB.Stream")
Set oFS = WScript.CreateObject("Scripting.FileSystemObject")
Const adTypeBinary = 1
astImage.Type = adTypeBinary
astImage.Open
WScript.CreateObject("WScript.Shell").CurrentDirectory = oFS.GetParentFolderName(WScript.ScriptFullName)
astImage.LoadFromFile ".\fileStock\test.gif"
Dim s()
ReDim s(12)
For i = 0 To 12
s(i) = astImage.Read(1) '←これ
Next
0055デフォルトの名無しさんNGNG
>>51
もちろんストアドにするのも大事だ。
例えばOO4Oをよく理解してる?
ダイナセットひとつとってもいろいろパラメータあるでしょ?
あれも、最適なものを指定してやるとか。
0056nobukitiNGNG
>>55
やはり、色々あるんですねー
パラメーターとか調べてみます。
ありがとうございました
0057デフォルトの名無しさんNGNG
>56は苦労しそう
0058デフォルトの名無しさんNGNG
>>54
一文字ずつ格納汁
005925NGNG
ぎゃーだめだー。
バックアップはサーバ機のみで取れるという仕様にしよう!
0060デフォルトの名無しさんNGNG
>58
ありがとうございます。
For i = 0 To 12
s(i) = AscB(astImage.Read(1))
Next
で、出来るようになりました。
0061デフォルトの名無しさんNGNG
NULLで埋めるってどういうことですか?
NULLってなんですか?
0062デフォルトの名無しさんNGNG
タクスバーのプロパティ「自動的に隠す」を切り替える、VB関数か、
APIを教えてください。見つからないよぅ(つд`)
0063デフォルトの名無しさんNGNG
WINSHELLAPI UINT APIENTRY SHAppBarMessage(
DWORD dwMessage,
PAPPBARDATA pData
);

Parameters
ABM_ACTIVATENotifies the system that an appbar has been activated.
ABM_GETAUTOHIDEBARRetrieves the handle of the autohide appbar associated with a particular edge of the screen.
ABM_GETSTATERetrieves the autohide and always-on-top states of the Windows taskbar.
ABM_GETTASKBARPOSRetrieves the bounding rectangle of the Windows taskbar.
ABM_NEWRegisters a new appbar and specifies the message identifier that the system should use to send notification messages to the appbar.
ABM_QUERYPOSRequests a size and screen position for an appbar.
ABM_REMOVEUnregisters an appbar, removing bar from the system's internal list.
ABM_SETAUTOHIDEBARRegisters or unregisters an autohide appbar for an edge of the screen.
ABM_SETPOSSets the size and screen position of an appbar.
ABM_WINDOWPOSCHANGEDNotifies the system when an appbar's position has changed.
0064デフォルトの名無しさんNGNG
>>63
キタ━(゚∀゚)━( ゚∀)━(  ゚)━(  )━(  )━(゚  )━(∀゚ )━(゚∀゚)━!!!!!
ありがとうございます。
現在実験中です、AppBarDataがちょと難しいです・・・がんばります。
0065デフォルトの名無しさんNGNG
>>61
その文字列をすべてChr(0)の文字にする、ということだと思われ。
0066デフォルトの名無しさんNGNG
>>63
君の資料は古いと思われ。

>>64
ABM_SETSTATUSを使う。ただし、WinXPでしか効かない。
Win95、98、NT4、2000でダメなことは確認済み。

それ以外の環境だと10個くらいのAPI駆使して、
無理やり設定ダイアログだして「自動的に隠す」を切り替える方法を
取ろうとしていた人もいたがうまくいったかどうかは知らない。
0067デフォルトの名無しさんNGNG
>61
ttp://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=utf8&oe=utf8&q=NULL%E3%81%A8%E3%81%AF
0068デフォルトの名無しさんNGNG
>>66
win98です、だめそうですね・・・
あきらめます、ありがとうございました。

0069 NGNG
VBってさ、メモリリークを 起こすかな?

配列とか 確保しても 解放しなくてもいいよね?

誰か 教えて。
0070デフォルトの名無しさんNGNG
循環参照がだめなんじゃなかったっけか。
0071 NGNG
VB6のSP5を入れてます。

画面を作るときに、リストボックスの大きさをFORMの大きさにより
変更したいのですが、標準でそのようなコントロールは、あるのでしょうか?
教えてください。
0072デフォルトの名無しさんNGNG
>>69
その配列を private で使用しているフォームのunload時に、
set frmXXX = Nothing
とすればそのfrm内の配列は開放される。
逆にこれを入れないとform内の全ての保持値がメモリに残ったままになっているので
(VBアプリを終了するともちろん解放されるが)
保持しておく必要がないなら入れるべきだろう。
0073デフォルトの名無しさんNGNG
>>66
WinAPI使うたびに思うんだけど、なんでもっと便利関数にしないのかな。

TaskBarAutoHide(TRUE);

みたいなAPIを用意してくれればいいのに。
0074 NGNG
追記
フレームみたいに 二つのリストボックスの大きさを調整したいんです。
■ このスレッドは過去ログ倉庫に格納されています