本日書いたのはこれだけ。
-(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 件のコメント:
コメントを投稿