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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2006/02/03(金) 22:58:33
VisuarlStudio
0855デフォルトの名無しさん2006/02/25(土) 22:30:17
>>831
ああごめん、>>792を読んだもんだからちょっと思い出してみただけです。
アンカー付け忘れ。IDEとexeうんぬんは余談で。
0856デフォルトの名無しさん2006/02/25(土) 22:41:18
>>842
Debug.Assertが実行されるかどうかをブール値で返してるの。
あと誰も「API」を「使いたくて」使ってるわけなんかないから、最後の
トリッキーとか言うのは読まなくていい。
0857デフォルトの名無しさん2006/02/25(土) 23:13:06
>>792
AllWin32.Ocx を使うとか。

>>856
自分自身の Function 名を引数で渡して ByRef bIsIDE As Boolean で受ける、
なんて、よく思い付くな・・・
確かに、関数名の変数に戻り値を設定出来るけど・・・
ったく、世の中には頭の良い人が一杯だ。
0858デフォルトの名無しさん2006/02/26(日) 05:53:39
ThunderRT6Main で思い出した

ThunderRT6Main の「Thunder(サンダー)」はVBの開発プロジェクトコード名
MSのプログラミングツール製品のイベントには雷のアイコンが使われているけど ココから来てるとの事
VB誕生当時、完全なイベント駆動は画期的だったらしく 現在も「サンダー」が名残っています

まぁ知ってても役に立たないVB豆知識でした
0859デフォルトの名無しさん2006/02/26(日) 07:59:13
>>858
一番最初にVBを開発したのはMSじゃぁないんだけど・・・
0860デフォルトの名無しさん2006/02/26(日) 14:47:40
FindFirstChangeNotificationとWaitForSingleObjectを使った
フォルダ監視のプログラムを常駐させています

FindFirstChangeNotificationがタイムアウトを返せば関数を再帰呼び出し、
ファイル変更のシグナルを検知すれば処理を行って、また監視継続させます

日中はそれでうまく動いているのですが、深夜・早朝も使うことがあるため、
パソコンをつけっぱなしで放置しています

次の日の朝確認すると、再帰呼び出しのCallのところで
「スタック領域が不足しています」とエラーが出て、止まってしまいます

スタックを増やすか再帰呼び出しごとに解放できればいいと思うのですが、
方法がわかりません・・・

VBでは無理なんでしょうか?
0861デフォルトの名無しさん2006/02/26(日) 15:02:21
>>860
そんな処理になんでリエントリを使う必要があるのよ。
根本的に考え方がおかしい。
0862デフォルトの名無しさん2006/02/26(日) 15:13:47
再起呼び出しを使ってみたい年頃なのね
0863デフォルトの名無しさん2006/02/26(日) 15:16:48
>>860
わざわざ API なんか使わなくても Dir$ でいいじゃん。
0864デフォルトの名無しさん2006/02/26(日) 15:18:39
>>863
今の問題はそこではない
08658602006/02/26(日) 15:25:59
はじめはdo loopとdirでやっていたのですが、
CPU使用率が常に100%になってしまうので
別の方法はないかと、見つけたのが
こういうやり方だったんです…

どんな考え方をするべきなんでしょうか
0866デフォルトの名無しさん2006/02/26(日) 15:27:38
単純にFindCloseChangeNotificationを呼んでないとか。
本当にこれに「再帰呼び出し」を使ってたらただの馬鹿だが、
繰り返し呼び出すくらいの意味に勘違いしてるだけだと思うが。
0867デフォルトの名無しさん2006/02/26(日) 15:28:11
>>865
つ Timer
0868デフォルトの名無しさん2006/02/26(日) 15:31:52
>>865
つDoEvents
0869デフォルトの名無しさん2006/02/26(日) 15:35:03
>>868
DoEvents はスタックオーバーフローの温床になるので
使用は極力控えましょう
0870デフォルトの名無しさん2006/02/26(日) 15:35:18
質問者が馬鹿なら突っ込む方はもっと馬鹿かw
タイマなんか使えるわけないだろw
次のインターバルで待機関数呼び出すまでの間にイベントが起こったらどうするんだよw

正攻法にCでdll作ってスレッドでやるのがいいんじゃないの?
スレッドでフォルダを監視して、イベントを検出したらフラグを立てる。
VB側ではそのフラグをポーリングすると。
あるいはウィンドウメッセージ送出するとか。
0871デフォルトの名無しさん2006/02/26(日) 15:35:51
WaitForSingleObjectを使うならスレッドを起こさないとなー
しかしVB6では無理だしなー。
まあ、再起呼び出しはアホ過ぎるが
0872デフォルトの名無しさん2006/02/26(日) 15:37:16
ちとかぶったか
08738702006/02/26(日) 15:41:42
ああタイマってのはDir使ってイベントの検出を自前で実装するってことか。。。
スマン、俺が馬鹿だったw
08748602006/02/26(日) 15:44:07
>>866
単純に呼んでませんでした…
今日はこれを入れて常駐させて様子見します
ありがとうございました

>>870-871
Cはやったことないです…


馬鹿ですみませんでした
これで失礼します
0875デフォルトの名無しさん2006/02/26(日) 15:47:34
>>874
VB.NETに乗り換えればそのものずばりのコンポーネントがデフォであるぞよ。
0876デフォルトの名無しさん2006/02/26(日) 15:50:43
>>874
再起呼び出しをやめないとcloseしても
そのうちスタックオーバーフローは発生するぞ
0877デフォルトの名無しさん2006/02/26(日) 15:50:44
あれはでもWin9xでは使えんよ
0878デフォルトの名無しさん2006/02/26(日) 15:53:52
>>869
それは使い方を間違えてるだけ。
0879デフォルトの名無しさん2006/02/26(日) 15:59:18
DoEventを使ってもCPU使用率100%を下げるのには役に立たない。
単に画面が張り付くのを回避できるだけ。
0880デフォルトの名無しさん2006/02/26(日) 16:04:48
>>878
別に使うなとは言わん
Gotoだって使い方を間違えなければ、使えないことはない
俺は間違えない!って考えの人なら、もはや言う言葉は無いがな
0881デフォルトの名無しさん2006/02/26(日) 16:17:27
CPU使用率を下げるならSleep(1)だな
0882デフォルトの名無しさん2006/02/26(日) 16:21:25
DoEvents で CPU 使用率上がっても、別に他の操作に影響ないよね。
他の作業で上がった場合、他の操作に影響出るけど。

>>881
通信系とかは、Sleep 使わない方がいいと思う。
0883デフォルトの名無しさん2006/02/26(日) 17:26:31
■VBのバージョン : VB6

カナからローマ字のヘボン式に変換するソースありますか?
長音oを含む場合母音を重ねないってとこが上手くいきません・・

上記のソースないっすか?
0884デフォルトの名無しさん2006/02/26(日) 17:39:31
あるよ
0885デフォルトの名無しさん2006/02/26(日) 17:43:54
>>882
> DoEvents で CPU 使用率上がっても、別に他の操作に影響ないよね。
あるだろ。他の操作に割り当てられるCPUが減る。
他の操作に使用するCPUが少なければ実害は無いかもしれんが、
他の操作に使用するCPUが多ければ、確実にその操作に影響を与える。
0886デフォルトの名無しさん2006/02/26(日) 18:04:25
>>883
その上手くいかないコードを出せば、修正点を指摘してくれる人は居るかもしれないが
このスレに限らず、コード丸投げソースクレクレはこの板では嫌われてる。

結局それらは努力せずに利益だけ得ようっていう甘ちゃんな考え方だし。
「ものすごく努力したんですが上手くいきません」って、その努力の結果(ソースコード)も出さずに
口先だけで語られても全然説得力無いし
0887pp2006/02/26(日) 18:18:15
テキスト処理で1行ずつ取り出して文字の置き換えをするプログラムで取り出した
文字列が改行のみの場合にその文字列自体をなくすには、どうすればよいでしょうか。
Replace関数で”\n”を””にしてみましたけどだめでした。初心者の私に教えてください。
0888デフォルトの名無しさん2006/02/26(日) 18:48:07
いや、VBのReplace関数は正規表現サポートしてないんだから、
vbcrlfをvbnullstringにしないと。
RegExpやBREGEXPのReplace関数なら普通は\r\nでしょ。
まあ、\nでいい場合や\rのみの場合もあるので、
改行コードについては自分で調べて適切なもの使いな。
VBの組込定数でもvbcrとかvblfとかあるからさ。
0889デフォルトの名無しさん2006/02/26(日) 18:52:49
>>885
いや感覚としてサ。
他の作業(例えばスーパーπとか)でCPUが100%になると、
他の作業がカクカクするけど、DoEvents を入れたVBの無限ループで
CPUが100%になっても、大してカクカクしないからサ。サ。
ちょっとVB起動して検証してみてくれるカナ?カナ?

