おすすめ本

最近のトラックバック

  • event (夢茶爺&苦茶爺のPC奮戦備忘録)

AccRanking

Ad

カテゴリ「VB.NET」の82件の記事 Feed

2017年9月27日 (水)

VB.NET:ActiveReports.NET 9.0J で複数のセクションレポートを統合する印刷処理

GrapeCityの「ActiveReports.NET 9.0J」を使っているのですが、 1個の印刷処理内で、どうしても複数のセクションレポートを統合する必要が発生しました。

昔の「ActiveReports」だと空の印刷オブジェクトを作っておいて、 それに各印刷オブジェクトを追加してやる方法が在った様に覚えていたのですが、 ネットで探してもそのような例は見つかりませんでした。

1個のセクションレポートに対して後から発生する他のセクションレポートを 追加していく方法しかネットには載っていませんでしたので、 何とか改良して複合的に行える様にしたのが、以下の例です。

この例の前提として、「rptEven」「rptOdd」というセクションレポートの クラスが作成済みであることとします。

最初に印刷オブジェクトを統合するセクションレポートオブジェクトとして「rptMain」を 宣言します。
その後、10回のループで偶数と奇数の回数の時にそれぞれ「rptEven」「rptOdd」 のオブジェクトを生成して、「rptMain」の印刷オブジェクトに追加しています。

偶数回と奇数回での処理で、「rptMain」が「Nothing」であるかを確認し、 初回の処理を行っています。
実際には奇数回の「rptMain」が「Nothing」であるかの確認は必要はありませんが、 ループ処理において、どちらが先に来てもいいように考えました。

もっと簡単な方法があるかもしれませんが、何かの参考になればと思います。

ゼロから分かるActiveReports帳票開発入門 (CodeZine BOOKS)


楽天市場


デル株式会社

2017年6月26日 (月)

VB.NET:SpreadSheetGearを使って印刷処理

以前はVB.NETからエクセルを使って印刷処理を行うプログラムを作成したことがありました。

エクセル上に雛形となるシートを作成しておいて、そのシートをコピーし、 該当するデータを指定されたセルに当てはめて、印刷を行うというものです。
連続帳票ではなく、A4単票の印刷ではよく行ったものです。

エクセル印字をVBのプログラムから行うためには、エクセルのインストールが必須だったり、 「Microsoft.Office.Interop.Excel」を使ったCOM参照での処理が必要だったりします。
このCOM参照が曲者で、参照を開放しないとエクセルのプロセスがメモリ上に残ったままになったりします。 メモリに残ったままだと、次の印刷ができなかったりと、いろいろ悪さをします。 COM参照をしっかり開放してやれば、問題はないのですが...

やはりパソコンにエクセルがインストールしていないと動かないのがネックです。
そこで、サードパーティ製でエクセル互換のツールが無いかと探したら、 「XLSOFT」から直接エクセルファイルを操作できるツールが出ていました。
それが「SpreadSheetGear」という製品です。(外国製の様で、日本語対応したもののようです)

このツールですがDLLファイルを参照設定して利用しますが、上記のエクセルのCOM参照のオブジェクト内の 関数とほぼ同等の名称を使用している様です。

今回は印刷処理での利用がメインなので、サンプル等を見てみたのですが、 「WorkbookView」を使った印字例はあるのですが、このオブジェクトを使用しない例が なかったので以下の様なソースで試すと、とりあえず印刷はできました。 (何かのご参考までに...)


EXEと同じフォルダに存在する「TEST.xlsx」内の先頭のシートを単に印刷するサンプルです。

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

デル株式会社

2016年11月24日 (木)

Windows10(x64)に「VisualBasic6.0」をインストール

最近、VisualBasic6.0(VB6.0)で動作しているシステムをWindows10に載せる物件が発生しました。 VB6.0といえば、15年ぐらい前からの古い開発環境です。
昔はVB6で結構システムを作成したものですが、大部分は「.NET」への移行が終わっています。

ただし、VB6で作られていてもシステムのプログラム本数が多い場合には「.NET」への移行には 大変な費用が掛かってしまいます。

そのため、客先ではそのままのソースでWindows10に載せ替えができないかということになります。 お客にしてみれば、以前と同じ動作をさせたい場合には「.NET」への移行は必要ないことになります。 VB6で作成したEXEがそのままWindows10で動作すれば何も問題無いことになります。

そこでWindows10へのVB6のインストールを行い、使用しているコントロールの検証を行うことになりました。 先ずはVB6のインストールなのですが、以下の様に少し引っ掛かった部分がありましたので、注意が必要です。

  • VB6の「SETUP.EXE」を「管理者として実行」で起動します。
  • インストールの手順に従って進めていきます。
  • しかし、最後のところで「システム設定を更新しています」で止まってしまいました。

 (いくら待ってもインストールは終了しません)

  • インストールを強制終了し、再度インストール開始します。
  • 再度のインストールでも最後の「システム設定を更新しています」で時間が掛かっている模様でした。
  • 仕方なく再度のインストールで、カスタム設定のところの「データアクセス」をOFF設定でインストールがOKになりました。
  • 更に「VB6.0 Service Pack 6」をインストールします。


(今回のシステムのデータベースはOracleなので、アクセス用には「oo4o」を使うので、 VBの「データアクセス」は特に必要ありませんでした)


さらに使用している市販のコントロール類の検証です。 GrapeCityによれば SPREAD7.0J  ActiveReport2.0 はWindows10での動作は補償対象外ですが 動作させてみると特に問題無く動く様です。

あと、 ActiveComm 1.0 の検証も行いましたが、特に問題無く動作する様です。 RS232Cポートを持っているWindows10のPCと、WindowsXPのPCとをクロスケーブルで接続し、 データの送受信が行えることを確認しました。

これらのコントロールは、GrapeCityでは動作を保証していないので、 自己責任 となりますが。



次のシステム改変時期には、VB6から「.NET」への移行が必要になるかと思います。
その時には、「.NET」から別の物になっていたりして…

中古パソコン 【Windows7】 [T14B] 東芝 dynabook R731/B Core i5 2520M 2.5GHz 2GB 250GB 13.3ワイド DVD Multi Win7 Pro 【中古ノートパソコン】【ノートパソコン】【PC】【アウトレット】【中古】【1ヶ月保証】【RCP】【おすすめ】

価格: 20,800円
(2016/11/24 11:57時点 )

感想:1件



楽天市場

2016年11月14日 (月)

ASP.NET:スレッド毎のグローバル変数(ThreadStatic)

ASP.NETでグローバル変数を使う場合には、注意が必要です。 ASPは1個のプロセスとして動作するため、グローバル変数として宣言された変数は1カ所にしか存在しません。

そのため、複数のユーザから同時にアクセスが在った場合、そのグローバル変数を上書きする様な ことがあれば、問題が発生します。

この問題を解決するためには、 ThreadStatic を用いて、 その変数をスレッドで静的と宣言すれば、各ユーザ毎には別のグローバル変数が対応付けられます。

ASP.NETではアクセスが在ったときには、スレッドを生成し、 使い終わった時にはそれを廃棄せずにプールする様です。 次のアクセス時にはプールされたものが使われる可能性があるので、 上記のグローバル変数を使う前には必ず初期化が必要だと思います。

デル株式会社



楽天市場

2016年11月 1日 (火)

【VisualBasic6.0】マウスのホイールボタンを使う方法

久々にVB6を動かすことがあったのですが、マウスのホイールボタンには対応していなくて ソースを見るのが「.NET」とは勝手が違いました。

VB6は相当古いソフトなのでマウスのホイールボタンには対応していないのですが、 調べてみると、ホイールボタンに対応するDLLをMicroSoftが提供していました。

■「VB6MouseWheel.exe」ファイルのダウンロード

Microsoft の以下サポートページより、「VB6MouseWheel.EXE パッケージ」をダウンロードします。

http://support.microsoft.com/kb/837910/ja(マイクロソフト サポート オンライン)

■「VB6MouseWheel.exe」ファイルの展開

「VB6MouseWheel.exe」を適当なフォルダにダウンロードし、実行すると以下のファイルが解凍されます。

・EULA.txt
・Main.bas
・VB6IDEMouseWheelAddin.dll
・VB6IDEMouseWheelAddin.vbp
・VBA Mouse Wheel Fix.reg


■「VB6IDEMouseWheelAddin.dll」ファイルのレジストリ登録

「VB6IDEMouseWheelAddin.dll」を適当なフォルダにコピーして、レジストリ登録を行います。
私は、「C:\Program Files (x86)\Microsoft Visual Studio\VB98\」フォルダにコピーしました。
(64bitマシンだったので「x86」ですが)

その後で、Windowsシステムツールの「コマンドプロンプト」を管理者として実行し、ウインドウを開きます。 以下のコマンドを実行して、レジストリ登録を行います。

regsvr32 "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6IDEMouseWheelAddin.dll"

■VB6のアドイン設定

VB6 の開発環境を開き、メニューの [アドイン] から [アドインマネージャ] を起動します。
[アドイン マネージャー] ボックスの一覧で、[MouseWheel Fix] を選択し、 [ロード/アンロード] チェックボックスと、[起動時にロード] チェックボックスをオンにします。
最後に「OK」ボタンをクリックし、開発環境を再起動すると、マウスのホイールが使用できるようになります。

Mousewheel



これでやっと、ソースを見るのが少し楽になりました。

デル株式会社


楽天市場

2016年7月25日 (月)

DataGridViewで縦スクロールがうまく描画されない時の対処方法

マイクロソフトの標準コントロールである、 DataGridViewで行数のプロパティである「RowCount」に値を再設定しても 縦スクロールがうまく描画されない時があります。

そんな時には「RowCount」に設定する前に、行クリアメソッド「Rows.Clear()」をコールすれば解消する様です。
以下にソースを抜粋します。
基礎Visual Basic 2015 基礎シリーズ

デル株式会社
楽天市場

2016年6月 1日 (水)

ASP.NET:PageRequestManagerクラスによるCSVダウンロードの方法(UpdatePanel)

UpdatePanelの中に設置されたボタンコントロールによりCSVファイルをダウンロードさせるには、少し工夫が必要です。

ボタンクリック時には非同期処理のポストバックが行われますが、このポストバックの直前のタイミングをとらえて、 CSVファイルのダウンロードするページをコールしてやります。

別ページを起動するわけにもいかないので、「iframe」のタグを生成しそのURLにCSVファイルのダウンロードするページ を設定してやります。

以下に、CSVファイルのダウンロードを起動するページのソースを示します。

CSVファイルを実際にダウンロード処理するソースは以下の様になります。 ファイルの内容は例ですので適当な内容にしてあります。

TECHNICAL MASTER はじめてのASP.NET 4 プログラミング Visual Basic編【電子書籍】[ WINGSプロジェクト 土井毅 ]

価格: 2,916円
(2016/09/29 14:03時点 )

感想:0件

デル株式会社


楽天市場

2016年4月29日 (金)

VB.NET:ハンディターミナル(BHT-1300等)とのデータファイルの送受信について

以前、ハンディターミナル側から送受信を行う関数等の記事を掲載してきましたが、 ハンディターミナルの相手側としてのパソコン側のプログラムが必要になります。

パソコン側のファイル送受信用のツールがDLLの形でDENSOさんの方から提供されています。 以下の所にDENSOのURLを貼っておきますので、そちらを参照下さい。

・BHT-BASIC4.0転送ユーティリティ

このユーティリティを購入して、送受信を行うパソコンにライセンス登録が必要です。 プログラムのインストールなどは無く、必要なDLL等を実行プログラムのフォルダに登録します。 この辺りのことは購入後、取説をDENSOからダウンロードし確認してみて下さい。
■VB.NETプログラムの場合の必要なDLL

VB.NETのプログラムの実行フォルダ内に以下のDLL等が必要です。
・Bhtprtdm.dll  -- BHT-BASIC4.0 転送ユーティリティライブラリ
・Bhtprt.ini    -- BHT-BASIC4.0 転送ユーティリティライブラリ設定
・Ymodem_pd.dll -- YMODEMプロトコルライブラリ
・BHTIr_pd.dll  -- BHT-Irプロトコルライブラリ
実際の転送処理で呼出すのはBhtprtdm.dllで、その中の送受信関数(ExecProtocol)を呼出して処理をさせます。
Declare Function ExecProtocol Lib "Bhtprtdm.dll" (_
	ByVal hWnd As IntPtr, _
        ByVal Param As String, _
        ByVal FileName As System.Text.StringBuilder, _
        ByVal Protocol As Integer) As Integer
[引数]
 hWnd	 :DLLを呼び出すウィンドウハンドルを設定
 Param	 :ファイル転送の動作を制御するオプションの文字列
          (1つのファイル名と複数のオプションをスペースで区切った文字列)
 FileName:転送したパス名/ファイル名を格納
 Protocol:プロトコル番号を指定

[戻り値]
 Integer型の値で、0(Er_NOERROR)はエラー無しで、
 0以外は伝送エラー在り
 (エラー内容はDENSO提供のBASICソースを参照)

上記のほかにいろんな指定がありますが、それは各BHTの取説を見てください。
■オプションの文字列
オプション 内容 デフォルト
【伝送速度】
     +B
    
"+B9600"     9600 bps
"+B19200"   19200 bps
"+B38400"   38400 bps
"+B57600"   57600 bps
"+B115200" 115200 bps
"+B230400" 230400 bps
"+B460800" 460800 bps
YMODEM時
"+B115200"

BHT-Ir時
"+B9600"
 
【通信ポート】
 +Pn
+Pn (n = 1 ~ 99)
"+P1"
【フィールド】
 +Fn
 +F
 -F
[+Fn]の場合:"+Fa,b,c..."
 a:フィールド1桁数
 b:フィールド2桁数
 c:フィールド3桁数
 ...
[+F]の場合:既存フィールドファイルによる
  (YMODEMのみ)
 ※受信の場合はフィールドファイルを
    受信しない

[-F]の場合:フィールド指定なし(YMODEMのみ)
 
【伝送方向】
 +R
 -R
"+R" ファイル受信
"-R" ファイル送信
"-R"
【追加書込】
 +A
 -A
"+A" 既存データファイルに追加書込み
"-A" 追加書き込みしない
"-A"
【CR-LFの扱い】
 +C
 -C
"+C" CR-LFをデータとする
"-C" CR-LFをレコードの区切り
"-C"

オプション文字列の一般的な例としては以下の様になります。
送信の場合:"TEST.DAT +P5 +F16,12 -R"
受信の場合:"TEST.DAT +P5 +F16,12 +R"
この場合、YMODEMでの伝送を想定していて、 通信ポートはパソコンにUSB-COMポートを インストールした時に COM5 になったので"P5"としています。
また、フィールド指定は以下の記事のデータファイルを使っています。
・BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
■VB.NETの送受信テストプログラム

上記のオプション例を使った簡単なVB.NETのテストプログラムを以下に示します。

フォームの画面表示は以下の感じです。 送信ボタンと受信ボタンをフォームに配置しそれぞれのボタンクリックで送受信処理を行っているだけです。 受信時のオプションはフィールド指定が無い違いがあります。 24a1
■BHT-BASICの送受信テストプログラム(ハンディ側)

ハンディターミナル側の簡単な受信・送信テストプログラムを以下に示します。
■VB.NETの送受信テストプログラムの実行
送信時の画面は、以下の様にYMODEM送信のダイアログが表示されて、 件数の様な数字がカウントアップします。 24a2
送信処理後に、 TEST.DAT の存在するフォルダを確認すると  TEST.FLD ファイルが作られているのがわかります。 この TEST.FLD ファイルの内容は以下の様にフィールドの定義ファイルの様です。
* created by BHT-BASIC 4.0 Transfer Utility DLL Version 1.14
*   Copyright (C) DENSO WAVE INC. 2001-2013 all rights reserved
file	TEST.DAT
fields	16 12
受信時の画面は、以下の様な表示になります。 24a3
受信後は、ハンディから送られてくる TEST.FLD ファイルが生成される様です。 以下はその内容です。
* created by BHT
file	TEST.DAT
size	150
records	5
fields	16 12

転職を本気で考えている方向けのプログラミングスクール!【WebCampPRO】


