> (1) サンプルプログラム集の[016]のコード類を参考に
を参考に非常に「姑息」な方法を試してみました.
[印刷プレビュー]ボタンの上にTPanelをかぶせてしまう方法です.
ただし,他のウィンドウを前面にして,また戻ると表示されていまいます.
//=============================================================================
// 継承フォームの[印刷]ボタン
// エクセルの[印刷]ダイアログを表示する
//=============================================================================
procedure TplExcelFormEx2.btnPrintClick(Sender: TObject);
var
pType : OleVariant;
pID : OleVariant;
pTag : OleVariant;
pVisible : OleVariant;
begin
MyPanel := TPanel.Create(Self);
try
pType := EmptyParam;
pID := 4;
pTag := EmptyParam;
pVisible := EmptyParam;
try
xlfExcelApp.CommandBars.FindControl(pType,pID,pTag,pVisible).Execute;
except
end;
finally
FreeAndNil(MyPanel);
end;
end;
//=============================================================================
// このフォームのWndProcメソッド
// エクセルの[印刷]ダイアログを表示したら,表示前に作成したMyPanel(TPanel)を
// [印刷プレビュー]ボタンの上に配置して使用不可にする姑息な方法
//=============================================================================
procedure TplExcelFormEx2.WndProc(var Message: TMessage);
//---------------------------------------------------------------------------
// ウィンドウハンドルからウィンドウのタイトルを取得
//---------------------------------------------------------------------------
function GetWindowTextStr(hWindow: HWND): String;
var
Buffer : Array[0..MAX_PATH-1] of char;
begin
Result := '';
if (GetWindowText(hWindow, Buffer, MAX_PATH)<>0) then begin
Result := Buffer;
end;
end;
//-----------------------------------------------------------------------------
var
DialogWnd : HWND;
ARect : TRect;
APos : TPoint;
begin
inherited;
if Message.Msg = WM_ACTIVATE then begin
DialogWnd := Message.LParam;
if GetWindowTextStr(DialogWnd) <> '印刷' then exit;
GetWindowRect(DialogWnd, ARect);
APos.x := ARect.Left;
APos.y := ARect.Bottom;
MyPanel.Width := 150;
MyPanel.Height := 30;
MyPanel.BevelOuter := bvNone;
MyPanel.ParentWindow := DialogWnd;
APos := MyPanel.ScreenToClient(APos);
MyPanel.Left := APos.X;
MyPanel.ToP := APos.Y - MyPanel.Height;
end;
end;
プロジェクトのダウンロード
http://mrxray.on.coocan.jp/Delphi/zipothers/DD_ExcelPrintDialog_NonPreviewButton.zip
|