>>887
置き換えるのをやめればいいんじゃね?
一行読む→変換→変換後を書き込む、なら、「変換後を書き込む」をしない。
0890デフォルトの名無しさん2006/02/26(日) 19:07:34
>>889
DoEventで未処理のWindowメッセージを処理するわけだから
GUIについては「感覚として」重くはならんだろうけど
低プライオリティで動いてるプロセスやCPUの使用率見て動作する省電力機能などに影響は大きいよ。
外注がそんなプログラムをもってきたら即差し戻しだな。
0891デフォルトの名無しさん2006/02/26(日) 19:11:16
ユーザにとっては感覚が軽いほうがいいんだよ
0892デフォルトの名無しさん2006/02/26(日) 19:22:03
もしかしてWindows3.1とか使ってないか?
メッセージループのアイドルタイムにCPUバウンドな計算をさせるってテクニックがあったのを思い出した。
0893デフォルトの名無しさん2006/02/26(日) 19:30:06
>>887
Line Input だと LFのみは行区切りとは見なしてくれないの?
そうだとすると、vbCR ( chr(10) ) を "" にリプレースではだめかな。
VBでは¥はエスケープ文字としては使えない。
0894デフォルトの名無しさん2006/02/26(日) 19:35:56
>>889
カクカクとかそういうアバウトな感覚で答えないでくれないかな。
仮にOS上で優先順位が同じ二つのプロセスしか動いていないとする。

一つはCPU100%使用するアプリ。一つはCPU10%程度ですむアプリ。
OSはこの二つのアプリに50%ずつ割り当てるから、
当然、CPU10%程度ですむアプリは十分なCPUを割り当てられているから
カクカクならない。
これをみただけで結論だしてるでしょ?

一つはCPU100%使用するアプリ。一つはCPU70%必要なアプリ。
こういう場合には、50%しか割り当てられないから、
CPU70%必要なアプリは遅くなるんだよ。
0895デフォルトの名無しさん2006/02/26(日) 19:37:55
>>890
成る程、ポン。
0896デフォルトの名無しさん2006/02/26(日) 19:40:31
>>893
訂正 vbCR > vbLF

補足すると VBで "\n" にあたるのをCで書くと "\\n" で、つまり見た目どおりの文字列。
0897pp2006/02/26(日) 19:52:22
>>888>>889>>893 ありがとうございました。
もともとLineInputには改行コードが含まれてないようなので>>889さんの意見の通りに
書き込みをしない事にして解決しました。みなさん、貴重な意見ありがとうございました
0898デフォルトの名無しさん2006/02/26(日) 20:25:26
>>894
>>891
0899デフォルトの名無しさん2006/02/26(日) 20:40:02
>>891 >>898 引っ掻き回してるのはこいつかw
0900デフォルトの名無しさん2006/02/26(日) 21:13:09
VBって、確か中間コードにコンパルされるんだよね。
その言語仕様が解説されたサイトを教えて下さい。
0901デフォルトの名無しさん2006/02/26(日) 21:16:11
>>900
http://www.1101.com/MOTHER3/
0902デフォルトの名無しさん2006/02/26(日) 22:02:25
>>900
P-CODE?
VB5以降は、とりあえずオブジェクトファイル作られて(そして普通は消される)けど、最終的にはネイティブ
0903デフォルトの名無しさん2006/02/26(日) 22:08:30
>>902
コンパイルでPコード選んでも?
0904デフォルトの名無しさん2006/02/26(日) 22:35:11
いやP-CODEは…あれはインタプリタだっけ?
あんまり使わないからよーわからん
0905デフォルトの名無しさん2006/02/27(月) 11:14:16
>>854
getElementByIdかgetElementsByNameで取得して代入。
0906デフォルトの名無しさん2006/02/27(月) 21:30:47
ネットワークカードが2枚刺さってる環境で、Winsockを使用してUDP通信をしています。

ネットワークカードは別セグメントで

1枚目:192.168.10.1 → VBから使用している側
2枚目:192.168.20.1 → ルーターを介して別ネットワークへ

といった感じになっています。

この場合、Winsockに「192.168.10.1」側のLANカードを使用する、といった設定は
必要になるのでしょうか?

というのも通信が不安定で頻繁に接続が切断されているんです…orz

試しにルーター側のネットワークケーブルを引っこ抜いてみると
通信は安定します。

ルーターの設定が原因かもしれませんのでスレ違いかもしれませんが、
わかる方いらっしゃいましたら教えてくださいm(_ _)m
0907デフォルトの名無しさん2006/02/27(月) 22:43:30
>>906
IPアドレスとポート番号の指定だから、それは関係ない様な気がするけど・・・
route コマンドとかは?
0908デフォルトの名無しさん2006/02/28(火) 00:26:35
テキストボックスを選択した部分だけStrConvで変換して
選択部分とキャレットの位置はそのままにしたいのですが
テキストを右の方から選択してキャレットが選択位置の
左側にある場合はSel***系のプロパティだけで実装できるでしょうか?
0909デフォルトの名無しさん2006/02/28(火) 01:29:20
>>908
出来る。
0910デフォルトの名無しさん2006/02/28(火) 01:39:44
>>909
うそつき
キャレットの位置は無理
0911デフォルトの名無しさん2006/02/28(火) 08:22:24
そうやって相手すると馬鹿が居つくよ。
まあ相手されないならされないでこういう奴はされるまで居つくだろうけどw
地縛霊みたいなもんか。
0912デフォルトの名無しさん2006/02/28(火) 11:20:45
>>908
何がやりたいのかサッパリ理解出来ない・・・
0913デフォルトの名無しさん2006/02/28(火) 13:18:40
AB[CD]lE ([]=選択範囲 l=キャレット)
を
AB[cd]lE
にして、選択範囲もキャレットも維持したいんだろ。
で、キャレットが選択範囲の左右どちらにあるかで、Sel****で
実現できるかどうか変わると。
0914デフォルトの名無しさん2006/02/28(火) 13:59:27
>>913
右から左へ反転選択した場合だって実現出来るんじゃないの?
SelText / Mid$ とか使えば、どっちにキャレットがあるから分かるから、
改めて左から右へ反転選択し直すとかして。
単なる文字列処理なんだし。
0915デフォルトの名無しさん2006/02/28(火) 14:11:31
>>914
キャレット位置の取得/設定プロパティはない。
0916デフォルトの名無しさん2006/02/28(火) 14:42:10
ええぇぇぇ?
0917デフォルトの名無しさん2006/02/28(火) 15:19:37
>>906
OSは何?98/Meはどうあがいても無理
NT系ならrouteコマンドでちゃんとルーチング設定しろでFA
0918デフォルトの名無しさん2006/02/28(火) 16:22:21
>>916
あったっけ?
どんな名前?
0919デフォルトの名無しさん2006/02/28(火) 16:35:06
>>918
ないよ、909と916がアホなだけ
たぶんキャレットと選択範囲の区別すらついてない
0920デフォルトの名無しさん2006/02/28(火) 17:11:53
>>919
でも、確かに、あってもいいプロパティだよね。
って、今迄に一度も必要になった事はないけど・・・
0921デフォルトの名無しさん2006/02/28(火) 17:19:50
まー、無いなら無いでいいんじゃない?
この先どうなろうと俺らの知ったことじゃないし
0922デフォルトの名無しさん2006/02/28(火) 20:14:34
GetCaretPosとかの話題をあえて避けてるような空気
0923デフォルトの名無しさん2006/02/28(火) 20:46:53
ためしにTextBox:Text1をForm:Form1に貼り付けて、次のコードぶち込んで実行し
private sub Text1_Change()
debug.print Text1.SelStart
end sub
0924デフォルトの名無しさん2006/02/28(火) 21:51:36
>>922
クライアント座標を受け取っても、何文字目かは分からない・・・
0925デフォルトの名無しさん2006/02/28(火) 22:17:54
EM_LINEINDEXとかの話題をあえて避けてるような空気
0926デフォルトの名無しさん2006/02/28(火) 22:49:06
>>925
それ、複数行のやつしか使えないんじゃなかったっけ?
0927デフォルトの名無しさん2006/02/28(火) 22:53:37
何か問題でも?
0928デフォルトの名無しさん2006/02/28(火) 23:02:00
VBの用語を調べられるサイトってある?
0929デフォルトの名無しさん2006/02/28(火) 23:11:26
>>927
複数行じゃないやつに使えない。
0930デフォルトの名無しさん2006/02/28(火) 23:12:42
>>928
つMSDN
0931デフォルトの名無しさん2006/02/28(火) 23:44:16
>>929
何か問題でも?
0932デフォルトの名無しさん2006/03/01(水) 00:25:11
>>922
まーた、試したこともないのに適当なこと抜かすやつが出てきたな
SetCaretPosで見た目上、位置を変更できたように見えるが
VBのテキストボックスが内部でキャレット位置を保持していて
現在の位置を無視するので動作がおかしくなるだけ

