(*´д`*)アハァ… VB初心者質問スレ Part22
■ このスレッドは過去ログ倉庫に格納されています
0001HTML化チェック済み
NGNGPart12 http://pc3.2ch.net/tech/kako/1026/10266/1026642565.html
Part13 http://pc3.2ch.net/tech/kako/1029/10292/1029241786.html
Part14 http://pc3.2ch.net/tech/kako/1030/10309/1030947162.html
Part15 http://pc3.2ch.net/tech/kako/1032/10327/1032706491.html
Part16 http://pc3.2ch.net/tech/kako/1034/10343/1034302532.html
Part17 http://pc3.2ch.net/tech/kako/1036/10361/1036154952.html
Part18 http://pc3.2ch.net/tech/kako/1038/10381/1038103769.html
Part19 http://pc3.2ch.net/tech/kako/1039/10398/1039859691.html
Part20 http://pc2.2ch.net/tech/kako/1041/10418/1041879465.html
Part21 http://pc2.2ch.net/test/read.cgi/tech/1044028945/
VB.net関連スレ
【老若】VB.net質問スレ【男女】 (Part2)
http://pc2.2ch.net/test/read.cgi/tech/1043629429/
心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
五.下ネタもたまにならOK。
0103デフォルトの名無しさん
NGNG汎用機で作成されたデータファイルをExcelに渡す処理を考えています。
汎用機からWindows上に落としてきてきた(この間に文字コードの変換をしています)
テキストファイルの中の、指定した行のiバイト目からjバイトを抜き出す
(その後エクセルに渡す)、という処理で詰まっております。
(この"iバイト目からjバイト"というのは汎用機側の印刷パラメータです。)
対象となる行には数値、日本語が混在しています。i,jは表の項目ですので増加していきます。
Mid,MidB関数で引数にi,jを指定してやればよかろと思っていたのですが、
汎用機側では数値は1バイト、日本語は2バイトで扱っており
Windows上では全て2バイトで扱っているのでこれだと抜き出す時に誤差が生じてしまいます。
で、バイナリで開いて先頭から順次読み込んでやればいいかなと足りない頭で考えたました。
以下、足りない頭で考えたルーチンです。
1.対象行(テキスト)をバイナリで作業ファイルに書き込む
2.作業ファイルをバイナリで指定したバイト数だけ読み込み、配列で宣言したByte型変数に格納
とここまでやったのですが、これを元の数値や日本語に戻すにはどうしたらいいでしょうか
よろしくお願いします。
0104デフォルトの名無しさん
NGNGLenBとStrConvでドゾ。
0105デフォルトの名無しさん
NGNGWith Winsock1
.Protocol = sckUDPProtocol
.Bind 20002
.RemoteHost = "233.0.0.0"
.RemotePort = 20002
End with
と設定して、他マシンからのマルチキャストを受信してるんですけど、
Winsock1_DataArrivalイベントが発生しません。
試しにVCで作ったマルチキャスト送受信プログラムで受信してみるとうまく受信できました。
VBで受信するには他に何か設定が必要なんでしょうか?
ちなみに、この設定のままWinsock1.SendDataで文字列を送信してみたら、
マルチキャストの送信は、できました。
0106デフォルトの名無しさん
NGNG誰か教えてください。
0107デフォルトの名無しさん
NGNG私の環境では完璧に動きまする…。
Win2ksp3/VB6sp5。
VBにSPはあてた? Winsock.ocxにバグあった気がする。
あと、コード中で入れるんじゃなく、プロパティーページで
Bind以外を設定するとどうなる?
なんか別の所で変なことやってるのかもしれないし。
0108105
NGNG動きましたか。うちの環境はWin2k VB6SP5です。
ちょっといろいろ設定見直してみて、また来ます
0109デフォルトの名無しさん
NGNG「バイト型配列から日本語含めた文字列への変換」でいいのね。
バイト型配列を「byteArray()」とすると、
Dim strBuf As String
strBuf = StrConv(byteArray(),vbUnicode)
でいけるはず。何も見ないで書いたので綴り間違ってるかも。
ためしてみてちょ。
0110デフォルトの名無しさん
NGNGマウスの位置のプロパティってありますか?
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNGよく調べたらあった。>MouseCol、MouseRow プロパティ
0113デフォルトの名無しさん
NGNG/ ̄ ̄ヽ / ̄ ̄ヽ
l i'´~`ヽ| l /~`ヽ |
ヽ.\ ,レ-――-'<、 _ノ /
`‐/_____\- ' 人_ト、__ノ、_,ヘノ\_ノヽノ、
/ ,-、 ,-、 ヾ、 人/ \__
l ,..、 ,..、 l _ノ (
__l i 0} ,.●、 !0 i l__ _)
/ ̄| | . | `~ /___\`~´ | | __ノ 絶対に許さんぞ>106!!!!!!!
/ | | |l ‘-イ !_|_!`r’ !| | ノ
\\ | |. |`、 r{ h ,/リ < じわじわとなぶり殺しにしてくれる!!!!!!!
\\.| | ヾ\ ヽ二ニ二.ノ /〃 | )
、 \ノ^,ニ‐-ァ  ̄`ー-----一' ̄/ | ^ヽ
\ // ,/⌒i、_\\_____// .| | ⌒)
{ i | iヽ`ー-----― ' | |  ̄ヽヘ/⌒ヽ/\i'\へ/⌒Yヽ'^
0114デフォルトの名無しさん
NGNGDate関数が
2003/02/03
ではなく
2003/2/3
という値を返すことはあるのでしょうか?
0115>>103 です
NGNG>>109
レスありがとうございました。
StrConv関数のヘルプは散々見ていたのに、引数のvbUnicodeを見落としていますた。
これからテストしてみます!!!
0116デフォルトの名無しさん
NGNG心配ならFormat使え。
0117デフォルトの名無しさん
NGNG前提が間違ってるぞ。
そもそもDate関数は文字列を返すものじゃなく、Date型を返すもの。
文字列型へ代入した時の形式は、そのマシンの「地域のオプション」の日付形式の設定に
左右される。決まった形式で欲しいならFormat関数を使うのが吉。
0119114 成功しました
NGNG0120デフォルトの名無しさん
NGNGでも漏れなんかは、N88BASIC時代の人で、Date$とかTime$に慣れてたから
結構そのままやってて、意図しない書式が返ってきたりして面食らったことがあるな。
0121デフォルトの名無しさん
NGNGどうやればいいのでしょうか?
0122デフォルトの名無しさん
NGNGcopymovememoryとか、該当しそうなAPIがあるので・・・
Public Declare Sub agCopyData Lib "apigid32.dll" (Source As Any, Dest As Any, ByVal nCount As Long)
Public Declare Function agGetAddressForObject Lib "apigid32.dll" (Object As Any) As Long
Public Declare Function agGetStringFromLPSTR Lib "apigid32.dll" (ByVal src As String) As Long
0123デフォルトの名無しさん
NGNGOn Error ステートメントか?
>>122
そもそもそのソースがどこから出てきたか説明するのが筋だと思うが・・・
ググッてみたところ、ダニエル・アップルマンの本のおまけでついていたDLLみたいだな。
それら関数の動作の詳細も書かずにできるかどうかと問われてもどうか?って
感じだが、その関数の中でやってるのと同じことをやればできるだろうw
一応マジレス。
0124122
NGNGいやぁ、apigid32.dllは持っているのですが、あまりユーザの環境に入れたくないですよね、余計なDLLは。
というわけで、標準のWin32APIに置き換えはできないかなと思って質問してみました。
ありがとうございます。
0125121
NGNGVB6で作成した実行ファイルを起動していると
アプリケーションエラーがでてしまいます。
で、エラーが出たらそのアプリケーションを再起動したいのです。
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNGなぜそのアプリのバグを取ろうって発想にならないんだろ・・・ (´д`;)
FindWindowあたりでできそうな気はするが。
0128な
NGNG「/」 は地域のオプションの区切り記号に置き換えられるので、
それだと期待通りに動作しない場合があります。
Fromat(Date,"yyyy\/mm\/dd") が正解です。
0130デフォルトの名無しさん
NGNGあんまり簡単すぎて?探しても記述を見つけられないのでお願いします。
1.Space"$"(number)のように、関数の後ろに"$"が入るのはどういう意味を表していますか?
2.myarry() as integer のように、配列の括弧内が空白というのはどういう意味ですか?
よろしくお願いします。
0131デフォルトの名無しさん
NGNGヘルプ読めばどっちも書いてあると思うが。
関数名に $ がつくのは、返り血を文字列型で返す関数。
$を省略すると、Variant型で返るので、パフォーマンスのためには
$をつけた方がいいとよく言われる。
myarry()のように空白の配列は、動的配列という。
ReDim myarray(256) などのようにして、コード中で配列の要素数を変更
したい時に使う。
0132デフォルトの名無しさん
NGNG積年の謎が解けました。
ReDimのヘルプ引いたら意味が分かりました。
ありがとうございます!!!
0133デフォルトの名無しさん
NGNG>>130-131
関数定義の段階で
Function Space(number) as String
とやっておけば、関数名に $ をつけなくても返り値は String が保証されるんですよね?
0134デフォルトの名無しさん
NGNGYes. その辺は変数定義と一緒。
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNG氏ね。
0140デフォルトの名無しさん
NGNG電脳化させろ。
0142137 ◆V1kwoShQaI
NGNGむずかしそうな話だからしばらく電脳化についてはいいや。
とにかく昔の自分のコードをわざわざみないと今現在何も作れない自分がいるのがかなすぃ。
0143デフォルトの名無しさん
NGNGそんな君にはオブジェクト指向&デザインパターン。
コードを見なきゃつくれない→自作のライブラリを使えばすぐできる。(※)
へとステップアップだ!
※自作のライブラリを使わなきゃつくれない、、、とも言う。
0144137 ◆V1kwoShQaI
NGNGようするに普段から再利用可能でコピペで使えるようなプログラミングを心がけなさいということだね。
あとは貼り付けてつかえるActibeXコンポーネントをうまくつかうっと。
未だに変数名もばらばらにつけてるオラには再利用ライブラリはムリポ。
0145デフォルトの名無しさん
NGNG漏れが恐ろしいほどコメントつけまくるのは
他人がコード見たときの理解を助けるため・・・ではなく、
自分が後から見たときに分かるようにするためだ。
「この変数なんだっけ?(*´д`*)」
0146137 ◆V1kwoShQaI
NGNGなるほど。オレも変数についてコメント書くことがあるな。英単語の意味を。
Dim Int1 as Integer 'integer=整数という意味
0147デフォルトの名無しさん
NGNG俺も4年ごしでやってるシステムの根幹部分なんて
自分で組んだのにすっかり忘れてるよ・・・ (*´д`*) アハァ
やっぱコメントは大事だね。
でも自分で書いたソースって、やっぱ他人の書いたソースよりも
はるかに理解がしやすい。
あ、いいソース書いてるって意味じゃなくねw
やっぱ組み方のクセみたいなものがあるから理解しやすいんだと思う。
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGメニュー項目をクリックすることでテキストボックスの
横スクロールバーの有無を切り替えたいのですが、
スクロールバーは新しく値を設定する事ができない、
と言われてしまいます。
どうすればメニューのクリックで
スクロールバーを切り替えられますか?
(Windowsメモ帳の「右端で折り返す」みたいな感じです)
0150デフォルトの名無しさん
NGNGあらかじめスクロールバーのあるのと無いのと2つ用意しておいて、
メニュークリック時に表示・非表示を切り替えるとか。
もちろん切り替え時に内容は同期取ってね。
0151デフォルトの名無しさん
NGNG0152149
NGNGありがとうございます!!
そういう手も考えてはみたのですが、
何せものすごい初心者なもので…。
その、同期を取るのをどうしたらよいかがわかりません。
本にも載ってないしヘルプファイルも参照できない状態なので、
どうか教えていただけないでしょうか?
宜しくお願いします。
0153デフォルトの名無しさん
NGNGヘルプないなら、MSDNオンラインを利用すれ。
ttp://www.microsoft.com/japan/msdn/library/
ちなみに同期を取るとは、下記みたいな感じ。
あんまり答えモロは書きたくないが、簡単すぎるのでたまにはまんま載せてみた。
Private Sub Command1_Click()
If Text1.Visible = True Then
Text2.Text = Text1.Text
Text1.Visible = False
Text2.Visible = True
Else
Text1.Text = Text2.Text
Text1.Visible = True
Text2.Visible = False
End If
End Sub
0154デフォルトの名無しさん
NGNGsub メニューを押した
if text1.visible then
text2.text = text1.text
text2.visible = false
text1.visible = true
else
'反対のことをする
end if
end sub
こんな感じー。
つーか漏前、なんでヘルプが無いんだYo!
0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNG割れ物でMSDNのディスクがないと思われ。
0157149
NGNG何から何まで本当にありがとうございます!!
今度からMSDNオンラインを見てみますね!!
それでもわからなかったらまたよろしくお願いします。
>>156
その通りなんです…
0158デフォルトの名無しさん
NGNG割れ厨かよ。答えなきゃ良かった。氏ね。
0159デフォルトの名無しさん
NGNGMSDNみれないんだじょ。マイクロソフトのサイトみてますが。
これぞ本物の「割れ」・・・・
0160デフォルトの名無しさん
NGNG通報スマスタ
>>159
MSのサイトで交換の受付ってなかったっけ…。
あっても、今更古いMSDN来ても困る罠。
MSDN付.net買うが宜し。VS6用も入ってるでしょ。
0161デフォルトの名無しさん
NGNGVB6のプログラム作成ソフトってフリーで落ちてないんですか?
0162デフォルトの名無しさん
NGNG頭大丈夫?
0163デフォルトの名無しさん
NGNGモデラーのこと言ってんのか?
どっちにしろ、自分の考えを表現するためには、
作成ソフト自体を自作しなければ難しいぞ。
0164ひきプロ
NGNG無理矢理EXEを作成するとかいう裏技ありましたね
0165デフォルトの名無しさん
NGNGソースだけならメモ帳でも書けるぞ
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG正常
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNGhttp://www.realbasic.com/
0171デフォルトの名無しさん
NGNG"ゴルァ"
と""も含めて表現したい場合、
document.write "??? "
???にはどう書けばよいのでしょうか・・・
0172ひきプロ
NGNG0173デフォルトの名無しさん
NGNG0174寒
NGNG"ソース"※ を変更できる方法ってありますか?
※イベントビューアで見れる項目名"ソース"
過去ログ検索する前のカキコ スマソ。
0175デフォルトの名無しさん
NGNG過去ログみてから発言しましょうね。
心得
壱.質問する前に過去ログにも目を通してみる。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
弐.質問する前に MSDN などで調べてみる。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
五.下ネタもたまにならOK。
0176デフォルトの名無しさん
NGNGロジックはともかく、GUIをメモ帳でコーディングするのは生産性が恐ろしく低い罠・・・。
0177デフォルトの名無しさん
NGNGだったらCレベルの生産性は維持できるだろ。
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNGイベント通知だとイベント処理メソッドの処理が終わらないと一方が止まってしまうので
困ってしまってね。Coffeeサンプルは複雑で漏れにはわからん。
ヘルプ嫁・・・・はいはい
0180デフォルトの名無しさん
NGNGPrint Picture1 "aiueo"
だと失敗したんだけど・・・正解をキボンヌ。
0181ひきプロ
NGNG0183デフォルトの名無しさん
NGNG見た目は微妙だが、
考え方は180度間違っている。
0184105
NGNGUDPを使って、お互いのIPをRemoteHostに設定して
ユニキャストで文字列のやりとりはできるし、
マルチキャストを使っての送信はできる(確認は受信側でVC製の別のマルチキャスト受信ソフトで行った)のですが…
>>105の設定だけではだめなんでしょうか?
0186デフォルトの名無しさん
NGNGプログラムを作ったのですが、windows2000とXPで、実行しようとすると
「コンポーネントMSWLESS.OCXまたはその依存関係のひとつが適切に
登録されていません。ファイルが存在しないか、あるいは不正です。」
とエラーが出て実行できなかったらしいです。
どうすれば解決できるでしょうか?
0187デフォルトの名無しさん
NGNGAccessのテーブルデータと連携した画面を作っています。
MSHFlexGridにDetaSourxeを設定してデータを表示させるまでは
できるのですが、その中からユーザに選択させるために
左側にチェックボックスを並べたいのです。
普通に並べても、FlexGridのデータをスクロールバーで上下させてしまうと
チェックボックスの選択と同期が取れなくなってしまうし、
かといってテーブルに選択の列を追加しても
DBデータと連携できるチェックボックスコンポーネントなんてないし。
理想は、FlexGridの横一列とチェックボックスを対応付けて
スクロールバーに連携させ、かつ離れた列の複数選択を可能にすることです。
どうにか方法ないものでしょうか?
素直にFlexGridのセルをクリックして選択させたほうが楽でしょうか?
0188デフォルトの名無しさん
NGNGスマソ、ブロードキャストと勘違いしてた…。
マルチキャストを受信するには、アプリケーションからOSにその旨登録しないと
駄目みたいな様子なので、API使うか何かする必要があるような感じ?
IGMPがどうたらこうたら…。
漏れにはお手上げ(ρ_;)
0189189 ◆7WYWM3doQ.
NGNG0190デフォルトの名無しさん
NGNGそれを公言するのは人間としてなんか間違っていると思う
0191デフォルトの名無しさん
NGNG(・A・)イクナイ!
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG少なくともVB使ってたら思わないな...
0195デフォルトの名無しさん
NGNGアレだろ、ごつごつしたタイヤのオートバイで天高くジャンプしたりする競技?
0196デフォルトの名無しさん
NGNGCallWindowProcは引数が4つ余計です。他に良いAPIはありませんか?
Option Explicit
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Sub main()
Dim adr(2) As Long
adr(0) = AddPtr(AddressOf func0)
adr(1) = AddPtr(AddressOf func1)
adr(2) = AddPtr(AddressOf func2)
Dim i As Long
For i = 0 To 2
Call CallWindowProc(adr(i), 0, 0, 0, 0)
Next i
End Sub
Public Function AddPtr(ByVal Address As Long) As Long
AddPtr = Address
End Function
Public Function func0(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Debug.Print "func0"
End Function
Public Function func1(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Debug.Print "func1"
End Function
Public Function func2(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Debug.Print "func2"
End Function
0197デフォルトの名無しさん
NGNGEnumWindowとか、SetTimerとか試してみたら?
つーか、なんでパラメータを無視するんだよぅ(笑
0198デフォルトの名無しさん
NGNGEnumWindowで出来ます? SetTimerはタイムラグがありそうだし、
TIMERPROC型がWNDPROCと同じ個数の引数なので意味なさそうです。
> つーか、なんでパラメータを無視するんだよぅ(笑
だって、この場合必要ないし。
たいした問題じゃないんですが、名前を変更してみました。
これで一見、「どうやってるんだ?」って思わせられるはず(w
Option Explicit
Public Declare Function CallFunc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal Param1 As Long, ByVal Param2 As Long, ByVal Param3 As Long, ByVal Param4 As Long) As Long
Sub main()
Dim adr As Long
adr = FuncPtr(AddressOf func)
Debug.Print "ret:" & CallFunc(adr, 0, 0, 0, 0)
End Sub
Public Function FuncPtr(ByVal Address As Long) As Long
FuncPtr = Address
End Function
Public Function func(ByVal Param1 As Long, ByVal Param2 As Long, ByVal Param3 As Long, ByVal Param4 As Long) As Long
Debug.Print "func"
func = 1
End Function
0199名無しさんだよもん ◆ZAYX.QGihc
NGNG(引数がSendMessageと同じところに注目)
例えば func(param1 As String, param2 As Object) の様な引数を持った関数はVBでは呼べません
言い切ってしまえば VB で関数ポインタは扱えません
関数ポインタを呼び出す部分をCでDLLするしか方法は...(以下省略
0200デフォルトの名無しさん
NGNGいまいち意図がつかみにくいけど、要するに関数のポインタを変数に入れて、
コールバックで扱いたい、ってこと?
こんな感じかい?
Option Explicit
Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Sub main()
Dim ptrFunc As Long
ptrFunc = FuncPtr(AddressOf TimerProc)
Call SetTimer(0, 0, 1000, ptrFunc) ' AddressOf TimerProc)'本来はこっちの書き方
End Sub
Function FuncPtr(ByVal AddressOfFunc As Long) As Long
FuncPtr = AddressOfFunc
End Function
Public Sub TimerProc(ByVal hwnd&, ByVal uMsg&, ByVal idEvent&, ByVal dwTime&)
Call KillTimer(0, idEvent)
Debug.Print dwTime
End Sub
0201デフォルトの名無しさん
NGNG> 例えば func(param1 As String, param2 As Object) の様な引数を持った関数はVBでは呼べません
そういう時はね、StrPtrやObjPtrでアドレス値に変換してから
呼び出し先でアドレスをローカル変数に代入すればいいんだよ。
0202デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています