しかし今日はむちゃくちゃ暑いですね。冷房に弱い方なので、午前中はクーラーには入らないとかするのが普段の生活なのですが、さすがに今日は起きた瞬間からクーラー入れっぱなしです。うちの猫は、なぜか普段はクーラーをつけた部屋ではくつろがないのですが、今日はクーラーのついた部屋に入ってきて、ぐったりしています。このクソ暑いのに、毛皮を着ているのですから、たまったもんじゃないでしょうね(笑)。暑いといえば、PowerBook G4ですが、むしろ熱いが正しいですね。何人かの人に聞いていましたけど、やっぱり想像を絶する熱さですね。特に、表面は右側の電源ボタンのあたりがすごい熱いですし、本体の裏面はかなりの熱です。昨日、出かけるためにふたを閉じて持ち上げようとしたら、あやうく火傷をしそう!と思ってしまうほどの熱さでした。これだけの熱がでるのだから、やっぱり筐体は金属じゃないといけないのだろうか…などと思ってしまいます(プラスティックだと溶ける?)。ただ、手をおく場所が熱くならないだけいいのかもしれません。初期のVAIOを使っていた頃は、夏場はほんとにアチチでしたからね。手のひらあたりがいちばん熱くなるので、キーを打っていると、汗が目に見えてたまるって感じでしたけどね。まあ、熱がでるのはPowerBook G4に限ったことではありませんし、隣で使っているDynabook SSもそこそこ熱くはなっています。冬になったら熱源になっていいかもしれません。このところはCRTを使わなくなったので熱源は減ったのですが、ノートパソコンを並べたらそれなりに部屋があったかくなったりして。
(新居雅行 msyk@mdonline.jp)
今回は、プリントアウトに用いる「用紙設定ダイアログ」と「プリントダイアログ」を、Sheet Windowとして表示させる方法を解説したいと思います。ただし、Navigation Service 3.0と同様に、Sheet Windowが利用できるのはMac OS Xのみとなります。
用紙設定ダイアログとプリントダイアログをSheet Windowとして表示させるためには、先んじて、Carbonアプリケーションのプリントアウトに関わるソースコードをSession APIに対応させておく必要があります。Session APIについては、Apple社のMac OS Xサイトの「Core Technologies」にある「Inside Carbon: Adopting the Carbon Printing Manager」というドキュメントを参照してください。
◇Inside Carbon: Adopting the Carbon Printing Manager
http://developer.apple.com/techpubs/macosx/CoreTechnologies/graphics/Printing/printing.html
実際の作業は、CarbonLib 1.3.1GM SDKに含まれる「PrintSample」サンプルプロジェクトを参考にすると良いでしょう。これらのAPIを使う時には、Universal Interfaces 3.4が必要です。このうち、Printing Session APIや、それに関連する定数が定義されているヘッダーファイルは、PMCore.hとPMApplication.hとPMDefinitions.hの3つです。一度チェックしてみてください。
Session APIを利用すれば、プリントアウト処理(Task)がSession単位で管理され、同時に複数のプリントアウトが可能になります。つまり、複数のプリントアウト処理が、それぞれ別スレッドで走るわけです。Session APIの真の実力は、Mac OS Xでプリントアウトする時のみに発揮されるので、Mac OS 8/9では大きな機能変化はありません。今回は、アプリケーションが起動されている環境を調べることにより、Mac OS Xの時だけSheet Windowを使うように工夫してみました。
両ダイアログをSheet Windowとして表示する場合には、ユーザがダイアログのボタンをクリックした以降の処理をコールバックルーチンに記述しておく必要があります。そこで、起動時にsetUpPrint()ルーチンを呼び、両ダイアログで用いるコールバックルーチンのエントリーポイントを保存しておきます。
このうち、pageDoneProc()ルーチンが用紙設定ダイアログで使われ、printDoneProc()ルーチンがプリントダイアログで使われます。アプリケーションの起動環境がMac OS Xでなければ(chkSysOSX()で調べている)、こうした処理は必要ありません。
最初は、用紙設定ダイアログを表示するためのdoPageSetup()ルーチンを見てみます。
今までのプリント処理は、PMBegin()で開始し、PMEnd()で終了する必要がありました。Session APIの場合には、PMCreateSession()でSessionを確立する事から始め、最後にPMRelease()でSessionを解放します。ダイアログとしてSheet Windowを使いたい時には、PMSessionUseSheets()を実行し、それにコールバックルーチンのPMSheetDoneUPP(page_doneUPP)を渡しておきます。通常のダイアログであれば、ユーザがボタンをクリックするまでPMPageSetupDialog()から抜け出ることはありません。また、抜け出した時点でダイアログは閉じられていますので、そのままSessionを解放しても問題ない訳です。ところが、Sheet Windowを用いた場合には、すぐさまMPageSetupDialog()から抜け出してしまいます。よって、Sessionを解放するためのPMRelease()は、pageDoneProc()側で実行する必要があります。
続いて、プリントダイアログをオープンするdoPrintOut()ルーチンです。
用紙設定の時と同じく、Sheet Windowを使う時には、PMSessionUseSheets()にPMSheetDoneUPP(print_doneUPP)を渡します。PMCreatePrintSettings()でダイアログに必要なPMPrintSettings構造体を作り、PMSessionDefaultPrintSettings()でデフォルト値を代入してからPMSessionPrintDialog()を呼べば、プリントダイアログが表示されます。起動環境がMac OS 8/9であれば、ダイアログの「プリント」ボタンがクリックされたことを確認してから、imagePrint()ルーチンによる画像プリントを行います。処理が終了したら、PMPrintSettings構造体やSessionを解放します。しかし、Mac OS XでSheet Windowを使っている場合には、これとまったく同じ処理を、コールバックルーチンのprintDoneProc()で実行している事が分かります。
最後は、プリントアウトを実行しているimagePrint()ルーチンです。
始めに、makePrintPicture()で対象画像をPICTデータに変換します。SessionのJob名にはウィンドウタイトルを使い、CFStringCreateWithPascalString()でUnicodeベースの文字列に変換してからPMSetJobNameCFString()で設定します。PMSessionBeginDocument()とPMSessionBeginPage()は、非Session APIで使っていたPMBeginDocument()とPMBeginPage()に対応しています。準備が終わったら、PMSessionGetGraphicsContext()でQuickDrawによるプリントアウトを指示し、描画対象となるCGrafPtrを得ておきます。それをカレントポートに設定してDrawPicture()を実行すれば、プリントデータのSpoolingが開始されます。これが、Mac OS XでのCore Graphics(Quartz)を用いた描画であれば、その処理方法が変わりますので注意してください。描画後にPMSessionEndPage()とPMSessionEndDocument()を実行すれば処理は完了です。
では、Mac OS Xでファイルメニューの「用紙設定...」と「プリント...」を使ってみます。両ダイアログとも、対象ウィンドウのタイトルバーから降りてくるSheet Windowとして表示されます。この時、各メニューアイテムのメンテナンスは自動で行われませんので、必要があれば自分自身で行ってください。私が愛用しているプリンタは、沖データの「MICROLINE12n」です。この機種は、AppleTalk(EtherTalk)で接続する非PostScriptプリンタなのですが、ラッキーなことに、以下のサイトからMac OS Xに対応したサンプル版ドライバを入手することが可能です。
◇MICROLINE Mac OS X での対応状況
http://www.okidata.co.jp/Event/MacOSX/macOSXNative.html
Mac OS Xにプリンタドライバをインストールしたら、先んじてプリントダイアログのプリンタメニューから「プリンタリストを編集...」を選び、「Print Center」で、そのドライバをリストに追加しておく必要があります。
「プリント追加...」ボタンをクリックし、上部メニューで「AppleTalk」を選べば、リストに「ML12L」が表示されるので、これを追加します。
この時、システム環境設定でAppleTalkをONにしておくことを忘れないでください。また、用紙設定ダイアログのフォーマットメニューも「ML12N」へと切り替えておきます。
用紙サイズを選んだら、引き続きプリントダイアログを表示し、「プリント」ボタンをクリックすれば印刷が開始されます。
次回は、プログラミングの話しを一回休憩し、7/17から7/20までNew Yorkで開催されるMacworld Conference & Expoの様子を取り上げてみたいと思います。さて、待望のMac OS X 10.1は、この会期中に発表されるのでしょうか?お楽しみに!!
[小池邦人/オッティモ]
関連リンク:オッティモ
カテゴリ:Carbon/CF, ユーザインタフェース, 小池邦人のプログラミング日記
日本PHPユーザ会は、「PHPカンファレンス2001」を、2001年7月28日(土)に開催する。場所は東京・大田区産業プラザで、時間は10:00〜16:40、費用は無料だが定員は250名となっている。事前に人数を把握するために登録を行うようになっている。プログラムは、初心者向けチュートリアルの「PHP入門」、「PHP4の今:日本語対応と最近のトピックス」、「Webアプリケーション開発におけるセキュリティ PHP編」、「PHPにおけるセッションとページ遷移管理クラスの実装」、「PHP+PostgreSQL ソースコードジェネレーター」といったテーマが予定されており、初歩から高度な応用までを含め幅広い内容のセッションが開催される。PHPはWebページに組み込むスクリプトプログラムの処理系であるが、Apacheとの連携やデータベースアクセスが可能な点などから、幅広く利用されているサーバサイドスクリプトである。Mac OS X Serverにも標準でPHPは組み込まれている。
関連リンク:『PHPカンファレンス2001』開催のご案内
カテゴリ:サーバー製品, イベント
SRAは、データベースエンジンのPostgreSQLに関するセミナー「PostgreSQL管理入門」を2001年7月26日(木)13:30〜17:30に開催する。場所は東京・半蔵門近くのSRA本社で、費用は20,000円となっている(サポート会員は割引)。テーマとしては、「PostgreSQL管理概論」「PostgreSQL7.1管理の実際」「Perlインターフェースの概要とWebminによるPostgreSQLの管理」となっており、それぞれ、SRAの石井達夫、稲葉香理、小林純一の各氏が講師を担当する。PostgreSQLの管理についての具体的な方法に加えて、DBIを利用したPerlからの利用やWebminによる管理について講習される予定となっている。
関連リンク:PostgreSQL管理入門
カテゴリ:イベント, データベース
アスキーから、REALbasic 3についての公式ガイドブックが出版された。掌田津耶乃氏の執筆による「初歩からはじめるREALbasic 3」で、504ページ、CD-ROMが1枚付属する。価格は3,400円だ。REALbasic 3はMac OS Xにも対応したMac OSおよびWindows向けのアプリケーションを開発するソフトである。この書籍は、初めてプログラミングを行うような人も読者として想定している内容となっている。
関連リンク:初歩からはじめるREALbasic 3
カテゴリ:雑誌、書籍, REALbasic
Technical Noteに、Mac OS Xでのフォントに関する文書が掲載された。フォントファイルの置き場所とシステムでの検索順序についてがまず記載されているが、この内容は以前にもTech Info Libraryでも公開されていたものだ。また、利用可能なフォントファイルのフォーマットについての一覧も含まれている。フォントのデータに直接アクセスするなどの機能はATSフレームワークで機能が提供されているが、このフレームワークはCFMベースのCarbonアプリケーションからは直接は利用できない。また、Resource ManagerやQuickDrawを使うときの注意点が記載されている。HIToolboxフレームワークが初期化されていないと、GetSysFontやGetAppFontが利用できなくなる点などは注意すべき点かもしれない。GetApplicationTextEncodingというAPIでHIToolboxをリファレンスしておくようにするというのが1つの解決策であるとして示されている。
関連リンク:TN2024:The Mac OS X Font Manager
カテゴリ:Technote, テキスト/フォント
DVD Studio Pro 1.1へのアップデータが公開された。公開されたのは北米向け英語版のみであり、日本語版は公開されていない。1.0からの違いとして、PioneerのDVD-RドライブDVR-A03を利用したドライブに対応したことや、Final Cut Proのシーケンスの認識を向上させたこと、エンコーディングの効率化、マニュアルの更新などとなっている。DVD Studio Proは、Mac OS 9.0.4以降で利用できるDVDオーサリングソフトウエアである。
◇DVD Studio Pro 1.1: Document and Software
http://til.info.apple.com/techinfo.nsf/artnum/n120036
関連リンク:DVD Studio Pro
カテゴリ:メディア制作, 各種製品
MLTE(Multilingual Text Engine)についての、Q&A集がTechnical Notesの文書として掲載された。利用できるシステムバージョン、ビューの管理、Quartzの利用、カーソルの表示、テキストスタイル属性の設定、フォントの処理、スクロールバーの描画、Carbon化したときの留意点、Carbon Eventに関することについての問いと回答が掲載されている。
関連リンク:TN2026:Multilingual Text Engine Frequently Asked Questions
カテゴリ:Technote, テキスト/フォント
アカウント作成の支援やパスワード自動作成を行うアプリケーション「Passenger」のVer.2のベータリリースが始まっている。Ver.2.0はカーボン化されており、Mac OS X Server向けのユーザファイルのインポートやエクスポートに対応した。インポートは、タブ区切りやカンマ区切り、あるいはMac OS X ServerやASIPのXMLに対応する。エクスポートは、Mac OS X Server、AppleShare IP 5 - 6.3、Macintosh Manager 1.x & 2.0、Eudora Internet Mail Server、WebSTAR FTP、WebSTAR Web、Master Spell、Master Key、Edmark TNV Accountsに対応するが、独自の形式に書き込むこともできる。フルネームからユーザ名を生成する機能もある。価格は150ユーザに制約されたStandard版が$60、制限なしのProfessional版が$90などとなっており、サイトライセンス等もある。なお、ダウンロードして20ユーザまでの制限版として試用することもできる。アカウント数の多いサイトでのユーザ管理時に、自動的にパスワードを生成するなどの機能は便利だろう。
関連リンク:Passenger
カテゴリ:ユーザ管理
Technical Noteとして、WebObjects 5で利用するJDBCプラグインについての文書が掲載された。WebObjects 5は、Pure JavaでありデータベースのアクセスはJDBCを使って行う。JDBCプラグインを利用することにより、アダプタから直接データベースを利用できるような状況となり、ドライバの動作による問題などは回避できる。WebObjects 5では、OracleとOpenBase向けのJDBCプラグインを最初から組み込んでいる。このTechnical Noteでは、そのほかのデータベース向けJDBCプラグインを開発するために必要な情報が掲載されている。多くのプログラマにとって必要な情報ではないが、WebObjects 5のデータベース利用のメカニズムの一面を知る手がかりがあるかもしれない。
関連リンク:TN2027:How to write a JDBC Plugin (With Example)
カテゴリ:Technote, WebObjects