2009年07月16日


環境変数をレジストリで変更してシステムに通知する

PATH 環境変数の変更に使いました

↓定義
Const HWND_BROADCAST = &HFFFF
Const WM_WININICHANGE = &H1A
Const SMTO_ABORTIFHUNG = &H2

<DllImport("User32.dll")> _
 Private Shared Function SendMessageTimeout( _
  ByVal hWnd As Integer, _
  ByVal msg As Integer, _
  ByVal wParam As Integer, _
  ByVal lParam As String, _
  ByVal fuFlags As Integer, _
  ByVal uTimeout As Integer, _
  ByRef lpdwResult As System.IntPtr) As Integer
End Function
定数は、C++ のヘッダファイルより取得しています

↓呼び出し
Dim rdata As Integer = 0

SendMessageTimeout(HWND_BROADCAST, WM_WININICHANGE, 0, _
  "Environment", SMTO_ABORTIFHUNG, 5000, rdata)

■ 関連するページ
環境変数の変更をシステムに通知する方法 : Microsoft サポートオンライン
【VB.NET】PATH 環境変数エディタ 


posted by at 2009-07-16 18:18 | VB.NET Framework2.0 | このブログの読者になる | 更新情報をチェックする

2009年07月14日


LboxGrid : チェックした CSV 行データを削除する

読み込んだ CSV 行を保存する為に、ArrayList( コレクション ) を使用しています。
ArrayList は、Add で追加し、Item( nIndex ) で参照します。

チェックボックスの追加部分は、LboxGrid に実装していますので、Add メソッドで
追加し、そのチェックボックス列を使えるようにする為に全体の ReadOnly を False
にし、列定義が終わってから列単位に ReadOnly を設定します

Form1_Load は、削除後再度呼び出す事を想定して、グリッドと配列に対しての初期処理
がなされており、sender と e が使用されていないので Form1_Load(Nothing, Nothing)
で呼び出し可能です。
Imports System.IO
Imports System.Text

