古代VBプログラマ質問スレ(Ver.6.0 まで) part65 [転載禁止]©2ch.net
ここは古代に使われていたVisual Basic 〜6.0 の質問スレです。 質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、 「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。 VB.NETは別物なので専門スレで、VBA、APIの質問もそれぞれのスレで。 ○ 質問者の心得 一.質問する前にMSDNやGoogle、過去ログにも目を通してみる。 二.VBScript、インストーラーなどはこのスレでOK。 三.質問は第三者にもわかりやすいよう簡潔かつ具体的に。 四.荒らしは相手しない。 ○ 回答者の心得 一.答えられない質問は無駄に罵倒せずスルー。無理するな。 二.代用法を強制しない。 三.回答する上で必須ではない情報をむやみに聞き返さない。 四.荒らしは相手しない。 五.VB情報募集中。 六.回答は質問者が理解できるよう具体的に。 MSDN Online Japan ホーム http://www.microsoft.com/japan/msdn/default.asp Visual Studio 6.0 Service Pack 6 http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx Google http://www.google.co.jp/ 前スレ VBプログラマ質問スレ(Ver.6.0 まで) part64 http://peace.2ch.net/test/read.cgi/tech/1393069842/ ※「まず自分で調べる」クセを身につけよう。 >>205 おいおい、大丈夫かよ そのコードは一体どこに実装されると思ってるんだ? あなたが苦労して取得した資格の平均最低月給ランキングは第何位? 民間や国家が認定している仕事の資格や免許。 その求人雇用市場での価値が一目瞭然で分かる。 (全求人情報平均最低月給196,500円) ぼくらニッポンの民間・国家資格別平均最低月給ランキングはこれだ! http://jobinjapan.jp/license/ >>206 もちろんクラスの外側だよ それこそがインターフェース継承の欠点でもある >>211 一言だけ言うと、SOLIDについて調べるといいよ VB6プログラマがインターフェイスとか背伸びすんな。 おまえらは長年寝かした秘伝のソースを改修すればいいんだよ。 VB6ってしばらく触っていないが、知らんうちにスゴイことになっているようだ インターフェースの継承って一体どんなものなんだろう? もしかするとインターフェースに抽象クラスの機能でも付いているのかな 抽象クラスの定義は中身が無いメソッドが少なくとも1つは含まれていることが条件だから インターフェースは、すべて中身が無いメソッドので、抽象クラスでもあるよ。 そりゃな。 C++では逆にインターフェースはなくて 抽象クラス代用してるし。 >>215 > インターフェースの継承って一体どんなものなんだろう? 本気で言ってるのかネタなのか区別つかんが、VB6/VBAでImplements IFooを 「インタフェース継承」あるいは「インタフェースを継承する」と言う人が結構いるってだけの話 あと、Javaクラスタの人にもいるみたいだ あー、調べたら、Javaの方は本当にインタフェースの継承だった interface A { void write(String str , int synchro); } interface B { String third = "逃げちゃだめだ"; } interface C extends A , B { void write(String str); } 実装継承ができない言語ならまだしも 実装継承とインタフェースの両方が使えるのに あえてインタ^フェースを選択する人って一体? JavaはInterfaceに実装も書けるようになってる AbstractClassと重なる部分をマスクとして除けば、Interfaceの意味はより明確になった >>221 一時期、実装継承は悪なんて風潮があったね 今考えると、LSP違反になりやすいとかそういうことが理由だったのかも あと言語にもよるけど、実装継承を繰り返して継承すると、途中クラスの変更が 事実上できなくなったりするというのも理由の一つだと思う >>223 だからと言って何でもOKのインターフェース継承がおすすめというのは何とも理解しがたい よそのスレで相手にされないやつがここに流れてきているのか >>224 インターフェース継承がなんでもOKというのは、どういう意味? >>228 たとえば継承10連結とかでもできるってことじゃない? 俺みたいに、VB6のプログラムがWin8.1までは動いていたんだけど、 Win10にして動かなくなったって人いる? インターフェースは継承とはレイヤーが違うので、概念上は制限が無いので、継承を包括し得る。C++のように継承でインタフェースを実現する事もありえるが、概念上は継承自体が制限となる。 用語1つで場をこんだけ混乱させてしまうオブジェクト指向ってプログラミングツールとしては最悪の部類だよね でもそういう最悪をかき集めたものが飯の種になる矛盾を孕んでる 混乱が飯の種ってまるで火事場泥棒みたいなやつだ いやあこの話題の中で委譲の話を持ち出す人が居たのには驚いたわ 確かにインターフェースは委譲出来ないけど、ソレは抽象クラスでも同じことだからね これがニッポンの民間・国家資格別平均最低月給ランキング。 将来有望な資格も見えてくる。 資格別の求人件数と平均最低月給ランキング。 あなたの資格の市場価値が一目瞭然! http://jobinjapan.jp/license/ プログラマーの大切な資格は正当に評価されているか確認しよう。 >>237 XP以降、VB6のランタイムはWindowsに包含されているから EXE配布だけで実行させられるんで意外に重宝してる。 日本語表示させるためにはVBJP.dllとかが必要になるんで面倒だけど >>233 馬鹿が集まっているスレだからという方が10000万倍説得力があるわ VB6の後継かどうか知らんがVBAを拡張する計画があるみたいね Excelユーザーに感謝せんとな VBAが拡張されるとしたら、おそらくECMAScriptの最新機能を 取り込んでくるだろうな。 何の因果か未経験からVB6でのシステム保守に携わっています。 川口輝久の「Visual basic6 基礎編」は持ってるのですが 何とか理解できるようになったので 生産性向上のため見るべきサイトや本などが あればお願いします。 漠然とした質問で申し訳ないですが よろしくお願いします >>247 できるだけ他言語の新しい知識には接しないことだな。 VB6がクソに思えてしまう。 Fowlerのリファクタリングなんて良いんじゃないかな VB6の場合いかにして手に負えないレガシーの塊を解きほぐすかって方針で勉強したほうが役に立つだろう この方針なら他の言語に移った時にも学んだ事は無駄にならない 方向を誤ってVB6マスターを目指しちゃうと将来的に有意義な経験がなにも残らない >>250 VB6でテスト用意してリファクタリングするのは恐ろしく時間の無駄になる予感がするんだが・・・ みなさんありがとうございます。 開発といいましても既存の画面の修正からなのでリファクタリングというのをやってきます 日本の会社はリファクタリングにお金なんて出さないから注意な リファクタリングっていうのは解析作業の一種で、 複雑になってしまったコードを解析して その結果を反映させること。 リファクタリングに金を出さないという話であれば、 複雑になったコードを解析するのにも金を出さないって話だぞ。 そのとおりだが。 解析して、コードは修正せずに、バグと戦って、次回も解析するか、 解析して、コードを修正して、バグなく楽に修正、次回も楽になるか の違いだ。 質問させてください。 Windows7 pro 32bitにVB6.0Professionalを入れました。 これに適用するべき、MSが配布している更新ファイルを調べてみたのですが、 Vs6sp6B.exe VB6.0-KB290887-X86.exe(=vbrun60sp6.exe) VB60SP6-KB2708437-x86-JPN.msi この3つ以外にもありますでしょうか? 俺もそういう更新ファイルとか分からんから適当に入れた http://pastebin.com/sSPzxYHt リストアップしてみた(関係ないのもあるけど) お前ら教えろください 同じフォーム内にあるメソッドから〜_Clickみたいなイベントを呼び出すのってアリですか? 直感的にダメな気がするんですが、なぜダメなのか説明出来ません どちらにしても誰か理由を説明出来る人いますか? 教えてエロい人 イベントが発生してないのにイベントハンドラが実行されたら困惑するだろう 平日にハロウィンコスプレするようなもんだ どーせイベントの内容をコピペしたメソッド作ってそっちを呼ぶんだろ? それなら最初からイベント呼んでおけ 普通はイベントの中身をメソッドにして、両方共其のメソッドを呼ぶように作るものだな >>267 > VB屋はこれだから嫌だね どれのこと? わざとらしいアンチぐらい 見分けようよw >>261 > 同じフォーム内にあるメソッドから〜_Clickみたいなイベントを呼び出すのってアリですか? なし > 直感的にダメな気がするんですが、なぜダメなのか説明出来ません その直感は正しいよ。理由はいくつか有る。 まず、一般的にフォームというのはユーザーの入力と処理を結びつけるためにある。 結びつけるだけなのでなるべくフォームに処理は書かない。 処理はフォームとは別に(ビジネスロジック用の)クラスに分離する。 このクラスはフォーム関連コードは一切ない。これにより自動テストがしやすくなる。 このように分離するので、二つのイベントハンドラから、共通のクラスのメソッドを呼び出すので _Clickを直接呼び出すことはない。 これが大きな理由では有るんだが、クラスを使うほどじゃない場合でも 処理はprivateメソッドに書いて、内部的には処理と結びつけるコードは分離させておいたほうがいい。 それから、もう少しわかりやすい理由として、依存関係の話がある。 _Clickというのは、ボタンだったりするわけだが、そのボタンの存在に処理が依存しているのか?ということ。 通常はボタンには依存していないだろう。仮にボタンをなくしたとしても、処理の内容は変わらないだろう? だが、_Clickを呼ぶと処理の中にそのボタンが紛れ込んでしまってるわけだ。こういうふうに 余計なものが混ざるとUIを変更した時の影響範囲が大きくなる。 どちらにも共通することは、その責任が明確に分離されていること。単一責任の原則とも言われている。 自分の担当範囲の処理だけを行うことで、それぞれの処理がシンプルになる。 絡み合わせる必要が無いものを、絡み合わせてはいけない。 >>261 お前さんの直感は正しくて基本的には良いことじゃないけど、まあ程度問題ではある。 良いことじゃない理由は、メソッドの名前と実態が乖離するから。 (ボタンがクリックされた時に呼ばれるはずのメソッドが、それ以外の時にも呼ばれることになる) これは、「イベントハンドラが呼ばれるのはイベントが発生した時だけだ」という前提でコードを読んでいる プログラマの期待を裏切ることになる。 程度問題なのは、そうは言っても十分短いコードなら上記の前提が正しくないことに プログラマは気づくことができる。 せめてインターフェース継承くらい深い議題でないと盛り上がらんな VB6からVB.NETへの移植を体系的にまとめた本は有りませんか? 最悪VBではなく他の言語でも構いません 別言語への移植に関する情報が欲しいのです >>275 移植元、移植先の両言語をちゃんと理解すれば移植は簡単だろう >>275 新しくはないけど http://www.amazon.co.jp/gp/product/4798102164/ref=s9_simh_bw_p14_d0_i1?pf_rd_m=AN1VRQENFRJN5& ;pf_rd_s=merchandised-search-4&pf_rd_r=1RM0Y8MGQP2Y6H6E51H9&pf_rd_t=101&pf_rd_p=204601349&pf_rd_i=465392 👀 Rock54: Caution(BBR-MD5:60fb6bd37e268099e6257349e1247e68) windows8.1をupdateしたらIDEが使えなくなった xp 7 10では大丈夫なのに Visual Basic 6.0 が扱えるスレッドについて質問させてください。 私はVB6.0で作られた業務アプリのユーザーです。 プログラミングはかじった程度ですが、訳あってこの周辺を調べています。 第4回 Background Workerで夢のマルチスレッドがついに! ttp://www.atmarkit.co.jp/fdotnet/vb2005/vb2005_04/vb2005_04_01.html を読むと、「VB6.0まではスレッドが使えなかった」と書いてあります。 Visual Basic .NET におけるコンポーネント作成の変更点 ttps://msdn.microsoft.com/ja-jp/library/cc437477(v=vs.71).aspx を読むと、ActiveX に関してはスレッドが使える、旨の記載があります。 これは、「GUIコントロールに関してのみ」スレッドが使えるという解釈で良いのでしょうか? よろしくお願いします。 >>282 > これは、「GUIコントロールに関してのみ」スレッドが使えるという解釈で良いのでしょうか? 主語は? あとt抜きとかやめろ 操作ミス失礼。 >>283 「Visual Basic 6.0 でアプリケーションを組んだ場合、GUIコントロールでのみスレッドが扱える」 という理解で良いかどうか、ということになります。 逆に言えば、 「画面の無いコマンド(VB6.0で作れるかは分かりません)を作る場合、スレッドを使った処理を実装できない」 という理解で良いかどうか、ということになります。 >>286 一体何が知りたくて質問してるのかしらないが、>>282 で自分で答え書いてるじゃん。 「GUIコントロールでスレッドが使える」とか意味わからんし。 ・VB6ではスレッドは使えない ・VB .NET以降は使える >>287 ありがとうございました。 すみません、ActiveX.exe、ActiveX.dll が良く分からなかったので「GUIコントロール」という書き方をしてしまいました。 A Thread to Visual Basic: Multi-Threading In VB5 and VB6 http://www.freevbcode.com/ShowCode.asp?ID=1287 この文献に行き着いたので時間をかけて読んでみます。 >>288 日本語より英語の方が堪能とかじゃないなら、「VB6 ActiveX DLL」とかで検索した 日本語ページ読んだ方がいいんじゃないの? VB6でスレッドとか変態的だからメンテの関係でやめたほうがいいんでない 素人質問で申し訳ありませんが、昨今においてWin7にVB6で組んで納品、という形態は存在するのでしょうか? >>286 ActiveXオブジェクトはVB以外でも作成できる VB6ではマルチスレッドはサポートされてない (API呼び出しで無理やりやる方法もあるけど、問題になる事もある) これが全て。GUIとか何とか関係ない >>291 たしかに非同期で動くけど、それ別EXEだからマルチスレッドじゃなくて別プロセスじゃね >>295 やっぱそういうことですよねm(_ _)m やっと分かりました! 1. Visual Basic 6.0 で作成する「アプリケーション」ではスレッドは使えない。 2. Visual Basic 6.0 の開発環境では、「再利用可能コンポーネント」として ActiveX(≒COM)コンポーネントが作れる このコンポーネントではスレッドが使用可能。 ただし、ActiveX は単独では動作できない。他から呼ばれる専用。 ということだったんですね…。 ありがとうございました。 >>297 つか、やりたいのは「スレッドを使う」ではなくて、非同期処理をしたいんじゃないの? だったら、スレッドは不要。 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、 BitTorrentがオープンソースで開発されています 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw The Covenant Project 概要 Covenantは、純粋P2Pのファイル共有ソフトです 目的 インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します 特徴 Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW) 接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です DHTにはKademlia + コネクションプールを使用します UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません 、 Dim a As Date a = CDate("2016/5/14") とか a = DateSerial(2016, 5, 14) で日付のみ入った状態に、後から時刻を設定するにはどうしたらいいでしょうか DateAdd("s", h*3600 + m*60 + s, a) だと、時刻を文字列に持っていた場合はちょっと面倒 >>300 こんなのでいいんだろうか a = CDate(Format(a, "yyyy/mm/dd") & " 16:45:37") >>301 ありがとうございます こんなのでいけてしまいました Dim a As Date a = CDate("2016/1/2") a = a & " 12:34:56" Windows10 64bitで昔作ったソフトを動かしてみたところ 入力系コントロール→他コントロール (テキストボックス→その他)のフォーカス移動がものすごく遅いことに気付いたんですが 原因わかりますか? テキストボックAに「123」と入力、入力直後にテキストボックBをクリックしても1〜2秒フォーカスが移動しない。 グリッドでも同様(同一グリッド内の別セルや別グリッド) read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる