[WR3.0]WRSetWEventProc() について

HOME › フォーラム › 旧サポート掲示板 › [WR3.0]WRSetWEventProc() について

  • このトピックは空です。
3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • 投稿者
    投稿
  • #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)でも
    試したところ値が上記と異なるだけで、現象は同じです。
    問題点をご指摘願います。
    宜しくお願いします。

    #1151
    松嶋@ソフトウィング
    ゲスト

    お世話になります。

    コールバックの関数呼び出しの規約は「stdcall」となりますが、
    関数定義に呼び出し規約の指定が見あたらないので、おそらく
    「Delphi」のデフォルト呼び出し規約となっていると思われま
    す。

    以上です。宜しくお願いいたします。

    #1152
    黒木
    ゲスト

    原因は、ご指摘の通りでした。

    ありがとうございました。

3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • フォーラム「旧サポート掲示板」には新規投稿および返信を追加できません。