<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns="http://purl.org/rss/1.0/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:cc="http://web.resource.org/cc/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
    xml:lang="ja">

    <channel rdf:about="http://note.phyllo.net/index.rdf">
    <title>フィロの村note</title>
    <link>http://note.phyllo.net/</link>
    <description>ここでは謎猫が学んだギリシャ語やプログラムをメモする場所になります。&lt;br /&gt;
内容はあまり期待しないほうが良いかもしれないです…ハイ。&lt;br /&gt;
あ、あとhttp://phyllo.net/本家&amp;lt;/a&amp;gt;も宜しく。</description>
    <dc:language>ja</dc:language>
    <admin:generatorAgent rdf:resource="http://lolipoblog.jp/?v=1.0"/>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=806887" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=806766" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=806750" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=806744" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=739281" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=739141" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=634535" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=634505" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=617808" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=617777" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=601089" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=590969" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=590269" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=578825" />
        <rdf:li rdf:resource="http://note.phyllo.net/?eid=563651" />
      </rdf:Seq>
    </items>
    </channel>

  <item rdf:about="http://note.phyllo.net/?eid=806887">
    <link>http://note.phyllo.net/?eid=806887</link>
    <title>C++メモ(Win32API)：カラーダイアログ</title>
    <description>
※先日C++(Win32API)を使った時に覚えた内容をメモしています。
　まだ勉強中なので、間違いがあればご指摘ください。 




　　




【カラーダイアログ表示関数】

