喫茶XRAYトップページ

[スレッド全体
]

[5020] Re7:TAcroPDFのフォーカス 挫折返信 削除
2011/7/18 (月) 16:43:46 Sara
▼ Mr.XRAYさん

> TimerをOFFにしないので、PDFをキーで操作できませんが・・・(笑)
> ビュワーとしてならこれで十分かも・・・


procedure TForm1.AcroPDF1Enter(Sender: TObject);
begin
   Timer1.Enabled := False;
end;

としておくと、一応キー操作も可能なようです。

[5021] Re8:TAcroPDFのフォーカス 挫折から立ち直り完成返信 削除
2011/7/18 (月) 19:17:01 Mr.XRAY
▼ Saraさん,やってくれましたね.
この店の常連さんは,まったく.
しかし,このぐらいのプログラムも出来ないとは.能力の限界か?
えっ? 昔からだろうって? ハイハイ.
悔しいでございます.バッチリ動作しますです(涙).

var
  AFocusControl : TWinControl;

//=============================================================================
//  フォーカスをセットするコントロールを指定
//  タイマーコンポ設定
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  AFocusControl  := ListView1;
  ActiveControl  := AFocusControl;

  Timer1.Enabled  := False;
  Timer1.Interval := 10;
end;

//=============================================================================
//  ファイル選択ダイアログでPDFファイルを選択して表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  with OpenDialog1 do begin
    DefaultExt:='PDF';
    Filter:='Acrobat PDFファイル|*.PDF';
    Options:=[ofReadOnly];

    if Execute then begin
      Update;
      AcroPDF1.LoadFile(FileName);
      AcroPDF1.setShowToolbar(False);
      Timer1.Enabled := True;
    end;
  end;
end;

//=============================================================================
//  表示方式の変更
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
  if not AcroPDF1.Visible then exit;

  if Sender=Button2 then AcroPDF1.setView('fit');
  if Sender=Button3 then AcroPDF1.setView('fitwindow');
  if Sender=Button4 then AcroPDF1.setView('fith');
  if Sender=Button5 then AcroPDF1.setView('fitb');
  if Sender=Button6 then AcroPDF1.setView('fitbh');
  if Sender=Button7 then AcroPDF1.setView('fitbv');
  if Sender=Button8 then AcroPDF1.setView('fitv');

  Windows.SetFocus(AFocusControl.Handle);
end;

//=============================================================================
//  フォーカス移動のためのタイマーイベント
//  PDF文書は,読み込み表示の際,PDF文書にフォーカス移動してしまうのでその対策
//=============================================================================
procedure TForm1.Timer1Timer(Sender: TObject);
var
  hWindow :HWnd;
  cName   : array[0..MAX_PATH - 1] of char;
begin
  if Form1.Active then begin
    hWindow := Windows.GetFocus;
    GetClassName(hWindow, cName, sizeof(cName));
    if cName = 'AVL_AVView' then begin
      if not AFocusControl.Focused then Windows.SetFocus(AFocusControl.Handle);
    end;
  end;
end;

//=============================================================================
//  PDFをクリックしたらPDFをキーやマウスで操作可能にするため,タイマーをOFF
//  これがない場合(タイマーイベントが有効な場合)は,PDF文書のページ移動は,ス
//  クロールバーのマウス操作.あるいは,操作用のコードでのみ可能となる
//=============================================================================
procedure TForm1.AcroPDF1Enter(Sender: TObject);
begin
  Timer1.Enabled := False;
end;


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