■関連記事
BHT-BASIC:DENSOのハンディターミナルの開発言語のBHT-BASIC4.0を使ってみた
BHT-BASIC4.0:変数宣言の書き方(BHT-1300)
BHT-BASIC4.0:変数宣言の書き方その2(BHT-1300)
BHT-BASIC4.0:ユーザ定義関数について(BHT-1300)
BHT-BASIC4.0:演算子について(BHT-1300)
BHT-BASIC4.0:画面への表示について(BHT-1300)
BHT-BASIC4.0:キー入力について(BHT-1300)
BHT-BASIC4.0:数値用キー入力関数(ユーザ定義関数)について(BHT-1300)
BHT-BASIC4.0:ユーザ定義関数の値渡し・参照渡しについて(BHT-1300)
BHT-BASIC4.0:文字列を扱うユーザ定義関数について
BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその2
BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその3
BHT-BASIC4.0:TeraTermを使ってDENSOのハンディターミナルにファイル(プログラム)転送を行う方法
BHT-BASIC4.0:I/OポートとWAIT、さらにTIMERについて(BHT-1300)
BHT-BASIC4.0:データファイルの取り扱いについて(BHT-1300)
BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
BHT-BASIC4.0:データファイルの検索について(SEARCH関数)
BHT-BASIC4.0:ユーザ関数の引数の仮変数に対する代入の注意点
BHT-BASIC4.0:データファイルの削除等について(KILL、CLFILEのラッパ関数)
BHT-BASIC4.0:ファイルの存在確認関数を作ってみました
BHT-BASIC4.0:拡張関数のバイナリサーチ処理関数(BSEARCH.FN3)の使い方
BHT-BASIC4.0:拡張関数のサーチ処理関数(SEARCH.FN3)の使い方
BHT-BASIC4.0:簡単なメニュー表示・選択を行うユーザ関数について
BHT-BASIC4.0:ファイル伝送におけるXFILE命令の使い方
BHT-BASIC4.0:バーコードの読込み(バーコードスキャン)について
BHT-BASIC4.0:Bluetoothデバイスアドレス取得等について


楽天市場


.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

2016年4月 4日 (月)

VB.NET:VisualBasicで役立つ情報が載っているサイト

私自身もプログラムを組んでいて調べ物をするときには、よくGoogleで検索しています。 でもなかなかほしい情報にたどり着くことは難しいものです。 既に先人が解決していて、ネットに載せていればそれを参考にできるのですが。

さて、そんな時に最初に調べるサイトを紹介します。以下のサイトでVisualBasicでの大抵の問題は解決すると思います。

■VBレスキュー(花ちゃん)

http://hanatyan.sakura.ne.jp/

ここは初心者から中級辺りまでの情報が満載です。掲示板もありますので質問もできます。


■DOBON.NET

http://dobon.net/

ここは初心者から上級辺りまでの情報が満載ですし、ソースも完備しています。 掲示板もありますので質問もできます。


■Visual Basic 中学校

http://homepage1.nifty.com/rucio/main/main.htm

このサイトによれば 「対象者はVB初心者。特に小学生、中学生、高校生プログラマを念頭に置いています」 とのことですが、解説はVisualBasicを初めて学ぶ方にとっては非常に分かりやすいと思います。 ここは初心者から中級辺りまでの内容ですが、改めて勉強しなおすには良いサイトです。

■CodeProject

http://www.codeproject.com/

このサイトは英語なのですが、英語だとひるまずに、必要な単語を検索ボックスに入力し検索してみてください。 ほしい情報がヒットするかもしれません。 結構な情報量です。私もたまに利用させてもらっています。
デル株式会社

楽天市場

2016年4月 2日 (土)

VB.NET:アプリケーションのエントリポイント(Mainメソッド)について

アプリケーションのエントリポイントとは、そのアプリケーションが開始した時に、呼び出されるメソッドのことです。

VB.NETでは、Mainメソッドがエントリポイントですが、 WindowsフォームアプリケーションプロジェクトにはMainメソッドが見当たりません。 エントリポイントであるMainメソッドは、コンパイラによって自動的に作成されます。 以下の様にプロジェクトのプロパティ設定で「スタートアップ オブジェクト」を Form1 に 設定すれば自動でMainメソッドが生成され、その中で Form1 を生成し、表示する様になっています。

App1



しかし、 Form1 の表示前に何かをしたいことがある場合、 例えば、アプリケーションの二重起動のチェックだとか、データベースのオープン処理などがあります。 その場合には、新しいモジュールかクラスを追加し、その中に Sub Main を宣言します。 以下は Sub Main をモジュールに宣言したときの例です。
(ファイル名は MainModule.vb としました)


尚、この MainModule を有効にするには、プロジェクトのプロパティ設定で 以下の様にする必要があります。

App2


「アプリケーションフレームワークを有効にする」のチェックを外し無効にします。
無効にすることで、「スタートアップ オブジェクト」のコンボボックスに  MainModule が現れますので、それを選びます。

モジュールではなく、クラスで行う場合は以下の様になります。

このソースの例では、二重起動のチェックを行っていますが、その他、データベースのオープン等 メイン画面が表示される前までに行いたい処理を、初期処理の部分に記述できます。
デル株式会社

楽天市場