掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Excelプレビュー表示時のメニューボタンを無効にするには? (ID:20498)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
きやすめさん。返信ありがとうございます。 教えていただいたソースで試したところ,かなり早くなりました。 若干見えるのは,使用に影響及ぼさない時間なのでこのまま様子見ようと思います。 APIにはまだまだ知らない関数が多かったので本当に助かりました。 SetTimerに関しては,プレビュー時にどうしても動かないので今回は使用しないようにします。 使用方法が間違っているおそれは大いにありえますが・・・。 別の機会にSetTimerを使うことが有れば再度勉強したいと思います。 今回の件に関しては,これで解決とさしていただこうと思います。 本当にありがとうございました。 //============================================================================== //宣言 //============================================================================== type TForm1 = class(TForm) ・ ・ private ・ ・ procedure EnablePreview(Excel, xlsWks: Variant); public { Public 宣言 } end; //------------------------------------------------------------------------------ //============================================================================== //Excelプレビュー //============================================================================== procedure TForm1.Button1Click(Sender: TObject); var Excel: Variant; xlsWkb: Variant; xlsWks: Variant; begin ・ Excel接続 ・ //プレビュー EnablePreview(Excel, xlsWks); ・ Excel解放 ・ end; //------------------------------------------------------------------------------ //============================================================================== //Excelプレビュー時,特定のボタン無効化(スレッドにて並列処理) //============================================================================== procedure TForm1.EnablePreview(Excel, xlsWks: Variant); var TimerID: WORD; begin Thread1 := Thread.Create(True); Thread1.FreeOnTerminate := True; Thread1.Resume; try xlsWks.Printpreview; finally Excel.Visible := False; end; end; //------------------------------------------------------------------------------ //============================================================================== //スレッド側の処理 //============================================================================== procedure Thread.Execute; var hWnd: WORD; i: Integer; begin while not Terminated do begin hWnd := FindWindowExA(0, 0, 'XLMAIN', nil); if hWnd <> 0 then begin Application.ProcessMessages; ShowWindow(hWnd, SW_SHOWNORMAL); SetForegroundWindow(hWnd); hWnd := FindWindowExA(hWnd, 0, 'EXCELC', nil); if (hWnd <> 0) and (IsWindowVisible(hWnd)) then begin for i:=1 to 9 do begin case i of 3,4,5,6,9: EnableWindow(GetDlgItem(hWnd, i), False); else end; end; Break; end; end; end; Terminate; end; //------------------------------------------------------------------------------
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.