BOOL ChooseColor(LPCHOOSECOLOR cc);
　第１引数：CHOOSECOLOR構造体
　戻り値　：成...</description>
<content:encoded><![CDATA[
<p>
※先日C++(Win32API)を使った時に覚えた内容をメモしています。<br />
　まだ勉強中なので、間違いがあればご指摘ください。 
</p>

<p>
<img src="http://note.phyllo.net/images/ColorDialog1.jpg" alt="カラーダイアログ" height="250" />
　　
<img src="http://note.phyllo.net/images/ColorDialog2.jpg" alt="カラーダイアログ" height="250" /><br />
</p>

<p>
<b>【カラーダイアログ表示関数】</b><br />
<pre class="code">
<b>BOOL ChooseColor(LPCHOOSECOLOR cc);</b>
　第１引数：CHOOSECOLOR構造体
　戻り値　：成否(True/False)
</pre>
</p>

<p>
<b>【CHOOSECOLOR構造体】</b><br />
<pre class="code">
Struct CHOOSECOLOR
&#123;
	DWORD		lStructSize		//構造体のサイズ
	HWND		hwndOwner			//ウィンドウハンドル
	HWND		hInstance			//インスタンスハンドル
	COLORREF		rgbResult			//初期カラー・選択カラー
	COLORREF*		lpCustColors		//カスタムカラー(16色まで)
	DWORD		Flags			//初期化フラグ
	LPARAM		lCustData			//フックプロシージャに渡すデータ
	LPCCHOOKPROC	lpfnHook			//フックプロシージャ(FlagsにCC_ENABLEHOOKが指定されている場合に動作)
	LPCTSTR		lpTemplateName		//リソース名称(FlagsにCC_ENABLETEMPLATEが指定されている場合に動作)
&#125;
</pre>
</p>
<p>
<b>【Flags(初期化フラグ)】</b><br />
<pre class="code">
CC_RGBINIT				//rgbResultを初期カラーに設定する
CC_FULLOPEN			//オープン時にカスタムカラー設定窓を開く
CC_PREVENTFULLOPEN			//「色の作成」ボタンを無効にする
CC_SHOWHELP			//ヘルプボタン「?」を表示
CC_ENABLEHOOK			//フックプロシージャを使う
CC_ENABLETEMPLATE			//リソースを利用する
CC_ENABLETEMPLATEHANDLE		//hInstanceを有効にする
CC_SOLIDCOLOR			//ソリッドカラーだけを表示する
CC_ANYCOLOR			//使用可能な全ての色を表示する
</pre>
</p>
<p>
<p>
<b>【ダイアログの位置】</b><br />
　　カラーダイアログの表示位置を指定するには、フックプロシージャを使う必要があります。<br />
　　ダイアログが作成されたとき(WM_INITDIALOG)に、MoveWindow関数で移動させます。
</p>

<br /><br />

<p><b>【サンプルコード】</b></p>
<pre class="code">
void Sumple()
&#123;
	//カスタムカラーを配列に格納(16色まで設定可能)
	COLORREF CustColors2[16];
	CustColors2[0]= RGB(255,0,0);
	CustColors2[1]= RGB(0,255,0);
	CustColors2[2]= RGB(0,0,255);
	
	//CHOOSECOLOR構造体
	CHOOSECOLOR cc;
	cc.lStructSize = sizeof(cc);
	cc.hwndOwner = NULL;
	cc.hInstance = NULL;
	cc.rgbResult = RGB(255,0,0);
	cc.lpCustColors = CustColors;
	cc.Flags = CC_RGBINIT | CC_ENABLEHOOK;
	cc.lCustData = NULL;
	cc.lpfnHook = CCHookProc;
	cc.lpTemplateName = NULL;
	
	//カラーダイアログ表示
	ChooseColor(&cc);
	
	//cc.rgbResultに選択した色が格納されます
&#125;

//フックプロシージャ
UINT CALLBACK CCHookProc(HWND hdlg,UINT msg,WPARAM wp,LPARAM lp)
&#123;
	switch(msg)
	&#123;
	case WM_INITDIALOG:
		//ダイヤログサイズを取得
		RECT rect;
		GetWindowRect(hdlg,&rect);
		SIZE sz;
		sz.cx = rect.right - rect.left;		//横幅
		sz.cy = rect.bottom - rect.top;		//縦幅

		//出力位置の設定
		POINT pnt;
		pnt.x = 100;
		pnt.y = 100;
	
		//ダイヤログ位置設置
		MoveWindow(hdlg , pnt.x , pnt.y , sz.cx , sz.cy , TRUE);
	
		//ダイアログのタイトルセット
		SetWindowText(hdlg,TEXT("カラーダイアログ"));
		
		break;
	default:
		return FALSE;
	&#125;
	return TRUE;
&#125;
</pre>

<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>C++</dc:subject>
    <dc:date>2008-09-21T19:02:23+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=806766">
    <link>http://note.phyllo.net/?eid=806766</link>
    <title>C++メモ(Win32API)：ホットキー(キー入力の監視)</title>
    <description>
※先日C++(Win32API)を使った時に覚えた内容をメモしています。
　まだ勉強中なので、間違いがあればご指摘ください。 


【ホットキーとは】
自分のアプリケーションのウィンドウがアクティブ状態でなくても監視されているキー。
ウィンドウのないアプリケーショ...</description>
<content:encoded><![CDATA[
<p>
※先日C++(Win32API)を使った時に覚えた内容をメモしています。<br />
　まだ勉強中なので、間違いがあればご指摘ください。 
</p>
<p>
<b>【ホットキーとは】</b><br />
自分のアプリケーションのウィンドウがアクティブ状態でなくても監視されているキー。<br />
ウィンドウのないアプリケーションの場合、「タイマーを使って0.1秒毎にGetKeyState()でキーを監視する」とかより断然効率的です。(ホットキー使うまでタイマー使ってました；)<br />
「ショートカットキー」とも呼ばれるらしいです。
</p>
<p>
<b>【ホットキー設置関数】</b><br />
<b>BOOL RegisterHotKey(HWND , HOT_KEY_ID , MOD_KEY , KEY);</b><br />
　第１引数：ウィンドウハンドル<br />
　第２引数：ホットキーのID<br />
　第３引数：キー修飾子(MOD_SHIFT , MOD_CONTROL , MOD_ALT)<br />
　第４引数：キー(A〜Zや0〜9など)<br />
　戻り値　：成否(True/False)
</p>
<p>
<p>
<b>【メッセージ】</b><br />
<b>WM_HOTKEY</b>メッセージ<br />
　ホットキーを押すとメッセージが飛んできます。<br />
　ウィンドウプロシージャのWPARAMにホットキーのIDが入ってきます。
</p>
<p>
<b>【ホットキー解除関数】</b><br />
<b>BOOL UnregisterHotKey(hwnd , HOT_KEY_ID);</b><br />
　第１引数：ウィンドウハンドル<br />
　第２引数：ホットキーのID<br />
　戻り値　：成否(True/False)
</p>
<p>
<b>【注意事項】</b><br />
他のソフト等で使用されているホットキーを新しく設定すると、<br />
元々使われていたホットキーが動作しなくなることがあります。<br />
例えば「Ctrl+A」を設定した場合、殆どのエディタ等で「全て選択」を行う「Ctrl+A」が機能しなくなります。
</p>

<br /><br />

<p><b>【サンプルコード】</b></p>
<pre class="code">
//マクロ定義
#define HOT_KEY_ID 100001

//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg, WPARAM wp, LPARAM lp)
&#123;
	switch(msg)
	&#123;
	case WM_CREATE:
		//Ctrl+1のホットキー設定
		RegisterHotKey(hwnd,HOT_KEY_ID,MOD_CONTROL,'1');
		break;
	case WM_HOTKEY:
		switch(wp)
		&#123;
		case HOT_KEY_ID:
			//
			//ホットキーが押されたときの処理
			//
			break;
		&#125;
		break;
	case WM_DESTROY:	
		//ホットキー解除
		UnregisterHotKey(hwnd,HOT_KEY_ID);
		break;
	default:
		return DefWindowProc(hwnd,msg,wp,lp);
		break;
		
	&#125;
	return 0;
&#125;
</pre>

<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>C++</dc:subject>
    <dc:date>2008-09-21T16:11:14+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=806750">
    <link>http://note.phyllo.net/?eid=806750</link>
    <title>C++メモ(Win32API)：タイマー</title>
    <description>
※先日C++(Win32API)を使った時に覚えた内容をメモしています。
　まだ勉強中なので、間違いがあればご指摘ください。


【タイマーの設定方法】
UINT_PTR SetTimer(HWND , TIMER_ID , SEC , TIMERPROC);
　第１引数：ウィンドウハンドル
　第２引数：タイマーのI...</description>
<content:encoded><![CDATA[
<p>
※先日C++(Win32API)を使った時に覚えた内容をメモしています。<br />
　まだ勉強中なので、間違いがあればご指摘ください。
</p>
<p>
<b>【タイマーの設定方法】</b><br />
<b>UINT_PTR SetTimer(HWND , TIMER_ID , SEC , TIMERPROC);</b><br />
　第１引数：ウィンドウハンドル<br />
　第２引数：タイマーのID<br />
　第３引数：タイムの間隔(1/1000秒単位)<br />
　第４引数：タイマのプロシージャ<br />
　戻り値　：成功(タイマーのID),失敗(0)
</p>
<p>
<b>【メッセージ】</b><br />
<b>WM_TIMER</b>メッセージ<br />
　指定秒毎にメッセージが飛んできます。<br />
　ウィンドウプロシージャのWPARAMにタイマーのIDが入っています。
</p>
<p>
<b>【タイマーの解除】</b><br />
<b>BOOL KillTimer(hwnd , TIMER_ID);</b><br />
　第１引数：ウィンドウハンドル<br />
　第２引数：タイマーのID<br />
　戻り値　：成否(True/False)
</p>

<br /><br />

<p><b>【サンプルコード１】</b></p>
<pre class="code">
//マクロ定義
#define TIMER_ID 100001

//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg, WPARAM wp, LPARAM lp)
&#123;
	switch(msg)
	&#123;
	case WM_CREATE:
		//タイマーセット
		SetTimer(hwnd , TIMER_ID , 5000 , NULL);
		break;
	case WM_TIMER:
		switch(wp)
		&#123;
		case TIMER_ID:
			//
			//タイマー処理
			//
			break;
		&#125;
		break;
	case WM_DESTROY:	
		//タイマー解除
		KillTimer(hwnd , TIMER_ID);
		break;
	default:
		return DefWindowProc(hwnd,msg,wp,lp);
		break;
	&#125;
	
	return 0;
&#125;
</pre>

<br /><br />

<p><b>【サンプルコード２】(タイマプロシージャ利用)</b></p>
<pre class="code">
//マクロ定義
#define TIMER_ID 100001

//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg, WPARAM wp, LPARAM lp)
&#123;
	switch(msg)
	&#123;
	case WM_CREATE:
		//タイマーセット
		SetTimer(hwnd , TIMER_ID , 5000 , (TIMERPROC)TimerProc);
		break;
	case WM_DESTROY:	
		//タイマー解除
		KillTimer(hwnd , TIMER_ID);
		break;
	default:
		return DefWindowProc(hwnd,msg,wp,lp);
		break;
	&#125;
	
	return 0;
&#125;
//タイマプロシージャ
BOOL CALLBACK TimerProc(HWND hwnd , UINT msg, WPARAM wp, LPARAM lp)
&#123;
	switch(msg)
	&#123;
	case WM_TIMER:
		switch(wp)
		&#123;
		case TIMER_ID:
			//
			//タイマー処理
			//
			break;
		&#125;
		break;
	default:
		return DefWindowProc(hwnd,msg,wp,lp);
		break;
	&#125;
	return 0;
&#125;
</pre>

<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>C++</dc:subject>
    <dc:date>2008-09-21T15:59:13+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=806744">
    <link>http://note.phyllo.net/?eid=806744</link>
    <title>VC++トラブルメモ：開発環境以外で動作しない</title>
    <description>
自分のPCでは正常にコンパイル、動作もしたのに、
別のPCで動作させようとすると以下のエラーメッセージが出てきました。





いろいろコードを弄ってみましたが…結局VisualStudio(ここでは2008)の設定が必要だった見たいなのでメモしておきます。


どうや...</description>
<content:encoded><![CDATA[
<p>
自分のPCでは正常にコンパイル、動作もしたのに、<br />
別のPCで動作させようとすると以下のエラーメッセージが出てきました。
</p>

<img src="http://note.phyllo.net/images/StartingErr.gif" alt="エラーメッセージ" /><br />

<p>
いろいろコードを弄ってみましたが…結局VisualStudio(ここでは2008)の設定が必要だった見たいなのでメモしておきます。
</p>
<p>
どうやらこのメッセージは、DLLが足りない時に出るものらしいです…；<br />
そういう内容で表示してくれよMS…<br />
ちなみにDLLはVSが保有しているもののようです。
</p>
<p>
解決するには、VSで以下の設定をする必要があります。<br />
<br />
まず、<br />
　　<b>[プロジェクト]→[○○のプロパティ]</b><br />
からプロパティページを開きます。<br />
<br />
プロパティページの左側にあるメニューから<br />
　<b>[構成プロパティ]→[C/C++]→[コード生成]</b><br />
を選択し、設定ページを開きます。
</p>
<img src="http://note.phyllo.net/images/setting1.jpg" alt="設定画面" /><br />
<p>
変更する箇所は<br />
　<b>[ランタイムライブラリ]</b><br />
だけです。<br />
<br />
[ランタイムライブラリ]プルダウンメニューには以下の項目があります。
</p>
<img src="http://note.phyllo.net/images/setting2.gif" alt="設定一覧" /><br />
<p>
初期設定だと<br />
　　「<b>マルチスレッドDLL(/MD)</b>」か「<b>マルチスレッドデバッグDLL(/MDd)</b>」<br />
になっていると思われます。<br />
<br />
これを<br />
　　「<b>マルチスレッド(/MT)</b>」か「<b>マルチスレッドデバッグ(/MTd)</b>」<br />
にしてコンパイルすれば、VSをインストールしていないPCでも正常に動作するようになるかと思います。<br />
</p>


<p>
ただ、この方法だとVSのDLLをexeに取り込んでしまいexeのファイルサイズが大きくなってしまいます。<br />
どうしてもサイズが気になるなら必要なDLLを探して、exeと別にdllを持たせないといけない…んでしょうか、はて？<br />
試していないのと、Cの理解度がまだ低いので、ちょっとわかりません；
</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>C++</dc:subject>
    <dc:date>2008-09-21T15:49:53+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=739281">
    <link>http://note.phyllo.net/?eid=739281</link>
    <title>ActionScript2.0メモ：イベント時のスコープ(変数の参照範囲)</title>
    <description>
クラス内でイベントを記述した場合、
呼び出すメソッド内から、クラス変数が参照できない問題があったのでメモしておきます。


class Test&amp;#123;
	var str:String = &quot;test&quot;;
	function Test(MC:MovieClip)&amp;#123;
		trace(&quot;output&quot; + val);
		//MC(MovieClip)を...</description>
<content:encoded><![CDATA[
<p>
クラス内でイベントを記述した場合、<br />
呼び出すメソッド内から、クラス変数が参照できない問題があったのでメモしておきます。
</p>
<pre class="code">
class Test&#123;
	var str:String = "test";
	function Test(MC:MovieClip)&#123;
		trace("output" + val);
		//MC(MovieClip)をクリック時、Methodメソッドを実行する
		MC.onPress = Method;
	&#125;
	
	function Method():Void&#123;
		trace(str);
	&#125;
&#125;
</pre>

<p>
上記のように、MovieClipのonPressイベントでMethodメソッドを呼び出して変数strを出力させようとしています。<br />
「test」が出力されることを期待して記述しましたが、実際にこれでは「undefined」が出力されてしまいます。
</p>
<p>
どうやらこれはスコープ(変数の参照範囲)が、イベントで呼び出したメソッド内では変わってしまうことが原因になるようです。
</p>
<p>
onPress等のイベントを記述する場合、「MC.onPress」のように記述するかと思いますが、<br />
このようにした場合、どうやら「MC」をスコープに指定されてしまうようです。<br />
</p>
<p>
従って、イベントで呼び出したメソッド内のstr変数はクラス変数の「str」ではなく、「MC.str」を読み出そうとして、そのために「undefined」になってしまうようです。
</p>
<br />
<p>
これを解決するためには、mx.utils.Delegateクラスを使う必要があります。<br />
記述方法は下記のようになります。
</p>
<pre class="code">
import mx.utils.Delegate;

class Test&#123;
	var val:String = "test";
	function Test(MC:MovieClip)&#123;
		trace("output" + val);
		//MC(MovieClip)をクリック時、Method関数を実行する
		MC.onPress = Delegate.create(this,Method);
	&#125;
	
	function Method():Void&#123;
		trace(val);
	&#125;
&#125;
</pre>
<p>
前述したコードとの違いは、クラス定義の前に「mx.utils.Delegate」をインポートしている点と、<br />
Delegate.createメソッドを介して、Methodメソッドを処理させている点だけです。
</p>
<p>
これにより、this(クラス自身)をスコープに指定して、メソッドを実行させることができます。
</p>
<br />
<br />
<p>また、setIntervalでも同じ現象が起きますが、</p>
<pre class="code">
setInterval(Delegate.create(this,Method) , 1000);
</pre>
<p>上記のように記述すれば、this(クラス自身)をスコープに指定して、実行させることができます。</p>
<hr />
<p>
私がActionScript2.0でクラスを扱うようになって1年ほどになりますが、この問題には長い間頭を悩まされました…<br />
だって私が持っている本にはスコープとかDelegateなんて載ってなくて…；<br />
こういうときはWebや公式のテキストが役に立ちますね。
</p>
<p>
ところで私が持ってるのがFLASH8なので未だActionScript2.0のメモです…；<br />
8で3.0使う方法ってないのでしょうか…？<br />
CS3の次のバージョンでたら買うかなぁ…？<br />
いつになるか分かりませんが…
</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>FLASH・AS</dc:subject>
    <dc:date>2008-07-13T18:09:57+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=739141">
    <link>http://note.phyllo.net/?eid=739141</link>
    <title>Excel&amp;amp;VBAメモ：Excelで作成した表を画像としてコピーする</title>
    <description>
会社の仕事でExcelで作成した表を画像としてコピーする方法を教えてもらいました。
今まで知らなかったのですが、Excelの標準機能で簡単に行うことができるんですね…！

使い方によっては便利そうなのでザッとですが、メモしておきます。

本記事の末尾にVBAのコー...</description>
<content:encoded><![CDATA[
<p>
会社の仕事でExcelで作成した表を画像としてコピーする方法を教えてもらいました。<br />
今まで知らなかったのですが、Excelの標準機能で簡単に行うことができるんですね…！<br />
<br />
使い方によっては便利そうなのでザッとですが、メモしておきます。<br />
<br />
本記事の末尾にVBAのコードもメモしておきます。(マクロで記録しても確認できますが)
</p>

<br />
<p style="font-size:20px; font-weight:bold">「Excel操作手順」</p>
<p>?表を作成します(オートシェイプを使ってもOK)</p>
<img src="http://note.phyllo.net/images/image071201.gif" width="200" height="150" border="1" /><br />
<br />
<p>
?オートシェイプも含めて選択し、普通のコピー操作と同じようにコピーします。<br />
?Shiftキーを押しながら、[編集]をクリックすると、「図の貼り付け」という項目がでてきます。
</p>
<img src="http://note.phyllo.net/images/image071202.gif" width="300" height="200" border="1" />
<img src="http://note.phyllo.net/images/image071203.gif" width="300" height="200" border="1" /><br />
<br />
<p>?「図の貼り付け」をクリックすると先ほど選択した範囲の表が画像として貼り付けられます。</p>
<img src="http://note.phyllo.net/images/image071204.gif" width="200" height="250" border="1" /><br />
<br />
<br />
<p>?-2　ちなみに「図のリンク貼り付け」をクリックしても画像は貼り付けできます。</p>
<img src="http://note.phyllo.net/images/image071205.gif" width="300" height="200" border="1" /><br />
<br />
<p>
?２つの違いですが、「図の貼り付け」は貼り付け後、完全に画像として扱われますが、<br />
　　「図の貼り付け」は貼り付け後も、元の表の変更が画像にも反映されます。<br />
※下画像の上は下の表、左下は「図の貼り付け」、右下は「図のリンク貼り付け」<br />
　　元の表を変更すると、「図のリンク貼り付け」で作成した画像にも反映されます。<br />
</p>
<img src="http://note.phyllo.net/images/image071206.gif" width="300" height="250" border="1" /><br />
<br />
<br />
<br />
<p style="font-size:20px; font-weight:bold">「VBAコード」</p>
<p>上記の作業をVBAで書くと下記のようなコードになります。</p>
<pre class="code">
'画像にする表の範囲を選択する
Range("B2:F6").Select	
'選択範囲をコピーする
Selection.Copy	
'貼り付け先セルを選択する
Range("B8").Select	
'選択したセルを画像として貼り付ける(Linkはリンクの有無(True/False))
ActiveSheet.Pictures.Paste(Link:=False)	
</pre>
<p>
見ての通りかなり単純です。<br />
「Pictures.Paste」関数でクリップボードに保存されたデータを出力しているだけのような気がします。<br />
</p>
<p>
そういえば、Excelの表をそのままコピーして、画像編集ソフトにそのままコピーできますし、<br />
それと同じようなものなんでしょうね。
</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>VB・VBA</dc:subject>
    <dc:date>2008-07-13T12:07:49+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=634535">
    <link>http://note.phyllo.net/?eid=634535</link>
    <title>PHPメモ：英字スパム対策(再修正)</title>
    <description>
以前にPHPでの英字スパム対策を書きましたが…
結局その方法ではすり抜けられたので、再度修正です。


//(修正前)
if(ereg(&quot;[^ -~]&quot;,&amp;#36;text))&amp;#123;
	//処理
&amp;#125;


上記では2バイト文字を含まない場合に拒否するようにしていましたが…
どうも、わざと2...</description>
<content:encoded><![CDATA[
<p>
<a href="http://note.phyllo.net/?eid=578825">以前</a>にPHPでの英字スパム対策を書きましたが…<br />
結局その方法ではすり抜けられたので、再度修正です。
</p>
<pre class="code">
//(修正前)
if(ereg("[^ -~]",&#36;text))&#123;
	//処理
&#125;
</pre>
<p>
上記では2バイト文字を含まない場合に拒否するようにしていましたが…<br />
どうも、わざと2バイト文字を数文字を含めてくる英字スパムがあったので…orz
</p>
<p>
今回は「ひらがな」を含む場合のみ処理するようにしました。<br />
まぁ結局数行の処理なんですけどね…
</p>
<pre class="code">
//(修正後)
//&#36;textにひらがな(あ〜ん)が含まれる時だけ処理を行う
if(mb_ereg_match("[あ-ん]",&#36;text))&#123;
	//処理
&#125;
</pre>
<p>
上記は正規表現で「あ〜ん」が含まれている場合に処理をするというものです。
</p>
<p>
前は無理に1バイト文字をチェックしていましたが…<br />
結局、英字スパムにはこれが一番効果がありそうです…(汗)
</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>PHP</dc:subject>
    <dc:date>2008-04-26T22:09:09+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=634505">
    <link>http://note.phyllo.net/?eid=634505</link>
    <title>VB6メモ：独自関数：アークタンジェント</title>
    <description>VB6で、角度を求めるAtn関数はイマイチ使い勝手が悪いので自作しました。
いや同様の関数はいろんなところで作られていますが敢えて自作しときます。

下記の関数はXとYの長さから0〜360度のラジアンを返します。
0〜720度を1度ずつテストしてみて一応問題はありませ...</description>
<content:encoded><![CDATA[
<p>VB6で、角度を求める<b>Atn関数</b>はイマイチ使い勝手が悪いので自作しました。</p>
<p>いや同様の関数はいろんなところで作られていますが敢えて自作しときます。</p>
<br />
<p>下記の関数はXとYの長さから0〜360度のラジアンを返します。</p>
<p>0〜720度を1度ずつテストしてみて<b>一応</b>問題はありませんでした。</p>
<br />
<p>もし利用される場合は、精度の高い計算には向いていないと思われるのでご注意を。</p>
<br />
<p>間違いがあればご指摘頂ければ有難いです。</p>
<pre class="code">
'0〜360度のラジアンを出力します(Atn2関数は出回っているので敢えてAtn3)
'※精度を要する処理には向きませんのでご注意を
Public Function Atn3(ByVal vX As Double, ByVal vY As Double) As Double
'引数：X軸長さ
'　　　Y軸長さ
'戻値：ラジアン値

    Dim wX  As Double
    Dim wY  As Double
    Dim wPI As Double
    
    wX = Round(vX, 12)      '小数12桁以下は四捨五入
    wY = Round(vY, 12)
    
    wPI = 4 * Atn(1)        '円周率
    
    If wX = 0 Then
        If wY > 0 Then      '0度
            Atn3 = wPI / 2
        ElseIf wY < 0 Then  '270度
            Atn3 = 3 * (wPI / 2)
        Else
            Atn3 = 0
        End If
        
        Exit Function
    End If
    
    If wY = 0 Then
        If wX > 0 Then      '90度
            Atn3 = 0
        ElseIf wX < 0 Then  '180度
            Atn3 = wPI
        Else
            Atn3 = 0
        End If
        
        Exit Function
    End If
    
    If wX > 0 And wY > 0 Then         '0〜90度
        Atn3 = Atn(wY / wX)
    ElseIf wX < 0 And wY > 0 Then     '90〜180度
        Atn3 = wPI + Atn(wY / vX)
    ElseIf wX < 0 And wY < 0 Then     '180〜270度
        Atn3 = wPI + Atn(wY / wX)
    ElseIf wX > 0 And wY < 0 Then     '270〜360度
        Atn3 = 2 * wPI + Atn(wY / wX)
    End If
    
End Function
</pre>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>VB・VBA</dc:subject>
    <dc:date>2008-04-26T21:38:08+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=617808">
    <link>http://note.phyllo.net/?eid=617808</link>
    <title>VB6メモ：独自関数：四捨五入</title>
    <description>本日、仕事のプログラミングで計算結果がどうしても微妙に値がずれてしまう不具合があったのでメモしておきます。
私はずっとRound関数が四捨五入の関数と思っていましたが、どうも違ったのですね。
調べてみるとRound関数は下記のような動きをするようです。


Roun...</description>
<content:encoded><![CDATA[
<p>本日、仕事のプログラミングで計算結果がどうしても微妙に値がずれてしまう不具合があったのでメモしておきます。</p>
<p>私はずっとRound関数が四捨五入の関数と思っていましたが、どうも違ったのですね。</p>
<p>調べてみるとRound関数は下記のような動きをするようです。</p>

<pre class="code">
Round(1.5)　⇒　2
Round(2.5)　⇒　2
</pre>
<p>このようになり、Round関数は<b>最も近い偶数</b>に丸められるようです。</p>
<p>これではちょっと困ってしまうので、独自関数を作りました。</p>
<p>Round関数と同じように小数桁も指定できるようにしています。</p>

<pre class="code">
'四捨五入(Roundは偶数に近い整数を返す関数の為)
Public Function Round2(ByVal num As Double, Optional ByVal digit As Long = 0) As Double
'引数：
'   num：四捨五入する数値
'   digit：四捨五入する小数点(省略可)
'戻値：
'   numを四捨五入した値

    Dim tmpNum As Double
    
    tmpNum = num * 10 ^ digit
    
    If tmpNum > 0 Then
        Round2 = Fix(tmpNum + 0.5) / 10 ^ digit
    ElseIf tmpNum < 0 Then
        Round2 = -Fix(-tmpNum + 0.5) / 10 ^ digit
    End If
    
    Exit Function

End Function
</pre>
<p>そんなに難しいものではありませんが解説しますと、四捨五入したい値に0.5を足してFix関数で小数点以下を切り捨てています。</p>
<br />
<p>ここでは独自関数を作りましたが、実はFormat関数を使えば四捨五入はできるそうです。</p>
<p>しかしFormat関数ではWindowsXPのSPなしでは正常に動作しないらしいので使う気になりませんでした。</p>
<br />
<p>ちなみにEXCEL関数のROUNDは四捨五入らしいです。…紛らわしいなあ…</p>
<p>VBはExcelVBAから入ったので余計に勘違いしていました。</p>
<p>Application.RoundUpとかApplication.RoundDownってVB関数じゃなくてExcel関数だったんですね。</p>
<p>四捨五入は良く使うのでちゃんと覚えておこう…</p>
<img src="http://phyllo.net/counter/GetCount.php?db=blogMo" />
]]></content:encoded>
    <dc:subject>VB・VBA</dc:subject>
    <dc:date>2008-04-11T22:20:32+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
<taxo:topics>
<rdf:Bag>
<rdf:li rdf:resource="http://jugem.jp/contents/theme.php?theme=13" />
</rdf:Bag>
</taxo:topics>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=617777">
    <link>http://note.phyllo.net/?eid=617777</link>
    <title>VB6メモ：独自関数：フォルダの有無</title>
    <description>先月「ファイルの有無」を紹介したので「フォルダの有無」です。
下記のコードではGetAttr関数で指定パスの属性を取得し、フォルダ(vbDirectory)かどうか判断します。
フォルダならTrueを返し、ファイルや存在しないパスならFalseを返します。


'フォルダの有無を確...</description>
<content:encoded><![CDATA[
<p>先月「<a href="http://note.phyllo.net/?eid=590269">ファイルの有無</a>」を紹介したので「<b>フォルダの有無</b>」です。</p>
<p>下記のコードでは<b>GetAttr関数</b>で指定パスの属性を取得し、フォルダ(<b>vbDirectory</b>)かどうか判断します。</p>
<p>フォルダならTrueを返し、ファイルや存在しないパスならFalseを返します。</p>

<pre class="code">
'フォルダの有無を確認
Public Function dirExist(ByVal dirPath As String) As Boolean
'引数：
'   dirPath：フォルダのフルパス
'戻値：
'  指定パスがフォルダならTrue
'  ファイルや存在しないパスならばFalseを返す

On Error GoTo func_err
    
    If GetAttr(dirpath) = vbDirectory Then
    	isDirExist = True
    Else
    	isDirExist = False
    End If

    Exit Function
func_err:
    isDirExist = False
End Function
</pre>
<p>独自で関数を作る場合は、例外処理をうまく使うことがポイントでしょうか？</p>
<p>どうもVBにない関数は作る際は例外処理を使うことが多い気がします。</p>
<br />
<p>ところでVBは使いたい機能がところどころ足りない気がしますねえ…</p>
<p>.NETの関数を使えばそのまま処理できるかと思いますが、私の職場はVB6主体なので自分で作る必要があります。</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>VB・VBA</dc:subject>
    <dc:date>2008-04-11T21:53:43+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
<taxo:topics>
<rdf:Bag>
<rdf:li rdf:resource="http://jugem.jp/contents/theme.php?theme=13" />
</rdf:Bag>
</taxo:topics>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=601089">
    <link>http://note.phyllo.net/?eid=601089</link>
    <title>VB6メモ：独自関数：DBクローズ</title>
    <description>VBの作法で、オブジェクトを変数に格納して使い終わった場合は下記のようにNothingを代入するのが作法だったかと思います。

Set data = Nothing

DAO等でDBをオープンした場合では、Close()＋Nothingの代入となり結構長い1文になりますよね。

If Not db IS Nothin...</description>
<content:encoded><![CDATA[
<p>VBの作法で、オブジェクトを変数に格納して使い終わった場合は下記のようにNothingを代入するのが作法だったかと思います。</p>
<pre class="code">
Set data = Nothing
</pre>
<p>DAO等でDBをオープンした場合では、Close()＋Nothingの代入となり結構長い1文になりますよね。</p>
<pre class="code">
If Not db IS Nothing Then
     db.Close()
     Set db = Nothing
End IF
</pre>
<p>
これでは毎回書くのはちょっと面倒なので、関数化させてみました。<br />
ただ普通に作っただけでは芸がないので、<br />
Database型の他に、Recordset型、QueryDef型でも使える関数にしてみました。(いうほど大したものではないが)<br />
</p>


<pre class="code">
'DBクローズ処理(Database型、Recordset型、QueryDef型で動作確認済み)
Public Function CloseDB(ByRef vDB As Object) As Boolean
'引数：
'   vDB：クローズするオブジェクト
'戻値：
'   クローズ処理の成否(true/false)
On Erro GoTo func_err
    
    If Not vDB Is Nothing Then
        vDB.Close
        Set vDB = Nothing
    End If
    
    CloseDB = True
    Exit Function
func_err:
    CloseDB = False
End Function
</pre>

<p>他にClose()で終了するオブジェクトがあれば使えるかもしれません。</p>

<p>
ところで関数化させはしましたが、今回のは大して有用性はない気がしないでもないッス…ι<br />
下記のように1行で書けば、これはこれでスッキリしますしねえ…？
</p>
<pre class="code">
If Not db IS Nothing Then db.Close() : Set db = Nothing
</pre>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>VB・VBA</dc:subject>
    <dc:date>2008-03-30T21:41:00+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
<taxo:topics>
<rdf:Bag>
<rdf:li rdf:resource="http://jugem.jp/contents/theme.php?theme=13" />
</rdf:Bag>
</taxo:topics>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=590969">
    <link>http://note.phyllo.net/?eid=590969</link>
    <title>VB6メモ：独自関数：配列の要素数</title>
    <description>
配列の要素数をしりたいときは普通、UBound関数で最大要素インデックスを求めて+1とするかと思います。
ただ困ったことにUBound関数は配列が未割り当ての場合にエラーになってしまいます。


それでは不便なので今回も独自関数を作りました。
簡単なので同じような...</description>
<content:encoded><![CDATA[
<p>
配列の要素数をしりたいときは普通、UBound関数で最大要素インデックスを求めて+1とするかと思います。<br />
ただ困ったことにUBound関数は配列が未割り当ての場合にエラーになってしまいます。<br />
</p>
<p>
それでは不便なので今回も独自関数を作りました。<br />
簡単なので同じような関数を作っている人もいるかと思いますが…<br />
ここは自分で作って勉強したいと思います。
</p>
<p>下記のコードの使用は自己責任でお願いします。</p>
<pre class="code">
'配列の要素数を返す(2次引数は省略可能)
Public Function arryElmntCnt(ByRef vArray As Variant, _
                             Optional ByVal dimensionNo As Long = 1) As Long
'引数：
'     vArray：配列
'     dimensionNo：次元インデックス(省略可)
'戻値：
'     指定した次元の要素数を返します。

On Error GoTo func_err

    If IsArray(vArray) And dimensionNo > 0 Then
        '配列であり、階層が1以上の場合
        arryElmntCnt = UBound(vArray, dimensionNo) + 1
    Else
        GoTo user_err
    End If

    Exit Function
func_err:
    '要素がない場合
    arryElmntCnt = 0
    Exit Function
user_err:
    '引数が不正値の場合
    arryElmntCnt = -1
End Function
</pre>
<p>
上記のコードで配列の<b>要素数</b>(最大要素インデックスではない)が取得できます。<br />
配列が見割り当ての場合は0を返します。
</p>

<p>
ちなにみVariant型をつかっているので、String/Long/Integer…なんの配列でも処理できると思います。<br />
ただしVariant型はメモリを結構使うらしいので、少し処理速度に問題があるかもしれません。<br />
気になるようでしたら利用内容に合わせて「vArray As Variant」を「vArray() As String」等に変更してください。
</p>
<p>
あと、Variant型は何でも格納できるようなので、引数として配列以外のものを入れることができてしまいます。<br />
この場合はエラー値として-1を返すようにしています。
</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>VB・VBA</dc:subject>
    <dc:date>2008-03-18T22:00:33+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
<taxo:topics>
<rdf:Bag>
<rdf:li rdf:resource="http://jugem.jp/contents/theme.php?theme=13" />
</rdf:Bag>
</taxo:topics>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=590269">
    <link>http://note.phyllo.net/?eid=590269</link>
    <title>VB6メモ：独自関数：ファイルの有無</title>
    <description>ちょっと控えておけば便利かもしれない独自関数をメモしておきます。

VBやVBAにはファイルの存在の有無を確認する関数がありません。(.NETならあったかもしれませんが)
となると、自分で作るしかないので作ってみました。意外と簡単にできました。
ｔｘｔ，ｘｌｓ，...</description>
<content:encoded><![CDATA[
<p>ちょっと控えておけば便利<b>かもしれない</b>独自関数をメモしておきます。</p>
<p>
VBやVBAにはファイルの存在の有無を確認する関数がありません。(.NETならあったかもしれませんが)<br />
となると、自分で作るしかないので作ってみました。意外と簡単にできました。<br />
ｔｘｔ，ｘｌｓ，ｍｄｂ等で動作は確認しています。
</p>
<p>
簡単なものですが、下記のコードの使用は一応自己責任でお願いします。<br />
</p>

<pre class="code">
Public Function fileExist(ByVal filePath As String) As Boolean
'引数：
'   filePath：ファイルパス
'戻値：
'  ファイルが存在すればTrue
'  存在しなければFalseを返す

    Dim n As Integer
On Error GoTo func_err
    
    n = FreeFile
    Open filePath For Input As #n    'ファイルが開ければ存在すると判断
    Close #n
    
    isFileExist = True
    Exit Function
func_err:
    isFileExist = False
End Function
</pre>

<p>
上記のコードはとりあえずファイルを開いて存在の有無を確認するものです。<br />
開ければTrueを返し、開けずエラーが発生すればFalseを返すということになります。
</p>

<p>
VBは仕事でしか使っていないので
試してはいませんが…<br />


ファイルがロックされているときは、開けずにFalseを返すのではないかと思います。<br />
画像ファイルの有無も試していません。<br />
そのうち試しておこうと思います。(08/03/30jpg画像での動作も確認しました)
</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>VB・VBA</dc:subject>
    <dc:date>2008-03-17T22:13:57+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
<taxo:topics>
<rdf:Bag>
<rdf:li rdf:resource="http://jugem.jp/contents/theme.php?theme=13" />
</rdf:Bag>
</taxo:topics>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=578825">
    <link>http://note.phyllo.net/?eid=578825</link>
    <title>PHPメモ：英字スパム対策(修正)</title>
    <description>修正しました。

だいぶ前ですが、フィロの村のPHPで作った掲示板とリンク依頼に大量の英字スパムが来たので対策をした内容のメモです。
実は以前に同内容の記事を書いていましたが、すり抜けれるようだったので修正したのもです。
まぁ1行だけで済むコードなんですけ...</description>
<content:encoded><![CDATA[
<p><a href="http://note.phyllo.net/?eid=634535">修正しました。</a></p>
<p>
だいぶ前ですが、<a href="http://phyllo.net/">フィロの村</a>のPHPで作った掲示板とリンク依頼に大量の英字スパムが来たので対策をした内容のメモです。<br />
実は以前に<a href="http://note.phyllo.net/?cid=30303">同内容の記事</a>を書いていましたが、すり抜けれるようだったので修正したのもです。<br />
まぁ1行だけで済むコードなんですけどねーι
</p>
<p>
以下のコードは前回書いた「日本語が含まれているかチェック」するものです。
</p>

<pre class="code">
//(修正前)
//&#36;textに数字と英字、記号以外が含まれる時だけ処理を行う
if(mb_ereg_match("[^0-9a-zA-Z!-/]",&#36;text))&#123;
	//処理
&#125;
</pre>

<p>
前回はこれで対処できていると思っていたのですが、どうもこの正規表現(<b>[^0-9a-zA-Z!-/]</b>)だと一部の記号が入ればすり抜けられるようでした。<br />
以下は修正したコードです。<br />
</p>

<pre class="code">
//(修正後)
if(ereg("[^ -~]",&#36;text))&#123;
	//処理
&#125;
</pre>

<p>
これはPHPというか正規表現の修正ですね。<br />
<a href="http://e-words.jp/p/r-ascii.html" target="_blank">ASCIIコード</a>の並びを調べるとわかりますが、結構対象から外れる記号があったようです。<br />
下記に正規表現について簡単にまとめておきます。
</p>

<pre class="code">
*		0 回以上の繰り返し
+		1 回以上の繰り返し
?		0又は1回の繰り返し

-		範囲
^		以外にマッチ

[0-9]		数字にマッチ
[a-zA-Z]		英字にマッチ
[!-/]		!"#&#36;%&'()*+,-./にマッチ
[ -~]		半角文字全て(スペース〜チルダ)にマッチ
</pre>

<p>
相変わらず説明下手ですが、以上です。<br />
…あれ？PHPメモというか正規表現メモになってないか…？
</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>PHP</dc:subject>
    <dc:date>2008-03-02T11:21:38+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
  </item>

  <item rdf:about="http://note.phyllo.net/?eid=563651">
    <link>http://note.phyllo.net/?eid=563651</link>
    <title>C#.NETメモ：リストボックスの並び替え</title>
    <description>
ドラッグ＆ドロップでリストボックスを並び替える方法をメモしておきます。
先日作ったソフトの操作性を上げる為に書いたものです。
なるべくこういうのは自分で考えて書くようにしてるので、もっと良い書き方は他にあるかもしれませんが…。


以下にコードを記し...</description>
<content:encoded><![CDATA[
<p>
ドラッグ＆ドロップでリストボックスを並び替える方法をメモしておきます。<br />
先日作った<a href="http://phyllo.net/soft/FcEditor/">ソフト</a>の操作性を上げる為に書いたものです。<br />
なるべくこういうのは自分で考えて書くようにしてるので、もっと良い書き方は他にあるかもしれませんが…。
</p>
<p>
以下にコードを記しておきます。<br />
今回はListBoxを継承して使っています。<br />
</p>

<pre class="code">
public class MyListBox : ListBox
&#123;
    int listSelectNo;
    public MyListBox()
    &#123;
        string[] str = &#123;"aaa", "bbb", "ccc", "ddd", "eee"&#125;;
        this.Items.AddRange(str);

        //イベント設定
        this.MouseDown += new MouseEventHandler(MyListBox_MouseDown);
        this.MouseUp += new MouseEventHandler(MyListBox_MouseUp);
    &#125;

    //移動元の項目をマウスを押す
    private  void MyListBox_MouseDown(object sender, MouseEventArgs e)
    &#123;
        //移動元のインデックスを取得
        ListBox list = (ListBox)sender;
        listSelectNo = list.SelectedIndex;
    &#125;

    //移動先の項目でマウスを離すと項目移動
    private void MyListBox_MouseUp(object sender, MouseEventArgs e)
    &#123;
        //移動先のインデックスを取得
        ListBox list = (ListBox)sender;
        int listChangeNo = list.SelectedIndex;
        object tmpData;

        //移動元のデータを取得
        tmpData = list.Items[listSelectNo];

        //移動元のデータを削除
        list.Items.RemoveAt(listSelectNo);

        //移動先にデータを追加
        list.Items.Insert(listChangeNo, tmpData);

        //選択先のインデックスを指定
        list.SelectedIndex = listChangeNo;
    &#125;
&#125;
</pre>
<p>
内容は以上のコードの通りです。<br />
マウスを押して指定した項目を一時保存して、マウスを離した位置に移動させます。<br />
各関数の内容は以下の通りです。
</p>

<pre class="code">
ListBox.Items.Insert(インデックス,データ)
　　→インデックスの位置にデータと項目として追加します。

ListBox.RemoveAt(インデックス)
　　→インデックスの位置の項目を削除します。
</pre>

<p>
それにしても.NETは便利ッスね。<br />
私でもこれくらい簡単に書けてしまう。<br />
ただし半端なく起動が遅いのが難点ですよね。<br />
C++のほうも覚えたいなあ…。
</p>
<img src="http://phyllo.net/counter/GetCount.php?db=noteMo" />
]]></content:encoded>
    <dc:subject>C#</dc:subject>
    <dc:date>2008-02-11T17:40:53+09:00</dc:date>
    <dc:creator>謎猫</dc:creator>
    <dc:rights>謎猫</dc:rights>
<taxo:topics>
<rdf:Bag>
<rdf:li rdf:resource="http://jugem.jp/contents/theme.php?theme=13" />
</rdf:Bag>
</taxo:topics>
  </item>

</rdf:RDF>