- このトピックは空です。
-
投稿者投稿
-
2021年6月30日 11:01 AM #1150
黒木
ゲストW2000+Delphi4+APIで開発しています。
「Cヘッダ -> パスカルヘッダ」
//—————————————————-// Event用定義
//—————————————————-type
WEVENTCODE = DWORD;
WREVENTPROC = function(hObject: DWORD;
nCode: WEVENTCODE;
nPalam1: DWORD;
nPalam2: DWORD): Integer;
const
WEVENT_DEF = 1000;
WEVENT_PREVIEW_PRINTOUT = WEVENT_DEF + 1;
WEVENT_PREVIEW_NEXTPAGE = WEVENT_DEF + 2;
WEVENT_PREVIEW_PREVPAGE = WEVENT_DEF + 3;
WEVENT_PREVIEW_TOPPAGE = WEVENT_DEF + 4;
WEVENT_PREVIEW_LASTPAGE = WEVENT_DEF + 5;
WEVENT_PREVIEW_CANCEL = WEVENT_DEF + 6;
WEVENT_PREVIEW_PRINTBUTTONCLICK = WEVENT_DEF + 7;
WEVENT_PREVIEW_PREVIEWCLOSE = WEVENT_DEF + 8;
WEVENT_PREVIEW_PREVIEWQUERYCLOSE = WEVENT_DEF + 9;
WEVENT_PREVIEW_PREVIEWMOUSERCLICK = WEVENT_DEF + 10;
WEVENT_PREVIEW_PREVIEWVIEWCHANGE = WEVENT_DEF + 11;
WEVENT_PREVIEW_PREVIEWMOUSELCLICK = WEVENT_DEF + 12;
WEVENT_PRINTER_PRINTCANCEL = WEVENT_DEF + 13;「プレビューイベントコールバック関数」
//===================================================
// EventProc
//
function EventProc(hObject: DWORD; nCode: WEVENTCODE; nPalam1: DWORD;
nPalam2: DWORD): Integer;
var
pCancel: PBOOL;
bRet: Boolean;
begin
//
Result := 1;
// イベント分岐
case nCode of
// [終了]ボタン
WRCIFAPI.WEVENT_PREVIEW_PREVIEWCLOSE: exit;
// [印刷]ボタン
WRCIFAPI.WEVENT_PREVIEW_PRINTBUTTONCLICK: begin
// 印刷ダイアログ表示抑止
pCancel := PBOOL(nPalam1);
pCancel^ := True;
//
if MessageDlg(‘プレビュー内容を印刷しますか?’,
mtInformation, [mbYes, mbNo], 0) = mrYes then
begin
// プリンターオブジェクト 生成
hPrinter := WRCIFAPI.WRPCreatePrinter(”);
if hPrinter = 0 then exit;
// プリンタ設定用紙に合わせて印刷
WRCIFAPI.WRPSetScalePrint(hPrinter, True);
WRCIFAPI.WRPSetScalePaperFit(hPrinter, True);
// 印刷中止ダイアログ表示抑止
WRCIFAPI.WRPSetCancelDlg(hPrinter, False);
// プリンターオープン
if not WRCIFAPI.WRPOpenPrinter(hPrinter, 0) then
begin
ShowMessage(‘印刷に失敗しました。’);
WRCIFAPI.WRPDeletePrinter(hPrinter);
hPrinter := 0;
exit;
end;
// 出力するレイヤーを指定
WRCIFAPI.WRVSetPrintLayer1(hObject, True);
WRCIFAPI.WRVSetPrintLayer2(hObject, True);
WRCIFAPI.WRVSetPrintLayer3(hObject, True);
WRCIFAPI.WRVSetPrintLayer4(hObject, True);
WRCIFAPI.WRVSetPrintLayer5(hObject, True);
// プレビュー内容をプリンターへ出力
bRet := WRCIFAPI.WRPPreviewPrint(hPrinter,
hObject, 1);
// プリンタークローズ
WRCIFAPI.WRPClosePrinter(hPrinter, bRet);
end
else exit;
end;
end;
//
Result := 0;
end;このPasヘッダで、印刷プレビューのコールバック関数を
作成したのですが、イベントコードに不正?な値が入ってくる為、
正しく分岐処理ができません。「印刷」ボタンを押した場合:1244044
「終了」ボタンを押した場合:1244068のような値です。また、他OS(W95・W98)でも
試したところ値が上記と異なるだけで、現象は同じです。
問題点をご指摘願います。
宜しくお願いします。2021年6月30日 11:01 AM #1151松嶋@ソフトウィング
ゲストお世話になります。
コールバックの関数呼び出しの規約は「stdcall」となりますが、
関数定義に呼び出し規約の指定が見あたらないので、おそらく
「Delphi」のデフォルト呼び出し規約となっていると思われま
す。以上です。宜しくお願いいたします。
2021年6月30日 11:01 AM #1152黒木
ゲスト原因は、ご指摘の通りでした。
ありがとうございました。
-
投稿者投稿
- フォーラム「旧サポート掲示板」には新規投稿および返信を追加できません。