2006 年 6 月

2006 年 6 月に書いた日記。30 項目あります。

日記の概要

IShellLinkW インタフェース
まずは、Shortcut クラスを定義する。実は外部の COM クラスを定義するのは非常に簡単だ。クラスの定義に、ComImportAttribute …… (30日 20:57)
ショートカットの COM クラス
カラムが 1 つだけなら寂しいので、もう 1 つ、「リンク先」を表示するカラムを作ろう。ショートカットファイルのリンク先を表示 …… (29日 19:40)
ByteSizeColumn クラス
まず、バイトサイズのカラムの実装を、ColumnProvider から、独立したクラスであるByteSizeColumn に移そう。========== ByteSiz …… (28日 19:05)
複数カラム対応
次はリンク先を表示するカラムを作ろうと言いたい所だが、先に、先を見据えた軽いリファクタリングをしよう。IColumnProvider は …… (27日 19:27)
ファイルサイズの表示
今日はちゃんとファイルサイズを表示してみよう。ColumnProvider.cs を開き、GetColumnInfo の一部を以下のように書き換える。 …… (26日 22:37)
システムへの登録
さて、作った ColumnProvider をシステムに登録する。登録には 2 種類ある。COM ライブラリとしての登録と、シェルのカラムハン …… (25日 22:22)
ColumnProvider を作る
今日は、IColumnProvider のプロトコルを確認するため、IColumnProvider の実装系を作ってみよう。まず、プロジェクトのルートに …… (24日 22:04)
MarshalAs による文字列変換
もう 1 つ構造体が残っている。GetItemData メソッドに出てくる、SHCOLUMNDATA だ。以前も MarshalAsAttribute という属性が出て …… (23日 19:11)
型指定の列挙体
Initialize メソッドは終わった。次は、GetColumnInfo メソッドで定義されている、SHCOLUMNINFO 構造体だ。今までと同じように、 …… (22日 20:00)
構造体のパッキング
シェルのインタフェースには構造体が良く出てくる。これらは、インタフェースの皮をかぶった API だと考えてもいい程、低水準の …… (21日 22:28)
COM メソッドのシグネチャ
IColumnProvider のメソッドは IUnknown を除くと 3 つ。Initialize, GetColumnInfo, GetItemData の順だ。まず、MSDN ライブラ …… (20日 20:13)
IColumnProvider の枠組み
.NET では、API だけでなく、COM インタフェースもソースに定義することで利用することができる。Visual Basic で API を利用す …… (19日 18:24)
COM インタフェースと .NET
エクスプローラにカラムを追加するには、シェルで定義されている COM 用のインタフェースである、IColumnProvider を実装したク …… (18日 11:50)
プロジェクトの作成
開発環境には、そこそこ普及が進んでいる、Visual Studio .NET 2003 を使うことにしよう。ColumnProvider は、COM のインプロセ …… (17日 22:35)
シェルエクステンション
本来、シェルプログラミングは、COM とインタフェースを駆使するので、以前は Visual C++(ATL) や Visual Basic が主で、そこそ …… (16日 20:14)
エクスプローラ
Windows には explorer.exe と cmd.exe の 2 つのシェルがある。cmd.exe も進化してきたが、explorer.exe の進化は速い。explore …… (15日 18:54)
仕上げ
さて、仕上げをしよう。アドインは、「アドイン」一覧に表示されるが、そのときに表示されるタイトルやコメントは修正できる。 …… (14日 19:43)
アドイン用のイベント
アドインの場合、メニューへの追加だけでなく、メニューからの削除まできっちり行わなければならない。Workbook (ThisWorkbook) …… (13日 21:03)
メニューのハンドラ
昨日追加したメニュー項目には、まだ処理を関連付けていないため、選んでも何も起こらない。メニューに処理をさせるには 2 種類・ …… (12日 19:22)
メニューの登録
Excel のメニューは、Office で共通で利用されている、CommandBar クラスを中核に据える、複雑なクラス群で構築されている。メ …… (11日 23:30)
アドイン化
アドインを作るのは非常に簡単だ。「名前をつけて保存」を選択し、ファイルの種類から、「Microsoft Office Excel アドイン (*.x …… (10日 23:09)
ブックの分離
さて、アルゴリズムに関してはここまでとしよう。まだまだやりたいことはあるがきりがない。Nonogram.xls がだいぶ肥大化してき …… (9日 20:02)
PuzzleSolver #6: 飾り付け
だいぶ満足できるところまできたが、もう少し飾り付けをしよう。解答中の行を可視化したい。現在は、縦横のヒントを順に検索する …… (8日 19:12)
SolveAction: Solve マクロクラス
Solve マクロにクラスの皮を被せて、イベントを受け取れるように、SolveAction クラスを作成しよう。名前は重要でないので適当に …… (7日 19:14)
解答進捗の可視化
現在は、マクロを実行するといきなり結果が表示される。それはそれで急ぎのときは便利だが、デバッグ中や、進捗を視覚的に確認し …… (6日 19:20)
PuzzleSolver #5: 解けるまで解く
さて、PuzzleSolver はテスト仕様であり、今までは縦横のヒントを一度実行するだけだった。このままでは、一度行列のスキャンを …… (5日 18:58)
PuzzleLine #4: イベントの受け取り
これで 2 つのアルゴリズムが準備できた。PuzzleLine を改造し、状況によってアルゴリズムを切り替えて自動的に解答するようにす …… (4日 23:26)
すたぶ
(今日はグロッギー~) …… (3日 22:26)
IPuzzleLineSolver: 解法アルゴリズムの分離
さて、帰謬法を応用したの実装を導入したいところだが、PuzzleLine に追加して肥大化させるのはあまりよくない。複数のアルゴリ …… (2日 18:50)
帰謬法の実装
では、帰謬法の実装をしてみよう。1 セル確定するまで処理を行うメソッドを作ってみる。Function SolveLineByRaa( _  &nb …… (1日 22:01)


Copyright (c) 1994-2007 Project Loafer. All rights reserved.