2006年1月29日

Windows XPのビジュアルスタイル

今更ですが、こないだ初めてWindows XPのビジュアルスタイルに対応する作業をしました。ご存じのように、XPではボタンやスクロールバーなどのGUIオブジェクトのデザインがガラリと変わったわけですが、古いアプリケーションはそのままでは新しいスタイルで表示されません。最近の.NETフレームワークなどを使って開発すれば何もしなくても良いんでしょうが、私はいまだにVisual C++ 6.0で開発しているので、明示的に対応しなければなりません。

具体的には以下のページにあるとおりやればOKです。やってみると想像以上に簡単ですね。最初はXMLを書くということで、漠然と面倒な作業を想像していたのですが、内容はほとんどそのままでOKみたいです。1つ作ってしまえば何の苦労もありませんね。

Windows XP ビジュアル スタイルの使用

また、この作業をした上で更にダイアログ上の各オブジェクトのサイズや配置などをチマチマと調整しなければならないと覚悟していたのですが、それも必要ありませんでした。(今回たまたまうまくいっただけかな?) これがMacだったら文字が欠けたり見栄えが悪くなったりするところですよね(笑) 私もMac OS 8のプラチナ調やMac OS XのAQUAなど、ルック&フィールが変わるたびに苦労してきました。Windowsのこの互換性の高さはアップルも見習って欲しいですね。

コメント (0)

2006年1月24日

ボリュームマウント時にウィンドウを開く

ちょっと前にアップルのテクニカルQ&Aに「QA1449: Setting default open Finder window」という情報が掲載されました。CD-ROMやディスクイメージなどがマウントされたときに開かれる、デフォルトのフォルダを設定する方法です。今まで、自分で作ったものではダメなのに市販ソフトのCD-ROMなどで実現できているものがあるので疑問に思っていました。

早速、ここに載っているプログラムをそのままビルドして試してみました。確かに期待通り動くんですが、ちょっと不満な点もあります。これを設定すると、開かれるウィンドウがMac OS X 10.3以降のメタル調ではなく、10.2以前のプレーンなウィンドウになっちゃうんですよね。いちど設定すると何も開かないようには戻せないし、コマンドラインツールというのも不便なので、もう少しちゃんとしたGUIのツールが欲しいですね。誰か作ってないかな?(^^;)

そもそもこれって技術者向けの情報などではなく、一般ユーザー向けのユーティリティとしてアップルが提供してくれても良さそうなものですよね。つーか、Finderが昔(Mac OS 9以前)みたいに開いた状態を記憶してくれるのが一番なんだけど・・・。

コメント (2)

2006年1月 9日

Universal Binaryへの対応 その2

一昨日の日記の続きです。予定どおり次の段階として、自作のアプリケーションをUniversal Binaryに対応してみました。お題はScrubDelete Xです。

前回と同じようにやってみたのですが、警告がたくさん(30個ほど)出てしまいました。ただ、エラーではなく警告ということで、ビルド自体は完了しています。動作は例によって確認できませんが、これだけたくさん出るとはちょっと予想外でした。

出た警告のほとんどは以下のような感じのものです。('???'の部分はCarbon APIのルーチン名)

warning: '???' is deprecated (declared at /Developer/SDKs/... )

調べてみると、どうやら一部の古いAPIはもうあまり使ってくれるなという意味のようです(^^;) たしかにScrubDeleteはMac OS 8時代からあるプログラムなので古いAPIもたくさん使用していますが、こんな小規模なプログラムでこれだけ警告が出るということは、大きなプログラムでは大変ですね。

ざっと見てみた限りですが、対象となるAPIは次のようなものでしょうか。

  • リソースマネージャーのルーチン
  • QuickDrawのルーチン
  • Pascalストリング関連のルーチン
  • FSSpec関連のルーチン(FSp〜)
  • 低レベルのファイルマネージャのルーチン(PB〜)

いちおうまだ使えないわけではないようですが、徐々に使わないようにしたほうがいいのでしょうね。でも簡単に代替できるものと、そうでないものがあります。特にQuickDrawなんてそう簡単にはいかないように思うんですけどね。果たしていつまでサポートしてくれるのでしょう。

コメント (0)

2006年1月 7日

Universal Binaryへの対応 その1

来週からサンフランシスコで行われるMacworld Conferense & Expoで、インテルCPUのMacが発表(発売?)されるという噂があります。以前の予定では今年の夏頃だったはずですが、もし本当なら私もそろそろ準備を始めなければなりません。いちおう情報収集はしていたのですが、実際に作ってみることにしました。

とりあえずアップルのサイトにあるUniversal Binary Programming Guidelinesというドキュメントを参考にやってみました。日本語のドキュメントがあるのは嬉しいですね。

まずはXcodeで新規プロジェクトを作ったときの雛形アプリを元にやってみました。とりあえず何の問題もないですね。もちろんインテルCPUのMacはまだないので動作確認はできませんが、問題なくビルドでき、既存のMacで動作しています。Finderの情報ウィンドウにもちゃんと「アーキテクチャ:Intel, PowerPC」と表示されています。

1つだけ面倒だったのは、古いOSバージョンに対応する部分です。Universal Binaryに対応するにはターゲットをMac OS X 10.4以降にして、コンパイラもGCC 4.0以降にしなければならないようですが、これだとMac OS X 10.2.xなどの古いバージョンで動作しません。この問題を解決するには、PPCコードとi386コードで別々に設定をする必要があるようです。

具体的にはCross-Development Programming Guideというドキュメント(こっちは英語)に説明がありますが、簡単に書いてしまえばプロジェクトに以下の6つの設定を加えることになります。

SDKROOT_ppc
SDKROOT_i386
MACOSX_DEPLOYMENT_TARGET_ppc
MACOSX_DEPLOYMENT_TARGET_i386
GCC_VERSION_ppc
GCC_VERSION_i386

分かってしまえばどうということはありませんが、最初からこういう設定をされたテンプレートも用意しておいて欲しいですね。どうもXcodeって過去のOSバージョンに対するサポートが不親切な気がするんですが、こういうところもUNIX的なのかな?

次は自作のアプリケーションをUniversal Binaryに対応してみたいと思います。

続く(予定)


関連リンク
Universal Binaryへの対応 その2 (2006年01月09日)

コメント (4)

2005年12月20日

MacOS Xアプリケーションのヘルプ

MacOS X用アプリケーションではヘルプメニューから、そのアプリケーション独自のヘルプを呼び出すことが可能です。先日この処理を自作のプログラムで初めて実装したのですが、1つ悩んだところがあったので書いておきたいと思います。

例によって、まずネット上の情報を検索することから始めました。情報さえあれば、これがいちばん手っ取り早いですからね(^^;) 調べてみると、ポイントはヘルプのトップページとなるHTMLファイルに適切なMETAタグをつけること、Info.plistファイルにヘルプのための項目(CFBundleHelpBookName, CFBundleHelpBookFolder)を設定することの2点ですね。

ここまでは検索してすぐに分かりました。ただ、自作のアプリケーションに実装してみると、どうしてもうまく動きません。仕方ないのでアップルのドキュメントを読んでみたところ、Carbonアプリではもう1つやらなければならないことがあるようです。

それは、アプリケーションの起動直後にAHRegisterHelpBook()を呼び出すこと。このAPIはFSRefの引数を取るので面倒そうに思いましたが、以下のページの最後にサンプルソースがありました。そのまま使えばOKです(^^;)

How to Register Your Help Book

これで無事ヘルプを呼び出せるようになりました。本当はこのヘルプシステムにはいろいろと機能があるようですが、今回はそこまで必要ないので省略です(^^;)

コメント (0)

2005年12月17日

Visual Studio 2005 Express Edition

無償で利用できるWindowsの開発環境、Visual Studio 2005 Express Editionの日本語版が正式リリースされたのでダウンロードしてみました。私はWindowsの開発はいまだにVisual C++ 6.0を使用しているのですが、しばらく試してみてメリットが見つけられたら有償版へのアップグレードを考えてみたいと思っています。

さっそくインストールしてざっといじってみましたが、もはやデフォルトでは.NETアプリケーションしか作れないんですね。設定すればWin32アプリケーションも作れるようですが、リソースの編集などは可能なのでしょうか。近いうちに試してみたいと思います。

ちなみにこのExpress Editionの無償公開は1年間限定だそうなので、せっかくだからVisual C#やVisual Basicもダウンロードしておきました。それぞれCD-ROM1枚分近い容量になりますが、Bフレッツにしてからこういう大きなものも躊躇なくダウンロードできます(^^;)

コメント (0)

2005年12月14日

郵便バーコード

先日、仕事で郵便バーコードについて調べる機会がありました。大量に送付する郵便物にプリントしておくと、割り引きサービスが受けられるアレです。(正しくはカスタマバーコードというらしい。) 結局すぐに開発するという話にはならなかったのですが、せっかく調べたので覚え書きとしてまとめておきたいと思います。

最初は全く予備知識がなかったのですが、このバーコード、調べてみると思ったより単純な仕様ですね。バーコードといっても、わずか21パターンの記号を並べるだけで済むようです。最初はプログラムから精度の高いグラフィック描画を行ったり、バーコードフォントか何かを使う必要があると思っていたのですが、これなら事前に全ての画像を用意しておいて、並べてプリントするだけです。

参考になったのはゆうびんホームページで配布されているサンプルプログラムです。単純ですが、よくできています。HTMLとJava Scriptで作られているので、他の言語にも簡単に移植できるはずです。画像も、このまま使ってしまうと権利上まずいでしょうが、同じものを作るのは容易だと思います。

手間がかかりそうなのは、バーコード生成の元になる文字情報を住所から抽出する部分ですね。これも郵便番号制マニュアルというところに抜き出し方法の説明があるのですが、番地などは元となる住所の記述の仕方が統一されていないと苦労しそうです。番地って人によって書き方がバラバラですし、やはり漢数字なども考慮しないとまずいですよね。壱、弐、参もか?(^^;)

コメント (0)

2005年11月30日

WeblocToURL

11/9の日記で書いたソフトを公開しました。名付けてWeblocToURLです。そのまんまのネーミングですが単機能ツールなので良しとしましょう(^^;) WeblocConverterという案もあったんですが、そんな大げさなソフトじゃないんですよね(笑)

アイコンもかなり適当ですが、いちおうコンテクストメニューの中で見つけやすく、ドラッグ&ドロップしやすいデザインを心がけました。

コメント (2)

2005年11月 9日

.weblocを.urlに変換するソフト

普段、インターネットを眺めていて気になった情報は、SafariのWeb インターネットロケーションファイル(拡張子.weblocのファイル)として保存しておくことが多いのですが、そのURL情報をWindowsに持っていこうとすると意外に不便です。Macで見つけた情報をWindowsで閲覧したいことって結構あるんですよね。

結局、テキストファイルにURLをコピー&ペーストするなどというローテクな方法でやっているのですが、このweblocファイルをInternet Explorerなどで開けるインターネットショートカットファイル(拡張子.url)に変換するソフトがあると便利そうです。フリーウェアであるだろうと思って探したのですが、どうも見当たりません。そこで思い切って自分で作ってみました。調べてみるとどちらのファイルも構造は至極単純で、1時間ほどで完成しました。

ドラッグ&ドロップやコンテクストメニューの「このアプリケーションで開く」で複数同時に変換できるようにしたのですが、使ってみると予想以上に便利。せっかくなのでフリーウェアとして公開しようと思っています。ただ、アイコンを描いたりマニュアルを書いたりする必要があるので、もう少し時間がかかりそうです。プログラムは1時間コースでしたが、こっちは予想できないんですよね(^^;) 特にMacOS Xになってからは、アイコンが悩みの種です。128x128ピクセルのフルカラーなんて、絵心のない人間には手に負えません。写真を使うとか、またはScrubDelete Xみたいに思いっきり単純化してしまうしかないですね。


関連リンク
WeblocToURL (2005年11月30日)

コメント (0)

2005年11月 6日

CodeWarrior v10

CodeWarrior v10がリリースされたようです。3/23の日記で書いたとおり、日本語版はv8をもって開発終了となりましたが、オリジナル(英語版)も、どうやらこれが最後のバージョンとなるようです。

もうバージョンアップする意味はないのですが、値段が激安の$99なんですよね。(更に学生やホビーユーザー向けの無料バージョンもある) この値段なら最終バージョンとして買っておいてもいいかもしれませんね。少し考えたいと思います(^^;)

コメント (0)

2005年7月26日

CodeWarriorからXcodeへ 4

昨日の件の原因が分かりました。恥ずかしながら開発環境の問題ではなくOS側の問題でした(^^;) ビルドしたアプリケーションを10.2環境へ持っていくのにUSBメモリを使っていたのですが、そこからHDDにコピーすると、なぜか一部のファイルの名前が大文字に変わってしまうようなのです。(私の環境だけかもしれません。)

問題となったのはmain.nibというファイル(実際にはフォルダ)なんですが、これがMAIN.NIBとなってしまい、CreateNibReference()でエラーになっていました。なんとこのルーチン、拡張子が小文字じゃないと正常に動作しないんですね。悪夢です。これは10.4でもそうでした。

また、通常はmain()がエラーを返したときはFinderがエラーメッセージを表示しますが、このケースではなぜか表示されません。表示してくれたらすぐに気づいたかもしれないのに・・・。

まあ、おかげで色々と勉強になりました(^^;)


関連リンク
CodeWarriorからXcodeへ (2005年07月17日)
CodeWarriorからXcodeへ 2 (2005年07月18日)
CodeWarriorからXcodeへ 3 (2005年07月25日)
・CodeWarriorからXcodeへ 4 (2005年07月26日)

コメント (0)

2005年7月25日

CodeWarriorからXcodeへ 3

7/18の日記の続きです。コントロールの件はまだ追求できていませんが、新たな問題を見つけました。MacOS X 10.2で動かないのです。試しにテンプレートから新規プロジェクトを作ってそのままビルドしてみたら、その雛形アプリも動作しません。

調べてみると古いOSバージョン用のSDKを使えばいいようなのですが、インストールしてプロジェクトを設定してビルドし直してもやはり動きません。他にもやることがあるのかな。なかなか簡単にはいきませんね。

それにしても、デフォルトで10.3以降になっているというのはどんなもんでしょう。10.2ってそんな見捨ててしまえるほど古いバージョンでしょうか? ダブルクリック(起動)したときにメッセージすら出ないのも寂しい。


関連リンク
CodeWarriorからXcodeへ (2005年07月17日)
CodeWarriorからXcodeへ 2 (2005年07月18日)
・CodeWarriorからXcodeへ 3 (2005年07月25日)
CodeWarriorからXcodeへ 4 (2005年07月26日)

コメント (0)

2005年7月20日

CocoaとObjective-C

せっかくXcodeを使うようになったんだし、この機会にCocoaとObjective-Cも覚えようと思って本を1冊買ってみました。Cocoaの本は結構たくさん出ているようなので、ホントはいろいろ内容を検討してから書いたかったのですが、うちの近所でMacのプログラミング本が複数ある店なんて期待できないので、通販で買いました。

選択基準は「日本人が書いた、なるべく安い本」ということで(笑)木下誠氏著「Happy Macintosh Developing Time」に決めました。

ざっと1/3くらい読んでみましたが、プログラミング経験のある人が新たにCocoaとObjective-Cを学ぶには良さそうな本ですね。逆に、プログラミング自体の初心者には難しいように思いました。

あと、買ったあとに気づいたんですが、この本ってSecond Editionが出てるんですね。そっちはちょっと高いんですが、知らずに古いの買ってしまったというのはちょっと悔しいです。値段で選ぶからですね、ハイ(^^;)

コメント (0)

2005年7月18日

CodeWarriorからXcodeへ 2

昨日の続きです。今までリソースベースだったScrubDelete Xの設定ダイアログをInterface BuilderのNibベースに変更してみました。結論から言うと、Interface Builderで各コントロールにSignatureとIDを設定しておいて、プログラムからGetControlID()で取得するという方法でやりました。Carbon Eventには以前から対応してあったので、これで最小限の変更で済みました。見た目は以前とほとんど変わりませんが、古くさいリソースとおさらばできてなんだか気持ちがいいですね(笑)

ところで、このSignatureとIDってどういうふうに使い分けるべきなんですかね。自由に使えばいいんでしょうか。悩んだ挙げ句、とりあえずSignatureは使わずにIDのほうに以前の'DITL'リソースのアイテム番号を入れました。リソースからの移植の場合は、これでヘッダファイルの修正が最小限で済みますね。

他にもまだ分からないことがあります。Interface Builderには複数のラジオボタンが連なったラジオグループというオブジェクトがあります。便利そうなのでぜひこれを使いたかったのですが、これってボタンの数が奇数の場合はどうするんですかね。ScrubDelete Xには5個のグループがあるんですよね(^^;) Cocoa用(?)の場合はダブルクリックで選択して非表示にできますが、Carbon用ではだめなようです。結局どうやるのか分からなかったので、とりあえず単独のラジオボタンで(つまり従来どおり)やってしまいました。

また、例えばあるチェックボックスをオフにしときに他のコントロールをDeactivateControl()するような処理がうまくいきません。単純なミスはしてないと思うのですが、変化しないんですよね。この件はまだあまり調べていないんですが、今日は時間切れ。また今度。


関連リンク
CodeWarriorからXcodeへ (2005年07月17日)
・CodeWarriorからXcodeへ 2 (2005年07月18日)
CodeWarriorからXcodeへ 3 (2005年07月25日)
CodeWarriorからXcodeへ 4 (2005年07月26日)

コメント (0)

2005年7月17日

CodeWarriorからXcodeへ

来るべきインテルCPU Macの登場に備えて、今のうちから自作アプリケーションの開発環境をXcodeに乗り換えていくことにしました。私はCodeWarriorを使っているとはいえPowerPlantを使っているわけではないので、それほど大変な作業ではないはずです。まずはScrubDelete Xから始めたいと思っています。

Xcodeは何度かいじったりしたことはあるのですが、きちんとアプリケーションとして仕上げるのは初めてです。とりあえずテンプレートからプロジェクトを作って、あとは見よう見まねでやってみました。

いちおうソースは手直しの必要もなく無事にコンパイルできました。ただ、まだ統合環境の使い方がさっぱりですね(^^;) パッケージ(バンドル)アプリケーションとしてまとめるためには、どういうふうにファイルをプロジェクトに追加すればいいのか、その辺の流儀がよく分かりません。ローカライズなども考慮してあるようでCodeWarriorより複雑ですね。とりあえず手作業でパッケージ化してみた限りでは問題なく動作していますが、これ以上はドキュメントを読まないと分からないですね。

あと使ってみて気になったのは、ソースを編集するエディタが凄く使いづらいこと。動作がかなり重いですね。特に保存が遅くて、ちょっとした長さのソースファイルでも数秒もかかります。これって正常なんでしょうか。それともうちの環境だけ?(^^;) 私はcommand+Sが手癖にになっていて、ソースをちょっといじっては保存、いじっては保存と無意識にやっているので、これには参りました。何かオプションをいじったらマシになったりするのかな。G5でこれじゃあ、遅いマシンではたまりませんね。

次は今のリソースベースのGUIをInteface BuilderのNibベースに変えてみようと思います。


関連リンク
・CodeWarriorからXcodeへ (2005年07月17日)
CodeWarriorからXcodeへ 2 (2005年07月18日)
CodeWarriorからXcodeへ 3 (2005年07月25日)
CodeWarriorからXcodeへ 4 (2005年07月26日)

コメント (0)

2005年5月20日

TigerとResorcerer

MacOS Xを10.4 Tigerにアップグレードしてから、Resorcererの動作にちょっと問題が出ています。リソースファイルを編集して保存すると、Resorcererの次回起動時に必ず「前回きちんど保存できなかった可能性がある」等と警告が出てしまいます。どうも一時ファイルが削除されずに残ってしまっているのが原因のようです。実害はないのでResorcerer Last Save fというフォルダを削除すればいいんですが、毎回なのでかなりイライラします。暇なときに自動で削除するようなスクリプトか何かを作りますかね(^^;)

Resorcererって細かい不具合はたくさんあるんだけど、バージョン2.4.1からもう長いことアップデートがないので、今回も期待できそうにないですね。今更リソースエディタなんて仕方ないとは思いますが、個人的にはまだまだMacOS 9をサポートする必要があるので、X用アプリも含めてリソースは現役です。アップルはもうResEditをCarbon化してくれないでしょうしねぇ。

コメント (0)

2005年5月 4日

Dashboardのウィジェットを作るには

Dashboardのウィジェットを作る作業ってどんな感じなのだろうと気になったので調べてみました。まず、開発のためのドキュメントとしてDashboard Programming Guideというのが出ているようです。また、Debugging Dashboard Widgetsというテクニカルノートもありました。

ざっと眺めていてちょっとびっくり。ウィジェットってC言語とかで作るんじゃなくて、HTMLとJava Scriptで作るんですね。ウィジェットのパッケージを開けると、それらお馴染みのファイルがあって、そのまんまSafariでも実行できるようです。(Safari以外のブラウザはダメみたい)

プログラミングがJava Scriptということで、既存のウィジェットは全てソースコードが見られることになります。OS付属のもの( /Library/Widgets/ にある)を参考にすれば、かなり簡単に習得できそうですね。C言語などで作るより敷居が低いし、これは普及するかも。まあ、個人的には(あまりテクニカルじゃないので)制作意欲は半減しましたけどね(^^;)

ただ、ウィジェットのパッケージを1から作るのはちょっと面倒なので、雛形を作ってくれるような開発ツールが欲しいですね。作るならそっちかな。更に開発からデバッグまで行える統合開発環境みたいなのがあっても面白いかも。そっちは個人で作るには荷が重いですが(^^;)

また、アップルはぜひWindows向けのDashboardを出すべきだと思います。せっかくウィジェットがOSに依存しない仕組みなんだから、普及させるためにもぜひ。もちろん無料で(^^;)

コメント (5)

2005年4月 7日

続・Installer VISE 文字化け

3/15の日記の最後にちょろっと書いたツールですが、けっきょく作ってしまいました。30分くらいでできた(^^;) Text Encoding Converterのプログラミングってとっつきにくいけど、一度やっちゃうと楽ですね。

これで文字化けメニューがドラッグ&ドロップ1発で修正できるようになりました。やっぱぜんぜん楽だわ(^^;) フリーウェアとかで公開するほどのプログラムじゃないけど、VISEを使っている人には有用だと思うので、ご希望の方はメールをいただければ差し上げます。

コメント (2)

2005年3月31日

MacOS Xでシリアル通信

昨年9/3の日記で書いたアロハPC1ですが、その後Macでも使えることを確認しました。使用したUSBシリアルアダプタはKEYSPANのHigh Speed USB Serial Adapterですが、おそらく他のものでも動くんじゃないかと思います。

今回、初めてMacOS Xでシリアル機器を扱うプログラムを作りましたが、KEYSPANの開発者向けページにサンプルプログラムがあったので簡単でした。こういうサポートは嬉しいですね。アップルのサイトにも似たようなサンプルがあるようです。

Carbon APIではシリアルポートをサポートしていないので、今までこういう機器のプログラミングってどうするんだろうと思ってましたが、MacとしてはサポートしてないけどUNIXとしてはサポートしてるという感じでしょうか(^^;)

コメント (0)

2005年3月26日

続・ドラッグ&ドロップできないアプリ

一昨日の日記の続きですが、ナビゲーションサービスのダイアログ(メニューから“開く...”や“保存...”などを選んだときに出るやつ)にも同じようなことが言えます。

MacOS Xのアプリケーションでは、これらのダイアログのファイルリスト部分に、Finderからファイルやフォルダをドラッグ&ドロップすることができます。そうするとフォルダのパスがそこに移動してくれるので非常に便利なのですが、これまた受け付けてくれるアプリとくれないアプリがあります。受け付けるようにするにはナビゲーションサービスのNavGetFile()等を使うときにイベントプロシージャを書く必要があるようです。

ドラッグ&ドロップできるとかなり使い勝手が良くなるので、ぜひ皆さんに対応して欲しいですね。かくいう私も、この件に気づくまではやっていませんでした(^^;) なお、プロシージャの中身は空でもいいようです。空でもいいなら、プロシージャがないときも自動的にやってくれれば良さそうなもんですけどね。なんか中途半端な仕様。

また、残念ながらフォルダ用のNavChooseFolder()等ではこの方法を使ってもドラッグ&ドロップできないようです。あまり追求してないんですが、できるようにする方法ってあるんですかね?


#ネタが増えてきた(というか少し増やしたい)ので
#「プログラミング」カテゴリーを作りました(^^;)

コメント (0)

ページ: << < 1  2  3  4  5  6  7 >>