>>924
EM_POSFROMCHAR で分かる
0933デフォルトの名無しさん2006/03/01(水) 02:05:15
VB6.0で、テキストボックスに文字を入力できないようにするのは、
KeyPressイベントでKeyCode=0にするまでは解ったのですが、
既に入力されている文字をDELETEキーで削除できてしまいます。

DELETEキーを受け付けないようにしたいのですが、
どのようにすればいいのでしょうか??
0934デフォルトの名無しさん2006/03/01(水) 02:21:38
>>993
KeyDownイベントで KeyCode = 0
というか、テキストボックスに文字を入力できないようにするなら
Text1.Locked = True でいいんじゃない?
KeyPressやKeyDownでキーコードつぶすのは、
キーによって細かく動作を変えたいような場合にしか使わんよ
0935デフォルトの名無しさん2006/03/01(水) 02:22:43
Locked
0936デフォルトの名無しさん2006/03/01(水) 06:14:49
Dim s, l As Integer
With Text1
s = .SelStart
l = .SelLength
.SelText = UCase(.SelText)
.SetFocus
.SelStart = s
.SelLength = l
End With
0937デフォルトの名無しさん2006/03/01(水) 08:09:43
> Dim s, l As Integer
> Dim s, l As Integer
> Dim s, l As Integer
0938デフォルトの名無しさん2006/03/01(水) 14:11:43
> Dim s, l As Integer
> Dim s, l As Integer
> Dim s, l As Integer
0939デフォルトの名無しさん2006/03/01(水) 16:03:54
ttp://www2.moug.net/bbs/program/20060301000005.htm
0940デフォルトの名無しさん2006/03/01(水) 21:22:09
たとえばテンキーの"+"を押したときにコマンドボタンをクリックさせるのって

keydownイベントに

if keycode = (107) then
commanbutton1.value = true
end if

じゃだめなんですかねー^^;
0941デフォルトの名無しさん2006/03/01(水) 21:30:40
失礼!
commanbutton1→commandbutton1
0942デフォルトの名無しさん2006/03/01(水) 21:45:11
Callしてやれば同じ事だろ
0943デフォルトの名無しさん2006/03/01(水) 21:52:51
>>940
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = &H6B& Then
KeyCode = VBRUN.KeyCodeConstants.vbKeySpace
End If
End Sub
0944デフォルトの名無しさん2006/03/01(水) 21:53:18
いや ビジュアル的に
ボタン押してるアニメーションも欲しかったので
0945デフォルトの名無しさん2006/03/01(水) 21:56:03
>>943
&H6B& → vbKeyAdd
0946デフォルトの名無しさん2006/03/02(木) 03:34:33
>>934
Locked ってXPだとバグあるよね
Locked = True なのにコンテキストメニューからペーストできちゃう
0947デフォルトの名無しさん2006/03/02(木) 05:14:00
>>946
そんなバグつきのバージョン使ってるやつのことなんかしらね
アップデートできない事情があるならコンテキストメニューも潰せ
0948デフォルトの名無しさん2006/03/02(木) 05:59:45
WebBrowserで異なるドメインのためアクセスできないフレームのドキュメントにアクセスする方法を教えてください
0949デフォルトの名無しさん2006/03/02(木) 06:00:20
嫌です
0950デフォルトの名無しさん2006/03/02(木) 06:37:52
くずが
0951デフォルトの名無しさん2006/03/02(木) 09:13:44
>>946
VB6はXPで動作保証されてません。
「MSのサイトでは云々」って話は無意味だから。
09529482006/03/02(木) 10:34:56
誰かわかる人いませんかー?
0953デフォルトの名無しさん2006/03/02(木) 10:42:45
いません
0954デフォルトの名無しさん2006/03/02(木) 10:51:08
>>952
ドメインが違うとアクセス出来ないのは何故?
URLでサイト開くんじゃないの?
レス数が950を超えています。1000を超えると書き込みができなくなります。