C#

DateTime.MinValue や new DateTime() は危険

C#

昨日、コロナ接触確認アプリ COCOA が、バージョンアップで起動不能になる と言う現象が確認されたらしく、この問題の検証が GitHub 上で行われていました(COCOA v1.4.0 が起動しない - Issue #517 - cocoa-mhlw/cocoa)。この Issue によると、原因は .NET…

Visual Studio 2019 と新 csproj への移行

2019 年 4 月 2 日、Visual Studio 2019 が正式版としてリリース (GA: General Available) されました。この記事では、 Visual Studio 2019 に関連する内容として、C# の新しいプロジェクト形式 (csproj) への移行について記載します。新 csproj 自体は Visu…

Ghostscript を C# から利用するためのライブラリ

先日、7-Zip ライブラリとしての CubeICE と言う記事を公開しましたが、ライブラリ化の試みは CubePDF シリーズでも行っています。CubePDF シリーズは Cube.Pdf と言うリポジトリで管理しており、ライブラリ部分は Libraries に、最終的なアプリケーション部…

Windows アプリ開発で利用している Web サービス

近年は GitHub を始めとした Version Control Systems (VCS) のホスティングサービスと連携する形で、プログラミングやソフトウェア開発に関する様々な Web サービスが提供されています。私は専ら Windows のデスクトップ・アプリケーションを開発しています…

Microsoft Ribbon のグラデーション効果を削除する

現在、Microsoft Ribbon for WPF を使用したアプリケーションを作成しているのですが、デザインを詰める段階になって、なかなかしんどい事態に遭遇しました(参考:残念なMS Ribbonについて - DICOM Viewer 開発記)。例えば、Ribbon の背景色をデフォルト色…

ページ番号とインデックス

細かい話なんですが、どうインターフェースを定義しようか頭を悩ませてきたので、書きながら整理。何らかのファイルの「複数のページ情報を管理」するためのクラスを書いています。内部では何らかのコレクションクラスで管理する事になるのですが、管理して…

ListView で表示用データを仮想化する

現在、プロジェクトの関係で初めて WPF を触っています。「GUI とデータ(および関連する処理)の分離と言う事にかなり気を使って設計されてるんだなぁ」と言う感動と「XAML の書き方がよく分からない!」と言う絶望が織り交じったファーストインプレッショ…

ReadOnly な参照型のメンバ変数

最近、プログラミング関係の事はほとんど書かないようになっていたのですが、ブログ継続の意味でも、差障りのない形でできるだけメモしていこうかと思います。さて、「ある参照型のメンバ変数を読み取り専用にしたい」と言う要求が出てきたのですが、ちょっ…

x64 設定中にデザイナで UserControl を表示しようとするとエラーになる

先日、Visual C# 2010 上で UserControl を継承したコンポーネントをデザイナ経由で貼り付けていたら、「ビルドは成功するんだけど、デザイナ上で表示しようとするとエラーになる」と言う状況に遭遇しました。適当にググっていたら「作成したコンポーネント…

PDFWiki - Wiki 記法で PDF を生成する

これは,C# Advent Calendar 2011 参加記事です.現在,開催されている Advent Calendar の一覧は Advent Calendar 2011 (jp) 開催予定リスト - Life like a clown を参照下さい.iTextSharp の勉強がてら,ちょっとしたアプリケーションを作ってみようと思…

Windows における不正なパス名を変換する

Windows における不正なパス名を変換する関数を少し真面目に書いてみます.現在の実装項目を簡単に列挙すると以下の通りです. 「/*"<>|」の 6文字(Path.GetInvalidPathChars() メソッドで返される文字に「*」記号を加えたものに相当?)は無条件で置換して…

Hello, iTextSharp!

今まで適当に使っていたので,ここらでざっと概要を把握するためのまとめ.iTextSharp 自体のリファレンスは存在しない(?)ようなので,リファレンスとしては iText (Java) の API リファレンスで代用するか有志の方が作成したヘルプファイルを眺めるかに…

GetPixel/SetPixel は遅い

所用で簡単な画像処理の実装を(お願い)しているのですが,何というか実行が非常に遅いのが気になりました.どうやら Bitmap クラス の GetPixel/SetPixel が原因のようで,これらのメソッドは非常に遅い事で有名なようです. void TranslateImage(Bitmap o…

GUID を引数に取る Win32 API の宣言と使用方法

GUID 限定と言う訳ではないのですが.例えば,PowerEnumerate と言う関数は C では以下のような宣言になっています. DWORD WINAPI PowerEnumerate( __in_opt HKEY RootPowerKey, __in_opt const GUID *SchemeGuid, __in_opt const GUID *SubGroupOfPowerSet…

Win32 API の .NetFramework での宣言一覧

C# からでも Win32 API を使う事がたびたびあるのですが,そのときに困るのが「どう宣言すればいいんだろう」と言うものでした.そこでいろいろとググっていたのですが,pinvoke.net と言うサイトが Win32 API の .NetFramework での宣言をかなり網羅してい…

Desktop と DesktopDirectory

System.Environment.SpecialFolder 列挙体には Desktop と DesktopDirectory と言う 2 つの値が定義されています. メンバ名 説明 Desktop 物理的なファイル システム上の場所ではない論理的なデスクトップ。 DesktopDirectory デスクトップ上のファイル オ…

一つのソースファイルを複数のプロジェクトで共有する

Visual C# で開発していて,あるソースファイルを複数プロジェクトで共有したいと言うケースが出てきました.ただ,単にプロジェクトの「追加」→「既存の項目」から共有したいファイルを選択すると選択元のソースファイルのコピーができてしまうので,選択元…

GUI プログラミング覚書

ここ最近,真面目に GUI を持つアプリケーションを書く機会が増えたので,現状までに気を付けないといけないなと感じたことをメモ.GUI アプリでまともに作ったものがまだ 2 つとかその程度なので,まだまだ足りない部分や勘違いも多そうですが気づいたらそ…

サムネイル画像の生成と表示

今,所用で「サムネイル画像を一覧表示」する機能を作っています.取り合えず表示だけさせようと思ってシングルスレッドで走らせると(やはり)体感速度(スクロールすると引っかかりが生じるなど)に問題がありました.体感速度の改善に関しては,当初「取…

Windows GUI wrapper for webpconv

JPEGより約40%コンパクト:Google、Web高速化を目指し新画像フォーマット「WebP」を発表 - ITmedia エンタープライズ と,Google が新しい画像フォーマットを発表したようで賑わっていました.A new image format for the Web | WebP | Google Developers …

.NetFramework 4 のみで 2.0 向けアプリケーションを動作させる

今年の 4月に Microsoft から .NetFramework 4 がリリースされましたが,.NetFramework 4 はこれまでの 2.0 〜 3.5 とは「別物」と認識されるようです.そのため,.NetFramework 4 しかインストールされていない環境で,.NetFramework 2.0 向けにビルドされ…

Managed code な dll を exe に結合する

カスタマイズ可能な TabControl - Life like a clown のようにカスタマイズされた GUI パーツを探す事があるのですが,こういった GUI パーツはソースコードではなく dll として提供されているものも結構ありました.GUI パーツのようなものは,exe を作成す…

カスタマイズ可能な TabControl

昨今はタブベースなアプリケーションへの需要が増しているので,何らかのデスクトップ・アプリケーションを作る際にもタブ化が課題となってきます.これが .NetFramework の場合,WPF を使用すれば問題とならないようなのですが System.Windows.Forms.TabCon…

連続ページを実現する

Adobe Reader などのアプリケーションでよく見られる,全てのページを縦に並べてスクロールで移動する所謂「連続ページ」の実現方法を考えていたのでメモ.ListView などを使用してもよかったのですが,ScrollableControl の上に PictureBox を載せると言う…

マウスホイールによるスクロール

Windows フォームアプリを作成する場合,マウスホイールによる画面のスクロール機能は自力で実装する必要があるようです.実現する際には,メインフォームの MouseEnter と MouseWheel イベントにそれぞれ以下のようなイベントハンドラを指定します. using …

手のひらツールの実装

画像などが画面に入りきらずスクロールバーが表示されている場合に,マウスのドラッグでスクロールさせる機能(所謂,Adobe Reader などの「手のひらツール」)を実装する必要があったので調べてみました. スクロールバーの表示 手のひらツールの実装の前に…

Form の this.Activate() について

たまに Windows フォームアプリケーションを書く機会があるのですが,この時にいつも悩むのが「起動時にウィンドウを前面に表示させる」方法でした.ぐぐってみると他のウィンドウからフォーカスを奪って前面に表示させるためには this.Activate() を使えば…

環境変数の状態を保存する EnvironmentSaver

一時的に環境変数の値を変更する必要が出たのですが,変更した環境変数の値を元に戻す作業が煩わしくなってきました(変更するキーが増えたときに戻し忘れたりするなど・・・).そんな訳で,環境変数のある時点における状態に自動的に戻してくれる Environm…

PDF ファイルの解析

PDF ファイルを解析 (parse) する必要があったので,その触りだけ紹介(と言うか,必要な目的がこれだけで終わってしまった).PDF ファイルは,以下のような書式になっています. %PDF-1.X 1 0 obj << /Type /Catalog /Pages X 0 R >> endobj 2 0 obj << /C…

x64 Windows でのレジストリの扱い

嵌ったのでメモ.64bit OS が出現した事でレジストリの扱いが少し変化していたようです.例えば,以下のコードで得られる結果は,ビルド時の設定,実行環境によって異なってきます. Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachi…