本日書いたのはこれだけ。
-(void)mouseDown:(NSEvent *)theEvent{
PDFPage* page=[self currentPage];
NSPoint point=[self convertPointFromBase:[theEvent locationInWindow]];
PDFSelection* sel=[page selectionForWordAtPoint:[self convertPoint:point toPage:page]];
//NSLog(@"%@",[sel string]);
NSPasteboard* pb=[NSPasteboard generalPasteboard];
[pb setString:[sel string] forType:NSPasteboardTypeString];
//NSLog(@"%@",[pb stringForType:NSPasteboardTypeString]);
NSPerformService(@"Look Up in Dictionary" , pb);
}
カスタムPDFViewの中のmouseDown。PDFSelection* sel=[page selectionForWordAtPoint:[self convertPoint:point toPage:page]];こいつでマウスクリックした場所にある単語を拾うことはできる。しかしそれをPasteboardに書きこむことができないみたい。NSPasteboardの使い方がよくわからないや。明日以降勉強。
上記のコードで、一応辞書.appが起動するところまでは確認できた。ただし渡している単語はNSPasteboardTypeString、というかNSだけという不思議。しかも辞書.appはウィンドウを開いちゃうし。
PDFView、右クリックすると単語を選択してサービスメニューを開くところまで実装されているなあ。空白部分で右クリックすれば、PDF用のサービスメニューが開く。よくできているクラスだ。
追記:
[pb declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];をsetString前に書くと無事動作する。10.6以降でもやはり必要なのね。
0 件のコメント:
コメントを投稿