テキスト広告:Amazon Primeday

日曜日, 3月 14, 2010

[JavaScript]XMLHttpRequestの使用方法

▼質問
JavaScriptを使って簡単にWEBサーバの状態を監視したいんだ。

何かいい方法はないか教えてくれないか!

▼回答
それなら、XMLHttpRequestを使うとできると思うよ。

簡単な手順とサンプルを教えてあげるから参考にしてくれ!

① XMLHttpRequestオブジェクト生成(IE用とそれ以外で処理分岐)
② 非同期通信の時は、onreadystatechangeイベントの登録
③ openメソッドを使って、サーバへのリクエスト方法を指定
④ sendメソッドを使って、サーバへのリクエストする(データ送信)
⑤ readyStateプロパティを使ってサーバからデータを受信できたか調べる
⑥ statusプロパティを使って正常に取得できたか調べる
⑦ responseText・responseXMLプロパティを使って受信データを処理する

同期(Sync)通信



function send_sync() {
var now = new Date();
var url = "test.jsp?NOW_DATE=" + now;
var ret = false;
var request = null;

if ( window.XMLHttpRequest ) {
// Mozilla, Safari, etc
request = new XMLHttpRequest();
}
else if ( window.ActiveXObject ) {
// IE
try {
request = new ActiveXObject( "Msxml2.XMLHTTP" );
} catch (e) {
try {
request = new ActiveXObject( "Microsoft.XMLHTTP" );
} catch (e) {}
}
}
if ( !request ) {
alert( 'Giving up :( Cannot create an XMLHTTP instance' );
return;
}
request.open( "POST", url, false );
request.send("");
document.getElementById( "request_readyState" ).innerHTML = request.readyState;
document.getElementById( "request_status" ).innerHTML = request.status;
if ( (request.readyState == 4) && (request.status == 200) ) {
request_Headers.innerHTML = request.getAllResponseHeaders();
document.getElementById( "result_post" ).innerHTML = "正常";
}
else {
document.getElementById( "result_post" ).innerHTML = "異常";
}
}



非同期(Async)通信



function send_async() {
var now = new Date();
var url = "test.jsp?NOW_DATE=" + now;
var ret = false;
var request = null;

if ( window.XMLHttpRequest ) {
// Mozilla, Safari, etc
request = new XMLHttpRequest();
}
else if ( window.ActiveXObject ) {
// IE
try {
request = new ActiveXObject( "Msxml2.XMLHTTP" );
} catch (e) {
try {
request = new ActiveXObject( "Microsoft.XMLHTTP" );
} catch (e) {}
}
}
if ( !request ) {
alert( 'Giving up :( Cannot create an XMLHTTP instance' );
return;
}
request.onreadystatechange = function() {
document.getElementById( "request_readyState" ).innerHTML = request.readyState;
if ( request.readyState == 4 ) {
document.getElementById( "request_status" ).innerHTML = request.status;
if ( request.status == 200 ) {
request_Headers.innerHTML = request.getAllResponseHeaders();
document.getElementById( "result_post" ).innerHTML = "正常";
}
else {
document.getElementById( "result_post" ).innerHTML = "異常";
}
}
}
request.open( "POST", url, true );
request.send("");
}



出力



結果:<div id="request_result"></div>
readyState:<div id="request_readyState"></div>
status:<div id="request_status"></div>
ResponseHeaders:<div id="request_Headers"></div>




■参考サイト
IEのonreadystatechangeイベントハンドラは、1回しか反応しないんでしょうか? - Yahoo!知恵袋

木曜日, 3月 11, 2010

[Excel]相対位置にある合計範囲をコピーでリンク

▼質問
ある列のデータ範囲に相対位置で合計したい範囲が12点づつあるんだ。

その合計だけをあるセルに一列で並べたいんだ。

どうやったらできるか教えてくれ!!

▼回答
OFFSET関数とROW関数で実現できるよ!

E列に12点づつ合計したいものがあるとする。

その合計をA1からリストすると次の様になる。

A1=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
A2=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
A3=SUM(OFFSET($E$1,12*(ROW()-1),0*1,12,1))
:
:

A1だけコピぺして後はセルのコピーで簡単にできるよ!!

金曜日, 2月 26, 2010

[Java]JSPでサーバーOSの判定

▼質問
JSPファイルが文字化けするんだ。

Windowsで開発している環境では文字化けの対応をしたんだが

Linuxで動かすと文字化けしてしまうんだ。

そこで、JSPでサーバーOSの判定をして処理を分けたいんだ。

どうしたら、サーバーのOSを判定できるか教えてくれないか?

▼回答
次の様にやれば判定は可能だよ!

参考にしてくれ!!



if ( System.getProperty( "os.name" ).toLowerCase().indexOf("win") > -1 ) {
// Windows
}
else {
// Windows以外
}

日曜日, 2月 21, 2010

[JavaScript]ブラウザの閉じるボタン([×]ボタン)

▼質問
ブラウザの閉じるボタン([×]ボタン)を押されても

閉じない方法(キャンセルする方法)はないのかな?

▼回答
閉じない方法(キャンセルする方法)はないけど

閉じる前に自分のウィンドウを出し直す方法で

閉じないようにすることはできるよ。

サンプルを作ってみたから参考にしてくれ!!

CloseTest.htmlファイルを作成する。



<html>
<head>
<script language="javascript">
<!--
var flag = true;
-->
</script>
</head>
<body onBeforeUnload="if ( flag ) alert( 'ブラウザの[×]ボタンでは、閉じることはできません。\n[閉じる]ボタンを使用してください。' );" onUnload="if ( flag ) window.open( 'CloseTest.html' );">
<input type="button" value="閉じる" onClick="flag = false; window.close();">
</body>
</html>

火曜日, 2月 09, 2010

[VBA]IADsでの削除方法

▼質問
文字列で扱われている情報を削除したいんだ。

次ぎ様にしたんだがうまく削除されないんだ。

IADs.PutEx ADS_PROPERTY_DELETE, PropertyItem, vbNullString

どうしてかわかるかな?

▼回答
次の様にしていたらどうかな?

IADs.PutEx ADS_PROPERTY_CLEAR, PropertyItem, vbNullString

月曜日, 2月 01, 2010

[VBA]IADsで「オートメーション エラーです。エラーを特定できません」のエラーがでる

▼質問
Active Directory(Active DS Type Libray)のPutメソッドを使って

下記の関数を作ったら次のエラーが出る。



Private Sub SetIADsValue(ByVal IADs As Object,
ByVal PropertyItem As String,
ByVal PropertyValue As String)

On Error GoTo doError

IADs.Put PropertyItem, PropertyValue

Exit Sub

doError:
Debug.Print (Err.Description & "(" & Err.Number & ")")
End Sub





「オートメーション エラーです。エラーを特定できません (-2147467259)」

どうしてなんだ。

▼回答
PutメソッドのPropertyValue値の型がVariantじゃないと出るエラーなんだ。

IADs.Put PropertyItem, PropertyValue

だから、次の様にしないといけないんだ。

Private Sub SetIADsValue(ByVal IADs As Object, ByVal PropertyItem As String, ByVal PropertyValue As Variant)

木曜日, 1月 21, 2010

Active Directoryメモ

■OU:組織単位(Organizational Unit)
■Active Directoryオブジェクト:
ユーザー・オブジェクト、グループ・オブジェクト、コンピュータ・オブジェクト
■識別名(DN):
/O=Internet/DC=COM/DC=Microsoft/CN=Users/CN=James Smith
このDNは、Microsoft.comドメイン内のJames Smithユーザーオブジェクトを識別。
■O:Organization
■DC:Domain Component
■CN:Common Name
■CN=Users:Usersコンテナ
■CN=Computers:Computersコンテナ
■相対識別名(RDN):
/O=Internet/DC=COM/DC=Microsoft/CN=Users/CN=James Smith
CN=James SmithがJames SmithユーザーオブジェクトのRDN。親オブジェクトのRDNはCN=Users。
■GUID(Globally Unique Identifier):一意性が保証された 128 ビットの番号
■ユーザープリンシパル名(UPN):
ユーザー名およびユーザーオブジェクトの所属先ドメインツリーのDSN名を"略記"した名前。
microsoft.comツリー内のユーザーJames SmithのUPNは、JamesS@Microsoft.comなどとなる。
■ADSI(Active Directory Service Interfaces):
ユーザーがLDAP通信の詳細を意識せずにActive Directoryにアクセスできるようになるシンプルかつ
強力なオブジェクト指向インターフェイスを提供するAPI。


■参考サイト
Active Directory 技術概要
スクリプト一覧 : Active Directory
Active Directoryオブジェクトの識別名(DN)とは - @IT
csvdeコマンド - 管理者必見! ネットワーク・コマンド集:ITpro

木曜日, 1月 14, 2010

[JavaScript]disabledが反映しない

▼質問
ボタン操作で処理の長いものがあった時に、他のボタンなどが操作されないように

全てのコントロールをdisabledで操作不可状態にしようとしたんだけど・・・。

うまく反映しない時があるんだ。

どうしてかわかるかな?!

▼回答
setTimeout関数を使わないと駄目みたいなんだ。

そのやり方を次に示しておくから参考にしてくれ!!




function allDisabled( flag )
{

with ( document.フォーム名 ) {
for ( var i = 0 ; i < elements.length ; i++ ) {
elements[i].disabled = flag;
}
}

}

■ボタンから呼出す関数
function doMainProc()
{

document.body.style.cursor = "wait";

// disabled設定処理
allDisabled( true );

var n = setTimeout( "doSubMainProc();", 1 );

}
function doSubMainProc()
{

// 処理を記述

clearTimeout( "doSubMainProc();" );

document.body.style.cursor = "default";

// disabled設定処理
allDisabled( false );

}




■参考サイト
ボタンの非表示

水曜日, 1月 13, 2010

[JavaScript]アクセスが拒否されました

▼質問
JavaScriptで「アクセスが拒否されました。」のエラーメッセージが出る。

どうしてだ!

▼回答
イベント処理を確認してみてくれ!

二つのイベントを使って同じ関数を使っていないか調べてみてくれ!!

例えば、下記のような感じで。

onKeyPress="関数1()" onKeyUp="関数1()"

もしかすると、その関数で処理が衝突しているかもしれない!?

onLoad ページがロードされた時に発生。
onUnload ページがアンロード(他ページ移動時に発生)された時に発生。
onAbort イメージの読込みが中断された時に発生。
onError 読込みが失敗した時に発生。
onMove ウィンドウを移動した時に発生。
onResize ウィンドウがリサイズされた時に発生。
onDragDrop ファイルなどがドラッグ&ドロップされた時に発生。
onFocus フォーカスを得た時に発生。
onBlur フォーカスを失った時に発生。
onSubmit サブミットボタンが押された時に発生。
onReset リセットボタンが押された時に発生。
onClick クリックされた時に発生。
onDblClick ダブルクリックされた時に発生。
onKeyDown キーが押された時に発生。
onKeyPress キーが押されて、離れた時に発生。
onKeyUp キーが離れた時に発生。
onMouseDown マウスボタンが押された時に発生。
onMouseUp マウスボタンが離された時に発生。
onMouseOver マウスカーソルが上に来た時に発生。
onMouseOut マウスが離れた時に発生。
onMouseMove マウスが移動した時に発生。
onChange フォームの内容が変更され、フォーカスを失った時に発生。
onSelect テキストが選択された時に発生。

金曜日, 1月 01, 2010

[JavaScript]加算日付取得

▼質問
JavaScriptにVBのDateAdd関数みたいな加算日付を取得する関数はないの?

▼回答
ないよ!

同じ動作をする関数を作成したから参考にしてくれ!



function DateAdd( interval, number, date )
{
var wDate = new Date( date );
var time = 0;

try {
switch ( interval ) {
case "yyyy":
wDate = new Date( wDate.getFullYear()+number, wDate.getMonth(), wDate.getDate(), wDate.getHours(), wDate.getMinutes(), wDate.getSeconds() );
break;
case "q":
wDate = new Date( wDate.getFullYear(), wDate.getMonth()+number*3, wDate.getDate(), wDate.getHours(), wDate.getMinutes(), wDate.getSeconds() );
break;
case "m":
wDate = new Date( wDate.getFullYear(), wDate.getMonth()+number, wDate.getDate(), wDate.getHours(), wDate.getMinutes(), wDate.getSeconds() );
var compDate = new Date( wDate.getFullYear(), wDate.getMonth()+number, 1, wDate.getHours(), wDate.getMinutes(), wDate.getSeconds() );
if ( wDate.getMonth() != compDate.getMonth() ) {
wDate.setDate( 1 );
wDate.setTime( wDate.getTime() - (24*60*60*1000) );
}
break;
case "y":
case "d":
case "w":
wDate = new Date( wDate.getFullYear(), wDate.getMonth(), wDate.getDate()+number, wDate.getHours(), wDate.getMinutes(), wDate.getSeconds() );
break;
case "ww":
wDate = new Date( wDate.getFullYear(), wDate.getMonth(), wDate.getDate()+number*7, wDate.getHours(), wDate.getMinutes(), wDate.getSeconds() );
break;
case "h":
wDate = new Date( wDate.getFullYear(), wDate.getMonth(), wDate.getDate(), wDate.getHours()+number, wDate.getMinutes(), wDate.getSeconds() );
break;
case "n":
wDate = new Date( wDate.getFullYear(), wDate.getMonth(), wDate.getDate(), wDate.getHours(), wDate.getMinutes()+number, wDate.getSeconds() );
break;
case "s":
wDate = new Date( wDate.getFullYear(), wDate.getMonth(), wDate.getDate(), wDate.getHours(), wDate.getMinutes(), wDate.getSeconds()+number );
break;
default:
}
} catch ( e ) {
return date;
}

wDate.setTime( wDate.getTime() + time );

return wDate;
}



■参考サイト
JavaScript による日付・時刻・時間の計算・演算のまとめ - hoge256ブログ
DateAdd 関数
javascriptで日付を加算して表示させるサンプル - 教えて!goo
DateAdd 関数 | VBScript関数リファレンス

金曜日, 12月 18, 2009

[JavaScript]引数が無効です。

▼質問
「div.style.left」「div.style.top」で次のエラーが出る。

「引数が無効です。」

どうしてか教えて!

▼回答
div.style.left = left + "px";
div.style.top = top + "px";

leftとtopの値に数値じゃなくてNaNになっていると出るエラーみたい。

NaNのチェックが要るのね。

と言うことで、JavaScriptでは

isNaN( 文字列または数値 )関数でチェックする必要があるのね。

火曜日, 12月 15, 2009

[JavaScript]selectタグでのelements.type名

▼質問
elementsのtype名でselectタグをselectでチェックしようとしたんだけど

うまくいかなかったんだ。どうしてか教えてくれ!

▼回答
selectタグのtype名は、「select-one」か「select-multiple」なんだ。

他と違うから、気をつけてくれ!




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

<script Language="javascript">
<!--

function testType()
{

with ( document.testForm ) {
for ( var i = 0 ; i < elements.length ; i++ ) {
alert( elements[i].type );
}
}

}

-->
</script>
<title></title>
</head>
<body>
<form name="testForm" method="post">

<input type="button" id="testButton" name="testButton" value="Type名称" onClick="testType();">

<input type="checkbox" id="testCheckbox" name="testCheckbox" value="testCheckbox">
<input type="file" id="testFile" name="testFile" value="testFile">
<input type="hidden" id="testHidden" name="testHidden" value="testHidden">
<input type="password" id="testPassword" name="testPassword" value="testPassword">
<input type="radio" id="testRadio" name="testRadio" value="testRadio">
<input type="reset" id="testReset" name="testReset" value="testReset">
<select id="testSelectOne" name="testSelectOne"><option value="テスト1">テスト1</option><option value="テスト2">テスト2</option><option value="テスト3">テスト3</option></select>
<select id="testSelectMultiple" name="testSelectMultiple" Multiple><option value="テスト1">テスト1</option><option value="テスト2">テスト2</option><option value="テスト3">テスト3</option></select>
<input type="submit" id="testSubmit" name="testSubmit" value="testSubmit">
<input type="text" id="testText" name="testText" value="testText">
<textarea id="testTextarea" name="testTextarea" rows="5" cols="10">テスト</textarea>

</form>

</body>
</html>


土曜日, 12月 12, 2009

[HTML]bodyタグの○○margin(余白)

▼質問
body要素にあるマージン(余白)のデフォルト値っていくつなの?

▼回答
IE(Internet Explorer)とNN(Netscape Navigator)では違うマージンとなっている。
IE:上下10px、左右15px
NN:上下左右8px

■参考サイト
ページの余白を指定する

金曜日, 12月 04, 2009

[JavaScript]HTML内の文字列(テキスト)を書換える

▼質問
HTML内の文字列(テキスト)を動的に書換えたいんだ。

何か良い方法はないか教えてくれ!

▼回答
あるよ!

P要素のタグで文字列を囲ってあげて

それに、id属性を付けてやって

次の様にアクセスすれば書き換わるよ。


<p id="id_test">テスト</p>

document.getElementById( 'id_test' ).innerHTML = "書き換わったかな?";

土曜日, 11月 21, 2009

[HTML]window.openの最前面表示

▼質問
サブウィンドウを常に最前面に表示したいんだ。

showModalDialogは使いたくないんだ。

window.openで、できる方法を教えてくれ!

▼回答
サブウィンドウのbodyタグに「onBlur="focus()"」を

追加すれば実現できるよ。

■参考サイト
サブウィンドウを常に前面に表示する - JavaScript

火曜日, 11月 17, 2009

[Web共通]HTML(JSP)のキャッシュ

▼質問
JSPで作成した画面のデータが保持されちゃうんだけど・・・。

どうしてかわかるかな?

▼回答
HTMLのキャッシュが効いているんだよ!

次のコードを追加してみてくれ!!


<meta http-equiv="Expires" content="0">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Pragma" content="no-cache">


これで駄目なら

JSPでの変数宣言の仕方に問題があるんだ!!

次の構成要素内で変数を宣言していないか確認してくれ!


<%! %>


ここで宣言するとTomcat(サーブレット/JSPコンテナ)を再起動するまで

値が保持されるんだ。

リクエストがあった時の最初の一回だけ初期化して値を保持し続けるんだ。

■参考サイト
Javaの道:JSP(3.宣言、スクリプトレット、式)

木曜日, 11月 12, 2009

命名規約

項目 規約 種別
ボタン btn オブジェクト
ラジオボタン rdo オブジェクト
チェックボックス chk オブジェクト
コンボボックス cmb オブジェクト
リストボックス lst オブジェクト
Form項目 frm オブジェクト
Hidden項目 hdn オブジェクト
TextArea項目 tarea オブジェクト
Table内表示項目 tbl オブジェクト
bean:write項目 out オブジェクト
必須項目 ess 項目属性
~名 nm 項目属性
~番号 no 項目属性
~コード cd 項目属性
電話番号 tel 項目属性
Eメール email 項目属性
住所 add 項目属性
郵便番号 post 項目属性
金額(カンマつき) money 項目属性
小数 dec 項目属性
日付(スラッシュ区切り) date 項目属性
日付(年月日バラバラ) ddiv 項目属性
時間(コロン区切り) time 項目属性
時間(時分秒バラバラ) tdiv 項目属性
半角数字汎用 dig オブジェクト
半角英字汎用 alp オブジェクト
半角英数汎用 alnum オブジェクト
全角汎用 zen オブジェクト
全角カナ汎用 zkana オブジェクト
半角カナ汎用 hkana オブジェクト
その他入力形式 any オブジェクト

■参考サイト
peke JSP命名規約
株式会社MALTA

木曜日, 10月 01, 2009

[JavaScript]全角入力制御&数値チェック

▼質問
event.keyCodeで、キー入力をチェックして数値のみ入力させたいんだけど

全角入力の時、onKeyPressイベントでevent.keyCodeがうまくチェックできないんだ。

どうやったらできるか教えてくれ!!

▼回答
IEで全角を入力させたくなければ、style属性に「ime-mode: disabled;」と

記述すればできるよ!!

土曜日, 9月 26, 2009

[ORACLE]ORA-01659: [数字]を超えるMINEXTENTSを表領域[表領域の名前]に割当てできません。

▼質問
テーブルを作成している途中で次のエラーが出るんだ。

「ORA-01659: [数字]を超えるMINEXTENTSを表領域[表領域の名前]に割当てできません。」

どうすれば解決できるか教えてくれ!!

▼回答

SQL*Plusから、下記のSQL文を実行し表領域(データファイル)を追加さればいいんだ!

「ALTER TABLESPACE [ターゲットにする表領域の名前] ADD DATAFILE
   '[ファイルパス(例:C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.ORA)]'
SIZE [999M | 999K] AUTOEXTEND ON MAXSIZE UNLIMITE」

または、MINEXTENTS(エクステント数の最小値)、NEXT(増分値)またはPCTINCREASE(エクステント

サイズの増加率)の値を小さくして再実行する。

■参考サイト
データファイル管理の勘所


▼質問
データファイルの記憶域にある最大サイズの無制限ってどうやって指定するの?

指定しても値が選択されて32767MBが指定される。

どうして?か教えて!!

▼回答
まずは、32767MBの意味を教えよう。

db_block_size=8192の場合の上限になる。

db_block_sizeの上限値は、OSに依存するため、その値にはOSの最小ブロックサイズ(バイト単位)

の倍数(デバイス・レベルでの物理ブロック・サイズの倍数)で指定しなければならない。

Oracleデータベースリファレンスには、物理データベースの制限にdb_block_size * (2^22 - 1)が

上限と書かれている。1データ・ファイル当たりの最大数(データベース・ブロック)は、プラット

フォームによって異なるが、通常 2^22 - 1 ブロックとなっている。

なお、このサイズが大きければI/O効率(パフォーマンス)は向上するが、HDD使用効率は悪くなる。

無制限を選択すると自動的にdb_block_sizeから1データ・ファイル当たりの最大サイズが計算され

その値が最大サイズに表示される。db_block_sizeをデータベース時に変更できれば、1データ・

ファイル当たりの最大サイズを大きくすることができると思いやってみたが、駄目だった。

ブロック・サイズ(db_block_size)を2048にしたが無制限が選択されずに、8192が表示された。

次に、32768や16384を選択したら、データベースの作成と中でエラーになった。

結局、データ・ファイルを追加するしか方法はないようだ。

■参考サイト
データベース記憶域構造の管理
データベースの制限事項
Oracle基本設計


●データファイルのサイズ変更

例)'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF'を5MBに縮小

ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' RESIZE 5M;

●データファイルの自動拡張

例)'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF'を1MB単位で10MBまでの範囲で自動拡張

ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' AUTOEXTEND ON NEXT 1M MAXSIZE 10M;

●データファイルの場所を変更する

例)表領域のデータファイルを移動する場合

①表領域をオフラインにする
ALTER TABLESPACE [表領域の名前] OFFLINE;

②OSレベルでファイルをコピー

③定義の変更
ALTER DATABASE RENAME FILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' TO 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF';

④オンラインにする
ALTER TABLESPACE [表領域の名前] ONLINE;

月曜日, 9月 14, 2009

[JavaScript]window.showModalDialog内のiframe

▼質問
window.showModalDialog内のiframeから親ウィンドウを操作したいんだ。

どうしたらできるか教えてくれ!!

▼回答
window.parentでアクセスできるから試してみてくれ!!

こんな感じで使えるよ!!

●親HTML

function 親の関数名()
{
var iframe = document.getElementById( "sample" );
if ( document.all ) {
iframedoc = iframe.contentWindow.document;
} else {
iframedoc = iframe.contentDocument;
}

// 親から子を操作するときのアクセス方法
alert( iframedoc.getElementById( "chkSample" ).checked );

}





●子HTML

function 子の関数名()
{
window.parent.親の関数名();
}

木曜日, 9月 10, 2009

[Java]Cannot format given Object as a Date

▼質問
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss" );
System.out.println( sdf.format( calendar ) );

上記のプログラムで次のエラーが出るんだ。

「java.lang.IllegalArgumentException: Cannot format given Object as a Date」

どうしてかわかるかい?

▼回答
formatメソッドの引数の型が間違っているんだ。

正解は、次の様になるから気をつけてくれ!

「System.out.println( sdf.format( calendar.getTime() ) );」

[Java]月の日数(月の最終日)

▼質問
月の日数(月の最終日)を知りたんだ。

どうしたらできるか教えてくれ!

▼回答
次の様にしたらできるから試してみてくれ!!

Calendar calendar = Calendar.getInstance();
int DaysInMonth = calendar .getActualMaximum( Calendar.DAY_OF_MONTH );

日曜日, 9月 06, 2009

[HTML]id属性とname属性

▼質問
id属性とname属性の名称は、違っているのが正しいの?

▼回答
id属性は、アンカー名として使われる際にname属性と同じ名前空間を共有するから

同じ名前にするのが正しいのだよ。

<p><a id="a1" name="a1" href="#a1">…</a></p>

土曜日, 9月 05, 2009

[JavaScript]外部サイト(HTML)取得

▼質問
JavaScriptで外部サイトのHTML(ソースコード)を取得したいんだ。

どうしたらできるか教えてくれ!

▼回答
下記を参考にしてくれ!

■参考サイト
javascriptで外部サイトのHTMLを取得するには、 - programing memo

金曜日, 8月 28, 2009

[VBA]Shell関数(EXE実行)

▼質問
ExcelでEXEを実行したツールを作りたいんだ。

どうやったらできるか教えてくれ!

▼回答
APIを使った関数を作ったから参考にしてくれ!!

標準モジュールに次のコードをコピーしてから

使ってくれ!!

Option Explicit

Public Const SYNCHRONIZE = 1048576
Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Const PROCESS_TERMINATE = &H1
Public Const PROCESS_QUERY_INFORMATION = &H400&
Public Const STILL_ACTIVE = &H103&

Public Declare Function OpenProcess Lib "kernel32" _
(ByVal dwAccess As Long, ByVal fInherit As Long, ByVal IDProcess As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32.dll" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32.dll" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Private Function ShellExec(ByVal pPathName As String) As Boolean

Dim pid As Variant
Dim hProcess As Long
Dim lpExitCode As Long

On Error GoTo doError

pid = Shell(pPathName, vbNormalFocus)

'起動したプログラムのプロセスハンドルを取得
hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_QUERY_INFORMATION, True, pid)

'指定のオブジェクトがシグナル状態になるか、タイムアウト時間を経過するまで待機する
WaitForSingleObject hProcess, 100000

'プロセスの終了状態を取得
GetExitCodeProcess hProcess, lpExitCode

'プロセスハンドルのクローズ
CloseHandle hProcess

ShellExec = True

Exit Function

doError:

MsgBox Err.Description

ShellExec = False

End Function

■参考サイト
VB テクニック編13 - バッチ実行、EXE バッチ実行、関連付け実行、文字列置換 - SAK Streets
VB & VBAプログラミング

金曜日, 7月 31, 2009

[HTML]htmlタグのxmlns属性って何?

▼質問
htmlタグのxmlns属性って何?

▼回答
1999年にW3Cから勧告されたXML名前空間(以降「XMLNS」とする)。

XMLNSは、語彙(要素タイプ名、属性名)をURI(Uniform Resource Identifier)と

組み合わせる(修飾する)ことで、複数の語彙を混在させるメカニズムです。

例えば、全体の構成をXHTMLで記述しつつ、数式部分にはMathMLの語彙を、

グラフにはSVGの語彙を利用するという方法が考えられる。

■参考サイト
XML名前空間の簡単な説明
XHTMLのDTDと名前空間/XHTML基礎講座/Index/Web for senior 作成支援
URI

木曜日, 7月 09, 2009

[JavaScript]ブラウザに表示した内容を編集する方法

適当なホームページを表示させた後、ブラウザのアドレスバーに以下の内容を入力すると

表示している内容がブラウザ上で直接編集できるようになるらしい。

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0

やってみるとなかなか凄くて面白いが・・・。

自分が使うことを想像すると、どんな時に使えるのか

直ぐには想像できないなぁ~。

いつからサーポートしていたのか調べてみた。

contentEditableは、IE5.5以降からサポートしているみたいだ。

Firefox3でもサポートされているみたいだ。

次のサイトにあるサンプルを動かしてみて、

どんな時に使うのかわかった気がする。

SCRAPBLOG : contenteditable 属性

かっこいい入力エリア(テキストエリアの代わり)の

WEBデザインにする時に使うのがベストだと感じた。

■参考サイト
WEBブラウザーに表示されている画面を直接編集する方法: sanonosa システム管理コラム集

土曜日, 6月 27, 2009

[JavaScript]パラメータの無いメソッド

▼質問
canvasの幅と高さを次の様に取得しようとしたんだがうまくいかないんだ。

exGraph.getCanvas = function( id ) {
/* canvas要素のノードオブジェクト */
var el = document.getElementById( id );
this.canvas = el;
/* 2Dコンテキスト */
this.context_ = this.canvas.getContext( '2d' );
/* canvas要素の幅・高さ */
this.getWidth = function() { return this.canvas.width; };
this.getHeight = function() { return this.canvas.height; };
};

var obj = new exGraph.getCanvas( "sample" );
/* canvasエリアの幅・高さを取得する */
var width = obj.getWidth;

どうしてか教えてくれ!

▼回答
取得する時のコードが間違っているよ。

括弧が足りないんだ!

var width = obj.getWidth();

メソッドの括弧は省略できないんだ。

VBみたいに・・・。

火曜日, 6月 23, 2009

[JavaScript]excanvas.jsのサンプル(矩形・円・破線・点線)

▼質問
excanvas.jsのサンプルないかな?

▼回答
次のコードを参考にしてくれ!!



<html>
<head>
<title></title>
<!--[if IE]><script type="text/javascript" src="excanvas.js"></script><![endif]-->
<script type="text/javascript">
if ( typeof( exGraph ) == 'undefined' ) {
exGraph = new Object();
}
exGraph.getCanvas = function( id ) {
/* canvas要素のノードオブジェクト */
var el = document.getElementById( id );
this.canvas = el;
/* 2Dコンテキスト */
this.context_ = this.canvas.getContext( '2d' );
};
exGraph.getCanvas.prototype.draw = function() {
/* 全てをクリアする */
this.context_.clearRect();
/* 矩形を描く */
this.context_.strokeRect( 20, 15, 100, 100 );
/* 塗りつぶした矩形を描く */
this.context_.fillRect( 150, 15, 100, 100 );
/* 塗りつぶした円を描く */
this.context_.fillStyle = "rgba( 255, 0, 0, 0.1 )";
this.context_.strokeStyle = "rgba( 255, 0, 0, 1 )";
this.context_.beginPath();
this.context_.arc( 320, 60, 50, 0, Math.PI*2, 1 );
this.context_.fill();
this.context_.stroke();
};
exGraph.getCanvas.prototype.drawLine = function( x1, y1, x2, y2, width, type, color ) {
this.context_.strokeStyle = color;
this.context_.lineWidth = width;
this.context_.lineCap = "butt"; /* butt、round、square */
if ( type == "solid" ) {
this.context_.beginPath();
this.context_.moveTo( x1, y1 );
this.context_.lineTo( x2, y2 );
this.context_.stroke();
}
else if ( type == "dashed" ) {
var x = x1;
var y = y1;
while ( 1 ) {
this.context_.beginPath();
this.context_.moveTo( x, y );
if ( y1 == y2 ) { x = x + width*4; }
if ( x1 == x2 ) { y = y + width*4; }
if ( x > x2 ) { x = x2; }
if ( y > y2 ) { y = y2; }
this.context_.lineTo( x, y );
this.context_.stroke();
if ( y1 == y2 ) { x = x + width*2; }
if ( x1 == x2 ) { y = y + width*2; }
if ( x > x2 ) { break; }
if ( y > y2 ) { break; }
}
}
else if ( type == "dotted" ) {
this.context_.fillStyle = color;
var x = x1;
var y = y1;
while ( 1 ) {
this.context_.beginPath();
this.context_.arc( x, y, width/2, 0, Math.PI*2, 0 );
this.context_.fill();
this.context_.stroke();
if ( y1 == y2 ) { x = x + width*3; }
if ( x1 == x2 ) { y = y + width*4; }
if ( x > x2 ) { break; }
if ( y > y2 ) { break; }
}
}
};
exGraph.getCanvas.prototype.drawText = function( x, y, text, font_size, font_family, color ) {
var div = document.createElement( 'DIV' );
div.appendChild( document.createTextNode( text ) );
div.style.fontSize = font_size;
div.style.fontFamily = font_family;
div.style.color = color;
div.style.margin = "0";
div.style.padding = "0";
div.style.position = "absolute";
div.style.left = x.toString() + "px";
div.style.top = y.toString() + "px";
this.canvas.parentNode.appendChild( div );
};
window.onload = function() {
var obj = new exGraph.getCanvas( "sample" );
if( !obj ) { return; }
obj.draw();
/* 実線を描く */
obj.drawLine( 20, 150, 350, 150, 1, "solid", "rgba( 255, 0, 0, 1 )" );
obj.drawLine( 20, 210, 20, 280, 1, "solid", "rgba( 255, 0, 0, 1 )" );
/* 破線を描く */
obj.drawLine( 20, 170, 350, 170, 2, "dashed", "rgba( 255, 0, 0, 1 )" );
obj.drawLine( 50, 210, 50, 280, 2, "dashed", "rgba( 255, 0, 0, 1 )" );
/* 点線を描く */
obj.drawLine( 20, 190, 350, 190, 2, "dotted", "rgba( 255, 0, 0, 1 )" );
obj.drawLine( 80, 210, 80, 280, 2, "dotted", "rgba( 255, 0, 0, 1 )" );
/* 文字列を描く */
obj.drawText( 150, 230, "文字列", 10, "Arial,sans-serif", "#ff0000" );
obj.drawText( 150, 250, "文字列", 20, "Arial,sans-serif", "#0000ff" );
};
</script>
</head>
<body>
<div><canvas width="400" height="300" id="sample" style="border:1px solid #4c4c4c;"></canvas></div>
</body>
</html>

[JavaScript]clearRectメソッド(excanvas.js)

▼質問
次の様に、透明にしたい領域を指定してもうまくその領域が透明にならずに

描画した全ての図形が消えるんだ!?

コンテキスト.clearRect( x座標, y座標, width(幅), height(高さ) );

どうしてか教えてくれ!!

▼回答
IE(Internet Explorer)では、全てクリアされるのが正しいようだ。

そうやって使うらしいよ?!

・・・。

excanvas.jsの中身を見ても、そんなパラーメタを定義したメソッド

見つからないしね・・・。

日曜日, 6月 21, 2009

[JavaScript]prototypeプロパティって何?

▼質問
prototypeプロパティって何?

▼回答
prototypeプロパティは、クラスにメソッドを追加する時に使うんだよ!

クラス名.prototype.メソッド名 = 関数名;

function クラス名() {
this.変数名1 = "";
function 関数名1( パラメータ1 )
{
this.変数名1 = パラメータ1;
}
クラス名.prototype.メソッド名 = 関数名1;
return this;
}

var obj = new クラス名();
obj.メソッド名( パラメータ2 );
var 変数1 = obj.変数名1;

変数1が、パラメータ2となる。

・オブジェクトへのプロパティの追加
オブジェクト名.任意のプロパティ名 = 値;
var obj = new クラス名();
obj.新規プロパティ名 = "";
obj.["新規プロパティ名"] = "";

・オブジェクトへのメソッドの追加
オブジェクト名.任意のメソッド名 = 関数名;

function 関数名1( パラメータ1 )
{
this.変数名1 = パラメータ1;
}
var obj = new クラス名();
obj.新規メソッド名 = 関数名1;

■参考サイト
プロパティとメソッドについて

金曜日, 6月 12, 2009

[HTML]font-sizeの単位はpt(ポイント)?px(ピクセル)?

▼質問
font-sizeの単位は、pt(ポイント)?

それとも、px(ピクセル)?

素朴な疑問

どっちなんだ?

教えてくれ!!

▼回答
どちらでも指定できるよ!

■参考サイト
font-sizeにはptではなくpxを使おう - みずぴー日記

[HTML]textareaタグのフォント指定

▼質問
textareaタグのフォントを指定したいんだ。

どうやったら指定できるか教えてくれ!!

▼回答
style属性を使うんだ。

次の様に指定すればよい!

style="font-size:サイズpx;"

木曜日, 6月 11, 2009

[JavaScript]警告: getElementById() に空文字列が渡されました。

▼質問
IE(Internet Explorer)でうまく動いていたホームページを

試しにFirefoxで表示したら

次のエラーが出るんだ。

「警告: getElementById() に空文字列が渡されました。」

どうしてか教えてくれ!

▼回答
getElementById(名前)で指定している名前の属性が

name属性じゃないか確認してみてくれ!!

IEでは、getElementByIdとname属性の

あいまいな組合せでも動くんだ。

name属性の時は、getElementsByNameを使うんだ。
←getElementByNameじゃなくてgetElementsByName
Elementにsが付くことに注意してくれ!

getElementByIdの時は、id属性を定義するんだ。

Firefoxでも動くようにするにはid属性とname属性を

定義しておいた方がいいぞ!!

金曜日, 5月 29, 2009

[VB2005]My.Application.UnhandledExceptionイベント

▼質問
My.Application.UnhandledExceptionイベントって!

どんなことができるの?

▼回答
Windowsアプリケーションやコンソール・アプリケーションで

処理できなかった例外を、1カ所で処理することができるんだ。

■参考サイト
捕捉されなかった例外がスローされたことを知る: .NET Tips: C#, VB.NET, Visual Studio
@IT:.NET TIPS 適切に処理されなかった例外をキャッチするには? - C# VB.NET Windowsフォーム

日曜日, 5月 17, 2009

[JavaScript]replaceの全置換

▼質問
replaceの全置換ができないんだ。

どうしてなんだ?!

教えてくれ~!!

▼回答
replaceメソッドは、最初に見つかったものしか置換されないだ。

だから、次の様な関数を作成しておくと便利なんだ。

function replaceAll( s, sep1, sep2 ) {
return s.split(sep1).join(sep2);
}

使い方
出力文字列 = replaceAll( 入力文字列, 置換文字列, 置換後文字列 );

■参考サイト
JavaScript 文字列の置き換え - replace/replaceAll - JavaScript入門

水曜日, 5月 13, 2009

[JavaScript]文字コードから文字変換

▼質問
文字コードから文字に変換したいんだ。

どうやったらできるか教えてくれ。

▼回答
StringオブジェクトのfromCharCodeメソッドを使えばできるよ。

使い方は、こんな感じだ。

String.fromCharCode(文字コード)

カンマで区切れば、複数の文字コードも

指定することができる。

String.fromCharCode(文字コード,文字コード)

ひらがなの文字コードを文字列にした

サンプルだ。

参考にしてみてくれ!!

var str = "";
var scode = "あ".charCodeAt(0);
var ecode = "ん".charCodeAt(0);

for ( i = scode ; i <= ecode ; i++ ) {
var c = String.fromCharCode(i);
str += c;
}
alert(str);

木曜日, 4月 30, 2009

[JavaScript]入力ダイアログ(window.prompt)

▼質問
JavaScriptで入力ダイアログを使いたいんだ。

どうしたらできるか教えてくれ!

▼回答
windowオブジェクトにpromptというメソッドがあるよ。

使い方は次の様になるから、参考にしてくれ!!

var str = window.prompt( ダイアログに表示されるメッセージ, 初期値 );

土曜日, 3月 21, 2009

[SQL]テーブル名とフィールド名の取得

▼質問
Oracleのテーブル名を取得したいんだ。

どうしたらできるか教えてくれ!

▼回答
次のSQL文を参考にしてくれ!

select * from tab

TNAME | TABTYPE | CLUSTERID

select * from all_tables

OWNER | TABLE_NAME | TABLESPACE_NAME | CLUSTER_NAME | IOT_NAME | STATUS |
PCT_FREE | PCT_USED | INI_TRANS | MAX_TRANS | INITIAL_EXTENT | NEXT_EXTENT |
MIN_EXTENTS | MAX_EXTENTS | PCT_INCREASE | FREELISTS | FREELIST_GROUPS |
LOGGING | BACKED_UP | NUM_ROWS | BLOCKS | EMPTY_BLOCKS | AVG_SPACE |
CHAIN_CNT | AVG_ROW_LEN | AVG_SPACE_FREELIST_BLOCKS | NUM_FREELIST_BLOCKS |
DEGREE | INSTANCES | CACHE | TABLE_LOCK | SAMPLE_SIZE | LAST_ANALYZED |
PARTITIONED | IOT_TYPE | TEMPORARY | SECONDARY | NESTED | BUFFER_POOL |
ROW_MOVEMENT | GLOBAL_STATS | USER_STATS | DURATION | SKIP_CORRUPT |
MONITORING | CLUSTER_OWNER | DEPENDENCIES | COMPRESSION | DROPPED

select * from user_tables

TABLE_NAME | TABLESPACE_NAME | CLUSTER_NAME | IOT_NAME | STATUS | PCT_FREE |
PCT_USED | INI_TRANS | MAX_TRANS | INITIAL_EXTENT | NEXT_EXTENT | MIN_EXTENTS |
MAX_EXTENTS | PCT_INCREASE | FREELISTS | FREELIST_GROUPS | LOGGING | BACKED_UP |
NUM_ROWS | BLOCKS | EMPTY_BLOCKS | AVG_SPACE | CHAIN_CNT | AVG_ROW_LEN |
AVG_SPACE_FREELIST_BLOCKS | NUM_FREELIST_BLOCKS | DEGREE | INSTANCES | CACHE |
TABLE_LOCK | SAMPLE_SIZE | LAST_ANALYZED | PARTITIONED | IOT_TYPE | TEMPORARY |
SECONDARY | NESTED | BUFFER_POOL | ROW_MOVEMENT | GLOBAL_STATS | USER_STATS |
DURATION | SKIP_CORRUPT | MONITORING | CLUSTER_OWNER | DEPENDENCIES |
COMPRESSION | DROPPED

▼質問
Oracleのフィールド名を取得したいんだ。

どうしたらできるか教えてくれ!


▼回答
次のSQL文を参考にしてくれ!

SELECT * FROM ALL_TAB_COLUMNS WHERE UPPER(TABLE_NAME) = 'テーブル名'
ORDER BY COLUMN_ID ASC

土曜日, 3月 14, 2009

[JavaScript]タイトル(title)を変更したい

▼質問
タイトル(title)を変更したいんだ。

どうしたらできるか教えてくれ!

▼回答
タイトル(title)を変更するには次の2つ方法がある。

top.document.title = "タイトル";
window.document.title = "タイトル";

フレームのタイトルを使いたい場合は、

フレームのHTMLファイル内に次のコードを書けばいい。

top.document.title = top.自フレーム名.document.title;

金曜日, 3月 13, 2009

[JavaScript]クエリのパラメータ(QueryString)取得

▼質問
クエリ文字列(QueryString)のパラメータを取得したいんだ。

どうしたらできるか教えてくれ!

▼回答
次のコード参考にしてくれ!



<script language="JavaScript" for="window" event="onload">
<!--
var QueryString = location.search.split("?");
if ( QueryString.length > 0 ) {
alert( QueryString[1] );
}
// -->
</script>



■参考サイト
JavaScript:URLからパラメータ取得したい - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7297&forum=7&2

金曜日, 3月 06, 2009

HTML文字コード表

&#32; &#64;@&#96;`&#128;&#160; &#192;À&#224;à
&#33;!&#65;A&#97;a&#129;&#161;¡&#193;Á&#225;á
&#34;"&#66;B&#98;b&#130;&#162;¢&#194;Â&#226;â
&#35;#&#67;C&#99;c&#131;ƒ&#163;£&#195;Ã&#227;ã
&#36;$&#68;D&#100;d&#132;&#164;¤&#196;Ä&#228;ä
&#37;%&#69;E&#101;e&#133;&#165;¥&#197;Å&#229;å
&#38;&&#70;F&#102;f&#134;&#166;¦&#198;Æ&#230;æ
&#39;'&#71;G&#103;g&#135;&#167;§&#199;Ç&#231;ç
&#40;(&#72;H&#104;h&#136;ˆ&#168;¨&#200;È&#232;è
&#41;)&#73;I&#105;i&#137;&#169;©&#201;É&#233;é
&#42;*&#74;J&#106;j&#138;Š&#170;ª&#202;Ê&#234;ê
&#43;+&#75;K&#107;k&#139;&#171;«&#203;Ë&#235;ë
&#44;,&#76;L&#108;l&#140;Œ&#172;¬&#204;Ì&#236;ì
&#45;-&#77;M&#109;m&#141;&#173;­&#205;Í&#237;í
&#46;.&#78;N&#110;n&#142;Ž&#174;®&#206;Î&#238;î
&#47;/&#79;O&#111;o&#143;&#175;¯&#207;Ï&#239;ï
&#48;0&#80;P&#112;p&#144;&#176;°&#208;Ð&#240;ð
&#49;1&#81;Q&#113;q&#145;&#177;±&#209;Ñ&#241;ñ
&#50;2&#82;R&#114;r&#146;&#178;²&#210;Ò&#242;ò
&#51;3&#83;S&#115;s&#147;&#179;³&#211;Ó&#243;ó
&#52;4&#84;T&#116;t&#148;&#180;´&#212;Ô&#244;ô
&#53;5&#85;U&#117;u&#149;&#181;µ&#213;Õ&#245;õ
&#54;6&#86;V&#118;v&#150;&#182;&#214;Ö&#246;ö
&#55;7&#87;W&#119;w&#151;&#183;·&#215;×&#247;÷
&#56;8&#88;X&#120;x&#152;˜&#184;¸&#216;Ø&#248;ø
&#57;9&#89;Y&#121;y&#153;&#185;¹&#217;Ù&#249;ù
&#58;:&#90;Z&#122;z&#154;š&#186;º&#218;Ú&#250;ú
&#59;;&#91;[&#123;{&#155;&#187;»&#219;Û&#251;û
&#60;<&#92;\&#124;|&#156;œ&#188;¼&#220;Ü&#252;ü
&#61;=&#93;]&#125;}&#157;&#189;½&#221;Ý&#253;ý
&#62;>&#94;^&#126;~&#158;ž&#190;¾&#222;Þ&#254;þ
&#63;?&#95;_&#127;&#159;Ÿ&#191;¿&#223;ß&#255;ÿ

[JavaScript]インラインフレーム(iframe)の動的操作

▼質問
iframe(インラインフレーム)の内容を動的に操作したいんだ。

どうしたらできるか教えてくれ!!

▼回答
次のコードを参考にしてくれ!


var iframe = document.getElementById(インラインフレームのID);
if ( document.all ) {
iframedoc = iframe.contentWindow.document;
} else {
iframedoc = iframe.contentDocument;
}
iframedoc.writeln("<body></body>");
iframedoc.body.innerHTML = "テスト";

[JavaScript]JSON(JavaScript Object Notation)って何?

▼質問
JSON(JavaScript Object Notation)って何?

▼回答
テキストベースのデータフォーマット(軽量のデータ交換フォーマット)。

XMLとJSONで同じデータを双方独自の

フォーマット形式で記述できる。

●XMLの例
<ルート>
<要素1>要素①
<要素2>要素②


●JSONの例
{
"要素1":"要素①",
"要素2":"要素②"
}

■参考サイト
[Think IT] 第1回:JSONってなにもの? (1/3)
http://www.thinkit.co.jp/article/70/1/
JSON入門 - RapidShare
http://d.hatena.ne.jp/brazil/20050915/1126709945

水曜日, 2月 18, 2009

[XML or XSLT]属性値の出力

▼質問
livedoorの気象データ提供サービス「Weather Hacks」を試しているんだ。

下記のXMLファイルにあるtitle属性の値をXSLTを使って出力したいんだ。

http://weather.livedoor.com/forecast/rss/forecastmap.xml

どうしたらできるか教えてくれ!

▼回答
次のプログラムを参考にしてくれ!

・main.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="main.xsl" ?>
<forecastmap_list>
<title>livedoor 天気情報(1次細分区定義表)</title>
<forecastmap href="http://weather.livedoor.com/forecast/rss/forecastmap.xml"/>
</forecastmap_list>





・main.xsl
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="area_title" />
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="forecastmap_list/title" /></title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="forecastmap_list">
<xsl:apply-templates select="title" />
<table border="3">
<xsl:apply-templates select="forecastmap" />
</table>
</xsl:template>

<xsl:template match="title">
<h1><xsl:value-of select="." /></h1>
</xsl:template>
<xsl:template match="forecastmap">
<tr>
<th>地方名</th>
<th>都道府県名</th>
<th>観測地点名</th>
</tr>
<xsl:variable name="map" select="document(@href)" />
<xsl:for-each select="$map">
<xsl:apply-templates />
</xsl:for-each>
</xsl:template>

<xsl:template match="area">
<xsl:apply-templates>
<xsl:with-param name="area_title" select="@title" />
</xsl:apply-templates>
</xsl:template>

<xsl:template match="pref">
<xsl:param name="area_title" select="$area_title" />
<xsl:apply-templates>
<xsl:with-param name="area_title" select="$area_title" />
</xsl:apply-templates>
</xsl:template>

<xsl:template match="city">
<xsl:param name="area_title" select="$area_title" />
<tr>
<td><xsl:value-of select="$area_title" /></td>
<td><xsl:value-of select="parent::pref/@title" /></td>
<td>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="@source" />
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:value-of select="@title" />
</xsl:element>
</td>
</tr>
</xsl:template>

</xsl:stylesheet>





■参考サイト
XSLT > 要素テキスト・属性値の出力 @みっちーわーるど
http://www1.mahoroba.ne.jp/~mitt/xml/xslt/step06.htm
[Think IT] 第2回:APIを使ったブログパーツを作ろう! (1/3)
http://thinkit.jp/article/850/1/
XSLTスタイルシート書き方講座 応用編(2):XMLデータの埋め込みと相互参照
http://www.atmarkit.co.jp/fxml/tanpatsu/10xslt/xslt06.html

土曜日, 2月 14, 2009

[C++2005]fatal error C1083: include ファイルを開けません。'atlapp.h': No such file or directory

▼質問
次のサイトのサンプルを試してみたんだ。

programmer´s real life and so on ≫ WTLでVS2005風メニュー

そしたら、

次のエラーが出るんだ。

「fatal error C1083: include ファイルを開けません。
 'atlapp.h': No such file or directory」

どうしたらよいか教えてくれ!

▼回答
Visual Studio 2005には、標準でWTLが含まれていないんだ。

だから、WTLをインストールすればいいんだ。

下記のサイトを参考にしてみてくれ!

WTLをインストールする (UsefullCode.net)

火曜日, 2月 03, 2009

[VB2005]数値入力用のテキストボックス・コンボボックス

▼質問
数値入力専用のテキストボックスとコンボボックスを作成したいんだ。

どうしたらできるか教えてくれ!

▼回答
次のコードを参考にしてくれ!!

カスタムテキストボックスとコンボボックスだ。



Option Strict On
Option Explicit On

Public Class CustomTextBox
Inherits System.Windows.Forms.TextBox

'''
''' System.Windows.Forms.TextBox.KeyPress イベントで発生します.
'''

''' コントロールオブジェクト.
''' EventArgsクラス.
Private Sub CustomTextBox_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles Me.KeyPress
If (Asc(e.KeyChar) = System.Windows.Forms.Keys.Back) Then Exit Sub
'数値キーをチェックする.
If (Not e.KeyChar Like "[0-9]") Then e.KeyChar = CChar("")
End Sub

End Class


Option Strict On
Option Explicit On

Public Class CustomComboBox
Inherits System.Windows.Forms.ComboBox

'''
''' System.Windows.Forms.TextBox.KeyPress イベントで発生します.
'''

''' コントロールオブジェクト.
''' EventArgsクラス.
Private Sub CustomTextBox_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles Me.KeyPress
If (Asc(e.KeyChar) = System.Windows.Forms.Keys.Back) Then Exit Sub
'数値キーをチェックする.
If (Not e.KeyChar Like "[0-9]") Then e.KeyChar = CChar("")
End Sub

End Class


[VB2005]MessageBoxのメッセージが隠れる

▼質問
MessageBoxのメッセージが隠れるんだ。

MsgBoxではなかった気がするんだが、

どうしてなんだ?!

▼回答
オーナー画面のTopMostプロパティにTrueが

設定されているか確認してくれ!

これを回避するには、MessageBoxのShowに

オーナー画面のオブジェクトを渡してやるんだ!

MessageBox.Show メソッド (IWin32Window, String, String, MessageBoxButtons, MessageBoxIcon)

MessageBox.Show(Me, "メッセージ", "タイトル", MessageBoxButtons, MessageBoxIcon)

火曜日, 1月 27, 2009

[VB2005]Date型のOptional

▼質問
Date型をOptionalで指定したいんだ。

Nowを定数にしようとしたけどうまくいかないんだ。

どうしたらよいか教えてくれ!!


▼回答
次の様に指定すればできるから試してみてくれ!!

Optional ByVal pDate As Date = #1/1/2000#
Optional ByVal pDate As Date = #1/1/2000 1:00:00 AM#


■参考サイト
VB.NET/文法/型/Date型 - Security Akademeia
http://wiki.akademeia.info/index?VB.NET%2F%CA%B8%CB%A1%2F%B7%BF%2FDate%B7%BF

[VB2005]半角から全角に変換

▼質問
半角の数字を全角に変換したいんだ。

どうしたらできるか教えてくれ!


▼回答
StrConv関数を使えばできるよ!!

StrConv(CStr(数字), VbStrConv.Wide)

この関数は、数字以外でも変換してくれるか便利だ!

反対に全角を半角にしたい時は、次の様にすればOKだ。

StrConv(CStr(数字), VbStrConv.Narrow)


■参考サイト
@IT:.NET TIPS 文字列を全角/半角に変換するには?(VB.NET関数活用) - C#
http://www.atmarkit.co.jp/fdotnet/dotnettips/265vbhanzen/vbhanzen.html

日曜日, 1月 18, 2009

[VB2005]ExcelのValue値取得

▼質問
ExcelのValue値を取得したいんだ。

どうしたらできるか教えてくれ!

▼回答
サンプルを示すから参考にしてくれ!!



Public Shared Sub GetExcelValue(ByVal strFilePath As String, _
ByRef val(,) As Object, _
Optional ByVal maxRow As Integer = 65536)
Dim xlApp As Excel.Application = Nothing

Try

xlApp = CreateObject("Excel.Application")

If IsNothing(xlApp) Then Exit Sub

xlApp.Workbooks.Open(Filename:=strFilePath)
xlApp.WindowState = Excel.XlWindowState.xlMinimized
xlApp.Visible = False
xlApp.DisplayAlerts = False
xlApp.ScreenUpdating = False

Dim wWorksheet As Excel.Worksheet = _
CType(xlApp.ActiveWorkbook.ActiveSheet, Excel.Worksheet)

With wWorksheet
.Unprotect()

Application.DoEvents()

'Value値取得(全セルを取得するとメモリのエラーになるので注意が必要!)
val = .Range("A1:IV" & maxRow).Value

End With

GC.Collect()

Catch ex As Exception

Finally

If (Not IsNothing(xlApp)) Then xlApp.Quit()
xlApp = Nothing

GC.Collect()

End Try

End Sub



これを実行すると面白い事が起きる。

配列の始まりが1から始まるのだ!

VB6では、Dim obj(1 To 3) As Object ができたけどね!

VB.NETからは、0始まりしか作れない。痛い(>_<)

なぜ、Excelだけ1からの配列が作れるんだ!?

不思議だ!!

金曜日, 1月 16, 2009

[VB2005]System.InvalidOperationException はハンドルされませんでした。

▼質問
いきなり、次のエラーが出るようになった。

System.InvalidOperationException はハンドルされませんでした。
Message="フォームの作成中にエラーが発生しました。詳細については、Exception.InnerException を参照してください。エラー: オブジェクト参照がオブジェクト インスタンスに設定されていません。"
Source="アセンブリ名"
StackTrace:
場所 アセンブリ名.My.MyProject.MyForms.Create__Instance__[T](T Instance) 場所 17d14f5c-a337-4978-8281-53493378c1071.vb:行 190
場所 アセンブリ名.My.MyProject.MyForms.get_frmTrendAnalyzeMenu()
場所 アセンブリ名.My.MyApplication.OnCreateMainForm() 場所 C:\パス\TrdAnalyze\My Project\Application.Designer.vb:行 35
場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
場所 アセンブリ名.My.MyApplication.Main(String[] Args) 場所 17d14f5c-a337-4978-8281-53493378c1071.vb:行 81
場所 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Threading.ThreadHelper.ThreadStart()

▼回答

月曜日, 12月 29, 2008

[VB2005]Excel処理の高速化

▼質問
大量のデータをデータベースから読込んでExcelのシートに表示したいんだ。

