昨日はここまでできた。
mouseDownの中で
[pb declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; [pb setString:[sel string] forType:NSPasteboardTypeString]; NSPerformService(@"Look Up in Dictionary" , pb);とすると上の画像のように辞書.appが起動する。うーん、こうじゃなくて、Ctrl+Command+Dした時のように、パネルで辞書.appを表示したいんだけど・・・。
もう一つ、プログラム内から辞書.appを使う方法が
dict://だということは知っていたので使い方を調べる。そして書いたのが次のコード。
NSString *str=[[NSString alloc] initWithFormat:@"dict://%@",[sel string]]; [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:str]];
しかしこれも
辞書.appのウィンドウが開いてしまう。なぜウィンドウが開くとだめかというと、いちいちウィンドウのフォーカスが変わってしまうのが不便だから。辞書がパネル表示されるとその辺が便利。
上の方法を調べているうちに、デベロッパドキュメント内で
Dictionary Services Referenceに行き当たった。苦労して英文を読んでみると、
HIDictionaryWindowShowがまさに希望する機能を実現するメソッドらしい。
というわけで、Carbonなので生なCの関数にびくびくしながら次のような、いい加減なコードを書いてみる。
CFRange rang=DCSGetTermRangeInString(NULL, (CFStringRef)[sel string], 0); CGPoint point2; point2.x=point.x; NSRect rect= [[NSScreen mainScreen] frame]; point2.y=rect.size.height- point.y; CTFontRef font = CTFontCreateWithName(CFSTR("Helvetica"), 0.0, NULL); HIDictionaryWindowShow(NULL, [sel string], rang, font, point2 , FALSE, NULL);NSScreen系とCGWindow系の座標変換、とか、CTFontRefの作り方、とか、そりゃもうググリまくりですよ。
これで実行してみると
出た。パネル表示の辞書。しかし位置がずれている。うーん、座標系の変換でまだやることがあるみたい。
でもいちおう、考えていたことができるとわかったのでうれしい。
0 件のコメント:
コメントを投稿