VB初心者質問スレ Part8 (・∀・)

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
前スレはこちら
  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/test/read.cgi/tech/1010624646/
  Part 6 http://pc.2ch.net/test/read.cgi/tech/1013844542/
  Part 7 http://pc.2ch.net/test/read.cgi/tech/1015836357/
Win32 API関連スレ
  http://pc.2ch.net/test/read.cgi/tech/1017072275/

心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調てみる。
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
2デフォルトの名無しさん:02/04/14 23:39
2ゲット
3デフォルトの名無しさん:02/04/15 00:37
Microsoft Common Controls の TabStrip ってコントロールを使ってます。
右クリックで「閉じる」というポップアップメニューを出すところまではできたのですが、
どのタブの上で右クリックしたかわかる方法はありませんか?
(例えばタブが3つあって一番左のタブが選択されているとき、
 真中のタブで右クリックしたことがわかる方法)
TreeViewコントロールの HitTestメソッドみたいなものもないようですし。
TabStrip1.SelectedItem を見ても、クリック前に選択されていたアイテムが格納されていて
正確に判定できないのですが…。

# Webでは「人気ない」とかかかれてましたが、別のコントロール使うべきでしょうか?

開発環境:
Windows2000 + VisualBasic6.0(SP5)
4デフォルトの名無しさん:02/04/15 00:50
乙津枯れー>>1
>>3

こんなコードが手元にあるけどー。

Private Sub TabStrip1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
  If Button = 2 Then
    If TabStrip1.SelectedItem.Left < (x / Screen.TwipsPerPixelX) _
      And (x / Screen.TwipsPerPixelX) < TabStrip1.SelectedItem.Left + TabStrip1.SelectedItem.Width _
      And TabStrip1.SelectedItem.Top < (y / Screen.TwipsPerPixelY) _
      And (y / Screen.TwipsPerPixelY) < TabStrip1.SelectedItem.Top + TabStrip1.SelectedItem.Height Then
      popupmenu mnuHoge

どうやら私もいい方法が思いつかなかったらしく、SelectedItemの領域外を
右クリックした時は無視するようにてる模様。
…腐れてるなぁ。
63:02/04/15 06:54
>>5さん
どうもありがとうございます。
コードを参考にさせていただきました。
全てのTabに対して領域内にあるかどうかでチェックすると
nSelectedIndex に右クリックされたタブのインデックスが入ります。

Private Sub TabStrip1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
 
 If Button = vbRightButton Then
  Dim tb
  For Each tb In TabStrip1.Tabs
   If tb.Left < (X + TabStrip1.Left) And (X + TabStrip1.Left) < tb.Left + tb.Width And _
      tb.Top < (Y + TabStrip1.Top) And (Y + TabStrip1.Top) < tb.Top + tb.Height Then
    nSelectedIndex = tb.Index
   End If
  Next
 End If
 
End Sub

さーて改造改造…
# 余談ですが、 Dim tb as Tab ってやったら構文エラーでした。入力候補にも出ているのに何故?
7デフォルトの名無しさん:02/04/15 07:19
>>6
For Each 〜 は、バリアント変数限定。
>>6
Tab関数と混乱しているから。
Dim tb As MSComctlLib.Tab と書きなされ。

>>7
残念。はずれ。

MSDNの「For Each element In group」のelementの説明
必ず指定します。コレクションや配列の各要素を繰り返す変数を指定します。
コレクションの場合、引数 element にはバリアント型 (Variant) 変数、
総称オブジェクト型変数、または任意の固有オブジェクト型のオブジェクトの
変数を指定できます。また、配列の場合は、引数 element にはバリアント型のみ
指定できます。
9デフォルトの名無しさん:02/04/15 09:58
メニューについて質問です。
IE6のように、CoolBar内にメニューを入れてしまう芸当はVBでできますか?
背景が透明になるコンテナにラベルとか自分で配置しないといけないんでしょうか…
10デフォルトの名無しさん:02/04/15 15:05
フォームに貼り付けたスプレッドシートに、SQL文で、accessのデータを持ってくる
っていうコードきぼんぬ。
>>10
自分でやれ。
1210:02/04/15 15:59
はい。>10
テーブルをセルに表示する方法がわからんけど頑張ります。
Do Until rs.EOF
vaSpread1.Row =
vaSpread1.Col =
adoRecordset.MoveNext
Loop

こんなのが入ると思うんだけど
mdbファイルにADOでアクセスして
レコード追加、レコード削除を繰り返すとレコード数が少ないにもかかわらず
mdbファイルのサイズがどんどん大きくなるんですが、こういうもんなんですか?
>>10
BOCのSPREAD?
>13
そうだよ。
だからあるタイミングで最適化するようにしとかないといけない。
1610:02/04/15 16:31
vaSpreadとかいうコントロールを追加してやってます
助けて下さい・・
1710:02/04/15 16:36
Private cn As ADODB.Connection
Private rs As ADODB.Recordset

Private Sub Form_Load()


Set cn = New ADODB.Connection

'データベースに接続
cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=Y:\Sample2000.mdb"
cn.Open


'レコードセット取得
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic

'スプレッドシートにレコードセットの内容を表示します
Set vaSpread1.DataSource = rs
vaSpread1.DataField = "会員番号,会員名"


Do Until rs.EOF
????????????????
adoRecordset.MoveNext
Loop


'接続を閉じる
adoRecordset.Close
adoConnection.Close

End Sub



レコードセットのデータが無くなるまで
スプレッドシートのセルに当てはめていきたいんですけど
わからなくて進まなくて死のうかと思った事もあったりなかったり
>10
考え方は当たっている。
あとはヘルプでスプレッドのプロパティ・メソッドを調べ、
その動作について理解すればおのずと道は開かれるモナー
19デフォルトの名無しさん:02/04/15 16:48
dim Res as Adodb.Recordset
dim Items() as string
dim Ret as string
dim i as long
dim y as long

'レコードセット取得関数
OpenRst(Res,"select * from TBL")

'---------↓サンプル-----------

'--初期化
ret=vbnulstring
y=1
redim Res(Res.Fields.Count-1)

'--該当件数分、処理を繰り返す
Do Until rs.EOF
'レコード→配列
for i=0 to ubound(items)
items(i)=res.fields(i).items(i).value
next i
'配列→文字列
ret=ret & join(items,vbtab) & chr(13)

y=y+1
adoRecordset.MoveNext
Loop

'文字列→スプレッド
with vaSpread1
.maxcol=ubound(items) + 1:.maxrow=y
.Blockmode=true
.Col=1:.Col2=Res.Fields.Count
.Row=1:.Row2=.maxrows
.Clip=ret
end with

'後始末
erase items
adores.close
set adores=nothing



#テストしてないよ
2010:02/04/15 16:50
あー ごめんなさい
途中から変数名間違えてました。死んできます
2110:02/04/15 17:20
むずかしすぎます・・ >19
ありがとう
2213:02/04/15 17:53
>15
さんきゅ。
検索したらJROってのが出てきて試してみた。
そしたら最適化できた。
最適化ボタンでも作っておきます。
>22
最適化時にファイルが壊れる事がタマーにあるんで、保存してからがいいよ。
2422:02/04/15 19:52
>23
さんきゅぅ。
その壊れた時何かエラーが出る?
それとも最適化が完了した事になってて実はファイルが壊れてるっていうパターン?
25デフォルトの名無しさん:02/04/15 20:43
textファイルをc:\からc:\windowsに移動したいのですが、
どうやったらいいのですか?
26デフォルトの名無しさん:02/04/15 20:50
MoveFile
CopyFileとKill
28デフォルトの名無しさん:02/04/15 20:52
>>26-27
ありがとうございます。
じつはそのコマンドの使い方がわからないのです。
よかったら使用例を書いてもらえませんか?
29ななし:02/04/15 20:56
>>27

> CopyFileとKill

以前に別のサイトで、おなじ質問に対して、私もそう書いたんですが、
その方法だと、エラー処理に注意しないと、Copyに失敗しているのに、
コピー元が削除されてトンデモないことになります。

API等使わずに無難に処理するなら、

Name OldName As NewName

が正解かと思います。

30デフォルトの名無しさん:02/04/15 20:58
質問なんですが、
OLEドラッグドロップでフォルダをドラッグした場合
フォルダのパスは取得できるのですが、中のファイルがあるかどうか、
あったら中のファイルの名前を取得する方法がわかりません。

どなたか、お願いします。
31デフォルトの名無しさん:02/04/15 21:01
>>29
ありがとうございます。今やってみたら移動できました。

Name "c:\1.jpg" as "c:\DOWNLOAD\1.jpg"
32ななし:02/04/15 21:07
>>31

例外処理(空き容量が足らんとか、媒体が書込み禁止されてるとか、・・・e.t.c.)は
ちゃんと書いてください。
33デフォルトの名無しさん:02/04/15 21:46
VBで、exeにドラッグ&ドロップしたファイルのパスを得るにはどうすればいいのでしょう?
VBSなら、以下のようにすればいいことは知っているのですが・・・
------------------------------------------------------------
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
WScript.Echo objArgs(I)
Next
commandnihairuyo
3531:02/04/15 22:09
>>32
ご丁寧にありがとうございます。
これで今作ってるアプリケーションが完成に一歩ちかづきました。
36デフォルトの名無しさん:02/04/15 22:25
(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)
 31はどんなアプリケーションを完成させようとしているんだろう・・・
(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)
3731:02/04/15 22:41
>>36
画像を整理するアプリケーションです。
マウスを使わずに矢印キーでフォルダ内の画像を全画面表示で次々表示して
気に入った画像はフォルダへ、
要らないのはゴミ箱へという感じのを作ってます。
フォルダに移す際、押すコマンドボタンによって移動するフォルダが選べるようにしてます。
command1押すとc:\winnt、command2を押すとc:\windowsという感じです。
コマンドボタンはF1とかF2を押すことで同じ効果があるようにしました。
もちろん移動先フォルダは任意に設定できます。

こんな感じです。初心者にはこれが精一杯。あはは。
38デフォルトの名無しさん:02/04/15 22:45
エロ画像の整理か、大変だな。
3931:02/04/15 23:00
正確にはエロと非エロの分類分けだったりする‥。
40デフォルトの名無しさん:02/04/15 23:04
>>37
先が別ドライブだと、コピーになっちゃうよ。
41デフォルトの名無しさん:02/04/15 23:05
それなら
 Private Function Ero(Filename As String) As Boolean
みたいな関数作った方がいいよ。
4231:02/04/15 23:16
>>40
移動先が別ドライブだと移動ではなくコピーになってしまうのですか!
うむむぅ。

>>41
その命令は私の理解を超えています。
明日ヘルプとか見て解読してみます。
>>42

例外処理(エロかグロか区別がつかない、ホモ画像だったとか、・・・e.t.c.)は
ちゃんと書いてください。
4431:02/04/15 23:29
>>43
ご丁寧にありがとうございます。
モザイク無しからタテスジ、妊婦画像までありとあらゆる例外処理をしますのでご安心を。
45デフォルトの名無しさん:02/04/15 23:44
>>42
コピーに成功したことを確認してから、元ファイルを削除すればオッケー。
Winのドライブ間移動だって、やってることはこれと同じ。
46質問:02/04/16 00:07
VBでプリンタデバイスを制御したいのです。
1.紙面へのGDI描画
2.複数枚数
3.フォントを切り替えながらテキスト出力

どんな表現で行うべきなのでしょうか?
47デフォルトの名無しさん:02/04/16 00:45
>>46
その程度はデバイス制御とは言わない、ふつう。
ただの印刷。
まず、MSDNで「印刷」を調べてから、再質問。
一瞬組み込み屋さんかな、とも思ったけど
VBでデバイス制御、っつってる時点で違うか。
49デフォルトの名無しさん:02/04/16 01:56
>>46
そんだけの説明だと
Printerオブジェクトで十分じゃないのとしか言えない。
うむ。
せっかくVBにはPritenrオブジェクトという便利なものがあるんだから活用シヨーウヨ。
5150:02/04/16 03:11
Pritenr→Printer
タイプミス
52デフォルトの名無しさん:02/04/16 05:33
WebBrowserコントロールのDocumentプロパティ使いたいんですけど、
strHtml = WebBrowser.Document.all.innerhtml
ってやってもできないのは何故?
オブジェクトがありません言われるけど、ヲッチするとあるんだよ〜(;Д;)
53デフォルトの名無しさん:02/04/16 05:35
>>46
とりあえずこの辺をどうぞ
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9801/vbprint/


ちなみにディスプレイのテキスト表示でもプリンタの設定変更でも
デバイス制御には変わらない。
『デバイス』って言葉に過敏に反応するのは、いかにも、おもちゃGUIしか
知らないという感じ。別に普通に使う言葉。
そもそもVBなんだからDDのわけはない(見ればそのまま)。
難しい言葉だと思い込んで初心者スレで説教垂れるのは、かなり悲しい。
54デフォルトの名無しさん:02/04/16 08:35
MsFlexGridコントロールで、
2行に一度、境界ラインを太く(濃く描画)するという方法をご存知の方、
教えていただけないでしょうか。

いろいろ試してみたのですが、全行が変わったりするので
悩んでます。よろしくお願いします。
5531:02/04/16 08:48
>>45
ありがとうございます。
やってみます。
56目指せ脱初心者:02/04/16 09:24
プラグインに対応したVBのプログラムを作ろうと目論んでいます。
プラグインDLLの存在を確認してメニュー項目を動的に増やす方法は知っているのですが、
いざプラグインを実行しようとするとハテ?となってしまいます。
C++なら関数ポインタを駆使してできるのですが…
(プラグインは全て同じ関数をエクスポートしているという前提です)

なにかうまい方法をご存知の方はご教授くださるとありがたいです。
(おとなしくVCでクライアントを作れという説もありますが…)

こんなん見つけましたが、果たして安全なものかどうか…
members.tripod.com/~masapico/doc_FuncPtr.html
57デフォルトの名無しさん:02/04/16 09:38
>>54
私も特定行のラインを太くすることにトライしたことあるのですが、
残念ながら上手い方法が見つかりませんでした。
仕方がないので、行の高さ変更を不可にして、
特定行の直後の行の高さを凄く細くしました。
こうすると一応太く見えますが、Fixedの部分もちょっと出っ張って見えますし、
なによりセルの操作が非常にやりづらいです…。

Dim i As Integer
For i = 0 To 9 Step 3
MSFlexGrid1.RowHeight(i) = 15'この数は適当です。twipがどうとか…
Next
58デフォルトの名無しさん:02/04/16 09:40
どなたか33に答えてくださいまし・・
>>57
その方法だとキーボードでのカーソル移動にめちゃめちゃ違和感があると思われ。
>>58
Command 関数 ってのがあるから、それをSplitするなりしてがんばれ。
6154:02/04/16 09:47
>>57
早速のレスありがとうございます。
なるほど、そういう方法も有るんですね。
そのアイデアも踏まえて、もうちょっとがんばってみます。
ありがとうございます。
>>61
サブクラス化について勉強してみると得るものがあるかもしれん。
63ななし:02/04/16 10:12
>>62
サブクラス化って、どんなメッセージがあるか(そして、それがどのWindow相手に
適用できるものなのか)把握しないと、使いこなせないのよね・・・。
(当り前やけど)

と、ツッコんでみるテスト。
>>56
関数ポインタは使えないよ。あきらめな。

>こんなん見つけましたが
一応理論上は間違ってないし、俺も似たようなことしてるw
でもVC++使うのが一番正常な人間だと思うぞ。
>>56
ActiveX DLLを使用して作る。VBのアドインとかもこの方法だ。

適当に説明すると
1.プラグインのインタフェース用クラスを作る
2.インタフェースをImplementsしたクラスを作る。
3.このクラスをActiveX DLLにする。(これが一つのプラグイン)
4.プラグイン対応プログラムからActiveX DLLのクラスのインスタンスを
 CreateObjectで作成しプラグインインタフェースにキャストして使用する。

手抜きしたいのなら、インタフェースを作らなくても
実行時バインディングで実装可能。
6656:02/04/16 11:45
>>64
ないんですか…残念。

>>65
ActiveXは使ったことないので気付きませんでした。
DLLはVCで作ろうと思ってたんですが…
ちょっと調べてみます。

レスくださった方々、ありがとうございました。
>>9
俺も知りたい…
6865:02/04/16 12:03
>>66
DLLはVCでActiveXでないDLLだったのか?
てっきりVBだけで作るものだと思っていた。

もちろんVCでもActiveXは作れるからさっきの説明の
プラグインの部分をVCで実装すればできる。

どうしてもVCのプラグインをActiveXでないDLLにしたいのなら、
プラグインのDLL名を同じにしてプラグインごとにフォルダを分けて
Declareで宣言して環境変数のPATHを実行時に変更することで出来ないかな?
やってみたこと無いし、変な方法だけど。
6964:02/04/16 12:08
>>66
プラグインに対応って、要するにSusieプラグインを使いたいとか、
そういうことじゃないの?

プラグインも作れます、ならVC系で普通のDLL作らせるほうが一般的だと思う。
7066:02/04/16 12:50
こちらの事情を書いてなかったので混乱させてしまいました。失礼。
既存のプラグインを使いたいというのではなく、
VBで作っているオリジナルのソフトにプラグイン機能をつけられたらいいな〜と
おもって聞いてみた次第です。
途中まで作っちゃったのでVCで作り直すのも面倒だなあと…
71:02/04/16 16:12
最近VBの勉強を一通り終わらしたのですが,参考書やりつくしたので
ここにすんでおられるプログラマーの人何か初心者が考えたらわかる程度の
問題作ってください.では
>>71
簡単なWebサーバ作ってみるってのはどう?
初心者が考えたら分かる程度か、というとちょっと辛いかと思うけど、
いろいろ応用できて楽しいよ。
自作ソフトのフロントエンドにブラウザ使うって用途にも使えるし。
>>71
問題の系統は?
74デフォルトの名無しさん:02/04/16 16:22
>>71
よし!ねぼうしがちなプログラマーにVB6.0かVB.NET目覚まし時計を作ってあげるとよろこばれるぞ
ソースもできれば欲しい
7534:02/04/16 22:15
>>58
ga-n
orettigakotaetetanonikiduitekurenakattanone
samisi-
76デフォルトの名無しさん:02/04/16 22:39
質問お願いしたいのですが。
フォルダのパスから中のファイルの名前を取得する方法
サクッと教えてください。
おねがいします。
7734:02/04/16 23:00
dir
78四七子:02/04/16 23:11
>>53
その言葉、そっくりそのままオマエに返してやるさ。
オマエの国じゃ何か?
「ふつうは言わない」=「絶対言わない」なのか?
「不適切表現の指摘」=「説教」なのか?
それじゃ仕方ないな〜
79デフォルトの名無しさん:02/04/16 23:17
DoCmd.TransferTextでCSV形式で出力したのですが、
出力したファイルの一行目がテーブルのフィールド名なのです。
これを無くしたいのですが、どうすればよいのでしょうか。
8076:02/04/16 23:31
>>77
えっと、俺へのレスでしょうか?
それなら、ありがとうございます。

ちょっとややこしいのですが、フォルダのパスまでがわかっていて、
その中のファイルの名前かパスを取得したいのです。
ややこしくてすいません。
8179:02/04/16 23:32
自己解決しますた。
お騒がせしますた。
>>78
逆切れ、かっこ悪い。
8334:02/04/16 23:39
>>80
むっキー
dirって書いてあるんだからヘルプでdir引いてみろよ
まったく最近の餓鬼は
>>76
>質問お願いしたいのですが。
って表現、日本語として変だから、VB覚える前にデバッグしてね。

んで、アドバイスだけど、Dirって、再帰呼び出しするとパニクると
思うので工夫してねー。
85Rubyist:02/04/17 00:37
最近 幼虫うまいんだ あまーいんだ とってもね けど あげないよ ぼく 甘党だからね
86デフォルトの名無しさん:02/04/17 00:53
VCで作ったプログラムに
DWORD hoge(UINT argc, char* argv[]);
っていうエクスポート関数があったんですが、これはVBでは
Declare Function hoge Lib "aaa.dll" (ByVal argc As Long, argv As Long) As Long
で正しいでしょうか?(関数の名前が正しいことは確認済み)
1.2番目の引数をどうやって宣言していいのか、
2.宣言があってるとしたらどうやってString()を渡せばいいのかがわかんないのです…
87デフォルトの名無しさん:02/04/17 01:02
すみません教えてください。
フォームを2つ用意して,メインフォームから.showで2つ目のフォームを呼び出すと
どうやらメインフォームでもForm_Loadが呼び出されているようなのですが
これはなぜなのでしょうか?
初期化処理を2度通過させられて困ってるんですが…。
どうかよろしくおねがいします。
>>87
load/unloadとかしてないよね?
今、フォームを2つ用意してそれぞれのForm_Loadに
 MsgBox "Form1" '(Form2は"Form2")
って書いてみて、Form1に貼ったコマンドボタンでForm2.showしてみたけど
そんな現象起こらなかったよ?
89デフォルトの名無しさん:02/04/17 01:18
Inetコントロールについて質問です。
OpenURLメソッドを使ってデータを取得しているのですが、
404 Not Found や 403 Forbidden を検知するにはどうしたらいいでしょう?
90デフォルトの名無しさん:02/04/17 01:54
実行中の画面(フォーム)をプリントアウトしたいんですけど どうすればいいので
しょうか? 今まで参考書とかに載ってるのをみても全く疑問に思いませ
んでしたが、いざ 自分がプリントアウトしてみようとするとどうすればいいの
か全くわかりません。

分かる方いらしたらお願いします。
>>89
Inetコントロール使ったこと無いからあてずっぽだけど、
ResponseCode プロパティ と ResponseInfo プロパティが怪しいぞ。
調べてみるといい。

9289:02/04/17 02:00
>>91
むむ、今ちょうど調べてるとこでした。
レスどうもです(^^
>>90
フォームの姿が分かれば良いなら
開発環境の「ファイル」→「印刷」
で表示されるダイアログでの「印刷対象」で
「フォーム」だけにチェック入れて印刷すれば?
画質も適当にセットして
プロジェクト中の全部なら、左側で
「カレントプロジェクト」にチェックを

実行中でないとダメなら
Alt+PrintScreen キーからだろうな。
#つーか、これじゃWin初心者じゃん?
>>87
Form2 の Load イベント内のコードで Form1 上のコントロールを操作
しているようなことはないですか?
95デフォルトの名無しさん:02/04/17 02:30
質問です
VB6ですが
IEのように
メニューバーをCoolBar上に置くのは無理でしょうか?
せっかくCoolBarあるのに
VBではサポートしてないのかな…
9687:02/04/17 02:31
>>94
はい,Form1のメニュー項目をdisableしているのと,
Form1に張り付けたwinsockのプロパティを読み出しています。
これっていけないことだったんでしょうか…。
97デフォルトの名無しさん:02/04/17 02:57
>>89
Inetコントロールはやめときなさい
機能が限定されすぎ
Winsockでおやりなさい

これならTCPレベルなので自由度が高い
ただし各クライアント、鯖機能の実装は 自分でやる
HTTPクライアントでの使い方をいっておこう
1)サーバーに接続要求し、確立する<Connectメソッド 
2)そしたら HTTP鯖に対して HTTPメソッド(命令)を送る<SendDataメソッド
 単にページ、ファイル要求は"GET"メソッドだ (通常我々がブラウザでやってるもんだ)
 GET□ファイルパス□HTTP/1.0[vbCrlf][vbCrLf]
の文字列をSendDataで送ればよい(□はスペース、[vbCrLf]はVB組込み改行コード定数)
おっとファイルパスはトップフォルダ以下相対だ つまり/で始まる
3)HELPにあるとうり、受信データは自分でどこかに保存せよ
4)鯖が閉じたら、こちらも接続を閉じろよ、忘れるな

つまりHTTPやFTP、POP3などTCP上のものは扱えるということだ
ただし!、上記は最も簡単な例だが、HTTPのメソッドや 鯖のレスポンス(返信)の意味に対する
処理を自分で処理しないといけない、HTTP1.0はまだいいが
HTTP1.1はな…大変だぞw
つまりは要求やレスは単なる文字列のやりとりなのだが、それでどう処理するかを知らないとダメなのだ
もちろんプロトコルで全然違う
鯖がjpegみたいなバイナリーデータ送るよって イッテんのに 理解できないで
テキスト処理してるとマヌケ HTTPをまず よく知ることだ
HTTPプロトコルとは言わないように(・∀・)

98デフォルトの名無しさん:02/04/17 03:10
面倒な処理を簡単にやるためだけの存在のVBに
メンドイ実装してどうするんだ・・・
>>96
ロードされていない Form 上のコントロールを触ると
自動的にロードされます。
気をつけましょう(w
10087:02/04/17 03:32
>>99
そうですか,ただForm1はメインフォームなので,
プロジェクト起動後は1度すでにForm_Loadを通過してるんです。
それでもまた(2度も)Loadイベントが発生してしまうのがよくわからないんですが…。
↑何気に100GETしてるし(´Д`;)
>>100
それじゃその前にどこかで Unload してませんか?
103デフォルトの名無しさん:02/04/17 03:42
>>93
デキマシタ━━━━━(゚∀゚)━━━━━!!!!

ありがとうございます、本当に助かりました。
104デフォルトの名無しさん:02/04/17 03:49
>>100
スタートアップちゃんと Form1かい?
逆だと 死ぬよw
10587:02/04/17 03:50
>>102
Unloadしていないんです…。
ただ,さきほどの>>94さんのお話を受けて,Form1のwinsockコントロールの
プロパティをForm2から読み出すのをやめてみたら,Form1のLoadイベントの
二重発生はとりあえずなくなったようです。
よくわかりませんが前へ進むことができそうです。ちょっと不安ですけど。
ここへ来てよかったです。どうも本当にありがとうございました。
>>105ネちゃったね
>>102もねたかい? 解決したよな しないよな もどかしさw
10787, 105:02/04/17 04:22
>>106
起きておりますよ。コーディング中。
結局原因は不明のままですが,ちなみにLoadイベントが2度目に起きたときには
グローバル変数もなんだか初期化されていたんです。
ようするにおなじForm1が実際に2つ立ち上がったようなかんじでした。
なんだったんだろうなあ。
>>107
どこかにNew From1って書いてないかい?
109横レス:02/04/17 04:28
>>107
表示して即終了、ってやってもなるのかな?
Form2_Load でいきなり Exit Sub してみるとかw
>>76
FileSystemObjectつかうってのはどうよ。
Splitでさくっと分解すりゃいいんじゃない?
>>110
FileSystemObjectを使用するならGetFileNameや
GetParentFolderName等の方が便利じゃないかい?
>>86
×Declare Function hoge Lib "aaa.dll" (ByVal argc As Long, argv As Long) As Long
○Declare Function hoge Lib "aaa.dll" (ByVal argc As Long, Byval argvStr As String) as long
11376:02/04/17 09:57
>>83
失礼しました。
DIR関数はパスからのファイル名やフォルダ名を返すものだと思ってました
フォルダからはファイル名が取得できない、と思ったら、ワイルドカード使えるんですね
ありがとうございました。
なにげに34の答えが無視されまくりだな。

そういわれて何気に最初から読んでたら
34前後のエロ画像整理アプリの話にちょっとワロタ
116超初心者:02/04/17 12:09
ボタン押したら他のフォームが出てくるように
したいんですけど、どうしたらいいですか
>>116
他のフォーム.Show
118107:02/04/17 15:43
>>108
書いてなかったです。
>>109
Form2_LoadでExit Subでは即終了にはなりませんよー。
119超初心者:02/04/17 16:08
ありがとうございます。
パラメータって意味を
噛み砕いて教えて下さい。
>>118
Form_Load にブレークポイントを設定して、呼び出し履歴を確認してみては。
>>119
12233=58:02/04/17 18:38
>>33
>VBで、exeにドラッグ&ドロップしたファイルのパスを得るにはどうすればいいのでしょう?
>>58
>Command 関数 ってのがあるから、それをSplitするなりしてがんばれ。
ありがとうございます。で、流れはわかったのですが、
例えば「"C:\Documents and Settings\Administrator\デスクトップ\foo.txt" "C:\Documents and Settings\Administrator\デスクトップ\bar.txt" 」
を、2つのパスとして取り出すにはどうすればいいのでしょう?
スペースでsplitすると、「Documents and Settings」も分割されてしまうし・・・
データベースを一から勉強するのにおすすめな本、サイトはありますか?
124デフォルトの名無しさん:02/04/17 19:38
esa
>>123
ラリー・エリソンの自伝(w
VB仕様書工房ってどんな感じですか?
>>74さんの問題を解いて見ました。
テキストボックスの時間になると音がなります。
STOPにすると音が鳴りません。どうでしょうか。

Private Sub Command1_Click()
With Command1
If .Caption = "SET" Then
.Caption = "STOP"
Timer1.Enabled = False
Else
.Caption = "SET"
Timer1.Enabled = True
End If
End With
End Sub

Private Sub Timer1_Timer()
If Text1.Text = Format(Now, "hh:nn:ss") Then Beep
End Sub
Text1.Textにはいつ代入されているのか・・・ハァハァ
129 :02/04/17 23:25
.png ファイルを扱えるコントロールありますか?
あと、.bmp や .jpg を .gif に変換したいのですが、VBだけでできますか?
 
>>129
>あと、.bmp や .jpg を .gif に変換したいのですが、VBだけでできますか?
UNISYSに高額な料金を払えば可能。
>>122
Command$のパスはOSによって違うのだ。(藁鬱)
自分でやってみた?
確か9x系ならDOS名+スペースで、NT系なら"で区切られてたはず。

>>129
>.png ファイルを扱えるコントロールありますか?
どっかにあった。竹熊公房だっけか。

>あと、.bmp や .jpg を .gif に変換したいのですが、VBだけでできますか?
できる。GIFのフォーマットを知ってればね。

>UNISYSに高額な料金を払えば可能。
フリーライセンス(使い放題)で数千万だったかな。
>>123
VB系の初心者向けの本はどれも似たり寄ったり。
タイトルに「VB」「初心者」「データベース」が
付いてる本選んどき。
133129:02/04/18 00:27
>>130 >>131
いいのか悪いのかわかりませんが、IrfanView で「.bmp → .gif → .png」と
全部出来ちゃいました(w
.bmp や .jpg から .png を作りたかったので、とりあえず目標は達成できたと(w
あとは VB 側から IrfanView を操作して一連の作業を自動化したいんだけど、できるかな?
>>126
仕様書工房シリーズは仕様書作成に時間がかかります(あたりまえか)
関数、変数などの情報から呼び出し順までいろいろ書いてくれます。
関数の仕様やコメントを入力する機能が糞でストレスがめちゃめちゃ溜まります。
全部のフォームのスクリーンショット取るために起動されるVBがかわいそうです。
>>119
サブルーチン(関数)呼び出しで、呼び出した側がサブルーチンに渡す情報のことをパラメータという。
例えばタクシーの運転手に「東京駅まで」て言ったきは、その「東京駅まで」というパラメータを運転手に渡している。
こんな説明じゃダメ?w
136デフォルトの名無しさん:02/04/18 06:37
VBのメニューエディタが使いづらいんですが、何かいいツールとかないですか?
137127:02/04/18 07:41
>>128
テキストボックスにはhh:nn:ss形式でユーザーが入力して欲しいです。
なんかコードだけだと良くわからないですね・・・
13874:02/04/18 11:56
>>127
動作確認してみたぞ。
基本的な機能を作り終わったという感じだな。
あとは肉付けして人が朝に起きれるぐらいの物に発展させていこうじゃないの。
起きれるは起きられると書きなさい。という突っ込みは無しだぞ。
>>127
目的時刻に重たいアプリが1秒以上タスクを占有すると
アラームが鳴らない可能性がある罠。
対策はいろいろバリエーションがありそうね。
140122:02/04/18 12:24
>>122ですが、
「"C:\Documents and Settings\Administrator\デスクトップ\foo.txt" "C:\Documents and Settings\Administrator\デスクトップ\bar.txt" 」
という文字列を、「" "」でsplitして、なおかつ最初と最後の要素について、左右の「"」を取り除く作戦で
いこうかと思います。
ただ、以下が本題ですが、「「" "」でsplit」する方法がわかりません。
strArg = Split(Command(), "\" \"")なのかなと思ったのですが、エラーになっちゃうんですよね?
どうすればいいんでしょう?
141ななし:02/04/18 13:00

板違いな質問(確信犯)ですが、C言語でVBの動的配列(ReDim)に相当するものは作れる
のでしょうか?
もし、できないとすると、別のデータ構造(リスト等)を使うしかないでしょうか?
142デフォルトの名無しさん:02/04/18 13:43
>>140
C:\で取っちゃえば?
143デフォルトの名無しさん:02/04/18 14:15
>>140
""" """と書け。
>>141
連続したメモリに置く場合は、メモリの確保→コピーで作れる。
C++とは書いてないのでオブジェクトの動的配列・STL等の使用は考慮外。
145デフォルトの名無しさん:02/04/18 14:33
VBでDOSのnetstaの実行結果を所得することは可能ですか?
また可能なら方法を教えてください。
146デフォルトの名無しさん:02/04/18 14:56
>もし、できないとすると、別のデータ構造(リスト等)を使うしかないでしょうか?
なぜリスト構造知っていて動的配列を知らないの。
malloc, reallocは可変長配列を使用するときに使う。

147ななし:02/04/18 15:09
>>144
>>146

コメント、ありがとうございます。m(_ _)m
厨房質問は、やはり恥ずかしいので、勉強して出直して来ます。
>>145
http://www.vector.co.jp/soft/win95/prog/se222454.html
こーゆーのはダメでつか?
使ったことはないケド。。。
149@ ◆Yqz..... :02/04/18 16:44
質問させて頂きます。
今までVB5Proを使っていたのですがこの度VB6にしたのです。
が、VB5で既に作ってあったプロジェクトを読み込んで、実行すると
str関数の所「nas.caption = str(reftext.text) & str(refnum.text)」でエラーになる。
「コンパイルエラー:プロジェクトまたはライブラリが見つかりません」と。
VB5Proの時にはちゃんと実行できていたのですが・・・。
そしてStr以外のところは全く問題無くコンパイル、実行できます。
どういうこと??長文スマソ
150読まずにカキコ:02/04/18 17:18
>149
参照設定開いて頭に「Visual Basic」ってついてる奴を入れる
151_:02/04/18 18:19
>>149
+でやらないで&で文字列を繋げばstr関数いらないんじゃ?
気のせいか?だったら逝ってきますが何か?(w
152Delフサギコ ◆zE1iiRdQ :02/04/18 20:09
   ∧,,∧   / ̄
@,,,ミ,,゚Д゚彡 < 質問スマーソ
⊂,,,,,,,,,つつ.   \_

VBで、画像を画面に描く事なく
メモリ上で描いて、ファイルに書き込むような
プログラムってどうやってかくですか?

教えてくださいまし。VB6です
153いちいちレスする男:02/04/18 20:29
すいません、わかりません。
154Delフサギコ ◆zE1iiRdQ :02/04/18 20:49

   ∧,,∧   / ̄
@,,,ミ,,゚Д゚彡 < 動的にImage1かPicture1を生成して
⊂,,,,,,,,,つつ.   \描いてファイルに書いて
            破棄しちゃったりしたらよさそうなんだけど…

具体的なコードがかけないの…シクシク
155127:02/04/18 20:50
>>138-139
改良しました。
デフォルトでコマンドボタンのCaptionは"停止中"、タイマーのIntervalは"500"、
Enabled="True"です。テキストボックスに「時時:分分」で時間を入れると、
停止にするまで5分間なり続けます。これ以上コードが長くなるとウザイですね。
すいません・・・。
Private Sub Command1_Click()
With Command1
If .Caption = "動作中" Then
.Caption = "停止中"
Else
.Caption = "動作中"
End If
End With
End Sub

Private Sub Timer1_Timer()
If Text1.Text <= DateAdd("n", 5, Format(Now, "hh:nn")) And _
Command1.Caption = "動作中" Then Beep
End Sub
>>152
デバイスコンテキストじゃん?
>>152
VBの範疇でやるには、PictureBoxをVisible=False、AutoRedraw=Trueで
生成して、それにLineとかで書き込み、SavePicture Picture1.Image,"hoge.bmp"
でファイルに保存すればok。
158Delフサギコ ◆zE1iiRdQ :02/04/18 21:19
  ∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚ミ < デバコンテ感じ。
  ミ   ミ   \__
〜ミ,UU_ミ

http://www.aqube.pos.to/fly/vb/graphic2.html
ここ見て勉強中っす。

どやたら、これをメモリ上だけでファイル書き込みなどが出来ますの?

隠れたFormとかは使えないの…(使えるかもしれませんが…)
単なるActiveXDLLのメソッドとして画像ファイル生成処理を
ageなければならんもんでして…
>>152
CreateCompatibleDC
CreateCompatibleBitmap
SelectObject
GetDIBits
SetDIBits
BitBlt
DeleteObject
DeleteDC
とか使えばできるのでは?
160Delフサギコ ◆zE1iiRdQ :02/04/18 21:23
  ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ;゚Д゚彡 < PictureBoxの生成コードがわからんでし…
  ,;゙  ミ     \_____________
 ミ.  ミ  ゴメンナサイゴメンナサイ
/゛゛゛゛
PictureBoxはFormに貼り付けないでも生成できますか?

ActiveXDLLで、ASPのVBSからコールしたいのです。
だから、普通のFormに依存することが出来なさそうな雰囲気。
(いや、実はよくわかりませんです)

161126:02/04/18 21:23
>>134
なんだか使い難そうですね。
購入考えてたけど止めておきます。どもでした〜。
MSDNの契約?使用?料ってかかるんですか?
>>160
Form必要だね。
Formが作れないなら、VBの範疇じゃ無理なので>>159に出てきてるAPI使って
やるしかない。API使えばできるよ。
164_:02/04/18 21:56
ついでに俺も質問。
VB6でWINDOWSに貼り付け、を実行させるにはどうすりゃいい?
つまり今Text1にフォーカスがあったら、そこにクリップボードの内容を貼り付けるっていう。
「SendKeys "^V"」とかやればできるか?

調べるの下手なもんで・・・誰か検索テク教えれw

>>164
MSDNライブラリをクリップボードで調べれ。
>>164
それ、めちゃめちゃ簡単にできるぞ・・・・
167デフォルトの名無しさん:02/04/18 22:11
>>155
む、改良版はなんだか目覚ましと言うよりカップラーメンタイマーに近づいてるな。(笑)
目覚ましをつくるには指定の時間になると自動的にパソコンのボリュームをあげる機能も必須だがこの機能の実装もAPIでできるからお願いね。
168デフォルトの名無しさん:02/04/18 22:39
各コントロールに使う使うフォントは、等幅とプロポーショナルではどっちがいいのでしょうか?
初期設定ではプロポーショナルになってるけど、等幅の方が何かと便利な気がするのですが。
プロポーショナルと等幅の便利な点をそれぞれ挙げよ。
>>161
限りなく成功に近いプロジェクトには、そんなもん使わないでも、
それ以上に意味のある仕様書が存在しる。

それ系のツールで仕様書出すプロジェクトほどヘタってるって感
じするよ(w
で、使うときに限ってコーティングがタコで、ロクな仕様書吐い
てくんない(w仕様書出力のためのコーティング修正が始まる
始末・・・・(w
で、仕様書出力のためのコーティング修正時に致命的なバグが・・・(以下略
171_:02/04/18 22:50
>>165 >>166
そこまで冷笑されながらわからなかったYo!
何だ!?何なんだ!?GetTextか?
いや、、、もしかしたら俺がやってることが特別なのかもしれん。
どういう事かっていうとだな、俺は今hotmailの垢取りツールを作ってんのよ。
もちろん練習兼ねてだけどな。
んで楽するためにWebBrowserコントロールを使ってる。
そんでWebBrowserの表示URLをhotmail登録のURLにするだろ。
これでWebBrowserコントロール内に登録フォームが表示されてる状態。
SendKeys "{TAB}"で最初の入力欄にフォーカスが行って、
そこであらかじめTextBoxからクリップボードに入れたテキストを
SendKeys "^V"とやって入力欄に貼り付けようとする。
失敗する。
172_:02/04/18 22:51
これだよ。
>>170
仕様書作成ツールってさ。プログラム解析ツールと改名するべきだよな。
もしくは、仕様書捏造ツール。実際の用途はそのように使われているだろ。
仕様書ってなんだよ?

プログラムを作成するための仕様書を作成するためのプログラムを作成するための仕様書を作成するための・・・
174_:02/04/18 22:53
原因として俺の腐った脳で考えれたのは
 ・WebBrowserコントロール「自体」にSendKeyしてしまって、
  入力フォームにキー入力されたことになってない?
って事だけ。
175168:02/04/18 22:57
>>169
テキストボックスに決まった文字数の半角(or 全角)文字のみ入力させるような場合には
等幅にしておくと、Widthをギリギリに設定することが出来る、とかそんな感じですかね。
ラベルの文字とかはプロポーショナルの方が見た目がいいのかな?よくわかんないです。
176デフォルトの名無しさん:02/04/18 23:06
質問なのですが
(VBの)アプリで重い軽いってありますよね
あれって、どのようにしたら、重い軽い、ってなるのでしょうか?
軽いはおいといて

重いほうは、やたらLOOPしたり、&多用、重いファイル読み込んだりしたら重くなるけど
たとえばList20とかCommand40とか、コントロールをやたら増やしたら
重くなるのでしょうか?

お願いします
>>175
使い場所によって、等幅の方が利点があると考えたなら等幅をつかい、
プロポーショナルの方が利点があると考えたなら等幅をつかえばよい。
どっちでもいいなら、デフォルトで見た目がよいプロポーショナルを推奨する。
178名無しさん@そうだ選挙にいこう:02/04/18 23:13
>>171
SendKeys "{TAB}",True
SendKeys "^(v)",True
でもダメ?
なんかvは小文字じゃなきゃダメだった記憶(経験)が・・・
179_:02/04/18 23:30
出来たっ!
サンクス178!何故かわからんけどそっちをコピペしたら出来た・・・!
感謝すぃます!
180デフォルトの名無しさん:02/04/18 23:41
>>9
>>95
基本的な方法としては各ボタンにTBSTYLE_AUTOSIZE スタイルをセットしるだけ。
すると文字の幅に合わせてボタンの大きさが変わる。
よって、フラットスタイルにしてクリックしたときの処理を上手くまとめればOK。PopupMenuとか使って。
ただ、漏れにはボタンにスタイルをセットする方法がわからない。いろいろ試したんだけど、どうもうまくいかない。
どうすればいいんだ ヽ(`Д´)ノ ウワァァン
たれか教えてください。Delphiだと簡単なんだけどなぁ。
もしかして簡単だったりして。わるれてるだけかな?
>>180
あ、一応ツールバーコントロールをクールバーに載せるって事で。わるれてました。
>>160
元のデータはどこにあるんだ?
デバイスコンテキスト?自分のメモリ?PictureBox?
それによって処理が変わるぞ。
18395:02/04/19 00:19
”ツール”じゃなくて”メニュー”をクールバー上で〜
IEの一番上のだよ TEXTだけのやつだよ

VBのツールバーエディタはバカでイメージがなくても、その分の余白つくって
しまう。結局ダミーの1x1のイメージでごまかす こんなの正当じゃないよ

それは 別として
まとれす 最近来ないねw (´∀` )

>>180
Delphiだとどーやるの?
>>95
ツールバーでメニューを作るんだよ、頼ってばっかのバカちん!
>>173
んー。名前はどうかね。
しかし、仕様書生成ツールなんて、はっきり言って不要よ。
ツールでちゃんとした仕様書が出力されるように糞なコーティング
ルール作って強制するなら、んなもん使わんでも済むように設計時
にしっかりした仕様書作成するほうが絶対にイイ(・∀・)

まぁ、納品ドキュメントの「格好」として利用する場合もあるかも
しれんが、「格好」だけなんだから、製品を購入する必要はなし。
フリーも多数あるんだから、それで十分でしょ。

>>185
だからVBのじゃできないっていってんじゃん、アホチン!
ニッケイ良く読め 
>>187
ん?ツールバーでメニューできんか??
>>188
ヤッテミナ
テキストだけだと 変だから
エディタの仕様が悪いらしいw
190188:02/04/19 03:25
>>189
確かに、テキストだけは変

だから、ボタンのビトマップを、絵ぢゃなくってテキストにして
作成したりしてたんですが・・・・ダメ?

結論として、VBでもできる・・・・だと思うのだけど、ダメ?

>>187
それって何かの記事?
>>190
それって何かの記事? <いや 意味はない(´Д`;)
192デフォルトの名無しさん:02/04/19 07:20
193デフォルトの名無しさん:02/04/19 10:23
OLEDragDropについての質問なのですが
OLEDragDropが有効なコントロールが2箇所あって、
その2箇所とも同じ作業を行いたいのですが、
その一方に
File1_OLEDragDrop
と書いてやっても引数がうまく渡せないので、うまくいきません。
今はコードをコピペしてるのですが、もっとうまい方法ないでしょうか?
194即レス:02/04/19 10:32
>193
出来るぞ。DataObject渡してるか?
自作の関数で引数にDataObject取ればすむ話だ。

同じコントロールならコントロール配列にするもよし。
195でい:02/04/19 11:17
VBでデータベース処理ができるようにVBとSQLの勉強をしておりどちらもある程度
知識がついてきたので就職しようと思っているのですが、実はネットワークの知識が
殆どありません。これだとやばいですか?
196即レス:02/04/19 11:34
>195
就職先による。
時間があるなら勉強しとき。
197へっぽこ野郎:02/04/19 11:47
TAPIを使ってパソコンから電話をかけて相手側に音声放送をするような
プログラムを作りたいと思い、TAPIの資料をあさっているのですが
なかなかよいものがみつかりません。
何かよいサイトなどありましたらご教授おながいします。
>195
ネットワークの知識つーても広ぅございますので...
新人として入るなら、小規模LANが組める程度で十分じゃないか。

欲を言えば、セグメント分けたネットワーク構築まで出来るとイイ。
>197
TAPI系のコントロールを買ったほうが早くない?
http://www.google.co.jp/search?q=TAPI+OCX&hl=ja&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
201へっぽこ野郎:02/04/19 12:02
>>200
ありがとうございます!早速しらべてきまっす
202193:02/04/19 12:48
>>194
即レスありがとうございます。
自作の関数とは
Public Function DragDropList1(Data As DataObject)
という関数を作って中身をコピペすればいいんですよね?
結果は、うまくいきませんでした。

ありがとうございました。
203Delフサギコ ◆zE1iiRdQ :02/04/19 12:54
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < もとデータは自前で描画するのです>>182
  UU"""" U U    \_______________
レスくれた方々、サンクスコ

とりあえず、
VBS >>呼ぶ>> VBのActiveXDLL >>呼ぶ>> BCBのDLL(描画する機能)
という、世界の終わりっぽい逃げで
一応作ってます…今のところ…
ああ、デスマーチデスマーチ

株価チャートみたいに
Webアクセスしたら動的に画像を見たいだけなのに…
>>202
うまくいかないのに、ありがとうございましたか。
なんか違和感あるな。もうどうでもいいのかな?
関数と自分の書いているコードの意味がわかればちゃんとできるはずだが。
205元即レス:02/04/19 13:40
>>193
こーゆーことだ。
Function GetDrop(D As DataObject) As Long
Text3.Text = D.Files(1)
End Function

Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
GetDrop Data
End Sub

Private Sub Text2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
GetDrop Data
End Sub

Text1,2,3を貼りつけてText1,2のOLEDropMode=1に。

>>204
嫌味なんじゃないか?
ちょっとワラタが。
206193:02/04/19 14:13
>>205
レスありがとうございます。
うまくいきました。なるほど、こういう使い方をするのですか。

ところが、また問題が、MSFlexGridにドラッグしたいのですが
型がMSFlexGridLib.DataObjectとなっているのでListBoxと型が合いません。
むむむ、、、

ありがとうございました。
>>204
自分がうまくいかなくても、レスをもらったのだから、その意味で
ありがとうございました。です。まあ、読み返してみたら、確かに変ですが。
207元即レス:02/04/19 15:04
>>206
じゃあObject型にすれ。
(追記)GetDropのDataObject型をな。
209へっぽこ野郎:02/04/19 15:41
>>197でTAPIについて質問したものです。
どうにかこうにかTAPIの制御はできて、ダイヤルまでは逝ったのですが
新たな問題が・・・・
Windows98SEの環境でTAPIを呼び出してコールを行うと電話に相手が
出るまで延々とコールし続けてくれるのですが、
Windows2000の環境でダイヤルを行うと3回目のコールあたりで
ブチっときれてしまいます。
98と2000では実装されているTAPIのVerも違うようなのでその当りが
問題なのかなとか思うのですが・・・
210デフォルトの名無しさん:02/04/19 15:48
VBで作ったEXEを起動させて、
終了させてから、そのEXEファイルを
棄てたり移動させたりしようとすると、
「ウィンドウズが使用してます。」
と表示されます。
なにが原因だと思われますか?
211即レス:02/04/19 15:50
>>210
終了しきってないから。
君がするべきことはコードの見直し。
212145:02/04/19 16:36
遅レスすいません>>148さんありがとうございます。
自分自身で使用ならそれで事足りそうですが、できればVBのみで
netstatの結果を使用したいのです。
DOSコマンドなのでnetstat自信の使用は可能だったのですが、
情報を取得がうまくいかないので・・・
他の方法は何かご存知の方いらっしゃいましたら、ご教授願います。
213193:02/04/19 16:50
>>207
おお、ありがとうございます。
うまくいけました。
これで中身をいじったあと、コピペすることがなくなりました。
うっかりミスもなくなりそうです。

ありがとうございました。
214デフォルトの名無しさん:02/04/19 18:54
この質問をここに書くべきじゃないかもしれませんが、
実は今、VBでサウンドプレイヤーを作成しているのですが
再生したい曲の、曲名や、アーチスト名、曲の長さ等を
取得するには、どうしたらいいでしょうか?
レコード会社
216密男:02/04/19 19:31
起動している任意のアプリを最小化したいのですが、、
どうしたら良いでしょうか?ライブラリーを探してみたのですが判りませんでした。。
又、sendkeysでWindowsロゴキーを送信する事は出来ないでしょうか?
>>216
APIのCloseWindowを使う。
218デフォルトの名無しさん:02/04/19 20:54
Windowsのタスクバーに表示させなくしたいのですが、どうしたらいいでしょうか?
設定のフォームを普通のForm2で作ったんですけど、
普通、設定のフォームは普通のフォームじゃなく、何か別のフォームを使って作るのでしょうか?
おねがいします。
vbmodalで表示させるか、showintaskbarをfalseにすればいいんでないの?
220218:02/04/19 21:19
>>219
ありがとうございます。サクっといけました。^^
221三平:02/04/19 23:06
皆様に教えていただきたいのですが、タイマーってどういうときに使いますか?

私が教えていただきたいのは、Formの見出し画面、(プログラムの名前を表示する)
  例えば、Netscapeです、起動するときでる。読みこみ中ですとか言う!
 を使うプログラムありますよね!
 それで、見出し画面を表示して、タイマーを使って一定時間計って、
終わったら、プログラムが起動する、プログラムコード・・・・

 よろしくお願いします。
222デフォルトの名無しさん:02/04/19 23:16
>>221
別にタイマー使ってるわけじゃなくて、それだけ処理を実行してる。
進行表示には、時間がかかる処理の中でプログレスバーを使う。
223デフォルトの名無しさん:02/04/19 23:20
>>212
BATファイルを書き出して、NETSTATの結果をファイルにリダイレクトし、
そのファイルを読み込む。あとは証拠隠滅。
ただし、Windowsによって、NETSTATの結果書式は異なるので注意。
224デフォルトの名無しさん:02/04/19 23:32
>>221
タイマーコントロールの使い道?
それとも プログレス表示のアルゴリズム?
どっちが 知りたいねん?

てか タイマーって 聞いてるので こっちと判断

VBのタイマーコントロールは 厳密でないのは 有名
使い道は HELPにあるとおり
一定時間ごとに 何かさせるのに 使う

オレは グラフィック描画と組み合わせたときに 使うかな
わざと 部分的に 描いていって ゆっくり 見せるとき
ウエイト用に使うわけだ
特に ラインでタイマーイベントで1ラインごと描くのに いいだろ
遅い処理が わざと 必要なときだな  あいまいで もちろんいいわけだ

タイマーコントロールで 何か正確な 時間を 量るのは ムリ

 
225Name_Not_Found:02/04/19 23:56
CやVBには仕様書工房とかの自動生成ツールがありますけど、
VBscriptも仕様書を自動生成してくれるツールとかないですか?

224が 句読点を 使うのも ムリ
>>214
そんなもん、扱うファイル形式による。
それぞれのファイルフォーマットについて研究せよ。
そもそも情報があるとは限らないよん。
228デフォルトの名無しさん:02/04/20 00:33
>>221
ゲームでは、ほとんど使う。
業務系ではあまり使われないが、無人=自動処理をするときは必要。
229三平:02/04/20 00:47
皆様の言葉、ありがとうございました。

 他の方もよろしければいつでも書いてください
  よろしくお願いします。
230デフォルトの名無しさん:02/04/20 00:54
Form1〜3を用意して、

Form1のボタンで、
From2.Show vbModeless, Me

Form2のボタンで、
From3.Show vbModeledd, Me
From3.Hide

の後に、Form2を閉じると、Form1のウインドウが背面に移動してしまうのですが、
どうしてなのでしょうか?
231密男216:02/04/20 01:08
>>217
有り難うございます。APIですか、、難しそうですね、、
VBを始めたばかりなのですが、避けられないですよね、API、(^^;
よく調べてみます。。
なんとかsendkeysで出来ないものでしょうか、、
232デフォルトの名無しさん:02/04/20 01:25
>>225
VBSは
Vusual Studio6ファミリーの
Visual InterDev6で書けるぞ
JavaScriptももちろんできる
当然ながら今から買うのは お勧めしない

Studioプロ版以上はセットだが?
持ってないのか… 
233デフォルトの名無しさん:02/04/20 01:55
>>231
どっちみち起動してるアプリ名を取得するのにAPIが必要になるし、
そもそもSendKeysはWindowキーに対応してない。

IE4以降がインストされてる環境なら、次のコードでもいけるかな。
Dim objShell As Object
Set objShell = CreateObject("Shell.Application")
Call objShell.MinimizeAll
Set objShell = Nothing

234 :02/04/20 02:34
下記のような CallWndProc 関数を使い、SetWindowsHookEx でフックしたウインドウメッセージを処理しているんですが、
RtlMoveMemory の使い方が悪いのか、どうしても WM_NCPAINT メッセージを拾うことができません。
lParam からメッセージを正しく取り出す方法をキボンヌ。
WM_NCPAINT メッセージが間違いなく流れていることは Spy++ を使って確認しています。

Private Type CWPSTRUCT
lParam As Long
wParam As Long
message As Long
hwnd As Long
End Type
Private cwps As CWPSTRUCT
Private Const WM_NCPAINT = &H85

Function CallWndProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Call RtlMoveMemory(cwps, lParam, Len(cwps))

If cwps.message = WM_NCPAINT Then
'ここに目的の処理

End If

CallWndProc = CallNextHookEx(HHook, ncode, wParam, lParam)

End Function
235:02/04/20 03:49
CRC16/CRC32を計算するにはどうしたらいいですか?
フリーのDLLを呼ぶのはなしで自前のコードを書いてみたいです。
236デフォルトの名無しさん:02/04/20 04:08
>>235
CRC16は、x^16 + x^12 + x^5 + 1 の剰余
CRC32は、長いので省略

VBでやるとたぶん激遅だけど、やってみるよろし。
237:02/04/20 04:17
xって何を表してるんですか?
238デフォルトの名無しさん:02/04/20 04:27
>>237
想像できない?
まず、1バイトのファイルを作って、CRCツールの結果と比較してみる。
次は、2バイトファイル。
そういう探求心が必要。人に質問する前に。
239:02/04/20 04:35
諒解です。ありがとうございました。
240デフォルトの名無しさん:02/04/20 12:02
LabelにあるディレクトリまでのPathを入れようと思ったところ、
「Documents and
Settings」
みたいに勝手に2行に分かれてしまって困ってます。
Labelにはマルチラインプロパティみたいなものも無いしどういうことですか。
>>240
AutoSizeとかWordWrapいじくってみたら?
242デフォルトの名無しさん :02/04/20 16:02
 ある関数を使って計算させるプログラムを作りました。
そこで、プログラムそのものを効率良く・無駄なくしたという前提で、
さらに計算ににかかる時間を少なくしたいのですが、一般方法として
どのようなものがありますでしょうか?
ご教授いただければ幸いです。
>>242
C言語やアセンブラで書く
244デフォルトの名無しさん:02/04/20 16:08
>>243
それ以外で。
なんと言ってもEXCELは使いやすいもので。
業務ではEXCELは欠かせないのですよ。
速いCPUに変える。
246デフォルトの名無しさん:02/04/20 16:12
>>245
EXCELでって言ってんだろーがー!!!
だからこうやってVBスレに書き込んでるんだよ。
ったく人が下手に出てりゃふざけやがってよ。
>>246
「プログラムそのものを効率良く・無駄なくしたという前提」なら
これ以上どうしようもないのでは?
本当に無駄がないのかはしらんが。
248名無し募集中。。。:02/04/20 16:51
MS Word のように複数ページをスクロールして表示するにはどうすりゃいい?
249デフォルトの名無しさん:02/04/20 17:05
>>246
マイクロソフトに入社して、もっと効率のいいAPIを開発するか、
あんた自身のスキルアップのために大学院に入ってアルゴリズム
の研究をした方がいいよ。
>>249
2chに救いを求めるようなアフォに研究生活は無理だと思われ
>>242
無駄をなくす。最終的には速さはこれしか影響しない。

具体的な方法は、
○アルゴリズムの見直し
○Variantを使用しない
○APIが使えそうなら使う。
○ループの中の見直し
こんな感じ。(ホントはもっとあるけど割愛。)
上のものほど速くなる。

>246
2chのネタぐらいで切れるな。2ch初心者かい?


>>248
あれは自前で描画してるが。
どっかにそれ専用のコントロールでもあるかな?
>>242
今はどれくらいの時間がかかってんの?
253デフォルトの名無しさん:02/04/20 17:37
>>249
PCそのものが1年くらいの経験年数。
>>250
うるせー
>>251
ありがとう。
ちなみに切れた振りしてるだけ。
最初はボケにつきあってたのさ。
>>252
少なくとも一時間以上。
計算量が多いってのもあるけど。
254251:02/04/20 17:39
>253
ありゃ、そうなのね。

ボトルネックになってるところは分かるか?
コードを貼りつけてみればアドバイスも増えるかもな。
255デフォルトの名無しさん:02/04/20 17:41
>>254
申し訳ないが。。。会社で使ってるんですよ。
貼れない。。。
256デフォルトの名無しさん:02/04/20 17:43
ちなみに「Variantを使わない」ってのは参考になりますた。
ありがとう。色々試してみます。
257248:02/04/20 17:46
>>251
こっちも自前で描画したい。コントロールは恐くて使えん。
まずメモリに全部描画して、その後ピクチャに...
ってやるんだろうが、具体的にはまったくわからん。
今は1ページ分の拡張メタファイルを作ってピクチャに描画してる。
当然画面には1ページしか表示できず、メニューなどで切り替えている。
ここから何とかならんものか?
>>256
そんなに初心者だったのか。ならいろいろアドバイスすることはありそうだね。
259251:02/04/20 17:50
>>257
2ページ分書いて表示位置をずらす。(はみ出る分は描画しない。)

>>256
頑張れ。
>>256
とりあえずなるべくメモリに展開してから計算すると速くなることがあるね。
最近のPCのメモリはたくさんあるからフルに利用しよう!
mikeさんのDLLを用いて、MP3演奏ソフト作ってるんですが、
繰り返し演奏をしようと思いまして、そこで
"C:\My Documents\My Music\okuyasu.mp3"
のファイルパスをString型のMp3fileという変数に格納しました。
そこでVBのソースコード中でMp3fileがEOFになるという
条件文の書き方はどのようにすればよいのかしら。
262即レス(251):02/04/20 18:02
>>261
ごめん、文字列型のEOFと言う意味が分からん。誰か分かる?
263248:02/04/20 18:05
>>259
まあそうなのだが、スクロールとズームを考えるとイマイチ方法がわからん。
1ページだけだとピクチャの Move だけで実現できるのだが。
264:02/04/20 18:06
>>262
End Of File?
空文字列という意味?
失敬.261です。
>文字列型のEOFと言う意味が分からん。
ここに誤りがあったか。
ではMP3ファイルを演奏して、終了したときに出される
EOFを検地するには,VBコード中で
どのように書けばよいか?





266即レス:02/04/20 18:11
>>263
ああ、そういう方法使ってたのね。

つまり自前で描画ってのはDC(PictureBoxでもいいけど)を2つ用意して、
1,2ページをそれぞれに描画して、BitBltなりStrechBlt(だっけ?)で
表示させたい所に転送する、って感じになるんよ。

スクロールは転送位置を操作、ズームはStrechBltでいけるでしょ。

#ちょっちめんどくさいかも。


>>264
どうなんだろう。
267デフォルトの名無しさん:02/04/20 18:18
すんません
VBで ダブルな引用符 ---> " を文字列の中で使うにはどうすればいいのでしょうか?
いまは、 & chr(34) & で書いていますが、何か他の書き方が絶対にある気がしているのですが。
>>267
無いよ
269:02/04/20 18:21
>>265
func.txtに載ってないの?

>>267
""とする。文字列なら
txt = "これが""引用符""だよ"
って感じ。
270即レス:02/04/20 18:23
>>265
フリーのDLL使ってるんならコールバック関数なり何なりがあるはず。
ヘルプなりReadMeなり見れ。

>>267
Str="""
271248:02/04/20 18:23
>>266
既存のコードを生かすとすると、
拡張メタファイル DC をページ分作って
そこから更に表示域のビットマップをこしらえる、
ってことでイイのかな?
うまくできるかどうかはわからんがやってみるよ。
ありがとう!
VB5.0で作ったの開かないYO!
Private Sub From_Activate
Print "ゴルァ"

End Sub
274莇改め ◆.EEeEe9c :02/04/20 18:27
>>272
何が言いたい?
275デフォルトの名無しさん:02/04/20 18:29
>>269 さん >>270 さん ありがとうございます!
これで プログラムがとてもすっきりします。
276268:02/04/20 18:30
俺の立場がー
277即レス:02/04/20 18:32
>272
原因の可能性がありすぎ。

>276

気にすんな。
278デフォルトの名無しさん:02/04/20 19:02
\\server\みたいに始まるパスを普通のパスに直すにはどうしたらいいですか?
>>278
普通のパスって?
280デフォルトの名無しさん:02/04/20 19:08
M:\
とかです
281即レス:02/04/20 19:14
>>278
if left$(Path,2)="\\" then path="c:\" & mid$(path,3)
こんなんでいいのか?お勧めせんが。
それともローカルのパスだったらローカルパスに直す、とか言う処理か?
>>278
\\server\に対するM:\が存在しないことがあるのは知っているか?
DoEvents以外でループ処理から脱却する方法を知りたいです。
>278
WNetAddConnection2で\\Serverに接続しよう
Exit For?
>>283
どういう機能がほしいんだい?
>>283
goto?
DoEvents ってループから抜けられたっけ?
289 ◆.EEeEe9c :02/04/20 21:26
>>283
脱却ってのがなんだかわかんない。
いや、脱却は語弊がありましたね。
要するに、処理がForに集中してフリーズ風になるのを避ける
方法を伺っておるのです。
ENDで抜けろ
ループ処理を行い、なおかつその他の動作ができる状態・・・
いや、DoEventsで十分なんですが、これではループに時間が・・・
293 ◆.EEeEe9c :02/04/20 22:22
DoEvents入れる間隔を変えるべし。
for〜next処理をdo〜loop内に入れてして数千回回したら一回forを抜ける。
ここでDoEvents。

ってのはどう?
ふむふむ。参考になるっす。
自分は
 If Rnd<0.001 Then DoEvents
見たいなのも考えてみたのですが、条件判断にもいちいち時間かかり
そうだったので気が引けてました。
>>293さんの方法でやてみます。ありがとうございます。
295デフォルトの名無しさん:02/04/20 22:29
ACCESSについて質問なんですけど
Form_1.Name.Text
というテキストボックスに
ユーザーに文字を入力してもらった後、
Docmd.Close
でForm_1を閉じ、
Module1
を呼びました。
Module1内から
Form_1.Name.Text
内にユーザーから入力してもらった文字が参照できるのですが
なぜ、閉じてるのに参照できるのでしょうか??
参照は確実にできるのでしょうか???
VBのUnloadとはどう違うのでしょうか???

以上、お教えいただけませんでしょうか・・・・・
>>294
重い処理をアウトプロセスサーバにして非同期で動かすとか...
>>296
すみません、意味わかんないっす(w
>>295
できない
299296:02/04/20 22:50
>>297
MSDN ライブラリで ActiveX EXE について調べてみてはいかがでしょ。
300 ◆.EEeEe9c :02/04/20 23:27
300ゲトー
>>290
Sleep使え。

>>295
DocmdのCloseはVBのHideと似たような動作になるんだったかな。
302 ◆.EEeEe9c :02/04/20 23:44
>>301
>Sleep使え。
それも手か。
>>301
Sleep 使ったらスレッド止まっちまわね?
304 ◆.EEeEe9c :02/04/21 00:00
>>303
スレが止まるのかw
305303:02/04/21 00:10
>>304
(・∀・)ハジメ イミ ワカンナカタヨ (w
>>303
Call Sleep(1)
DoEvents
みたいに組で使えってことだろ、たぶん。
307 ◆.EEeEe9c :02/04/21 01:51
>>306
一見良さそうだよね。
>>306
それどういう意味があるの?
309(・∀・) :02/04/21 07:45
VBの実行ファイルサイズがでかくて困っております。
小さくするコツなどありましたらご教授お願いします。
P-CODEコンパイルってアリですか?(いまいちメリットがわからん)
なるべくネイティブコードコンパイルにしたいのですが…
>>309
デカイってどれくらいなのサ?
311(・∀・):02/04/21 08:51
>>310
200KBを半分くらいにしたいのサ(;∀;)
1つのフォームにTabSplitとFrameを5つくらい貼って切り替えるやつなのサ
>>311
TabSplitとFrameを置いただけじゃそんなにならないよね。
その他のコードに無駄はないかい?
最適化をいじくるのはそれからだよ。
>>302
あかんやろ。
>>292 で「いや、DoEventsで十分なんですが、これではループに時間が・・・」
って言ってるぐらいだから。

そもそも >>290 で...
> 要するに、処理がForに集中してフリーズ風になるのを避ける
> 方法を伺っておるのです。
の意味があいまい。
1. 他のプログラムの動きがのろくなる
→ プライオリティ設定すべし。もしくは、SMP マシンでも買え。
2. 自分のプログラムのコントロールが反応しなくなる
→ ちゃんとやるなら >>296 の方法。簡易的には DoEvent しかないよ。
314 ◆.EEeEe9c :02/04/21 10:53
>>313そうだね。遅くなるのは避けたい。
プライオリティは具体的には
Private Declare Function GetCurrentProcess Lib "KERNEL32" () As Long
Private Declare Function SetPriorityClass Lib "KERNEL32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
で宣言してどっかに
SetPriorityClass GetCurrentProcess, &H80
を組み込む。&H80で十分っしょ?

>>311
1:頑張ってコードを最適化(最適化の術はGoogleで検索してみ)←推奨
2:UPXで潰す。
3:コンパイルされるときに強制的に
/MERGE:.data=.text /MERGE:.idata=.text /SECTION:.text,erw
を付加する。これ超裏技。
Link.exeにこのコマンドが渡されるのであらかじめVBでLink.exeをリネームしたものに
このコマンドを渡すプログラムを作っておく。
更に/ALIGN:4096をつけるのもよし。
VB側では『サイズの最適化』にしとく。
>>292
DoEventsの変わりの関数を作って決められた回数もしくは一定時間を
超えた場合のみDoEventsを行う用にすればいいのでは。
決められた回数はCPUに比例してDoEventsの回数が増えるから
一定時間ごとDoEventsがよさそう。
316 ◆.EEeEe9c :02/04/21 11:48
>>315
固まりかけてるような重いプログラムで一定時間が判定できるのかな?
317(・∀・):02/04/21 12:32
>>312
ほかにもいろんなコントロールをぺたぺたぺたぺたぺたぺたぺたぺた貼り付けております。
とりあえずコードから見直してみます。
ありがとうございました。
318_:02/04/21 14:16
ListViewコントロールでアイテム追加ってどうやるんですか?
ごーぐるさんでも出ないのですが。
>>318
ヘルプを見よ。
>>318
ListView に直接追加するんじゃなくて、ListView.ListItems コレクションに
追加しる。
321デフォルトの名無しさん:02/04/21 14:37
質問です。
送信元を[email protected]としたメールを送信したいときのソースは
どう書けばいいですか?
逝ってよし
323デフォルトの名無しさん:02/04/21 14:41
下げるナ あぽ
SPAMかよ
325デフォルトの名無しさん:02/04/21 14:43
そうそう。
悪用はいたしませぬ。
教えてケロ
326デフォルトの名無しさん:02/04/21 14:46
だから。さげるナってば
>>321
そもそも、人に聞くような問題じゃないし。
328デフォルトの名無しさん:02/04/21 14:52
だってここ初心者が質問できるとこでしょ??
教えてくれい>>327
329デフォルトの名無しさん:02/04/21 14:57
おーい
ソースを書いてって言われて書く奴なんかいないって。
331デフォルトの名無しさん:02/04/21 15:02
どうきけばいい?
タグっていうかとにかくエクセルにメールアドレスを登録している人達に
メールを送りたいんだーーー!
332デフォルトの名無しさん:02/04/21 15:02
で、下げるナヨ(怒
333デフォルトの名無しさん:02/04/21 15:05
ここで質問しないで検索すれば?
ずっと早いと思うよ。

あ、俺わかんない。ごめんな。
>>331
まず努力。ヘルプ見て自分でやってみて、わかんないとこが出てきたら、
自分でやったことを書いてから質問する。
>>321
つーか、ネタだろ。ネタじゃなければバカ
336即レス:02/04/21 15:13
>331
WinSockを使う。VBのサンプルコードはあんまり見かけんが。

めんどくさいならフリーのDLL、OCXを使うかOutLookのVBAを使ってみれ。
337デフォルトの名無しさん:02/04/21 15:24
即レス以外はみんなあぽう。
まったくもうっ。ここで質問する位の初心者だと理解しろYO!!
338318ですが:02/04/21 15:26
ListView.ListItems.Add , ,"text"
のカタチでちゃんとアイテム追加できましたです。
サンクスっす。

ところがもひとつ質問が増えました(w
複数カラムがある場合に、それぞれのカラムにテキストを入れますよね?
カラムが3つある状態のListViewコントロールにAddで追加しても、
1つ目のカラムにしかテキストを入れれないんですが。
2つ目、3つ目のカラムに入れるテキストはどう指定すればいいんでしょう?
339>>321:02/04/21 15:33
winsockコントロールを貼り付け、
SMTPサーバのIPをリモートIPに設定。リモートポートは25。
winsock1.connect で接続
winsock1.Winsock1.SendData "〜〜〜" で直接データを送れる
あと向こうからの反応の感知は DataArrivalだ。
感知したらgetdataで向こうからの反応を取得できる。

あとはTELNETでのSMTPの構文をVBでやらせりゃいいだけ。
その際送り元を"mail from: [email protected]"ってやれば[email protected]からになる。

ソースじゃないがこれで書けるだろ>>321
これ以上は俺説明する気ないぞ
340即レス:02/04/21 15:35
>338
ListItemのAddの戻り値であるListItemオブジェクトのSubItemを使う。

MSDN見れ。サンプルコードが確かあった。
341訂正:02/04/21 15:36
winsock1.Winsock1.SendData "〜〜〜"

winsock1.senddata "〜〜〜"
(ちなみに〜〜〜はSMTPに送るデータだ。
わかってるだろうがデータの最後にChr(10)を付けないとだめだぞ)
342デフォルトの名無しさん:02/04/21 15:47
winsockがなんなのかさぱーりなのだが検索して調べてみよう。
ありが玉金(私、いちお女、ね)
343おながいします:02/04/21 15:49
EXCEL関係のQ&Aや解説本を調べても分からなかったので
質問します。分かる方教えてください。ここを見ろでも結構です。
当方EXCEL2000です。

TEST01.XLS(名称は都度変わります)のマクロから
TEST02.XLS(名称は都度変わります)内部のB1:C2のセルを
TEST01.XLSのA1:B2のセルにコピーして
TEST02.XLSを自動で閉じたいのですが?
−−−−−−−−−−−−−−−−−−
Sub a()
  Dim boCheck As Boolean

    boCheck = Application.Dialogs(xlDialogOpen).Show

  If boCheck = False Then
    MsgBox "キャンセルが選択されました。処理を中止します。"
    Exit Sub
  End If

  Range("B1:C2").Copy

  ActiveWorkbook.Close SaveChanges:=False

  Range("A1:B2").Select
  ActiveSheet.Paste
End Sub
−−−−−−−−−−−−−−−−−−−−−
上記マクロでは、A1:B2になにも入りません。
ご存知の方、助けてください。 おながいします。
344デフォルトの名無しさん:02/04/21 15:56
厨な質問なんですが、VB+DirectXでテキストボックス使うのってどうやればいいですか?
フォームに貼り付けてもフリップしまくりで見えないんですけど・・・。
誰か教えてください。
>>343

Sub a()
  Dim boCheck As Boolean
  Dim filename As String
  
  boCheck = Application.Dialogs(xlDialogOpen).Show
  filename = ActiveWorkbook.Name
  
  If boCheck = False Then
    MsgBox "キャンセルが選択されました。処理を中止します。"
    Exit Sub
  Else
    ActiveSheet.Range("B1:C2").Copy
    Workbooks(filename).Close SaveChanges:=False
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste
  End If
End Sub
346343:02/04/21 17:03
>>345
ありがとうございます。大変助かりました。

もう1つだけお願いします。
B1:C2と書きましたが、コピーエリアはもっと大きくて
>Workbooks(filename).Close SaveChanges:=False
ここで、下記メッセージが出ます。

クリップボードに大きなデータがあります。他で参照する場合はYESを
参照しない場合はNOを選択してください。

これを出なくすることは出来ますか?
>>346
Elseの次の行に
Application.DisplayAlerts = False
を追加
348343,346:02/04/21 17:36
>>347
ありがとうございます。解決しました。助かりました。
349デフォルトの名無しさん:02/04/21 18:32
>>345
そんな感じでVBAでセルからアドレスを取得してメールを送る方法を
教えてよー
その
態度を
改めろ
>>349
教えてほしけりゃ、>>343のように自分がやったことを示せ。
お前のような奴に教える奴はいねぇよ。
初心者未満には何を教えても理解できないだろうし。
352343,346,348:02/04/21 18:41
スイマセン。新たな問題が発生しました。
大変申し訳ありませんが、分かる方お願いします。

Sub Macro6()

Dim boCheck As Boolean
Dim filename As String

boCheck = Application.Dialogs(xlDialogOpen).Show
filename = ActiveWorkbook.Name

If boCheck = False Then
MsgBox "キャンセルが選択されました。処理を中止します。"
Exit Sub
Else
Application.DisplayAlerts = False
ActiveSheet.Range("BF6:BI105").Select
Application.CutCopyMode = False
Selection.Copy
Workbooks(filename).Close SaveChanges:=False
ActiveSheet.Range("BF6:BI105").Select
ActiveSheet.Paste
End If
End Sub

上記を実行すると、クリップボード内でセルの値をまとめてしまいます。
例:BF6セル BG6セル BH6セル BI6セル   
   100    200   300   400
が 元のBOOKにペーストすると  BF6セルにまとめて『100・200・300・400』
となります。対処法ご存知の方よろしくお願いします。
353デフォルトの名無しさん:02/04/21 20:29
Option Explicit
Declare Function SendMail Lib "bsmtp" _
(szServer As String, szTo As String, _
szFrom As String, szSubject As String, szBody As String, szFile As String) As String
Sub MySendMail()
Dim ret As String
Dim szLogfile As String
Dim szServer As String, szTo As String, szFrom As String
Dim szSubject As String, szBody As String, szFile As String
Dim flBody
Dim i As Long
Dim fs, a As Object

On Error GoTo Err_Handler
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\log.txt", True)


' メール送信結果を記録するファイル名を指定します。
szServer = Worksheets("本文").Cells(11, 1) ' SMTPサーバ名
'
With Worksheets("宛名及び置換文字")
If .Cells(1, 3) & .Cells(1, 7) = "" Then
MsgBox "タイトルとFROMを入力してください"
GoTo Exit_sub
Else
354デフォルトの名無しさん:02/04/21 20:29
If MsgBox("タイトル:" & .Cells(1, 3) & "、送信元" & .Cells(1, 7) & "で良いですか?", _
vbOKCancel, "確認") = vbCancel Then
GoTo Exit_sub
End If
End If
szSubject = .Cells(1, 3) ' 件名
szFrom = .Cells(1, 7) ' 送信元
i = 3
Do While .Cells(i, 1) <> "END"
If .Cells(i, 1) = "○" Then
szTo = .Cells(i, 5) ' 宛先
szBody = .Cells(i, 6) ' 本文
szFile = ""
ret = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile)
If Len(ret) <> 0 Then
a.WriteLine (Date & " " & Time & " " & ret & "−" & szTo & "−" & szBody)
'MsgBox "エラー" & ret & "−" & .Cells(i, 4)
.Cells(i, 1) = "エラー"
Else
.Cells(i, 1) = "完了"
End If
End If
i = i + 1
Loop
End With
' パラメータエラーのときは、戻り値にエラーメッセージが返ります。

MsgBox "終了"
GoTo Exit_sub

Err_Handler:
MsgBox Err.Description, vbCritical, "Error"
GoTo Exit_sub

Exit_sub:
a.Close


End Sub

・・・で解決できたもんね!!ぶひーだ
355デフォルトの名無しさん:02/04/21 20:35
INIファイルのことで質問なのですが
INIファイルにInteger型の数値を書き込みたいのですが、
もし、INIファイルがないorその項目がないとき
””
が戻ってくるので、エラーが出てしまいます。これを回避する方法はないのでしょうか?
よろしくお願いします。
356343,346,348,352:02/04/21 20:36
>>352の内容から新たに分かったことです。
マクロを実行するBOOKがEXCEL形式なら問題なしのようですが
今回必要なのは、CSVを開いてそこからの実行だと
>>352のようになるようです。
もし分かる方いらっしゃればお願いします。
357355:02/04/21 20:37
↑すいませんINIファイルを読み込みにいくとき、””でエラーが出ます。
358デフォルトの名無しさん:02/04/21 20:53
>>355
WritePrivateProfileString使ってんの?
項目が無ければ作るはずだよ。
359355:02/04/21 21:30
>>358
レスありがとうございます。
すいません、書き間違えました
本来はWritePrivateProfileStringでかきこんで
GetPrivateProfileStringで、読みにいってるんですが、

何かの拍子にINIファイルがなくなったり、項目がなくなったりしたとき
GetPrivateProfileStringで読みに行くと
””
が返ってきますよね?そうなると、型が合わないとエラーが出てしまいます。

何かよい回避する方法はないでしょうか?
360359:02/04/21 21:32
追加
Integerで宣言すると
””
が戻ってきたとき、型が合いません

何かいい方法はないでしょうか?おねがいします。
361デフォルトの名無しさん:02/04/21 21:41
>>359
GetPrivateProfileIntがあるよ。
362_:02/04/21 21:46
>>359
GetPrivateProfileStringでも、
項目が見つからない(≒ファイルが見つからない)
ときに返す値を決めれたはずだけど・・・?
GetPrivateProfileString(section,key,"",value,length,file)
とあったら、""のトコじゃないの?それを"0"とかにすればOKかと・・・。
363361:02/04/21 21:48
>>362
それダメじゃない?宣言はString型なんだから。
364_:02/04/21 21:52
んでもって今俺もなんか変なんで質問する。

普通ならメニューから参照設定で「Microsoft Internet Controls」
にチェックを入れてOKすると、WebBrowserコントロールがリストに入りますよね
なんか今やったら追加されてないんだよ・・・。
何度かチェックを外したり入れたりしてみたけど変化なし・・・。
バグなのか?対処方法とかないのかねぇ
365_:02/04/21 21:54
>>363
あとで使うときにVal関数でやればOKだろうが。
366361:02/04/21 21:57
>>365
んな手間かけるならGetPrivateProfileInt使えばいいじゃない
367_:02/04/21 21:58
>>366
そりゃそうだなw
いや新着レス読む前に書いたもんで(w
まぁどっちでもできるわけで。
368361:02/04/21 22:01
>>367
熱くなってすまんかったw
369359:02/04/21 22:02
>>361 >>362
レスありがとうございます。
実はAPI関係、あまりわかってないのです。お分かりでしょうが、
でも、これでいけそうです。
ありがとうございました。
370361:02/04/21 22:11
>>369
頑張れ
371343,346,348,352,356:02/04/21 22:14
自己解決したので報告だけします。

PERSONAL.XLSのマクロから
TEST02.XLS(名称は都度変わります)内部のBA6:BI105のセルを
TEST01.XLSのBA6のセルにコピーして
TEST02.XLSを自動で閉じたいのですが?


Sub Macro1()
Dim strFileName As String
Dim wbTargetBook As Workbook
Dim mySheet As Worksheet

Set mySheet = ActiveSheet
strFileName = Application.GetOpenFilename()
If strFileName = "False" Then
MsgBox "キャンセルが選択されました。処理を中止します。"
Exit Sub
End If

Set wbTargetBook = Workbooks.Open(strFileName)
With wbTargetBook
.Worksheets(1).Range("BF6:BI105").Copy
mySheet.Range("BF6").PasteSpecial xlValues
Application.CutCopyMode = False
.Close SaveChanges:=False
End With
End Sub

先ほどコードの記述は変わりましたが、上記で解決しました。
お騒がせしました。
372240:02/04/21 22:50
>>240です。ものゴッツい亀レスになってすみません。
>>241サン
ありがとうです。両方Falseになっていました。
Trueの動きはかなり嫌なので、他に方策はありませんでしょうか。
373デフォルトの名無しさん:02/04/21 22:57
すごく遅いけど、Winsock使うときは一応、
DataArrivalが意味をなす単位ごとに発生
しないことを留意しておいてくださいです。
ローカルグループの一覧を取得するような関数ってありますか?
”意味をなす単位”ってなんだ?
376デフォルトの名無しさん:02/04/21 23:07
Excel関連は、ビジネスソフト板のExcelスレで。

377デフォルトの名無しさん:02/04/22 00:20
タイマー処理で教えてください。
Xxxx_Timer()の中でMsgBoxを使っているんですが、MsgBoxで入力が無いままだと、タイマー割り込み
が溜まるって事あるんですかね?
なんかデバッグで動かしているとそんな感じになるんですが・・・
タイマー処理の頭で、タイマー.Enabled=Falseにして抜ける時にTrueにするのが
普通??

>>377
VBのMsgBoxは出ている間しっかり処理がとまる。これ仕様(だった筈)。
379デフォルトの名無しさん:02/04/22 00:30
wroxのプログラマーシリーズ
VB.NETプログラミング第7章「データアクセス」p280のコード
(ASP.NET)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim objCustomerOrders As New CustomerOrders()
Dim MyDataSet As DataSet
MyDataSet = objCustomerOrders.FillPurchaseOrdersDataSet()
DataGrid1.DataSource = MyDataSet
' 明示的にコントロールとデータを結合するために必要
DataGrid1.DataBind()
End Sub

を実行して、Button1を押すと、

'/WebADO1' アプリケーションでサーバー エラーが発生しました。
--------------------------------------------------------------------------------

IListSource に、データ ソースがありません。
例外の詳細: System.Web.HttpException: IListSource に、データ ソースがありません。
ってなって、
DataGrid1.DataBind()
がエラーになります。ダウンロードしたコードそのままなんだけど?

よろしくお願いします。
380初心者のつもり:02/04/22 00:44
TabStripを使っているんですけど、
タブをコードから移動させることはできますか?
どうやればいいのか調べてもわからないんです・・・。
先生!!
.NETは漏れにはわかりません!!
>>377
MsgBoxを表示している間はタイマーカウントされません。

>>379
コードがあってもデータがないというオチだったりして…

>>380
tabs(index)のselectedプロパティをtrueにする。
TabStrip1.Tabs(index).Selected = True
で、index番目のタブが選択されるよ。
383デフォルトの名無しさん:02/04/22 15:28
デスクトップなどにあるテキストの内容をテキストに表示させるにはどうすれば良いですか?
意味がわからん
デスクトップにある***.txtをテキストボックスに表示するの?
385デフォルトの名無しさん:02/04/22 15:49
VB6ラーニングエディションを使っているのですが、
APIビューアが見つかりません。
そもそも\Microsoft Visual Studio\Commonの下に\Toolsというフォルダが
無いのですが、ラーニングエディションではAPIビューアは使えないと
いう事なのでしょうか?
閲覧できる過去ログやヘルプを見ましたが該当する記事が見つかりませんでした。
どなたか分かる方がいらっしゃいましたらお願いします。
386仕様書無しさん:02/04/22 15:52
>>385
Learningには付属していません。

>閲覧できる過去ログやヘルプを見ましたが該当する記事が見つかりませんでした
英語は読めますか?国内だけじゃだめだよ。
387385:02/04/22 16:00
>>386
早速のご回答ありがとうございました。
別の方法を考えてみます。
388383:02/04/22 16:08
>>384
そうなんです。
お願いします。
389即レス:02/04/22 16:16
>388
目的のパス調べてOpen,Getとか使う。
390デフォルトの名無しさん:02/04/22 17:09
VB6+SP5です。
自作ソフトのバージョン情報を追加のフォームモジュールから行ったのですが、
バージョン情報を出している間メインフォームをロックしたいんですけどどうす
ればいいでしょうか?

メインフォーム側をロックしただけではALT+TABでアプリを切り替えたときなど
バージョン情報がメインの後ろ側に回ってしまい操作できなくなってしまいます。
391390:02/04/22 17:11
訂正
メインフォーム側をロックしただけでは

メインフォーム側の EnableをFalseにしただけでは
392380:02/04/22 17:16
>>382
サンクスですちゃんと動きました!
どこ調べていいのやらさっぱりで・・・。
ありがとうございました。
393_:02/04/22 17:18
>>390
Object.Show vbModal
ってVbModalつければそのフォームからフォーカス移せなくなったハズ。
だめならもっと技術ある人、指摘して下さい(w
394393:02/04/22 17:19
あ、ここでのObjectってのは当然だけどそのバージョン情報のフォームの事ね。
395390:02/04/22 17:28
>>393
即レスサンクス
これでおkですわ
396デフォルトの名無しさん:02/04/22 19:46
か〜なり、低レベルの質問です。
VB5.0 ってWINXP で使えますか?
397_:02/04/22 20:46
>>396
俺エラー出て使えなかった。
のでVB6買ったら直後に.NETとやらの話が出て・・・。
鬱だ
VB6です。
InetコントロールでWeb上のファイルを取得できると聞き、
調べてやってみたんですが、TextBoxに取得した文字列データ(htmlのソース)
を入れると改行されてません。横にめちゃくちゃ長くなっています。
そしてその文字列をコピーして、メモ帳に貼り付けてもそのままなんですが、
秀丸に貼り付けるとちゃんと改行されてきれいに表示されます。
どういうことなのでしょうか?またどのように対処すればいいですかね?
399即レス:02/04/22 22:56
>398
改行の文字コードの違い。
ReplaceでVbCrLfに変換すれ。
400デフォルトの名無しさん:02/04/22 23:07
>>398
漢字コードは、シフトJIS決め打ちでいいのかな。
JISやEUCのサイトもあるから、バイト配列で受信して、
変換するのが汎用的。その時、改行コードも変換。
401398:02/04/22 23:08
>>399
早速のレスありがとうございます!
やってみた所
Text1.Text = Replace(Text1.Text, Chr(10), vbCrLf)
で見事に改行されました。
402377:02/04/23 00:33
タイマー処理の件
>>378さん、>>382さん
レスありがとうございました。
って事はタイマー処理を抜ける時、タイマー.Enabled=Falseにしてしまえば、
それ以降、タイマー処理は起動されないんですよね<くどいって?(^^;汗
>>402
テストコード書いて試してみれば?
手元にVBが無いんだったらスマン
404デフォルトの名無しさん:02/04/23 20:04
WinSockオブジェクトを使って2つのダイアログ間でテキストデータのやり取りをしているんですが、
クライアント側を終了させると再接続ができなくなってしまいます。
鯖側ではクライアントのクローズを感知したあと、
再びListen状態で待機しています。
再起動時のクライアント側でConnectしているんですが、
鯖はConnectionRequestイベントが発生していないみたいです。
何が原因何でしょう。
Win2KSP2、VB6SP5です
クライアント側を終了するときにcloseメソッドを実行してますか?
クライアント側でLocalPortを固定にしているとか?
407デフォルトの名無しさん:02/04/23 22:36
VBでの関数の戻り値の初期値って自動的に0や""だったりするのですか?
Cでの経験でローカル変数は宣言直後はゴミが入っているような
感覚があっていままでずっと初期化コードを書いていたんですが…。
408デフォルトの名無しさん:02/04/23 22:40
>>407
変数宣言時に以下にのように初期化される。
関数名も暗黙の変数のようなものなので同様。

Byte CByte(0)
Boolean False
Integer 0%
Long 0&
Single 0!
Double 0#
Currency 0@
Date #1899/12/30 00:00:00#
Object Nothing
String vbNullString
String * n String$(n, 0)
Variant Empty

409デフォルトの名無しさん:02/04/23 22:43
Formの背景にbmp画像を表示したいのですが、
1つの小さい画像をいくつも並べて表示ってできますか?
いろいろ検索しても出てこなかったのですが…
>>407
VBは自動的に初期化されるよ。
411デフォルトの名無しさん:02/04/23 22:46
TrueDBGrid6.0についての質問です。

ストレージモードでグリッドにデータを表示していますが、
行番号を識別する方法がわかりません。

rowプロパティでは画面に表示されている行しかカウント
してくれません。

グリッド全ての行を識別する方法を知ってる方は是非
教えて頂きたいのですが。よろしくお願い致します。

ちなみにVB6(SP5),Win98SE。
412デフォルトの名無しさん:02/04/23 23:03
>>409
VBのSampleコードにそのものずばりがあるよ。
413デフォルトの名無しさん:02/04/23 23:57
質問させていただきます。
実は同じテキストをたくさん必要とするようなコードを書いているんですが
デザイン時ではなくて実行時にオブジェクトを作成できると聞き、調べた所
SetとかNewとかいうのを使うとわかったのですが、具体的なやり方が・・・。
Text1を100個複製するにはどうやればいいのでしょうか?
具体的なソースを一部書いていただけると幸いなのですが。
欲を張りすぎですね(w やり方だけでもお願いします。
414デフォルトの名無しさん:02/04/24 00:09
>>413
コントロール配列でHELP見よ
この場合
最低ひとつ 用意しないとだめ
例 text1(0)を 貼っておく

コントロールは コンテナが必要なため(単独で存在できない)
何か(まあ フォームか)に貼りつけておかないダメだからだ

あとは 自分でどぞ
HELPにあるぞ 
415407:02/04/24 00:40
>>408,410
勉強になりました。ありがとうございました。
416がいしゅつ?:02/04/24 00:43
谷尻のVBでDB本てさあ、在庫管理のIDがInteger型なんだよね。
3万件越えたら、じきにパンクするぞ。

それと、せっかくSQL文使ってるのに、SELECTだけかよ。
なんでSUMとかBETWEENとかじゃなくてVBのコードでやってんだよ。
>>416
谷尻本は読んでないのでわからんが、
入門者向けだから、mdb使ってるんでない?

>3万件越えたら、じきにパンクするぞ。
だったら、この心配はいるまい。

>なんでSUMとかBETWEENとかじゃなくてVBのコードでやってんだよ。
VBの説明がメインなんではないだろうか。
だから、いちいち説明するのが面倒なんじゃないかな。

とか言ってみるテスト。

418416:02/04/24 01:45
>>417
MDBだけど、ADOでSQL文投げてる。変数名もmySQL。
Public cn As ADODB.Connection
Set rsAll = New ADODB.RecordSet 
rsAll.Open mySQL, cn

いちおうソートはSQLでやってた。

合計のやり方は、こんな感じ。
Do Until rsAll.EOF
 If (rsAll!日付 >= DateValue(ss) And _
    (rsAll!日付 <= DateValue(es) Then
     nyuuko = nyuuko + rsAll!入庫数
 End If
 rsAll.MoveNext
Loop
419VBA歴3ヶ月。。:02/04/24 02:27
プログラマー板で質問したけど、ここに行けと言われて来ました。
VBAで非表示のセルを対象外にするには、どうしたら良いでしょうか?
朝までにツール作らないとならないので、よろしくお願いします。
>>418
SQL側にロジックを偏重させるのは嫌いだが、
rs!FieldName
なんて書き方してる時点で糞本決定。
rs.Fields("FieldName").Value と書け。
>>420
SUMとかBETWEENはSQLでやるべきだろ。パフォーマンスにかかわる。
mdbレベルならたいして変わらんかもしれんが。
422デフォルトの名無しさん:02/04/24 10:09
VBのSockコントロールがリークばっかで使い物にならないんで、
自作しようと思うがどうだ。
ソース上げてもいい?
423名無し募集中。。。:02/04/24 12:22
>>422
好きにしろよ
424デフォルトの名無しさん:02/04/24 15:24

どなた様かリストボックスに羅列したものから選んだ任意の数字を
整数値として抜き出す方法を教えてくださいませ(泣)

しくしく。
425デフォルトの名無しさん:02/04/24 16:37
>>424
clng(List1.List(List1.ListIndex))
426デフォルトの名無しさん:02/04/24 16:37
Public Function SelectForRead(ByVal TimeOut As Long) As Long
Dim lngRet As Long
Dim fdRead As fd_set
Dim tv As timeval

'タイムアウトの設定
With tv
.tv_sec = TimeOut \ 1000
.tv_usec = TimeOut Mod 1000
End With
'fd_set構造体
With fdRead
.fd_count = 1
.fd_array(0) = m_hSocket
End With
lngRet = apiSelect(0, fdRead, ByVal 0&, ByVal 0&, tv)
m_hErrNo = apiWSAGetLastError()
If lngRet = tcsocSocketError Then
Err.Raise tcsocErrSelect, , mcstrErrSelect
End If
SelectForRead = lngRet

End Function


Public Function SelectForWrite(ByVal TimeOut As Long) As Long
Dim lngRet As Long
Dim fdWrite As fd_set
Dim tv As timeval

'タイムアウトの設定
With tv
.tv_sec = TimeOut \ 1000
.tv_usec = TimeOut Mod 1000
End With
'fd_set構造体
With fdWrite
.fd_count = 1
.fd_array(0) = m_hSocket
End With
lngRet = apiSelect(0, ByVal 0&, fdWrite, ByVal 0&, tv)
m_hErrNo = apiWSAGetLastError()
If lngRet = tcsocSocketError Then
Err.Raise tcsocErrSelect, , mcstrErrSelect
End If
SelectForWrite = lngRet

End Function
427デフォルトの名無しさん:02/04/24 16:38
Private Function CastLongToInt(ByVal lngVal As Long) As Integer
CastLongToInt = CInt("&H" & Right$(Hex$(lngVal), 4))
End Function

Public Function Send(ByRef bBuff() As Byte, _
Optional ByVal Start As Long = 0, _
Optional ByVal BytesToSend As Long = -1) As Long

'BytesToSendの確認
If (BytesToSend < -1) Or (UBound(bBuff) - Start + 1 < BytesToSend) Then
'負の値が指定されている、またはデータ長より大きい
Err.Raise tcsocErrInvalidDataLen, , mcstrErrInvalidDataLen
ElseIf BytesToSend = -1 Then
'省略時はデータ長に等しくする
BytesToSend = UBound(bBuff) - Start + 1
End If
Send = apiSend(m_hSocket, bBuff(Start), BytesToSend, 0)
m_hErrNo = apiWSAGetLastError()

End Function


Public Function Recv(ByRef bBuff() As Byte, _
Optional ByVal Start As Long = 0, _
Optional ByVal BytesToRead As Long = -1) As Long

'BytesToReadの確認
If (BytesToRead < -1) Or (UBound(bBuff) - Start + 1 < BytesToRead) Then
'負の値が指定されている、またはデータ長より大きい
Err.Raise tcsocErrInvalidDataLen, , mcstrErrInvalidDataLen
ElseIf BytesToRead = -1 Then
'省略時はバッファ長に等しくする
BytesToRead = UBound(bBuff) - Start + 1
End If
Recv = apiRecv(m_hSocket, bBuff(Start), BytesToRead, 0)
m_hErrNo = apiWSAGetLastError()

End Function

'非同期接続
Public Function IOCTL(ByVal cmd As TcsocIOCtlCommand, ByVal arg As Long) As Long
Dim lngRet As Long

lngRet = apiIoctlsocket(m_hSocket, cmd, arg)
m_hErrNo = apiWSAGetLastError()
If lngRet Then
Err.Raise tcsocErrIoctlSocket, , mcstrErrIoctlSocket
End If
IOCTL = arg

End Function
428デフォルトの名無しさん:02/04/24 16:39
Public Sub Socket(ByVal SocketType As TcsocSocketTypeConstants)

m_hSocket = apiSocket(AF_INET, SocketType, 0)
m_hErrNo = apiWSAGetLastError()
If m_hSocket = INVALID_SOCKET Then
Err.Raise tcsocErrSocket, , mcstrErrSocket
End If

End Sub


Public Sub CloseSocket()
Dim lngRet As Long

lngRet = apiCloseSocket(m_hSocket)
m_hErrNo = apiWSAGetLastError()
If lngRet Then
Err.Raise tcsocErrCloseSocket, , mcstrErrCloseSocket
Else
'ソケットが閉じられたことを明示的に示すため、
'ハンドルにINVALID_SOCKETを代入しておく。
m_hSocket = INVALID_SOCKET
End If

End Sub

Public Function Connect(ByVal RemoteAddr As String, _
ByVal RemotePort As Long) As Long
Dim lngIPAddr As Long
Dim sain As sockaddr_in

'ドット区切りアドレス文字列を4バイト整数に変換する。
lngIPAddr = apiInet_addr(RemoteAddr)
If lngIPAddr = INADDR_NONE Then
'アドレス文字列として認識できなかったので、ホスト名として解決を試みる。
lngIPAddr = InternalGetHostByName(RemoteAddr)
If lngIPAddr = INADDR_NONE Then
Err.Raise tcsocErrGetHostByName, , mcstrErrGetHostByName
End If
End If

'ポート番号の確認
If RemotePort < 1 Or RemotePort > 65535 Then
Err.Raise tcsocErrInvalidPortNo, , mcstrErrInvalidPortNo
End If

'パラメータをセットしてconnectを呼び出す
With sain
.sin_family = AF_INET
.sin_port = apiHtons(CastLongToInt(RemotePort))
.sin_addr = lngIPAddr
End With
Connect = apiConnect(m_hSocket, sain, LenB(sain))
m_hErrNo = apiWSAGetLastError()

End Function
なぜ自作?
430デフォルトの名無しさん:02/04/24 16:40
Public Function GetHostByName(ByVal HostName As String) As String
Dim lngAddr As Long
Dim lpChar As Long
Dim strBuff As String
Dim nBuff As Long
'gethostbynameの呼び出し
lngAddr = InternalGetHostByName(HostName)
If lngAddr = INADDR_NONE Then
Err.Raise tcsocErrGetHostByName, , mcstrErrGetHostByName
End If
'戻り値はネットワークバイトオーダーの4バイト整数なので、
'ドット区切り文字列に変換する
lpChar = apiInet_nta(lngAddr)
'lpCharが指す文字列の文字数を調べ、バッファを確保してコピー
nBuff = apiLstrlen(lpChar)
strBuff = String$(nBuff, vbNullChar)
apiMoveMemory ByVal strBuff, ByVal lpChar, nBuff
GetHostByName = strBuff
End Function
Private Function InternalGetHostByName(HostName As String) As Long
Dim lphe As Long
Dim he As HOSTENT
Dim lngAddr As Long
Dim pAddr As Long
lphe = apiGethostbyname(HostName)
m_hErrNo = apiWSAGetLastError()
If lphe Then
apiMoveMemory he, ByVal lphe, LenB(he)
apiMoveMemory pAddr, ByVal he.h_addr_list, 4
apiMoveMemory lngAddr, ByVal pAddr, 4
InternalGetHostByName = lngAddr
Else
InternalGetHostByName = INADDR_NONE
End If
End Function
431デフォルトの名無しさん:02/04/24 16:41
Public Property Let hErrNo(ByVal vData As Long)
'プロパティに値を代入するときに、代入式の左辺で使用します。
'Syntax: X.test = 5
m_hErrNo = vData
End Property
Public Property Get hErrNo() As Long
hErrNo = m_hErrNo
End Property
Private Sub Class_Initialize()
Dim lngRet As Long
Dim wsad As WSAData
'Winsock初期化:&H101でバージョン1.1を要求する。
lngRet = apiWSAStartup(&H101, wsad)
m_hErrNo = apiWSAGetLastError()
If lngRet <> 0 Then
Err.Raise tcsocErrWSAStartup, , mcstrErrWSAStartup
End If
'ソケットハンドル初期値
m_hSocket = INVALID_SOCKET
End Sub
Private Sub Class_Terminate()
'Winsock終了処理
apiWSACleanup
End Sub
Public Function GetHostByAddr(ByVal strIPAddr As String) As String
Dim lngIPAddr As Long
Dim he As HOSTENT
Dim lphe As Long
Dim strBuff As String
Dim nBuff As Long
'ドット区切りアドレス文字列を4バイト整数に変換する。
lngIPAddr = apiInet_addr(strIPAddr)
If lngIPAddr = INADDR_NONE Then
Err.Raise tcsocErrInvalidIPAddr, , mcstrErrInvalidIPAddr
End If
'gethostbyaddrの呼び出し
lphe = apiGethostbyaddr(lngIPAddr, 4, AF_INET)
m_hErrNo = apiWSAGetLastError()
If lphe = 0 Then
Err.Raise tcsocErrGetHostByAddr, , mcstrErrGetHostByAddr
End If
'戻り値のポインタが指す先の中身をheにコピーする。
apiMoveMemory he, ByVal lphe, LenB(he)
'h_nameの文字数を調べ、バッファを確保してコピー
nBuff = apiLstrlen(he.h_name)
strBuff = String$(nBuff, vbNullChar)
apiMoveMemory ByVal strBuff, ByVal he.h_name, nBuff
GetHostByAddr = strBuff
End Function
432デフォルトの名無しさん:02/04/24 16:45
'_/_/_/_/_/_/_/_/_/_/_/_/API宣言部_/_/_/_/_/_/_/_/_/_/_/_/
Private Declare Function apiWSAStartup Lib "wsock32.dll" Alias "WSAStartup" ( _
ByVal wVersionRequired As Integer, ByRef lpWSAData As WSAData) As Long
Private Declare Function apiWSACleanup _
Lib "wsock32.dll" Alias "WSACleanup" () As Long
Private Declare Function apiWSAGetLastError _
Lib "wsock32.dll" Alias "WSAGetLastError" () As Long
Private Declare Function apiGethostbyaddr Lib "wsock32.dll" Alias "gethostbyaddr" ( _
ByRef addr As Long, ByVal lenAddr As Long, ByVal typeAddr As Long) As Long

Private Declare Function apiInet_addr Lib "wsock32.dll" Alias "inet_addr" ( _
ByVal cp As String) As Long
Private Declare Sub apiMoveMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
ByRef lpDest As Any, ByRef lpSrc As Any, ByVal nBytes As Long)
Private Declare Function apiLstrlen Lib "kernel32" Alias "lstrlenA" ( _
ByVal lpString As Any) As Long
Private Declare Function apiGethostbyname Lib "wsock32.dll" Alias "gethostbyname" ( _
ByVal Name As String) As Long
Private Declare Function apiInet_nta Lib "wsock32.dll" Alias "inet_ntoa" ( _
ByVal inaddr As Long) As Long
Private Declare Function apiSocket Lib "wsock32.dll" Alias "socket" ( _
ByVal af As Long, ByVal soctype As Long, ByVal protocol As Long) As Long
Private Declare Function apiCloseSocket Lib "wsock32.dll" Alias "closesocket" ( _
ByVal s As Long) As Long
Private Declare Function apiConnect Lib "wsock32.dll" Alias _
"connect" (ByVal s As Long, ByRef Name As sockaddr_in, ByVal namelen As Long) As Long
Private Declare Function apiSend Lib "wsock32.dll" Alias "send" ( _
ByVal s As Long, ByRef buf As Any, ByVal lenbuff As Long, ByVal flags As Long) As Long
Private Declare Function apiRecv Lib "wsock32.dll" Alias "recv" ( _
ByVal s As Long, ByRef buf As Any, ByVal buflen As Long, ByVal flags As Long) As Long
Private Declare Function apiHtonl Lib "wsock32.dll" Alias "htonl" ( _
ByVal hostlong As Long) As Long
Private Declare Function apiHtons Lib "wsock32.dll" Alias "htons" ( _
ByVal hostshort As Integer) As Integer
Private Declare Function apiIoctlsocket Lib "wsock32.dll" Alias "ioctlsocket" ( _
ByVal s As Long, ByVal cmd As Long, ByRef argp As Long) As Long
Private Declare Function apiSelect Lib "wsock32" Alias "select" (ByVal nfds As Long, _
ByRef readfds As Any, ByRef writefds As Any, ByRef exceptfds As Any, _
ByRef TimeOut As timeval) As Long
Private mcstrErrSelect As String
Private m_hSocket As Long
Private m_hErrNo As String
433デフォルトの名無しさん:02/04/24 16:46
'Winsock API呼び出しのエラー文字列
Const mcstrErrWSAStartup = "WSAStartupが失敗しました。"
Const mcstrErrSocket = "socketが失敗しました。"
Const mcstrErrCloseSocket = "closesocketが失敗しました。"
Const mcstrErrGetHostByAddr = "gethostbyaddrが失敗しました。"
Const mcstrErrGetHostByName = "gethostbynameが失敗しました。"
Const mcstrErrIoctlSocket = "ioctlsocketが失敗しました。"
'ユーザー入力値のエラー文字列
Const mcstrErrInvalidIPAddr = "アドレスが不正です。"
Const mcstrErrInvalidPortNo = "ポート番号が不正です。"
Const mcstrErrInvalidDataLen = "データ長が不正です。"
'GetHostByAddr用(API)定数
Const AF_INET = 2
'WSAData構造体用定数
Const WSADESCRIPTION_LEN = 256
Const WSASYS_STATUS_LEN = 128
'その他定数
Const INADDR_NONE = &HFFFFFFFF
'_/_/_/_/_/_/_/_/_/_/_/_/構造体宣言部_/_/_/_/_/_/_/_/_/_/_/_/
Private Type WSAData
wVersion As Integer
wHighVersion As Integer
szDescription(WSADESCRIPTION_LEN) As Byte
szSystemStatus(WSASYS_STATUS_LEN) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpVendorInfo(1) As Integer
End Type
Private Type sockaddr_in
sin_family As Integer
sin_port As Integer
sin_addr As Long
sin_zero(7) As Byte
End Type
Private Type HOSTENT
h_name As Long
h_aliases As Long
h_addrtype As Integer
h_length As Integer
h_addr_list As Long
End Type
Private Type fd_set
fd_count As Long
fd_array(FD_SETSIZE - 1) As Long
End Type
Private Type timeval
tv_sec As Long
tv_usec As Long
End Type
434デフォルトの名無しさん:02/04/24 16:47
Public Enum TcsocIOCtlCommand
tcsocFIONREAD = &H4004667F
tcsocFIONBIO = &H8004667E
End Enum
Private Const FD_SETSIZE = 64
Public Enum TcsocErrorConstants
'SOCKET_ERROR定数
tcsocSocketError = -1
'Winsock API呼び出しのエラー
tcsocErrWSAStartup = vbObjectError + 1000
tcsocErrSocket
tcsocErrCloseSocket
tcsocErrIoctlSocket
tcsocErrGetHostByAddr
tcsocErrGetHostByName
tcsocErrSelect
'ユーザー入力値のエラー
tcsocErrInvalidIPAddr = vbObjectError + 1100
tcsocErrInvalidPortNo
tcsocErrInvalidDataLen
End Enum
Public Enum TcsocSocketTypeConstants
tcsocSockStream = 1
tcsocSockDgram = 2
End Enum
Const INVALID_SOCKET = Not 0&
435デフォルトの名無しさん:02/04/24 16:47
'TCPエラーコード
Public Enum TcsocWSAErrorConstants
tcsocWSABASEERR = 10000
tcsocWSAEINTR = tcsocWSABASEERR + 4
tcsocWSAEBADF = tcsocWSABASEERR + 9
tcsocWSAEACCES = tcsocWSABASEERR + 13
tcsocWSAEFAULT = tcsocWSABASEERR + 14
tcsocWSAEINVAL = tcsocWSABASEERR + 22
tcsocWSAEMFILE = tcsocWSABASEERR + 24
tcsocWSAEWOULDBLOCK = tcsocWSABASEERR + 35
tcsocWSAEINPROGRESS = tcsocWSABASEERR + 36
tcsocWSAEALREADY = tcsocWSABASEERR + 37
tcsocWSAENOTSOCK = tcsocWSABASEERR + 38
tcsocWSAEDESTADDRREQ = tcsocWSABASEERR + 39
tcsocWSAEMSGSIZE = tcsocWSABASEERR + 40
tcsocWSAEPROTOTYPE = tcsocWSABASEERR + 41
tcsocWSAENOPROTOOPT = tcsocWSABASEERR + 42
tcsocWSAEPROTONOSUPPORT = tcsocWSABASEERR + 43
tcsocWSAESOCKTNOSUPPORT = tcsocWSABASEERR + 44
tcsocWSAEOPNOTSUPP = tcsocWSABASEERR + 45
tcsocWSAEPFNOSUPPORT = tcsocWSABASEERR + 46
tcsocWSAEAFNOSUPPORT = tcsocWSABASEERR + 47
tcsocWSAEADDRINUSE = tcsocWSABASEERR + 48
tcsocWSAEADDRNOTAVAIL = tcsocWSABASEERR + 49
tcsocWSAENETDOWN = tcsocWSABASEERR + 50
tcsocWSAENETUNREACH = tcsocWSABASEERR + 51
tcsocWSAENETRESET = tcsocWSABASEERR + 52
tcsocWSAECONNABORTED = tcsocWSABASEERR + 53
tcsocWSAECONNRESET = tcsocWSABASEERR + 54
tcsocWSAENOBUFS = tcsocWSABASEERR + 55
tcsocWSAEISCONN = tcsocWSABASEERR + 56
tcsocWSAENOTCONN = tcsocWSABASEERR + 57
tcsocWSAESHUTDOWN = tcsocWSABASEERR + 58
tcsocWSAETOOMANYREFS = tcsocWSABASEERR + 59
tcsocWSAETIMEDOUT = tcsocWSABASEERR + 60
tcsocWSAECONNREFUSED = tcsocWSABASEERR + 61
tcsocWSAELOOP = tcsocWSABASEERR + 62
tcsocWSAENAMETOOLONG = tcsocWSABASEERR + 63
tcsocWSAEHOSTDOWN = tcsocWSABASEERR + 64
tcsocWSAEHOSTUNREACH = tcsocWSABASEERR + 65
tcsocWSAENOTEMPTY = tcsocWSABASEERR + 66
tcsocWSAEPROCLIM = tcsocWSABASEERR + 67
tcsocWSAEUSERS = tcsocWSABASEERR + 68
tcsocWSAEDQUOT = tcsocWSABASEERR + 69
tcsocWSAESTALE = tcsocWSABASEERR + 70
tcsocWSAEREMOTE = tcsocWSABASEERR + 71
tcsocWSAEDISCON = tcsocWSABASEERR + 101
tcsocWSASYSNOTREADY = tcsocWSABASEERR + 91
tcsocWSAVERNOTSUPPORTED = tcsocWSABASEERR + 92
tcsocWSANOTINITIALISED = tcsocWSABASEERR + 93
tcsocWSAHOST_NOT_FOUND = tcsocWSABASEERR + 1001
tcsocWSATRY_AGAIN = tcsocWSABASEERR + 1002
tcsocWSANO_RECOVERY = tcsocWSABASEERR + 1003
tcsocWSANO_DATA = tcsocWSABASEERR + 1004
End Enum
436デフォルトの名無しさん:02/04/24 16:48
あーあ
437デフォルトの名無しさん:02/04/24 16:51
Listenが無い
438デフォルトの名無しさん:02/04/24 17:32
Win98SEで作ったソフトがWinXPで上手く動きません。
MAPIを使ってメールの配信をするソフトなんですが、
サーバーではじかれてエラーになります。

原因としてどんな事が考えられますか?
439424:02/04/24 17:38
>425様

感謝至極であります(感涙)
440デフォルトの名無しさん:02/04/24 17:40
ASM>C++>C>PASCAL>JAVA>COBOL>N-88BASIC>>>>>>>>>>>VB
>426
使い方分からん。
全部コピペして、新規クラスに貼り付けた。
エラーが出るので、Private Const FD_SETSIZE = 64 の行を
一番上のほうに持ってきた。
とりあえずGetHostNameは動いた。

HTTPでページをとってきてDebug.Printするサンプルか何か欲しいなあ。
どういう順番でメソッドを呼び出すかだけでも。
442424:02/04/24 17:58
やっぱし動かないや(泣)
443デフォルトの名無しさん:02/04/24 20:18
くだらない事なんですが、VBの開発画面でプロパティとかのウィンドウは
インテリマウスのホイールが効くのにエディタ画面で効かないのですが
何か設定があるのでしょうか?

隣の机の人がエディタでも使えるので一寸気になりまして・・・・
444デフォルトの名無しさん:02/04/24 20:23
気にすんなYO!
445デフォルトの名無しさん:02/04/24 20:40
オプションボタンのTabStopをFalseにしても、実行時にValueがTrueの状態になると
Tabキーでフォーカスがオプションボタンに飛んでしまいます。
これを回避する方法を教えてください。
>>443
IntelliPoint入れてるかい?
447デフォルトの名無しさん:02/04/24 20:49
VS.NETとVS6を同じパソコンに入れても大丈夫ですか?
>>443
IntelliMouseなら動くよ。
ただし、ドライバのバージョンは3.1以上な。
449デフォルトの名無しさん:02/04/24 21:14
>>445
ほんとだね。TabStopがTrueになるようなので、

Option1.Value = True
Option1.TabStop = False

でどうかな。うちではOKだったYO!

>>447
OK.
450445:02/04/24 21:23
>>449
フォームロード時にコードで指定するということでしょうか。
最初はOKでしたが、一回オプションボタンをクリックすると
元に戻ってしまいます・・。
なんとなく解決したので報告を。
テキストボックスを一個置いて、
Private Sub Text1_GotFocus()
Option1.TabStop = False
End Sub
と書くと大丈夫っぽいです。
451hebogrammer:02/04/24 21:55
当方ただいま本当に困っています。

VB 6.0 を用いてボタンをクリックしたら Windows2000 の PC を
ShutDown (完全にパソコンが停止した状態)にしたいのですが、
どうすればよろしいでしょうか?
市販の本の ShutDown プログラム (ExitWindowsEx を使うやつ)
を試したのですが、パソコンに電源が残ったままログイン画面に
なっています。

何か解決方法はありますでしょうか?よろしくお願い致します。
452447:02/04/24 22:03
>>449
VBPファイルの関連付けは、やっぱり後から入れた方になっちゃうんですか?
>>452
.NETの拡張子はsln だから大丈夫。
つーか C# にしる。
454デフォルトの名無しさん:02/04/24 22:21
Open 〜でWeb上のファイルからデータの読み込みできますか?
455447:02/04/24 22:23
>>453
そうなんですか。ソレは安心。
VB始めたばっかなので、もうちょっとVBやらせてください。
456デフォルトの名無しさん:02/04/24 23:17
>>451
ExitWindowsExだけですむのは、Win9x系。
NT系の場合、InitiateSystemShutdown を使う。
特権を要求して、自プロセスに設定する必要がある。
457デフォルトの名無しさん:02/04/24 23:20
>>454
一般的には出来ない。
インターネット・トランスファー・コントロールでダウンロードするしかない。
458デフォルトの名無しさん:02/04/25 00:05
質問です
VB6で
文字列のHTMLソースをHTMLドキュメントとしてWebBrowserオブジェクト(IEでもいいけど)
に表示させる手が見つかりません

Winsockで鯖からHTMLソースを取得はできましたが、これをブラウズするには?
一度 HTMLファイルで保存して このファイルを 読むしかないでしょうか?

459デフォルトの名無しさん:02/04/25 00:09
WebブラウザコントロールってあるYO!
しかもSocketの知識不要。
プロジェクト−コンポーネントからMicrosoft Internet Controlsをえらんで
WebBrowserコントロールを貼り付けてあとは適当に。
461458:02/04/25 00:16
え〜と
英語のMSDNの手引きでは
すでにあるHTMLドキュメントに対して
WebBrowser1.Document.body.innerHTML = "タグなど"
などで あとづけ書き込みは 分かります
空白(about:blank)を作っておいて BODY内だけは できますが…

そうではなくて HTMLソース文字列から HTMLドキュメントを 純粋に作る法
これを IEなどに 表示させるには?
MSHTML 読んでも… VCじゃないと だめなの?
462458:02/04/25 00:20
いいえ みなさん
WebBrowserコントロールは わかりますが…

セキュリティに徹したものを 目指すために
まず HTMLを解析するために ソースで取得してるのです
 
463デフォルトの名無しさん:02/04/25 00:26
>>462
何をしたいのかわからん。

>HTMLソース文字列から HTMLドキュメントを 純粋に作る法
HTMLソース=HTMLドキュメントだぞ。

>これを IEなどに 表示させるには?
そのままOpenするだけ。

それとも、最終的にはIEで表示するが、その前に
危険なタグをフィルタ処理したいとか?
464458:02/04/25 00:43
>>463
そうです
<IMG>や<OBJECT>など チェックしてから IEのブラウズ機能を使いたのです

例えば s="<HTML><HEAD></HEAD><BODY>テスト</BODY></HTML>"
と VBで文字列で持っていて これをそのままブラウズしたいわけです

WenBrowserのプロパティDocumentは 読み出しONLYで
そもそも このDocumentオブジェクトをソースから どうやって定義すんだろ?
いやん 英語がイタイ もう イヤン

あきらめれば?
466458:02/04/25 00:50
なんとか、やってみる
できたら報告する
気長に待ってテネ
467デフォルトの名無しさん:02/04/25 00:54
>>464
その手のツールがどうやってるか考えればわかると思うけど、
プロクシになって、HTMLを加工してからIEに渡してる。

468デフォルトの名無しさん:02/04/25 00:59

串!
なりほど
せっかくWinsock使ってるんだから
串になればいいのか
そか WebBrowserのナビゲートで ダミー串通せばいいのか
その手も 考えてみます!!
串実装〜しないと… クッキーは無視しよw
英語MSDN行ってきます(古い記事もあたってみよ)
470404:02/04/25 09:42
>>405-406
亀レスすいません。
>>406さんの言うとおり、ローカルポートを固定してました。
解決です。
ありがとうございました。
471デフォルトの名無しさん :02/04/25 10:13
.aspが拡張子のファイルを仕様書に立ち上げてくれるツールって
どこかにありますか?VB仕様書工房だと.vbpが拡張子のやつじゃないと
駄目みたいなので・・・
>>466
加工したHTMLドキュメントを適当なフォルダに保存して、
WebBrowser1.Navigate "file:///" & ファイルへのフルパス
じゃダメなの?

>>471
聞いたことない
473デフォルトの名無しさん:02/04/25 15:17
いま、VBScriptを使ってSendmailを送るようなものを作ってみたいと
思っています。
そこで、メールヘッダのFromに表示されるメールアドレスと、Return-Pathのアドレスを違うものにして
送りたくて、四苦八苦しています。

また参考になるページとかあったら教えて下さい。宜しくお願いします。
つまりSPAMを送りたいと。
475_:02/04/25 20:38
VB6で質問です!
タスクバーに常駐させるプログラムを書いたのです
これを終了するときに、
ちゃんとサブクラス化を終了して正常にEndさせてるのですが
タスクバーにアイコンが残ったままになってます。
でもそれにカーソルを合わせるとパッと消えます。
プログラムが終了した時点でアイコンをタスクバーから消せないのでしょうか?
よろしくお願いしますです。
>>475
消してから終わらないとだめだよ
Unload Me
End
478473:02/04/25 21:00
>474
SPAMになるんですか!?
用は宛先不明のメールを送信者とは別のアドレスに送りたいんです。
いろいろ調べてたら、SMTPの仕様とかで出来ないとかってどっかで読んだんですが...
>宛先不明のメールを送信者とは別のアドレスに送りたい
のに、
>メールヘッダのFromに表示されるメールアドレスと、Return-Pathのアドレスを違うものに
する必要あるのか?
>>475
ちゃんと、Form_QueryUnloadで
Shell_NotifyIcon(NIM_DELETE, NoftyIconData)
を呼ばないと駄目よ。

>>478
ふつう、その技はSPAMに使う。i-mode宛にFromとToを同じにして送るとか。
自力だけで解決できないなら、あきらめてこの質問はしない方がいい。
481473:02/04/25 21:19
言い方悪いのかなぁ
エラーメールを任意のReturm-Pathに返したいということなんですが...
VBSじゃ無理かなぁ
482473:02/04/25 21:20
かぶりました。了解です。
>>473>>478でやりたいことが一貫してないなw
>>481
言い方が悪いw
その場合は「宛先不明で戻ってきたメール」といわなきゃ。
485475:02/04/25 21:37
言い方が悪かったですわかりにくくてすみませんでした。
まず常駐させて、終了させる前にちゃんと


Dim NotifyIcon As NOTIFYICONDATA
'タスクトレイのアイコンを削除------------------------

With NotifyIcon
.cbSize = LenB(NotifyIcon)
.hwnd = Me.hwnd
.uID = 10
End With

Call Shell_NotifyIcon(NIM_DELETE, NotifyIcon)
DoEvents
'-------------------------------------------------

'サブクラス化の終了
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, lpOldWndProc)
とやっています。483さんのようにForm_QueryUnloadで。
それで確かに常駐は解除されてますし、ちゃんと終了されてるんです。
なのにアイコンが消えてない・・・

終了されてるのにアイコンが残る っていう現象です
(ウィンドウは既に消されているのに表示だけ残るあれみたいなものかと)
>>485
Endで終了させちゃったりしちゃったりしてたりしないの?
>>481
RFC 見れ。Return-Path は、送信側でつけるもんじゃねーぞ、ヴァカ。

> エラーメールを任意のReturm-Pathに返したいということなんですが...
そんなもん SPAM か ML しか必要ねーだろうが。何したいのか、書けるもんな
ら書いてみ。
488デフォルトの名無しさん:02/04/25 23:17
InitiateSystemShutdown を使って WIN2000 系の自分の PC を
Shutdown させたいのですが、やり方が分かりません (ToT)
誰か教えてください
488
ExitWindowsExつかったら?
490デフォルトの名無しさん:02/04/25 23:24
>485
既知の問題。
解決法は、Formにフォーカスを当てるんだったかな。ああ、ど忘れ。
FormのVisibleをTrueにするか、HideのままNormalSizeに戻すかしてみたら?
491デフォルトの名無しさん:02/04/25 23:26
>488
せっかくヒント出したのに、それはないだろう。
検索しろよ。ヒットするから。
>>489
>>456 見てねーのか ?
493デフォルトの名無しさん:02/04/25 23:50
>492
フォローどうも。
再質問を明記しなかった488が悪いんだけど。
WinNT系では、特権の取得は避けて通れないから、きっちり押さえないと。

と思ったら、今度はV友で質問か。
人のヒントを自分で調べたかのように書いて。
494デフォルトの名無しさん:02/04/26 00:02
Visual C++やC++に関するお勧め本、
これだけは読んどけって言う教本ありますか?
Javaしか扱ったことない。
495デフォルトの名無しさん:02/04/26 00:02
Private Sub Command2_Click()
Picture1.Enabled = True
Picture2.Enabled = True
Picture3.Enabled = True
  〜
Picture9.Enabled = True

のPicture.Enabledを一つにまとめるにはどうしたら良いですか?
>>495
コントロール配列にしる!!
497デフォルトの名無しさん:02/04/26 00:11
>>496
すいません、何すかそれ
498デフォルトの名無しさん:02/04/26 00:19
>497
ヘルプ見ろ! コントロール配列は基本だから。
もっと簡単にしたかったら、コンテナ使う。1行ですむ。
>>497
何でも聞くんじゃなくて、MSDNのヘルプ見ろよ…。

for i=0 to 9
 Picture(i).Enabled = True
next

Indexプロパティに値を設定すればできる。
500デフォルトの名無しさん:02/04/26 00:48
コードじゃなくて、概念の問題。
変数の配列すらわからなかったら、
コントロール配列を理解するのはむずかしいかも。
コレクションもあるよ(´∀` )
502デフォルトの名無しさん:02/04/26 02:24
Label1.Caption = Winsock1.LocalIP
で自機のIPを表示させようと思ったのですが、二枚イーサネットカードを差していて、いらん方のIP(192.168.0.*)が表示されてしまいます。どうやったらもう一枚のカードに割り当ててあるIPを取得できるでしょう
503デフォルトの名無しさん:02/04/26 02:41
>502
イーサを逆に挿す。PCIスロットの若いほうが取得されるから。

ってことじゃない?
それなら、どういうネットワークなのか書かないと。
IPHLPAPI.DLL を叩けば、IPテーブルは取得できるけど。
ざっと100行ぐらい。
504デフォルトの名無しさん:02/04/26 07:33
VB6のDLL作成について質問です。
新規作成画面で"ActiveX DLL"と"ActiveX Document DLL"という2種類があるのですが、
VC++で言うところの"Win32 Dynamic-Link Library"にあたるのはどちらでしょうか?
505デフォルトの名無しさん:02/04/26 07:35
>>504
VBでは"いわゆるDLL"は作れないと聞いたが。
506504:02/04/26 07:39
>>505
なんですとーΣ( ̄▽ ̄;)
即レスありがとうです。
>>506
確かVBは中間コードまでしか書き出さないんじゃなかった?
Javaみたいに。
だからだと思う。
DLLを使うために別途VBのDLLを用意しなければならないってのも変な話だしな。
509デフォルトの名無しさん:02/04/26 07:50
>>507
それはVB4まで。
VB5とVB6はネイティブコードを吐く。

510hebogrammer:02/04/26 08:55
>>491
一応いろいろと検索してみて、作ってみたりしました。
しかし、InitiateSystemShutdown の第1引数にどのように
設定してよいのやら分からず困ってます。(-_-;)
なんか'97年あたりで時間の流れが止まってる人が混じってるみたいですねぇ
512ぷっちんぷりん:02/04/26 10:12
こんにちわ。
TreeViewの背景色を自由に変えたいのですが
プロパティが無いです。API調べてみたけどわかりません。
優秀なみなさん、教えて下さい。
>>512
色じゃなくて画像だけど…
http://www.users.gr.jp/ml/archive/vb/VB24.asp
サブクラス化するしかないのでは?
>>508
うそつくでねぇ。VBからはDLLもActiveX DLLも使える。普通のDLLが作れないだけだよ。
VCからVBのDLLが使いたければActiveX DLLを使うようにコーディングすればいいだけ。
515まとれす ◆mato/KTI :02/04/26 12:48
久しぶりのカキコ。トリップも変更した。

>>504
無理だ

>>507
関係ない

>>510
つか、ExitWindowsEx()の方がいいぞ

>>513
ツリービューのメッセージでできなければ、>>513のいうとおりサブクラス化だな

>>514
>>508の言いたいのは、そういうことじゃないと思うぞ
516デフォルトの名無しさん:02/04/26 13:37
>>515
おお、まとれすだ
517デフォルトの名無しさん:02/04/26 18:29
ふつーに Winsock を使い、

Private Sub Form_Load()
WinsockServer.Close
WinsockServer.LocalPort = 1229 'ポートを設定
WinsockServer.Listen
End Sub

Private Sub WinsockServer_ConnectionRequest(ByVal requestID As Long)
WinsockServer.Close '接続を閉じて新しい接続を受け付ける
WinsockServer.Accept requestID 'requestIDをパラメータにしてAcceptメソッドを呼び出す
lblServerStatus.Caption = "Be connected from " & WinsockServer.RemoteHostIP '接続が成功したことを知らせます
WinsockServer.SendData "hello, again"
End Sub

としたのですが、個のサーバが 192.168.0.255 のブロードキャストアドレスに
反応しません。どうしてですか?
518517:02/04/26 18:39
あと、今日からVBを使い始めたのですが、設定ファイル(*.ini)を

[Buz]
Foo=Bar

みたいな形でやりたいんですけど、定石のアルゴリズムってありますか?
っていうか、もしかして関数かコンポーネントありますか?
>>518
1行読み込んではsplit…
>>518 *.ini
API使うだ。
標準モジュールにしたものや
クラスモジュールにしたものが
あちこちで配布されてるだ。

おらWinsockは使ったこと無いだ。きっと他のエライ人が教えてくれるだ。
521517:02/04/26 20:52
ありがとうございました。自前で組んだほうが早そうですね。
CじゃなくPerlでもないので面倒くさそうですけど。
>>517
UDPとTCPの区別はついていますか?
>>518
GetPrivateProfileStringAPIをしらないのですか?
>>517
おら田舎もんでしらねがったけど、都会のネットワークじゃ
ブロードキャストアドレスに投げたパケットをTCPで拾えるんだべが?
同一ネット内に複数サーバがあったらどないすんだべがな。
525ディフォルトの名無しさそ:02/04/26 22:53
VB6 WinXP です。
大量にいくつもの処理を平行して行いたい事がありまして、
調べているとマルチスレッド、ということにたどり着きました。
さらにそれについて調べるとAddressOf、CreateThread API等がキーのようです

質問はここからなのですが
・VB6環境でマルチスレッドは実現可能でしょうか?
・それによって本当に高速化するのでしょうか?
・具体的にマルチスレッドとはどのようなものなのでしょうか?
多分ヘタレなこと聞いてると思うんですがお願いいたします〜。
526デフォルトの名無しさん:02/04/26 23:15
>503
ありがとうございます。一応、それでしのげました。

後一つ、ダイアルアップ接続でつないだ時のIPはどうやって拾うのでしょうか?
どなたか教えてください。
527デフォルトの名無しさん:02/04/26 23:19
>>525
高速化されるかどうかは、具体的にどういう処理をするか、
何が理由で遅くなっているか、による。

ムダな空ループとかは論外として、CPUが100%占有される処理なら、
わざわざマルチスレッドにするだけの意味はない。
高速なハードに替えるとか、専用鯖を立てて分散処理するほうが確実。
528デフォルトの名無しさん:02/04/26 23:22
VBとSQLを使ってグリッドにAccess2000のテーブルを表示したいのですが
テキストなんかに1レコードずつ表示するのはできるのですが
グリッドにまとめて表示するというのができません。
つまり、上のテキストで現在のレコードの表示に対して、
下のグリッドそのレコードが選択反転させたいのですが、教えてください

よろしければ詳しく乗ってるページとかってないですか?
529デフォルトの名無しさん:02/04/26 23:26
>>526
グローバルIPの取得ね。
VBから利用できるDLLがベクターとかでも公開されてるけど、
ipconfig の結果をファイルにリダイレクトするほうが
2枚挿しの時は確実かも。
530まとれす ◆mato/KTI :02/04/26 23:36
>>525
基本的に、マルチスレッドにしたからといって速くなるわけじゃない。
SMPなら別だが。

んで、VBからだが、はっきり言ってお勧めできない。まだ、マルチ
プロセスのほうがいいだろう。

>>528
ミドルウェアは何だ?

ADO、DAOならデータコントロールを使って、グリッドのDataSourceに
設定するだけだ

反転云々については、Bookmarkを使えばできる
アウトルックの受信トレイをクリックしたときに表示される着信メールのリストは
フレキシブルグリッドを使っているのですか?
それとも別のコントロール?
ああいう感じのリスト表示をさせたいのですが。
532親子:02/04/27 01:15
他プロセスが持っているウインドウを、自分が作成したウインドウの
親ウインドウに設定したいんですけど、何か良い方法ありませんか?
WIN32APIの“setparent”を使うかと思ったんですけど、MSDNを
見ると、親ウインドウと子ウインドウは、同一アプリケーション上に
なければならないと書いてありました。
無理ですかね・・・
533まとれす ◆mato/KTI :02/04/27 02:23
>>531
今、手元にOutlookがないので確認できないけど、リストビューとかじゃないのか?

>>532
確かに、MSDNにはそのように書かれている。が、可能だったりする。どんな不具合
がでるのかはわからんが
>>531
OutlookはVBで作られていない。
Spy++ では、キャプション: "表" クラス: SUPERGRID
おお!?
まとれすだ (´∀` )
536デフォルトの名無しさん:02/04/27 10:14
お聞きしたいことが有るのですが、

Dim OBJ_EX As Object 'エクセルファイルを操作する為の変数
〜〜省略〜〜
OBJ_EX.Workbooks.Add "シート名"

と書くとき、OBJ_EX. 以下のプロパティーを
Intellisenseテクノロジーで楽するってことは可能なのでしょうか?。
今までずっと手打ちしてたのですが、ふと思いまして。
みなさん、どうされてますか?。
ご回答、よろしくお願いします。
537デフォルトの名無しさん:02/04/27 10:15
メールを受信するとイベントが発生するプログラムを
作りたいのですがそんなAPIないでしょうか。
そんなAPI知らないけど、定期的にPOPサーバにアクセスして新着メールが
あったらイベントを発生させるみたいなことは自分でも書けるレベルだと思います
539525:02/04/27 11:33
525です。
質問が抽象的だった為、高速化するかどうかの判断が難しくなってしまったようで
申し訳ありませんです。
実は作っているのはWebを自動巡回してページのリストを取得する、
みたいなものなのです。トップページを指定するだけでその下にあるページを
"<A href="などをキーに検索してリスト出力します。
これは現時点で完成できているのですが、とても処理が遅いのです。
多分私の見解はInetでOpenURLをしてそのアドレスのソースを取得するときに、
OpenURLするのに大体1秒ほどはかかってしまうのです。
順にページのソースを取得しようとする時などは
for Nextでコントロール配列のTextに順にソースを入れていくので
ひとつひとつの処理に1秒かかってしまうのです。
これをInet(0)〜Inet(10)まで同時に読み込ませるようなことができれば
解決するのです。Inetで時間がかかるのはネット接続のための遅延であって
CPUなどの負荷はとても小さいものです。なので同時進行にできないか、と。
めちゃくちゃ長文で迷惑かけますが何かいい方法ありませんでしょうか?
>>536
Dim oExcelApp As Excel.Application
Dim oExcelWorkBook As Excel.Workbook
Dim oExcelWorkSheet As Excel.Worksheet
Dim oExcelRange As Excel.Range

開発時はアーリーバインディングで、納品時はレイトバインディングにしたりする。
541536:02/04/27 12:10
>540
おおおっ!。
そういうことができるとは、気づかなかったです。
ノーミソのシワが一個できた気分です。ありがとうございます。

引き続き、ノーミソ・シワのできるアイデアを募らせて頂きたいです。
よろしくおねがいします。
542デフォルトの名無しさん:02/04/27 12:34
>>512
MSサイトにあるよ。
http://support.microsoft.com/default.aspx?scid=kb;JA;q178491

VBのバージョンによって、ひょっとしたら挙動が変わるかも。
VB6ではノードの背景色が個々に設定できたと思うので。

>>539
別の言語にする。
従来のVBでマルチスレッドはお勧めできないから。
(というよりできないと思ってもらってよいかと)
VB.NETならOK。.NET移行ならお勧めかもね。
543537:02/04/27 13:06
それってどんなAPI使うんですか
BSMTPってDLLはわかったのですが

問題はPOPでなくIMAPでもやれるようにしたいのです。
>>543
socketとかconnectとかsendとかrecvを組み合わせていけばできると思うYO!
>>539
そういう用途なら、InetつかわないでWinSock使って
http手書きで通信した方がいいと思うよ。
WinSockコントロールならノンブロッキング型なので、
コントロール配列でも作って、片っ端からconnectさせて
イベント来たらSendDataしてGetDataして内容読んで、
ってやれば効率良くできるかと。
>>543
pop3ですけどこんな感じじゃないですか?
Option Explicit

Dim gCommand As String
Dim gPassword As String

Private Sub Command1_Click()

If Winsock1.SocketHandle > 0 Then
Winsock1.Close
End If

gPassword = Text1.Text

Winsock1.RemoteHost = "pop.mai.server.ne.jp"
Winsock1.RemotePort = 110
Winsock1.LocalPort = 0
gCommand = "connect"
Winsock1.Connect

End Sub

Private Sub Winsock1_Close()
Winsock1.Close
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData, vbString
Select Case gCommand
Case "connect"
Winsock1.SendData "USER yamada" & vbCrLf
gCommand = "user"
Case "user"
Winsock1.SendData "PASS " & gPassword & vbCrLf
gCommand = "pass"
Case "pass"
Winsock1.SendData "STAT" & vbCrLf
gCommand = "stat"
Case "stat"
Winsock1.SendData "LIST" & vbCrLf
gCommand = "list"
Case "list"
Text2.Text = strData
Winsock1.SendData "QUIT" & vbCrLf
gCommand = "quit"
End Select
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox Number & ":" & Description
End Sub
547まとれす ◆mato/KTI :02/04/27 14:16
>>535
これからもよろしくな

>>536
無理だ。なので、開発時だけ、参照設定してアーリーバインドし、
配布時に例とバインドに切り替えろ

>>537
SMTPはCDOみたいなオブジェクトが用意されているんだが、POP
はないな。自作するしかない

>>539
それなら、非同期で複数処理すればいいだけだ
>>547
すみません。ちょっと質問なのですが、>>536 の件で配布時にレイトバインドに
するメリットって何なんですか?
まともな質問じゃないんで sage ときます。
549まとれす ◆mato/KTI :02/04/27 16:55
>>548
別にない。強いてあげれば、ターゲットを変更できるところぐらいか
550548:02/04/27 17:22
>>549
感謝。
551537:02/04/27 17:34
>>まとれす
>>546,547

まともなレスばかりで感動です。
winsockについて詳しく書かれたサイト、書籍でよいもの
ないでしょうか?
pop3ではできてもIMAPでやるのはどうしたら・・・。
英語サイトでもよいのでお願いします。
>>551
ひとつお願いしたいのはVBでWinsockを使うは結構簡単だと思います。
でも、それでOKというわけではないのがネットワークプログラミングだと思います。
取り急ぎ作らないといけないものができたらじっくり勉強してもらいたいと思います。
553sage:02/04/27 18:23
>>552
全角好きだね(ワラ
>>553
COBOLerは全角命です
555デフォルトの名無しさん:02/04/27 18:39
>>548
例えば、Excelのオブジェクトを使うのに参照設定してしまうと
そのバージョン限定になってしまう。
レイトバインドなら、Excel.Applicationという名前で実行時に、
使うオブジェクトが決まるので、Excel97、2000、2002のどれが
実行環境にあってもOK。

もちろん、その場合は、使用できるオブジェクトやらメソッドやらは
Excel97、2000、2002のどれでも使えて同じ結果になるものでなければならんけどね。
556まとれす ◆mato/KTI :02/04/27 18:46
>>551
Sokectについて知りたいのか、WinSockについて知りたいのか、WinSockコントロール
について知りたいのか、IMAP4について知りたいのか、そもそもやりたいことはなんだ?

単に実現したい、ということなら、迷わずコンポーネントを勧めとくぞ
で、勉強したいってことなら、まず、RFCを読むことだなIMAP4だとRFC2060か?

557525=539:02/04/27 18:46
>>545さん
>>547ことまとれすさん
お答えありがとうございます。
ところが私の知識不足と腐ったカニ味噌のせいでどちらもうまく理解できません・・・
545の方のwinsockはwinsockでメール送信とかやったことあるのでそれ自体は使えるのですが
HTTPのコマンドをまったく知らないので困ってます。

547での「非同期で複数処理」ってのはもう全然わかりませんです(汗
具体的にどういうことなんだろ。

もうちっと勉強してきますか・・・。
558まとれす ◆mato/KTI :02/04/27 18:47
どうも誤字が目立つな。今後は気をつけるから勘弁してくれ
559まとれす ◆mato/KTI :02/04/27 19:04
>>557
要するに、OpenUrlして、結果が戻ってくるまで待機してるわけだ。これを同期という。
そうじゃなくて、待機せずにすぐ次の処理を行うことのが非同期だ。

ヘルプが手元にないので、Inetコントロールでできるのかはわからんが、少なくとも
WinInet API のInternetOpenで、INTERNET_FLAG_ASYNC を指定してやれば、非同期
処理ができるようになるぞ
560548:02/04/27 19:19
>>555
なるほど。
たしかに Office 系のアプリを外部から使うって事になると
バージョンの問題が出てきますね。
この辺っていままで考えた事なかった...
感謝です。
>>558
許さん。
>>557
Inetコントロールなら、OpenUrlではなく、Executeメソッドを使う。

Executeメソッドでサーバに接続し、GET要求を出すのだけど、
結果は受け取らず、Executeメソッドは実行後すぐ終了してしまう。
これが非同期って意味ね。

んで、データは、Inet_StateChangedイベント内で受け取る。
State=12になったら、GetChunkメソッドを呼び出してデータを
受け取る。

この2つの操作の間には別のことをしていてもいいし、別のInet
コントロールを使って別のサイトを取得していてもいい。
(Inetコントロールを、コントロール配列にして使うのが普通。)
563525=539=557:02/04/27 23:19
ありがとうございます! >>559 >>562
最初>>559の方法で作っていて、やっと同期しないで動くのを確認して
よかった〜できた〜と思ってまたここ開いてみたら562さんの書き込みが(w
ちなみにそっちでもできました。
なんだか一石二鳥的な感じに2つも知識をつけさせてもらいました。
本当にどうもでした。
564536:02/04/28 08:29
>547さん
私の疑問に答えていただきありがとうございます。
一度、試してみます。
VBでベーシックインタープリタを作りタイ!
どうぞお好きに。
おれつくった
568即レス:02/04/28 15:15
おや、しばらく来ないうちにまとれす復活してる。よろしこ。
串規制うんぬんはクリアーしたんかな。

>565
頑張れw
569デフォルトの名無しさん:02/04/28 21:50
>>568
おお、即レスだ
570デフォルトの名無しさん:02/04/29 01:12
質問です 環境 VB6Pro SP3 WinXP
トリップ検索のプログラム(「見知らぬ国のトリッパー(w」 みたいな)
を作りたいんですが、perlによるcryptってのはVBでどう再現すればいいんでしょう?
トリップの仕組みはわかってるのでそれがわかれば作れるんですが・・・。
どなたかわかる方いませんでしょうか?
571デフォルトの名無しさん:02/04/29 01:15
一太郎などジャストシステム製品についてくるJOCAについての解説している資料はないですか?
この中のひとつにJSVBrowser OLE Control moduleというActiveXコントロールがあります
MSのWebBrowserコントロールと同じようなものです。
JustViewというジャストシステム製のブラウザで使われていますが
ActiveXなのでVBでも扱えるようです。
でも、プロパティやメソッドの使い方が一切ない…
ナビゲートの仕方すらわからん(笑
パラメーターの意味が…不明なの
本家ジャストシステム見てもナイ!
検索してもナイ!
機能的には最新のMSHTMLにはおよばないんだけど
シンプルなところがいいのです(一応JavaScriptサポートしてる)
さて
資料はあるのか????教えて君でした。

教えてだけじゃ悪いので
http://support.microsoft.com/default.aspx?scid=kb;JA;q183235
WebBrowserの動作改造法 サンプル以外にやるにはVCが必要
これで、ActiveX、Script、Javaや画像のON,OFF、読み込まないなどIEにではなく
WebBrowserのみに設定できる
これをMSはあまり、教えたくないらし(藁

じゃあ お願いします
572デフォルトの名無しさん:02/04/29 01:39
>570
Crypt完全互換をVBで実現することはできないことは確かだけど、
はたしてActivePerlとか使っても出来るかどうか…。
総当たり方式で、トリップ解析するつもり?

>571
同じく探したことあるけど、見つかりませんでした。
JS製品自体持ってる人が少ないし、どんなバグがひそんでるか
わからないし…。
まあ、そんなこと言ったら、VBについてるサードパーティの
ActiveXだってバグあるけど。
573570:02/04/29 01:45
>>572
ん〜やはり無理ですかね。
Googleで検索して出ないあたりから諦めかけてたんですけどね・・・。
だとすると今ある総当りトリップ検索は言語何でつくられてるんだろ。
やっぱCとかC++になるのかな。とにかくサンクスですた。
574デフォルトの名無しさん:02/04/29 01:49
他メーカーのActiveXって、そのメーカー以外のソフトから
使おうとするとエラーになるように出来て無いかい?
JustSystemのも機能が使えるかは保証できないと思うけど…
575仕様書無しさん:02/04/29 01:52
>>574
アホ丸出し。プロですか?(藁
576デフォルトの名無しさん:02/04/29 01:59
>574
たしかにJSのはエラーが出た。

>575
JS限定で、動作サンプルきぼん。
577まとれす ◆mato/KTI :02/04/29 02:27
>>561
うるせーバカ

>>568
こちらこそよろしくな。串規制は結局駄目だったんで、ID買った。海外鯖
だからしょうがないな

>>570
Crypt API じゃ駄目か?

>>571
本家に聞いてみて、駄目なら無理じゃないか?開発ツールとしては配布
しない、ってスタンスのところも多いぞ。で、どうしても、というなら、オブジェクト
ブラウザでメソッド、プロパティを見て、適当にやるしかない

ハックしてるような気分になって、結構楽しいぞ。おれも、いくつかのActiveX
コントロールを試してみたことがある

>>574
つか、きちんと使ってあるなら、開発環境で開いたときに、「開発ライセンスが
ねーぞゴルァ」とかって出すと思うんだけどな
578デフォルトの名無しさん:02/04/29 02:33
VB6(learning edition)がインストール出来ないんだけど。。。
インストールしようとすると、いきなり一般保護エラーが出るんですよ。
もちろん、常駐物は全部切ってあります。
インストーラにバグがあるような事は聞いていたんですけど、
このエラーを回避する方法ありませんか?
使用OSは、WindowsXP Professionalです。
579まとれす ◆mato/KTI :02/04/29 02:35
>>578
Enterprise版だと、何の問題もなくインストールできたぞ。互換モード
とか使っても駄目か?
580デフォルトの名無しさん:02/04/29 02:56
>>579
だめれす。
インストーラのバグの原因がわかれば解決できると思うんですが。。。
誰かバグについて情報持ってる人いませんか?
581デフォルトの名無しさん:02/04/29 02:57
>578
管理者IDを半角英数字にしてる?
582571:02/04/29 03:17
JOCAについての一太郎に付属の注意テキストによると
開発に使うのはできるらしい
ただ配布については記載なし(笑
VBで扱う際のごくわずかな記述がある(笑
VBで扱えない変数型もありますのでそれはあきらめて使わないとの事(笑)
JSVBrowserはオブジェクトブラウザで見ればわかると思うけど、VBで扱えない変数型はほとんどない
でもナビゲートわかんねーw
エラー出すとVBが落ちるんだよね(大汗
資料☆ー欲しー
解明した方がいたら情報あげキボンヌ
JSなんとかのコンポーネントでいっぱいの人 他にもいるでしょ?(笑

583578:02/04/29 03:20
>>581
えーと、管理者IDっていうと、Administrator権限のあるユーザ名のことでしょうか?
それなら、半角英数字になっています。

http://www05.u-page.so-net.ne.jp/gf6/tadaei/diary_bk02.html
には、
「WindowsNT4.0にORACLE8がインストールしてある時に、
ORACLEのサービス(OracleStartORCL)が起動されていないと
Visual Studio6.0のセットアップでアプリケーション・エラーが発生」
と書いてはあるんですけど、OracleStartORCLなんかインストールしてもいないし。。。
584デフォルトの名無しさん:02/04/29 03:40
>>583
違ってたか。

上のOracle云々はEnterprise版で起きそう。

あと、可能性としては、tmpフォルダに日本語を使ってるとか、
インスト先に日本語使ってるとか。

VBで作ったEXEがWinXPにインストできないトラブルは多いけど、
VB自体がインストできないのは、例が少なそう。
Officeがらみかなあ。

585578:02/04/29 04:20
>>584
システム関連のフォルダには日本語使ってなかったです。
Officeも入れてないんですよね。。。あー。。。

http://support.microsoft.com/default.aspx?scid=http%3a%2f%2fwww.microsoft.com%2fJAPAN%2fsupport%2fkb%2farticles%2fj046%2f7%2f41.asp
コレを試してみてもダメでした。

他にも同じ現象の人がいたのか。。。
http://pc.2ch.net/test/read.cgi/tech/994129650/135
http://pc.2ch.net/test/read.cgi/tech/994129650/684
586即レス:02/04/29 10:38
>578
HDDからインストールするとエラーになることがあると聞いたことがある。

まあ、違うだろうけどさ。
587デフォルトの名無しさん:02/04/29 12:36
C++の勉強の勉強はやったんだけど、
どうやってWinのソフトウェアを作ればいいのか全然わからない。
Visual C++を使ってなんか作りたいんだけど、
どのように勉強したらいいでしょうか?
お勧め本とかホームページ教えてくれますか?
588892:02/04/29 12:40
猫でもわかる・・・
>>587
VBで作れ
590即レス:02/04/29 13:15
>587
一通り勉強したんならあとはやりながら勉強するのがいいと思うぞ。
俺の勉強方法は「とりあえずやってみる」だし。

どの言語でもそうだけど初心者の読む本なんて何読んでも
一緒だと思うんだが。お勧め本とか聞かれてもなあ。

俺の持ってるのは「猫でも・・」と「初心者・・」ぐらいかな。

#スレ違い。
Perlって難しくね?
>>591
難しくはない。ただ、仕様がクソ汚い。
だからか。ぱっと見理解できなかったから。
594即レス:02/04/29 14:29
>>570
まあ今更だが、暇なんで。

ここにCryptをCで再現してるソースがあるよ。
http://www.coms.ne.jp/~paz/mktrip/

で、そのufccrypt.dllを使わせてもらったサンプルコードがこれ。

Private Declare Function ufccrypt Lib "ufccrypt.dll" (ByVal Key As String, ByVal Salt As String, ByVal retStr As String) As Long

Function MakeTrip(ByVal Key As String) As String
Dim ret As String * 13
ufccrypt Key, Mid$(Key, 2, 3), ret
MakeTrip = Mid$(ret, 6)
End Function

cそのまんま移植するのはめんどいのでパス。


>591
そうなん?俺専門外なんだけど。
595570:02/04/29 14:34
>>594
何気に回覧してたらなんかすげー情報がっ!
いや〜あるとこにはあるものですな・・・。
感謝感激感動です。やってみま。
596デフォルトの名無しさん:02/04/29 15:49
VBでエディタをつくりたいのですが、どこかにソースを公開したエディタありませんか?
文法の勉強より手本を見ながらいきなり作るのが好きなんです
探したけどC++ばかりでなかなかありません・・・
>>596
TextBoxをMultiLineで貼り付けるか、
自分でDCに描画するか好きなほうを選べ。
598デフォルトの名無しさん:02/04/29 16:05
>>597
処理が単純で速いほうがいいですが、
どちらでもかまいません
>>598
ぇ、いやどっちか選んでやってみろってことだろ、597は。
質問すまん
ListViewで新しい項目追加するときに
項目を更新させないようにして
追加するのってどうやるんだっけ?
いちいち画面書き換えるんではチラついてうざいので。
601即レス:02/04/29 16:36
>>600
DoEventsやSleepを入れなかったら追加するたびに更新されないはずだけど。
Refreshとか使ってないよな?

>>596
ちょっと探してみたがホントに無いな。
いまどきテキストエディタってのも流行らんからなあ。
簡単でいいならRichTextBoxを貼りつけりゃ完成だが。
602570:02/04/29 16:56
ぐふっ!
トリップ検索ためしに作ってみたのはいいが
1500trip/s・・・(w
これがVBの遅さですか?
それともトリッパーはマルチプロセスとかで高速化してんのか。
603即レス:02/04/29 17:02
>602
普通のってどれぐらい?
604570:02/04/29 17:12
俺のCPUが遅いせいもあるけど、
「見知らぬ国のトリッパー(w」
は俺がやって16000trip/sぐらい出る。
俺のやつの10倍速と。w
605即レス:02/04/29 17:19
>604
ちょっとやってみるから待ってろ。
606570:02/04/29 17:41
>>605
待ってろ、といわれたが具体的になにをやってみるんだ?(w
作るのか?トリップ検索プログラムを・・・。
いやそれともトリッパーの速さを見てみてるのか。
607597:02/04/29 18:02
>>598
処理が単純で速いほうか、なるほど茨の道を選ぶのだな。
答えはは既におまえが手にしたC++のソースの中にある。

まずはこれから始めようか。
Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (
ByVal dwExStyle As Long,
ByVal lpClassName As String,
ByVal lpWindowName As String,
ByVal dwStyle As Long,
ByVal x As Long,
ByVal y As Long,
ByVal nWidth As Long,
ByVal nHeight As Long,
ByVal hWndParent As Long,
ByVal hMenu As Long,
ByVal hInstance As Long,
lpParam As Long) As Long
608即レス:02/04/29 18:04
>606
とりあえず前方完全一致の単純検索で試してみた。

結果

見知らぬ国の・・・ 13000 trip/s
文字列操作、比較  9000 trip/s
バイナリ操作、比較 16000 trip/s

参考
ufccryptの呼び出しだけ 18000回/s

っつーわけで、1500trip/sって何なんだ。
まあもちろん部分一致だの正規表現だのに対応すれば
その分遅くなるが、それでも1500trip/sは遅すぎだろうな。
609570:02/04/29 19:14
>>608
早っっ
俺のやってる事がいかに効率悪いやり方かが分かるわ・・・
そっちはどんな風にしてやってんのか気になるわぃw
610600:02/04/29 19:31
>>601
DoEventsを入れてやってました・・・
でもDoEventsを抜いてしまうと、Do Loopの中にあるので
固まってしまうんですが?DoEventsをいれずにも固まらないようには
どうやったらできるんでしょう?
611即レス:02/04/29 19:59
>610
1.Doeventsを呼び出す頻度を少なくする
2.非表示にする
3.サブクラス化
4.ListViewのDCをゲット、オーナーに同じ物描画、ListView非表示。

とか。1がお勧めかな。


>608
別に大したことしてないが・・・
ソースはあとで気が向いたらうpするよ。
612デフォルトの名無しさん:02/04/29 20:30
今会社で一人で困ってます。どなたか助けて下さい。
ListViewコントロールのヘッダをクリックしたら、ListItemオブジ
ェクトを文字順ではなく数字順でソートされるようにしたいんです。
リストビューのSortOrderプロパティを使うと文字列でソートしちゃ
うんです。

こんな感じにソートしたいです。
0
1
2
3
4


今こうソートしてる。これはイヤ。
0
10
100
1000
1001


.....ヒントでもいいです。
613  :02/04/29 20:32
Dim ni As Integer
ni = InStr(1, Text1.Text, "に")
If ni > 1 Then
Dim a1 As Byte
a1 = Left(InStr(1, Left(Text1.Text, ni - 1), 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 0), 1)
Text1.Text = a1
End If
これだと 0 でますが、どこがちがいますか?
>>612
こうするのが一番てっとり早いかと。

0000
0010
0100
1000
1001
615612:02/04/29 20:48
>>614
ありがとうございます!助かりました!この方法で行きます!

実は半日くらいWWW検索しまくっちゃって悩んでたんですけど、
全然解決しなくって。。
てっとり早くない方法っていうのは、ソートの関数(?)みたい
なのを自分で作るはめになるんでしょうか?
>>615
APIを使ってそうすることになると思う。<自前ソート関数
詳しくは MSDN あたりで ListView_SortItems というキーワードを調べてみるべし。
>>615
>>616で正しいね。
正確にはSendMessage APIのMsgパラメータにLVM_SORTITEMSを指定して
リストビューにメッセージを送信することによってコールバック関数を設定し
そんでコールバック関数の中で独自のソートを作ればok。
618608:02/04/29 21:00
>>611
気が向いてくれるように祈ってみるテスト。
619即レス:02/04/29 21:22
気が向いた。


Private Declare Function ufccrypt Lib "ufccrypt.dll" (Key As Any, Salt As Any, retByte As Any) As Long
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Function a()
Dim T#, st$, i&, T1#
Dim ret As String * 13
Dim by(20) As Byte
Dim a1&, a2&, C&
Dim s$
Dim Chars(52) As Byte
Dim SearchChar(3) As Long, SearchLen As Long
Dim KeyChar(7) As Byte

For i = 0 To 25
Chars(i) = (Asc("a") + i)
Chars(i + 26) = (Asc("A") + i)
Next

SearchChar(0) = 26
SearchChar(1) = 33
SearchChar(2) = 40
SearchLen = 2

T = timeGetTime

For a1 = 0 To 7311615
For a2 = 0 To 7311615
C = C + 1
620即レス:02/04/29 21:23
KeyChar(0) = Chars(a1 \ 140608)
KeyChar(1) = Chars((a1 Mod 140608) \ 2704)
KeyChar(2) = Chars((a1 Mod 2704) \ 52)
KeyChar(3) = Chars(a1 Mod 52)
KeyChar(4) = Chars(a2 \ 140608)
KeyChar(5) = Chars((a2 Mod 140608) \ 2704)
KeyChar(6) = Chars((a2 Mod 2704) \ 52)
KeyChar(7) = Chars(a2 Mod 52)

ufccrypt KeyChar(0), KeyChar(1), by(0)

If by(5) = Chars(SearchChar(0)) Then
If by(6) = Chars(SearchChar(1)) Then
If by(7) = Chars(SearchChar(2)) Then GoTo OK
End If
End If

Next
Next

OK:
DoEvents
Sleep 1
T = timeGetTime - T

s = KeyChar
s = StrConv(s, vbUnicode)
MsgBox (s & vbCrLf & vbCrLf & C & "個を" & Int(T / 10) / 100 & "秒で検索。" & vbCrLf & "1秒あたり" & Int(C / T * 1000) & "個。")

End Function

コマンドボタンくっつけてa呼び出すなり。

#一応最適化全チェックでコンパイルしてちょ。
621即レス:02/04/29 21:25
タブが消えてしまうという罠。(今知った。鬱。)
622デフォルトの名無しさん:02/04/29 21:29
>>616
>>617

度々ありがとうございます。
もし力尽きてなかったら、難しい方(>>617)も後で試してみます!
623608:02/04/29 21:34
>>619-620
わーい!
でもやってることがあんま理解できない罠。
俺がやはり如何に低レベルだったかと納得させられるw
今からがんばって解読すんぞ〜。
サンクスコです >>即レスサソ
624即レス:02/04/29 22:21
>>613
何がしたいのかよく分からん。目的はなんだ?

>>623
どーいたしまして。
色々いじくった後を修正してないので
もう一度作り直した方がいいだろうな。
625まとれす ◆mato/KTI :02/04/29 22:48
ついにおれが誰だかばれてしまった。まずいことを書いてるわけじゃ
ないからいいけどね。しかし、わかるもんなんだなー。

>>607
そこからやるのは無謀だと思うぞ

>>612
すでに回答がでているように、リストビューのソート関数を定義する。
日付型のソートをするサンプルが、KBにあったぞ

>>613
何がしたいんだ?とりあえず、アスキーコードとか、ShiftJISとか、その
辺から確認してみろ
実は有名人なの?
627即レス:02/04/29 23:23
俺は名前を聞いてもわからない自信がある。>まとれす

#PG界の人名なんてぜんぜん知らんもん。
628まとれす ◆mato/KTI :02/04/29 23:36
>>626
別に有名じゃない。たまたま、知り合いが見て、気づいただけだ

>>627
せいぜい、一度くらいはMLとかで見かけたことがある、ってレベルだと
思う。俺も、PG界の人名なんて知らんし
>>596
http://www1.plala.or.jp/uz/
にハイレベルなサンプルがある。

が、このソースを見ればわかるが、VBでテキストエディタを
作っても苦労は報われないと思われ。

>>613
俺も何がやりたいのかさっぱりだが、
a1 = Left(InStr(1, Left(Text1.Text, ni - 1), 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 0), 1)
の中の「1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 0」は
間違ってるだろうな。

s = "123"
For i = 1 To Len(s)
  ret = InStr("0123456789", Mid(s,i,1))
  If ret = -1 Then Exit For
Next
If i = Len(s)+1 Then Debug.Print "sは数字だよ"

みたいなことがしたいのだろうか・・・とふと思った。
630Mr.DoEvents:02/04/30 05:48
聞いてばかりじゃ悪いんでw
ここはすごい!
http://www.domaindlx.com/e_morcillo/

VBとしてはかなり上級テクばかり
自作のタイプライブラリをVBに提供!!それを使ってVBの機能をUPするテクを公開してる
なんていい人なんだ!

でも英語だよ(・∀・)
あせらないようにな でも厨も、もらっておけ!

>>612
めんどくさいのが嫌なら、ColumnHeaderを右寄せにしたうえで、
数字の左に半角スペースを桁数分詰め込むと楽。
Li.SubItems(1)=Format(intHoge,"@@@@") みたいな感じで。
#独自にソートさせた場合、面倒があった気がする…。コードが腐ってた
#だけかもしれんけど。
632Mr.DoEvents:02/04/30 07:17
Sub Main()

Dim s As String, a As String, l As Long, r As Long

s = "おまえ厨だろ?"
l = Len(s)

Randomize

Do
r = Int(l * Rnd + 1)

a = InputBox(String(r - 1, "*") + Mid(s, r, 1) + String(l - r, "*"))

If Len(a) = 0 Then Exit Sub

Loop Until s = a


End Sub

いつも聞いてばかりなのでちょっとしたゲームサンプルお礼
上記は標準モジュールのみで動かしてね
Formはいらないよ(解放していいよ)
スタートアップ設定はSub Mainね(プロジェトのプロパティ)
どう?
633Mr.DoEvents:02/04/30 07:22
あ!何するかって?
文字列あててね
毎回1文字だけ表示されるから 全体の文字列ね
何も入力しないと 即終了〜
当てる回数はまっどうでもいいでしょ
糞コードあげんなって?(´∀` )
VB のコンボボックスのリストって VBA のように一気に設定できないの?
635517:02/04/30 10:54
あ、TCPじゃブロードキャストは受け取れませんね。ボケてました。
で、WInsockのプロトコルをUDPに下のですけどエラーが出てしまいます。
サーバを作るときは、

Private Sub Form_Load()
txtRemoteHost = "192.168.0.2"
txtRemotePort = 1229

WinsockServer.Protocol = sckUDPProtocol

Rem WinsockServer.Close
WinsockServer.LocalPort = 1229 'ポートを設定
WinsockServer.Listen
End Sub

じゃだめなんでしょうか?
>>635
bindがねーしlistenなぞいらん
637517:02/04/30 11:04
>>636 すみません。勉強不足でした。
調べたら解りました。逝ってきます。。。
>634
一気に設定って何だ?RecordSourceとか値リストの事?
639ショック:02/04/30 12:36
VBサポート中止!
640634:02/04/30 12:37
VBA は配列を直接ブチこめる
641ショック:02/04/30 12:37
どうしよう・・・
>639
2005年までっしょ
643デフォルトの名無しさん:02/04/30 12:50
>>641
ソース希望。
MSサイト覗いてもそんな記述はなかった。
もしかしてネタってやつですか?(w
644デフォルトの名無しさん:02/04/30 12:53
>>643
俺は>>639じゃないけど、zdnetの記事にあった。
ちなみにVB6.0の話。
645644:02/04/30 12:54
確か2005年からは有償サポートになって、2008年にはうち切るんじゃなかったかな。
647デフォルトの名無しさん:02/04/30 12:55
648ショック:02/04/30 13:09
まじです
649ショック:02/04/30 13:11
VBNって値段いくら位?
650643:02/04/30 13:12
サンクス!!

>>641
疑ってすまぬ。
651デフォルトの名無しさん:02/04/30 13:16
お前ら笑える
>>651
あおりごくろうさん。
くだらんからsageじゃ。
>640
DBコンボって同じ事出来なかったっけ?
未確認sage。


なんだ、2005年まで猶予あるんだ。
ちょっと意外。
654デフォルトの名無しさん:02/04/30 14:56
ASテクノロジっていうメモリ最適化の技術があるそうなのですが、
どういうものでしょうか。
教えて欲しいんですけど…
655デフォルトの名無しさん:02/04/30 16:44
VBでEXEファイルを作成しようとするとエラーメッセージも無く
強制的にVB自体が落ちてしまいます。
メモリ不足かと思い他のアプリケーションを全て終了したり
再起動したりしたのですが全く同じ現象になってしまいます。
デバッグモードでは動作しています。
他のプログラムではEXEを作成することが可能なので
このプログラム単体の原因があると思うのですが
理由がさっぱりわかりません。
他の人に聞いてもこのような現象は聞いたことがないと言われたのですが、
このようにメッセージも無く落ちる原因になりうるものって何かありますか?
環境はWIN2000でVB6(SP4)、メモリは256Mです。
フォルダパスに日本語が混じっているとか?
>>654
マルチ
>>655
漏れもなったことあるぞ。VB入れなおせ。SP5入れるのも手か。
>>655
とりあえず SP5 でてるから、当ててみれば。
VBでメモリマップドファイルをどうすれば作れるか
解説サイトなどありましたら教えてください
661659:02/04/30 17:10
かぶってもうた。
662655:02/04/30 17:11
レスどうもです。試しにパスに日本語を含まないようにしたところ
「メモリが”READ”になることが出来ませんでした」との
エラーメッセージは出るようになりました。
まぁ、落ちることに変わりはないのですが…
皆さんの助言通りSP5にバージョンアップしてみます。
まさかcpuいじってなんかいないよね
664655:02/04/30 17:25
>>663
私ですか?いじってないですよ。
まだ増設とかもしていないのでPCはメーカーの
ものをそのまま使用している状態です。
Win2000って強制終了がみょうちきりんだからね…
666即レス:02/04/30 17:46
誰も654につっこまないんだな。結構笑えるネタなのに。
>>666
そうなの?
>666
いや、初心者スレだし...

>655
Windows2000のSPは...?
669即レス:02/04/30 18:27
とりあえずこちらをご覧あれw
http://page.freett.com/hachikou/

一応同名でまじめな技術があるかも、と思って検索したけど
無かったのでこれで間違い無いよ。たぶん。
えーと質問させてください。
NSにコネクションを張ってればメールの着信をGETできる、って
教えてもらった(http://pc.2ch.net/test/read.cgi/tech/1006154451/486
んですけど、全く分かんないんです。
winsockかなんかで繋いどくんですかね?
やり方教えてもらえませんか。よろしくお願いします。
671612:02/04/30 19:05
>>625
>>631
ありがとうございます。 (一括でごめんなさい。)

>>612を解決するためのサンプルコードをここ↓で発見しました。
(callback関数使う方です。)
http://www.mvps.org/vbnet/


....今度からもっと調べて質問します。
672デフォルトの名無しさん:02/04/30 19:58
>>619,620
KeyChar(0)〜(3)への代入を外側のループに出せば、約4割速度アップ。
SearchChar(0)〜(2)を単純変数に代入すれば、約1割速度アップ。
673即レス:02/04/30 20:35
>672
ま、そういうことだね。
674まとれす ◆mato/KTI :02/04/30 23:07
>>634
できない。どうしてもやりたければ、そういうユーザーコントロールを作るしかないな

>>654
懐かしいネタだな

>>660
CreateFileMapping、MapViewOfFileExあたりをキーに検索してみれば、サンプルが
見つかるぞ

>>670
なんだNSって?メッセンジャーの話か?
>>674
どもありがとうございました。
676634:02/04/30 23:31
>>653 >>674
いろいろスマソ。諦めて Additem で一つずつ追加するよ。
677デフォルトの名無しさん:02/05/01 00:53
VBでFlashを再生するソフトを作っているのですが、ちょっと質問させてください。
フォーム上に置いたFlashに、ドラッグ&ドロップでFlashムービーを再生させたいのですが、
VB上でドラッグ&ドロップしたときに、ドラッグ&ドロップされたファイル名を取得するにはどうすればいいのでしょうか?
よろしくお願いします。
678デフォルトの名無しさん:02/05/01 00:59
>>677
ファイル名は、OLEDragDropイベントプロシージャの
Data.Files に格納される。
679まとれす ◆mato/KTI :02/05/01 01:01
>>677
OLEDragDropイベントで、DataObject引数の中から取得すればいいぞ
680677:02/05/01 01:21
それでもやっぱりわかりませんでした…。
下記で試してみたのですが、だめでした…。

Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Flash1.Movie = Data.Files
End Sub
>>680
Flash1.Movie = Data.Files(1)
ちなみに複数選択してドロップすると2,3,4...となる。
682まとれす ◆mato/KTI :02/05/01 01:34
>>680
そういうときはだな、ブレイクポイントをしかけておいて、変数の中身をウォッチ
するといいぞ。何が入っているのかすぐわかる
683677:02/05/01 01:38
ありがとうございました。
これで完成です。
684 ◆.9BqZfqQ :02/05/01 09:34
テキストファイルをopenで読み込んだら改行されずに1行で表示されるんだけどどうすればいい?
>684
大体想像つくけど、まずそのソース示せや。
openったって、書き方ひとつじゃないでしょ?
686即レス:02/05/01 09:42
>684
Line Input使うか、ReplaceでVbcrlfに変換すれ。
687 ◆.9BqZfqQ :02/05/01 09:51
すんません。
Open strFilePath For Input As #LngFNum
こんな感じで開いてます。
ある文字列をテキストボックスに表示させたいのですが
tabスペースの部分が来たら改行させたいのですがどうすればいいですか?
689即レス:02/05/01 10:14
>688
Text1.text=Replace(str,vbtab,vbcrlf)

こういうことか?
690      :02/05/01 10:19

Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
とありますが、「Declare」「Lib」「gdi32」ってなんですか。読めません。ヘルプもありません。
691即レス:02/05/01 10:24
>690
Declare=宣言
Lib=Library(たぶん)
gdi32=DLLの名前

つまり、gdi32っていうライブラリのGetStockObjectっていう
関数を宣言する、ってことだ。
692688じゃないんだが:02/05/01 10:29
単なる半角スペースとかを改行に置き換えるときって半角スペースの関数(vbtabみたいなやつ)
ってあったっけ?
693即レス:02/05/01 10:34
>692
無いよ。
自前で宣言しとく?
694688じゃないんだが:02/05/01 10:41
Replaceで半角を置き換えるときはどうなんの?
Replace(str, ,vbcr)とかになんの?
それとも
Replace(str," ",vbcr)とかになんの?
それとも両方間違いですか?
アフォな質問かもしれんがたまたま気になったからさ・・・
695      :02/05/01 10:42
ありがとうございます。
Dim a as〜 の Dimension の宣言とはどうちがうのでしょうか……。

696即レス:02/05/01 10:46
>>695
Declare〜Libはその名の通り、他のDLLの関数を宣言すること。
Dim〜はVB内での変数の宣言。

スゴく簡単に言うと
通常の宣言=Dim
APIの宣言=Declare〜
かな。

>>694
後者。
Replace(str,chr(32),vbcr)
でもいいよ。
697      :02/05/01 11:37
>>696
  ありがとうございます。おつかれさまです。  
698 ◆.9BqZfqQ :02/05/01 12:04
適当な場所にあるテキストを1行ずつ読み出してテキストBOXに書き出すモノなんですが
Do While Not EOF(LngFNum)
Line Input #LngFNum, strRecData
Text1.Text = Text1.Text & Replace(strRecData, Chr(32), vbCrLf)
1行読み込むと改行としたいのですがうまくいきません。
バカ初心者の私に愛の手をお願いします。
699即レス:02/05/01 12:10
>698
×Text1.Text = Text1.Text & Replace(strRecData, Chr(32), vbCrLf)
○Text1.Text = Text1.Text & strRecData & vbCrLf

・・・まさかとは思うがMultiLine=Trueにしてるよな?
700デフォルトの名無しさん:02/05/01 12:12
初期化ファイルの読み込みをする関数の関数名は何が適当でしょうか。

iniFile_Load() でいいですか?

#くだらない質問ですみません。変数名と関数名決めるのがいちばん苦痛なんです。
701デフォルトの名無しさん:02/05/01 12:16
VBでPerlみたく変数宣言しないで簡単にやってると、
処理を間違えたりVB自体が落ちたりします。仕様ですか?
SP5はあてててます。
>701
ネタですか?
703即レス:02/05/01 12:21
>>700
十分でしょ。動詞を先にするのもあり。

>>701
処理を間違えるのはVariant型が分かってない可能性があるが
VB自体が落ちるってのは聞いたこと無いな。
704デフォルトの名無しさん:02/05/01 12:43
VBにてIEを起動させているのですが、
IE終了時にVB側も一緒に終了させる方法はあるでしょうか?
---------------------------
Option Explicit
Dim IE As Object

Private Sub Form_Load()

Set IE = CreateObject("InternetExplorer.application")

IE.FullScreen = False
IE.ToolBar = True
IE.MenuBar = False

Call IE.Navigate("localhost")

IE.Visible = True
Me.Visible = False
End Sub

Private Sub IE_OnQuit()
Unload Me
End Sub
-----------------------------
フォームに上記のように書いたのですが、
_OnQuit()ではだめなのでしょうか。
IEオブジェクトの終了イベントの受け取り方法を
教えてください。

>700
よく言われるのは動詞+名刺やね。
それに拘らずとも、プログラム内で命名方法が統一されていれば問題なし。
よく使う動詞をまとめておけば名前決めも楽〜
706デフォルトの名無しさん:02/05/01 13:13
質問なのですが。
TextBoxの文字を中央に揃えたいのですが、どうしたらいいでしょうか?
右揃え、左揃え、中央揃えではなく、
デフォルトでは、上に揃えられてる文字を中央におきたいのですが、
Alignment
か何かのプロパティでいけないのでしょうか?
お願いします。
707まとれす ◆mato/KTI :02/05/01 13:27
>>704
アーリーバインドしろ

>>706
EM_SETRECTで位置を修正だな
708706:02/05/01 13:53
>>707
レスありがとうございます。
EM_SETRECTで調べてみました。
うっ、SendMessage()API、、、
これは難しそうだ。水平方向なら簡単なのに、、、
ありがとうございました。
VBのベーシック言語ってどこに載ってるんでしょうか・・・
MSDNディスク?
>709
何それ?VBのベーシック言語?MSDNディスク?
>>700
俺は、普通 LoadIniFile() だけど、iniFile_xxx() が色々ある
(例: iniFile_Save(), iniFile_Print(), iniFile_Export()...) なら、
そっちの方がいいかも。要は、>>705 の言う通り統一していることが重要だと
思う。
712デフォルトの名無しさん:02/05/01 17:50
クラスモジュールのプロパティプロシージャにLetとSetがありますが、
この2つの違いって何ですか?
713デフォルトの名無しさん:02/05/01 18:00
>>712
>Property Set プロシージャは、オブジェクトへの参照を設定します。
>Property Let プロシージャは、プロパティに値を設定します。
714712:02/05/01 18:07
>713
すばやい返答ありがとうございます。
MSDN見ても両者の文面が同じにしか見えなかったんで戸惑って
いたんですが、おかげさまでなるほど納得です。
>>712
値を代入するのに 2 種類のプロパティ プロシージャがある理由は、
Visual Basic では、オブジェクト参照をオブジェクト変数に代入する
場合、特別な構文を使うためです。
716         :02/05/01 18:17
 print では ; を打つと改行しなくなります。
では、文字を改行するにはどうしたらいいでしょうか。
Label1.Caption = "a + b = " & Format(wa, "######.######") & " です。" & 改行 _
"a - b = " & Format(sa, "######.######") & " です。"
717デフォルトの名無しさん:02/05/01 18:34
>>716
クイズみたいな文面ですね。(w
vbCrlfとかじゃダメなの?
718         :02/05/01 19:07
>>717
      それはどのように使いますか?
>>718
MSDN見るなり、全部聞くんじゃなくてやってみろよ…
"あいうえお" & vbCrLf & "かきくけこ"
720         :02/05/01 19:16
>>719    ああ、&をつけるのでしたか……。
      ありがとうございます。それだけで助かりました。
初心者にもほどがあるぞぷーそぷそ!
>>721    心中には。 
723デフォルトの名無しさん:02/05/01 19:51
PictureBoxの左上の1ドットを透明色として取得しようと
ToumeiColor = Picture1.Point(0,0)
とするも戻り値は-1
msdnをみると-1はobjectの外側にあるからだとか。
意味不明です。助けて・・・。
724デフォルトの名無しさん:02/05/01 20:32
フルパスをDOS形式に変換する関数てありますか?
>>723
Picture1 の ScaleMode, ScaleTop, ScaleLeft, ScaleHeight,
ScaleWidth をチェックしてみなされ。
>>724
ShortPath, ShortName あたりを調べてみなされ。
>>726
ありがとうございました。これで解決できそうです。
728:02/05/01 21:23
指定した座標(デスクトップ上)の色を取得する方法は
どんなんがありますか?
100 200と指定したらデスクトップ上でのX=100 Y=200の位置の
色を取得できるような・・・。
>>728
GetPixelってAPIがあるぞ。
昔それにチャレンジして失敗したが(--;
がんばれ。
>>728
Win32API の GetDesktopWindow() と GetPixel() を調べてみなされ。
>>728
デスクトップのウィンドウハンドルは取得できてるの?
732731:02/05/01 21:39
パオーン
733723:02/05/01 21:42
ScaleModeはTwip
ScaleTopは0
ScaleLeftも0
ScaleWidthもHeightも適当な値になってます。
原因は・・・。
734デフォルトの名無しさん:02/05/01 21:43
プログラム初心者のためのVBの参考書を紹介してください。
出来れば初心者さんに聞きたいです。
735即レス:02/05/01 21:45
>>733
PictureBoxがFormからはみ出してないか?
736723:02/05/01 21:51
>>735
その可能性は無きにしも非ず。
あたってみます!
737723:02/05/01 21:56
とおもったのですがそんなはずはないです。

ところでPicture1.Point(0,0)
の戻り値が毎回違うのはどうしてでしょう?
色は同じはずなのに。
>>723
もしかして BorderStyle が 1 になってね?
739738:02/05/01 22:12
738 は漏れの勘違いだった...スマソ
さっきサンプル書いてみたんだけど問題無く動くんだけどなぁ...何が悪いんだろ。
>>734    この本は、基本からきっちりと解説されている。大事なことが凝縮されている、って感じ。
      一面的に、要点が並んでるって感じ。しかし、それほど重要でなさそうなことにも平ぺったくページを割く。
      全体的に平ぺったい本。でも文法やプログラミングの枠的なところはしっかりと身につけられると思う。この本からは、
      私はあまり元気は得られなかったが、実際に書きながらすると、確かに基礎は身に付く。文法的な知識書、かな。

      初めてのプログラミング Visual Basic 
      http://www.amazon.co.jp/exec/obidos/ASIN/4881357182/ref=sr_aps_d_1_1/250-3193683-3728223

       マイクロソフト公式解説書  この辺がいいという人もいる。
      http://www.amazon.co.jp/exec/obidos/search-handle-form/ref=br_ncs_/250-3193683-3728223

741デフォルトの名無しさん:02/05/01 22:21
>>739
とんでもございません。
でもやっぱり取得する値は毎回違う・・・。
Versionは8176
違いますか?
>>741
うん ? >>723 では、-1 って言ってたような気がするがのう。
どういう値が返って来てるんじゃ ?
ちなみにわしんとこの Version は、VB 6.0 (SP5) だから 8988 じゃ。
環境が心配なら、ピクチャボックスだけをフォームに貼り付けて Point(0,0)
してみて切り分けたらどうじゃ。
743738:02/05/01 22:28
>>741
Version 8988 だった。
後、漏れがさっき書いたサンプルって、下記の様なものです。

1) Form に PictureBox を一個貼り付ける。
2) PictureBox の MouseMove イベントに下記のコードを追加する。
  Debug.Print X,Y,Picture1.Point(X,Y)

参考になるとは思えないけど、とりあえず。
744734:02/05/01 22:36
>>740
サンクスです。参考にします。
失礼ですが、初心者ですか?
745723:02/05/01 22:46
FormにPictureBoxを貼り付けて
TextBoxもつけて
FormLoadに
a=Point(0,0)
Text1.text=a
とすると
aは-1です。
バージョンの違いですか・・・。
746即レス:02/05/01 22:52
>>745
Pointの前にMe.Showを追加すれ。

PictureBoxのAutoRedraw=Falseの時は
フォームが表示されてない時は
(フォームの上に別のウィンドウがある時も)
どこにも情報がないので範囲外で-1が返ってくる。
747デフォルトの名無しさん:02/05/01 22:55
フォーム(*.frm)のソースをエディタで開いて見たら、
VERSION 5.00 ってなってるんですけど、VB 6.0 を使ってても
これで正常ですか?
もしかしたらプロジェクトを 5.0 からアップグレードする時に、
失敗したんじゃないかと心配になったもので・・・。
748738:02/05/01 22:58
>>723
これはあくまで推測だけど、Load イベント中は、まだコントロール類の
初期化が完了していないからでは?
間違ってたら誰か突っ込んで下さい。
>>747
それで、正常みたいじゃ。わしんとこも VERSION 5.00 となっておる。
正直しらんかったぞ。で、>>746 の Me.Show は追加したのか ?
>>744  はい、まあだいたいその本しか読んでません。しかしもっと自然な解説な本もあるかも。
    プログラミングにそまりきったら、今のプログラムは自分で作るのだし、今のパソコンはまだ生きてませんから、
    そまって自分を失ったら、失いっぱなしです。我を失ったら、自然なものは作れません。私は、
    自分の基礎(自然)を忘れないようにして、つくっていきたいです。パソコンも生き生きしてほしいですね。
    まだ、パソコンも、できたばかりです。自然もそうであるように、これから、少しずつ、
    角がとれていくのでしょう。

>>748
>>746 の言う通り、フォームが表示されていない段階で Point() を実行したため
じゃろ。心配なら、ボタンを一つくっつけて、そのボタンのクリックイベント中で
やれば良いぞ。わしは、テストの時はいつもそうやってるんじゃよ。
752723:02/05/01 23:08
もうパンツ脱ぐ勢いでソースだします。
おそらくどっかに致命的なものが・・・。
Sub main()
Dim tmp As Long

Load Form1
Form1.Show
'tmp = SetWindowPos(Form1.hwnd, HWND_TOPMOST, 500, 500, 0, 0, SWP_SHOWWINDOW)

Byouga

End Sub
Public Sub Byouga()
'リージョンのハンドル
Dim hRgn As Long

'Combine用リージョンハンドル
Dim hRgnTmp As Long

'CreateRectRgnの戻り値を格納
Dim modoriRgn
'透明にしたい色を指定。
Dim toumeiColor As Long
'For文用
Dim i, j As Integer

Form1.Show

toumeiColor = Form1.Picture1.Point(0, 0)
hRgn = CreateRectRgn(0, 0, 0, 0)
For i = 0 To 31
For j = 0 To 31
If Form1.Picture1.Point(i, j) <> toumeiColor Then
hRgnTmp = CreateRectRgn(i, j, i + 1, j + 1)

modoriRgn = CombineRgn(hRgn, hRgn, hRgnTmp, RGN_OR)
modoriRgn = DeleteObject(hRgnTmp)
End If
Next j
Next i


modoriRgn = SetWindowRgn(Form1.hwnd, hRgn, True)

End Sub
お願いします!
>>750
なんか、怖い...。
754デフォルトの名無しさん:02/05/01 23:19
>>749
VB 6.0 でも VERSION 5.00 で正常ですかー。
これで安心しました。さんきゅ〜です。
755738=748:02/05/01 23:21
>>751
突っ込み感謝。
756723:02/05/01 23:33
いまきずいたんですけど、
if文のあたりに入る前にbreakかけると
画面に1ドット程度の
ウィンドウが表示されていました。
どこでこんなに小さくされてしまってるの??
>>752
VB は、Form1.Show とやってもコードが実行されているとフォームを表
示しないじゃ。だから、Point() の値がおかしくなるんじゃろ。
> Form1.Show
> Byouga
の間に、DoEvents を入れて、フォームを表示させればいいと思うぞ。

あと老婆心ながら言っておくと、Dim i, j As Integer と書くと、i は
Variant になるから、気をつけたほうが良いぞ。
758即レス:02/05/01 23:40
>>723
あー、つまりこのコードは、
「左上のピクセルと違う色を元にリージョンを作成して
ウィンドウに設定する関数」
ということでいいか?
サイズからしてアイコンを読み込むんだろうが。
PictureBoxはScaleMode=VbTwipsなんだよな?

じゃあ
PictureBoxのAutoRedraw=Trueにして、
適当なアイコンをPictureBoxに読み込んで、
×If Form1.Picture1.Point(i, j) <> toumeiColor Then
○If Form1.Picture1.Point(Form1.ScaleX(i, vbPixels, vbTwips), Form1.ScaleY(j, vbPixels, vbTwips)) <> toumeiColor Then
だ。

>>756
分からんな。他のコード見直してみな。
759723:02/05/01 23:49
>>757
>>758
な・なるほどー
すごい、凄すぎる。
またお願いします。

>>758, >>723
ScaleMode を vbPixel にすることを検討してみてはどうじゃ...。
なお、こういう処理をやるならラスタオペレーションを勉強すると良いか
もしれないぞ。
http://homepage1.nifty.com/CavalierLab/lab/win/transparent.html#sprite
761即レス:02/05/02 01:00
>760
え?俺?

俺は普段画像処理にVBの標準関数は使わないので、、、
762723:02/05/02 02:29
いやようやくリージョンについてわかってきたのですが、
先のソースでCombineRgnしたリージョンは
どーーーしてもSetWindowRgnの後表示されないのです。
普通にCreateRectRgnしたやつやCreateEllipticRgn
でつくったやつは表示されるのになぜゆえなのでしょう。
Delphiのソースまで読んだのに・・・。
送るメニューから起動して、送られたファイルのパスを取得するには
どうしたらいいですか。
ワケあってVB4なんですけど。
764デフォルトの名無しさん:02/05/02 04:11
質問です
コントロールによくあるToolTipTextプロパティの文字列は改行できませんね?
vbCrLfダメ vbNewLineもダメ もちろん chr(13)やchr(10)もダメ
使えネー そう思わない?
765即レス:02/05/02 04:19
酒飲みながら寝ようとしたんだが。
結構みんな起きてんだね。お疲れ。

>>762
上記のサンプルコードでは俺の所では動いたぞ。
他のところが間違ってるんじゃないか?
君はC系出身みたいだからVBの仕様で
とまどうところが多いかもな。

>>763
SendToフォルダとCommand。
VB4でも使えるだろう。たぶん。

>>764
まじめにTip作りたいならCreateWindowExを使う。
VBらしくFormで代用してもいいな。楽だし。
766763:02/05/02 04:40
>>765
取得されたパスがMS−DOS名(チルダ入り)になるのは仕様ですか?
Windowsの仕様だよ。
長いファイル名にしたかったらFindFirstFile APIでも使え。
正確には、Win9x系の仕様だな。
NT系だとロングファイルネームで取得される。
汎用性を保ちたいなら、そのへんも注意してや。
早朝にナイスフォローやね。
770763:02/05/02 06:28
手早いアドバイス、ありがとうございました。

このへんも参考にしました。
ttp://www.vbvbvb.com/jp/index.html
ttp://homepage2.nifty.com/sak/index.htm
>>766
手抜きしたかったら、Dir(strShortPath)ってやってファイル名だけ
ロングファイル名を取得する手もある。パスは取得できないが。
まぁ、1階層ずつ全部DirすりゃOKだけど。
772723:02/05/02 13:01
いやー昨日は泣き寝入りして
起きてすぐCombineRgnの引数を
RGN_ORから2に変えたら難なく成功。

VBだと定数って使えないのでしょうか・・・。
>>772
自分で定義しないと使えない。
その場合なら
Const RGN_OK = 2
かな?
VB tips 1000+ってなかなかいいぞ
775デフォルトの名無しさん:02/05/02 17:44
フォーム上のコントロールのプロパティにコレクションから値を設定する方法はありますか?

Command1のキャプションを変更する際に、
FN = "Form1"
CN = "Command1"
PN = "Caption"
Value = "TESTCaption"
Forms(FN).Controls(CN).Properties(PN) = Value
というようにはできないもんでしょうか?
776723:02/05/02 17:49
APIでよく使われる定数をVBで使う場合
どこを見て実際の数値を調べればよいのですか?
>>775
FormsにForm1が複数あったらどうするんだい?
>>776
VCのヘッダーファイル
779デフォルトの名無しさん:02/05/02 18:13
>>775
すばやいレスありがとうございます。

>FormsにForm1が複数あったらどうするんだい?
同じ名前のフォームが造れることは知りませんでした。

コントロールを指定するところまではできるんですが、
プロパティを指定する方法がどうしても見つかりません。
>>779
CallByName
781デフォルトの名無しさん:02/05/02 18:34
>>780
ありがとうございますぅぅ!!
できました。感謝いたします。

ついでに質問なんですけど、
CallbyNameで任意のプロシージャを起動できますか?
782781:02/05/02 18:37
解決しました。プロシージャをPublicにすればOKでした。
>>772
ちょっと待て、それまで未定義でやってたのかよ。悪いこと言わんから、
全部のソースの頭に Option Explicit 入れろ。(ついでに、ツール(T) -
オプション(O)... の編集タブの「変数の宣言を強制する(R)」のチェックを
入れとけ。

>>773, >>776
API ビューアー使え。でもたまに間違えてるらしいから、MSDN で確認した方が
良い。(つーか、あんまり VB で API 使うな。)
素人サイトの軽知識でAPIをVBで使っているとは…(゚Д゚;)
確かなリファレンス本ぐらい買えよ
情報の信頼さを考えれば決して高くない
速度と使い勝手からどーしてもAPI多用しちまいますが
ナニカ問題があったんですか。
ビットマップ転送なんかどーしても頼らんとムチャかと。
787デフォルトの名無しさん:02/05/03 01:17
厨よ BitBltなど使うな
厨には危険な割には速度は大して出ない
DirectDraw7を使え
DirectX 7 for Visual Basic Type Libraryを参照すること

Option Explicit
Dim ObjDX7 As New DirectX7, ObjDD7 As DirectDraw7
Dim PrDDSurf7 As DirectDrawSurface7, OffDDSurf7 As DirectDrawSurface7
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long



Private Sub Form_Click()
Unload Me
End Sub

Private Sub Form_Load()
Me.BorderStyle = 0
End Sub

Private Sub Form_Resize()
Set ObjDD7 = ObjDX7.DirectDrawCreate("")
Call ObjDD7.SetCooperativeLevel(Me.hwnd, DDSCL_NORMAL)

Dim ddsd1 As DDSURFACEDESC2, ddsd2 As DDSURFACEDESC2
With ddsd1
.lFlags = DDSD_CAPS
.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE
End With
Set PrDDSurf7 = ObjDD7.CreateSurface(ddsd1)

With ddsd2
.lFlags = DDSD_CAPS
.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
End With
Set OffDDSurf7 = ObjDD7.CreateSurfaceFromFile("ビットマップファイルのパス", ddsd2)

Dim nRECT As RECT, fRECT As RECT, rv As Long
rv = GetWindowRect(Me.hwnd, fRECT)
rv = PrDDSurf7.Blt(fRECT, OffDDSurf7, nRECT, DDBLT_WAIT)
End Sub

解説いるかい?
厨達よ 解説しておこう
Dim ObjDX7 As New DirectX7, ObjDD7 As DirectDraw7
DirectX7オブジェクト;VBタイプライブリ参照必須、DirectXを使うって宣言だ
DirectDraw7オブジェクト;DirectDrawを使う宣言だ

DirectDrawではサーフェイスと呼ぶ、ビットマップを格納する仮想スクリーンを使う
(Win32APIのディスプレイデバイスコンテキストと同じようなものだ)
これが表示する全ての基本である、描画はサーフェイスに行なう
実際に画面に表示されるサーフェイスはプライマリーサーフェイスと呼ばれる
その他の表示されないものはオフスクリーンサーフェイス(バックバッファ)と呼ばれる
基本描画法はプライマリーサーフェイス作成は必須
オフスクリーンサーフェイスを作成して、そこに表示するビットマップを格納しておく
表示するには、そのオフスクリーンサーフェイスからプライマリーに領域を指定して転送してやる
この作業はBitBltと仕組みは同じだ

さてサーフェイスの作り方だが…
DirectDrawのモードによってやや異なる
ウインドウモードとフルスクリーンモードだ
ウインドウモードでは、ほぼBitBltと同じ使い方になる
座標系なども説明する必要があるか…
もう面倒なので 希望者あったらな(藁
ジャネー
>>786
だったら、VC 使った方が良いと思うが...。
無理にそう思うからです。

別にAPIぐらい使ったっていいと思うが。
ただのツールでもBitBlt使うときもあるだろーに。
(でもMSDNぐらい見ろ、ってのは同意)

>>786
PaintPictureがあるけどね。
無理矢理VB標準関数だけでやるよりゃ
いいと俺は思うよ。

>>789
VBが好きだからです。ナンツッテ

#スレとあんま関係なくてスマソね。
792即レス:02/05/03 04:56
↑名前入れんの忘れた。とほほ。
VBはヘルプが充実してて、作例見れば初心者でもなんとかなってしまう。
でもちょっと込み入ったことやろうとすると小回りがきかない。
厨達よ モーニングサービスだ

プライマリーサーフェイスは作成時におまえらのディスプレイ表示画面と同じサイズで作成される
見ている画面そのものと言う事だ
それに対してオフスクリーンサーフェイスは作成時にサイズを決める いいな?

DirectDrawを使うからにはウインドウモードとフルスクリーンモードのどちらにするか決める
ウインドウモードではDirectDrawアプリは通常通りWindow支配下にある、画面を占有することはできない
まあふつうのVBアプリと変わらないと思ってよい(描画速度の事ではない)
フルスクリーンモードはその名の通り画面をこのアプリだけのものに占有できる
ただし、画面はすべてサーフェイスに占有されるため、VBに限らず、その他のウインドウはユーザーインターフェイスに関わるイベントは無意味となる
これはフォームなど表示できないから当然わかるであろう
しかしパフォーマンスはウインドウモード以上に期待できる

まず慣れないうちはウィンドウモードでやることだ
Set ObjDD7 = ObjDX7.DirectDrawCreate("")
これは DirectX7オブジェクトからDirectDraw7オブジェクトを作成している
ここからDirectDrawが扱える、引数の""はこれでいい、現在デフォルトのビデオカードが使用される
何も考えるなw
Call ObjDD7.SetCooperativeLevel(Me.hwnd, DDSCL_NORMAL)
これはさっき言ったモード決定だ
このDirectDrawをバインドするウインドウハンドルは必要だ(フォームでなくてもよい)
DDSCL_NORMALはウインドウモードと言う事だ、今回はフルの設定は割愛する

さあサーフェイスの作成だ DDSURFACEDESC2構造体がまっているなw
初心者は最初わかりにくいが、わかってしまえばなんのことはない
ウインドウモードでは設定するパラメータは多くない
おっとDDSURFACEDESC2構造体などはVBのユーザー定義型として既にDirextX7 for VBのタイプライブラリに宣言されている
じゃあ ああ 面倒だな
また 後でな (´Д`;)新手のもったいぶりアラシか オデは(藁






 
795Part7スレ217:02/05/03 09:01
>タスクマネージャのアプリケーションの所に
>アイコンを表示させない方法知ってる人いる?ぜひ、おせーて下さい。

が自己解決したんで。
ShowWindow(hWnd,SH_HIDE)でいけました。
こんなことで出来たのか。鬱。
796まとれす ◆mato/KTI :02/05/03 12:15
>>786
じつは、StrechBlt()よりPaintPicture()の方が速かったりする。ま、条件によるの
かもしれんが
>>796
今は無き VB増強作戦で検証してたのを見た気がする。
あのサイト良かったのにナァ。
動的配列を確保してから解放するのはどうすればいいのですか?
799即レス:02/05/03 18:20
>798
Erase
>>799
ありがとうございました。
できましたー。
>>796
StretcBltとPaintPictureのどちらが速いかは、環境次第で違う結果になる。
でも、両者にあまり速度差はないので、
拡大/縮小やるなら、やや高機能なPaintPictureの方がお勧め。
802即レス:02/05/03 20:20
APIの使い始めにStrechBltを使うとAPIの意味がないと思いこむ罠。

#StrechBltが遅すぎる気もするな。
#VC++使って自前で作った方が速いんじゃないか?
803即レス:02/05/03 20:22
追記。

昔の話ね。(2,3年ほど前)
今は速いかも。
>>794
その調子でDirectMusicも〜
805デフォルトの名無しさん:02/05/03 20:32
複数のファイルを結合させるプログラムを作ろうと思うのですが、
ファイルの開き方はやはりBinaryで開くのでしょうか?
一般的に結合ソフトはどのように結合させてるのでしょうか?

とんちんかんな質問かもしれませんが、よろしくおねがいします。
                   ||
  アホォ               ||        モウクンナ
         ヴォケ      ∧||∧←>>805       イッテヨシ ! 
  ∧_∧   ∧_∧      (/ ⌒ヽ      ∧_∧   ∧_∧
 ( ´∀`)  ( ´∀`)      | |   |     (´∀` )  (´∀` )
 (    )  (    )      ∪ / ノ     (    )  (    )
 | | |   | | |       | ||      | | |   | | |
 (__)_)  (__)_)     ∪∪      (_(__)  (_(__)
                    ;
                   -━━-
807即レス:02/05/03 20:46
>>805
俺ならメモリに読み込んでPutで追記。
ファイルそのままにしたいならOpenはBinary。
だな。

#たまには質問。
#ファイルの末尾を削る時ってみんなどうしてる?
#俺は全部読み込んでKill→Putなんだけど無駄が多くて。
808805:02/05/03 21:13
即レスさん
レスありがとうございます。
なるほど、その方向でいきたいと思います。
まだまだ前途多難ですが、、、

#質問はわかりません。すいません。
>>805
ファイルによるだろ。テキストファイルなら、Text モードだし、
バイナリファイルなら Binary モードだ。どっちかわからんのなら、
プログラム作る能力が無いのだから、あきらめれ。

>>807
俺は、一時ファイルに必要部分のみコピーして、Kill 元ファイル、
Name 一時ファイル AS 元ファイル だな。Kill → Put だと、
その間に異常終了したらファイルがなくなってしまうので、ちょっと
怖い。
810まだまだ未熟:02/05/03 22:10
VBでDirectX7をつかってゲームを作っているのですが、半透過のやりかたがよくわかりません。
透過ならカラーキーを設定して
Call BackSurf.BltFast(x, y, CharSurf, r, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY)
でできるのですが・・・。ご存知の方、いますか?
811まとれす ◆mato/KTI :02/05/03 22:47
>>805
SetEndOfFile()なんてどうだ? 使ったことはないが

>>810
DirectXはよくわからんが、普通はアルファブレンドとかを使うな
812805:02/05/03 23:04
>>809さん
レスありがとうございます。
テキストファイルをバイナリモードで開けてはダメなのでしょうか?
困ったな、

>>まとれすさん
レスありがとうございます。
SetEndOfFileですか、難しそうですけど、使いこなせれば、うまく
いくかもしれませんね。ただ、ほんとに難しそう、、、

ありがとうございました。
813809:02/05/03 23:43
>>812
> テキストファイルをバイナリモードで開けてはダメなのでしょうか?
別に良いんだけど、テキストファイルだと行単位の処理とかないの ?
テキストモードなら Line Input # で、行単位に読んだりできるので、
ちょっと楽。あと、Binary モードだと指定したファイルが無い時に
エラーにならずにそのファイルを作っちゃうので注意が必要。
>>810
Darw7では実装していない
DX8以降Drawは7のままであるから Drawでは、ないという事だ
ただし3Dのほうでテクスチャーで、できるようだ オデは3Dはやらない フィギュアヲタではないからだ

パフォーマンス無視のテクヒントをあげておく
Msimg32.dllにAlphaBlend関数がある
サーフェイスのデバイスコンテキスト互換ハンドル取得はわかるかな?
Draw使ってんのにAPIで描画という情けない技(藁
815まとれす ◆mato/KTI :02/05/04 01:03
>>812
すまん。>>811の回答は、>>807の間違いだった
で、元の質問に対してだが、Shell関数でCOPYコマンド呼ぶ、ってのがかなり速いぞ
int a=0;
みたいな書き方はVB6ではできなかったですよね?
817即レス:02/05/04 02:16
>>815
ありがとう。やってみたけど、これいいね。
早速自前のライブラリに追加しますた。

>>816
出来ないよ。
a as longはa=0で初期化されるけどね。
818812:02/05/04 09:32
>>813さん
レスありがとうございます。
なるほど、ためになります。
その点に注意しながらやってみます。

>>815さん
レスありがとうございます。
あの回答は即レスさんのでしたか、、、
まとれすさんのことだから、これをうまく使う方法があるんだろうな、と思ってました。。。
で、Shell関数でCOPYコマンド呼ぶってのは、ファイルの中のデータを読まずに、
ファイルを単純に結合してしまう、ってことでしょうか?
これはかなりよさそうですね。今からそれを調べてみます。

ありがとうございました。
>>807
SetEndOfFileですなー。
こんな感じ。

hFile = CreateFile(strFilename, GENERIC_WRITE Or GENERIC_READ, FILE_SHARE_READ, 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_SEQUENTIAL_SCAN, 0&)
If hFile = INVALID_HANDLE_VALUE Then Exit Function
Call SetFilePointer(hFile, lngFileEndPos, 0&, FILE_BEGIN)
Call SetEndOfFile(hFile)
Call CloseHandle(hFile)
820デフォルトの名無しさん:02/05/04 10:21
ADOでAccessのデータベースに接続しています。
フォームに単表形式で表示しているのですが、現在表示しているレコードを
「15/20」みたいに何レコード目かを表示したいのです。((現在のレコード)/(全件数))
全件数はRecordset.RecordCountで取れたのですが、現在表示中のレコードが
何番目かというのの取得方法が分かりません。
おながいします。
821まとれす ◆mato/KTI :02/05/04 12:56
>>816
できない。Constなら別だが。VB.NETでは、できるようになってる

>>818
そういうことだ。待機の問題とか出てくるけどな

>>820
AbsolutePositionでどうだ? 一応行っておくが、RDBMSでは、何番目、
という考え方はあまり使わないぞ(代わりにカーソルの位置を使う)
まとれすかっけーな。なんつーか、怖いモノなしじゃん。
823810:02/05/04 16:43
>>814
そうですか。ありがとうございました。
表示する画像パターンを増やしてなんとかごまかします・・・・・。( ;´Д`)ソレデセイイッパイ
824デフォルトの名無しさん:02/05/04 17:32
Dim Arr1() As String
Arr1 = Split("a b c d e"," ")
Debug.Print UBound(Arr1)

ってすると、4とでる。
つまり、Split関数は勝手にReDimしてくれてるってわけ?
そんな記述、どっかにありましたっけ?

825あの・・・:02/05/04 18:01
プログラム作成の解説とかのホームページに
よくウィンドウ丸ごとgif画像とかにして
貼りつけたりしてますがあれはどうやってるん
ですか?詳しい方教えてくださいな。
>>1-824

825のような常識はずれの低脳初心者なクソにマジレスしないように。
827デフォルトの名無しさん:02/05/04 18:12
828デフォルトの名無しさん:02/05/04 18:14
>>825

以下のソフトを使用。開発者の常識
http://www.sourcenext.com/products/satsuga/
デジカメ買っといで(W
>>828
すげ、、
こんな素晴らしいソフトがたった\4,900
しかも今ならドットコム価格\4,165 、、、恐るべしソースネクスト。
>>825
PhotoShopは高いからソースネクストの製品がいいよ。
つーか、俺の知り合いのPGも全員これ。
C使ってる連中は画面キャプチャ専用のプログラムを自作
するのが常識らしいが、VBAやVBのPGはこのようなツールを
使うのが常識。API使って作れないことも無いが、4千円
程度でこのような高機能なユーティリティが使えるなら
買う方が良い。
画面キャプチャは最近ようやくソフトウエアが
整ってきたからなあ。
アホか。シェアウェアなんて割れちまえよ
>833
ハゲ同
つーかMXやれよ
割れる気にもならん
>>833-836
お前等、痛すぎ。
>>833-836
マジレス恥ずかしーあはは?
839あの・・・:02/05/04 19:45
>>828
ありがとうござます!!
こんな良いソフトがあるとは知りませんでした(汗
さっそく買っちゃいました。マジレスして頂いて
ありがとうございますぅ!!日々精進です。
840ああぁぁぁ......:02/05/04 19:48
828はマジレスじゃないと思うのは俺だけか?
>>840
俺も。
その前に、「あの・・・」氏はマジ質問なのかな。
FindWindowかなにかでターゲットのhWndを取得して、
GetWindowDCでhDCを取得、
GetWindowRectでウインドウサイズを取得しBitBit、
ReleaseDCでhDCを解放。
書き写した画像を適当な方法で保存してできあがり。

…一応マヂレスしてみた。
844まとれす ◆mato/KTI :02/05/04 21:15
>>822
ほめても、何も出ないぞ(テレ笑

>>824
ほんとだ。ま、Array関数と同じ動きだな

>>825
[Alt]+[PrintScreen]して、ペイントにコピー、Officeをインストールしてれば、
gifで保存できる

>>843
まじめにやろうとすると、カーソルをどうするとか、半透明ウィンドウをどうする
とかって問題が出てくるな
845デフォルトの名無しさん:02/05/05 01:59
インターネットに接続された瞬間、切断された瞬間ってどうやって取得したら
いいでしょうか。
846デフォルトの名無しさん:02/05/05 02:18
>>845
外にping打ちまくる。
847845:02/05/05 02:24
>>846
バカ丸出し
848まとれす ◆mato/KTI :02/05/05 02:36
>>845
>>846の方法は、あながち的外れじゃないぞ

とりあえず、RASならWM_RASDIALEVENTをトラップすればよさそうだな。問題は、
LANなんだが・・・

LANの場合は、厳密な判断は無理だろう。ルータやプロクシがどうなってるか、って
ことになっちまうからな。それこそ、外にPingを打つとかで判断するしかない
>>846>>848
ありがとうございます。ちと調べてみます。
>>847
偽物氏ね。
おおアレテルな
いいぞ
厨スレらしいぞ
851デフォルトの名無しさん:02/05/05 05:41
質問です。グローバル変数は良くないってよく聞きますが具体的にどんなとこがやばいの?
折れいつも楽だからループカウンタ以外ほとんどグローバルにしちゃうんですけど。
ちなみにこんな質問するくらいのスキルです。
もしPGの仕事をしていたら殺す。
>>851
フォームにコントロールはっつけて使っているだけの
純な厨はそれほど深刻ではないYO
いいぞ、それでも
わかるようになったらわかる
今はイイ(・∀・)
854デフォルトの名無しさん:02/05/05 07:06
>>852
俺がプロPGなれるなら誰でもなれちゃうでしょ^−^;

>>853
そーですか、でも殺意を持たれるみたいなのでなるべく使わないようにシマス。
>>852
変数が多いと変数名がかぶって、考えるのがめんどいから
さらに、スペルミスで関係無い変数を参照してしまう可能性があるから
それを減らす為に長い変数名を付けると、タイプするのがめんどいから
それでも、バカなやつは間違えるから
856即レス:02/05/05 10:22
>>851
デバッグしづらいからだよ。

例えばグローバル変数に依存してる関数を呼び出す時は、
いつどこでそのグローバル変数が変化するかも把握しとかないと
いけないだろ?
ある程度でかいアプリなら、実際不可能だ。

#いかにグローバル変数がウザいかは
#ある程度規模の大きいアプリを作るか、複数の人間で
#開発してみればすぐ分かるよ。
テストさせてくらはい。
スレ汚しすまそ。
トリップ付きで!!
鬱だ氏脳
DirectSoundを使うとWAVEファイルがどうやっても8bit音声で出力される もうだめぽ。・゜・(ノД`)・゜・。
861VB初心者:02/05/05 22:14
質問です。
バリアント型がもつ「Empty 値」と「Null 値」。
これの内部的なビット並びはどうなっているのですか?
asc() で調べようとするとエラーになってしまいます。

また、Null 値はどういった用途に使うのですか?

よろしくお願いします。
862探索者&rlo;問質@&lro; ◆RXcNtpf. :02/05/05 22:16
質問でふ教えていただきたいんですが
TabStrip上で右クリックされたら、っていう判定はできますか?
それと、TabStripに何かをD&Dしてどのタブにドロップされたのかを
調べることはできるのでしょうか?
よろしくお願いいたしまふ。
>>861
Variant 型は、型情報 (2バイト) + その時の内容 の形で保存されてい
る。(Put ステートメント参照のこと。) だから、Empty 値の時は、
型情報が &h0000 になっているし、Null 値の時は、&H0001 になってい
る。(VarType 関数参照のこと。) より詳細が知りたければ、
Variant 変数を Put でディスクに書き出して、バイナリエディタなどで
見ればいい。
Null は、無効な値を示す時に使う。例えば、入力された文字列を返す
ルーチン等で、キャンセルボタンがクリックされたら Null を返すように
するなど。あと、データベースで連携の時にデータベースも Null 値を
持っているからそう言う時に便利。

>>862
> TabStrip上で右クリックされたら、っていう判定はできますか?
SSTab1_MouseDown() でできると思う。
> それと、TabStripに何かをD&Dしてどのタブにドロップされたのかを
> 調べることはできるのでしょうか?
マウスの座標値から判断するしかなさそう。
864まとれす ◆mato/KTI :02/05/05 22:59
>>851
「デバッグしづらい」は間違いじゃないがどちらかといえば「バグを起こしやすい」ってところ
かな。10個ぐらいのグローバル変数なら、何をやっているのか管理できるけど、100個になったら
無理。そのために、構造体を使ったり、クラスを使ったり、ローカルスコープに押し込めたりする。

これが「カプセル化」。オブジェクト指向でも出てくる重要な概念だから、きちんと把握しておいた
方がいいな

>>861
内部的な状態が知りたければ、RtlMoveMemory()とかでコピーして調べるしかない。
で、Null値は、データベースと一緒に使われるもので、「何も入っていない」状態を示している。
Empty()は、初期化されていない状態、だったかな

>>862
MouseDownイベントでとれるんじゃないか? もう一個の、どこのタブにドロップされたかだが、
結構面倒みたいだな。DropされたときのMouse位置から計算して求めることができるぞ
865まとれす ◆mato/KTI :02/05/05 23:00
>>864
うお。サンプルプログラム書いて試してたら、もろかぶった・・・鬱
866861:02/05/05 23:12
>>863 >>864
ありがとうございます。
そうか、データベースは思いつかなかった。
Pro*C でオラクル相手の仕事してるのに……(w
VB はユーザーインタフェース専門言語って思っていたので。
>>863
>>864
ありがとうございまふでふ。
D&Dの方は座標で調べるんですね。
とりあえずやってみまふわ。
でわでわ、、、
868デフォルトの名無しさん:02/05/05 23:51
サウンドを鳴らしながらフォームを移動させたいのですが
DirectXを使わないで良い方法ありませんか
869まとれす ◆mato/KTI :02/05/05 23:59
>>868
ん? PlaySoundとかでもできるだろ?
870デフォルトの名無しさん:02/05/06 00:12
これだと音楽鳴らしながらできるんですか。
いつもMDIコントロールとかいうのをつかってました。
それだと音が鳴り終わらないと次にいかないんですよね。
ありがとうございます。
871デフォルトの名無しさん:02/05/06 01:30
VBで変数の初期化ってどうやるんですか?
Booleanがたを宣言時にTrueにしたいのですが
872デフォルトの名無しさん :02/05/06 01:41
Dim temp As Boolean = True
>>872
VB.NETかよ!?
874デフォルトの名無しさん:02/05/06 01:56
>>872
それだと「ステートメントの最後」
とかいうエラーになるんですが・・・。
>>874
Dim temp As Boolean
temp = True

そのまんま。VB6までは宣言と同時に初期化はできない。(デフォルト値で初期化される)

Dim temp As Boolean : temp = True
とかできなくないけど、あんまり意味ない。
876デフォルトの名無しさん:02/05/06 02:15
>>870
非同期型のオプションを付けて鳴らせば、同時進行が可能。
877通りすがり:02/05/06 05:27
宣言:
Declare Function PlaySound Lib "WINMM" Alias "PlaySoundA" (ByVal pszSound as String,ByVal hmod as Long,ByVal fdwSound as Long)As Long

引数
pszSound:WAVEファイル名、またはリソース、またはメモリアドレス、vbNullStringなら演奏中止
hmod:ファイルの時0,リソースを使う時、実行モジュールインスタンスハンドル、
fdwSound:下記演奏動作指定フラッグ(組み合わせ可)
&H20000:ファイル指定、&H40004:リソースID指定、&H4:サウンドデータをメモリにロード <pszSoundに合わせる事
&H1:非同期再生、&H0:演奏終了まで戻らない
&H8:繰り返し再生
&H10:他に再生中なら実行しない

この関数の戻り値:エラーでないとき1 エラー0

Dim r As Long,WData() As Byte
WData()=LoadResData(リソースID、リソース定義名)
r=PlaySoundA(WData(0),0,&H1 Or &H4)

注:バイト配列に読み込んだ場合、配列の初期要素WData(0)は先頭メモリアドレスである

厨よ
わからないならむやみにAPIに手を出すな
VBどころかWINのクラッシュを招くぞ
ジャナ

DDSURFACEDESC2構造体の説明するかい?藁
879デフォルトの名無しさん:02/05/06 12:34
windowsXP + VB6.0なんですがFormプロパティの
BorderStyle = 0(なし)にしてもタイトルバーが
消えません
これって仕様?それともただの暴走?
win98のときはそんなことなかったのにあとほかに原因ありますでしょうか
>>862
過去ログにTabStripで右クリックのサンプルコードがでてるよ。
このスレか、一つ前のスレだったと思う。
881デフォルトの名無しさん:02/05/06 17:21
>>878
ゲーサロ野郎ハケーン!
882即レス:02/05/06 19:02
>>879
コードでやってるんならControlBox=Falseかつ、
Caption=""じゃないと消えない。

デザイン時にやってるなら今XPが無いから分からんな。
883デフォルトの名無しさん:02/05/06 20:43
>>864
ローカルスコープに押し込めるってどういう意味ですか?
というか他のモジュールで同じ変数を使いたいのでグローバルにしちゃうんですが、
どうすれば使わず済むんですか?
真面目に疑問です。教えて!
884デフォルトの名無しさん:02/05/06 22:18
「Visual Basic大全500の極意」って、
目次や索引のページ数がデタラメなだけだと思ってたら、CD収録の
サンプルまで中身がダメダメだった。
出来が悪いとかじゃなくて、プロジェクトファイルで存在しないフォーム
呼び出してたり。
改訂版出たら無料で取り替えたりしてくれんのかな?
改訂版の印税まで著者に入ったりしたらイヤだぞ。
そんなもん買ってる君にアーメン。
886山太郎:02/05/06 22:39
>883
他モジュールから参照したい場合は、プロパティプロシージャを通して公開すべし。
その変数がモジュールに依存しない、本当の意味でのGlobalなものでない限りは
グローバル変数化は極力避けるようにした方が無難だよ。

...でも、このへんの大切さは一度失敗してみないと分からないかもなァ。
887まとれす ◆mato/KTI :02/05/06 22:57
>>879
こっちの環境だと消えるぞ

>>883
パブリックにしない、ってことだ。逆に聞くが、どういう用途の変数をグローバルに
したいんだ?それを聞いてから、回答を考えることにするぞ

グローバル問題の直接的な解決ではないが、昔やった小ネタでは、

Type g
End Type

という構造体を作っておいて、グローバル変数をこの構造体のメンバーにした、
なんてのがあったな。スコープの問題はクリアできないが、プログラミング上の
管理はすごい楽だった。

あと、デバッグ用のフォームを用意しておいて、グローバル変数を全部その
フォームのラベルに格納したり。デバッグ時は、変数の値を見ることができるので、
すげー便利だった。もちろん、リリース時には非表示にするけどな

>>884
出版社に訴えろ。改訂版がでることは、まずないだろうけどな。売れ行きがよければ、
版を重ねたときに訂正されるかも。そのときは、著者に印税が入るな
888デフォルトの名無しさん:02/05/07 00:11
VBでネットワーク経由のプリンタへのポートを変更するにはどうしたら良いでしょうか。
Win98でいう、プリンタのプロパティ→詳細タブ→ポートという部分を変えたいのです。
---------
現在ポートは
    「\\ServerA\Printer」
になっていますが、
これを
    「\\ServerB\Printer」
にしたいのです。
---------
数十台のクライアント端末でこの作業をするので、自動化出来ればと思ったのですが…。
889888:02/05/07 00:15
追記。
あるプリンタ情報に「ポートの追加」→「それを使用」→「以前のポートを削除」と
出来れば良いのですが…。
ご存知の方おられましたらおながいします。
890デフォルトの名無しさん:02/05/07 01:21
皆さん長い間お世話になりました。
今回をもってVBを卒業させていただきます。
次回は・・・。
COBOLです。
892890:02/05/07 01:23
あ、C#始めました。
そして挫折しました。
>>888
>おながいします。
人にもの聞くのにふざけてやんの
>>879
メニューバーを出しているからだったりして…
うそうそおこらないでぐはっ
896まとれす ◆mato/KTI :02/05/07 01:53
>>888
ポートの変更ってのはやったことがないんだが、SetPrinterじゃだめなのか?

>>892
がんがれ。

>>894
>>888はそんなこと言ってないが・・・ 2ch初心者か?
897!894:02/05/07 02:16
>>889で言ってる。
おねがいしますよりおながいしますの方が気持ちがこもってると思う
899デフォルトの名無しさん:02/05/07 02:37
>>886
プロパティプロシージャを通して公開・・・の意味が分からないです・・・
すいません;

>>887
グローバル変数を構造体にまとめる、っていうのはいいアイデアですね。
今度から使わせてもらいます(グローバル使うなって・・・)

どういう用途の変数を・・・って質問ですが、
例えばrect型を10個くらい作って、最初に全部代入しておいて、Bltの時に使い分ける、という風にしてるんですが、
(一つのrectに毎回入れなおすのは処理の無駄な気がするので・・・)
その代入させる処理が結構長いので、フォームモジュールが長くなるのが嫌なので別のモジュールでやりたいんで、
仕方なくその10個のrectをpublicにしてるんです。
こんな感じなのでどんどんグローバル変数が増えてしまう・・・
どうすればいいんでしょうか?
900899:02/05/07 02:40
ちなみに883です。名前書き忘れました。スマソ
>>896

>888はそんなこと言ってないが・・・ 2ch初心者か?
あはは〜、言ってますよ。注意力が幼稚園児レベルだねえ〜。
>>899
10個のrectをクラスモジュールに入れればいいんじゃないの?

dim rect1 as class1
dim rect2 as class1

set rect1 = new class1
set rect2 = new class1

rect1.a=1
rect1.b=1
rect1.c=1



rect2.a=1
rect2.b=1
rect2.c=1


903もったいぶりアラシ:02/05/07 02:59
さあ厨達よDDSURFACEDESC2構造体だったな、メンドクセーナー
>>787>>788>>794 >>881これはどうでもイイ(´∀` )
Dim ddsd1 As DDSURFACEDESC2, ddsd2 As DDSURFACEDESC2
With ddsd1
.lFlags = DDSD_CAPS '●1
.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE '●2
End With
Set PrDDSurf7 = ObjDD7.CreateSurface(ddsd1) '●3
上記はVBのコード参考例
Type DDSURFACEDESC2
ddckCKDestBlt As DDCOLORKEY
ddckCKDestOverlay As DDCOLORKEY
ddckCKSrcBlt As DDCOLORKEY
ddckCKSrcOverlay As DDCOLORKEY
ddpfPixelFormat As DDPIXELFORMAT
ddsCaps As DDSCAPS2 '★1 構造体である下記参照
lAlphaBitDepth As Long
lBackBufferCount As Long
lFlags As CONST_DDSURFACEDESCFLAGS '★2 フラグ定数
lHeight As Long '★3 高さ
lLinearSize As Long
lMipMapCount As Long
lPitch As Long
lRefreshRate As Long
lTextureStage As Long
lWidth As Long '★4 幅
lZBufferBitDepth As Long
End Type
DDSURFACEDESC2構造体はサーフェイス作成のDirectDraw7.CreateSurfaceメソッドの引数だ
これでサーフェイスの属性を決めて作るわけだ、ウインドウモードでは★の部分だけ考えればよい
ではプライマリーの作成を説明しよう、プライマリーは実際の表示画面だ、これがなくてはD.Drawは意味がない
まず●1のようにlFlagsを設定しよう、DDSURFACEDESC2の他のメンバー設定が有効か決めるのだ
設定値は既に定数が用意されている
.lFlags = DDSD_CAPS これで★1のddsCapsメンバーのみ設定を認めるということだ、他のメンバーはデフォルト値が適用される
★1のDDSCAPS2構造体、これも構造体だ、これが初心者のわかりづらいところであろう
DDSURFACEDESC2構造体のメンバーにさらに構造体が含まれているのだ、よく考えりゃなんでもない
Type DDSCAPS2
lCaps As CONST_DDSURFACECAPSFLAGS '■1 フラグ定数
lCaps2 As CONST_DDSURFACECAPS2FLAGS
lCaps3 As Long
lCaps4 As Long
End Type
これがDDSCAPS2構造体だ、結局は設定すべきメンバーのパラメーターのみやればいいだけだ
●2の.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACEを見ればわかるように、こいつはプライマリーかオフスクリーンサーフェイスか決めるのだ、他にも組み合わせられるフラグ値はあるがこれでいい
さあこれでプライマリーのためのDDSURFACEDESC2構造体はできた
●3のようにメソッドを実行する、Set PrDDSurf7 = ObjDD7.CreateSurface(ddsd1)
このメソッド自体は戻り値として完成したサーフェイスオブジェクトつまりDirectDrawSurface7オブジェクトを返す
プライマリーは簡単だろ?、DirectX7SDKの日本語HELPぐらいもってるだろな?
ああメンドクセーまた気が向いたらな



















































































ちんこ
906まとれす ◆mato/KTI :02/05/07 03:06
>>897, >>901
>>889 で言ってるな。見逃してたスマソ

>>899
>>902の言うとおり、クラスに分けたほうがいいだろうな。
で、どっかで聞いたような名前だが、SetRect()なんてメソッドを用意してもいいし、
コレクションで公開してもいい

どちらにせよ、オブジェクト指向とかの最近のプログラミングメソッドは、パフォーマンスが
要求される処理などにはきつい部分がある。その辺は、トレードオフだな



























ちんかす












































































































































ki
sakana]



























>>903
sine




































む!
まとれす と オデのレスが アラサレテイグ
オマエ ユルサン
915もったいぶりアラシ:02/05/07 03:15
オレジャナイゾ!!
>>906
> どちらにせよ、オブジェクト指向とかの最近のプログラミングメソッドは、パフォーマンスが
> 要求される処理などにはきつい部分がある。その辺は、トレードオフだな
実際トレードオフを取るとパフォーマンス上問題がないことがほとんどという罠。
917883:02/05/07 03:24
>>902 >>906
実は漏れは恥ずかしながらクラスというものが理解できていません。
いいページ見つけたんで勉強しに逝ってきます。
http://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/
918もったいぶりアラシ:02/05/07 03:27
オフスクリーンもやるか アトデナ
厨よ、理解できないからってアラスなYO
これも理解できないんじゃHTMLのお勉強から逝け
>>918
SDKヘルプ嫁
削除してもらったほうがえぇんでないか?
921もったいぶりアラシ:02/05/07 05:59
>>919
MSDNHELPも読めない厨がSDKが日本語だろうとそれだけで理解できるわけないだろ
またSDKだけですべて理解できるやつがいたら2ちゃんには来ないわ(藁
基本的にSDKに限らず、リファレンスは英語のMSの出したままのほうが望ましい
それがわかってないうちは”厨”の定義は免れないZO
日本語リファレンスしか読まんやつは既成コントロール貼るしかできんぞ
ジャナ 新スレになったらまたオフスクリーンサーフェイスでアラシに来るぞ

922即レス:02/05/07 08:02
なんだかなあ。えらく荒れてるねえ。
GWだから仕方ないとはいえ。

>>899
まとれすも言ってるとおり、結局はスピードとどっちを選ぶか、になるよ。
1秒間に数十万回代入するならクラスなんか使ってちゃ遅すぎだし。
・祝日
・六曜
これを返すそれぞれの関数キボーヌ
924即レス:02/05/07 09:48
>>923
無い。
925デフォルトの名無しさん:02/05/07 11:23
String型にサイズ制限ってあります?
えらく長い文字列を入れても大丈夫でしょうか。
926即レス:02/05/07 11:33
>>925
特に無い。システムメモリは考慮しとき。
>>925
可変長文字列には、約 2GB (2^31) までの文字を格納することができます。
固定長文字列には、1 〜 約 2GB (2^31) の文字を格納することができます。
928即レス:02/05/07 11:56
>927
あ、ホントだ。悪りぃ。
929デフォルトの名無しさん:02/05/07 12:00
質問なのですが
Shell関数のCOPYコマンドを使って、複数のファイルを結合するプログラムを作りたいのですが。
例えば、C:\テストファイル にある test1.txt test2.txt test3.txt という3つのファイルを
 Res.txt という1つのファイルに結合するとき、

Dim DP As String
DP = "COMMAND.COM /C COPY C:\テストファイル\test1.txt + _
C:\テストファイル\test2.txt + C:\テストファイル\test3.txt C:\テストファイル\Res.txt"
task = Shell(DP, 0)

と書いても、taskのところでプロシージャの呼び出し、または引数が不正です、といわれてしまいます。

ショートネームに変換して
DP = "COMMAND.COM /C COPY C:\テスト^1\test1.txt + _
C:\テスト^1\test2.txt + C:\テスト^1\test3.txt C:\テスト1^\Res.txt"
と、やってもうまくいきません。

ドライブCの直下だと
DP = "COMMAND.COM /C COPY C:\test1.txt + _
C:\\test2.txt + C:\test3.txt C:\Res.txt"
うまくいくのですが、


なぜ、ショートネームにしてもうまくいかないのでしょうか?
プロシージャの呼び出し、または引数が不正です、といわれる意味がわかりません。

よろしくおねがいします。
VB6 SP5 で
標準のリストコントロールに文字列ぶちこんでるんですが
半角1024文字、全角512文字で切れてしまいます。
MSDNにはサイズ制限は特に無い、というように書いてあるのですが
やっぱり切れてしまいます。
MSDNが嘘で本当はサイズ制限があるんでしょうか?
自分の読み間違いでしょうか?
それとも.textプロパティとかが隠れた制限を持ってるんでしょうか??

リストボックスだと並べ替えたりの操作がラクなのデスが
切れるのが仕様だとすると自分でリスト構造(よくわかってない)を
なんとかしないといけないらしい。
931925:02/05/07 12:05
>>926>>927
それならOKそうです。ありがとうございました。
タイトルバーのないフォームでリージョンを作成し
必要な部分以外を透明にしたが、
領域外でフォームのイベントが発生しないようだ。
絵じゃなく文字なんでドラッグして移動するのに都合が悪い。
できればフックはしたくないが、どうすりゃいい?
933まとれす ◆mato/KTI :02/05/07 12:19
>>923
ない。祝日はテーブルで持つのが楽。六曜は、どっかにDLLがあったな

>>929
そのエラーが出るときは、ほとんどパスの間違いだ。ショートパスは "^"
じゃなくて "~" じゃないか?

>>930
まぁ、そんなものだろう。自分で管理するのが面倒っていうが、配列に
入れるだけでもいいし、リストボックスに文字列の一部を入れておき、
ItemDataで配列の要素と同期するって手もあるな
934まとれす ◆mato/KTI :02/05/07 12:21
>>932
そら、透明な部分はフォームじゃないからな。

リージョンを使わずに、フォームの背景に、その下の画像を表示するか、
マウスをキャプチャーしたらどうだ?
935デフォルトの名無しさん:02/05/07 12:36
VisualStudioのサービスパックの最新版って雑誌かなんかの
付録についていないんですか?
936デフォルトの名無しさん:02/05/07 12:39
>>まとれすさん
レスありがとうございます。
本当だ、”^”になってますね。
パスの間違いですか。
書き忘れてましたが、本当は、GetShortPathName()を使って、パスを取得してるのですが、

ショートパスに変換するにあたって、何か注意する点はないでしょうか?
あるいは、ショートパス特有のクセのようなものはあるでしょうか?

今から、パスを見直してみます。ありがとうございました。
937デフォルトの名無しさん:02/05/07 12:50
>>935
VBマガジン 2001,7〜11月号についてた。
938923:02/05/07 14:48
>>924 >>933
ありがとう。まっとうに算出するのはあきらめるよ。
939ムラタ:02/05/07 16:52
1分おきにPingを打ちたいんですがどうすればいいですか?
>939
丸投げすぎて、何が聞きたいのかわからん
一定時間おきに何かしたいならタイマーコントロール使えば?
941932:02/05/07 17:14
>>934
壁紙描画にするよ。それ以外の方法はめんどくさすぎる。Thanks!
942デフォルトの名無しさん:02/05/07 17:17
プログラムの中でメニューに項目を追加したい、
ブラウザのブックマークへの追加みたいな事をしたいのですけど、
どうすればいいのかさっぱりわかりません。おしえてください。
942
WIN32APIではInsertMenuItem()だが誤爆かもしれん。
944デフォルトの名無しさん:02/05/07 17:50
TextBoxに入ってる文字列のバイト数を高速に取得したいんですが、どうするといいでしょうか。
LenB(StrConv(str, vbFromUnicode))
で取得はできるんですが、これだとstrのサイズが巨大だとめっちゃ遅いです。
もっと高速に取得する方法はないでしょうか。
StrConv(str, vbFromUnicode))
946デフォルトの名無しさん:02/05/07 20:01
StrConv使うのやめれ。
947ななし:02/05/07 20:05

質問じゃなくて愚痴なんだけど(おいおい・・・)、MSDNのサンプルコードって、どうして手抜きで粗削り
(Variant使いまくりとか、マジックナンバー使いまくりとか、オブジェクトを.... As Newで宣言・・・
e.t.c.)なのが多いんだろ?

「わかっている」人がそうした点を踏まえた上で参考にするなら問題ないが、(批判力のない)初心者に
薦めるのはリスクが多過ぎる。(といって、ヘルプを読む習慣をつけさせなければ、厨房質問が増殖する
のが眼に見えてるし・・・・)

初心者を指導するコツを教えてください。
(やっぱり質問だった。(^^;)
948即レス:02/05/07 20:20
>>936
さっきやってみたら出来たぞ。
特に注意する点は無いと思う。普通のAPIと一緒。

>>942
インデックス使うなり。
コントロールを動的に読みこむのと一緒。

>>944
Unicodeなら文字数×2でいいが。
Shift-Jisならつらいな。

>>947
うーむ。俺はあんまり初心者を指導する立場にないのであれだけど、
やっぱ基礎は大事なので初心者本を3,4冊読ませてから実践で鍛えるような
感じがいいかと。その過程でMSDNの使い方を教えてやれば。

#ネットで調べるようにするはダメなの?
949942:02/05/07 20:21
Public Declare Function InsertMenuItem Lib "user32.dll" Alias "InsertMenuItemA" (ByVal _
hMenu As Long, ByVal uItem As Long, ByVal fByPosition As Long, lpmii _
As MENUITEMINFO) As Long
でした。
950即レス:02/05/07 20:23
>>949
?
APIじゃないと嫌なん?
951942:02/05/07 20:30
>>950 え、もっと簡単なやりかたあるんですか?
952即レス:02/05/07 20:38
948で書いてるのに( ´д`)

・メニューエディタで増やすメニューにインデックスをつける。
・増やしたい時に、LoadしてCaptionやらVisibleやら設定。

サンプルはネットに転がってるよ。一般的なやりかただし。
953942:02/05/07 20:41
Private Sub mnu_Smp_Add_Click()
Load mnu_DynamicMenu(Cnt + 1)
mnu_DynamicMenu(Cnt + 1).Caption = "メニュー項目" & Cnt + 1
Cnt = Cnt + 1
End Sub
でした。
954デフォルトの名無しさん:02/05/07 20:57
VB6 WinXP環境です

他アプリケーションを遠隔操作できるようなものはつくれるのでしょうか?
メモ帳に、Aが押された、とかそういう命令をVBアプリから送る方法のことです。
どのようなAPI等を、使えばいいのか教えていただきたいです。
SendKeys ステートメント。普通にやるだけなら、API はいらない。
956デフォルトの名無しさん:02/05/07 21:02
で、第二月曜はどうやって取得するのが楽ですか。
>>956
Weekday 関数使え。
958954:02/05/07 21:35
>>955
でも、Sendkeysでやるとフォーカスを持たせないとできないんじゃ?
先ほどのメモ帳のような例ならいいですが
もうちょっと複雑に、「あるボタンを押して」などの情報を送りたいときは
Sendkeysでは対処できませんし・・・。
>>945-946
VBは内部でUNICODEだから、strconvしないとLenBで正確なバイト数は取得できないんだよ。
例えば、
LenB("あいa")だったら、6バイトって帰ってくるんだぞ。
おかしいだろ、本当は5バイトだもんな。
これを正確にバイト数を調べたいと思ったら、strconvでvbFromUnicodeしないとだめなんだよ。
>>958
だったら、はじめからそう書けよ。こっちには、そっちの事情なんか
わからないんだから。
で、フォーカス持っていないアプリに Key 送りたいの ? そのアプリの
ウィンドハンドルは得られてるの ? また、「あるボタン押してなどの
情報」って具体的に何 ?
>>960
まぁまぁ、そうカッカせずに。

>>958
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t02.htm
↑ここ有名だけど参考になると思う。
>>959
おかしくないだろ・・・。君も書いてるとおり、VBだと内部UNICODEなんだから
「あいa」は正しく6バイトだよ。
Shift_JISなら5バイトだけどな。でも、日本語表現はShiftJISだけじゃない
からね。Unicodeでファイル保存して悪いことはないのだし。

んで、VB使ってる以上、API使うにしてもどーせShiftJIS<->Unicode変換は
おきる。あきらめてStrConvつかうしかないかも。
>>936
もう解決しているかもしれないが、COMMAND.COM には 128バイト以上の引数は
渡せない。VB は、Unicode だから、LenB(StrConv(DP, VbFromUnicode)) の
値が 128 以上だとそのエラーになる。

DOS 時代は常識だったが、いまやおばあちゃんの知恵袋みたいな知識だな...。
964デフォルトの名無しさん:02/05/07 23:19
今のVBの最新バージョンはなんていう名前ですか?
965404:02/05/07 23:32
>>964
「最新バージョンのVB」
966デフォルトの名無しさん:02/05/07 23:35
>>936
ディスクアクセスを若干高速化するために、
ショートファイル名を作らない設定にしてるユーザもたまにいるけど、
その場合はどうなるんだろ?

それが原因で正常に動かないインストーラも時々見かける。
967964:02/05/07 23:38
Ver6.0とかそういうの知りたいんですけど。
VB.NETり
969デフォルトの名無しさん:02/05/07 23:44
VBでCGI作れればいいなと思うんだけど標準出入力ってできますか?
970デフォルトの名無しさん:02/05/07 23:50
>>969
API使えばできるよ。
Googleで検索すれば、いくつか実例がヒットする。
971デフォルトの名無しさん:02/05/07 23:52
>>970
どもです。早速見てみます。PerlやCより楽そうですね。
972まとれす ◆mato/KTI :02/05/07 23:56
>>942
メニューアイテムをLoadしてけばいい。コントロール配列と同じだな

>>944
むずかしいな。lstrlen なんてどうだ?

>>947
それはプログラムを教えるものじゃなくて、メソッドやプロパティの使い方
を教えるものだからな。ちょっと早いかもしれんが、CodeComplete とか
読ませたらどうだ?

>>958
ウィンドウメッセージを送れ

>>963
それは環境依存じゃないか?

>>964
正式名称は、Visual Basic .NET 7.0 らしいな

>>969
Visual Basic .NETなら楽チン。それ以前なら、>>970が言うとおり、APIだな
ほぉぉ。さすが.NET!でも自分6.0なんでAPIでハァハァします。
975デフォルトの名無しさん:02/05/08 01:15
>>即レスさん
レスありがとうございます。
そうですか、即レスさんの環境ではうまくいきましたか、
俺のは何かがおかしいのですね、何かが、、、しらべてみます
ありがとうございました。
976975=936です:02/05/08 01:19
>>975=936です。遅くなりましたがありがとうございました。
クスッ
CGIができて喜ぶなんてカワイイ
厨らしいYO
HTTP1.1鯖作るぐらいやってみなよクスッ
自鯖用なら何もHTTP1.1なんてメンドーなもんやらんで
オリジナルプロトコルでオリジナルクライアント配布してやるとか
それぐらいの情熱はナイノカネー
まっだから厨なのか


CGI作りたいのに鯖作ったって意味ないでしょ。バカダネー
クスッ
CGIの意味がわかってない
オマエはヤッパリ、Perlの配布コードコピペで終わりミ゚Д゚,,彡
VBならASPの方がいいような気がする。
981デフォルトの名無しさん:02/05/08 04:49
>>979
ぶび厨が何を言う。
>>979
クスッ
日本語が理解できてない奴がいる。本当のことを言われてあせったんだね。
>>977
どうせネタかCGIと鯖の違いをわかってない真性バカだろ。
あいてにするだけ無駄。
おっ荒れてるな
いいぞ もめてこそ厨スレだw
なるほど
VBでCGIプログラムを作りたいのか
それはできるが
HTTPレスポンスわかってる?
アラシもそこを言いたいのだろうな
VB以前にHTTPがわかってるかどうか
高速化するならIISなど製品鯖使わず
VBCGIにカスタマイズしたHTTP鯖作るのも手だな
それをいいたいのだろう
まあ、またもめていいぞ。
>>984
ウザイ
口田氏するな
>>984
発言が意味不明。まっこれもアラシか。
>>977
最近ソケット通信を覚えた房だと思われ
ずぼしでも荒らすなよ
988デフォルトの名無しさん:02/05/08 08:11
盛りage
初心者スレを荒らすなよ...
990デフォルトの名無しさん:02/05/08 09:52
ForeColorプロパティとかに入ってる、
0-16777215の整数値を、RGBに分解したいんですが、
どうすればいいでしょうか。
>>990
取りあえず8bitx4に分割しなされ。
共用体とかあれば楽だね。
>>990
RGBは256*256*256って考えれば分解できるでしょ
し、新スレの話が出てないのはなぜだ??
9941000!:02/05/08 11:59
995デフォルトの名無しさん:02/05/08 12:31
禿
996( ´・∀・`)@28歳くん ◆7aTaLnPA :02/05/08 12:31
じゃじゃじゃじゃーん
あひゃひゃひゃ!!
大名レース
殿様競輪
>>999
馬鹿
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。