SQLの窓 イラストAC フリー素材

2015年01月15日

VB.net : コンソールに表示する位置を指定する / バッチビルドキット付き

今日、ノーマルのパソコン確認したら普通にフレームワーク入ってました。なので、どんな PC であれビルド可能だと思います。



大昔から、MS-DOS では指定位置に表示できていました。ただ、Windows になってそのような事をする必要が無くなったので廃れたような気もしますが、何か使い道があるかもしれません。

バッチファイルでこんなふうにします
@echo off
cls
locate 30,1
echo あいうえお
locate 30,2
echo かきくけこ
locate 30,3
echo さしすせそ
locate 30,4
echo たちつてと
pause
Module MyModule

' **************************
' 実行
' x座標,y座標 で指定
' **************************
Sub Main()

	' 文字列の配列
	Dim argv As String()

	Dim Pos As String()
	Dim x As Integer
	Dim y As Integer

	' コマンドラインの取得
	argv = System.Environment.GetCommandLineArgs()

	' 引数が一つの場合( 例: 5,10 )
	if argv.Length = 2 then

		Pos = (argv(1)).Split(",")
		' カンマが無い場合、y座標は 0
		if Pos.Length <> 2 then
			y = 0
		end if

		' 数値で無い場合、x座標は 0
		Try
			x = Integer.Parse(Pos(0))
		Catch
			x = 0
		End Try

		' 数値で無い場合、y座標は 0
		Try
			y = Integer.Parse(Pos(1))
		Catch
			y = 0
		End Try

		' 位置設定
		Console.CursorLeft = x
		Console.CursorTop = y

	end if

End Sub

End Module


関連する記事


posted by at 2015-01-15 13:00 | Comment(0) | VB.net | このブログの読者になる | 更新情報をチェックする

2015年01月11日

VB.net : Win32 API でHTTPダウンロード / バッチビルドキット付き

バソコンに %windir%\Microsoft.NET\Framework\v4.0.30319\vbc.exe があれば、exe をビルドできます



Win32 API 的には、URLDownloadToFile を使用するだけです。経験から言って、Framework を使用するよりは堅実なような気もします。
Imports System.IO	' Path
Imports System.Diagnostics	' Process
Imports System.Runtime.InteropServices	' DllImport

Module MyModule

<DllImport("urlmon.dll", CharSet:=CharSet.Unicode)> _
Private Function URLDownloadToFile( _
  ByVal pCaller As Integer, _
  ByVal szURL As String, _
  ByVal szFileName As String, _
  ByVal dwReserved As Integer, _
  ByVal lpfnCB As Integer _
) As Integer
End Function

' ********************************************************
' Win32 API でHTTPダウンロード
' 引数 : URL "ローカルパス" [s]
' s は省略可能で、指定するとダウンロード後にエクスプローラ
' を開きません
' (引数の例)
' http://lightbox.on.coocan.jp/download/WinOfSql102.zip .\WinOfSql102.zip
' ********************************************************
Sub Main()

	' 文字列の配列
	Dim argv As String()

	' コマンドラインの取得
	argv = System.Environment.GetCommandLineArgs()

	Dim ret As Integer
	Dim str As String

	' 引数が二つ以上の場合
	If argv.Length >= 3 Then
		' API の呼び出し
		ret = URLDownloadToFile( 0, argv(1), argv(2), 0, 0 )
		if ret = 0 then
			str = Path.GetFullPath( argv(2) )
			str = Path.GetDirectoryName( str )
			if argv.Length = 4 then
				if  argv(3) = "s" then
				else
					' 第3引数に s を指定しない場合は
					'  エクスプローラを開く
					Process.Start("explorer.exe","/e,"+str)
				end if
			else
				' 第3引数に s を指定しない場合は]
				' エクスプローラを開く
				Process.Start("explorer.exe","/e,"+str)
			end if
		end if
	end if