Public Class Form1

	Private aList As New ArrayList()

	Private Sub Form1_Load(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles MyBase.Load

		' コレクションを初期化
		aList.Clear()

		' クリッドを初期化( 他から呼び出す為 )
		Me.LboxGrid1.Reset()

		' まず全てのカラムを編者可に変更
		Me.LboxGrid1.ReadOnly = False

		Me.LboxGrid1.AddColumn("CHECK", "削除", lightbox.LboxColumnType.LboxColumnType_CheckBox)
		Me.LboxGrid1.AddColumn("CODE", "社員コード")
		Me.LboxGrid1.AddColumn("NAME", "氏名")
		Me.LboxGrid1.AddColumn("KANA", "フリガナ")

		' 列作成後、必要無いカラムを編集不可にする
		Me.LboxGrid1.Columns(1).ReadOnly = True
		Me.LboxGrid1.Columns(2).ReadOnly = True
		Me.LboxGrid1.Columns(3).ReadOnly = True

		Try
			' SHIFT_JIS 
			Dim ReadFile As StreamReader = _
			 New StreamReader("C:\TMP\社員マスタ.csv", Encoding.GetEncoding(932))

			' SHIFT_JIS で読み込み
			Dim LineText As String
			Dim aData As String()
			Dim sDelimiter As String = ","
			Do While Not ReadFile.EndOfStream
				' 次行読み込み
				LineText = ReadFile.ReadLine()

				' コレクションに追加
				aList.Add(LineText)

				' 列用に分解
				aData = LineText.Split(sDelimiter)

				' 行追加
				LboxGrid1.AddRow()

				' セルデータセット
				LboxGrid1.SetColumnText("CODE", aData(0))
				LboxGrid1.SetColumnText("NAME", aData(1))
				LboxGrid1.SetColumnText("KANA", aData(2))

			Loop

			' 終了処理
			ReadFile.Close()
			ReadFile.Dispose()

			' ex が必要無ければ e As Exception を書かなくて良い
		Catch ex As Exception
			Console.WriteLine(ex.Message)
		End Try

	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles Button1.Click

		' 書き込み用ストリーム
		Dim WriteFile As New System.IO.StreamWriter("C:\TMP\社員マスタ.csv", False, _
		   System.Text.Encoding.GetEncoding(932))

		' サーチインデックス初期化
		Me.LboxGrid1.SetCurrentRow()

		' 行がなくなるまでループ
		Do While (Me.LboxGrid1.FindNextRow())

			' チェックしていなものを書き出す
			If Not CType(Me.LboxGrid1.GetColumnValue("CHECK"), Boolean) Then
				' 内部行変数 nCurrentRow を使用する
				WriteFile.WriteLine(CType(aList.Item(Me.LboxGrid1.nCurrentRow), String))
			End If

		Loop

		' 閉じる
		WriteFile.Close()

		' グリッドを初期化
		Form1_Load(Nothing, Nothing)

	End Sub

End Class



posted by at 2009-07-14 15:48 | VB.NET Framework2.0 | このブログの読者になる | 更新情報をチェックする

2009年07月13日


LboxGrid : チェックボックス列の使用

セルの編集の不可、可能の設定は行毎、cell 毎に可能です。

Me.LboxGrid1.Rows(0).ReadOnly = True
Me.LboxGrid1.Item(2, 2).ReadOnly = False
( これらの場合は、行を追加してからセットします )

' *****************************************************
' 初期化
' *****************************************************
Private Sub Form1_Load(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles MyBase.Load

	' まず全てのカラムを編者可に変更
	Me.LboxGrid1.ReadOnly = False

	Me.LboxGrid1.AddColumn("CHECK", "削除", lightbox.LboxColumnType.LboxColumnType_CheckBox)
	Me.LboxGrid1.AddColumn("CODE", "社員コード")
	Me.LboxGrid1.AddColumn("NAME", "氏名")
	Me.LboxGrid1.AddColumn("KANA", "フリガナ")

	' 列作成後、必要無いカラムを編集不可にする
	Me.LboxGrid1.Columns(1).ReadOnly = True
	Me.LboxGrid1.Columns(2).ReadOnly = True
	Me.LboxGrid1.Columns(3).ReadOnly = True

	Try
		' SHIFT_JIS 
		Dim ReadFile As StreamReader = _
		 New StreamReader("C:\TMP\社員マスタ.csv", Encoding.GetEncoding(932))

		' SHIFT_JIS で読み込み
		Dim LineText As String
		Dim aData As String()
		Dim sDelimiter As String = ","
		Do While Not ReadFile.EndOfStream
			' 次行読み込み
			LineText = ReadFile.ReadLine()
			aData = LineText.Split(sDelimiter)

			LboxGrid1.AddRow()
			LboxGrid1.SetColumnText("CODE", aData(0))
			LboxGrid1.SetColumnText("NAME", aData(1))
			LboxGrid1.SetColumnText("KANA", aData(2))

		Loop

		' 終了処理
		ReadFile.Close()
		ReadFile.Dispose()

		' ex が必要無ければ e As Exception を書かなくて良い
	Catch ex As Exception
		Console.WriteLine(ex.Message)
	End Try


End Sub

' *****************************************************
' チェクボックス状態の取得
' *****************************************************
Private Sub チェックボックス状態サーチ_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles チェックボックス状態サーチ.Click

	' サーチインデックス初期化
	Me.LboxGrid1.SetCurrentRow()

	' 行がなくなるまでループ
	Do While (Me.LboxGrid1.FindNextRow())

		If CType(Me.LboxGrid1.GetColumnValue("CHECK"), Boolean) Then
			MessageBox.Show(Me.LboxGrid1.GetColumnText("NAME"))

		End If

	Loop


End Sub



posted by at 2009-07-13 16:05 | VB.NET LboxGrid | このブログの読者になる | 更新情報をチェックする

アップロードされたファイルを縮小して保存

$_FILES に格納されているアップロードが成功した一時ファイルの名前より、それを加工して実際のアップロードディレクトリに格納しています

( ※ 必要ならば、回転も行います )
// *****************************************
// アップロードされたファイルを縮小して保存
// *****************************************
function ImageConvert() {

	global $image_dir,$err_message;

	$err_message = "";

	$upload = $image_dir ."/";
	$_POST['prefix'] = trim($_POST['prefix']);
	if ( $_POST['prefix'] != '' ) {
		$upload .= $_POST['prefix'] ."-";
	}
	$upload .= $_FILES['MyUploadFile']['name'];
 
	# テンポラリディレクトリにある実際のファイル
	$file	= $_FILES['MyUploadFile']['tmp_name'];
 
	# ファイルの属性等を取得
	$target	= getimagesize( $file );
 
	# 現在のサイズ
	if ( $_POST['role'] == '1' ) {
		$width	= $target[1];
		$height	= $target[0];
	}
	else {
		$width	= $target[0];
		$height	= $target[1];
	}

	# 横
	if ( $width > $height ) {
		if ( $width <= 500 ) {
			move_uploaded_file(
				$_FILES['MyUploadFile']['tmp_name'], $upload );
			return;
		}
		$width_new	= 500;
	}
	# 縦
	else {
		if ( $width <= 400 ) {
			move_uploaded_file(
				$_FILES['MyUploadFile']['tmp_name'], $upload );
			return;
		}
		$width_new	= 400;
	}
 
	$height_new = (int)( ($height/$width)*$width_new );
 
	# JPEG

	# 元のファイルのハンドル
	$jpeg		= imagecreatefromjpeg ( $file );
	if ( $_POST['role'] == '1' ) {
		$jpeg = imagerotate($jpeg, -90, 0);
	}
	if ( $_POST['role'] == '2' ) {
		$jpeg = imagerotate($jpeg, 90, 0);
	}
	# 新しいイメージ
	$jpeg_new = imagecreatetruecolor( $width_new, $height_new );
	# サイズ変更して新しいイメージへ転送
	$ret = imagecopyresampled(
		$jpeg_new,
		$jpeg,
		0,
		0,
		0,
		0,
		$width_new,
		$height_new,
		$width,
		$height
	);

	if ( !$ret ) {
		$err_message = "サイズ変更に失敗しました";
		return;
	}

	# JPEG ファイルとして、クオリティ 75 で出力
	$ret = imagejpeg ( $jpeg_new, $upload, 75);
	if ( !$ret ) {
		$err_message = "ファイル作成に失敗しました";
		return;
	}

}





posted by at 2009-07-13 15:16 | PHP | このブログの読者になる | 更新情報をチェックする

2009年07月12日


VBScript の Split

VBScript では、動的に配列作るのは少しだけ面倒なので、
Split で作成するのが便利です
str = "A,B,C"
aData = Split(str, ",")

result = ""

For I = 0 To Ubound(aData)
	If result <> "" Then
		result = result & ","
	End If
	result = result & aData(I)

Next

MsgBox( result )


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

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

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

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

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


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

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

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

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

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