ループしてValueにデータを格納すると遅くなるんだ。

一括してデータを格納する方法はないのか?!

▼回答
一括してデータを貼り付ける方法はあるよ。

まず、セルの行と列を2次元にしたデータ領域を作成するんだ。

Dim value(5, 2) As String

この領域にデータを格納して、次の様にRangeに貼り付ける範囲を指定して

Range("A1:B5").Value = value

Valueに2次元配列を格納すれば、配列に格納したイメージのままセルに

データが貼り付けられるんだ。

金曜日, 12月 26, 2008

[VB2005]ExcelのA1形式で列名取得

▼質問
Excelの参照形式で表示されるA1形式の数字以外の列名を取得したいんだ。

どうしたらできるか教えてくれ!

▼回答
サンプルを示すから参考にしてくれ!!



Public Shared Sub GetExcelA1Address(ByRef strA1() As String)
Dim xlApp As Excel.Application = Nothing

Try

xlApp = CreateObject("Excel.Application")

If IsNothing(xlApp) Then Exit Sub

xlApp.Workbooks.Add()
xlApp.WindowState = Excel.XlWindowState.xlMinimized
xlApp.Visible = False
xlApp.DisplayAlerts = False
xlApp.ScreenUpdating = False

Dim wWorksheet As Excel.Worksheet = _
CType(xlApp.ActiveWorkbook.ActiveSheet, Excel.Worksheet)

ReDim strA1(256)

'最大列数分ループする。
For i As Integer = 1 To 256
strA1(i) = Replace(Split(CType(wWorksheet.Columns(i), _
Excel.Range).Address(False, True, Excel.XlReferenceStyle.xlA1), _
":")(0), "$", "")
Next i

GC.Collect()

Catch ex As Exception

Finally

If (Not IsNothing(xlApp)) Then xlApp.Quit()
xlApp = Nothing

GC.Collect()

End Try

End Sub

火曜日, 12月 16, 2008

[VBA]CopyFromRecordsetでAccessのメモ型が読込めない

▼質問
CopyFromRecordsetでAccessのメモ型が読込めない!

どうしてなのか教えてくれ!

▼回答
まずは、データベースのオープンの仕方を調べてみてくれ!

下記のようになっていなか調べてみてくれ!

con.Open ("Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\db1.mdb")

ここで問題なのは、Driver=の部分なんだ。

これはODBC接続でデータベースに行っていることを示している。

このODBC接続に不具合があるようなんだ。

だから、これをOLDB接続に替えればうまくいくと思うよ。

その方法を書きに示しておくから参考にしてくれ!

con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;"


■参考サイト
[XL2000]DAO3.6でCopyFromRecordsetを使用するとデータが欠ける
http://support.microsoft.com/kb/414048/ja
ADOの接続文字列に設定するPROVIDERとDRIVERの記述方法の違い --Access Club 超初心者 FORUM--
http://www.accessclub.jp/bbs3/0222/superbeg70904.html

土曜日, 12月 13, 2008

[VB2005]2つのDataGridのスクロールを連動させる

▼質問
2つのDataGridのスクロールを連動させるにはどうしたら良いんだ。

DataGridのScrollイベントでスクロールのValue値を設定したんだがうまくいかないんだ。



Private Sub DataGrid2_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid2.Scroll
Dim obj As DataGrid = CType(sender, DataGrid)
CType(Me.DataGrid1.Controls.Item(0), HScrollBar).Value = CType(obj.Controls.Item(0), HScrollBar).Value
End Sub



スクロールだけ動いて、グリッドの内部が動かないんだ。

Refresh等のイベントを呼んでも駄目だったんだ。

どうしたらよいか教えてくれ!

▼回答
DataGridを継承した独自のクラスを作成するしか方法はないようだ。

独自クラスでスクロールを行うパブリックメソッドを作成して

引数にValue値を与えてそのメソッドの中でGridHScrolled

メソッドをコールすればいいんだ。



Public Class CustomDataGrid
Inherits DataGrid

'''
''' 水平スクロールバーのスクロールイベントを呼び出しNewValueを設定します。
'''

''' スクロールバーの新しい値
Public Sub GridHScroll(ByVal newValue As Integer)
Dim args As New ScrollEventArgs(ScrollEventType.LargeIncrement, newValue)
GridHScrolled(Me, args)
End Sub

End Class


■参考サイト
DataGrid内の指定された行までスクロールする: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/datagrid/gridvscrolled.html

▼質問
片方に垂直スクロールがあると少しずれるんだ。

どうしたらよいか教えてくれ!

▼回答
垂直スクロールを表示させてから、それを非表示にすればいいんだ。

Visibleは設定ができないようだから、次の例のようにWidthを0に設定すればいいんだが・・・。

CType(Me.DataGrid1.Controls.Item(1), VScrollBar).Width = 0

これだけでは駄目なんだ。

もうひとつ、連動する相手側のサイズをあらかじめスクロールの幅分だけ短くしてないとうまく

いかないから気をつけてくれ!

金曜日, 12月 05, 2008

[VBA]DAO or ADO の Close

▼質問
DAOやADOのデータベース接続で失敗した時に作成しようとしたDatabaseやRecordsetの

クローズがされているかチェックしてクローズしたいんだ。

どうやったらできるか教えてくれ!

▼回答
下記にそのサンプルを示しておくから参考にしてくれ!!



Dim db As Database
Dim rs As Recordset
If (Not rs Is Nothing) Then rs.Close
If (Not db Is Nothing) Then db.Close

[VBA]DAOからADOへの移植

■参考サイト
DAO から ADO への移植 1
http://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado.aspx
Takenoff Labs >> LotusScriptからRDBのデータをやりとりする
http://takenoff.com/notes/lotusscript/20081125002012.html
accessのVBAの記述についていくつか質問です。 - 教えて!goo
http://oshiete1.goo.ne.jp/qa432565.html

水曜日, 12月 03, 2008

[VBA]QueryTable

▼質問
QueryTableって何?

どうやって使うの?

▼回答
ODBCのデータソースを使って簡単にデータベースにアクセスできる関数なんだ。

サンプルを示しておくから参考にしてくれ!



If (Worksheets(シート名).QueryTables.Count <= 0) Then
With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース;UID=ユーザ;PWD=パスワード", _
Destination:=Worksheets(シート名).Range("A1"))
.Sql = Array("SELECT * FROM " & tableName)
.Refresh BackgroundQuery:=False
End With
  else
Selection.QueryTable.Sql = Array("SELECT * FROM " & tableName)
Selection.QueryTable.Refresh BackgroundQuery:=False
End If



■参考サイト
[XL97]外部データベースにアクセスする方法
http://support.microsoft.com/kb/408061/ja

▼質問
QueryTableを使って簡単にデータベースにデータを登録したいんだ。

どうやってできるか教えてくれ!

▼回答
サンプルを示しておくから参考にしてくれ!



maxRow = Worksheets(シート名).Range("A65536").End(xlUp).row
maxCol = Worksheets(シート名).Rows(1).End(xlToRight).Column
desCol = maxCol + 1

For Each objQuery In Worksheets(シート名).QueryTables
objQuery.Delete
Next

With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース名;UID=ユーザー;PWD=パスワード", _
Destination:=Worksheets(シート名).Cells(1, desCol))
.Sql = "DELETE FROM テーブル名 WHERE 条件)
.Refresh
Do While .Refreshing
DoEvents
Loop
.Parent.Names(.Name).Delete
.Delete
End With

Worksheets(シート名).Cells(1, desCol).ClearContents

For i = 2 To maxRow
strValue = ""
For j = 1 To maxCol
If (strValue <> "") Then strValue = strValue & ", "
strValue = strValue & "'" & Worksheets(シート名).Cells(i, j).Value & "'"
Next j
With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース名;UID=ユーザー;PWD=パスワード", _
Destination:=Worksheets(シート名).Cells(1, desCol))
.Sql = "INSERT INTO テーブル名 VALUES(" & strValue & ")"
.Refresh
Do While .Refreshing
DoEvents
Loop
.Parent.Names(.Name).Delete
.Delete
End With
Worksheets(シート名).Cells(1, desCol).ClearContents
Next i



■参考サイト
■QueryTables.Add/.Deleteと.Names().Delete - 半角チルダ
http://blog.goo.ne.jp/end-u/e/2fd0b68b8cb29e4b80dc7182a800fc9c


▼質問
Refreshで次のエラーが出るんだ。

「バックグラウンドでデータが更新中であるため、この操作は行えません。」

どうやったら回避できるか教えてくれ!

▼回答
それは、SQLの処理が終わる前に実行しているSQLの処理を止めるような

処理が実行されているからなんだ。

だから、SQLの実行が終了したのを確認してから次の処理を実行しなくてはいけないんだ。

そのサンプルを次に示しておくから参考にしてくれ!

Refreshの後に次のコードを書けばいいんだ。



Do While .Refreshing
DoEvents
Loop

金曜日, 11月 28, 2008

[VB2005]SaveFileDialog

▼質問
SaveFileDialogコンポーネントを使ってCSVファイルを保存しているんだけど

ディレクトリを変更して保存するとアプリケーションがフリーズするんだ。

どうしてか教えてくれ!

▼回答
SaveFileDialogコンポーネントを使ってディレクトリを操作するとSaveFileDialogコンポーネントの

InitialDirectoryが変わってしまうことが原因だと思うよ。

だから、次の様にInitialDirectoryのバックアップをしてから最後にまた戻せばいいんだ。


Dim bakDir As String = SaveFileDialog1.InitialDirectory

SaveFileDialog1.InitialDirectory = bakDir

日曜日, 11月 23, 2008

[SQL]記号文字列操作

▼質問
次の文字列を挿入・更新をSQL文でする方法がわからないから教えてくれ!

!"#$%&()=~{`+*}_?><\'

▼回答
挿入・更新はシングルクウォーテーションを2つ並べてSQL文を作ればいいんだ。


▼質問 次のSQL文を実行するとうまくカウントされないんだ。
SELECT COUNT(*) FROM テーブル名 WHERE フィールド = '!"#$%&()=~{`+*}_?><\'''

どうしたらできるか教えてくれ!

▼回答
LIKE文を使えばできるよ。

SELECT COUNT(*) FROM テーブル名 WHERE フィールド LIKE '!"#$%&()=~{`+*}_?><\%'

日曜日, 11月 09, 2008

[VB2005]EXCELの幅設定・折り返し設定

▼質問
EXCELの幅を設定したり、折り返し設定をしたいんだ。

どうやったらできるか教えてくれ!

▼回答
次を参考にしてくれ!

Dim xlApp As Object = CreateObject("Excel.Application")
Dim wWorksheet As Excel.Worksheet = CType(xlApp.ActiveWorkbook.ActiveSheet, Excel.Worksheet)

CType(wWorksheet.Cells(1, 1), Excel.Range).ColumnWidth = 10
CType(wWorksheet.Cells(1, 1), Excel.Range).WrapText = True
wWorksheet.Cells(1, 1) = "あいうえおかきくけこ"

木曜日, 10月 30, 2008

[EXCEL]ADO関連

▼質問
ADO(Microsoft Active X データ オブジェクト)の基本的な使い方を教えて欲しいんだ。

▼回答
基本的な使い方のサンプルを次に示しておくから参考にしてくれ!!

①参照設定あり
Microsoft ActiveX Data Objects 2.X Library

[変数宣言]
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

[オブジェクト生成]
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

②参照設定なし

[変数宣言]
Dim cn As Object
Dim rs As Object

[オブジェクト生成]
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

③Fieldsプロパティ
[書式]
recordset.Fields.Item(0)
recordset.Fields.Item("name")
recordset.Fields(0)
recordset.Fields("name")
recordset(0)
recordset("name")
recordset![name]

④上書きサンプル

strSQL = "SELECT COUNT(*) FROM " & strTBL & " WHERE フィールド名= 値"
Set rs = cn.Execute(strSQL)
count = rs.Fields(0)
rs.Close
If (count = 1) Then
'更新
strSQL = "SELECT * FROM " & strTBL & " WHERE フィールド名= 値"
rs.Open strSQL, cn, adOpenForwardOnly, adLockOptimistic 'SQL文を実行
rs!フィールド名= 値
rs.Update '更新(保存)
rs.Close
Else
'新規作成
strSQL = "SELECT * FROM " & strTBL
rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic 'テーブルを開く
rs.AddNew '新規レコードを追加する
rs!フィールド名= 値
rs.Update '更新(保存)
rs.Close
End If


■参考サイト
VB ADO 操作
http://www.red.oit-net.jp/tatsuya/vb/ADO.htm
アクセスVBA講座_ADO_Recordsetオブジェクトの作成
http://www.geocities.jp/cbc_vbnet/ADO/recordset.html

火曜日, 10月 21, 2008

[VB2005]OpenOfficeをエクセル(Excel)のように使用する

▼質問
VBでOpenOfficeのCalcをエクセル(Excel)のように操作したいんだ。

どうやったらできるかサンプルが欲しいんだ。

何か良い情報があったら教えてくれ!

▼回答
良さそうなサンプルがあったから試してみてくれ!

でも、サンプルはCalcじゃなくてWriterだけど・・・。

これで、雰囲気は掴めるかな?!

Calcのサンプルを作成してみたので参考にしてみてくれ!!


Sub HelloWorldExampleCalc()
Dim myCalc As Object, mySheet As Object, myCell As Object

myCalc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, dummyArray)
mySheet = myCalc.getCurrentController().getActiveSheet()
myCell = mySheet.getCellByPosition(0, 1)
myCell.String = OOoMess111
myCell = mySheet.getCellByPosition(0, 2)
myCell.Value = 100
myCell.CharColor = OOoRGB(0, 200, 0)
myCell = mySheet.getCellByPosition(0, 3)
myCell.Formula = "=A3*2"
myCell.CharWeight = OOOawtFontWeightBOLD
mySheet.getCellByPosition(0, 4).CellBackColor() = OOoRGB(0, 200, 0)
Dim oBorderLine As Object = CreateUnoStruct("com.sun.star.table.BorderLine")
Dim oTableBorder As Object = CreateUnoStruct("com.sun.star.table.TableBorder")
With oBorderLine
.Color = RGB(0, 0, 0)
.OuterLineWidth = 1
End With
With oTableBorder
.IsLeftLineValid = True
.IsTopLineValid = True
.IsRightLineValid = True
.IsBottomLineValid = True
.LeftLine = oBorderLine
.TopLine = oBorderLine
.RightLine = oBorderLine
.BottomLine = oBorderLine
End With
mySheet.getCellRangeByName("A2:B3").TableBorder() = oTableBorder
MsgBox(OOoMess105)
myCalc.close(True)
End Sub


インターフェイス・プロパティ・メソッドの一覧を表示するマクロがあったので、こちらも
参考にしてみてくれ!!


sub Main

Dim dbg As object
dbg = CreateUnoService("com.sun.star.sheet.SpreadsheetDocument")
MsgBox(dbg.Dbg_SupportedInterfaces)
MsgBox(dbg.Dbg_Properties)
MsgBox(dbg.Dbg_Methods)

end sub


■参考サイト
OOoMacros
http://www.ooomacros.org/index.php
OOoBasic/Tutorial/kakeibo/macro - ...?
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FTutorial%2Fkakeibo%2Fmacro
OpenOffice.org 操作術 第 3 回 中本担当分原稿 OpenOffice.org の表 ...
http://bd.tank.jp/nikkei/article3_1.pdf
7. 表計算ドキュメント (StarSuite 8 Basic プログラミングガイド) - Sun Microsystems
http://docs.sun.com/app/docs/doc/819-1332/faail?l=ja&a=view

土曜日, 10月 18, 2008

[VB2005]MonthCalendarのDateChangedイベントが周期的に発生する

▼質問
MonthCalendarでDateChangedイベントが周期的に発生するんだ。

これはどうしてなんだ?

▼回答
参考サイトより

カレンダーの本日を更新するために約2分間隔でマシン日付をチェックするために発生している
イベントに同期しているらしい。これは、MonthCalendarコントロールのバグらしい。

ユーザが明示的に操作した時にだけイベントを発生させたいなら、DateChangedではなく、DateSelectedイベントを使えばよいようだ。

確かに、DateSelectedイベントを使えば問題ないことがわかった。

DateChangedイベントとDateSelectedイベントの違いは何なんだ?と思って説明を並べてみた。

MonthCalendar.DateChanged イベント
MonthCalendar で選択された日付が変更された場合に発生します。

MonthCalendar.DateSelected イベント
ユーザーがマウスを使用して明示的に日付を選択した場合に発生します。

これを読む限り、通常操作の場合はDateSelected イベントを使えばよいことになるな!

DateChanged イベントを使うのはどんな時なのかと考えてみると、選択された特定の日に

何かをしたい時のイベント処理が考えられるのかな?!

よく考えると、単純に選択(操作)と変更(動作)の違いか!!

■参考サイト
MonthCalendar で予期せぬ DateChanged イベントが発生する
http://blogs.wankuma.com/jeanne/archive/2005/09/02/18244.aspx
DataGridViewの年月日項目に今日の日付が自動設定される?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=41347&forum=7

金曜日, 9月 26, 2008

[VB2005]Load後のイベント処理(初期表示処理)

▼質問
初期表示で特定のコントロールにフォーカスをしたいんだ。

そこで、Loadイベントの最後でFocusイベントを入れたんだが、うまくいかないんだ。

どうやったらできるか教えてくれ!

▼回答
フォームのイベントには、Loadイベントの後に実行されるイベントがあるんだ。

それは、フォームが初めて表示されるたびに発生するイベントなんだ。

だから、初期表示に1回だけ実行したい処理は、そこに入れればいいんだ。

そのイベントとは、Shownイベントだ。

■参考サイト
Form メンバ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form_members(VS.80).aspx

月曜日, 9月 15, 2008

[VB2005]DataGridの行の高さを固定にする

▼質問
DataGridの高さを固定にしたいんだ。どうやったらできるか教えてくれ!

▼回答
DataGridの高さを制御するには、Layoutイベントで高さを制御すればできるんだ。

行を追加する後に、現在値の高さをPreferredRowHeightプロパティに設定する。

LayoutイベントでSetRowHeight関数を呼んでやることで制御できる。

PreferredRowHeightプロパティに現在値(前回値)を設定する。

If (Me.DataGrid1.VisibleRowCount > 0) Then
Me.DataGrid1.PreferredRowHeight = _
GetRowHeight(i, Me.DataGrid1.PreferredRowHeight, Me.DataGrid1)
End If

行の高さを取得・設定する関数

Private Sub SetRowHeight()
'全行数分ループする
For i As Integer = 0 To Me.DataGrid1.VisibleRowCount - 1
If (Me.DataGrid1.PreferredRowHeight <> _
GetRowHeight(i, Me.DataGrid1.PreferredRowHeight, Me.DataGrid1)) Then
SetRowHeight(i, Me.DataGrid1.PreferredRowHeight, Me.DataGrid1)
End If
Next i
End Sub

Public Function GetRowHeight(ByVal Row As Integer, ByVal height As Integer, ByVal oDG As DataGrid) As Integer
Dim p As Reflection.PropertyInfo = _
GetType(DataGrid).GetProperty("DataGridRows", _
Reflection.BindingFlags.FlattenHierarchy Or _
Reflection.BindingFlags.IgnoreCase Or _
Reflection.BindingFlags.Instance Or _
Reflection.BindingFlags.NonPublic Or _
Reflection.BindingFlags.Public Or _
Reflection.BindingFlags.Instance Or _
Reflection.BindingFlags.Static)

Dim obj As Object = _
CType(p.GetValue(oDG, _
Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Static Or _
Reflection.BindingFlags.GetProperty Or Reflection.BindingFlags.Public Or _
Reflection.BindingFlags.SuppressChangeType, _
Nothing, Nothing, Nothing), Object)

If (Row < propertyinfo =" _" object =" _" type =" _" height =" height">



■参考サイト
VBレスキュー(花ちゃん)のVB.NET・VB2005用掲示板
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=7871&reno=7851&oya=7850&mode=msgview&page=0
DataGridの行の高さを文字列にあわせて設定する: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-27/15680.html

日曜日, 9月 14, 2008

[VB2005]DataGridの幅を固定にする(操作不可)

▼質問

DataGridのヘッダを表示すると列の幅が変更できるんだ。これを、固定表示にしたいんだ。

どうやったらできるか教えてくれ!

▼回答

DataGridには、列の幅を固定にするプロパティはないんだ。だから固定にはできないんだ。

だけど、カスタムコントロールを作成して列の幅の変更操作をできないようにすればできるよ。

その方法の一部を下記に示しておくから参考にしてくれ!

DataGridTextBoxColumnの参考例

Public MyWidth As Integer = 0
Public MyWidthFlag As Boolean = False

'''
''' コントロールの幅を取得または設定します。
'''

''' コントロールの幅。
Public Property CustomWidth() As Integer
Get
Return MyWidth
End Get
Set(ByVal value As Integer)
Me.MyWidth = value
End Set
End Property

'''
''' コントロールの幅を固定にできるかの有無を示す値を取得または設定します。
''' 幅を固定にできる場合は true。それ以外の場合は false。既定値は false です。
'''

''' コントロールの幅を固定にできるかの有無。
Public Property CustomWidthFlag() As Boolean
Get
Return MyWidthFlag
End Get
Set(ByVal value As Boolean)
Me.MyWidthFlag = value
End Set
End Property

Private Sub DataGridCustomTextBoxColumn_WidthChanged( _
ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.WidthChanged
Dim obj As DataGridCustomTextBoxColumn = _
CType(sender, DataGridCustomTextBoxColumn)
If (obj.MyWidthFlag) Then obj.Width = obj.MyWidth
End Sub


■参考サイト

DataGridの列の幅をユーザーが変更できないようにする: .NET Tips: C#, VB.NET, Visual Studio

http://dobon.net/vb/dotnet/datagrid/lockcolumnwidth.html

土曜日, 9月 13, 2008

[VB2005]DataGridBoolColumnのチェックボックスを制御する

▼質問
DataGridにチェックボックを表示するためにDataGridBoolColumnを使ってチェックボックスを

作成したんだけど、プログラムからチェックボックスのチェックを表示・非表示するやり方が

わからないんだ。どうやったらできるか教えてくれ!

▼回答
MouseClickイベントに下記のコードを記述すればできるから参考にしてくれ!!


Dim dg As DataGrid = CType(sender, DataGrid)
Dim row As Integer = dg.CurrentCell.RowNumber : Dim col As Integer = dg.CurrentCell.ColumnNumber
If (dg.TableStyles.Item(0).GridColumnStyles(col).GetType.Name = "DataGridBoolColumn") Then
Dim BoolColumn As DataGridBoolColumn = _
CType(dg.TableStyles.Item(0).GridColumnStyles(col), DataGridBoolColumn)
Dim Bind As BindingManagerBase = _
Me.BindingContext(DirectCast(dg.DataSource, DataTable))
Dim value As Boolean = False
Dim drv As DataRowView = _
CType(DirectCast(Bind.Current, DataRowView), DataRowView)
Dim value As Boolean = _
CBool(IIf(CType(BoolColumn.PropertyDescriptor.GetValue(drv), Boolean), _
False, True))
BoolColumn.PropertyDescriptor.SetValue(drv, value)
End If
BoolColumn.DataGridTableStyle.SelectionBackColor = SystemColors.Window


■参考サイト
VB コントロールのデータ連結
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database6.htm

金曜日, 9月 12, 2008

[VB2005]DataGridを編集可能で新規追加行(*行)を非表示にする

▼質問

DataGridを編集可能にすると新規追加行(*行)が表示されるんだ。

これを表示しないようにする方法はないのか教えてくれ!

▼回答

あるよ!下記のサイトを参考にしてくれ!

■参考サイト

DataGridの一番下の新しい行(*行)が表示されないようにする: .NET Tips: C#, VB.NET, Visual Studio

http://dobon.net/vb/dotnet/datagrid/allownew.html

おーすばらしい!!できた。

関数にしてみた。


Public Sub SetAllowNew(ByVal b As Boolean, ByVal oDG As DataGrid)
Dim objCurrencyManager As CurrencyManager = _
CType(oDG.BindingContext(oDG.DataSource, oDG.DataMember), CurrencyManager)
'DataViewを取得する
Dim objDataView As DataView = CType(objCurrencyManager.List, DataView)
'新しい行の追加を設定する
objDataView.AllowNew = b
End Sub
 
▼質問
「CurrencyManager」って何?
 
▼回答

オブジェクトのプロパティ値とコントロールのプロパティ値との間の単純バインディングの

リストを管理するオブジェクトらしい。

▼質問

新規追加行は表示されずに編集は可能になったんだけど・・・。

これだと、全てのセルが編集可能になってしまって困るんだ。

特定のセルだけを編集可能にするにはどうしたらいいの?

▼回答

DataGridのCurrentCellChangedイベント、MouseClickイベント、MouseDownイベント、

MouseUpイベントでカレントセルをチェックするればできるよ。

こんな関数を作成してみたから、参考にしてくれ!

各イベントで呼ぶだけでOKだ!!



Private Sub CheckCurrentCell(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs)
Dim dg As DataGrid = CType(sender, DataGrid)
Dim row As Integer = dg.CurrentCell.RowNumber
Dim col As Integer = dg.CurrentCell.ColumnNumber
Select Case dg.CurrentCell.ColumnNumber
Case 対象列番号
Case Else
End Select
End Sub

月曜日, 9月 01, 2008

[VB2005]SystemColorsからBrushの変換

▼質問
SystemColorsで使っている色をBrushクラスに変換したいんだ。どうしたらできるんだい。

▼回答
SolidBrushクラスを使用してやればできるよ。下記を参考にしてくれ!

Dim b As Brush = New SolidBrush(SystemColors.ActiveCaption)

月曜日, 8月 11, 2008

[VB2005]DataGridのセルの色替え

▼質問
DataGridのセルの色を替えたいんだけど・・・どうしたらできるの?

▼回答
DataGridTextBoxColumnを継承してオリジナルのクラスを作成すればできるよ。

細かいところは、次のサンプルを参照してくれ!!


Public Class DataGridCustomTextBoxColumn
Inherits DataGridTextBoxColumn

Private MyBackColor As Color = SystemColors.Window
Private MyForeColor As Color = SystemColors.WindowText

'/******************************************************************************/
' Paint処理
'/******************************************************************************/
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
ByVal bounds As Rectangle, _
ByVal [source] As CurrencyManager, _
ByVal rowNum As Integer, _
ByVal backBrush As Brush, _
ByVal foreBrush As Brush, _
ByVal alignToRight As Boolean)

'基本クラスのPaintメソッドを呼び出す。
MyBase.Paint(g, bounds, source, rowNum, _
New SolidBrush(MyBackColor), _
New SolidBrush(MyForeColor), alignToRight)

End Sub

'''
''' コントロールの背景色を取得または設定します。
'''

''' コントロールの背景色を表す System.Drawing.Color。
Public Property BackColor() As Color
Get
Return MyBackColor
End Get
Set(ByVal value As Color)
MyBackColor = value
End Set
End Property

'''
''' コントロールの前景色を取得または設定します。
'''

''' コントロールの前景色を表す System.Drawing.Color。
Public Property ForeColor() As Color
Get
Return MyForeColor
End Get
Set(ByVal value As Color)
MyForeColor = value
End Set
End Property

End Class

■参考サイト
DataGrid内の特定のセルの色を変える: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/datagrid/coloredcell.html

[VB2005]DataGridのDataGridBoolColumn

▼質問
DataGridにチェックボックスをDataGridBoolColumnを使って表示したんだが・・・

半透明の状態で表示されるんだ。どうしてか教えてくれ!

▼回答
DataColumnのDataTypeに、「GetType(Boolean)」が設定されているかチェックしてくれ!!

■参考サイト
@IT:.NET TIPS DataGridコントロールの入力項目でチェック・ボックスを使用するには? - C# VB.NET Windowsフォーム
http://www.atmarkit.co.jp/fdotnet/dotnettips/105dgchkbox/dgchkbox.html

水曜日, 8月 06, 2008

[VB2005]Application.myappのエラー

▼質問
既存の画面をコピーして画面を作成しようとしたら次のエラーがでるんだ。

「カスタム ツール エラー: ファイルの生成に失敗しました: XML ドキュメント (1,1) でエラーが発生しました。 Application.myapp」

どうしたら解決するか教えてくれ!

▼回答
俺には、わからんかった。(>_<)

結局、バックアップしてあったファイルを上書きして対処したよ!

▼追記
この問題の原因がわかった。(^^)v

プロジェクトファイル(「プロジェクト名.vbproj」)から下記のコードが削除されていることがわかった。


True
Application.myapp


これを、下記の前にコピーしたら解決した。


True
True
Resources.resx


■参考サイト
MyApplicationCodeGeneratorの警告 - MSDN フォーラム
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=324276&SiteID=7

木曜日, 7月 31, 2008

[VB2005]DataGridのヘッダとデータのスタイル

▼質問
DataGridのヘッダとデータのスタイルを変更することはできないの?

▼回答
できないよ!でも方法がないわけじゃないみたいだけど・・・。

参考サイトを覗いてみてくれ!!

この方法がいやなら、DataGridをヘッダとデータで分けて作成すればできるよ。

■参考サイト
DataGridの列ヘッダテキストの配置方法のみを変更する: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/datagrid/aligncolumnheaderonly.html

月曜日, 7月 28, 2008

[VB2005]DataGrid関連

▼質問
DataGridを追加すると紺色の帯が上の部分に表示されるんだけど?!

これは何?消せないの?

▼回答
グリッドの上部に表示できるキャプション(=タイトル)だよ。

消し方は、プロパティの「CaptionVisible 」を「False」に設定するか、次のコードを書くかどちらかだね!
Me.DataGrid1.CaptionVisible = False

▼質問
タイトルを表示したいんだけど・・・サンプルはないかな?

▼回答
とりあえず、次に示しておくから参考にしてくれ!

Dim objDataSet As New DataSet
Dim objDataTable As DataTable = New DataTable("objDataTable")

DataGrid1.TableStyles.Clear()
DataGrid1.DataSource = Nothing

Dim strName() As String = {"タイトル1", "タイトル2", "タイトル3"}
Dim intColumnWidth() As Integer = {50, 100, 150}
Dim TableStyle As DataGridTableStyle = New DataGridTableStyle()

For i As Integer = 0 To strName.Length - 1
'タイトル名称設定
Dim DataColumn As DataColumn = New DataColumn
DataColumn.ColumnName = strColumnName(i)
objDataTable.Columns.Add(DataColumn)
DataColumn.Dispose()
DataColumn = Nothing
'タイトルスタイル設定
Dim TextBoxColumn As DataGridTextBoxColumn = New DataGridTextBoxColumn
TextBoxColumn.MappingName = strName(i)
TextBoxColumn.HeaderText = strName(i)
TextBoxColumn.Width = intColumnWidth(i)
TableStyle.GridColumnStyles.Add(TextBoxColumn)
TextBoxColumn.Dispose()
TextBoxColumn = Nothing
Next i

TableStyle.MappingName = "objDataTable"
TableStyle.AllowSorting = False
TableStyle.HeaderFont = DataGrid1.HeaderFont
DataGrid1.TableStyles.Add(TableStyle)
TableStyle.Dispose()
TableStyle = Nothing

objDataSet.Tables.Add(objDataTable)
DataGrid1.DataSource = objDataSet.Tables("objDataTable")

▼質問
タイトルは、表示できたんだけど・・・。グリッドの左に表示されている列の幅を制御したいんだ!

どうしたらいいか教えてくれ!!

▼回答
それは、「行ヘッダー」って言うんだ。プロパティの「RowHeaderWidth」を設定すれば幅を制御

できるよ。行ヘッダーを非表示にしたい時は、「RowHeadersVisible」を「False」に設定すれば

非表示にできるんだ。「RowHeaderWidth」を、「0」に設定しても非表示にはならないから気を

つけてくれ!あと、15以下を設定しても幅は最小幅が決まっているので最小幅以下には変わら

ないから気をつけてくれ!

▼質問
今度は、データをグリッドに表示したいんだ。どうしたらいいの?

いろいろやってみたが、うまくいかないんだ!

DataGridの内容をDataSetにバインドできればできそうな気がするんだけど・・・。

▼回答
いいとこついてるね!それで、できるよ!

こうやってやればいいんだ。

Dim objDataSet As New DataSet
Dim objDataTable As DataTable = DirectCast(DataGrid1.DataSource, DataTable)
objDataSet.Tables.Add(objDataTable.Copy())

これで、データを追加する準備が整ったから、次に、このコードを書いて行が追加できるよ!

objDataTable.Rows.Add(New [Object]() {"データ1", "データ2", "データ3"})

▼質問
セルを選択すると選択した内容が反転表示するんだ。行毎で選択したいんだ!どうしたらいいの?

▼回答
DataGridの「Paint」イベントに次のコードを追加するとできるぞ!試してみてくれ!!

Me.DataGrid1.Select(Me.DataGrid1.CurrentCell.RowNumber)

■参考サイト
DataGrid コントロール (Windows フォーム)
http://msdn.microsoft.com/ja-jp/library/keb37h7b(VS.80).aspx
DataGridのレコードセレクタについて - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9895&forum=7
DataGridの中身をDataSetにテーブルとして保存する方法 (初心者) -OKWave
http://okwave.jp/qa2114885.html
@IT:.NET TIPS DataGridコントロールを行選択モードにするには? - C# VB.NET Windowsフォーム
http://www.atmarkit.co.jp/fdotnet/dotnettips/126dgselline/dgselline.html
Visual Basic .NET を使用して DataTable 間で DataRow をコピーする方法
http://support.microsoft.com/kb/305346/ja

金曜日, 7月 04, 2008

個人情報保護対策(定義・プライバシーポリシー/ステートメント)

■個人情報定義
個人情報ドットコム:個人情報保護対策:個人情報定義
http://www.kojinjoho.com/privacymesure/01.html

■プライバシーポリシー
個人情報ドットコム:個人情報保護対策:プライバシーポリシー
http://www.kojinjoho.com/privacymesure/02.html

■プライバシーステートメント
個人情報ドットコム:個人情報保護対策:プライバシーステートメント
http://www.kojinjoho.com/privacymesure/03.html