End Sub

End Module

' 古い vb の定義
' Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
' "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
' szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
' ▼
' http://support.microsoft.com/kb/244757/ja

このコードでは、ダウンロードした後、エクスプローラでダウンロードしたフォルダを開きます。


関連する記事


posted by at 2015-01-11 20:34 | Comment(0) | VB.net | このブログの読者になる | 更新情報をチェックする

2014年12月25日

画面いっぱいに開く cmdex.exe

▼ VB.net ビルド用コマンドプロンプトセット


Imports System
Imports System.Diagnostics

Module MyModule

' ******************
' * 実行
' ******************
Sub Main(ByVal CmdArgs() As String)

	Dim startInfo As New ProcessStartInfo("cmd.exe")
	startInfo.WindowStyle = ProcessWindowStyle.Maximized

	Dim w As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
	Dim cols As String = ""

	if w >= 1024 then
		cols = "120"
	end if
	if w >= 1152 then
		cols = "135"
	end if
	if w >= 1280 then
		cols = "150"
	end if

	Dim strArg As String = "/k mode con: cols=" & cols
	Dim idx As Integer = 0

	if CmdArgs.GetUpperBound(0) <> -1 then
		strArg &= " & "
		For idx = 0 to CmdArgs.GetUpperBound(0)
			strArg &= " " & CmdArgs(idx)
		Next
	end if
	startInfo.Arguments = strArg

	Process.Start(startInfo)

End Sub

End Module

ビルドしたものを使うのが嫌な人は、フレームワークがインストールされておれば、簡単にビルドできます。

__buildPath.txt
; Framework 4.0
%windir%\Microsoft.NET\Framework\v4.0.30319

; Framework 2.0
%windir%\Microsoft.NET\Framework\v2.0.50727
;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin

; 行先頭にセミコロンはコメントです。
; 記述されて有効なパスは全て読み込まれます
; なにも無い行は無視します


VBC_BUILD.wsf
<JOB>
<RESOURCE id="commandList">
<![CDATA[
mode con: cols=120
set PATH=$BIN;%PATH%
prompt vb.net$G
title Microsoft Framework アプリケーションのビルド
]]>
</RESOURCE>

<OBJECT id="WshShell" progid="WScript.Shell" />
<OBJECT id="Fso" progid="Scripting.FileSystemObject" />

<SCRIPT language=VBScript>
' ***********************************************
' 処理開始( コマンドラインからビルドする為のスクリプトです )
' ***********************************************

strPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strPath )
Set obj = obj.ParentFolder
WshShell.CurrentDirectory = obj.Path

Set objHandle = Fso.OpenTextFile( obj.Path & "\__buildPath.txt", 1 )
Do While not objHandle.AtEndOfStream
	sLine = objHandle.ReadLine
	if Left( sLine, 1 ) <> ";" and sLine <> "" then
		if sPath <> "" then
			sPath = sPath & ";"
		end if
		sPath = sPath & sLine
	end if
Loop
objHandle.Close

aData = Split( GetInline( "commandList" ), vbCrLf )
strCommand = "cmd.exe /k " & aData(0)
For I = 1 to Ubound( aData )
	if instr( aData(I), "$BIN" ) > 0 then
		aData(I) = Replace( aData(I), "$BIN", sPath )
	end if
	strCommand = strCommand & "&" & aData(I)
Next
Call WshShell.Run( strCommand, 3 )

' ***********************************************
' 関数
' ***********************************************
Function GetInline( strName )

	GetInline = RegTrim( getResource( strName ) ) & vbCrLf

End Function
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[ \s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[ \s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
</SCRIPT>
</JOB>


関連する記事


タグ:VB.NET
posted by at 2014-12-25 02:30 | VB.net | このブログの読者になる | 更新情報をチェックする

2010年06月30日

VB.netからRundll32で呼び出されるdllの使い方/サンプル:printui.dll/コマンドでプリンタの全てをコントロール


VB.net : printui.dll を LoadLibrary 経由で呼び出してデフォルトのプリンタを設定する
Printui 「ファイル名を指定して実行」から 以下のコマンドで表示されます rundll32.exe printui.dll,PrintUIEntry /? 外部実行として呼び出しても良いですが、Microsoft のドキュメントにある インターフェイス仕様に基づいて利用するのがスマートです。 一番昔の C++ で呼び出すのはとても簡単なのですが、VB.net でやるには いろいろ面倒です。ですが、パターンはこれ一つなので利用価値は高いです
posted by at 2010-06-30 00:00 | VB.net | このブログの読者になる | 更新情報をチェックする

2010年06月04日

VB.net:StringからChar()への変換とSplit

VB という言語はだいたいにおいて勝手に融通の効く言語ですが、
最初に初めて String オブジェクトの Split メソッドを使おう
とした時に、引数が Char() だったので、面倒に思った記憶が
あります。

ですが。

いろいろ試してみると妙な事が解りました。
Module MyModule

' ********************************************************
' String => Char と Split メソッド
' ※ 区切り文字は、カンマとスペースとタブ
' ********************************************************
Sub Main()

	' Char 配列
	Dim c As Char() = Nothing

	' データセット方法1( Char 明示 )
	c = New Char() { ","c, " "c, "	"c }
	delimTest(c)

	' データセット方法1-2
	c = New Char() { ",", " ", "	" }
	delimTest(c)

	' データセット方法2
	c = New Char() { c(0), c(1), c(2) }
	delimTest(c)

	' データセット方法3
	Dim delim As String = ", 	"
	c = delim.ToCharArray()
	delimTest(c)

	' データセット方法4( ToCharArray は何だったのか )
	c = delim
	delimTest(c)

	' データセット方法5( 何故か正しく動く )
	delimTest(delim)

	' 直接は動かない( たぶん呼び出しルールの違い )
	' ※ 先頭文字しか使われない
	Console.WriteLine(("a,b c	d,e,f,g,x,i,j".Split(delim)).Length)

End Sub

Sub delimTest( c As Char() ) 

	Dim str As String = "a,b c	d,e,f,g,x,i,j"

	Dim result As String() = str.Split(c)

	For Each obj As String In result

		' 読み飛ばし条件
		if obj = "e" then
			Continue For
		end if
		' ループ終了条件
		if obj = "x" then
			Exit For
		end if

		' 処理
		Console.WriteLine( obj )

	Next

End Sub

End Module
VB なので、' データセット方法3 でいいとは思いますが、
他の結果のせいで、少し気持ち悪い気がします。


posted by at 2010-06-04 00:29 | VB.net | このブログの読者になる | 更新情報をチェックする

2009年10月29日

VB.NET:伝票入力用の参照ダイアログとDataGridViewの列内のボタン



Lboxgrid_den_btn


実際は、明細部の上部にヘッダ情報として、伝票番号と得意先と伝票日付が付加され、得意先の参照用
として検索用のダイアログを実装します。それと同じ目的で、明細部の行単位で商品コードをダイアログで
参照します。それぞれ、ダイアログで参照しなくてもコードが解っている場合は、エンターキーで名称等の
情報をDB より取得して入力を完成させて行きます。

その際必要な部品としての情報が以下になります。


1) VB.net : フォームの「閉じるボタン」を無効にする
2) VB.net : LboxGrid+DB : 簡単な問い合わせ
3) VB.net : LboxGrid : 列にボタンを実装する


また、これ以外にも伝票番号を取得する処理として、明示的にトランザクションを使用します。
( 伝票番号取得用に専用テーブルを使用します )
以下は学生にまとめさせたものです。

VB.NET SQLServerでのトランザクション処理




posted by at 2009-10-29 21:01 | VB.net | このブログの読者になる | 更新情報をチェックする

VB.net : SQLExpress( SQLServer ) : SMOによるバックアップ


VB.net : SQLExpress(SQLServer) : SQL-DMO と同等の SMO によるバックアップ


SQL-DMO 使った事が無いと、とても解りにくいでしょうね。
SQL-DMO からも拡張されているだろうし、特に、Bulkcopy のエクスポートが無いみたいなんですけど・・・
例によって、Microsoft のサイトのマニュアルは、2008 と 2005 があって、必要なものは両方から
探さないと見当たらないし( どちらか片方にしか無い )

そもそも、SQL-DMO の時点で使ってる人居たんでしょうか。
SQL でやったほうが直感的で簡単てすし。

とは言うものの、あるものは使ってみたいと言う好奇心には逆らえませんでした。






posted by at 2009-10-29 17:40 | VB.net | このブログの読者になる | 更新情報をチェックする

2009年10月27日

VB.net : SQLExpress(SQLServer) : COMを使用した旧式コードの利用(つまり、VB.net 内からしょうみの ADO のフィールドオブジェクト使って更新する)


VB.net : SQLExpress : COM を使用した旧式コードの利用


こんな選択肢は無理にする必要も無いのですが、まだ世の中には VC++ で作成された COM の資産がたくさんあるので、チャンスがある限りテストしておくと、少なくともウチの学生達が利用できるかも・・・と思ってます。

前期に Oracle ばっかやってたので、後期に SQLServer を集中してます。なんだかんだ言って、Oracle の次に書く事が多いのは、Microsft 純正だというせいもありますが、一般には理解しがたい裾野の広さはハンパではありません > SQLServer 使わないですけどね。



posted by at 2009-10-27 21:46 | VB.net | このブログの読者になる | 更新情報をチェックする

2009年10月25日

VB.net : SQLExpress(SQLServer) : SqlClient を使用した基本的な DB アクセス


VB.net : SQLExpress : SqlClient を使用した基本的な DB アクセス

SqlClient を使うメリットは、イザという時に SQLServer の管理機能も同時に使えるところです。本来このコードは、クラス化していたものをバッチ処理用に分解したものなので、少し無駄に思える機能が残っています。

入力画面のある DB アプリケーションでは、Reader を何度も使いまわしするわけで、プログラマのミスを吸収できるように、開いている Reader を使う前に閉じるようにしています。このような処理は結構重要で、最適化すべき処理では問題ありますが、現実問題としてデバッグやトラブル対応にかける時間は可能な限り小さくする必要があります。



posted by at 2009-10-25 22:13 | VB.net | このブログの読者になる | 更新情報をチェックする

2009年10月19日

VB.NET:伝票入力に最適化したDataGridView



伝票入力に最適化した DataGridView



2009/10/22 更新
今日学生に中身を作るように指示を出しながら、イベントの受け取り方の細かい
チューニングをしました。やはり、多少無理でも Enter キーを受け取ってやらないと、
純正の TAB + CellValidating ではラチあかない事を確認しました。
どうせ更新ボタンでフルチェックするし、セル単位でValidate で引っかかって
身動きとれないよりスムーズに入力させといて、画面単位の処理したほうが、
よっぽど昔のオンラインみたくやりやすいです。



以前の情報
次回は、カラムにボタンを実装して商品を参照させる予定ですが、まずキー操作重視で
構築してあります。こだわらなければ、どの言語でも DataGrid は簡単で便利なのですが、
開発に使うにはいろいろチューニングが必要になります。

ここでは、Enter キーによる次のフィールドの移動を実装していますが、その処理自体は
LboxGrid に実装しているものです(EnterToTab)。

今回整備していて、Form に他のコントロールが無い場合のセルの初期フォーカスが
ちょっと手間取りましたが、他は結構直感的に拡張しています。


Lboxgrid_den



posted by at 2009-10-19 18:43 | VB.net | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX