Home ソフトウエア プログラム Vista で Excel を再前面に表示
Vista で Excel を最前面に表示

Vista  Excel を最前面に表示する

他のブログに掲載していた記事ですが、アクセス多いみたいだし、自分でも記事の場所忘れそうなので((+_+))
ここに再掲載(2009/06)
 
Vista で Excel にデータを書き込む際に Excel を呼び出すアプリが前面表示される。
客先から今までの Windows XP と同じように Excel を最前面に表示して欲しいとの要望。
調べてみたら SetWindowPos で実現できました。
以下、サンプルコード

procedure TForm1.BitBtn1Click(Sender: TObject);
const
 xlMaximized = -4137;
var
 E_Excel,E_Application,E_WorkBook,E_WorkSheet: OleVariant;
 AHWnd: HWND;
 ACaption: string;
begin
  try
   E_Excel := CreateOleObject('Excel.Application');
   try
    E_Application := E_Excel.Application;
    E_Application.WorkBooks.Add;
    E_WorkBook := E_Application.ActiveWorkbook;
    E_WorkBook.WorkSheets[1].Activate;
    E_WorkSheet := E_Application.ActiveSheet;
    E_Excel.WindowState := xlMaximized;
    E_WorkSheet.Cells[1,1].Value := 'ABC-123';
   
    // 最前面処理分岐
    if (Sender as TBitBtn) = BitBtn1 then
    begin // Excel 最前面に表示
     ACaption := E_Excel.Caption;
     AHWnd := FindWindow(nil,PChar(ACaption));
     SetWindowPos(AHWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or
                                       SWP_NOSIZE or
                                       SWP_NOOWNERZORDER);
    end;
    E_Application.Visible := True; // XP 迄はこの記述のみで最前面表示
   except
    E_Excel.Quit;
    raise;
  end;
 finally
  E_WorkBook  := Unassigned;
  E_WorkSheet := Unassigned;
  E_Excel   := Unassigned;
 end;
 ShowMessage('OK?'); // Vista ではこの部分で Excel が背面に移動
end;
最終更新 2017年 5月 07日(日曜日) 21:11
 
バナー