SplitContainerの自動生成コード不具合

C#

※この現象はVisualStudio2005(.NET Framework 2.0),2008(.NET Framework 3.5)で発生、2010(.NET Framework 4.0)で発生しないことを確認しました。 SplitContainer(パネルの中身を2分割して境界線を自由に移動できるやつです)でデザイナの不具合を発見した…

HTMLのダウンロードとパーズ

HTMLのダウンロード 左の図のようなフォームを作成し、ボタンクリックのイベントハンドラに下記のコードを追加すると、textBox1に設定されたURLからファイルをダウンロードし、内容をtextBox2に表示します。 // httpでHTMLを取得 HttpWebRequest webRequest …

サブクラス化で機能拡張を行う

動機 Excel上で、セルの選択範囲が変化した際には、SheetSelectionChangeイベントが発生し、以下のようなハンドラを設定していれば、セルの選択範囲を認識することができます。 private void Application_SheetSelectionChange(object Sh, Excel.Range Targe…

Visual Studioでスマートデバイスプロジェクトが作成できない?

久々にWindowsMobileなプログラムでも作ろうかと思ったら、VisualStudio で新規プロジェクトを作れない。全部作れないわけじゃなくてスマートデバイスプロジェクトだけが作れない。調べてみたら、IE8が入っていると引っかかるらしい。こないだのWindowsUpdat…

半透明画像の重ね合わせ

C#

ベースとなるフォームの上に、半透明のフォームを重ね合わせたフォームを作成します。 まず、ベースとなるフォームを作成します。 ピクチャボックスと、透明度を調節するためのスライダーを配置します。 次に、重ね合わせフォームを作成します。 ウインドウ…

EXCELに画像をドラッグする。

C#

.Netアプリケーションから、EXCELにも受け取れる形で画像をドラッグする際、通常は、DataObjectを作成し、SetImageメソッドで、Imageクラスを渡します。 ところが、この方法だと、透過色が設定できるイメージ(GIFファイルなど)の透過色情報が抜け落ちます…

任意の形のウィンドウを作る

デスクトップアクセサリや、ガジェットを作成する場合は、ウインドウを任意の形に変更したいと考えることが多いと思います。ここでは、2通りの方法を説明します。 System.Windows.Forms.Form.TransparencyKeyプロパティを使う おそらく最も簡単な方法だと思…

BitmapData.Strideプロパティ

コメント欄にて情報を頂きましたので、追記しておきます。 1行のバイト数を取得するBitmapData.Strideプロパティという便利なものがあるということで、早速使ってみました。 int width = this.bitmap.Width; int height = this.bitmap.Height; int strideIn …

ビットマップのデータ構造

前エントリに示したコードのバグ 前エントリの最後に書いたバグの話です。 前エントリで示したコードでは、壁紙サイズ等の無難なサイズの画像ではうまく動きますが、半端な画像サイズでは、以下のように、出力結果が不正となります。 実際にどのような画像で…

処理時間の計測

C#

下準備 前エントリで使用したコードを用いて、実際にどの程度の処理時間を要するかを知るための方法を示します。計測結果を表示するために、フォーム上にラベルを作成しておいてください。 System.Diagnostics.Stopwatchクラス // 処理時間計測開始 Stopwatc…

処理時間の短縮

C#

注意点 本節での処理時間計測は、Releaseビルドのデバッグなしで実行しています。 現状の把握 まずは現状のソースファイルですが、以下のようになっているかと思います。 // 処理時間計測開始 long cntStart = 0; QueryPerformanceCounter(ref cntStart); un…

フルカラービットマップからグレースケールビットマップへの変換

下準備(プロジェクトの作成) Winfowsフォームアプリケーションを新規作成します。プロジェクト名は、ImageFiltersとしておきます。 以下のようなフォームを作成します。 ボタンを2つ、パネルを1つ、(パネル内に)ピクチャボックスを1つ配置します。 2つのボタ…

再帰テンプレート

C++

今年の仕事始めの日に、「午前中いっぱい(3H)で、何かプログラム書け」というイベントがあったのですが、その時に使ったネタを書いておきます。 数列の計算 単純な数列として、0..nまでの和、nの階乗、フィボナッチ数列などがありますが、例えば、0..nまでの…

Excelでセルの編集状態を認識する

Excelにてセルが編集状態を開始・終了したタイミングをイベントとして認識する方法です。 弊社のHP内の技術情報ページにて掲載しておりますので、リンクを張っておきます。Excelでセルの編集状態を認識する

実用的アプリケーションの開発(Outlook編)

何を作るか? 連絡先にWebページアドレスが指定されていた場合は、アイテム表示ウインドウ内でWebページを表示できるようにします。 プロジェクトの作成 [ファイル]⇒[新規作成]⇒[プロジェクト]から、[Outlook 2007 アドイン]を作成します。 [プロジェクト]⇒[…

実用的アプリケーションの開発(Excel編)

何を作るか? カスタム作業ウインドウでボタンを押すと、Excelブック内のシートに帳票フォーマットを生成する、ドキュメントレベルのVSTOアプリケーションを作成します。 プロジェクトの作成 [ファイル]⇒[新規作成]⇒[プロジェクト]から、[Excel 2007 ブック]…

実用的アプリケーションの開発(Word編)

何を作るか? ニュース記事のRSSフィードを読み込んで、Wordドキュメントを生成する、ドキュメントレベルのVSTOアプリケーションを作成します。 プロジェクトの作成 [ファイル]⇒[新規作成]⇒[プロジェクト]から、[Word 2007 ドキュメント]を作成します。 ドキ…

ドキュメントを単独で開けないようにする

VSTOを使用したOfficeアプリケーションを、より大きなアプリケーションの一部で使うようになった場合、生成されたOfficeドキュメントに直接触られると困ることがあります。 ここでは、Excelにアドインでパスワード認証をつけておき、上位アプリケーションか…

文字列に対する文字単位での書式変更

本文の文字列(Word編) Wordドキュメントプロジェクトを新規に作成し、ドキュメント上にボタンを1つ置きます。その後、ボタンをダブルクリックし、以下のようなコードを記述します。 起動直後は以下のようになっています。 その後、ボタンを押すたびに、文字…

カスタム作業ウインドウのリサイズに応じてスクロールバーを出す

カスタム作業ウインドウはリサイズ可能ですが、内部のコントロールを考慮してはくれないので、そのままでは問題が出る場合があります。これを回避するための方法を示します。 Excelアドインプロジェクトを新規に作成し、カスタム作業ウインドウを実装します…

印刷不可にする

印刷不可にする(Excel編) Excelアドインプロジェクトを新規に作成します。 ThisAddIn.csのコードを開き、スタートアップイベントハンドラ(ThisAddIn_Startup)に、印刷をキャンセルするコードを追加します。 変更を加えたコードは以下となります。 private vo…

Excelのセル操作

文字とセル Excelアドインプロジェクトを新規に作成します。 セルのダブルクリックに対応するイベントハンドラを実装します。 private void ThisAddIn_BeforeDoubleClick(object s, Excel.Range Target, ref bool Cancel) { } 作成したイベントハンドラを登…

オートシェイプ

オートシェイプの作成(Excel編) オートシェイプの作成は、Excel.Shapesクラスの各メソッドを使用して行います。ここでは、代表的な3つのメソッドについて、具体例を示します。 AddShapeメソッド Excelブックプロジェクトを選択し、ドキュメントを新規に作成…

コントロールとドキュメントの連携

コントロールからドキュメントへのドラッグ&ドロップ 新規にExcel 2007 ブックプロジェクトを作成し、カスタム作業ウインドウを作成します。カスタム作業ウインドウにラベルを配置し、複数行にまたがるテキストを表示させておきます。 まず、テキストのクリ…

リボン

カスタムリボンの追加(ビジュアルデザイナ) [ファイル]⇒[新規作成]⇒[プロジェクト]⇒[Excel 2007 アドイン]を選択し、OKを押します。 [プロジェクト]⇒[ユーザーコントロールの追加]⇒[新しい項目の追加]⇒[ユーザーコントロール]を選択し、追加を押します。 コ…

カスタム作業ウインドウ

アプリケーションレベルのカスタム作業ウインドウ(アクションペイン) [ファイル]⇒[新規作成]⇒[プロジェクト]⇒[Excel 2007 アドイン]を選択し、OKを押します。 [プロジェクト]⇒[ユーザーコントロールの追加]⇒[新しい項目の追加]⇒[ユーザーコントロール]を選択…

作成したVSTOアプリケーションをmsi形式で配布する

セットアッププロジェクトの作成 既存のVSTOソリューションを開き、新しいプロジェクトを追加します。 [その他のプロジェクトの種類]⇒[セットアップと配置]⇒[セットアッププロジェクト]を選択します。 OKボタンで確定すると、セットアッププロジェクトが作成…

作成したVSTOアプリケーションをClickOnceで配布する

ウィザードを用いて発行 適当なVSTOアプリケーションのソリューションを開いた後で、Officeドキュメントを含むプロジェクトの右クリックメニューから、[発行]を選択します。 すると、ウィザード形式での設定が始まります。 アプリケーションの発行場所はデフ…

プライマリ相互運用アセンブリ

プライマリ相互運用アセンブリとは? プライマリ相互運用アセンブリとは、Microsoft Office アプリケーションのCOMベースのオブジェクトモデルと、.NET Frameworkのマネージドコードを相互運用出来るように橋渡しをしてくれるアセンブリの総称です。 VSTOで…

OutlookでHello World!

プロジェクトの作成 [ファイル]⇒[新規作成]⇒[プロジェクト]からOutlookアドインを選択し、プロジェクトを作成します。 Outlookフォーム領域の追加 ソリューションエクスプローラの右クリックメニューから、[追加]⇒[新しい項目]を開きます。 以下のようなダイ…