1 名前:d mailto:age [2008/03/30(日) 09:01:59 ] このスレッドはVBについて、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 VB使いが優しくコメントを返しますが、 お礼はVBの布教はしなくてよいので、初心者の救済をお願いします 前スレ くだすれVB6.0以前(超初心者向け) pc11.2ch.net/test/read.cgi/tech/1165574205/
643 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:33:37 ] 入力と出力を決めないとこっちも困る
644 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:45:39 ] >>643 すみません… ええと複数のテキストボックスに入力した内容をひとつのファイルに出力させて その後そのファイルを読み込んだら複数のテキストボックスが出力した前と同じ内容になるプログラムでした
645 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:53:13 ] そんなことはわかってる もう面倒だからXMLにしちゃえよ
646 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 23:00:50 ] テキストボックスの内容を後で識別できるように区切り記号(例えばTabとかCrLfとか)を付けて一つの変数にぶち込む その変数をファイルに書き込む ファイルを開いて全て一つの変数にぶち込む 変数の最初から区切り記号の一つ前までをテキストボックスにぶち込む 変数の内容を最初の区切り記号+1にして変数が空っぽになるまでループ ちゃんとやらないと無限ループするから他の方法の方がいいかもしれないが目的は達するからこれでいいんじゃね? もしかしてコードがほしかった?
647 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 23:03:53 ] >>645 >>646 参考になりました。ありがとうございます
648 名前:デフォルトの名無しさん [2009/02/13(金) 14:57:17 ] >>642 複数のテキストボックスへ入力された内容を、 String型変数に入れて文字列編集すればいいと思う。 例えば、 dim strA as string strA = myform.textbox1.text & vbcrlf & myform.textbox2.text とか。んで strA の内容をファイル化すればいい。
649 名前:デフォルトの名無しさん [2009/02/13(金) 14:58:17 ] 644みなかった。スマンw 俺はそういうときは、tab 区切りにしてる
650 名前:test [2009/02/13(金) 16:45:13 ] 暗号化プログラム作ったんですが unicodeで貼り付けると 。」〄「〖 こんな感じでうまく貼り付けることができません これをansiに変換しても 䊁皁脿㽵 となりうまく貼り付けられません 良い方法あったら教えてくださいm(__)m
651 名前:test [2009/02/13(金) 16:46:55 ] あれここだとうまく貼り付けられてる 他のスレでうまくいかなかったんだけどなぜ?
652 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 17:55:38 ] 板の設定次第 ttp://pc11.2ch.net/tech/SETTING.TXT
653 名前:651 mailto:sage [2009/02/13(金) 20:10:28 ] なるほどこの部分ですね BBS_UNICODE=pass ありがとうございます
654 名前:デフォルトの名無しさん [2009/02/15(日) 21:29:07 BE:1043968493-2BP(0)] >>2 のVB5をダウンロードしたけどシステムの設定が 不正なため、vbを起動できないって出てきたけど どうすればいいかおしえて
655 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 21:53:12 ] OSのインストールからやりなおすのが言語を入れる鉄則
656 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 22:04:21 ] Windowsの互換モード設定は試した?
657 名前:デフォルトの名無しさん [2009/02/16(月) 19:18:02 BE:695979263-2BP(0)] >>656 互換モード設定してもできない
658 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 19:31:02 ] 環境は何だよ?VirtualPCで開発環境作ったほうがよくないか。
659 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 17:35:25 ] vmware serverがいいお
660 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 08:29:05 ] VB5.0でとあるexeを起動して終了を待機しているのですが そのexeの戻り値を取得する必要が出てきました。 exeの戻り値はどのようにして取得したらよいでしょうか? 下記が現在のコードです。 Dim IDProcess As Long Dim hProcess As Long Dim ret As Long IDProcess = Shell(strCommandLine, vbMinimizedNoFocus) hProcess = OpenProcess(SYNCHRONIZE, 1, IDProcess) ret = WaitForSingleObject(hProcess, INFINITE) ret = CloseHandle(hProcess)
661 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 09:02:10 ] exeは関数じゃないので戻り値なんて無いよ もしかして終了コードのことを言ってるのか? それともActiveX.exeなのか? ActiveX.exeならexe自体ではなくexeが持つ関数に戻り値があるけど
662 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 09:16:40 ] >>661 すみません。戻り値じゃなくて終了コードですね。 失礼いたしました。 ぐぐりながらやってみているのですが なぜかhProcessが0です。 なぜいままで動いていたのだろうorz Dim IDProcess As Long Dim hProcess As Long Dim ret As Long Dim lExitCode As Long IDProcess = Shell(strCommandLine, vbMinimizedNoFocus) hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_QUERY_INFORMATION, True, IDProcess) If hProcess <> 0 Then MsgBox hProcess ret = WaitForSingleObject(hProcess, INFINITE) ret = GetExitCodeProcess(hProcess, lExitCode) ret = CloseHandle(hProcess) End If
663 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 09:25:19 ] うぅ。 すみません。 CreateProcessを使ったら終了コードが取得できました。 お騒がせしました。
664 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:52:53 ] ところでみなさん WshShell.Run や Exec を活用してますか?
665 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:09:32 ] あまり活用してない というかその二つに限れば、VBで使えば活用(活かした利用)にはならない もっといいものがいっぱいあるから
666 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 13:36:42 ] なるほど ありがとうございました
667 名前:デフォルトの名無しさん [2009/02/21(土) 20:32:43 BE:2165268487-2BP(0)] >>658 使い方がわからん
668 名前:デフォルトの名無しさん [2009/02/21(土) 20:35:59 ] VB6.0ってまだ需要ありますか? ラーニングエディション持ってるんで、 ちょっと勉強してみようか・・・と思ってるんですが。
669 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 20:39:25 ] こういう取り残された人たちには需要があります。 >422 名前: デフォルトの名無しさん 投稿日: 2009/02/11(水) 17:01:01 >そもそも、.NETはお金を頂くソフトウェア作るには不向き >・遅い >・ソース丸見え >・フレームワークインストール必須 >・FAでは絶対に無理 > >枚挙に暇がない
670 名前:デフォルトの名無しさん [2009/02/21(土) 20:41:47 ] >>669 どうもです。サンクス。
671 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 22:37:44 ] >>667 簡単だからネットで使い方調べれ。動作確認にはおすすめ。
672 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 16:09:59 ] なるほど ありがとうございました
673 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 19:05:00 ] >>669 俺おもいっきり取り残されてるな…。 …だからこのスレにいるのかwww
674 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 01:08:24 ] なるほど
675 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 02:02:25 ] Javaでのstatic変数はVBではどんな宣言になるんですか? やりたいこと 1.インスタンスを生成せずにその変数にアクセスしたい 2.異なるクラス間で同じ値を共有したい 3.javaのように簡単に実現したい の三本です
676 名前:デフォルトの名無しさん [2009/02/26(木) 02:15:51 ] すいません。訂正です。 >2.異なるクラス間で同じ値を共有したい → 2.異なるクラス間で同じ変数を共有したい
677 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 02:23:15 ] >>675 Shared
678 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 02:29:33 ] お、すまんVB6だったか。共通モジュールに宣言しかないかな。 Static Property とかいった手もあった記憶があるがめんどくさいはず。
679 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 03:33:15 ] つーかさ、ある言語の仕様が 他の言語でも、そのまま簡単に実現できると思ってるのってどうよ?
680 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:02:13 ] 変数共有ならモジュールでグローバル変数の宣言だけで良いんじゃね? VB6だとそれで十分だと思うが
681 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 19:29:12 ] >>675 VBのクラスはクラスメンバを持てない。 VBにはクラスのほかに標準モジュールというのがあるけど、 こっちはC#でいうstaticクラスに似ていて、インスタンスメンバを持てない。 (インスタンス化できない) まあ、javaよりずっと前からある言語だから多少かかなりかウンコ仕様なのは仕方がないねw
682 名前:デフォルトの名無しさん [2009/02/27(金) 00:49:52 ] >>681 ハァ? クラスメンバ変数は Public で作れる
683 名前:デフォルトの名無しさん [2009/02/27(金) 00:57:34 ] VBのクラスもメンバ持てるぞ。 だが、>>675 を実現するにはちょっと細工が必要。 ActiveX DLL に1つクラスを設けて、そいつの Instancing を GlobaMultiUse に すればいい。 そいつに Public 変数を置けば、いわゆるグローバル変数扱いになる。もちろんクラス。 ただ、利用側で Option Explicit とした場合、アーリーバインディングでないと エラーになった気がする。 それと常識だと思うが、プロセスが異なれば参照先も異なる。 クラスである必要があるならこうするしかないが、 どう考えても標準モジュールで十分な希ガス。
684 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 17:07:49 ] イベント処理での質問です。 vb2008 webページの作成をしています。 コンボボックスから、氏名を選択したら、別のテキストにIDを表示するのですが。 コンボボックスから選択しただけじゃイベント処理は発生しませんか? SelectedIndexChangedとかTextChangedとか試してるのですが上手くいきません。
685 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 17:30:06 ] >>684 スレ違いです。
686 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 19:47:20 ] >>682 持てません。 クラスメンバの意味わかって言ってる?w
687 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:53:22 ] vbのwinsockコントロールで、メッセージを送ってきた相手のIPアドレスって取得できますか? 最低でもLANかWANかだけでもわからないでしょうか?
688 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:57:30 ] もうすこし詳しく書かないと、やりたい事が伝わってこないぞ
689 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:02:48 ] 詳しく書くと、たとえば TCPでlistenしてるところにconnectしてきた相手のIPアドレスを取得したいんです。 IPアドレスがわからなくても、最低限、そのconnectメッセージがLAN経由かWAN経由かの接続だけでも取得したいのです。
690 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:10:47 ] ぜんぜん詳しくなってないが、相手のIPはわかるから一度プログラム作ってみなよ
691 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:32:21 ] >>690 見直してみたら、てっきりRemoteHostしかないと思ったらRemoteHostIPの存在に気づきました。 すいません、お手数をおかけしました。
692 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 10:41:06 ] 質問ですが、標準のデータグリッドでマウスホイール回転時にスクロールさせる方法って 何が考えられますか?
693 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:20:11 ] ホイールスクロールを受け取って自力で動かす
694 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:26:17 ] support.microsoft.com/kb/179398/ja こんな感じで
695 名前:デフォルトの名無しさん [2009/03/05(木) 01:50:23 ] アクセス操作について教えてください。 エクセルのCellsみたいに列、行指定はできませんか?
696 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:09:37 ] もしかして: VBA?
697 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:20:33 ] つーか、DBってものを解ってないな 利口ならDBについて3日勉強して出直せ 馬鹿ならDBについて3年勉強して出直せ
698 名前:692 mailto:sage [2009/03/05(木) 11:31:12 ] ありがとうございます。 ホイールイベント時の処理でスクロールさせるしかないということですね。 イベントの受け取り方などもう少し調べてみようと思います。
699 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 19:57:12 ] >695 ADOならRecordsetオブジェクトとか調べて見るといいかも
700 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:35:54 ] VB5.0で作成されたアプリってVistaでも動く?
701 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 18:03:33 ] 答えになってないが VB6は何とか動いたけどODBC関連がだめだめだったね 使い物にならないぐらい遅い Win7では動かなくなるソフト続出だとおもう
702 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 18:04:59 ] VB5 アプリはものによっては動く
703 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:06:49 ] リストボックスをマウスホイールでスクロールさせた時に リアルタイムでリストボックスのTopIndexを取得したいのですが リストボックスのScrollイベントが動かないので私のスキルでは 八方塞がりです。方法をご教授頂けないでしょうか?
704 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:10:51 ] >>703 サブクラス化 ググればいくらでもサンプルは出てくる それでも解らなかったら諦めるよろし
705 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:15:50 ] C#やVB.NETなどで作れという神託だよ
706 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:38:24 ] >>704 ありがとうございます。 私の探し方が悪いんでしょう。 なかなか見つけられなくてココに来た次第です 諦めるわけには行かないので調べなおします。 >>705 業務で使うのでVB6を使うしかありません。 10年以上稼動する機器なんてざらにあるので・・・ こちらがリファクタリングしたくても 機能も仕様も変わらないのにお金出すところなんてありませんから
707 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:30:07 ] 自力で動かすと、ちょっと上でも方法込みで出てるし。
708 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:32:36 ] 業務で使うのに、サポート切れてるツールを使おう、ってのがわからん。 不具合があったって、MS は知らん顔だよ?
709 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:34:13 ] MSのサポートなんか受けたことないよ
710 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:38:51 ] >>706 厳密にTopIndexが一つ変化するごとに確実にイベントが欲しい、 とかで無ければタイマ使ってポーリングしたら? こんな感じのクラスを作って検証してみたが、悪くないように思うけど。 [ListBoxWatcher Class] Private WithEvents mListBox As ListBox Private WithEvents mTimer As Timer Private mTopIndex As Integer Public Event TopIndexChanged() Public Property Set ListBox(lb As ListBox) Set mListBox = lb Dim frm As Form Set frm = mListBox.Parent If mTimer Is Nothing Then Set mTimer = frm.Controls.Add("VB.Timer", "pollingTimer") mTimer.Interval = 200 End If If frm.ActiveControl Is mListBox Then StartPolling End If End Property
711 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:40:35 ] Private Sub StartPolling() mTimer.Enabled = True mTopIndex = mListBox.topIndex End Sub Private Sub mListBox_GotFocus() StartPolling End Sub Private Sub mListBox_LostFocus() mTimer.Enabled = False End Sub Private Sub mTimer_Timer() Dim currentTop As Integer currentTop = mListBox.topIndex If currentTop <> mTopIndex Then mTopIndex = currentTop RaiseEvent TopIndexChanged End If End Sub しかし、なんでそんなイベントでそんな値が必要なんだろう
712 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:44:28 ] VB6のサブクラス化って初めて見た 横から勉強になります
713 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:48:29 ] 「VB6 のサブクラス化」は、違う意味を指すもんだけどな。
714 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:55:46 ] 「ホイールで動かしたけりゃこのドライバ入れるかあのソフト入れろ」と言える俺は趣味グラマ
715 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:03:30 ] 趣味グラマ以前にバカすぎ 動かしたいって話ではなく 動かすのは出来てる上で そのイベントを取りたいって話なのに
716 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:06:15 ] FlexGridライクなグリッドツールで 使いやすくてフリーか安価な物ってありますか?
717 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:16:19 ] ttp://www.grapecity.com/japan/support/database/p1_223.htm
718 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:17:29 ] Windows7でもランタイム入ってるのか あと5年はイけそうだぬ
719 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:25:32 ] >>718 ところが動かないソフト続出w
720 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 18:44:50 ] >>716 俺はMSHFlexGridを自作のクラスと組み合わせて使いやすくしてる プログラマなら他人が作ったものを使うことばかり考えてないで 少しは自力で便利にしようって気になろうよ
721 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 19:10:59 ] DataGridView
722 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 00:37:17 ] DataGridViewって.NETのコントロールじゃないの? VB6でも使えるのか?
723 名前:716 mailto:sage [2009/03/09(月) 00:46:37 ] 自分で実装しても良いんですけど 自作にかかる費用と購入する費用を考えたときに 購入する方が安上がりかと思いまして 後、うちの会社レベルが低すぎてクラスの概念理解できる人がいないんです… やっぱグレープシティ買って貰うのが一番手っ取り早いですかね 1週間分の人件費で買えますし…
724 名前:デフォルトの名無しさん [2009/03/10(火) 22:18:45 ] 何でもかんでも自分で作ろうとする奴は馬鹿なのか? 費用対効果とか生産性で一番効率品質ともに良いほうを選ぶだけのこと。 車輪の再発明なんぞ自宅でやれ。仕事でやるな。 再発明した低レベルの車輪を見せびらかすな。
725 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 22:25:08 ] たいていは、上の人が買ってくれないから、って理由じゃない?>自前で作る
726 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 22:33:08 ] FlexGridProの品質の悪さは異常
727 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:25:40 ] > 車輪の再発明なんぞ自宅でやれ。仕事でやるな。 そもそも最初の質問で仕事で使うとは一言も書いてない件について 個人で使うことを想定した回答を、後出しの仕事で使うという情報を理由に叩く奴は馬鹿なのか?
728 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:40:34 ] >>724 の回答もどうかと思うが、 君のそれも話が噛み合ってないんじゃないの? >>725 の言うように724は勤め人にありがちな境遇がわかってない、 ってのなら同意するんだが。。 まあ、くだらんことで熱くなってもしょうがないだろ。
729 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 23:33:39 ] でも車輪の再発明って楽しいよな。
730 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:15:49 ] 再発明ではなく 新発明に出来る可能性を秘めてるからな 再発明にすら届かない可能性も孕んではいるが
731 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:12:26 ] 再発明ってやつは、意識して取り組めば、何らか得るものがあるが、 いかんせん時間効率がよくない。と思う 車輪の再発明は学生のうちにしとけ。とはよくいったもの 世の中そううまくいかん(実りある再発明行為が、学生のうちにできるわきゃない)わけだが
732 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:21:25 ] 時間効率が重視される仕事に置いてまで 再開発でも自作しろなんて言ってる奴は皆無である件について
733 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:28:14 ] コスト計算できない上司が部品買ってくれないってのは、自作しろって事じゃないの?
734 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:43:24 ] それは上司の主張であって、このスレの住人の主張ではないだろ
735 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:45:13 ] なんで上司の主張は除外されるわけ?
736 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 02:50:12 ] ここが会社ではなく2chのスレだから
737 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 03:19:15 ] 2chのスレだったら会社の話をしちゃいかんのか?
738 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 05:24:15 ] 別にいいんじゃないの? ただ会社の場合は「会社では」って付けてね 何も付けないと、名前空間上「このスレでは」って意味になるから
739 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:41:56 ] 上司の話をするのに、いちいち会社の上司はと付けなければいけないのか? いつからそんなルールになったんだ?
740 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:48:00 ] いや、そもそも「このスレの住人の(合意された)主張」なんてものが存在しません。
741 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 17:43:28 ] ★印の ”A7” とこを Cells(y, x) とすると 「Rangeメソッドは失敗しました」 と文句言われますが、どうすればいいのでしょう!? Range("A7:R120").Select Application.CutCopyMode = False Selection.Sort _ Key1:=Range("A7"), _ ★ Order1:=xlDescending, _ Header:=xlGuess, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin
742 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 18:37:57 ] おしえてくだせえ。 frmMain 実行中に、フォームの右端をドラッグして大きさかえると、Resizeイベントが発生するまではいいんだが、 その後 frmMain.ScaleWidth や、frmMain.Width などを取得してみると大きさ変更前の値しか出てこないんだよ。 なにか足りない部分があるのでしょうか?
743 名前:742 mailto:sage [2009/03/21(土) 18:45:53 ] すんません。事故解決です。 VBのウイザードからある程度メニューやツールボックスが揃ったプロジェクトではじめていたので、 Set fMainForm = New frmMain と標準モジュールからフォームオブジェクトが開かれてました。 初心者に意地悪なつくりでした。
744 名前:デフォルトの名無しさん [2009/03/29(日) 21:05:14 ] VB6のMouseMoveイベントでXの値は正常に取得できるのですが、 Yの値が0となってしまいます。どうしてでしょうか?
745 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 22:02:14 ] それが 再現 できる 最小の コードを 出してくれ
746 名前:デフォルトの名無しさん [2009/03/29(日) 22:15:43 ] >>745 Private Sub txtLesson_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) With txtLesson(Index) If .Left <= X And X <= .Left + .Width And .Top <= Y And Y <= .Top + .Height Then .Left = .Left + 2: .Top = .Top + 2 SetCapture txtLesson(Index).hwnd Else .Left = .Left - 2: .Top = .Top - 2 ReleaseCapture End If End With End Sub いろいろ省きましたが、デバッグ中にIf文のところでYにポイントするとY=0と表示されます。 Xは通常どおり取得できます。 もうこれはコードの問題じゃないのではないかと思うのですが、どうでしょう?
747 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 22:37:02 ] テキストボックスに対して上からカーソル移動させてる。なんてオチはないよな? 上下左右どこから移動してもY=0なんだよな?
748 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 22:38:18 ] そういうときは、コードを Debug.Print y だけにして試すのが常道。
749 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:47:10 ] >>746 それは「再現できる最小のコード」じゃないぞ
750 名前:デフォルトの名無しさん [2009/03/30(月) 05:21:48 ] >>747 うわーすみませんでした。そんなオチでした。 >>748 そうですよね。次回からそうしてます。有難うございました。 >>749 一応全体で何をやろうとしてるかも、伝わったほうがいいかなと思ったのですが、最小ではないですよね。 皆さん有難うございました。どうも僕はX, Yの値がテキストボックス上の値でなく、 それを含むウィンドウ上の値であると勘違いしていた模様です。 おかげで解決できました。どうもありがとうございました。
751 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:46:38 ] Err.RaiseとかRaiseEventとか俺使ったことないけど、何であんな奇妙なプログラム するんだ。あんなん何の意味があるんだ。
752 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:24:17 ] しなけりゃしないでいいんだよ QBなどからの代々の互換性というか、いきあたりばったりというか、その場しのぎの言語仕様なんだから
753 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:53:26 ] 内部処理のエラーを外部仕様の言葉に変えて使用者に返したいんじゃないか
754 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 02:07:33 ] VB6使うならRaiseEventは無いと死ぬ
755 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 17:18:15 ] >>751 イベントドリブンなコード書いたこと無いの?
756 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:40:09 ] >>751 ベントウドンブリなコード書いたこと無いの?
757 名前:デフォルトの名無しさん [2009/04/06(月) 11:33:02 ] VB6で作成したアプリからVB2005で作成したexeを呼び出したいと思っています。 しかし、やろうとすると以下のエラーが出ました。 実行時エラー'5' プロシージャの呼び出し、または引数が不正です。 呼び出す部分のコードは以下の通りです。 VB2005で作成したexeを、仮に"VB2005App.exe"とし、そのexeはVB6.0で作成したアプリのexeと同じ階層に居るものとします。 Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal blnheritHandle As Long, ByVal dwProcessId As Long) As Long Dim IDProcess As Long Dim hProcess As Long Private Const PROCESS_QUERY_INFORMATION = &H400& IDProcess = Shell("VB2005App.exe", vbNormalFocus) hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, IDProcess) AppActivate IDProcess 色々と調べたつもりですが、Shell関数の第1引数のパスはちゃんと合っていました。 ちなみに、VB6で作ったexeをshell関数で呼び出す場合は、何の問題もなく上記の方法で呼び出せました。 しかしなぜVB2005で作ったexeだとだめなのか、見当が付かない状況です。 どうかご回答を頂けたらと思います。
758 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 13:51:04 ] .NETフレームワークが無いって落ちじゃないよね・・・
759 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:41:10 ] AppActivate IDProcess でエラーっぽいな。 WaitForInputIdleがオンになるタイミングとActive可能なフォームが表示されるタイミングが 違ってる場合はAppActivateはエラーになる。 .NETのアプリはその例。 shellやAppActivateは使わずに全部Win32APIで書けば対応できるはず。
760 名前:デフォルトの名無しさん [2009/04/06(月) 15:37:30 ] VB6なんですが、サンプルコードを見ていて調べても分からなかった のですが、関数の後ろに%が付いているのは何の意味でしょうか? 例えば下記のような感じ Call DatInit% DatInit()という自作関数を呼び出すときにこんな風に書く場合です。
761 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 15:59:13 ] >>760 調べ方が足りない。型宣言文字
762 名前:デフォルトの名無しさん [2009/04/06(月) 16:32:05 ] >>761 dクス。型宣言文字自体は知ってましたがまさか関数にくっつくとは・・・ 戻り値が整数って事? C++みたいなキャスト目的って事でいいでつか? (まかり間違って長整数が返ってきてオバフロするのが嫌だから確実に整数にしとく、 みたいな)
763 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 16:38:42 ] お前の口調にはイライラする
764 名前:762 [2009/04/06(月) 16:55:49 ] 自己解決しました。
765 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:31:21 ] 春・・・だねぇ・・・
766 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:45:56 ] VB6でH8マイコンにデータを送信するプログラムを作る課題があるのですが 送信しようとすると時々VB自体がフリーズして強制終了するハメになります プロセス見るとVB6.EXEがあり終了することが出来ません フリーズする原因がわかりません。よろしくお願いします
767 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:46:48 ] プログラムが悪い、としか・・・
768 名前:デフォルトの名無しさん [2009/04/07(火) 09:09:02 ] おいおい>>764 は誰だ? 自己解決なんかしてないぞ。 くだスレなのに意地悪だねぇ
769 名前:757 [2009/04/07(火) 10:00:54 ] CreateProcess関数(API)を使ってexeを起動するようにしたら解決しました。 ありがとうございました。
770 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:14:51 ] スレの皆さんはじめまして。 VBでGSDを使用しようと思い試行錯誤中なのですが、いまいちテクスチャー作成 の部分でつまづきます。 VBで型などのポインタ受け渡しに悪戦苦闘しています。 まず、サンプルにあるテクスチャ作成・設定を行おうとCの本片手に変換しているのですが 動いてくれません。 どうかご教授お願いいたしたく思います。 GSD ttp://mosax.sakura.ne.jp/fswiki.cgi?page=GSD サンプル ttp://coderepos.org/share/wiki/GSD
771 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:53:54 ] 入れてもないし触ってもないけど なんとなくサンプル見たらDeclareしてVarPtrで普通にいけそうなんだけど
772 名前:デフォルトの名無しさん [2009/04/09(木) 11:11:15 ] 質問です。 VB6.0とVSSをインストールしてあるのですが VB6.0上でVSSを使用しファイル管理をするには まず何をしたらいいのでしょうか・・・?
773 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:08:25 ] まず基礎を自力で勉強したらいいと思うよ 勉強する気がないならプログラミングなんてやめちまえ
774 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:45:21 ] >772 プロジェクトをVSSに追加するとこから あとはVBの中からチェックアウト/インできる
775 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:51:24 ] VSSのヘルプを見てみてはどうか
776 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 19:24:54 ] gotfocusって、setfocusしないと呼び出せないの? それともフォーカスされると自動的にgotfocusが呼び出されるの?
777 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 19:54:37 ] Tab移動でも良いしマウスクリックでも良いし 対象のコントロールにフォーカスが移動した時に呼ばれるよ 実際に試してみると良いよ 呼び出されなくて悩んでるなら何のコントロールにどういうコードを書いてるのか 教えてもらわないと何も言えない
778 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 21:20:57 ] >>777 ありがとう〜 フォーカスの仕方によって、フォーカス対象のラベルが二通りに変動する処理を作ろうかと思ってて質問しますた ある時はラベルにAと表示して、またある時はラベルにBを表示する みたいに
779 名前:770 mailto:sage [2009/04/10(金) 04:13:24 ] >>771 レスありがとうございます。色々四苦八苦していました。 GSD_GetTexture(0, &info); ↓ Call GSD_GetTexture(0, ByVal VarPtr(Ginfo)) この様な感じでVarPtrでポインタをを指定しているのですが戻りが返ってきません。 他のバージョン取得等は戻り値が帰ってくるのでdll自体は使えてると思うのですが・・・ 色々調べてみようと思います。
780 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 09:18:12 ] GSD_TextureInfo がどういう宣言のし方してるんだろうな・・・ Ginfoのバイト数とかはC++のそれと同じにしてるんだろうか とか・・・ 詳しい動作の話になるとやってみないと突っ込めないけど
781 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 11:28:45 ] >>780 マニュアルでは struct GSD_TextureInfo { BOOL active; DWORD texSize; int x, y; DWORD color; DWORD align; BYTE *data; }; とありましたので Private Type GSD_Info GSD_Active As Boolean GSD_TexSize As Long GSD_X As Integer GSD_Y As Integer GSD_Color As Long GSD_Align As Long GSD_BYTE() As Byte End Type と置き換えました。 最後のByteは「テクスチャを格納したバッファへのポインタ」と書いてました。
782 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 21:28:58 ] BOOLとintはVBのLongに対応する。 あとBYTE*もLongにして、コード中で別の配列変数からVarPtrで取得した値を代入するしかないと思う。 ところで元と名前を変えるのキモい。
783 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 22:57:02 ] >>782 ありがとうございます。早速やってみようと思います。 >ところで元と名前を変えるのキモい。 すみません・・・以後気をつけます
784 名前:770 mailto:sage [2009/04/11(土) 04:40:18 ] >>782 Private Type GSD_Info active As Boolean texSize As Long x As Long y As Long color As Long align As Long data As Long End Type --- Dim Ginfo As GSD_Info Dim GByte(256) As Byte Ginfo.data = VarPtr(GByte(0)) Call GSD_DataLock Call GSD_GetTexture(0, ByVal VarPtr(Ginfo)) とし、Ginfo.texSizeを取得しても戻って来るはずのテクスチャサイズが 戻ってきませんでした。 置き換えって難しいですね・・・更に試行錯誤してみます。
785 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 08:10:46 ] ところで GetTexture の宣言文どうなってるの?
786 名前:770 mailto:sage [2009/04/11(土) 12:03:47 ] >>785 BOOL GSD_GetTexture(int index, struct GSD_TextureInfo *info); とマニュアルに記載いたしておりましたので Private Declare Function GSD_GetTexture Lib "gsd.dll" (GSD_Index As Long, GSD_TextureInfo As Long) As Long といたしました。
787 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 13:58:30 ] >>786 ByVal 指定がないじゃん。
788 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 20:26:58 ] だね。こんな感じでどうだ。 Private Declare Function GSD_GetTexture Lib "gsd.dll" (ByVal index As Long, ByRef info As GSD_Info) As Long
789 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 23:02:10 ] 予想通りの展開の予感
790 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 00:03:06 ] >>752 ちょいまち Err.RaiseもRaiseEventもQBにはないよ、と揚げ足をとる。
791 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 00:09:32 ] お前は視野が狭く小さい人間だ QBだけの話じゃない事すら見えていない 人間のクズだ ゴミだ 何故おまえはここにいる お前の目は飾り物か ガラスの玉でも入れておけ お前の頭は帽子のスタンドか 帽子すら置けない役立たずか
792 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 08:07:13 ] どこを縦に読むんだ?
793 名前:デフォルトの名無しさん [2009/04/13(月) 23:18:04 ] >>790 そもそもどちらもRaiseではあるけど、 まったく別の用途だから並んでることにすごい違和感を覚える。 クラス間連携でRaiseEventを使わざるを得ないこともあるし、 On Error Resume Next で拾わざるを得ない処理は Err.Raise 必須だし、 どちらも一般的に使いそうなもんだけどなぁ。
794 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 09:45:23 ] >>793 俺もそう思う
795 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 18:21:00 ] officeXPのaccessのmdbをVB6でGetObjectしています。 それからDoObj.RunSQLでSQL設定しています。 ところが、accessをoffice2007に変更すると、 GetObjectのところでunknown errorになってしまいます。 何かDLLか足りないみたいですが、ググっても 見つかりませんでした。どなたかヒントあったら下さい。 お願いします。
796 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 02:28:57 ] 救世主スレ見つけたw VBで作ったスケジュール管理システムを、ネットを使って外からスケジュールをアップデートできるようにしたいんですけど VBをHTMLでネット経由で動かす方法がまったくわかりません(´・ω・`) 学校の一学期使ったプロジェクトレベルのシステムなので、そんなに複雑じゃないので十分です。 自分はHTML担当で、VBを稼動ブラウザか何かで稼動させなくちゃならないのですが、 知識が無さ過ぎて何をググって良いのかも分からないっす(><) 何か良いページでもあったら、教えてくださいm(_ _)m
797 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 02:53:15 ] VBでhttpdを作りたいって事?CGIとしてVBプログラムを動かしたいって事?クライアントがVBって事?
798 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:04:48 ] >>797 >CGIとしてVBプログラムを動かしたいって事? おそらくこれです! MSISSとOracleとVBとAccessでスケジュール管理システムを構築するのですが、 利用者が自宅からスケジュールをチェックしたり更新したりする必要があるので そのインターフェースをHTMLで。との事です。
799 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:09:25 ] では VB CGI IIS でぐぐればいいんじゃないか?
800 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:12:14 ] >>799 どうもありがとうございます! 逝ってきますノシ
801 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 03:32:05 ] >>787 >>788 助言ありがとうございました。 あれから色々試してみたのですが、どうもダメでした・・・ せっかく教えて下さったのに申し訳ありません。
802 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:34:13 ] VBでCGIは作れないよ IIS使えるならASPで
803 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 10:46:32 ] Win32APIで標準入出力できるからCGIは普通に可能 でもhttpdはCGIを呼ぶ側だろ httpdもWinsockなどを使えば当然作れる
804 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 11:01:55 ] API実装してまでやるんだったら Cで書いた方が早くね?
805 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 12:25:46 ] VBでやりたいって言うんだからしょうがないだろ
806 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 16:51:07 ] FSOでできるだろ
807 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 23:26:48 ] 普通に考えたら、コンポーネント化して、ASP/ASP.NET から呼ぶだろ
808 名前:796 mailto:sage [2009/04/16(木) 01:26:57 ] えっと・・・。何がなにやら・・・。 自分達はプログラマーじゃなくて、システム管理のクラスをとってるだけなんです(´・ω・`) VBとSQLの基礎をちょっとやった事があるくらいのレベルなのに、 自分達でシステムをくみ上げなければいけないと言うクレイジーな状況でして・・・。 自分もHTMLのHPくらいは作った事あるけど、データを扱うとか皆目検討が付かないorz 一応ソースの一部を提供されてるんですけど、何がなにやら。 ソースの一部です。 <body lang=EN-US style="tab-interval: .5in"> <form ACTION = "/cgi-bin/Demo1" METHOD =GET> <p>Type a word in each box, then press the Submit button <p> <p><INPUT TYPE="text" NAME="Field1" VALUE></p> <p><INPUT TYPE="text" NAME="Field2" VALUE></p> <p><INPUT TYPE="submit" VALUE="Submit Message"></p> <p> <p> The button will call the VB program Demo1.exe </form> </body>
809 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 01:34:23 ] こりゃあ一般人が二階建て住居を建てるようなもんだな がんばれよ
810 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 01:38:03 ] ちょwwまwwww 何か参考になるサイトの紹介でもいいんで、助けてプリーズ・・・orz
811 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 01:42:17 ] VB → VBScript exe → asp にかえてもらえ。 たいしてかわらんだろ。
812 名前:796 mailto:sage [2009/04/16(木) 01:48:42 ] >>811 あ、できると思います。 あくまで参考のソースなんで、使っても使わなくてもいいらしくて。 最終的には「ちゃんと動けばいい」くらいの話なんで。 質問には答えるけど、自分達で調べて勉強しろよー。と言う 千尋の谷に突き落とすと言う名の半手抜き講義っす(# ^ω^)
813 名前:796 mailto:sage [2009/04/16(木) 01:59:44 ] >>811 ありがとうございます! asp vbscript のセットでぐぐったら、入門ページがいっぱw 見てきます(・ω・)ノシ
814 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 23:34:28 ] なんともこの業界の輝かしい未来のあるスレよ
815 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 10:05:03 ] 素人なのですが、VB6.0で遊んでます。手軽にWYSIWYGエディタ 機能 を 実現できる dhtmled.ocx(AvtiveX)が便利なのですが、 なにやrら、ネットに接続した場合脆弱性の問題が生じるとか。 その問題はWindowsXP環境だと最新にアップデートしてあれば クリアできる?
816 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 10:36:26 ] クリアできるかどうかすら定かにならないからセキュリティー問題ってのは難しいんだよ そもそもこんなところで聞いて「クリアできる」って答えが返ってきたら、君はそれを信用するのか? だとしたらソフトやコンポのセキュリティー以前に、君の思考セキュリティーに問題有りだ。 逆に信用しないなら、聞くこと自体意味がない
817 名前:デフォルトの名無しさん [2009/04/18(土) 18:43:07 ] >>816 激しく同意 >>815 まずコンポーネントのメーカに確認しろよ
818 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 02:20:53 ] >>793 VBのキーワードのおおらかさ(笑)を言い出したら、 N-BASICの時点でGETがグラフィックだったりファイルIOだったり するしなあ・・・ いまじゃファイルIOとプロパティかw
819 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 17:17:49 ] Form2.Show vbModal, Form1 のようにオーナーフォームを指定して呼び出した場合に Form2のForm_Loadでオーナーフォームを取得する方法を教えてください。 手続き的にはForm2にグローバルプロパティとか作って、Showの後に直接Form1を渡せば Form2側でForm1を取得すること自体は出来ますが、そういう方法ではなくForm2から辿る方法を知りたいです。 FormオブジェクトのメンバにOwnerFormとかParentObjectとか有るかなと思ったけど無いようだし、 GetWindowLongのGWL_HWNDPARENTでは、ThunderRT6FormDC(フォーム)ではなくThunderMainが取得されてしまい 他に有用なAPIも見あたらないです。 ThunderRT6FormDCを列挙するだけなら出来ますが、どれがオーナーフォームに設定されてるか 或いはオーナーフォーム指定無しで呼び出されているのかを取得するにはどうすれば良いのでしょうか?
820 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 18:02:38 ] GW_OWNER指定してGetWindowでハンドルが取れるらしいけど。 ハンドルが取れればFormsで列挙して探せるんじゃないのかな。 でも、オーナーを指定して表示&オーナーフォームの取得ができるフォームの インターフェイスを定義してそれを実装する方が簡単な気もする。 しかし、VBってそんなプロパティもなかったんだっけ。
821 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 20:40:14 ] VB6を使用してIISアプリを作成したいのですが、 新規にプロジェクトを作成すると「IISかPWSが必要です」とエラーが表示されてしまいます。 IISはインストール済みなのですが他にも必要なものがあるのでしょうか? OSはWindows2000Proです よろしくお願いします。
822 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 22:01:24 ] >>821 IISのバージョンが新しすぎる。VB6時代の古いのが必要。
823 名前:デフォルトの名無しさん [2009/04/22(水) 00:26:25 ] VBEの ツール/オプション/エディタの設定 で、コードの文字色とか背景色とか設定できるけど ここで指定できる色を書き換えるのってどうやるんだっけ? 以前何処かで見たんだが、そのときは「へぇ、こんな事も出来るんだぁ」くらいにしか思ってなかったが 今になってどうしてもやりたくなったので、知ってる人が居たら教えてください
824 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:26:49 ] クラスモジュールって、初めは何なのか全く理解不能な怪物だったな。 クラスモジュールの説明をしてる本って無いんか。 VB4〜6の本やExcel VBAの本やWord VBAの本で、いずれも見たことが無い。 VBをほったらかして、別のプログラム言語を学習してたので、その知識を応用 すれば、理解できるようになった。 VBで直接クラスモジュールの学習をしたことが無い。 Visual C++人の作ったソースファイルだから、C++言語の学習しといて正解だった。 正しくVB用語使ってくれないからな。そのせいで、危うく理解不能で仕事失格になる ところだったぞ。ユーザー定義型を構造体って言ったり、オブジェクトの参照のこと をポインタと言ったりするのは、まだCにもあるから序の口だが、メンバ関数とか、 コンストラクタとか、デストラクタって言葉はC++の用語だということを後から知った。 クラスモジュールは上級者用の本なら載ってるんかいな。
825 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:33:43 ] どこからタイムスリップしてきたんだ?
826 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:34:12 ] 載ってるだろ
827 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:39:17 ] どの本に載ってるんだ。
828 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:42:53 ] > ユーザー定義型を構造体って言ったり、オブジェクトの参照のこと > をポインタと言ったりするのは、まだCにもあるから序の口だが、メンバ関数とか、 > コンストラクタとか、デストラクタって言葉はC++の用語だということを後から知った。 世の中と違う用語(MS俺様用語)を使うのはVBくらいのもので、それ以外の言語では どこいっても通じるんですよ。
829 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:43:45 ] 上級者用プログラミング言語C++のプログラム人も、VB6を使うこともあるんですか。
830 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:44:36 ] 俺は「VBCOM」って本で勉強した記憶がある ググるの面倒だから勝手に探して
831 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 02:05:31 ] モジュール変数の宣言をPrivateと書くな、Dimと書け。
832 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 02:08:18 ] >>831 何故それを強要するの?
833 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 20:18:49 ] 変数はDimで宣言が普通。ちょっと知的なムードを漂わせたい時はGlobalかな。 変数名は短く略語で大文字で。 クラスモジュールは言語オタクの為の機能だから禁止。
834 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 20:34:12 ] >>833 しぬの?
835 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 08:54:03 ] 質問があります。 環境:VB6 SP6@XP Pro SP3 ・リッチテキストボックスかテキストボックス内で、改行のみの行を削除したいです。 ========= あいうえお かきくけこ ←改行のみの、この行を削除 ←上に同じ さしすせそ ========= 以上、どうかよろしくおねがいします。
836 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 09:03:52 ] リストに突っ込むときに if( 項目 = vbcrlf) then とかではじけばいいじゃないか・・・・
837 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 10:32:46 ] あいうえお[vbCrLf]かきくけこ[vbCrLf][vbCrLf][vbCrLf]さしすせそ ってことだから、vbCrLfの連続をvbCrLf単一に置換すれば良いだけでしょ 正規表現使えば、2個以上→1個を一発で出来るし 2個→1個でループ回せば、正規表現無しでも出来る
838 名前:835 mailto:sage [2009/04/30(木) 10:36:51 ] >>836 レスありがとうございます。 一気に>>835 に書いた例で取り込んでしまっているのです。 >>873 レスありがとうございます。 ループの方で試してみたいと思います。 ありがとうございました。
839 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 10:55:54 ] VB6だと配列を返す関数を下のように書いて動くの? 俺はVB使いじゃなくてVBAなのだが、VBAじゃAs Integer()としないと動かないんだが。 もっともExcelのユーザー定義関数として使うなら引数もInteger型にしないと動かないけど。 動く動かないはおいといてByte型はないと思うな。 これって数値に使う型じゃねーもんな。 Function fnc(ByVal a As Byte, ByVal b As Byte) As Integer Dim ar(1) As Integer ar(0) = a + b ar(1) = a - b fnc = ar End Function ここに書いてあった。 oshiete1.goo.ne.jp/qa3511531.html?from=navi_ranking
840 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 11:43:05 ] > VB6だと配列を返す関数を下のように書いて動くの? ↓ > すみません Ano3です > 関数宣言の As Integer は As Integer() でした って補足回答ついてるじゃん > これって数値に使う型じゃねーもんな。 数値に使う型だよ バイナリってのが0〜255の正数の配列だから 0〜255の正数を扱うByte型を配列にした物が、バイナリの格納にも利用されるってのが正しい解釈で Byte型ってのがバイナリ用なわけではなく、あくまでもByte型は数値を扱う型ね
841 名前:839 mailto:sage [2009/04/30(木) 12:23:07 ] >>840 補足見落としてたのか。 Byte型を数値計算に使うべきじゃないと思うけどな。 そこは考え方の違いとしてもfnc(255,1)はオーバーフローするな。
842 名前:839 mailto:sage [2009/04/30(木) 12:30:21 ] >すみません Ano3です なので見落としたのか。 Ano3じゃないもんな。
843 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 12:38:15 ] >>841 使うべきか使うべきじゃないかなんて話は一言もしてないよ Byte型が数値に使う型か否かって話をしただけだ 君が「この場合は相応しくない」という状況に応じた話ではなく 「(Byte型は)数値に使う型じゃねー」という定義付けの話をしたから俺も定義付けの話をした そのユーザー提議関数で使うべきか否かって話なら、俺の意見も「使うべきじゃない」だ >>842 A no 3 じゃん [A]nswer(回答) [No](ナンバー) [3]番目
844 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 12:45:49 ] >>843 別にユーザー定義関数として使わなくてもByte型はないと思うな。 「数値に使う型じゃねー」じゃなくて「数値計算に使う型じゃねー」って書けばよかったかな? Ano3は俺も書いた後気がついた。 あそこは初めてなのでそんな使い方するとは知らなんだ。
845 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 13:09:07 ] >>838 おそれすだけど SPLIT使って配列にしてしまえば? 対象は改行で 改行が CRLとCRLF交るとか言うならREPLACEでやってからとか 配列にしときゃぁどうにでもなるっしょ?
846 名前:835 mailto:sage [2009/04/30(木) 15:03:22 ] >>845 レスありがとうございます。 改行コードはCR+LFなので、Splitでも試してみたいと思います。 どうもありがとうございました。
847 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 00:04:49 ] VB6.0からWordを操作しようと思ってるのですが、 「WINWORD.EXE /a」の様に、起動スイッチを付加して applicationオブジェクトを生成することは可能なのでしょうか? ご教示お願いします。
848 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 00:07:11 ] >>847 無理。起動してから GetObject() とかでどう?
849 名前:デフォルトの名無しさん [2009/05/08(金) 08:41:35 ] >>848 なるほど、GetObjectですか。試してみます、ありがとうございます!
850 名前:デフォルトの名無しさん [2009/05/08(金) 14:05:17 ] はじめまして VB6のプログラムを修正することになり、 試行錯誤で頑張っているのですが、 どうしても情報が少なくて行き詰ってしまいました、 ここの皆様のお知恵を貸して頂けますでしょうか アナログモデムを使って、遠隔地のデータセンターと接続し、 ベーシック手順でデータの送受信を行う そんなことがVBでできるのかすらわからないのですが、 調べた情報として グレープシティの「PowerTools ActiveComm」という製品で、 モデムを使った送受信ができそう というところまでで、行き詰ってしまいました この製品で大丈夫なのか、遠隔地との接続はどうするのかなど、 まだわからないことばかりですが、 何卒、宜しくお願いいたしますm(__)m
851 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 14:22:15 ] MSCommでよさそうなものだが
852 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 20:49:45 ] 自作は敷居高くね 全銀ベーシック手順なら、通信してテキストファイルに落してくれるパッケージ買った方が早いと思う。
853 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 21:01:53 ] 自作ってのはWin32API使って実装することだろ それにMSComm任せなら十二分に敷居は低い
854 名前:デフォルトの名無しさん [2009/05/11(月) 00:30:39 ] VB6でフォームのあるディスプレイの解像度の取得方法は可能なのでしょうか。 VB.NETでいうところのScreen.GetBoundsにあたるやつです。 VB6ではできない、など助言をいただけますと助かります。 どうぞよろしくお願いします。
855 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 00:37:49 ] Screen オブジェクトから取れなかったっけか?
856 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 00:52:49 ] >>855 情報小出しですいませんでした。 プライマリとセカンダリのディスプレイがある構成で、 セカンダリの方の解像度が知りたかったのです。 Screen.Widthですとメインのディスプレイしか取得できませんでした。 現在フォームがあるディスプレイの解像度を取得することで セカンダリの解像度わかるはずと思ったのですが、 VB.NETのScreen.GetBoundsの情報しかなかったため質問させていただきました。 なんとか実現する方法はありませんでしょうか。
857 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 01:02:11 ] マルチモニタ用の API を呼ぶしかないね。
858 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 01:20:50 ] APIで。モニタを列挙して該当モニタの情報を取得、だったかな。
859 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 01:30:27 ] >>857 >>858 アドバイスありがとうございます。 フォームのあるモニタのハンドルを取得(フォームをサブモニタ位置に移動してから) MonitorFromWindow モニタの情報を取得 GetMonitorInfo でサブモニタのbottom,left,right,top座標を取得することができました。 マジ感謝しております。 ありがとうございました。
860 名前:850 [2009/05/11(月) 09:28:13 ] >>851-853 返信ありがとうございます MSCommで調べてみたところ、解決できそうな気がしてきました ありがとうございました
861 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 07:53:34 ] Dim c As Long Dim s As String c = RGB(&H12, &H34, &H56) s = _ "R: " & Right("00000000" & Hex(c And &HFF), 8) & vbCrLf & _ "G: " & Right("00000000" & Hex(c And &HFF00), 8) & vbCrLf & _ "B: " & Right("00000000" & Hex(c And &HFF0000), 8) MsgBox s と書いて R: 00000012 G: 00563400 B: 00560000 が表示されるんですが G を 00003400 として加工するにはどうすればいいですか?
862 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 08:48:50 ] RightString(8, "0")" & Hex((c Mod &H10000) And &HFF00), 8)
863 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 18:56:04 ] >>862 ありがとうございました おかげで希望通りの文字列が取得できました しかし理解力に乏しいのでまだよくわかりません >>861 で書いた c And &HFF00 の時点で(1)の結果を期待してましたが実際には(2)です Andでどういう風に演算されているのでしょうか? 00000000 01010110 00110100 00010010 (&H563412) 00000000 00000000 11111111 00000000 (&HFF00) -------- -------- -------- -------- And 00000000 00000000 00110100 00000000 (&H3400)..........(1) 00000000 01010110 00110100 00000000 (&H563400)..........(2)
864 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 19:20:22 ] >>863 ウォッチウィンドウで&hff00を入れてみると、Integer型で-256と解釈されていることが分かる。 -256を符号拡張すると&hfffffff00になるというわけ。
865 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 20:22:00 ] >>864 ありがとうございます 確かにIntegerとして扱われてました おかげでなぜうまくいかないのか把握できました
866 名前:デフォルトの名無しさん [2009/05/18(月) 08:55:14 ] 質問です。 VBでプログラムのデバッグをしたいのです。 エラーを発生させて確認したいのですが イミディエイトウインドウにうちこむ Err.Raiseを使うときの引数の渡し方がわかりません。 Err.Raise(゙゙,゙゙,゙゙,゙゙) それぞれどう設定すればいいのでしょうか。 画面番号やヘルプテキストなど。 あと、Callなどを付けずに、Err.Raiseだけいれてエンターキー押せばいいのですか? よろしくおねがいします。
867 名前:デフォルトの名無しさん [2009/05/18(月) 23:42:37 ] >>866 Err.Raise エラー番号 ex) Err.Raise 9 --------------------------- Microsoft Visual Basic --------------------------- 実行時エラー '9': インデックスが有効範囲にありません。 --------------------------- OK ヘルプ --------------------------- まぁ、ヘルプくらい嫁
868 名前:デフォルトの名無しさん [2009/05/19(火) 13:11:46 ] >>867 解答ありがとうございます。 Err.Raise 9 を入力したのですが、 エラーを発生させて、あらかじめラベルを貼った Errorラベルにデバッグで移動をしないのです。 やりたいのは On Error GoTo Error1 処理〜 Error1: エラーメッセージ出力 これでF8キーで実行してデバッグ中に Err.Raiseを使用して、Error1ラベルに移行したいのですがうまくいきません。 コードを編集せず、イミディエイトウインドウで行いたいのです。 よろしくおねがいします。
869 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 14:15:14 ] 停まってる車で目的地に行きたいと言ってるのか
870 名前:デフォルトの名無しさん [2009/05/19(火) 20:40:34 ] >>869 はい。 何らかの処理でエラーが発生してErrにコードが設定されますよね。 例;ファイル書き込み異常など。 その時に、予め設定しておいたエラー処理に移行するのですが、 それをデバッグ中に、コードや環境をいじらず行いたいのです。 Err.Raiseで起こせると過去のログで読んで試したのですが、うまくいかず。 イミディエイトウインドウに教えていただいたコードを設定したのですが、 ポップアップウインドウは出るのですが エラー処理に移行しないので。 その方法を教えてもらいたいのです。 ソースは、引数のない関数を呼び出しているだけなので、 環境でエラーを起こす方法が、それ以外なくて困っています。 よろしくお願いします。
871 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:11:31 ] GoTo Error1 でいいんじゃね?
872 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:18:54 ] バカか
873 名前:デフォルトの名無しさん [2009/05/19(火) 23:26:01 ] >>870 小学生か??ほんとにヘルプ嫁と何度言ったら(ry Private Sub Form_Load() On Error GoTo Label1 Err.Raise 8 End Label1: MsgBox ("Label1") End Sub
874 名前:デフォルトの名無しさん [2009/05/19(火) 23:27:14 ] ちなみにイミディエイトではできん
875 名前:デフォルトの名無しさん [2009/05/20(水) 09:49:28 ] 解答ありがとうございます。 記載しましたが、コードにErr.Raiseを仕込む事なく行いたかったのです。 試行錯誤した所、イミディエイトでエラーを起こす事で例外を発生の後にErrorラベルへの移行ができました。 以下、Yahoo知恵袋にて見つけた記載を転記。 イミディエイトでErr.Raise ↓ マウスでドロップ ←これを知りたかった 後で同じ質問が出た時のために残しておきます。
876 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:59:44 ] >後で同じ質問が出た時のために残しておきます う・・・うん・・・・
877 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:31:20 ] スレタイ通りで結構
878 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 14:35:04 ] VB6で出来たEXEだけを (例えば一般的なHelloWorldでもいいので) インストールしたばかりで何もしていないwindows2000マシンに入れて動きますか? ランタイム入ってるんだろうか… 最悪はExecel2000を入れてもOKです。 ちょっと変な質問なのですが・・・情報が少なくって・・・ よろしくお願いします。 うちの会社にWin2000がもうないので・・orz
879 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:04:02 ] Windows2000にはMSVBVM60.DLLだけ入っているので TextBoxやLabel等しか使っていなければ動く
880 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:10:34 ] 日本語表示がおかしくならなかったっけ? 古い話だからあまり記憶に無いが
881 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:17:13 ] >>879->>880 サンクスです。 ひとまずランタイムは標準最小構成が入ってるから ライブラリ使わないなら何とか動く感じですが色々問題がありそうですね。 ありがとうございました。
882 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 15:49:55 ] 880も書いてるが、日本語扱うならvb6jp.dllも必要 Msvbvm60.dllとVb6jp.dllがあれば、 標準コントロールのみで参照設定使ってないアプリは動く あとは使用するコントロールやCOMに応じてdllなりocxなりが必要になる Msvbvm60.dll、Vb6jp.dllや、コントロールのocxはシステムにインストールしなくても exeと同じディレクトリに入れておけば大抵動くよ 但しVB6のProfessional以上のライセンスを持ってないと、同梱配布は出来ないけどね COMの場合はレジストリに登録しないとダメだがな
883 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 17:31:09 ] >>882 ご丁寧な補足説明ありがとうございます。 Professionalなのでそこは問題がなさそうです。 一回は実際に入れる前にどこかで実験しなけりゃいけないなぁ…・ 2000は1つくらい残しておいてほしかった
884 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 19:09:22 ] つ仮想PC
885 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 19:47:46 ] なんだっけなぁ MS UI ゴシックは文字化けして、 なぜか MS ゴシック 9 ポイント にすると、文字化けしないんだよね。 化けるなら全部化けるだろ、と思うんだが、 上記設定だと化けない謎。
886 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:38:49 ] どうしてもVBじゃなきゃだめなのか 最小ランタイムで動かすようなものなら他の言語も検討してはどうか
887 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 12:03:42 ] >>885 俺もそれで悩んだんだけど、各コントロールに明示的にUIゴシックを 設定するとちゃんと表示された 初期状態でUIゴシックになってるのはフォントのプロパティに何も設 定されていなくて、環境依存のデフォルトフォントで表示されるため らしい。 フォームのソース見ると分かるよ
888 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 12:04:59 ] >>886 察してやれよ VB6の人に他の環境使えっていってもムリな話
889 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 16:12:54 ] VB6のコンボボックスについて質問です。 ドロップダウンコンボでリストから何かを選択したら、選択したものを リストの一番上に移動するというのをやりたくて以下のようなコードを書いたのですが、 何故か選択した後、コンボボックスの内容表示( .Text )が空になってしまいます。 2〜3で入れ替えを行い、2で消えてしまった表示を4で補完するという流れなのですが ステップ実行してみると、4が実行されたときにちゃんと選択文字列がコンボボックスに 表示されるのですが、End Subが実行されると何故か消えてしまいます。 原因と解決方法を教えてください。 Private Sub Combo1_Click() Dim buf As String '1 選択項目の文字列を保持 buf = Combo1.Text '2 選択項目を削除 Combo1.RemoveItem Combo1.ListIndex 'ここで一端コンボボックスの内容表示は空になる '3 一番上に追加 Combo1.AddItem buf, 0 '4 選択項目の文字列を表示 Combo1.Text = buf ' ステップ実行ではここでちゃんと表示される End Sub ' 何故かここで再度表示が消える Private Sub Form_Load() Combo1.AddItem "aaa": Combo1.AddItem "bbb": Combo1.AddItem "ccc" End Sub
890 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:51:49 ] 何時間もレスがないようなので・・・ いま、VB6 をインストールしてないので Excel 2003 で上記のコードを動かしてみた。 ちゃんと動いたよ。もしかして、Combo1_Change() プロシージャのない? Combo1.RemoveItem を実行したときに Combo1_Change() を実行してしまうのが 原因かもしれない。はずれてたら、ごめん。
891 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 21:53:51 ] 訂正 Combo1_Change() プロシージャのない? → Combo1_Change() プロシージャが存在してない? 対策は、考えてみて。(はずれてたら、ごめん。)
892 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:02:37 ] あ〜、さらに訂正 可能性としては、Combo1.Text を実行したときに Combo1_Change() が呼ばれている方が 濃厚だね。 解決法は、要求してないイベントを起こさないようにするか、Combo1_Click() から Combo1_Change() を呼び出したときは、何もしないようにする。(なんか変数を用意する) はずれてたら、ごめん。
893 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:15:32 ] もう一回全部作りなおすとどうなるのかな? 保持ってるやつを先頭に入れて他の項目挿入中に保持ってるやつを判定して再挿入を防ぐとか
894 名前:889 mailto:sage [2009/05/24(日) 05:21:25 ] >>890-892 Combo1_Changeイベントは有りません。 当初、あるアプリを制作中にこの問題に行き当たり、確認のため新規プロジェクト(標準EXE)の Form1にCombo1のみを配置して、コードも>>889 に書いたForm_LoadとCombo1_Clickのみで 確認した上で問題が再現したので質問させて頂きました。 >>889 で書いた他にコードが無い状況で発生しているということを書き忘れていたため、 余計な考察をさせてしまい申し訳有りません。 あと、Excel2003のユーザーフォームで確認しましたが、確かにExcelでは問題が再現しませんでした。 >>893 一度Clearして選択項目を先頭にAddItemしたあと、他の項目をAddItemしていくということですか? Listを配列変数に保持して、再挿入されないようにAddItemしてみましたが結果は変わらずで、 項目の入れ替えは正常に行われますがコンボボックスの内容表示は空になってしまいます。 もちろん、選択項目をAddItemしたときに.Textも設定して、ステップ実行でその時点では表示されています。 他の項目をAddItemしている間も表示は消えず、End Subで表示が消えてしまいます。 上にも書いたとおり、他にイベントはありませんし、仮に合ってもブレイクポイントではなくステップ実行なら 影響を与えているイベントがあれば、その部分にステップするはずですが。
895 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 09:07:53 ] VB6 インストールした。ためしに、Win7RC にしてみた。動くみたい。 Private blnRecursive As Boolean Private Sub Combo1_Click() Dim buf As String If blnRecursive = True Then Exit Sub End If '1 選択項目の文字列を保持 buf = Combo1.Text '2 選択項目を削除 Combo1.RemoveItem Combo1.ListIndex 'ここで一端コンボボックスの内容表示は空になる '3 一番上に追加 Combo1.AddItem buf, 0 'インデックスを指定するようにするので、コメントにした '4 選択項目の文字列を表示 'Combo1.Text = buf ' ステップ実行ではここでちゃんと表示される blnRecursive = True '再帰的に呼ばれるのを回避 Combo1.ListIndex = 0 'これをすると、Combo1_Click() が再帰的に呼ばれてしまう blnRecursive = False End Sub ' 何故かここで再度表示が消える
896 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 09:09:03 ] Private Sub Form_Load() blnRecursive = False '初期化 Combo1.AddItem "aaa": Combo1.AddItem "bbb": Combo1.AddItem "ccc" End Sub とりあえず、動くようにしたよ。 でも、原因はなんだろね。確かに、元プログラムでは、 End Sub するときに消えるね。 時間あったら調べとくよ。 # Excel 2003 では、再現しないんだねぇ。 # ちなみに >>890 でした。
897 名前:890 mailto:sage [2009/05/24(日) 21:24:07 ] ってか、これだけでも Hello が表示されない Private Sub Combo1_Click() Combo1.Text = "Hello" End Sub Private Sub Form_Load() Combo1.AddItem "aaa": Combo1.AddItem "bbb": Combo1.AddItem "ccc" End Sub ってことは、Click イベントではクリックして選んだんだから、選んだもの以外に変更するんじゃーねーよ って事らしい。 もうすでに解決してるかな?
898 名前:デフォルトの名無しさん [2009/05/25(月) 01:10:55 ] >>889 何で消えるのかはCombo2の動きで感じ取れ Private Sub Combo1_Click() Static flg As Boolean If flg Then Exit Sub Else flg = True If Combo1.ListIndex > 0 Then Combo1.AddItem Combo1.List(Combo1.ListIndex), 0 Combo1.RemoveItem Combo1.ListIndex Combo1.ListIndex = 0 End If flg = False End Sub Private Sub Combo2_Click() Debug.Print "テキスト変更前" Debug.Print "ListIndex:" & Combo2.ListIndex Combo2.Text = "ccc" Debug.Print "テキスト変更後" Debug.Print "ListIndex:" & Combo2.ListIndex Debug.Print End Sub Private Sub Form_Load() Combo1.AddItem "aaa": Combo1.AddItem "bbb": Combo1.AddItem "ccc" Combo2.AddItem "aaa": Combo2.AddItem "bbb": Combo2.AddItem "ccc" End Sub
899 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 00:45:51 ] 質問です。 コマンドプロンプトでの入出力を逐次行いたいと思っています。 以下のようなサンプルを書いてみたのですが、うまくいきませんでした。 ipconfigの結果の最後の行を取得したのち、 もう1行読みに行ってしまいそのまま処理戻り待ちになってしまいます。 この時コマンドプロンプトを手動で閉じると制御が戻り処理が再開されました。 何がいけないのでしょうか? Dim objWShell As Object Dim objExec As Object Set objWShell = CreateObject("WScript.Shell") Set objExec = objWShell.Exec("%ComSpec%") objExec.StdIn.WriteLine "ipconfig" Do Until objExec.StdOut.AtEndOfStream Debug.Print objExec.StdOut.ReadLine Loop objExec.StdIn.WriteLine "Exit" Set objExec = Nothing Set objWShell = Nothing
900 名前:デフォルトの名無しさん [2009/05/29(金) 01:36:03 ] >>899 手動で閉じたときにエラー発生しなかった? 何でエラーになったか考えればこんな感じにたどり着くと思うよ。 objExec.StdIn.WriteLine "ipconfig" + vbCrLf + "Exit"
901 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 01:59:45 ] >>900 助言ありがとうございます その通りでした。 ですが、実のところ途中でExitしたくないのです コマンドプロンプトを複数回呼び出すたびにウインドウが出てしまうためこれをさせたくないのです 元はといえば自由に操作可能なコマンドプロンプトを非表示で呼び出せれば良いのですが・・・ そのために考えたコードが上記のものでした
902 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 07:53:09 ] パイプのようなものを使えばいいのでは
903 名前:デフォルトの名無しさん [2009/05/29(金) 12:24:36 ] コンソールアプリケーションには疎いのですが、 パイプのようなものとは記号「>」でファイル出力するという意味でしょうか? 中間に入力などがあり分岐したい場合に対処できないと思ったのと ファイルへの入出力を伴うのは処理速度がストレージ性能に依存するため避けたのですがどうでしょうか?
904 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 12:54:06 ] VB パイプ などでぐぐれば多少は出てくるでしょうに、それすらしないんですか
905 名前:デフォルトの名無しさん [2009/05/29(金) 13:07:49 ] 処理速度とか気にしてる割にはシェルの起動時間は気にならないんですね めんどくさいから素直に何がしたいのか書けよ
906 名前:899 mailto:sage [2009/05/29(金) 13:16:59 ] すいませんでした ググって来ました 私が言っていたのはリダイレクトだったのですね、失礼しました > 「標準入出力」というのは、ユーザーが何もしなくてもOSが「標準で」用意してくれる入力先・出力先のことです。 > 「リダイレクト」によって標準入出力をファイルに変更したり、 > 「パイプ」によってあるコンソールアプリの標準出力を別のコンソールアプリの標準入力につなげたり出来ます。 ・・・このパイプのようなものを実際どう組み込んだらよいのでしょうか? >>899 ソースでobjExec.StdOut.ReadLineの場所で止まってしまう理由が分かりません /cをつけて自動終了するようにして使うしかないのでしょうか? StdInやStdOutをどのように捕らえたら良いのかお教え願えませんでしょうか?
907 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:24:06 ] ぐぐれば一番最初に出てきただろうに、なんなのこいつ
908 名前:899 mailto:sage [2009/05/29(金) 13:34:33 ] >>905 シェルの起動時間とはなんでしょうか? CreateObjectの事でしょうか? これは一度作成したのちずっと保持する予定なので気にしていません コマンドプロンプトのExec呼び出しの事でしょうか? こちらも一度しか呼び出さないようにして再利用する事を考えていて、その結果このような質問に至りました。 >何がしたいのか いくつかのCUIアプリケーション(コンソールコマンドの結果)のGUI化です ExecメソッドではStdIn、StdOutというもので制御が可能と知ったので、 これを使ってコマンドプロンプトもどきを作れないかと考えました。 これができればいろんなもののGUI化が出来るだろうと思いテストソースを書きました。 >>907 すいません
909 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:36:41 ] ほぼそのもののソースがググると出てくるんだが まだ不満があるのか
910 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:37:10 ] ごめんなさい、それはどこですか?
911 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:40:52 ] >>909 お前うぜーよ URL貼る気ねーならくるな
912 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:46:28 ] MSDNライブラリのStdInプロパティの説明くらい読めばいいのに
913 名前:899 mailto:sage [2009/05/29(金) 14:04:21 ] >>912 ありがとうございます このあたりの事でしょうか? ttp://msdn.microsoft.com/ja-jp/library/cc364385.aspx 一応MSDNのこのあたりは関連するキーワードのものを含め何度か読み返してはいたのですが、 前述の無反応になる件の答えが見出せず困っています・・・ アホですいません Do Until objExec.StdOut.AtEndOfStream の判定ではポインタが最後に到達していないはずなのですが StdOut.ReadLineメソッドを呼び出すと処理が戻らず(エラーも出ず)待機してしまう理由がどうしてもわかりません
914 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 15:33:52 ] いちいち自分でググってそのページを見てるくせに、 ここではほのめかしの回答しかしない屑。
915 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 15:46:09 ] 先にexitを送らない限り一生終わらない(AtEndOfStreamはFalseのまま) Dim objWShell Dim objExec Set objWShell = CreateObject("WScript.Shell") Set objExec = objWShell.Exec("%ComSpec%") objExec.StdIn.WriteLine "ipconfig" objExec.StdIn.WriteLine "exit" Do Until objExec.StdOut.AtEndOfStream MsgBox objExec.StdOut.ReadLine Loop
916 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 16:07:08 ] ipconfigの出力に[[hoge]]があると誤判定で終了してしまうが Dim objWShell' As Object Dim objExec' As Object Set objWShell = CreateObject("WScript.Shell") Set objExec = objWShell.Exec("%ComSpec%") objExec.StdIn.WriteLine "ipconfig" objExec.StdIn.WriteLine "echo [[hoge]]" Do Until objExec.StdOut.AtEndOfStream Dim sLine' As String sLine = objExec.StdOut.ReadLine If sLine = "[[hoge]]" Then Exit Do MsgBox sLine Loop If Not objExec.StdOut.AtEndOfStream Then objExec.StdIn.WriteLine "exit"
917 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:10:27 ] >>915 ありがとうございます 相手(コマンドプロンプト)が終了しない限り、そのTextStreamは「Endがない」動作をするのですね 私のサンプルで停止していたのは、この「現在まだない次の行」を取得中で待機している、という事でしょうか Exitを打たずともスマートな解決方法があるのではないかと思っていましたが、 簡単にはいかないようでその理由も大体把握できました 「Exec呼び出し先が動作中の時は、StdOutの最終行がAtEndOfStreamで検出できず、 またStdOut.Read系で現在の最終行を超えて読もうとしてもエラーも出ず新たな行が入るまで待機してしまう」 と言う事ですね。 サンプルまで付けて頂いて、アホでも理解しやすく配慮していただき助かりました >>916 回避策ありがとうございます なるほど、未知の最終行を読むこと自体を回避するのですね 番兵を置いているところで目から鱗でした! これならコマンドプロンプトをExitさせずに逐次StdOutを監視できそうです
918 名前:デフォルトの名無しさん [2009/06/07(日) 13:02:33 ] 誘導されてきました 何年か前の話です、バカでも使える簡単な言語を紹介してくれと知り合いに聞いたところ 「VBが良い、中学生でも扱える言語」といわれ家電量販店でVBを購入。 たしか「N88ベーシックと難易度は変わらない」とも言われました。N88ベーシックがなんなのか よくわかりませんが似たようなベーシック言語は触ったことがあるのでVBもそんなものだと思って買いました 購入してそのまますっかり忘れて押入れの中に放置していたのですが、今日引っ張り出してきてインストール しようとしたのです、するとIISとフロントベージと言うものがインストールされていないので インストールできないとの表示が・・・ IISはアパッチのようなものだとしてフロントページが何なのか良くわかりません、調べてみると ホームページビルダーのようなものらしいけどこれは買わないといけないのでしょうか?。 そもそも知り合いの説明がずいぶん間違っているようにしか思えないのですが。 昔のベーシックの難易度ってフォートランぐらいだったと思うのですが。 VBとやらはインストールの段階で知らない専門用語だらけです。 これはいったいどういうことなのでしょう?えらい人教えてください。
919 名前:デフォルトの名無しさん [2009/06/07(日) 13:04:28 ] ヴァージョンは2003 OSのバージョンはWindows2000です
920 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:04:32 ] 気にせずインストールを続ければOK
921 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:40:47 ] そのFrontPageはOfficeのFrontPageではなく、FrontPage 2000 Server Extensionsの方だな ASP.netをやらないなら入れる必要なし IISとFrontPage 2000 Server Extensionsを入れるなら コントロールパネル→プログラムの追加と削除→Windowsコンポーネントの追加と削除 から、インストールが出来る VB6スレだから、誘導が間違ってたんだろうけど 質問する場合は最初からバージョンは書いておいた方がいいよ
922 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:50:22 ] FrontPage 2000 Server Extensions てそもそも何のために導入しなきゃいけないんだ? いまいちよくわからずに入れていたんだが気になってきた
923 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:59:25 ] WebDAV ではないんだけど、あんな感じで Web サイト上の コンテンツを更新するのに必要なんじゃなかったかな。