喫茶XRAYトップページ

[スレッド全体
]

[5003] Re2:TAcroPDFのフォーカス返信 削除
2011/7/13 (水) 13:32:55 Mr.XRAY
>SendMessage(Handle, WM_NEXTDLGCTL, 1, 0);も試しましたがだめでした。

でダメなのでダメなんですね.
う〜む.PDFの表示が完了してからフォーカス移動する必要があるようです.
さて...


[5004] Re3:TAcroPDFのフォーカス返信 削除
2011/7/13 (水) 14:28:15 Atchoum
▼ Mr.XRAYさん
> >SendMessage(Handle, WM_NEXTDLGCTL, 1, 0);も試しましたがだめでした。
>
> でダメなのでダメなんですね.
> う〜む.PDFの表示が完了してからフォーカス移動する必要があるようです.
> さて...


調べてみると、タイマー使って・・・なんていう解決法もあったり。
でも同じ悩みの書き込みが国内外問わずあったのですが、タイマー以外に解決されていませんでした。

PDFの表示が完了したのを教えてくれるイベントも
探してみたものの見つかりませんでした。
→TAcroPDFを継承して、Protectedで宣言されているイベントも調べました。

[5005] Re4:TAcroPDFのフォーカス返信 削除
2011/7/13 (水) 14:43:01 Mr.XRAY
▼ Atchoumさん

> 調べてみると、タイマー使って・・・なんていう解決法もあったり。

なるほど.
何かないのかな... 困りました.
同じようにPDFを表示するサンプル
[724_Adobe Acrobatオブジェクトの操作]もあるのですが,
こちらだと原理的にフォーカス移動は簡単です.しかしですね.
このサンプルは,結構面倒なんです.Adobe Acrobat(アドビアクロバット)
そのものが必要で,しかもバージョンが違うと例外が発生してしまうんです.

>探してみたものの見つかりませんでした。
>→TAcroPDFを継承して、Protectedで宣言されているイベントも調べました。


Atchoumさんがさんざんやってダメなので,多分私の手には負えないでしょう
(と言って逃げる...) (^^;
少しは考えてみます.期待はしないでくださいませ.

[5006] Re5:TAcroPDFのフォーカス返信 削除
2011/7/13 (水) 23:39:26 Mr.XRAY
> 少しは考えてみます.期待はしないでくださいませ.

継承元のTOleControlも見て,実際に少しテストしてみましたが,
使用できるのはないようです.TAcroPDFにも,もちろんないようです.
元々そういうコントロールだと言えばそれまでなのですが.

やはり,タイマーで監視して,フォーカス移動したら,タイマー監視
を止める.という方法しかないのかも知れません.

[5007] Re5:TAcroPDFのフォーカス返信 削除
2011/7/14 (木) 06:27:24 Mr.XRAY
> 少しは考えてみます.期待はしないでくださいませ.

こんな感じでできるようです.
原理は,Acrobatの文書にフォーカス移動していると,SetFocusしても
SetActiveWindowを実行しても機能しないので,キー操作の[TAB]をコードで
実行するという方法です.
動作確認は,Windows XP(SP3) + Delphi 7 Pro + Acrobat Reader9.4.5

procedure TForm1.Button1Click(Sender: TObject);
begin
  //フォーカスコントロール
  //Button1クリックでButton1にフォーカス(ActiveControl)が移動して
  //いるので,ここで再設定
  //FocusControl(Memo1);でも可
  ActiveControl := Memo1;

  with OpenDialog1 do begin
    DefaultExt:='PDF';
    Filter:='Acrobat PDFファイル|*.PDF';
    Options:=[ofReadOnly];

    if Execute then begin
      Update;
      AcroPDF1.LoadFile(FileName);
      AcroPDF1.setShowToolbar(False);

      //LoadFileで文書を読み込むとAcrobatにフォーカス移動する
      //[TAB]キーで,Acrobat文書からフォーカス移動しておかないと機能しない
      keybd_event( VK_TAB, 0, 0 , 0 );
      keybd_event( VK_TAB, 0, KEYEVENTF_KEYUP , 0 );
      //ここでMemo1.SetFocusのように設定してもよい
    end;
  end;
end;

ところで,[720]のサンプル,リサイズしても,文章の表示サイズが
変更されない場合があります.文書をクリックすると変化します.
Refreshメソッドを実行しても変化しません.
何か方法をご存知でしたら教えてください.


[5008] Re6:TAcroPDFのフォーカス返信 削除
2011/7/14 (木) 06:34:56 Mr.XRAY
参考までに,Acrobat文書のハンドルは以下のように取得できます.

// protected部アクセス用設定
type
  TMyActoPDF = class(TAcroPDF);

var
  AWnd : HWND;

としておいて,

if AcroPDF1.Visible then
  TMyActoPDF(AcroPDF1).OleInPlaceSite_GetWindow(AWnd);

を実行すると,AWndの値が文書のハンドルとなります.
もしかしたら,Acrobatのハンドルかも知れません(未確認です).


[5009] Re7:TAcroPDFのフォーカス返信 削除
2011/7/14 (木) 11:03:30 Atchoum
お返事ありがとうございます。

KeyEvent作戦やってみましたがやはりだめです。
機能しているようですが、またPDF側に戻ってしまっているような気がします。

タイマーイベントを実行しフォーカスをMemoに移動。
移動できたらタイマー終了。

を試したところ、すぐにTimerは終了。

その後上下キーを押すとPDFのほうのスクロールが上下しています。

ツールバーを非表示にしてもPDFを開いたときに
半透明なフローティングツールバー?がもや〜んと表示されるのも気になります。
このツールバーにあるアドビマークを押下するとツールバーが表示されます。

こちらでリサイズは大丈夫でした。
「変更されない場合があります」とありますが、
変更される場合もあるし、ないばあいもあるということですか?

[5010] Re8:TAcroPDFのフォーカス返信 削除
2011/7/14 (木) 15:26:20 Mr.XRAY
▼ Atchoumさん

> KeyEvent作戦やってみましたがやはりだめです。
> 機能しているようですが、またPDF側に戻ってしまっているような気がします。


今,Windows 7でやってみました.
同じです.フォーカス移動してくれません.ダメでした.
う〜ん,Acrobatのやつめ!!

>その後上下キーを押すとPDFのほうのスクロールが上下しています。

当然そうなりますよね.

> こちらでリサイズは大丈夫でした。
> 「変更されない場合があります」とありますが、
> 変更される場合もあるし、ないばあいもあるということですか?


そうなんです.何か微妙なタイミングとでもいうのでしょうか.
う〜ん,Acrobatのやつめ!!


[5011] Re9:TAcroPDFのフォーカス返信 削除
2011/7/14 (木) 16:02:41 Mr.XRAY
> > こちらでリサイズは大丈夫でした。
> > 「変更されない場合があります」とありますが、
> > 変更される場合もあるし、ないばあいもあるということですか?
>
> そうなんです.何か微妙なタイミングとでもいうのでしょうか.
> う〜ん,Acrobatのやつめ!!


リサイズ解決(?)かどうかは分かりませんが,
Windows XP(SP3)または,Windows 7 U64上でDelphi 2010でコンパイルして
作成したEXEだと正常リサイズしました.
う〜ん,Acrobatめ!


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82