.NETプログラミング研究 第38号 †.NET質問箱 †「.NET質問箱」では、「どぼん!のプログラミング掲示板」に書き込まれた.NETプログラミングに関する投稿を基に、さらに考察を加え、Q&A形式にまとめて紹介します。 Microsoft Officeでコピーした図をPictureBoxに表示するには? †
【質問】 Microsoft Office Wordなどで作成した図をクリップボードにコピーした時、このデータを取得してPictureBoxに表示するために次のようなコードを書いたのですがうまくいきません。どのようにすればできますか?
【回答】 この問題の解決法は、DOBON.NET掲示板へのピラルクさんの投稿や、ニュースグループでのマイクロソフトのLion Shiさんの投稿が参考になります。 Lion Shiさんの投稿によると、Microsoft Officeの図をクリップボードにコピーした時、そのデータは上記のコードのようにEnhancedMetafile形式では取得できないということです。 クリップボードにコピーされたデータは、EnhancedMetafile形式の他に、Office Drawing Shape Format、MetaFilePict、PNG+Office Art、JFIF+Office Art、GIF+Office Art、PNG、JFIF、GIF、ActiveClipboard、HTML Format形式に関連付けられており、このうち、HTML Format以外はMemoryStreamオブジェクトとしてデータを取得できます。 つまり、Microsoft Officeでコピーした図を、例えばPNG形式でデータを取得する場合は、次のようになります。ここではフォームにピクチャボックス"PictureBox1"があり、このPictureBox1にクリップボードにある図を表示するものとします。
"PNG"以外の形式を試してみたところ、上記のコードで"PNG"の部分を以下の文字列に変更した場合にのみ成功するようです。 "PNG+Office Art" "JFIF+Office Art" "GIF+Office Art" "JFIF" "GIF" ○この記事の基になった掲示板のスレッド 用紙のサイズをコンボボックスに表示して、選択して印刷する †
【質問】 PrintDocumentクラスを使って印刷する際に、プリンタで印刷可能な用紙のサイズをコンボボックスに一覧表示して、選択された用紙サイズで印刷されるようにしたいのですが、どのようにすればよいのでしょうか? 【回答】 プリンタでサポートされている用紙サイズは、PrintDocumentオブジェクトのPrinterSettings.PaperSizesプロパティで取得できます。 フォームにPrintDocumentオブジェクト"PrintDocument1"とコンボボックス"ComboBox1"がすでに配置されている時、PrintDocument1で指定されているプリンタでサポートされている用紙サイズをComboBox1に表示するには、次のようにします。ComboBox1にはPaperSizeオブジェクトを追加し、ComboBox1のDisplayMemberプロパティを"PaperName"とすることにより、ComboBox1にはPaperSizeのPaperNameプロパティで取得できる文字列が表示されるようにしています。
ComboBox1で選択された用紙サイズで印刷するには、次のようにします。単に、DefaultPageSettings.PaperSizeプロパティをComboBox1.SelectedItemに変更しているだけです。(PrintDocument1のPrintPageイベントハンドラは省略されています。PrintPageイベントハンドラがないと、印刷はできません。印刷する方法に関しては、DOBON.NETの「印刷する」などをご覧ください。)
○この記事の基になった掲示板のスレッド FileSystemWatcherでファイル名が小文字になる †
【質問】 ファイルの変更を監視するためにFileSystemWatcherクラスを使っていますが、Changedイベントハンドラで取得できるFileSystemEventArgsオブジェクトのFullPathやNameプロパティのファイル名が小文字になってしまいます。正しいファイル名を取得するにはどのようにすればよいのでしょうか? 【回答】 これは.NET Frameworkのバグのようです(.NET Framework 1.1でも修正されていないようです)。よってこの問題を解決するには、今のところ小文字のファイル名から正しいファイル名を取得する何らかの方法を考えるしかないようです。 このような小文字のファイル名から正しいファイル名を取得するための方法が、ニュースグループで紹介されていました。 この記事によると、ルートフォルダから順番にDirectoryInfoクラスのGetFileSystemInfosプロパティを使って一つずつ正しいフォルダ名(最後はファイル名)を取得していくという方法でうまくいくとのことです。 上に紹介した記事にコードもありますが、私なりに書いたものを以下に紹介します。このコード(メソッド)は、短いファイル名から長いファイル名を取得するためにも使えるため、"GetLongPath"という名前をつけています。
○この記事の基になった掲示板のスレッド コンピュータ雑学 †ここでは、話すと人に嫌われるなまぬるいコンピュータに関する雑学を紹介します。 BASICの歴史とMicrosoftの誕生 †BASIC(Beginner's All-purpose Symbolic Instruction Code)は初心者でも使いやすいプログラミング言語として、FORTRAN IIとALGOL 60を基礎に、1964年アメリカのDartmouth大学で数学者のJohn KemenyとThomas Kurtzによって開発されました(5月1日午前4時に初めてBASICプログラムが実行されたとされています)。 1974年、Popular Electronics誌で、世界初のパーソナルコンピュータ、MITS(Micro Instrumentation and Telemetry Systems)社のAltair 8080が紹介されると、これを見たPaul AllenとBill Gatesが、1975年、世界初のマイクロコンピュータ用言語である、Altair 8800用BASICインタープリタを開発しました。これをきっかけに、BASICがプログラミング言語として広まることになります。 Harvard大学の学生であったBill GatesとHoneywellの社員だったPaul Allenは、Paul AllenがHarvard大学にあったPDP-10を使ってAltairのエミュレータを作り、Bill GatesがBASICのコードを書きました。彼らは開発に8週間を費やしたといわれていますが、Bill Gatesはこの時書き上げたプログラムこそ人生で最高のプログラムだと語っているそうです。 Bill GatesとPaul Allenは1975年7月11日にMITS社とBASICのライセンス契約を結びました。同月、Bill Gatesが$910、Paul Allenが$606を出資し、Micro-Softを設立しました(その後、Microsoftとなります)。つまりMicrosoftの最初の商品はBASICだったわけで、これが今のVisual Basic .NETに引き継がれているのです。 コメント †
|