1 :
デフォルトの名無しさん :
02/04/14 23:35
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
>>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の領域外を
右クリックした時は無視するようにてる模様。
…腐れてるなぁ。
>>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 テーブルをセルに表示する方法がわからんけど頑張ります。 Do Until rs.EOF vaSpread1.Row = vaSpread1.Col = adoRecordset.MoveNext Loop こんなのが入ると思うんだけど
mdbファイルにADOでアクセスして レコード追加、レコード削除を繰り返すとレコード数が少ないにもかかわらず mdbファイルのサイズがどんどん大きくなるんですが、こういうもんなんですか?
>13 そうだよ。 だからあるタイミングで最適化するようにしとかないといけない。
vaSpreadとかいうコントロールを追加してやってます 助けて下さい・・
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 #テストしてないよ
あー ごめんなさい 途中から変数名間違えてました。死んできます
むずかしすぎます・・ >19 ありがとう
>15 さんきゅ。 検索したらJROってのが出てきて試してみた。 そしたら最適化できた。 最適化ボタンでも作っておきます。
>22 最適化時にファイルが壊れる事がタマーにあるんで、保存してからがいいよ。
>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 ありがとうございます。
じつはそのコマンドの使い方がわからないのです。
よかったら使用例を書いてもらえませんか?
>>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"
>>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
>>32 ご丁寧にありがとうございます。
これで今作ってるアプリケーションが完成に一歩ちかづきました。
36 :
デフォルトの名無しさん :02/04/15 22:25
(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・) 31はどんなアプリケーションを完成させようとしているんだろう・・・ (・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)(・∀・)
>>36 画像を整理するアプリケーションです。
マウスを使わずに矢印キーでフォルダ内の画像を全画面表示で次々表示して
気に入った画像はフォルダへ、
要らないのはゴミ箱へという感じのを作ってます。
フォルダに移す際、押すコマンドボタンによって移動するフォルダが選べるようにしてます。
command1押すとc:\winnt、command2を押すとc:\windowsという感じです。
コマンドボタンはF1とかF2を押すことで同じ効果があるようにしました。
もちろん移動先フォルダは任意に設定できます。
こんな感じです。初心者にはこれが精一杯。あはは。
38 :
デフォルトの名無しさん :02/04/15 22:45
エロ画像の整理か、大変だな。
正確にはエロと非エロの分類分けだったりする‥。
40 :
デフォルトの名無しさん :02/04/15 23:04
>>37 先が別ドライブだと、コピーになっちゃうよ。
41 :
デフォルトの名無しさん :02/04/15 23:05
それなら Private Function Ero(Filename As String) As Boolean みたいな関数作った方がいいよ。
>>40 移動先が別ドライブだと移動ではなくコピーになってしまうのですか!
うむむぅ。
>>41 その命令は私の理解を超えています。
明日ヘルプとか見て解読してみます。
>>42 例外処理(エロかグロか区別がつかない、ホモ画像だったとか、・・・e.t.c.)は
ちゃんと書いてください。
>>43 ご丁寧にありがとうございます。
モザイク無しからタテスジ、妊婦画像までありとあらゆる例外処理をしますのでご安心を。
45 :
デフォルトの名無しさん :02/04/15 23:44
>>42 コピーに成功したことを確認してから、元ファイルを削除すればオッケー。
Winのドライブ間移動だって、やってることはこれと同じ。
VBでプリンタデバイスを制御したいのです。 1.紙面へのGDI描画 2.複数枚数 3.フォントを切り替えながらテキスト出力 どんな表現で行うべきなのでしょうか?
47 :
デフォルトの名無しさん :02/04/16 00:45
>>46 その程度はデバイス制御とは言わない、ふつう。
ただの印刷。
まず、MSDNで「印刷」を調べてから、再質問。
一瞬組み込み屋さんかな、とも思ったけど VBでデバイス制御、っつってる時点で違うか。
49 :
デフォルトの名無しさん :02/04/16 01:56
>>46 そんだけの説明だと
Printerオブジェクトで十分じゃないのとしか言えない。
うむ。 せっかくVBにはPritenrオブジェクトという便利なものがあるんだから活用シヨーウヨ。
Pritenr→Printer タイプミス
52 :
デフォルトの名無しさん :02/04/16 05:33
WebBrowserコントロールのDocumentプロパティ使いたいんですけど、 strHtml = WebBrowser.Document.all.innerhtml ってやってもできないのは何故? オブジェクトがありません言われるけど、ヲッチするとあるんだよ〜(;Д;)
53 :
デフォルトの名無しさん :02/04/16 05:35
54 :
デフォルトの名無しさん :02/04/16 08:35
MsFlexGridコントロールで、 2行に一度、境界ラインを太く(濃く描画)するという方法をご存知の方、 教えていただけないでしょうか。 いろいろ試してみたのですが、全行が変わったりするので 悩んでます。よろしくお願いします。
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するなりしてがんばれ。
>>57 早速のレスありがとうございます。
なるほど、そういう方法も有るんですね。
そのアイデアも踏まえて、もうちょっとがんばってみます。
ありがとうございます。
>>61 サブクラス化について勉強してみると得るものがあるかもしれん。
>>62 サブクラス化って、どんなメッセージがあるか(そして、それがどのWindow相手に
適用できるものなのか)把握しないと、使いこなせないのよね・・・。
(当り前やけど)
と、ツッコんでみるテスト。
>>56 関数ポインタは使えないよ。あきらめな。
>こんなん見つけましたが
一応理論上は間違ってないし、俺も似たようなことしてるw
でもVC++使うのが一番正常な人間だと思うぞ。
>>56 ActiveX DLLを使用して作る。VBのアドインとかもこの方法だ。
適当に説明すると
1.プラグインのインタフェース用クラスを作る
2.インタフェースをImplementsしたクラスを作る。
3.このクラスをActiveX DLLにする。(これが一つのプラグイン)
4.プラグイン対応プログラムからActiveX DLLのクラスのインスタンスを
CreateObjectで作成しプラグインインタフェースにキャストして使用する。
手抜きしたいのなら、インタフェースを作らなくても
実行時バインディングで実装可能。
>>64 ないんですか…残念。
>>65 ActiveXは使ったことないので気付きませんでした。
DLLはVCで作ろうと思ってたんですが…
ちょっと調べてみます。
レスくださった方々、ありがとうございました。
>>66 DLLはVCでActiveXでないDLLだったのか?
てっきりVBだけで作るものだと思っていた。
もちろんVCでもActiveXは作れるからさっきの説明の
プラグインの部分をVCで実装すればできる。
どうしてもVCのプラグインをActiveXでないDLLにしたいのなら、
プラグインのDLL名を同じにしてプラグインごとにフォルダを分けて
Declareで宣言して環境変数のPATHを実行時に変更することで出来ないかな?
やってみたこと無いし、変な方法だけど。
>>66 プラグインに対応って、要するにSusieプラグインを使いたいとか、
そういうことじゃないの?
プラグインも作れます、ならVC系で普通のDLL作らせるほうが一般的だと思う。
こちらの事情を書いてなかったので混乱させてしまいました。失礼。 既存のプラグインを使いたいというのではなく、 VBで作っているオリジナルのソフトにプラグイン機能をつけられたらいいな〜と おもって聞いてみた次第です。 途中まで作っちゃったのでVCで作り直すのも面倒だなあと…
最近VBの勉強を一通り終わらしたのですが,参考書やりつくしたので ここにすんでおられるプログラマーの人何か初心者が考えたらわかる程度の 問題作ってください.では
>>71 簡単なWebサーバ作ってみるってのはどう?
初心者が考えたら分かる程度か、というとちょっと辛いかと思うけど、
いろいろ応用できて楽しいよ。
自作ソフトのフロントエンドにブラウザ使うって用途にも使えるし。
74 :
デフォルトの名無しさん :02/04/16 16:22
>>71 よし!ねぼうしがちなプログラマーにVB6.0かVB.NET目覚まし時計を作ってあげるとよろこばれるぞ
ソースもできれば欲しい
>>58 ga-n
orettigakotaetetanonikiduitekurenakattanone
samisi-
76 :
デフォルトの名無しさん :02/04/16 22:39
質問お願いしたいのですが。 フォルダのパスから中のファイルの名前を取得する方法 サクッと教えてください。 おねがいします。
dir
>>53 その言葉、そっくりそのままオマエに返してやるさ。
オマエの国じゃ何か?
「ふつうは言わない」=「絶対言わない」なのか?
「不適切表現の指摘」=「説教」なのか?
それじゃ仕方ないな〜
79 :
デフォルトの名無しさん :02/04/16 23:17
DoCmd.TransferTextでCSV形式で出力したのですが、 出力したファイルの一行目がテーブルのフィールド名なのです。 これを無くしたいのですが、どうすればよいのでしょうか。
>>77 えっと、俺へのレスでしょうか?
それなら、ありがとうございます。
ちょっとややこしいのですが、フォルダのパスまでがわかっていて、
その中のファイルの名前かパスを取得したいのです。
ややこしくてすいません。
自己解決しますた。 お騒がせしますた。
>>80 むっキー
dirって書いてあるんだからヘルプでdir引いてみろよ
まったく最近の餓鬼は
>>76 >質問お願いしたいのですが。
って表現、日本語として変だから、VB覚える前にデバッグしてね。
んで、アドバイスだけど、Dirって、再帰呼び出しするとパニクると
思うので工夫してねー。
最近 幼虫うまいんだ あまーいんだ とってもね けど あげないよ ぼく 甘党だからね
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 プロパティが怪しいぞ。
調べてみるといい。
>>91 むむ、今ちょうど調べてるとこでした。
レスどうもです(^^
>>90 フォームの姿が分かれば良いなら
開発環境の「ファイル」→「印刷」
で表示されるダイアログでの「印刷対象」で
「フォーム」だけにチェック入れて印刷すれば?
画質も適当にセットして
プロジェクト中の全部なら、左側で
「カレントプロジェクト」にチェックを
実行中でないとダメなら
Alt+PrintScreen キーからだろうな。
#つーか、これじゃWin初心者じゃん?
>>87 Form2 の Load イベント内のコードで Form1 上のコントロールを操作
しているようなことはないですか?
95 :
デフォルトの名無しさん :02/04/17 02:30
質問です VB6ですが IEのように メニューバーをCoolBar上に置くのは無理でしょうか? せっかくCoolBarあるのに VBではサポートしてないのかな…
>>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
>>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
>>102 Unloadしていないんです…。
ただ,さきほどの
>>94 さんのお話を受けて,Form1のwinsockコントロールの
プロパティをForm2から読み出すのをやめてみたら,Form1のLoadイベントの
二重発生はとりあえずなくなったようです。
よくわかりませんが前へ進むことができそうです。ちょっと不安ですけど。
ここへ来てよかったです。どうも本当にありがとうございました。
>>105 ネちゃったね
>>102もねたかい? 解決したよな しないよな もどかしさw
107 :
87, 105 :02/04/17 04:22
>>106 起きておりますよ。コーディング中。
結局原因は不明のままですが,ちなみにLoadイベントが2度目に起きたときには
グローバル変数もなんだか初期化されていたんです。
ようするにおなじForm1が実際に2つ立ち上がったようなかんじでした。
なんだったんだろうなあ。
>>107 どこかにNew From1って書いてないかい?
>>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
>>83 失礼しました。
DIR関数はパスからのファイル名やフォルダ名を返すものだと思ってました
フォルダからはファイル名が取得できない、と思ったら、ワイルドカード使えるんですね
ありがとうございました。
なにげに34の答えが無視されまくりだな。
↑ そういわれて何気に最初から読んでたら 34前後のエロ画像整理アプリの話にちょっとワロタ
ボタン押したら他のフォームが出てくるように したいんですけど、どうしたらいいですか
>>108 書いてなかったです。
>>109 Form2_LoadでExit Subでは即終了にはなりませんよー。
ありがとうございます。 パラメータって意味を 噛み砕いて教えて下さい。
>>118 Form_Load にブレークポイントを設定して、呼び出し履歴を確認してみては。
122 :
33=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
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にはいつ代入されているのか・・・ハァハァ
.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」「初心者」「データベース」が
付いてる本選んどき。
>>130 >>131 いいのか悪いのかわかりませんが、IrfanView で「.bmp → .gif → .png」と
全部出来ちゃいました(w
.bmp や .jpg から .png を作りたかったので、とりあえず目標は達成できたと(w
あとは VB 側から IrfanView を操作して一連の作業を自動化したいんだけど、できるかな?
>>126 仕様書工房シリーズは仕様書作成に時間がかかります(あたりまえか)
関数、変数などの情報から呼び出し順までいろいろ書いてくれます。
関数の仕様やコメントを入力する機能が糞でストレスがめちゃめちゃ溜まります。
全部のフォームのスクリーンショット取るために起動されるVBがかわいそうです。
>>119 サブルーチン(関数)呼び出しで、呼び出した側がサブルーチンに渡す情報のことをパラメータという。
例えばタクシーの運転手に「東京駅まで」て言ったきは、その「東京駅まで」というパラメータを運転手に渡している。
こんな説明じゃダメ?w
136 :
デフォルトの名無しさん :02/04/18 06:37
VBのメニューエディタが使いづらいんですが、何かいいツールとかないですか?
>>128 テキストボックスにはhh:nn:ss形式でユーザーが入力して欲しいです。
なんかコードだけだと良くわからないですね・・・
>>127 動作確認してみたぞ。
基本的な機能を作り終わったという感じだな。
あとは肉付けして人が朝に起きれるぐらいの物に発展させていこうじゃないの。
起きれるは起きられると書きなさい。という突っ込みは無しだぞ。
>>127 目的時刻に重たいアプリが1秒以上タスクを占有すると
アラームが鳴らない可能性がある罠。
対策はいろいろバリエーションがありそうね。
>>122 ですが、
「"C:\Documents and Settings\Administrator\デスクトップ\foo.txt" "C:\Documents and Settings\Administrator\デスクトップ\bar.txt" 」
という文字列を、「" "」でsplitして、なおかつ最初と最後の要素について、左右の「"」を取り除く作戦で
いこうかと思います。
ただ、以下が本題ですが、「「" "」でsplit」する方法がわかりません。
strArg = Split(Command(), "\" \"")なのかなと思ったのですが、エラーになっちゃうんですよね?
どうすればいいんでしょう?
板違いな質問(確信犯)ですが、C言語でVBの動的配列(ReDim)に相当するものは作れる のでしょうか? もし、できないとすると、別のデータ構造(リスト等)を使うしかないでしょうか?
142 :
デフォルトの名無しさん :02/04/18 13:43
143 :
デフォルトの名無しさん :02/04/18 14:15
>>141 連続したメモリに置く場合は、メモリの確保→コピーで作れる。
C++とは書いてないのでオブジェクトの動的配列・STL等の使用は考慮外。
145 :
デフォルトの名無しさん :02/04/18 14:33
VBでDOSのnetstaの実行結果を所得することは可能ですか? また可能なら方法を教えてください。
146 :
デフォルトの名無しさん :02/04/18 14:56
>もし、できないとすると、別のデータ構造(リスト等)を使うしかないでしょうか? なぜリスト構造知っていて動的配列を知らないの。 malloc, reallocは可変長配列を使用するときに使う。
>>144 >>146 コメント、ありがとうございます。m(_ _)m
厨房質問は、やはり恥ずかしいので、勉強して出直して来ます。
質問させて頂きます。 今までVB5Proを使っていたのですがこの度VB6にしたのです。 が、VB5で既に作ってあったプロジェクトを読み込んで、実行すると str関数の所「nas.caption = str(reftext.text) & str(refnum.text)」でエラーになる。 「コンパイルエラー:プロジェクトまたはライブラリが見つかりません」と。 VB5Proの時にはちゃんと実行できていたのですが・・・。 そしてStr以外のところは全く問題無くコンパイル、実行できます。 どういうこと??長文スマソ
>149 参照設定開いて頭に「Visual Basic」ってついてる奴を入れる
>>149 +でやらないで&で文字列を繋げばstr関数いらないんじゃ?
気のせいか?だったら逝ってきますが何か?(w
∧,,∧ / ̄ @,,,ミ,,゚Д゚彡 < 質問スマーソ ⊂,,,,,,,,,つつ. \_ VBで、画像を画面に描く事なく メモリ上で描いて、ファイルに書き込むような プログラムってどうやってかくですか? 教えてくださいまし。VB6です
すいません、わかりません。
∧,,∧ / ̄ @,,,ミ,,゚Д゚彡 < 動的にImage1かPicture1を生成して ⊂,,,,,,,,,つつ. \描いてファイルに書いて 破棄しちゃったりしたらよさそうなんだけど… 具体的なコードがかけないの…シクシク
>>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 VBの範疇でやるには、PictureBoxをVisible=False、AutoRedraw=Trueで
生成して、それにLineとかで書き込み、SavePicture Picture1.Image,"hoge.bmp"
でファイルに保存すればok。
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,゚Д゚ミ < デバコンテ感じ。
ミ ミ \__
〜ミ,UU_ミ
http://www.aqube.pos.to/fly/vb/graphic2.html ここ見て勉強中っす。
どやたら、これをメモリ上だけでファイル書き込みなどが出来ますの?
隠れたFormとかは使えないの…(使えるかもしれませんが…)
単なるActiveXDLLのメソッドとして画像ファイル生成処理を
ageなければならんもんでして…
>>152 CreateCompatibleDC
CreateCompatibleBitmap
SelectObject
GetDIBits
SetDIBits
BitBlt
DeleteObject
DeleteDC
とか使えばできるのでは?
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ;゚Д゚彡 < PictureBoxの生成コードがわからんでし… ,;゙ ミ \_____________ ミ. ミ ゴメンナサイゴメンナサイ /゛゛゛゛ PictureBoxはFormに貼り付けないでも生成できますか? ActiveXDLLで、ASPのVBSからコールしたいのです。 だから、普通のFormに依存することが出来なさそうな雰囲気。 (いや、実はよくわかりませんです)
>>134 なんだか使い難そうですね。
購入考えてたけど止めておきます。どもでした〜。
MSDNの契約?使用?料ってかかるんですか?
>>160 Form必要だね。
Formが作れないなら、VBの範疇じゃ無理なので
>>159 に出てきてるAPI使って
やるしかない。API使えばできるよ。
ついでに俺も質問。 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
で、仕様書出力のためのコーティング修正時に致命的なバグが・・・(以下略
>>165 >>166 そこまで冷笑されながらわからなかったYo!
何だ!?何なんだ!?GetTextか?
いや、、、もしかしたら俺がやってることが特別なのかもしれん。
どういう事かっていうとだな、俺は今hotmailの垢取りツールを作ってんのよ。
もちろん練習兼ねてだけどな。
んで楽するためにWebBrowserコントロールを使ってる。
そんでWebBrowserの表示URLをhotmail登録のURLにするだろ。
これでWebBrowserコントロール内に登録フォームが表示されてる状態。
SendKeys "{TAB}"で最初の入力欄にフォーカスが行って、
そこであらかじめTextBoxからクリップボードに入れたテキストを
SendKeys "^V"とやって入力欄に貼り付けようとする。
失敗する。
これだよ。
>>170 仕様書作成ツールってさ。プログラム解析ツールと改名するべきだよな。
もしくは、仕様書捏造ツール。実際の用途はそのように使われているだろ。
仕様書ってなんだよ?
プログラムを作成するための仕様書を作成するためのプログラムを作成するための仕様書を作成するための・・・
原因として俺の腐った脳で考えれたのは ・WebBrowserコントロール「自体」にSendKeyしてしまって、 入力フォームにキー入力されたことになってない? って事だけ。
>>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は小文字じゃなきゃダメだった記憶(経験)が・・・
出来たっ! サンクス178!何故かわからんけどそっちをコピペしたら出来た・・・! 感謝すぃます!
180 :
デフォルトの名無しさん :02/04/18 23:41
>>9 >>95 基本的な方法としては各ボタンにTBSTYLE_AUTOSIZE スタイルをセットしるだけ。
すると文字の幅に合わせてボタンの大きさが変わる。
よって、フラットスタイルにしてクリックしたときの処理を上手くまとめればOK。PopupMenuとか使って。
ただ、漏れにはボタンにスタイルをセットする方法がわからない。いろいろ試したんだけど、どうもうまくいかない。
どうすればいいんだ ヽ(`Д´)ノ ウワァァン
たれか教えてください。Delphiだと簡単なんだけどなぁ。
もしかして簡単だったりして。わるれてるだけかな?
>>180 あ、一応ツールバーコントロールをクールバーに載せるって事で。わるれてました。
>>160 元のデータはどこにあるんだ?
デバイスコンテキスト?自分のメモリ?PictureBox?
それによって処理が変わるぞ。
”ツール”じゃなくて”メニュー”をクールバー上で〜 IEの一番上のだよ TEXTだけのやつだよ VBのツールバーエディタはバカでイメージがなくても、その分の余白つくって しまう。結局ダミーの1x1のイメージでごまかす こんなの正当じゃないよ それは 別として まとれす 最近来ないねw (´∀` )
>>95 ツールバーでメニューを作るんだよ、頼ってばっかのバカちん!
>>173 んー。名前はどうかね。
しかし、仕様書生成ツールなんて、はっきり言って不要よ。
ツールでちゃんとした仕様書が出力されるように糞なコーティング
ルール作って強制するなら、んなもん使わんでも済むように設計時
にしっかりした仕様書作成するほうが絶対にイイ(・∀・)
まぁ、納品ドキュメントの「格好」として利用する場合もあるかも
しれんが、「格好」だけなんだから、製品を購入する必要はなし。
フリーも多数あるんだから、それで十分でしょ。
>>185 だからVBのじゃできないっていってんじゃん、アホチン!
ニッケイ良く読め
>>188 ヤッテミナ
テキストだけだと 変だから
エディタの仕様が悪いらしいw
>>189 確かに、テキストだけは変
だから、ボタンのビトマップを、絵ぢゃなくってテキストにして
作成したりしてたんですが・・・・ダメ?
結論として、VBでもできる・・・・だと思うのだけど、ダメ?
>>187 それって何かの記事?
>>190 それって何かの記事? <いや 意味はない(´Д`;)
192 :
デフォルトの名無しさん :02/04/19 07:20
193 :
デフォルトの名無しさん :02/04/19 10:23
OLEDragDropについての質問なのですが OLEDragDropが有効なコントロールが2箇所あって、 その2箇所とも同じ作業を行いたいのですが、 その一方に File1_OLEDragDrop と書いてやっても引数がうまく渡せないので、うまくいきません。 今はコードをコピペしてるのですが、もっとうまい方法ないでしょうか?
>193 出来るぞ。DataObject渡してるか? 自作の関数で引数にDataObject取ればすむ話だ。 同じコントロールならコントロール配列にするもよし。
VBでデータベース処理ができるようにVBとSQLの勉強をしておりどちらもある程度 知識がついてきたので就職しようと思っているのですが、実はネットワークの知識が 殆どありません。これだとやばいですか?
>195 就職先による。 時間があるなら勉強しとき。
197 :
へっぽこ野郎 :02/04/19 11:47
TAPIを使ってパソコンから電話をかけて相手側に音声放送をするような プログラムを作りたいと思い、TAPIの資料をあさっているのですが なかなかよいものがみつかりません。 何かよいサイトなどありましたらご教授おながいします。
>195 ネットワークの知識つーても広ぅございますので... 新人として入るなら、小規模LANが組める程度で十分じゃないか。 欲を言えば、セグメント分けたネットワーク構築まで出来るとイイ。
>>200 ありがとうございます!早速しらべてきまっす
>>194 即レスありがとうございます。
自作の関数とは
Public Function DragDropList1(Data As DataObject)
という関数を作って中身をコピペすればいいんですよね?
結果は、うまくいきませんでした。
ありがとうございました。
,,,,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < もとデータは自前で描画するのです
>>182 UU"""" U U \_______________
レスくれた方々、サンクスコ
とりあえず、
VBS >>呼ぶ>> VBのActiveXDLL >>呼ぶ>> BCBのDLL(描画する機能)
という、世界の終わりっぽい逃げで
一応作ってます…今のところ…
ああ、デスマーチデスマーチ
株価チャートみたいに
Webアクセスしたら動的に画像を見たいだけなのに…
>>202 うまくいかないのに、ありがとうございましたか。
なんか違和感あるな。もうどうでもいいのかな?
関数と自分の書いているコードの意味がわかればちゃんとできるはずだが。
>>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 嫌味なんじゃないか?
ちょっとワラタが。
>>205 レスありがとうございます。
うまくいきました。なるほど、こういう使い方をするのですか。
ところが、また問題が、MSFlexGridにドラッグしたいのですが
型がMSFlexGridLib.DataObjectとなっているのでListBoxと型が合いません。
むむむ、、、
ありがとうございました。
>>204 自分がうまくいかなくても、レスをもらったのだから、その意味で
ありがとうございました。です。まあ、読み返してみたら、確かに変ですが。
(追記)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ファイルを 棄てたり移動させたりしようとすると、 「ウィンドウズが使用してます。」 と表示されます。 なにが原因だと思われますか?
>>210 終了しきってないから。
君がするべきことはコードの見直し。
遅レスすいません
>>148 さんありがとうございます。
自分自身で使用ならそれで事足りそうですが、できればVBのみで
netstatの結果を使用したいのです。
DOSコマンドなのでnetstat自信の使用は可能だったのですが、
情報を取得がうまくいかないので・・・
他の方法は何かご存知の方いらっしゃいましたら、ご教授願います。
>>207 おお、ありがとうございます。
うまくいけました。
これで中身をいじったあと、コピペすることがなくなりました。
うっかりミスもなくなりそうです。
ありがとうございました。
214 :
デフォルトの名無しさん :02/04/19 18:54
この質問をここに書くべきじゃないかもしれませんが、 実は今、VBでサウンドプレイヤーを作成しているのですが 再生したい曲の、曲名や、アーチスト名、曲の長さ等を 取得するには、どうしたらいいでしょうか?
レコード会社
起動している任意のアプリを最小化したいのですが、、 どうしたら良いでしょうか?ライブラリーを探してみたのですが判りませんでした。。 又、sendkeysでWindowsロゴキーを送信する事は出来ないでしょうか?
>>216 APIのCloseWindowを使う。
218 :
デフォルトの名無しさん :02/04/19 20:54
Windowsのタスクバーに表示させなくしたいのですが、どうしたらいいでしょうか? 設定のフォームを普通のForm2で作ったんですけど、 普通、設定のフォームは普通のフォームじゃなく、何か別のフォームを使って作るのでしょうか? おねがいします。
vbmodalで表示させるか、showintaskbarをfalseにすればいいんでないの?
>>219 ありがとうございます。サクっといけました。^^
皆様に教えていただきたいのですが、タイマーってどういうときに使いますか? 私が教えていただきたいのは、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ラインごと描くのに いいだろ
遅い処理が わざと 必要なときだな あいまいで もちろんいいわけだ
タイマーコントロールで 何か正確な 時間を 量るのは ムリ
225 :
Name_Not_Found :02/04/19 23:56
CやVBには仕様書工房とかの自動生成ツールがありますけど、 VBscriptも仕様書を自動生成してくれるツールとかないですか?
224が 句読点を 使うのも ムリ
>>214 そんなもん、扱うファイル形式による。
それぞれのファイルフォーマットについて研究せよ。
そもそも情報があるとは限らないよん。
228 :
デフォルトの名無しさん :02/04/20 00:33
>>221 ゲームでは、ほとんど使う。
業務系ではあまり使われないが、無人=自動処理をするときは必要。
皆様の言葉、ありがとうございました。 他の方もよろしければいつでも書いてください よろしくお願いします。
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
下記のような 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
CRC16/CRC32を計算するにはどうしたらいいですか? フリーのDLLを呼ぶのはなしで自前のコードを書いてみたいです。
236 :
デフォルトの名無しさん :02/04/20 04:08
>>235 CRC16は、x^16 + x^12 + x^5 + 1 の剰余
CRC32は、長いので省略
VBでやるとたぶん激遅だけど、やってみるよろし。
xって何を表してるんですか?
238 :
デフォルトの名無しさん :02/04/20 04:27
>>237 想像できない?
まず、1バイトのファイルを作って、CRCツールの結果と比較してみる。
次は、2バイトファイル。
そういう探求心が必要。人に質問する前に。
諒解です。ありがとうございました。
240 :
デフォルトの名無しさん :02/04/20 12:02
LabelにあるディレクトリまでのPathを入れようと思ったところ、 「Documents and Settings」 みたいに勝手に2行に分かれてしまって困ってます。 Labelにはマルチラインプロパティみたいなものも無いしどういうことですか。
>>240 AutoSizeとかWordWrapいじくってみたら?
242 :
デフォルトの名無しさん :02/04/20 16:02
ある関数を使って計算させるプログラムを作りました。 そこで、プログラムそのものを効率良く・無駄なくしたという前提で、 さらに計算ににかかる時間を少なくしたいのですが、一般方法として どのようなものがありますでしょうか? ご教授いただければ幸いです。
244 :
デフォルトの名無しさん :02/04/20 16:08
>>243 それ以外で。
なんと言ってもEXCELは使いやすいもので。
業務ではEXCELは欠かせないのですよ。
速いCPUに変える。
246 :
デフォルトの名無しさん :02/04/20 16:12
>>245 EXCELでって言ってんだろーがー!!!
だからこうやってVBスレに書き込んでるんだよ。
ったく人が下手に出てりゃふざけやがってよ。
>>246 「プログラムそのものを効率良く・無駄なくしたという前提」なら
これ以上どうしようもないのでは?
本当に無駄がないのかはしらんが。
MS Word のように複数ページをスクロールして表示するにはどうすりゃいい?
249 :
デフォルトの名無しさん :02/04/20 17:05
>>246 マイクロソフトに入社して、もっと効率のいいAPIを開発するか、
あんた自身のスキルアップのために大学院に入ってアルゴリズム
の研究をした方がいいよ。
>>249 2chに救いを求めるようなアフォに研究生活は無理だと思われ
>>242 無駄をなくす。最終的には速さはこれしか影響しない。
具体的な方法は、
○アルゴリズムの見直し
○Variantを使用しない
○APIが使えそうなら使う。
○ループの中の見直し
こんな感じ。(ホントはもっとあるけど割愛。)
上のものほど速くなる。
>246
2chのネタぐらいで切れるな。2ch初心者かい?
>>248 あれは自前で描画してるが。
どっかにそれ専用のコントロールでもあるかな?
253 :
デフォルトの名無しさん :02/04/20 17:37
>>249 PCそのものが1年くらいの経験年数。
>>250 うるせー
>>251 ありがとう。
ちなみに切れた振りしてるだけ。
最初はボケにつきあってたのさ。
>>252 少なくとも一時間以上。
計算量が多いってのもあるけど。
>253 ありゃ、そうなのね。 ボトルネックになってるところは分かるか? コードを貼りつけてみればアドバイスも増えるかもな。
255 :
デフォルトの名無しさん :02/04/20 17:41
>>254 申し訳ないが。。。会社で使ってるんですよ。
貼れない。。。
256 :
デフォルトの名無しさん :02/04/20 17:43
ちなみに「Variantを使わない」ってのは参考になりますた。 ありがとう。色々試してみます。
>>251 こっちも自前で描画したい。コントロールは恐くて使えん。
まずメモリに全部描画して、その後ピクチャに...
ってやるんだろうが、具体的にはまったくわからん。
今は1ページ分の拡張メタファイルを作ってピクチャに描画してる。
当然画面には1ページしか表示できず、メニューなどで切り替えている。
ここから何とかならんものか?
>>256 そんなに初心者だったのか。ならいろいろアドバイスすることはありそうだね。
>>256 とりあえずなるべくメモリに展開してから計算すると速くなることがあるね。
最近のPCのメモリはたくさんあるからフルに利用しよう!
mikeさんのDLLを用いて、MP3演奏ソフト作ってるんですが、 繰り返し演奏をしようと思いまして、そこで "C:\My Documents\My Music\okuyasu.mp3" のファイルパスをString型のMp3fileという変数に格納しました。 そこでVBのソースコード中でMp3fileがEOFになるという 条件文の書き方はどのようにすればよいのかしら。
>>261 ごめん、文字列型のEOFと言う意味が分からん。誰か分かる?
>>259 まあそうなのだが、スクロールとズームを考えるとイマイチ方法がわからん。
1ページだけだとピクチャの Move だけで実現できるのだが。
>>262 End Of File?
空文字列という意味?
失敬.261です。 >文字列型のEOFと言う意味が分からん。 ここに誤りがあったか。 ではMP3ファイルを演奏して、終了したときに出される EOFを検地するには,VBコード中で どのように書けばよいか?
>>263 ああ、そういう方法使ってたのね。
つまり自前で描画ってのはDC(PictureBoxでもいいけど)を2つ用意して、
1,2ページをそれぞれに描画して、BitBltなりStrechBlt(だっけ?)で
表示させたい所に転送する、って感じになるんよ。
スクロールは転送位置を操作、ズームはStrechBltでいけるでしょ。
#ちょっちめんどくさいかも。
>>264 どうなんだろう。
267 :
デフォルトの名無しさん :02/04/20 18:18
すんません VBで ダブルな引用符 ---> " を文字列の中で使うにはどうすればいいのでしょうか? いまは、 & chr(34) & で書いていますが、何か他の書き方が絶対にある気がしているのですが。
>>265 func.txtに載ってないの?
>>267 ""とする。文字列なら
txt = "これが""引用符""だよ"
って感じ。
>>265 フリーのDLL使ってるんならコールバック関数なり何なりがあるはず。
ヘルプなりReadMeなり見れ。
>>267 Str="""
>>266 既存のコードを生かすとすると、
拡張メタファイル DC をページ分作って
そこから更に表示域のビットマップをこしらえる、
ってことでイイのかな?
うまくできるかどうかはわからんがやってみるよ。
ありがとう!
VB5.0で作ったの開かないYO!
Private Sub From_Activate Print "ゴルァ" End Sub
275 :
デフォルトの名無しさん :02/04/20 18:29
>>269 さん
>>270 さん ありがとうございます!
これで プログラムがとてもすっきりします。
俺の立場がー
>272 原因の可能性がありすぎ。 >276 藁 気にすんな。
278 :
デフォルトの名無しさん :02/04/20 19:02
\\server\みたいに始まるパスを普通のパスに直すにはどうしたらいいですか?
280 :
デフォルトの名無しさん :02/04/20 19:08
M:\ とかです
>>278 if left$(Path,2)="\\" then path="c:\" & mid$(path,3)
こんなんでいいのか?お勧めせんが。
それともローカルのパスだったらローカルパスに直す、とか言う処理か?
>>278 \\server\に対するM:\が存在しないことがあるのは知っているか?
DoEvents以外でループ処理から脱却する方法を知りたいです。
>278 WNetAddConnection2で\\Serverに接続しよう
Exit For?
>>283 goto?
DoEvents ってループから抜けられたっけ?
いや、脱却は語弊がありましたね。 要するに、処理がForに集中してフリーズ風になるのを避ける 方法を伺っておるのです。
ENDで抜けろ
ループ処理を行い、なおかつその他の動作ができる状態・・・ いや、DoEventsで十分なんですが、これではループに時間が・・・
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 重い処理をアウトプロセスサーバにして非同期で動かすとか...
>>297 MSDN ライブラリで ActiveX EXE について調べてみてはいかがでしょ。
300ゲトー
>>290 Sleep使え。
>>295 DocmdのCloseはVBのHideと似たような動作になるんだったかな。
>>301 Sleep 使ったらスレッド止まっちまわね?
>>304 (・∀・)ハジメ イミ ワカンナカタヨ (w
>>303 Call Sleep(1)
DoEvents
みたいに組で使えってことだろ、たぶん。
>>306 それどういう意味があるの?
309 :
(・∀・) :02/04/21 07:45
VBの実行ファイルサイズがでかくて困っております。 小さくするコツなどありましたらご教授お願いします。 P-CODEコンパイルってアリですか?(いまいちメリットがわからん) なるべくネイティブコードコンパイルにしたいのですが…
>>310 200KBを半分くらいにしたいのサ(;∀;)
1つのフォームにTabSplitとFrameを5つくらい貼って切り替えるやつなのサ
>>311 TabSplitとFrameを置いただけじゃそんなにならないよね。
その他のコードに無駄はないかい?
最適化をいじくるのはそれからだよ。
>>302 あかんやろ。
>>292 で「いや、DoEventsで十分なんですが、これではループに時間が・・・」
って言ってるぐらいだから。
そもそも
>>290 で...
> 要するに、処理がForに集中してフリーズ風になるのを避ける
> 方法を伺っておるのです。
の意味があいまい。
1. 他のプログラムの動きがのろくなる
→ プライオリティ設定すべし。もしくは、SMP マシンでも買え。
2. 自分のプログラムのコントロールが反応しなくなる
→ ちゃんとやるなら
>>296 の方法。簡易的には DoEvent しかないよ。
>>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がよさそう。
>>315 固まりかけてるような重いプログラムで一定時間が判定できるのかな?
>>312 ほかにもいろんなコントロールをぺたぺたぺたぺたぺたぺたぺたぺた貼り付けております。
とりあえずコードから見直してみます。
ありがとうございました。
ListViewコントロールでアイテム追加ってどうやるんですか? ごーぐるさんでも出ないのですが。
>>318 ListView に直接追加するんじゃなくて、ListView.ListItems コレクションに
追加しる。
321 :
デフォルトの名無しさん :02/04/21 14:37
逝ってよし
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 つーか、ネタだろ。ネタじゃなければバカ
>331 WinSockを使う。VBのサンプルコードはあんまり見かけんが。 めんどくさいならフリーのDLL、OCXを使うかOutLookのVBAを使ってみれ。
337 :
デフォルトの名無しさん :02/04/21 15:24
即レス以外はみんなあぽう。 まったくもうっ。ここで質問する位の初心者だと理解しろYO!!
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 これ以上は俺説明する気ないぞ
>338 ListItemのAddの戻り値であるListItemオブジェクトのSubItemを使う。 MSDN見れ。サンプルコードが確かあった。
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
>>345 ありがとうございます。大変助かりました。
もう1つだけお願いします。
B1:C2と書きましたが、コピーエリアはもっと大きくて
>Workbooks(filename).Close SaveChanges:=False
ここで、下記メッセージが出ます。
クリップボードに大きなデータがあります。他で参照する場合はYESを
参照しない場合はNOを選択してください。
↑
これを出なくすることは出来ますか?
>>346 Elseの次の行に
Application.DisplayAlerts = False
を追加
348 :
343,346 :02/04/21 17:36
>>347 ありがとうございます。解決しました。助かりました。
349 :
デフォルトの名無しさん :02/04/21 18:32
>>345 そんな感じでVBAでセルからアドレスを取得してメールを送る方法を
教えてよー
その 態度を 改めろ
>>349 教えてほしけりゃ、
>>343 のように自分がやったことを示せ。
お前のような奴に教える奴はいねぇよ。
初心者未満には何を教えても理解できないだろうし。
352 :
343,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その項目がないとき ”” が戻ってくるので、エラーが出てしまいます。これを回避する方法はないのでしょうか? よろしくお願いします。
356 :
343,346,348,352 :02/04/21 20:36
>>352 の内容から新たに分かったことです。
マクロを実行するBOOKがEXCEL形式なら問題なしのようですが
今回必要なのは、CSVを開いてそこからの実行だと
>>352 のようになるようです。
もし分かる方いらっしゃればお願いします。
↑すいませんINIファイルを読み込みにいくとき、””でエラーが出ます。
358 :
デフォルトの名無しさん :02/04/21 20:53
>>355 WritePrivateProfileString使ってんの?
項目が無ければ作るはずだよ。
>>358 レスありがとうございます。
すいません、書き間違えました
本来はWritePrivateProfileStringでかきこんで
GetPrivateProfileStringで、読みにいってるんですが、
何かの拍子にINIファイルがなくなったり、項目がなくなったりしたとき
GetPrivateProfileStringで読みに行くと
””
が返ってきますよね?そうなると、型が合わないとエラーが出てしまいます。
何かよい回避する方法はないでしょうか?
追加 Integerで宣言すると ”” が戻ってきたとき、型が合いません 何かいい方法はないでしょうか?おねがいします。
361 :
デフォルトの名無しさん :02/04/21 21:41
>>359 GetPrivateProfileIntがあるよ。
>>359 GetPrivateProfileStringでも、
項目が見つからない(≒ファイルが見つからない)
ときに返す値を決めれたはずだけど・・・?
GetPrivateProfileString(section,key,"",value,length,file)
とあったら、""のトコじゃないの?それを"0"とかにすればOKかと・・・。
>>362 それダメじゃない?宣言はString型なんだから。
んでもって今俺もなんか変なんで質問する。 普通ならメニューから参照設定で「Microsoft Internet Controls」 にチェックを入れてOKすると、WebBrowserコントロールがリストに入りますよね なんか今やったら追加されてないんだよ・・・。 何度かチェックを外したり入れたりしてみたけど変化なし・・・。 バグなのか?対処方法とかないのかねぇ
>>363 あとで使うときにVal関数でやればOKだろうが。
>>365 んな手間かけるならGetPrivateProfileInt使えばいいじゃない
>>366 そりゃそうだなw
いや新着レス読む前に書いたもんで(w
まぁどっちでもできるわけで。
>>361 >>362 レスありがとうございます。
実はAPI関係、あまりわかってないのです。お分かりでしょうが、
でも、これでいけそうです。
ありがとうございました。
371 :
343,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 先ほどコードの記述は変わりましたが、上記で解決しました。 お騒がせしました。
>>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() がエラーになります。ダウンロードしたコードそのままなんだけど? よろしくお願いします。
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には付属していません。
>閲覧できる過去ログやヘルプを見ましたが該当する記事が見つかりませんでした
英語は読めますか?国内だけじゃだめだよ。
>>386 早速のご回答ありがとうございました。
別の方法を考えてみます。
>388 目的のパス調べてOpen,Getとか使う。
390 :
デフォルトの名無しさん :02/04/22 17:09
VB6+SP5です。 自作ソフトのバージョン情報を追加のフォームモジュールから行ったのですが、 バージョン情報を出している間メインフォームをロックしたいんですけどどうす ればいいでしょうか? メインフォーム側をロックしただけではALT+TABでアプリを切り替えたときなど バージョン情報がメインの後ろ側に回ってしまい操作できなくなってしまいます。
訂正 メインフォーム側をロックしただけでは ↓ メインフォーム側の EnableをFalseにしただけでは
>>382 サンクスですちゃんと動きました!
どこ調べていいのやらさっぱりで・・・。
ありがとうございました。
>>390 Object.Show vbModal
ってVbModalつければそのフォームからフォーカス移せなくなったハズ。
だめならもっと技術ある人、指摘して下さい(w
あ、ここでのObjectってのは当然だけどそのバージョン情報のフォームの事ね。
396 :
デフォルトの名無しさん :02/04/22 19:46
か〜なり、低レベルの質問です。 VB5.0 ってWINXP で使えますか?
>>396 俺エラー出て使えなかった。
のでVB6買ったら直後に.NETとやらの話が出て・・・。
鬱だ
VB6です。 InetコントロールでWeb上のファイルを取得できると聞き、 調べてやってみたんですが、TextBoxに取得した文字列データ(htmlのソース) を入れると改行されてません。横にめちゃくちゃ長くなっています。 そしてその文字列をコピーして、メモ帳に貼り付けてもそのままなんですが、 秀丸に貼り付けるとちゃんと改行されてきれいに表示されます。 どういうことなのでしょうか?またどのように対処すればいいですかね?
>398 改行の文字コードの違い。 ReplaceでVbCrLfに変換すれ。
400 :
デフォルトの名無しさん :02/04/22 23:07
>>398 漢字コードは、シフトJIS決め打ちでいいのかな。
JISやEUCのサイトもあるから、バイト配列で受信して、
変換するのが汎用的。その時、改行コードも変換。
>>399 早速のレスありがとうございます!
やってみた所
Text1.Text = Replace(Text1.Text, Chr(10), vbCrLf)
で見事に改行されました。
タイマー処理の件
>>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つの小さい画像をいくつも並べて表示ってできますか? いろいろ検索しても出てこなかったのですが…
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にあるぞ
>>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の説明がメインなんではないだろうか。
だから、いちいち説明するのが面倒なんじゃないかな。
とか言ってみるテスト。
>>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
419 :
VBA歴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コントロールがリークばっかで使い物にならないんで、 自作しようと思うがどうだ。 ソース上げてもいい?
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を使ってメールの配信をするソフトなんですが、 サーバーではじかれてエラーになります。 原因としてどんな事が考えられますか?
>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するサンプルか何か欲しいなあ。 どういう順番でメソッドを呼び出すかだけでも。
やっぱし動かないや(泣)
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.
>>449 フォームロード時にコードで指定するということでしょうか。
最初はOKでしたが、一回オプションボタンをクリックすると
元に戻ってしまいます・・。
なんとなく解決したので報告を。
テキストボックスを一個置いて、
Private Sub Text1_GotFocus()
Option1.TabStop = False
End Sub
と書くと大丈夫っぽいです。
451 :
hebogrammer :02/04/24 21:55
当方ただいま本当に困っています。 VB 6.0 を用いてボタンをクリックしたら Windows2000 の PC を ShutDown (完全にパソコンが停止した状態)にしたいのですが、 どうすればよろしいでしょうか? 市販の本の ShutDown プログラム (ExitWindowsEx を使うやつ) を試したのですが、パソコンに電源が残ったままログイン画面に なっています。 何か解決方法はありますでしょうか?よろしくお願い致します。
>>449 VBPファイルの関連付けは、やっぱり後から入れた方になっちゃうんですか?
>>452 .NETの拡張子はsln だから大丈夫。
つーか C# にしる。
454 :
デフォルトの名無しさん :02/04/24 22:21
Open 〜でWeb上のファイルからデータの読み込みできますか?
>>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コントロールを貼り付けてあとは適当に。
え〜と 英語のMSDNの手引きでは すでにあるHTMLドキュメントに対して WebBrowser1.Document.body.innerHTML = "タグなど" などで あとづけ書き込みは 分かります 空白(about:blank)を作っておいて BODY内だけは できますが… そうではなくて HTMLソース文字列から HTMLドキュメントを 純粋に作る法 これを IEなどに 表示させるには? MSHTML 読んでも… VCじゃないと だめなの?
いいえ みなさん WebBrowserコントロールは わかりますが… セキュリティに徹したものを 目指すために まず HTMLを解析するために ソースで取得してるのです
463 :
デフォルトの名無しさん :02/04/25 00:26
>>462 何をしたいのかわからん。
>HTMLソース文字列から HTMLドキュメントを 純粋に作る法
HTMLソース=HTMLドキュメントだぞ。
>これを IEなどに 表示させるには?
そのままOpenするだけ。
それとも、最終的にはIEで表示するが、その前に
危険なタグをフィルタ処理したいとか?
>>463 そうです
<IMG>や<OBJECT>など チェックしてから IEのブラウズ機能を使いたのです
例えば s="<HTML><HEAD></HEAD><BODY>テスト</BODY></HTML>"
と VBで文字列で持っていて これをそのままブラウズしたいわけです
WenBrowserのプロパティDocumentは 読み出しONLYで
そもそも このDocumentオブジェクトをソースから どうやって定義すんだろ?
いやん 英語がイタイ もう イヤン
あきらめれば?
なんとか、やってみる できたら報告する 気長に待ってテネ
467 :
デフォルトの名無しさん :02/04/25 00:54
>>464 その手のツールがどうやってるか考えればわかると思うけど、
プロクシになって、HTMLを加工してからIEに渡してる。
468 :
デフォルトの名無しさん :02/04/25 00:59
! 串! なりほど せっかくWinsock使ってるんだから 串になればいいのか そか WebBrowserのナビゲートで ダミー串通せばいいのか その手も 考えてみます!!
串実装〜しないと… クッキーは無視しよw 英語MSDN行ってきます(古い記事もあたってみよ)
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を送りたいと。
VB6で質問です! タスクバーに常駐させるプログラムを書いたのです これを終了するときに、 ちゃんとサブクラス化を終了して正常にEndさせてるのですが タスクバーにアイコンが残ったままになってます。 でもそれにカーソルを合わせるとパッと消えます。 プログラムが終了した時点でアイコンをタスクバーから消せないのでしょうか? よろしくお願いしますです。
Unload Me End
>474 SPAMになるんですか!? 用は宛先不明のメールを送信者とは別のアドレスに送りたいんです。 いろいろ調べてたら、SMTPの仕様とかで出来ないとかってどっかで読んだんですが...
>宛先不明のメールを送信者とは別のアドレスに送りたい のに、 >メールヘッダのFromに表示されるメールアドレスと、Return-Pathのアドレスを違うものに する必要あるのか?
>>475 ちゃんと、Form_QueryUnloadで
Shell_NotifyIcon(NIM_DELETE, NoftyIconData)
を呼ばないと駄目よ。
>>478 ふつう、その技はSPAMに使う。i-mode宛にFromとToを同じにして送るとか。
自力だけで解決できないなら、あきらめてこの質問はしない方がいい。
言い方悪いのかなぁ エラーメールを任意のReturm-Pathに返したいということなんですが... VBSじゃ無理かなぁ
かぶりました。了解です。
>>481 言い方が悪いw
その場合は「宛先不明で戻ってきたメール」といわなきゃ。
言い方が悪かったですわかりにくくてすみませんでした。 まず常駐させて、終了させる前にちゃんと 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 せっかくヒント出したのに、それはないだろう。 検索しろよ。ヒットするから。
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を一つにまとめるにはどうしたら良いですか?
497 :
デフォルトの名無しさん :02/04/26 00:11
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"は作れないと聞いたが。
>>505 なんですとーΣ( ̄▽ ̄;)
即レスありがとうです。
>>506 確かVBは中間コードまでしか書き出さないんじゃなかった?
Javaみたいに。
だからだと思う。
DLLを使うために別途VBのDLLを用意しなければならないってのも変な話だしな。
509 :
デフォルトの名無しさん :02/04/26 07:50
>>507 それはVB4まで。
VB5とVB6はネイティブコードを吐く。
510 :
hebogrammer :02/04/26 08:55
>>491 一応いろいろと検索してみて、作ってみたりしました。
しかし、InitiateSystemShutdown の第1引数にどのように
設定してよいのやら分からず困ってます。(-_-;)
なんか'97年あたりで時間の流れが止まってる人が混じってるみたいですねぇ
こんにちわ。 TreeViewの背景色を自由に変えたいのですが プロパティが無いです。API調べてみたけどわかりません。 優秀なみなさん、教えて下さい。
>>508 うそつくでねぇ。VBからはDLLもActiveX DLLも使える。普通のDLLが作れないだけだよ。
VCからVBのDLLが使いたければActiveX DLLを使うようにコーディングすればいいだけ。
515 :
まとれす ◆mato/KTI :02/04/26 12:48
516 :
デフォルトの名無しさん :02/04/26 13:37
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 のブロードキャストアドレスに 反応しません。どうしてですか?
あと、今日からVBを使い始めたのですが、設定ファイル(*.ini)を [Buz] Foo=Bar みたいな形でやりたいんですけど、定石のアルゴリズムってありますか? っていうか、もしかして関数かコンポーネントありますか?
>>518 *.ini
API使うだ。
標準モジュールにしたものや
クラスモジュールにしたものが
あちこちで配布されてるだ。
おらWinsockは使ったこと無いだ。きっと他のエライ人が教えてくれるだ。
ありがとうございました。自前で組んだほうが早そうですね。 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を使えばできる
アウトルックの受信トレイをクリックしたときに表示される着信メールのリストは フレキシブルグリッドを使っているのですか? それとも別のコントロール? ああいう感じのリスト表示をさせたいのですが。
他プロセスが持っているウインドウを、自分が作成したウインドウの 親ウインドウに設定したいんですけど、何か良い方法ありませんか? 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サーバにアクセスして新着メールが あったらイベントを発生させるみたいなことは自分でも書けるレベルだと思います
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
開発時はアーリーバインディングで、納品時はレイトバインディングにしたりする。
>540 おおおっ!。 そういうことができるとは、気づかなかったです。 ノーミソのシワが一個できた気分です。ありがとうございます。 引き続き、ノーミソ・シワのできるアイデアを募らせて頂きたいです。 よろしくおねがいします。
542 :
デフォルトの名無しさん :02/04/27 12:34
それってどんな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 ときます。
>>548 別にない。強いてあげれば、ターゲットを変更できるところぐらいか
>>まとれす
>>546 ,547
まともなレスばかりで感動です。
winsockについて詳しく書かれたサイト、書籍でよいもの
ないでしょうか?
pop3ではできてもIMAPでやるのはどうしたら・・・。
英語サイトでもよいのでお願いします。
>>551 ひとつお願いしたいのはVBでWinsockを使うは結構簡単だと思います。
でも、それでOKというわけではないのがネットワークプログラミングだと思います。
取り急ぎ作らないといけないものができたらじっくり勉強してもらいたいと思います。
>>553 COBOLerは全角命です
555 :
デフォルトの名無しさん :02/04/27 18:39
>>548 例えば、Excelのオブジェクトを使うのに参照設定してしまうと
そのバージョン限定になってしまう。
レイトバインドなら、Excel.Applicationという名前で実行時に、
使うオブジェクトが決まるので、Excel97、2000、2002のどれが
実行環境にあってもOK。
もちろん、その場合は、使用できるオブジェクトやらメソッドやらは
Excel97、2000、2002のどれでも使えて同じ結果になるものでなければならんけどね。
>>551 Sokectについて知りたいのか、WinSockについて知りたいのか、WinSockコントロール
について知りたいのか、IMAP4について知りたいのか、そもそもやりたいことはなんだ?
単に実現したい、ということなら、迷わずコンポーネントを勧めとくぞ
で、勉強したいってことなら、まず、RFCを読むことだなIMAP4だとRFC2060か?
557 :
525=539 :02/04/27 18:46
>>545 さん
>>547 ことまとれすさん
お答えありがとうございます。
ところが私の知識不足と腐ったカニ味噌のせいでどちらもうまく理解できません・・・
545の方のwinsockはwinsockでメール送信とかやったことあるのでそれ自体は使えるのですが
HTTPのコマンドをまったく知らないので困ってます。
547での「非同期で複数処理」ってのはもう全然わかりませんです(汗
具体的にどういうことなんだろ。
もうちっと勉強してきますか・・・。
どうも誤字が目立つな。今後は気をつけるから勘弁してくれ
>>557 要するに、OpenUrlして、結果が戻ってくるまで待機してるわけだ。これを同期という。
そうじゃなくて、待機せずにすぐ次の処理を行うことのが非同期だ。
ヘルプが手元にないので、Inetコントロールでできるのかはわからんが、少なくとも
WinInet API のInternetOpenで、INTERNET_FLAG_ASYNC を指定してやれば、非同期
処理ができるようになるぞ
>>555 なるほど。
たしかに Office 系のアプリを外部から使うって事になると
バージョンの問題が出てきますね。
この辺っていままで考えた事なかった...
感謝です。
>>557 Inetコントロールなら、OpenUrlではなく、Executeメソッドを使う。
Executeメソッドでサーバに接続し、GET要求を出すのだけど、
結果は受け取らず、Executeメソッドは実行後すぐ終了してしまう。
これが非同期って意味ね。
んで、データは、Inet_StateChangedイベント内で受け取る。
State=12になったら、GetChunkメソッドを呼び出してデータを
受け取る。
この2つの操作の間には別のことをしていてもいいし、別のInet
コントロールを使って別のサイトを取得していてもいい。
(Inetコントロールを、コントロール配列にして使うのが普通。)
ありがとうございます!
>>559 >>562 最初
>>559 の方法で作っていて、やっと同期しないで動くのを確認して
よかった〜できた〜と思ってまたここ開いてみたら562さんの書き込みが(w
ちなみにそっちでもできました。
なんだか一石二鳥的な感じに2つも知識をつけさせてもらいました。
本当にどうもでした。
>547さん 私の疑問に答えていただきありがとうございます。 一度、試してみます。
VBでベーシックインタープリタを作りタイ!
どうぞお好きに。
おれつくった
おや、しばらく来ないうちにまとれす復活してる。よろしこ。 串規制うんぬんはクリアーしたんかな。 >565 頑張れw
569 :
デフォルトの名無しさん :02/04/28 21:50
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だってバグあるけど。
>>572 ん〜やはり無理ですかね。
Googleで検索して出ないあたりから諦めかけてたんですけどね・・・。
だとすると今ある総当りトリップ検索は言語何でつくられてるんだろ。
やっぱCとかC++になるのかな。とにかくサンクスですた。
574 :
デフォルトの名無しさん :02/04/29 01:49
他メーカーのActiveXって、そのメーカー以外のソフトから 使おうとするとエラーになるように出来て無いかい? JustSystemのも機能が使えるかは保証できないと思うけど…
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を半角英数字にしてる?
JOCAについての一太郎に付属の注意テキストによると 開発に使うのはできるらしい ただ配布については記載なし(笑 VBで扱う際のごくわずかな記述がある(笑 VBで扱えない変数型もありますのでそれはあきらめて使わないとの事(笑) JSVBrowserはオブジェクトブラウザで見ればわかると思うけど、VBで扱えない変数型はほとんどない でもナビゲートわかんねーw エラー出すとVBが落ちるんだよね(大汗 資料☆ー欲しー 解明した方がいたら情報あげキボンヌ JSなんとかのコンポーネントでいっぱいの人 他にもいるでしょ?(笑
584 :
デフォルトの名無しさん :02/04/29 03:40
>>583 違ってたか。
上のOracle云々はEnterprise版で起きそう。
あと、可能性としては、tmpフォルダに日本語を使ってるとか、
インスト先に日本語使ってるとか。
VBで作ったEXEがWinXPにインストできないトラブルは多いけど、
VB自体がインストできないのは、例が少なそう。
Officeがらみかなあ。
>578 HDDからインストールするとエラーになることがあると聞いたことがある。 まあ、違うだろうけどさ。
587 :
デフォルトの名無しさん :02/04/29 12:36
C++の勉強の勉強はやったんだけど、 どうやってWinのソフトウェアを作ればいいのか全然わからない。 Visual C++を使ってなんか作りたいんだけど、 どのように勉強したらいいでしょうか? お勧め本とかホームページ教えてくれますか?
猫でもわかる・・・
>587 一通り勉強したんならあとはやりながら勉強するのがいいと思うぞ。 俺の勉強方法は「とりあえずやってみる」だし。 どの言語でもそうだけど初心者の読む本なんて何読んでも 一緒だと思うんだが。お勧め本とか聞かれてもなあ。 俺の持ってるのは「猫でも・・」と「初心者・・」ぐらいかな。 #スレ違い。
Perlって難しくね?
だからか。ぱっと見理解できなかったから。
>>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
そうなん?俺専門外なんだけど。
>>594 何気に回覧してたらなんかすげー情報がっ!
いや〜あるとこにはあるものですな・・・。
感謝感激感動です。やってみま。
596 :
デフォルトの名無しさん :02/04/29 15:49
VBでエディタをつくりたいのですが、どこかにソースを公開したエディタありませんか? 文法の勉強より手本を見ながらいきなり作るのが好きなんです 探したけどC++ばかりでなかなかありません・・・
>>596 TextBoxをMultiLineで貼り付けるか、
自分でDCに描画するか好きなほうを選べ。
598 :
デフォルトの名無しさん :02/04/29 16:05
>>597 処理が単純で速いほうがいいですが、
どちらでもかまいません
>>598 ぇ、いやどっちか選んでやってみろってことだろ、597は。
質問すまん ListViewで新しい項目追加するときに 項目を更新させないようにして 追加するのってどうやるんだっけ? いちいち画面書き換えるんではチラついてうざいので。
>>600 DoEventsやSleepを入れなかったら追加するたびに更新されないはずだけど。
Refreshとか使ってないよな?
>>596 ちょっと探してみたがホントに無いな。
いまどきテキストエディタってのも流行らんからなあ。
簡単でいいならRichTextBoxを貼りつけりゃ完成だが。
ぐふっ! トリップ検索ためしに作ってみたのはいいが 1500trip/s・・・(w これがVBの遅さですか? それともトリッパーはマルチプロセスとかで高速化してんのか。
>602 普通のってどれぐらい?
俺のCPUが遅いせいもあるけど、 「見知らぬ国のトリッパー(w」 は俺がやって16000trip/sぐらい出る。 俺のやつの10倍速と。w
>604 ちょっとやってみるから待ってろ。
>>605 待ってろ、といわれたが具体的になにをやってみるんだ?(w
作るのか?トリップ検索プログラムを・・・。
いやそれともトリッパーの速さを見てみてるのか。
>>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
>606 とりあえず前方完全一致の単純検索で試してみた。 結果 見知らぬ国の・・・ 13000 trip/s 文字列操作、比較 9000 trip/s バイナリ操作、比較 16000 trip/s 参考 ufccryptの呼び出しだけ 18000回/s っつーわけで、1500trip/sって何なんだ。 まあもちろん部分一致だの正規表現だのに対応すれば その分遅くなるが、それでも1500trip/sは遅すぎだろうな。
>>608 早っっ
俺のやってる事がいかに効率悪いやり方かが分かるわ・・・
そっちはどんな風にしてやってんのか気になるわぃw
>>601 DoEventsを入れてやってました・・・
でもDoEventsを抜いてしまうと、Do Loopの中にあるので
固まってしまうんですが?DoEventsをいれずにも固まらないようには
どうやったらできるんでしょう?
>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 … .....ヒントでもいいです。
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
>>614 ありがとうございます!助かりました!この方法で行きます!
実は半日くらいWWW検索しまくっちゃって悩んでたんですけど、
全然解決しなくって。。
てっとり早くない方法っていうのは、ソートの関数(?)みたい
なのを自分で作るはめになるんでしょうか?
>>615 APIを使ってそうすることになると思う。<自前ソート関数
詳しくは MSDN あたりで ListView_SortItems というキーワードを調べてみるべし。
>>615 >>616 で正しいね。
正確にはSendMessage APIのMsgパラメータにLVM_SORTITEMSを指定して
リストビューにメッセージを送信することによってコールバック関数を設定し
そんでコールバック関数の中で独自のソートを作ればok。
>>611 気が向いてくれるように祈ってみるテスト。
気が向いた。 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
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呼び出すなり。 #一応最適化全チェックでコンパイルしてちょ。
タブが消えてしまうという罠。(今知った。鬱。)
622 :
デフォルトの名無しさん :02/04/29 21:29
>>619-620 わーい!
でもやってることがあんま理解できない罠。
俺がやはり如何に低レベルだったかと納得させられるw
今からがんばって解読すんぞ〜。
サンクスコです >>即レスサソ
>>613 何がしたいのかよく分からん。目的はなんだ?
>>623 どーいたしまして。
色々いじくった後を修正してないので
もう一度作り直した方がいいだろうな。
625 :
まとれす ◆mato/KTI :02/04/29 22:48
ついにおれが誰だかばれてしまった。まずいことを書いてるわけじゃ
ないからいいけどね。しかし、わかるもんなんだなー。
>>607 そこからやるのは無謀だと思うぞ
>>612 すでに回答がでているように、リストビューのソート関数を定義する。
日付型のソートをするサンプルが、KBにあったぞ
>>613 何がしたいんだ?とりあえず、アスキーコードとか、ShiftJISとか、その
辺から確認してみろ
実は有名人なの?
俺は名前を聞いてもわからない自信がある。>まとれす #PG界の人名なんてぜんぜん知らんもん。
>>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は数字だよ"
みたいなことがしたいのだろうか・・・とふと思った。
630 :
Mr.DoEvents :02/04/30 05:48
>>612 めんどくさいのが嫌なら、ColumnHeaderを右寄せにしたうえで、
数字の左に半角スペースを桁数分詰め込むと楽。
Li.SubItems(1)=Format(intHoge,"@@@@") みたいな感じで。
#独自にソートさせた場合、面倒があった気がする…。コードが腐ってた
#だけかもしれんけど。
632 :
Mr.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ね(プロジェトのプロパティ) どう?
あ!何するかって? 文字列あててね 毎回1文字だけ表示されるから 全体の文字列ね 何も入力しないと 即終了〜 当てる回数はまっどうでもいいでしょ 糞コードあげんなって?(´∀` )
VB のコンボボックスのリストって VBA のように一気に設定できないの?
あ、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なぞいらん
>>636 すみません。勉強不足でした。
調べたら解りました。逝ってきます。。。
>634 一気に設定って何だ?RecordSourceとか値リストの事?
VBサポート中止!
VBA は配列を直接ブチこめる
どうしよう・・・
>639 2005年までっしょ
643 :
デフォルトの名無しさん :02/04/30 12:50
>>641 ソース希望。 MSサイト覗いてもそんな記述はなかった。 もしかしてネタってやつですか?(w
644 :
デフォルトの名無しさん :02/04/30 12:53
確か2005年からは有償サポートになって、2008年にはうち切るんじゃなかったかな。
647 :
デフォルトの名無しさん :02/04/30 12:55
まじです
VBNって値段いくら位?
サンクス!! >>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です。
フォルダパスに日本語が混じっているとか?
>>655 漏れもなったことあるぞ。VB入れなおせ。SP5入れるのも手か。
>>655 とりあえず SP5 でてるから、当ててみれば。
VBでメモリマップドファイルをどうすれば作れるか 解説サイトなどありましたら教えてください
かぶってもうた。
レスどうもです。試しにパスに日本語を含まないようにしたところ 「メモリが”READ”になることが出来ませんでした」との エラーメッセージは出るようになりました。 まぁ、落ちることに変わりはないのですが… 皆さんの助言通りSP5にバージョンアップしてみます。
まさかcpuいじってなんかいないよね
>>663 私ですか?いじってないですよ。
まだ増設とかもしていないのでPCはメーカーの
ものをそのまま使用している状態です。
Win2000って強制終了がみょうちきりんだからね…
誰も654につっこまないんだな。結構笑えるネタなのに。
>666 いや、初心者スレだし... >655 Windows2000のSPは...?
672 :
デフォルトの名無しさん :02/04/30 19:58
>>619 ,620
KeyChar(0)〜(3)への代入を外側のループに出せば、約4割速度アップ。
SearchChar(0)〜(2)を単純変数に代入すれば、約1割速度アップ。
>672 ま、そういうことだね。
674 :
まとれす ◆mato/KTI :02/04/30 23:07
>>634 できない。どうしてもやりたければ、そういうユーザーコントロールを作るしかないな
>>654 懐かしいネタだな
>>660 CreateFileMapping、MapViewOfFileExあたりをキーに検索してみれば、サンプルが
見つかるぞ
>>670 なんだNSって?メッセンジャーの話か?
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引数の中から取得すればいいぞ
それでもやっぱりわかりませんでした…。 下記で試してみたのですが、だめでした…。 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...となる。
>>680 そういうときはだな、ブレイクポイントをしかけておいて、変数の中身をウォッチ
するといいぞ。何が入っているのかすぐわかる
ありがとうございました。 これで完成です。
684 :
◆.9BqZfqQ :02/05/01 09:34
テキストファイルをopenで読み込んだら改行されずに1行で表示されるんだけどどうすればいい?
>684 大体想像つくけど、まずそのソース示せや。 openったって、書き方ひとつじゃないでしょ?
>684 Line Input使うか、ReplaceでVbcrlfに変換すれ。
687 :
◆.9BqZfqQ :02/05/01 09:51
すんません。 Open strFilePath For Input As #LngFNum こんな感じで開いてます。
ある文字列をテキストボックスに表示させたいのですが tabスペースの部分が来たら改行させたいのですがどうすればいいですか?
>688 Text1.text=Replace(str,vbtab,vbcrlf) こういうことか?
Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long とありますが、「Declare」「Lib」「gdi32」ってなんですか。読めません。ヘルプもありません。
>690 Declare=宣言 Lib=Library(たぶん) gdi32=DLLの名前 つまり、gdi32っていうライブラリのGetStockObjectっていう 関数を宣言する、ってことだ。
単なる半角スペースとかを改行に置き換えるときって半角スペースの関数(vbtabみたいなやつ) ってあったっけ?
>692 無いよ。 自前で宣言しとく?
Replaceで半角を置き換えるときはどうなんの? Replace(str, ,vbcr)とかになんの? それとも Replace(str," ",vbcr)とかになんの? それとも両方間違いですか? アフォな質問かもしれんがたまたま気になったからさ・・・
ありがとうございます。 Dim a as〜 の Dimension の宣言とはどうちがうのでしょうか……。
>>695 Declare〜Libはその名の通り、他のDLLの関数を宣言すること。
Dim〜はVB内での変数の宣言。
スゴく簡単に言うと
通常の宣言=Dim
APIの宣言=Declare〜
かな。
>>694 後者。
Replace(str,chr(32),vbcr)
でもいいよ。
>>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行読み込むと改行としたいのですがうまくいきません。 バカ初心者の私に愛の手をお願いします。
>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 ネタですか?
>>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 レスありがとうございます。
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 プロシージャは、プロパティに値を設定します。
>713 すばやい返答ありがとうございます。 MSDN見ても両者の文面が同じにしか見えなかったんで戸惑って いたんですが、おかげさまでなるほど納得です。
>>712 値を代入するのに 2 種類のプロパティ プロシージャがある理由は、
Visual Basic では、オブジェクト参照をオブジェクト変数に代入する
場合、特別な構文を使うためです。
print では ; を打つと改行しなくなります。 では、文字を改行するにはどうしたらいいでしょうか。 Label1.Caption = "a + b = " & Format(wa, "######.######") & " です。" & 改行 _ "a - b = " & Format(sa, "######.######") & " です。"
717 :
デフォルトの名無しさん :02/05/01 18:34
>>716 クイズみたいな文面ですね。(w
vbCrlfとかじゃダメなの?
>>718 MSDN見るなり、全部聞くんじゃなくてやってみろよ…
"あいうえお" & vbCrLf & "かきくけこ"
>>719 ああ、&をつけるのでしたか……。
ありがとうございます。それだけで助かりました。
初心者にもほどがあるぞぷーそぷそ!
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 ありがとうございました。これで解決できそうです。
指定した座標(デスクトップ上)の色を取得する方法は どんなんがありますか? 100 200と指定したらデスクトップ上でのX=100 Y=200の位置の 色を取得できるような・・・。
>>728 GetPixelってAPIがあるぞ。
昔それにチャレンジして失敗したが(--;
がんばれ。
>>728 Win32API の GetDesktopWindow() と GetPixel() を調べてみなされ。
>>728 デスクトップのウィンドウハンドルは取得できてるの?
パオーン
ScaleModeはTwip ScaleTopは0 ScaleLeftも0 ScaleWidthもHeightも適当な値になってます。 原因は・・・。
734 :
デフォルトの名無しさん :02/05/01 21:43
プログラム初心者のためのVBの参考書を紹介してください。 出来れば初心者さんに聞きたいです。
>>733 PictureBoxがFormからはみ出してないか?
>>735 その可能性は無きにしも非ず。
あたってみます!
とおもったのですがそんなはずはないです。 ところでPicture1.Point(0,0) の戻り値が毎回違うのはどうしてでしょう? 色は同じはずなのに。
>>723 もしかして BorderStyle が 1 になってね?
738 は漏れの勘違いだった...スマソ さっきサンプル書いてみたんだけど問題無く動くんだけどなぁ...何が悪いんだろ。
741 :
デフォルトの名無しさん :02/05/01 22:21
>>739 とんでもございません。
でもやっぱり取得する値は毎回違う・・・。
Versionは8176
違いますか?
>>741 うん ?
>>723 では、-1 って言ってたような気がするがのう。
どういう値が返って来てるんじゃ ?
ちなみにわしんとこの Version は、VB 6.0 (SP5) だから 8988 じゃ。
環境が心配なら、ピクチャボックスだけをフォームに貼り付けて Point(0,0)
してみて切り分けたらどうじゃ。
>>741 Version 8988 だった。
後、漏れがさっき書いたサンプルって、下記の様なものです。
1) Form に PictureBox を一個貼り付ける。
2) PictureBox の MouseMove イベントに下記のコードを追加する。
Debug.Print X,Y,Picture1.Point(X,Y)
参考になるとは思えないけど、とりあえず。
>>740 サンクスです。参考にします。
失礼ですが、初心者ですか?
FormにPictureBoxを貼り付けて TextBoxもつけて FormLoadに a=Point(0,0) Text1.text=a とすると aは-1です。 バージョンの違いですか・・・。
>>745 Pointの前にMe.Showを追加すれ。
PictureBoxのAutoRedraw=Falseの時は
フォームが表示されてない時は
(フォームの上に別のウィンドウがある時も)
どこにも情報がないので範囲外で-1が返ってくる。
747 :
デフォルトの名無しさん :02/05/01 22:55
フォーム(*.frm)のソースをエディタで開いて見たら、 VERSION 5.00 ってなってるんですけど、VB 6.0 を使ってても これで正常ですか? もしかしたらプロジェクトを 5.0 からアップグレードする時に、 失敗したんじゃないかと心配になったもので・・・。
>>723 これはあくまで推測だけど、Load イベント中は、まだコントロール類の
初期化が完了していないからでは?
間違ってたら誰か突っ込んで下さい。
>>747 それで、正常みたいじゃ。わしんとこも VERSION 5.00 となっておる。
正直しらんかったぞ。で、
>>746 の Me.Show は追加したのか ?
>>744 はい、まあだいたいその本しか読んでません。しかしもっと自然な解説な本もあるかも。
プログラミングにそまりきったら、今のプログラムは自分で作るのだし、今のパソコンはまだ生きてませんから、
そまって自分を失ったら、失いっぱなしです。我を失ったら、自然なものは作れません。私は、
自分の基礎(自然)を忘れないようにして、つくっていきたいです。パソコンも生き生きしてほしいですね。
まだ、パソコンも、できたばかりです。自然もそうであるように、これから、少しずつ、
角がとれていくのでしょう。
>>748 >>746 の言う通り、フォームが表示されていない段階で Point() を実行したため
じゃろ。心配なら、ボタンを一つくっつけて、そのボタンのクリックイベント中で
やれば良いぞ。わしは、テストの時はいつもそうやってるんじゃよ。
もうパンツ脱ぐ勢いでソースだします。 おそらくどっかに致命的なものが・・・。 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 お願いします!
754 :
デフォルトの名無しさん :02/05/01 23:19
>>749 VB 6.0 でも VERSION 5.00 で正常ですかー。
これで安心しました。さんきゅ〜です。
いまきずいたんですけど、 if文のあたりに入る前にbreakかけると 画面に1ドット程度の ウィンドウが表示されていました。 どこでこんなに小さくされてしまってるの??
>>752 VB は、Form1.Show とやってもコードが実行されているとフォームを表
示しないじゃ。だから、Point() の値がおかしくなるんじゃろ。
> Form1.Show
> Byouga
の間に、DoEvents を入れて、フォームを表示させればいいと思うぞ。
あと老婆心ながら言っておくと、Dim i, j As Integer と書くと、i は
Variant になるから、気をつけたほうが良いぞ。
>>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 分からんな。他のコード見直してみな。
>760 え?俺? 俺は普段画像処理にVBの標準関数は使わないので、、、
いやようやくリージョンについてわかってきたのですが、 先のソースでCombineRgnしたリージョンは どーーーしてもSetWindowRgnの後表示されないのです。 普通にCreateRectRgnしたやつやCreateEllipticRgn でつくったやつは表示されるのになぜゆえなのでしょう。 Delphiのソースまで読んだのに・・・。
送るメニューから起動して、送られたファイルのパスを取得するには どうしたらいいですか。 ワケあってVB4なんですけど。
764 :
デフォルトの名無しさん :02/05/02 04:11
質問です コントロールによくあるToolTipTextプロパティの文字列は改行できませんね? vbCrLfダメ vbNewLineもダメ もちろん chr(13)やchr(10)もダメ 使えネー そう思わない?
酒飲みながら寝ようとしたんだが。
結構みんな起きてんだね。お疲れ。
>>762 上記のサンプルコードでは俺の所では動いたぞ。
他のところが間違ってるんじゃないか?
君はC系出身みたいだからVBの仕様で
とまどうところが多いかもな。
>>763 SendToフォルダとCommand。
VB4でも使えるだろう。たぶん。
>>764 まじめにTip作りたいならCreateWindowExを使う。
VBらしくFormで代用してもいいな。楽だし。
>>765 取得されたパスがMS−DOS名(チルダ入り)になるのは仕様ですか?
Windowsの仕様だよ。 長いファイル名にしたかったらFindFirstFile APIでも使え。
正確には、Win9x系の仕様だな。 NT系だとロングファイルネームで取得される。 汎用性を保ちたいなら、そのへんも注意してや。
早朝にナイスフォローやね。
>>766 手抜きしたかったら、Dir(strShortPath)ってやってファイル名だけ
ロングファイル名を取得する手もある。パスは取得できないが。
まぁ、1階層ずつ全部DirすりゃOKだけど。
いやー昨日は泣き寝入りして 起きてすぐ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 というようにはできないもんでしょうか?
APIでよく使われる定数をVBで使う場合 どこを見て実際の数値を調べればよいのですか?
>>775 FormsにForm1が複数あったらどうするんだい?
779 :
デフォルトの名無しさん :02/05/02 18:13
>>775 すばやいレスありがとうございます。
>FormsにForm1が複数あったらどうするんだい?
同じ名前のフォームが造れることは知りませんでした。
コントロールを指定するところまではできるんですが、
プロパティを指定する方法がどうしても見つかりません。
781 :
デフォルトの名無しさん :02/05/02 18:34
>>780 ありがとうございますぅぅ!!
できました。感謝いたします。
ついでに質問なんですけど、
CallbyNameで任意のプロシージャを起動できますか?
解決しました。プロシージャを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が好きだからです。ナンツッテ
#スレとあんま関係なくてスマソね。
↑名前入れんの忘れた。とほほ。
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のタイプライブラリに宣言されている じゃあ ああ 面倒だな また 後でな (´Д`;)新手のもったいぶりアラシか オデは(藁
>タスクマネージャのアプリケーションの所に >アイコンを表示させない方法知ってる人いる?ぜひ、おせーて下さい。 が自己解決したんで。 ShowWindow(hWnd,SH_HIDE)でいけました。 こんなことで出来たのか。鬱。
>>786 じつは、StrechBlt()よりPaintPicture()の方が速かったりする。ま、条件によるの
かもしれんが
>>796 今は無き VB増強作戦で検証してたのを見た気がする。
あのサイト良かったのにナァ。
動的配列を確保してから解放するのはどうすればいいのですか?
>798 Erase
>>799 ありがとうございました。
できましたー。
>>796 StretcBltとPaintPictureのどちらが速いかは、環境次第で違う結果になる。
でも、両者にあまり速度差はないので、
拡大/縮小やるなら、やや高機能なPaintPictureの方がお勧め。
APIの使い始めにStrechBltを使うとAPIの意味がないと思いこむ罠。 #StrechBltが遅すぎる気もするな。 #VC++使って自前で作った方が速いんじゃないか?
追記。 昔の話ね。(2,3年ほど前) 今は速いかも。
805 :
デフォルトの名無しさん :02/05/03 20:32
複数のファイルを結合させるプログラムを作ろうと思うのですが、 ファイルの開き方はやはりBinaryで開くのでしょうか? 一般的に結合ソフトはどのように結合させてるのでしょうか? とんちんかんな質問かもしれませんが、よろしくおねがいします。
||
アホォ || モウクンナ
ヴォケ ∧||∧←
>>805 イッテヨシ !
∧_∧ ∧_∧ (/ ⌒ヽ ∧_∧ ∧_∧
( ´∀`) ( ´∀`) | | | (´∀` ) (´∀` )
( ) ( ) ∪ / ノ ( ) ( )
| | | | | | | || | | | | | |
(__)_) (__)_) ∪∪ (_(__) (_(__)
;
-━━-
>>805 俺ならメモリに読み込んでPutで追記。
ファイルそのままにしたいならOpenはBinary。
だな。
#たまには質問。
#ファイルの末尾を削る時ってみんなどうしてる?
#俺は全部読み込んでKill→Putなんだけど無駄が多くて。
即レスさん レスありがとうございます。 なるほど、その方向でいきたいと思います。 まだまだ前途多難ですが、、、 #質問はわかりません。すいません。
>>805 ファイルによるだろ。テキストファイルなら、Text モードだし、
バイナリファイルなら Binary モードだ。どっちかわからんのなら、
プログラム作る能力が無いのだから、あきらめれ。
>>807 俺は、一時ファイルに必要部分のみコピーして、Kill 元ファイル、
Name 一時ファイル AS 元ファイル だな。Kill → Put だと、
その間に異常終了したらファイルがなくなってしまうので、ちょっと
怖い。
VBでDirectX7をつかってゲームを作っているのですが、半透過のやりかたがよくわかりません。 透過ならカラーキーを設定して Call BackSurf.BltFast(x, y, CharSurf, r, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY) でできるのですが・・・。ご存知の方、いますか?
>>805 SetEndOfFile()なんてどうだ? 使ったことはないが
>>810 DirectXはよくわからんが、普通はアルファブレンドとかを使うな
>>809 さん
レスありがとうございます。
テキストファイルをバイナリモードで開けてはダメなのでしょうか?
困ったな、
>>まとれすさん
レスありがとうございます。
SetEndOfFileですか、難しそうですけど、使いこなせれば、うまく
いくかもしれませんね。ただ、ほんとに難しそう、、、
ありがとうございました。
>>812 > テキストファイルをバイナリモードで開けてはダメなのでしょうか?
別に良いんだけど、テキストファイルだと行単位の処理とかないの ?
テキストモードなら Line Input # で、行単位に読んだりできるので、
ちょっと楽。あと、Binary モードだと指定したファイルが無い時に
エラーにならずにそのファイルを作っちゃうので注意が必要。
>>810 Darw7では実装していない
DX8以降Drawは7のままであるから Drawでは、ないという事だ
ただし3Dのほうでテクスチャーで、できるようだ オデは3Dはやらない フィギュアヲタではないからだ
パフォーマンス無視のテクヒントをあげておく
Msimg32.dllにAlphaBlend関数がある
サーフェイスのデバイスコンテキスト互換ハンドル取得はわかるかな?
Draw使ってんのにAPIで描画という情けない技(藁
>>812 すまん。
>>811 の回答は、
>>807 の間違いだった
で、元の質問に対してだが、Shell関数でCOPYコマンド呼ぶ、ってのがかなり速いぞ
int a=0; みたいな書き方はVB6ではできなかったですよね?
>>815 ありがとう。やってみたけど、これいいね。
早速自前のライブラリに追加しますた。
>>816 出来ないよ。
a as longはa=0で初期化されるけどね。
>>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で取れたのですが、現在表示中のレコードが 何番目かというのの取得方法が分かりません。 おながいします。
>>816 できない。Constなら別だが。VB.NETでは、できるようになってる
>>818 そういうことだ。待機の問題とか出てくるけどな
>>820 AbsolutePositionでどうだ? 一応行っておくが、RDBMSでは、何番目、
という考え方はあまり使わないぞ(代わりにカーソルの位置を使う)
まとれすかっけーな。なんつーか、怖いモノなしじゃん。
>>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
デジカメ買っといで(W
>>828 すげ、、
こんな素晴らしいソフトがたった\4,900
しかも今ならドットコム価格\4,165 、、、恐るべしソースネクスト。
>>825 PhotoShopは高いからソースネクストの製品がいいよ。
つーか、俺の知り合いのPGも全員これ。
C使ってる連中は画面キャプチャ専用のプログラムを自作
するのが常識らしいが、VBAやVBのPGはこのようなツールを
使うのが常識。API使って作れないことも無いが、4千円
程度でこのような高機能なユーティリティが使えるなら
買う方が良い。
画面キャプチャは最近ようやくソフトウエアが 整ってきたからなあ。
アホか。シェアウェアなんて割れちまえよ
>833 ハゲ同
つーかMXやれよ
割れる気にもならん
839 :
あの・・・ :02/05/04 19:45
>>828 ありがとうござます!!
こんな良いソフトがあるとは知りませんでした(汗
さっそく買っちゃいました。マジレスして頂いて
ありがとうございますぅ!!日々精進です。
828はマジレスじゃないと思うのは俺だけか?
その前に、「あの・・・」氏はマジ質問なのかな。
FindWindowかなにかでターゲットのhWndを取得して、 GetWindowDCでhDCを取得、 GetWindowRectでウインドウサイズを取得しBitBit、 ReleaseDCでhDCを解放。 書き写した画像を適当な方法で保存してできあがり。 …一応マヂレスしてみた。
>>822 ほめても、何も出ないぞ(テレ笑
>>824 ほんとだ。ま、Array関数と同じ動きだな
>>825 [Alt]+[PrintScreen]して、ペイントにコピー、Officeをインストールしてれば、
gifで保存できる
>>843 まじめにやろうとすると、カーソルをどうするとか、半透明ウィンドウをどうする
とかって問題が出てくるな
845 :
デフォルトの名無しさん :02/05/05 01:59
インターネットに接続された瞬間、切断された瞬間ってどうやって取得したら いいでしょうか。
846 :
デフォルトの名無しさん :02/05/05 02:18
>>845 >>846 の方法は、あながち的外れじゃないぞ
とりあえず、RASならWM_RASDIALEVENTをトラップすればよさそうだな。問題は、
LANなんだが・・・
LANの場合は、厳密な判断は無理だろう。ルータやプロクシがどうなってるか、って
ことになっちまうからな。それこそ、外にPingを打つとかで判断するしかない
おおアレテルな いいぞ 厨スレらしいぞ
851 :
デフォルトの名無しさん :02/05/05 05:41
質問です。グローバル変数は良くないってよく聞きますが具体的にどんなとこがやばいの? 折れいつも楽だからループカウンタ以外ほとんどグローバルにしちゃうんですけど。 ちなみにこんな質問するくらいのスキルです。
もしPGの仕事をしていたら殺す。
>>851 フォームにコントロールはっつけて使っているだけの
純な厨はそれほど深刻ではないYO
いいぞ、それでも
わかるようになったらわかる
今はイイ(・∀・)
854 :
デフォルトの名無しさん :02/05/05 07:06
>>852 俺がプロPGなれるなら誰でもなれちゃうでしょ^−^;
>>853 そーですか、でも殺意を持たれるみたいなのでなるべく使わないようにシマス。
>>852 変数が多いと変数名がかぶって、考えるのがめんどいから
さらに、スペルミスで関係無い変数を参照してしまう可能性があるから
それを減らす為に長い変数名を付けると、タイプするのがめんどいから
それでも、バカなやつは間違えるから
>>851 デバッグしづらいからだよ。
例えばグローバル変数に依存してる関数を呼び出す時は、
いつどこでそのグローバル変数が変化するかも把握しとかないと
いけないだろ?
ある程度でかいアプリなら、実際不可能だ。
#いかにグローバル変数がウザいかは
#ある程度規模の大きいアプリを作るか、複数の人間で
#開発してみればすぐ分かるよ。
テストさせてくらはい。 スレ汚しすまそ。
トリップ付きで!!
鬱だ氏脳
DirectSoundを使うとWAVEファイルがどうやっても8bit音声で出力される もうだめぽ。・゜・(ノД`)・゜・。
861 :
VB初心者 :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してどのタブにドロップされたのかを
> 調べることはできるのでしょうか?
マウスの座標値から判断するしかなさそう。
>>851 「デバッグしづらい」は間違いじゃないがどちらかといえば「バグを起こしやすい」ってところ
かな。10個ぐらいのグローバル変数なら、何をやっているのか管理できるけど、100個になったら
無理。そのために、構造体を使ったり、クラスを使ったり、ローカルスコープに押し込めたりする。
これが「カプセル化」。オブジェクト指向でも出てくる重要な概念だから、きちんと把握しておいた
方がいいな
>>861 内部的な状態が知りたければ、RtlMoveMemory()とかでコピーして調べるしかない。
で、Null値は、データベースと一緒に使われるもので、「何も入っていない」状態を示している。
Empty()は、初期化されていない状態、だったかな
>>862 MouseDownイベントでとれるんじゃないか? もう一個の、どこのタブにドロップされたかだが、
結構面倒みたいだな。DropされたときのMouse位置から計算して求めることができるぞ
>>864 うお。サンプルプログラム書いて試してたら、もろかぶった・・・鬱
>>863 >>864 ありがとうございます。
そうか、データベースは思いつかなかった。
Pro*C でオラクル相手の仕事してるのに……(w
VB はユーザーインタフェース専門言語って思っていたので。
>>863 >>864 ありがとうございまふでふ。
D&Dの方は座標で調べるんですね。
とりあえずやってみまふわ。
でわでわ、、、
868 :
デフォルトの名無しさん :02/05/05 23:51
サウンドを鳴らしながらフォームを移動させたいのですが DirectXを使わないで良い方法ありませんか
>>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
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
>>879 コードでやってるんならControlBox=Falseかつ、
Caption=""じゃないと消えない。
デザイン時にやってるなら今XPが無いから分からんな。
883 :
デフォルトの名無しさん :02/05/06 20:43
>>864 ローカルスコープに押し込めるってどういう意味ですか?
というか他のモジュールで同じ変数を使いたいのでグローバルにしちゃうんですが、
どうすれば使わず済むんですか?
真面目に疑問です。教えて!
884 :
デフォルトの名無しさん :02/05/06 22:18
「Visual Basic大全500の極意」って、 目次や索引のページ数がデタラメなだけだと思ってたら、CD収録の サンプルまで中身がダメダメだった。 出来が悪いとかじゃなくて、プロジェクトファイルで存在しないフォーム 呼び出してたり。 改訂版出たら無料で取り替えたりしてくれんのかな? 改訂版の印税まで著者に入ったりしたらイヤだぞ。
そんなもん買ってる君にアーメン。
>883 他モジュールから参照したい場合は、プロパティプロシージャを通して公開すべし。 その変数がモジュールに依存しない、本当の意味でのGlobalなものでない限りは グローバル変数化は極力避けるようにした方が無難だよ。 ...でも、このへんの大切さは一度失敗してみないと分からないかもなァ。
>>879 こっちの環境だと消えるぞ
>>883 パブリックにしない、ってことだ。逆に聞くが、どういう用途の変数をグローバルに
したいんだ?それを聞いてから、回答を考えることにするぞ
グローバル問題の直接的な解決ではないが、昔やった小ネタでは、
Type g
End Type
という構造体を作っておいて、グローバル変数をこの構造体のメンバーにした、
なんてのがあったな。スコープの問題はクリアできないが、プログラミング上の
管理はすごい楽だった。
あと、デバッグ用のフォームを用意しておいて、グローバル変数を全部その
フォームのラベルに格納したり。デバッグ時は、変数の値を見ることができるので、
すげー便利だった。もちろん、リリース時には非表示にするけどな
>>884 出版社に訴えろ。改訂版がでることは、まずないだろうけどな。売れ行きがよければ、
版を重ねたときに訂正されるかも。そのときは、著者に印税が入るな
888 :
デフォルトの名無しさん :02/05/07 00:11
VBでネットワーク経由のプリンタへのポートを変更するにはどうしたら良いでしょうか。 Win98でいう、プリンタのプロパティ→詳細タブ→ポートという部分を変えたいのです。 --------- 現在ポートは 「\\ServerA\Printer」 になっていますが、 これを 「\\ServerB\Printer」 にしたいのです。 --------- 数十台のクライアント端末でこの作業をするので、自動化出来ればと思ったのですが…。
追記。 あるプリンタ情報に「ポートの追加」→「それを使用」→「以前のポートを削除」と 出来れば良いのですが…。 ご存知の方おられましたらおながいします。
890 :
デフォルトの名無しさん :02/05/07 01:21
皆さん長い間お世話になりました。 今回をもってVBを卒業させていただきます。 次回は・・・。
COBOLです。
あ、C#始めました。
そして挫折しました。
>>888 >おながいします。
人にもの聞くのにふざけてやんの
>>879 メニューバーを出しているからだったりして…
うそうそおこらないでぐはっ
おねがいしますよりおながいしますの方が気持ちがこもってると思う
899 :
デフォルトの名無しさん :02/05/07 02:37
>>886 プロパティプロシージャを通して公開・・・の意味が分からないです・・・
すいません;
>>887 グローバル変数を構造体にまとめる、っていうのはいいアイデアですね。
今度から使わせてもらいます(グローバル使うなって・・・)
どういう用途の変数を・・・って質問ですが、
例えばrect型を10個くらい作って、最初に全部代入しておいて、Bltの時に使い分ける、という風にしてるんですが、
(一つのrectに毎回入れなおすのは処理の無駄な気がするので・・・)
その代入させる処理が結構長いので、フォームモジュールが長くなるのが嫌なので別のモジュールでやりたいんで、
仕方なくその10個のrectをpublicにしてるんです。
こんな感じなのでどんどんグローバル変数が増えてしまう・・・
どうすればいいんでしょうか?
ちなみに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ぐらいもってるだろな?
ああメンドクセーまた気が向いたらな
ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ
ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ちんこ
>>897 ,
>>901 >>889 で言ってるな。見逃してたスマソ
>>899 >>902 の言うとおり、クラスに分けたほうがいいだろうな。
で、どっかで聞いたような名前だが、SetRect()なんてメソッドを用意してもいいし、
コレクションで公開してもいい
どちらにせよ、オブジェクト指向とかの最近のプログラミングメソッドは、パフォーマンスが
要求される処理などにはきつい部分がある。その辺は、トレードオフだな
ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ちんかす
こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ し
ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ
ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ki
sakana]
ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ ま ん こ
>>903 sine
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
ま
ん
こ
む! まとれす と オデのレスが アラサレテイグ オマエ ユルサン
オレジャナイゾ!!
>>906 > どちらにせよ、オブジェクト指向とかの最近のプログラミングメソッドは、パフォーマンスが
> 要求される処理などにはきつい部分がある。その辺は、トレードオフだな
実際トレードオフを取るとパフォーマンス上問題がないことがほとんどという罠。
オフスクリーンもやるか アトデナ 厨よ、理解できないからってアラスなYO これも理解できないんじゃHTMLのお勉強から逝け
削除してもらったほうがえぇんでないか?
>>919 MSDNHELPも読めない厨がSDKが日本語だろうとそれだけで理解できるわけないだろ
またSDKだけですべて理解できるやつがいたら2ちゃんには来ないわ(藁
基本的にSDKに限らず、リファレンスは英語のMSの出したままのほうが望ましい
それがわかってないうちは”厨”の定義は免れないZO
日本語リファレンスしか読まんやつは既成コントロール貼るしかできんぞ
ジャナ 新スレになったらまたオフスクリーンサーフェイスでアラシに来るぞ
なんだかなあ。えらく荒れてるねえ。
GWだから仕方ないとはいえ。
>>899 まとれすも言ってるとおり、結局はスピードとどっちを選ぶか、になるよ。
1秒間に数十万回代入するならクラスなんか使ってちゃ遅すぎだし。
・祝日 ・六曜 これを返すそれぞれの関数キボーヌ
925 :
デフォルトの名無しさん :02/05/07 11:23
String型にサイズ制限ってあります? えらく長い文字列を入れても大丈夫でしょうか。
>>925 特に無い。システムメモリは考慮しとき。
>>925 可変長文字列には、約 2GB (2^31) までの文字を格納することができます。
固定長文字列には、1 〜 約 2GB (2^31) の文字を格納することができます。
>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プロパティとかが隠れた制限を持ってるんでしょうか?? リストボックスだと並べ替えたりの操作がラクなのデスが 切れるのが仕様だとすると自分でリスト構造(よくわかってない)を なんとかしないといけないらしい。
タイトルバーのないフォームでリージョンを作成し 必要な部分以外を透明にしたが、 領域外でフォームのイベントが発生しないようだ。 絵じゃなく文字なんでドラッグして移動するのに都合が悪い。 できればフックはしたくないが、どうすりゃいい?
>>923 ない。祝日はテーブルで持つのが楽。六曜は、どっかにDLLがあったな
>>929 そのエラーが出るときは、ほとんどパスの間違いだ。ショートパスは "^"
じゃなくて "~" じゃないか?
>>930 まぁ、そんなものだろう。自分で管理するのが面倒っていうが、配列に
入れるだけでもいいし、リストボックスに文字列の一部を入れておき、
ItemDataで配列の要素と同期するって手もあるな
>>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月号についてた。
1分おきにPingを打ちたいんですがどうすればいいですか?
>939 丸投げすぎて、何が聞きたいのかわからん 一定時間おきに何かしたいならタイマーコントロール使えば?
>>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使うのやめれ。
質問じゃなくて愚痴なんだけど(おいおい・・・)、MSDNのサンプルコードって、どうして手抜きで粗削り (Variant使いまくりとか、マジックナンバー使いまくりとか、オブジェクトを.... As Newで宣言・・・ e.t.c.)なのが多いんだろ? 「わかっている」人がそうした点を踏まえた上で参考にするなら問題ないが、(批判力のない)初心者に 薦めるのはリスクが多過ぎる。(といって、ヘルプを読む習慣をつけさせなければ、厨房質問が増殖する のが眼に見えてるし・・・・) 初心者を指導するコツを教えてください。 (やっぱり質問だった。(^^;)
>>936 さっきやってみたら出来たぞ。
特に注意する点は無いと思う。普通のAPIと一緒。
>>942 インデックス使うなり。
コントロールを動的に読みこむのと一緒。
>>944 Unicodeなら文字数×2でいいが。
Shift-Jisならつらいな。
>>947 うーむ。俺はあんまり初心者を指導する立場にないのであれだけど、
やっぱ基礎は大事なので初心者本を3,4冊読ませてから実践で鍛えるような
感じがいいかと。その過程でMSDNの使い方を教えてやれば。
#ネットで調べるようにするはダメなの?
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 え、もっと簡単なやりかたあるんですか?
948で書いてるのに( ´д`) ・メニューエディタで増やすメニューにインデックスをつける。 ・増やしたい時に、LoadしてCaptionやらVisibleやら設定。 サンプルはネットに転がってるよ。一般的なやりかただし。
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
で、第二月曜はどうやって取得するのが楽ですか。
>>955 でも、Sendkeysでやるとフォーカスを持たせないとできないんじゃ?
先ほどのメモ帳のような例ならいいですが
もうちょっと複雑に、「あるボタンを押して」などの情報を送りたいときは
Sendkeysでは対処できませんし・・・。
>>945-946 VBは内部でUNICODEだから、strconvしないとLenBで正確なバイト数は取得できないんだよ。
例えば、
LenB("あいa")だったら、6バイトって帰ってくるんだぞ。
おかしいだろ、本当は5バイトだもんな。
これを正確にバイト数を調べたいと思ったら、strconvでvbFromUnicodeしないとだめなんだよ。
>>958 だったら、はじめからそう書けよ。こっちには、そっちの事情なんか
わからないんだから。
で、フォーカス持っていないアプリに Key 送りたいの ? そのアプリの
ウィンドハンドルは得られてるの ? また、「あるボタン押してなどの
情報」って具体的に何 ?
>>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の最新バージョンはなんていう名前ですか?
966 :
デフォルトの名無しさん :02/05/07 23:35
>>936 ディスクアクセスを若干高速化するために、
ショートファイル名を作らない設定にしてるユーザもたまにいるけど、
その場合はどうなるんだろ?
それが原因で正常に動かないインストーラも時々見かける。
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より楽そうですね。
>>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
>>即レスさん レスありがとうございます。 そうですか、即レスさんの環境ではうまくいきましたか、 俺のは何かがおかしいのですね、何かが、、、しらべてみます ありがとうございました。
976 :
975=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 クスッ
日本語が理解できてない奴がいる。本当のことを言われてあせったんだね。
>>977 どうせネタかCGIと鯖の違いをわかってない真性バカだろ。
あいてにするだけ無駄。
おっ荒れてるな いいぞ もめてこそ厨スレだw なるほど VBでCGIプログラムを作りたいのか それはできるが HTTPレスポンスわかってる? アラシもそこを言いたいのだろうな VB以前にHTTPがわかってるかどうか 高速化するならIISなど製品鯖使わず VBCGIにカスタマイズしたHTTP鯖作るのも手だな それをいいたいのだろう まあ、またもめていいぞ。
>>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って考えれば分解できるでしょ
し、新スレの話が出てないのはなぜだ??
995 :
デフォルトの名無しさん :02/05/08 12:31
禿
996 :
( ´・∀・`)@28歳くん ◆7aTaLnPA :02/05/08 12:31
じゃじゃじゃじゃーん
あひゃひゃひゃ!!
大名レース
殿様競輪
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。