約 4,179,433 件
https://w.atwiki.jp/mini98/pages/22.html
高い技術を持つエンジニアがソフトを開発する場合、言語は何を選択しても同じというような意見が無くは無いです。しかしシステム開発の実際では、それなりの理由があり、言語が選択されます。 ソフトの形式であれば、組み込みであるか、webシステムであるか、デスクトップアプリであるか。機能の要求もあります。デスクトップアプリでも、入力して印刷してすぐに終了というようなものか、それとも常に何かからデータを取得して記録し続けるようなものであるか等々。 webであれば、適切なフレームワークが存在するかどうか。大規模開発であれば、マンパワーの確保も重要で、いくら優れたフレームワークが用意されていたとしても、そのフレームワークを熟知した技術者がほとんどいないような状況では、そのフレームワークは選択されないでしょう。 VB6はもう既に枯れた言語であり、マイクロソフトもサポートを打ち切っています。Windows7でそのまま動作するかどうかは大きな悩みどころであったと思います。企業のシステムにVB6が使われているならば、windows7でもし動作しなかった場合、新たに開発し直さなければなりません。 今はもうMicrosoftは.NETに方向性をシフトしています。.NETというバーチャルマシンがあり、C++であろうがVBであろうがC#であろうが、この.NET上の動作するよう中間コンパイルされ、VM上で実行されます。おそらくJavaのコンセプトを追いかけたものだと思いますが。 このVM(バーチャルマシン)が曲者で、JavaもVB.NETもC#.NETも、自動ガベージコレクタ(GC)の仕組みを持っていますが、GCする時って、少ない時間ながら、システムが止まるんです。意図的にGCを起こして、その停止時間を短くする事はできます。しかしこの仕組みだと、常にデスクトップ上で動作させて情報収集するとかいうようなシステムには向きません。GCにかかる時間を抑えるような事は可能ですが、全く問題にならないように作るのはそれなりに難しい。 VB6ももちろんGCの仕組みはあります。しかしJavaや.NET言語とは違った簡易なGCの仕組みです。参照をカウントしておいて、カウントが0になったら破棄、という単純なものです。メソッドの中であるクラスをNewしても、メソッドを抜けて参照がなくなると、そこでメモリは解放されます。自作クラスを作って、Terminateイベントで、メモリの解放がわかるような記述を入れておくと、どのタイミングでTerminateしているか観察できます。 VB6の簡易なGCの仕組みで注意すべき点は、循環参照を作らない事です。これを作ってしまうとすぐにメモリリークを起こします。 また、VB6はオブジェクト指向とはいえ、その仕組みは簡易なものです。例外のスローも実装されていません。従って、簡易にシステムを組みやすいという点があります。あまり強固なものを作る事ができませんが、裏をかえせば、簡単なソフトをささっと作るのに向いています。 まとめると 簡易なGC 簡易な文法 これらによって、常に動作し続ける簡易なソフトには向く、と言えそうです。 @
https://w.atwiki.jp/mini98/pages/20.html
VB6は不十分とは言え、オブジェクト指向の仕組みを備えた言語です。世のオブジェクト指向言語は、データ型に厳格である方向性で開発されています。コンパイルが型に厳しい。継承やポリモーフィズムの仕組みがあるのですから当然のような気もします。 一方、VB6はデータ型が曖昧な部分があります。基本データ型のVariant型の存在です。ここにはIntegerであろうがLongであろうがStringであろうが入ってしまいます。Variant型とオブジェクト指向という部分に何か違和感を感じます。 @
https://w.atwiki.jp/abwiki/pages/242.html
#N88BASIC/***********************************************************spline.c -- スプライン補間***********************************************************//* 非周期関数用 */Const N = 5Dim x[ELM(N)] = [ 0, 10, 20, 30, 40 ] As DoubleDim y[ELM(N)] = [ 610.66, 1227.4, 2338.1, 4244.9, 7381.2 ] As DoubleDim z[ELM(N)] As DoubleDim h[ELM(N)] As Double, d[ELM(N)] As Double'staticSub maketable(x As *Double, y As *Double, z As *Double)Dim i As LongDim t As Doublez[0] = 0 z[N - 1] = 0 /* 両端点での y''(x) / 6 */ For i=0 To N-2h[i ] = x[i + 1] - x[i]d[i + 1] = (y[i + 1] - y[i]) / h[i]Nextz[1] = d[2] - d[1] - h[0] * z[0]d[1] = 2 * (x[2] - x[0])For i = 1 To N - 3t = h[i] / d[i]z[i + 1] = d[i + 2] - d[i + 1] - z[i] * td[i + 1] = 2 * (x[i + 2] - x[i]) - h[i] * tNextz[N - 2] = z[N - 2] - h[N - 2] * z[N - 1]For i = N - 2 To 1 Step -1z[i] = (z[i] - h[i] * z[i + 1]) / d[i]NextEnd SubFunction spline(t As Double, x As *Double, y As *Double, z As *Double) As DoubleDim i As Long, j As Long, k As LongDim d As Double, h As Doublei = 0 j = N - 1While i j k = (i + j) / 2If x[k] t Then i = k + 1 Else j = kWendIf i 0 Then i=i-1h = x[i + 1] - x[i] d = t - x[i]spline = (((z[i + 1] - z[i]) * d / h + z[i] * 3) * d _+ ((y[i + 1] - y[i]) / h _- (z[i] * 2 + z[i + 1]) * h)) * d + y[i]End Function'mainDim i As Longmaketable(x, y, z)For i = 10 To 30Print i, spline(i,x,y,z)Next
https://w.atwiki.jp/mini98/pages/18.html
VB6でOOPしようとする時、弱点があります。それは、クラス群をパッケージにまとめる事ができないという弱点です。Javaではパッケージ、.NETでは名前空間と呼ばれる仕組みがあります。それは、クラスをまとめておくものです。VB6にはその機能はありません。DLL化すればできなくもありませんが、VB6で作成したクラスのDLL化にはスコープがおかしくなるというようなMicrosoftのバグが存在するため、お勧めできません。 結果、クラスモジュールのフォルダに、たくさんのクラスが整理されずに収まっているような状態になります。パッケージプライベートというような用い方が仕様に無い言語なので仕方ないといえば仕方無いのですが。 もちろん、機能的には問題ありません。 @
https://w.atwiki.jp/mini98/pages/16.html
VB6はオブジェクト指向プログラミングをわかりにくくする VB6は紛れもなくオブジェクト指向機能のあるプログラミング言語です。しかしながら、VB6だけでプログラミングの勉強をしていると、オブジェクト指向の考え方のようなものはいつまで経っても理解できないでしょう。VisualEditorの初期画面の一部です。 プロジェクトエクスプローラーを右クリックして出てくる「追加」に、フォームモジュール、MDIフォームモジュール、標準モジュール、クラスモジュールがありますが、フォームとMDIはわかりやすいとしても、標準モジュールとクラスモジュールをどう使い分ければ良いかわかりますか?市販のVB6解説本の大半には、この説明がありません。Webで検索しても、ほとんど見つからないと思います。 標準モジュールとクラスモジュールの使い分けはどのようにすればいいのでしょうか?標準モジュールの構成はクラスモジュールと同じく、フィールドとメソッドから成り立っています。しかし標準モジュールはクラスのようにインスタンス化せずとも利用できます。デザインパターンに慣れた人なら「Singleton」がすぐに浮かぶと思います。つまり、staticなインスタンスのような存在が標準モジュールなのです。 おそらく、VB6しか触った事の無い人であれば、ここまでの解説はあまり理解できないと思います。 OOPを理解する事により、この違いが明確にわかるようになれば、クラスと標準モジュールの使い分けができるようになると思います。 幸いにもVB6はシングルスレッドの動作しかできない(マルチスレッドは不可能ではありません)ので、単によく利用するメソッドをまとめておくという目的の為に標準モジュールを利用するのも間違いではありません。しかしisoで定められたソフトウェア品質の一つに「移植性」があります。これを考慮するのであれば、クラスがわからないうちは単にメソッドをまとめておくだけの場合も、クラスモジュールにまとめておいた方が良いでしょう。 VB6でOOPが身につかない理由 VB6からプログラミングの勉強をはじめた VB6以外のオブジェクト指向言語に触れた事が無い フォームもクラスであるにも関わらず、規定のインスタンスが存在し、インスタンス化して利用する機会が無い 標準モジュールという特殊な存在がある このような人はおそらくいつまでもオブジェクト指向プログラミングの技術が身につきません。市販のVB6テキストでOOPを解説した本が見当たらないですし、Webでもほとんど存在しません(無くはないです)。このような環境でどのようにVB6を利用してOOPを勉強していけばいいのでしょうか。 市販のVB6テキストの大半は、コントロールの使い方の解説に終わっています。その中にはNew演算子のようなOOPの書き方が無くもないのですが、利用者はわからないまま利用しているに過ぎないように思います。 マウスでフォームの広さを決定し、マウスでコントロールを貼付け、クリックして適当にロジックを書く。それでも動作するものを作る事ができます。でもこれではいつまでもOOPは身につきません。他に、構造化もおぼつかないと思います。構造化する理由は後で述べますが、Functionプロシージャも書けないまま、初心者を抜け切れない独学者は大勢いると思います。これはVB.NETの時代でも同様です。 @
https://w.atwiki.jp/mini98/pages/23.html
「VB6はOOPをわかりにくくする」でも書いたように、VB6だけを利用し続けていると、OOPはいつまでもマスターできないです。それとは別に、VB6は初心者に向かないんじゃないかなあと思う所を書いてみます。 オブジェクト指向を抜きにしても、VB6は初心者に向きません。少し語弊があるので正確に言うと、VB6では初心者がちゃんとプログラムの勉強をするには向きません。データ型が曖昧です。VB6を解説したサイトには、メソッドの引数や戻り値のデータ型の記載の無いサイトすらあります。他の言語のサイトでは考えられません。 Text1.text = Text1.text + 1 このような記述でもコンパイルエラーになる事はありません(Text1に数値以外のデータが入ってしまった可能性が考慮されていません)。しかし初心者はこのようなコードを平気で書きます。場合によっては、数値の比較をしているのか文字列の比較をしているのかわからなくなるようなコードも見た事があります。 暗黙のうちに使用されるプロパティもあります。 Text1.text = "hogehoge" と書くところを Text1 = "hogehoge" でも同じ意味になります。しかし、他の人が後から見てもわかるように書くならば、プロパティは正確に記述するに越した事はありません。 きちっと書く、という習慣は大事です。データ型は基本中の基本です。メソッドやプロパティも基本中の基本です。ここを曖昧にしたままでも動作してしまう仕様は、初心者にも簡単に書けるようにマイクロソフトが配慮したのでしょうが、それは不要な配慮であったと思うのです。 @
https://w.atwiki.jp/mini98/pages/17.html
私が考える、VB6でオブジェクト指向プログラミングを勉強する最初の一歩を紹介します。これは、フォームもクラスであるという考え方からスタートするための方法です。次のような流れになります。 標準EXEを作成する Form1の既定のインスタンスを削除 プロジェクトエクスプローラーを右クリック→標準モジュールを追加 Sub Mainを作成 プロジェクトプロパティでスタートアップの設定を「Sub Main」に変更する。 まず、VisualEditorを立ち上げ、標準EXEプロジェクトを作成します。 Form1のコンストラクタ(Initiarizeイベントプロシージャ)で、Form1の既定のインスタンスへの参照を削除します。コンストラクタとはクラスからインスタンスを生成した時に、最初に実行されるものです。 Private Sub Form_Initialize() Set Form1 = Nothing End Sub 既定のインスタンスとは、インスタンスを作成していなくても、自動的に作成されてしまうインスタンスでVB6に独特のものです(VB2005で復活してしまいましたが)。これでFormを実行しようとしても、すぐに終了してしまい、利用できません。また同様に、Form1からForm2を呼び出すような場面では、実行時エラーが生じます。 Formもクラスなのです。型(クラス)から実体(インスタンス)を生成する事により、利用を開始します。このインスタンスを、あたかも「モノ(Object)」のように扱う事ができます。 続いて、プロジェクトエクスプローラーから、標準モジュールを追加します。 標準モジュールを追加したら、Sub Mainメソッドを作成します。 Private mainFrm As Form1 Sub Main() Set mainFrm = New Form1 Call mainFrm.Show End Sub Sub Mainを作成すると同時にmainFrmと名付けたフィールドが用意されています。今回の例ではここまでする必要は無いのですが、後々mainFrmにアクセスできるよう、フィールドに保持させています。 最後に、プロジェクトプロパティでスタートアップの設定をSub Mainに変更します。プロジェクトエクスプローラーを右クリックすると、プロジェクトのプロパティを設定できます。そこでスタートアップを次のように変更して下さい これでプログラムを実行すると、ちゃんと表示されるようになります。 フォームを作成する際は、全てのフォームに対して、コンストラクタ内で既定のインスタンスを削除するよう心がけて下さい。 @
https://w.atwiki.jp/kodan/pages/148.html
[VB] 0埋め [VB] Date型→String型 [VB] DBの値のNull確認 [VB] dictionary 使い方 [VB] switch文 [VB] webAPIが呼べなかった→インポート文が違った [VB] 三項演算子の書き方 [VB] 数値を16進数文字列にする [VB] 動的List
https://w.atwiki.jp/sawan50/pages/19.html
Visual Basic VB.NET(VB2003),VB2005 コメントからドキュメント(XML)作成 Windowsアプリケーションのサンプル SettingsProvider VB6
https://w.atwiki.jp/pspt/pages/190.html
VB VBを使ってWindowsやOfficeソフトともっと仲良くなりましょう。 VB リファレンスVBA何も動作しないマクロ 一行コメント コード置き場VBA選択したグラフのグラフタイトルや軸ラベルを適切な場所に設置するマクロ リファレンス VBA 何も動作しないマクロ Sub 何も動作しないマクロ() End Sub 一行コメント ここにコメント コード置き場 VBA 選択したグラフのグラフタイトルや軸ラベルを適切な場所に設置するマクロ 作成者:S.T.30 説明:グラフタイトルが下にくるようにしました。 Sub グラフ作成補助() 任意のグラフを選択した状態でマクロを実行せよ 凡例削除 If ActiveChart.HasLegend Then ActiveChart.Legend.Delete End If x軸ラベル準備 ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis) ActiveChart.Axes(xlCategory).AxisTitle.Select Selection.Text = "x []" y軸ラベル準備 ActiveChart.SetElement (msoElementPrimaryValueAxisTitleRotated) ActiveChart.Axes(xlValue).AxisTitle.Select Selection.Text = "x []" グラフタイトル準備 ActiveChart.SetElement (msoElementChartTitleAboveChart) ActiveChart.ChartTitle.Select Selection.Left = 60 Selection.Top = 180 Selection.Font.Size = 14 Selection.Text = "図 x" ActiveChart.PlotArea.Select Selection.Left = 15 Selection.Top = 5 Selection.Width = 335 Selection.Height = 160 グラフを選択した状態に戻る ActiveChart.ChartArea.Select End Sub