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 |