(*´д`*)ウッ… VB初心者質問スレ Part15
■ このスレッドは過去ログ倉庫に格納されています
0001エロチカセブン
NGNGPart 2 http://piza.2ch.net/tech/kako/990/990793224.html
Part 3 http://piza2.2ch.net/tech/kako/1000/10005/1000523122.html
Part 4 http://pc.2ch.net/tech/kako/1006/10069/1006922992.html
Part 5 http://pc.2ch.net/tech/kako/1010/10106/1010624646.html
Part 6 http://pc.2ch.net/tech/kako/1013/10138/1013844542.html
Part 7 http://pc.2ch.net/tech/kako/1015/10158/1015836357.html
Part 8 http://pc.2ch.net/tech/kako/1018/10187/1018794901.html
Part 9 http://pc.2ch.net/tech/kako/1020/10208/1020830472.html
Part10 http://pc.2ch.net/tech/kako/1022/10221/1022127528.html
Part11 http://pc.2ch.net/tech/kako/1024/10243/1024380249.html
Part12 http://pc3.2ch.net/test/read.cgi/tech/1026642565/
Part13 http://pc3.2ch.net/test/read.cgi/tech/1029241786/l50
Win32 API関連スレ
Win32API 質問箱 Build4
http://pc.2ch.net/test/read.cgi/tech/1023361418/
心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.VBScript もこのスレでOK。
4.インストーラーなどの質問もOK。
五.下ネタもたまにならOK
0288デフォルトの名無しさん
NGNG「状態」を保存しておく変数をひとつ持ってそれをもとにアクティブにするコントロールを割り出すとか。
各コントロールの状態からアクティブにすべきコントロールを返す関数を用意しておくとか。
いろいろあるじゃん。
0289デフォルトの名無しさん
NGNGタイマーコントロールでグローバル変数にアクティブコントロールを
保存しとくってのがVB房らしくていいぞ
0290デフォルトの名無しさん
NGNGタイマーコントロールで1秒おきにグローバル変数にアクティブコントロールを
保存しとくってのがVB房らしくていいぞ
0291284
NGNGありがとうございます。
>「状態」を保存しておく変数をひとつ持って〜
つまり、状態Aならこれ、状態Bならこれ……という感じですかね。
その状態の"変化"を感知するにはやはりすべてのコントロールのイベントプロシージャが
必要になってくるのかな、と思いますが、どうでしょうか。
>各コントロールの状態から〜関数を用意しておく
その関数内ですべてのコントロールを調べて該当のものを返す、と。
つまりコントロールになにかしらの目印(フラグ)が必要になってきますね。(Tagプロパティを使ったり)
だとするとやはり、各コントロールのイベントプロシージャを記述する必要が……(?)。
0292284
NGNGありがとうございます。
タイマーを使うとは考えつかなかったです。
確かにこれで要件は満たせそうですが、極力無駄なイベントを発生させたくないのと、
タイマーコントロールは規約で使用不可だった気が……スイマセン。
0293デフォルトの名無しさん
NGNGタイマーはおそらくネタだから無視しろ。
0295デフォルトの名無しさん
NGNGUNIX時間が欲しいなら、
UnixTime = DateDiff("s", #1/1/1970#, dateVB) - 32400 'JST-9
で取れる。
0296?
NGNGフォーカスの移動自体を無くせばいいと思います。
イメージコントロールはフォーカスを取得しないので、
押されてない状態のボタンの絵と押された状態のボタンの絵を
イメージコントロールで切り替えてそれをコマンドボタンの代わりにすればよろしいかと。
0297デフォルトの名無しさん
NGNGネタじゃねーぞ
0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNGマジだったのか。これだから VB 厨は...。
0300デフォルトの名無しさん
NGNG歴代1位の厨は誰ですか?
0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNGどうやれば出来ますか?簡単には出来そうもないので質問してみます・・・
0303デフォルトの名無しさん
NGNGお ま え
0304デフォルトの名無しさん
NGNGタイトルバーなしにして、自分で描画すればー。
0306284
NGNGありがとうございます。
イメージを使った「偽コマンドボタン」ですか。
おもしろいかもしれませんね。
結局、「一つ前のコントロールにフォーカスを移す」仕様はやめました(笑)。
そこまで要求されませんでした。
皆さんありがとうございました。
0307デフォルトの名無しさん
NGNGピクチャーボックスで文字を表示してるのですが、
ピクチャーボックスに自動改行機能を付けるには
どうしたらいいのでしょう?
それと、適当な文字が左から何ドット上から何ドットの
位置にあるか取得できたら、自動改行ができるような
気がするのですが、取得方法はありますか?
0308デフォルトの名無しさん
NGNGプログラムしろよ!
なにかわからないところがあるならそれを質問しろ。
0309?
NGNGキーボード操作なんて簡単に実装できますよね?
>>299
タイマー使うのそんなに実害あるかな?そんな事より、
使う使わないはともかく、一番短いコードで実現できる点を評価したい。
自分じゃ何も思いつかない能無しが見当違いの煽りしてんじゃないよ。
とかたまには言ってみたりしていいですか?
>>301
別の人ですね。今のところ?はこのスレでしか使ってないです。
でもあのドラマは何回か見ましたよ。面白かった。
0310デフォルトの名無しさん
NGNGTextWidthで文字幅がわかるから、文字の描画位置は自己管理しる。
0311310
NGNG03121
NGNGたとえば、Foo = "ABC" & vbCrLf & "DEF" & vbCrLf の場合の、
Perl で言うところの chop Foo や、Foo =~ s/\n$// です。
0313312
NGNG0314デフォルトの名無しさん
NGNGhoge = Replace(hoge,vbCrLf,"")
じゃ駄目なの?
0316デフォルトの名無しさん
NGNGあぁ、なるほど。
If Right$(hoge,2)=vbCrLf Then
hoge = left$(hoge,Len(hoge)-2)
End If
ってやって地道にやるしかないよーな…。
0317デフォルトの名無しさん
NGNGhoge = Left(hoge, Len(hoge) - 2)& Replace(hoge, vbCrLf, "", Len(hoge) - 1, 2)
か?
0318デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNGMicrosoft VBScript Regular Expressions 5.5を参照設定しる。(WSH5.6必要)
でもたかだかそのためだけにって感じも無きにしも非ず。
0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNGマルチポストかよ。
0324デフォルトの名無しさん
NGNGおっけ。
0325デフォルトの名無しさん
NGNG実害以前に、耐えられない仕様だ。
1秒おきの場合、
最後にTimerの関数が実行された後、ボタンが押されるまでに、
フォーカスが複数移動したらどうするんだ?
ってことは思いつかなかったんでしょうか?
すなおに TabStop = True であるコントロールの GotFocus イベントに書くのが余計な負荷をかけない。
0326デフォルトの名無しさん
NGNGまあまあ、VBだから許してあげてよ。
0327デフォルトの名無しさん
NGNGコントロールごとインスタンスを割り当ててそこから、
フォームに通知した方がいいね。
0328デフォルトの名無しさん
NGNGサンプルきぼん
0329デフォルトの名無しさん
NGNG適当に作ったけどこんな感じかな。
Formにいくらコマンドボタンを置いても共通のIAllGotFocus_AllGotFocusが発生する。
この例はコマンドボタンだけ対応。他のコントロールに対応したかったら、
それ専用のClass1を作成するか、Class1を改造したり、まぁ他にも色々工夫してくれ。
<Form1>
Implements IAllGotFocus
Private m_controls As New Collection
Private Sub IAllGotFocus_AllGotFocus(ByVal ctrl As Control)
Debug.Print ctrl.Name
End Sub
Private Sub Form_Load()
Dim ctrl As Control
For Each ctrl In Controls
If TypeOf ctrl Is CommandButton Then
Dim c1 As Class1
Set c1 = New Class1
c1.SetControl ctrl, Me
m_controls.Add c1
End If
Next ctrl
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set m_controls = Nothing
End Sub
0330つづき
NGNGPrivate WithEvents m_cmd As CommandButton
Private m_AllGotFocus As IAllGotFocus
Public Sub SetControl(ByVal ctrl As Control, ByVal AllGotFocus As IAllGotFocus)
Set m_cmd = ctrl
Set m_AllGotFocus = AllGotFocus
End Sub
Private Sub m_cmd_GotFocus()
m_AllGotFocus.AllGotFocus m_cmd
End Sub
<IAllGotFocus>
Public Sub AllGotFocus(ByVal ctrl As Control)
End Sub
0331デフォルトの名無しさん
NGNG0332328
NGNGthx−
なるほど。たしかにスッキリしてていいすね
Implementsってこう使うのか。。
0333デフォルトの名無しさん
NGNG<IAllGotFocus>
↑ってどういうこと?モジュールかな?
0334デフォルトの名無しさん
NGNG0336?
NGNG>実害以前に、耐えられない仕様だ。
つまり目立った実害は無いという事ですか?
タイマーイベント内もたった一行だし余計な負荷がかかると言ってもたかが知れてますしね。
>1秒おきの場合、最後にTimerの関数が実行された後、ボタンが押されるまでに、
>フォーカスが複数移動したらどうするんだ?ってことは思いつかなかったんでしょうか?
インターバルを調節すればいいってことは思いつかなかったんでしょうか?
>すなおに TabStop = True であるコントロールの GotFocus イベントに書くのが余計な負荷をかけない。
だったらそう書けばいいのになんで余計な煽りするんですか?
質問者が他に手段はないかと聞きに来てる時に手段の1つとして上げてる、適切なレスだと思いますが。
つまらない言い合いしてすみません。。。
でも自分的にはくだらない煽りより面白い意見を聞きたいと思うんです。
>>329
そんなことが出来るんですか。勉強してみます。
0337デフォルトの名無しさん
NGNG> インターバルを調節すればいいってことは思いつかなかったんでしょうか?
インターバルを調整しても、本質的には解決しませんよ。
Timerは優先順位が低いので、負荷がかかるとイベントが後回しになり
取りこぼすことになります。
0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG0340338
NGNG0341325
NGNG以上のような理由でネタもしくは、
質問者を混乱させようという悪意かと思っただけ。
なので、質問者が混乱しないようにネタだと注意をしておいただけ。
あおってはいない。
>>337にもあるとおり、実際取りこぼしのないようにインターバルを
を小さくすればするほど余計な負荷がかかる上に、
どれだけ小さくしても完全ということはない。
>質問者が他に手段はないかと聞きに来てる時に手段の1つとして上げてる、適切なレスだと思いますが。
質問を良く見てみろ。
この手法はすでに質問者が自分で言っていて、他にいい手段はないのかと問ういている。
だからわざわざ質問者に対して書くべきことでもなかったのだ。
0342デフォルトの名無しさん
NGNGDim Date1 As Date
Dim Date2 As Date
Dim Min As Integer
Date1 = "2002/09/30 12:00:00"
で、Date2にDate1のMin分後の日時を入れたいんですが、
スマートな方法教えてください。
お願いします。
0343デフォルトの名無しさん
NGNGDateAdd 関数
0344デフォルトの名無しさん
NGNGありましたね。
ありがとうございました。
0345327=329
NGNGあぁ、そうか。使ったことが無い人にはいきなり名前だけ書いてもわからんわな。
<Form1>はフォームモジュール、<Class1><IAllGotFocus>はクラスモジュール。
ちなみにIAllGotFocusのIはこれがインタフェースであることを表している。
VBはクラスもインタフェースも宣言が同じなので名前でわかりやすくしている。
0346デフォルトの名無しさん
NGNGMSDNのヘルプを見ながらTCPのサーバーを作ってます。
クライアントからの通信を、クライアントそれぞれに返したいのですが、
色々いじっても、1つのクライアントにしか返送できませんでした。
(最初に立ち上げたクライアントしか返らない、通信を送ったクライアントにしか
返送しない。最後に立ち上げた〜以下略。下のソースは、最初に〜の一部です。)
Winsock1(Index).GetData strData
txtData(Index).Text = strData
For i = 1 To intMax Step 1
If Winsock1(i).State = sckConnected Then
Winsock1(i).SendData strData
End If
Next
通信が確立しているソケット全てに対して、データを送っているイメージで、
プログラミングしています。
ちなみにクライアントとサーバ間はどれも通信はできていました。
通信できる状態でも、sckConnected 以外の値を取ったりしているのでしょうか?
それとも何か根本的な間違いをしてるんでしょうか?
わかる方がいたら教えて下さい、お願いします。
0347デフォルトの名無しさん
NGNG単語の意味はわかるがあらわそうとしているものがわからない。
0348デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNGちゃんとパッケージに書いてあるよ。
(あなたがVBを不法な手段で手に入れたのでなければね)
メーカーのテクニカルサポートサイトにも明示されているはず。
0351デフォルトの名無しさん
NGNGあんがと。
まだ買ってないので<パッケージ
どれがいいかなと。
microsoftのページみてるけど、書いてることがいまいち意味がわからなかったりする。
例:右記の製品インストール時の追加必要システム > Microsoft Data Engine
これがあらわしてることがわからない。
0352デフォルトの名無しさん
NGNG0353デフォルトの名無しさん
NGNG合格です。このスレでコテハンになる許可が下りました。
0354346
NGNG現在上記のページで、winsockをコントロール配列で使う時の制限事項で、
同様の問題の解決方法が載ってました。
Winsock1(i).SendData strData
DoEvents
このようにDoEventsが必要だ、との事です。お騒がせしますた。
0355デフォルトの名無しさん
NGNGRaiseEventを使ってイベントを発生させております。
イベント発生先の処理が終わるまではイベント発生元の処理は
進展しないのでしょうか?
スレッドのように処理を同時に行いたいのですが、
VBではどのような方法があるのでしょうか?
みなさま、宜しくお願いします。
0356デフォルトの名無しさん
NGNGVBのバージョンを明記すべき。
VB6.0以前と.NETでは、答えが全然違うものと思われ。
(つうか、VB6.0以前では、スレッド並行処理は不可能では??)
0357デフォルトの名無しさん
NGNGできることはできるがサポート外
0358355
NGNGVBのバージョンは6.0です。
0359デフォルトの名無しさん
NGNGそれをできるというのはどうかと思うが
0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGそんなもんあるのか
0362デフォルトの名無しさん
NGNGMSがやってるベンダー試験のことじゃないか?
VB以外にもNT ServerとかSQL Serverとか色々有った気がする。
0363デフォルトの名無しさん
NGNGMSぼろもうけだな。
0364360
NGNGどのくらいの難易度なのか分からないんですよね・・3級だからそんなに難しくは
無いと思うけど・・・どうなんでしょう??
0365362
NGNG「VisualBasic技術者能力認定試験」っていうのがあるみたいだね。
初めて知った。難易度は知らん。
これの本試験対策講座をやってみたいのだがどうしたもんか(w
http://www.it-system-jp.com/vbkentei3.html
0366デフォルトの名無しさん
NGNGWinXP,VisualBasic6.0-SP5でリッチテキストボックスを使ったテキストエディタもどきを作っています。
タブキーを押すと出る空白の長さを標準(半角スペース8コ分?)から変えようと思っています。
で、ここの過去スレッドに書いてあった「EM_SETTABSTOPSメッセージをSendMessage APIでテキストボックスに投げる」
を試してみたところ、普通のテキストボックスだと上手く行ったのですが、リッチテキストボックスだと動作しませんでした。
しかしMSDNにはテキストボックスでもリッチテキストボックスでも動作すると書いてあったので、
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolmessages/em_settabstops.asp
私のコードが間違っているのかもしれませんけど。。(´Д⊂
ダメだったのでまた探したところ、同じくSendMessage APIでEM_SETPARAFORMATメッセージをリッチテキストボックスに送信して設定する方法というのが見つかりました。
ただ、肝心のパラメータの指定方法が分かりませんでした。それでいまこうして質問させていただいている次第です。
「ここはこうしたほうがいい」、「こういう方法でできる」でも結構ですので、よろしくお願いします。
長文すみませんでした。
以下その方法を使って私が書いたソースです。
0367366
NGNG'標準モジュールのコード---------------------
'-- API 定数
Public Const WM_USER = &H400 : Public Const EM_SETPARAFORMAT = (WM_USER + 71)
'-- API 関数
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'-- 構造体
Type PARAFORMAT2
cbSize As Long : dwMask As Long : wNumbering As Integer : wEffects As Integer
dxStartIndent As Long : dxRightIndent As Long : dxOffset As Long : wAlignment As Integer
cTabCount As Integer : rgxTabs(31) As Long : dySpaceBefore As Long : dySpaceAfter As Long
dyLineSpacing As Long : sStyle As Integer : bLineSpacingRule As Byte : bOutlineLevel As Byte
wShadingWeight As Integer : wShadingStyle As Integer : wNumberingStart As Integer : wNumberingStyle As Integer
wNumberingTab As Integer : wBorderSpace As Integer : wBorderWidth As Integer : wBorders As Integer
End Type
'フォームのコード---------------------------
'-- タブ幅設定
' パラメータをセット
Dim udtParaFormat As PARAFORMAT2
With udtParaFormat
.dwMask = PFM_TABSTOPS
.cTabCount = ? 'ここがわからない
.rgxTabs(0) = ? 'ここがわからない
End With
'SendMessageでメッセージを投げる
Call SendMessage(RichTextBox1.hwnd, EM_SETPARAFORMAT, 0, udtParaFormat)
RichTextBox1.Refresh
'--ここまで-------------------------------
0368デフォルトの名無しさん
NGNG一行のバイト数は不定です。
Line Inputを行分ループするしかないのかなー。
もっと高速に動作させたい。
0369デフォルトの名無しさん
NGNGなんじゃそこは。
ソースにパスワードが書いてある。
0370デフォルトの名無しさん
NGNGファイルの最初にインデックスでも持たせたら。
0371デフォルトの名無しさん
NGNG.cbSize = Len(udtParaFormat) 'これを忘れずに
.cTabCount = MAX_TAB_STOPS '=32
for x=0 to .cTabCount-1
.rgxTabs(x) = タブ幅 * (x + 1)
next
タブ幅はtwipsで指定。
ちなみにヘルプにちゃんと書いてある。
0372デフォルトの名無しさん
NGNGインデックスを持ってもこの場合は意味無くない?
0374362
NGNG誰かがここに直接アドレスを貼り付けてそこから飛んだら
不正アクセスにはならんよな。
普通ならちゃんとしたアクセス制限かけてあるはずだし。普通なら。
0375デフォルトの名無しさん
NGNGだよな。HTMLソース自体にパスワードが書いてあるものを、
ページ見たからといって不正アクセスだと言われても困る。
0376デフォルトの名無しさん
NGNGSeek ステートメント使って読みたい位置まで移動すればいいじゃん。
0377デフォルトの名無しさん
NGNGでも英語のソフトとかだと"/"のが多いですよね。
英語版Windowsで動かすとこの辺の仕様とか変わってくるのでしょうか?
0378デフォルトの名無しさん
NGNG0379355
NGNGVBでCreateThreadは使えるのでしょうか?
0380デフォルトの名無しさん
NGNGCreateThreadできることはできるのだが、スレッド内で何か操作すると
途端にアプリが落ちる(w
他モジュールやフォームをいじると落ちるんだっけかな。
よって、実際は使えない。VB6の場合ね。
VB5の場合は一応使いようによってはOKらしい。
0381355
NGNG返答ありがとうございます。
スレッドではORACLEへのストアドコールを行います。
数分返答がないようなストアドをコールします。
スレッドが処理中(ストアドコール中)にGetExitCodeThread,
ExitThread等を行うとやはりエラーとなるのでしょうか?
自分で作成したDLL内部でスレッド生成を行いたいのですが、
重い処理をしてもEXEが返答待ち(固まらない)しない事を
実現したいと思っております。
0382デフォルトの名無しさん
NGNGスレッドを使わなくてもストアドコールとかは非同期で実行できるんじゃないか?
0384デフォルトの名無しさん
NGNGVBでマルチスレッドにするならActiveX DLLにするしかないかと思います。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/0008/com/
0385382
NGNGすまん。しらないんだ。ADOとかで非同期で実行するという引数やらなんやら
あって常識的に考えれば出来そうだなぁと思っているだけ。
今までやったこと無い。個人的にはやりたいんだがなんで要望でないかなぁ(w
0386デフォルトの名無しさん
NGNGADO をつかっているなら、 execute メソッドの options に adAsyncExecute
を指定すれば出来ると思います。
やったことないので、外してたらゴメン。
0387デフォルトの名無しさん
NGNGランダム関数で、1〜100までの乱数を発生させるのは
Int(Rnd() * 100) + 1
ですが、50〜100までの乱数が必要な場合はどの様に求めればいいのですか?
■ このスレッドは過去ログ倉庫に格納されています