【WR 3.0】FormatReportとReqWidthについて

HOME › フォーラム › 旧サポート掲示板 › 【WR 3.0】FormatReportとReqWidthについて

  • このトピックは空です。
12件の投稿を表示中 - 1 - 12件目 (全12件中)
  • 投稿者
    投稿
  • #1877
    Marin
    ゲスト

    お世話になっております。
    当方、Delphi5で開発しています。

    実現させたい事は、
    レポートファイルに動的にTextオブジェクトを作成して文字列を設定し、
    設定した文字列の幅を計算して最適化した幅で表示させる事です。

    調べた所、「ReqWidth」を使用すれば実現できそうなのですが
    前提条件として「FormatReport」を行う必要があるとの事です。
    自分なりにヘルプやサンプルを見て同じように実装したつもりですが
    ★の部分がうまくいっていないようです。
    何か実装方法など間違いや、その他前提条件などありましたら
    教えて下さい。
    宜しくお願いします。

    procedure TForm1.Button5Click(Sender: TObject);
    var
    tmpWRObject: WRObject;
    begin
    if FileExists(GetCurrentDir + ‘\PrintTest.w30’) then
    begin
    try
    {レポートファイルのロード}
    waxReport := WR3AXCL1.LoadReport(GetCurrentDir + ‘\PrintTest.w30’);

    waxReport.Layer[1].ClearData;
    waxReport.Layer[2].ClearData;
    waxReport.Layer[1].Visible := False;
    waxReport.Layer[2].Visible := True;

    tmpWRObject := waxReport.Layer[2].Create(wrOBJECTTYPE_TEXT,
    10, //Left
    10, //top
    80, //width
    20, //Height
    waxReport.Layer[2].WRObject(‘MainFrame’));

    with tmpWRObject do
    begin
    FontSize := 18;
    FontName := ‘MS ゴシック’;
    TextLayoutHorz := wrTEXTLAYOUTHORZ_RIGHT;
    Text := ‘Miyasaka0123456789’;
    end;

    {FormatReportを行わないとReqWidthの値は不定となる}
    {★ここで例外…?}
    waxPreview.FormatReport(WRReport(waxReport));
    {最適化されたReqWidthとReqHeightを取得}
    tmpWRObject.Width := tmpWRObject.ReqWidth;
    tmpWRObject.Height := tmpWRObject.ReqHeight;

    {プレビュー画面表示}
    waxPreview := WR3AXCL1.CreatePreview;
    waxPreview.OpenPreview(wrPREVIEWMODE_OVERLAP);
    waxPreview.ReportPrint(waxReport);
    except
    {エラー処理}
    WR3AXCL1.ClearLastError;
    end;
    end;
    end;

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

    お世話になります。

    大変申し訳ございませんが、例外が発生した箇所にて
    「WR3AXCL1.LastError」及び「WR3AXCL1.LastErrorText」プ
    ロパティを取得し、ご連絡頂けないでしょうか?

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

    #1879
    Marin
    ゲスト

    お世話になっております。

    >例外が発生した箇所にて
    >WR3AXCL1.LastError及び
    >「WR3AXCL1.LastErrorText」
    >プロパティを取得し、ご連絡頂けないでしょうか?

    上記の件の対応を行いました。
    except文内に
    ShowMessage(IntToStr(WR3AXCL1.LastError) + ‘: ‘ + WR3AXCL1.LastErrorText);
    を行った結果は
    WR3AXCL1.LastError = 0
    WR3AXCL1.LastErrorText = ”
    でした。

    例外の発生ポイントは、
    やはり waxPreview.FormatReport(WRReport(waxReport));
    でした。

    (もしこちらで使用しているレポートファイルが必要であれば
    連絡下さい。)

    以上、宜しくお願いします。

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

    ご連絡ありがとうございます。

    エラー番号が取得できていないため、実際のエラーは判明し
    ませんが、プレビューオブジェクトのOpenメソッドを呼び出
    した後に、FormatReportを使用してください。

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

    #1881
    Marin
    ゲスト

    お世話になっております。

    >プレビューオブジェクトのOpenメソッドを呼び出した後に、>FormatReportを使用してください

    ご指摘頂いた通りに修正を行いました。

    例外は発生しなくなりましたが、
    ReqWidthが取得できません。
    まだ何か順序、前提条件などでお気づきの点があれば
    教えて下さい。
    宜しくお願いします。

    procedure TForm1.Button3Click(Sender: TObject);
    var
    tmpWRObject: WRObject;
    begin
    if FileExists(GetCurrentDir + ‘\QPrintTest(J).w30’) then
    begin
    try
    {レポートファイルのロード}
    waxReport := WR3AXCL1.LoadReport(GetCurrentDir + ‘\QPrintTest(J).w30’);

    waxReport.Layer[1].ClearData;
    waxReport.Layer[2].ClearData;
    waxReport.Layer[1].Visible := False;
    waxReport.Layer[2].Visible := True;

    tmpWRObject := waxReport.Layer[2].Create(wrOBJECTTYPE_TEXT,
    10, //Left
    10, //top
    80, //width
    20, //Height
    waxReport.Layer[2].WRObject(‘MainFrame’));

    with tmpWRObject do
    begin
    FontSize := 18;
    FontName := ‘MS ゴシック’;
    TextLayoutHorz := wrTEXTLAYOUTHORZ_RIGHT;
    Text := ‘Miyasaka0123456789’;
    end;

    {★ご指摘頂いた修正を反映: プレビューオブジェクトの生成→Open→FormatReport}
    waxPreview := WR3AXCL1.CreatePreview;
    waxPreview.OpenPreview(wrPREVIEWMODE_OVERLAP);
    waxPreview.FormatReport(waxReport);

    {最適化されたReqWidthとReqHeightを取得なはず?}
    tmpWRObject.Width := tmpWRObject.ReqWidth;
    tmpWRObject.Height := tmpWRObject.ReqHeight;

    {プレビュー画面表示}
    waxPreview.ReportPrint(waxReport);
    except
    {エラー処理}
    ShowMessage(IntToStr(WR3AXCL1.LastError) + ‘: ‘ + WR3AXCL1.LastErrorText);
    WR3AXCL1.ClearLastError;
    end;
    end;
    end;

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

    ご連絡ありがとうございます。

    「ReqWidthが取得できません。」と、ご連絡頂いております
    が、不正確な値が取得されるのでしょうか?
    また、テキストオブジェクトをフレーム内に作成しないで処
    理を行った場合は如何でしょうか?

    大変お手数ですが、宜しくお願い致します。

    #1883
    Marin
    ゲスト

    お世話になっております。

    >「ReqWidthが取得できません。」と、ご連絡頂いておりますが、
    >不正確な値が取得されるのでしょうか?

    ReqWidth, ReqHeightともに常に0が返されていました。

    >また、テキストオブジェクトをフレーム内に作成しないで
    >処理を行った場合は如何でしょうか?

    上記のテキストオブジェクトをフレーム内に作成しないで
    オブジェクトを作成する方法が分からないので教えて下さい。

    現状のソースでは下記ソースのようになっていますが、
    ヘルプを見るとCreateメソッドの第6引数に作成追加先WRObjectオブジェクト。
    (wrOBJECTTYPE_FRAMEタイプのみ)となっていたのでFrame上にオブジェクトを
    作成するようにしていました。

    テキストオブジェクトをフレーム内に作成しないようにするには
    この第6引数に何を追加すれば良いのでしょうか?

    tmpWRObject := waxReport.Layer[2].Create(wrOBJECTTYPE_TEXT,
    10, //Left
    10, //top
    80, //width
    20, //Height
    waxReport.Layer[2].WRObject(‘MainFrame’));

    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    tmpWRObject := waxReport.Layer[2].Create(wrOBJECTTYPE_TEXT,
    10, //Left
    10, //top
    80, //width
    20, //Height
    ‘第6引数???’);

    #1884
    Marin
    ゲスト

    お世話になっております。

    こちらの調査結果を報告致します。

    テキストオブジェクトの作成が動的、静的に関わらず
    フレームオブジェクト上に作成した場合に
    ReqWidth, ReqHeightが取得できないようです。
    ただ、先ほど書いたように
    テキストオブジェクトをフレーム内に作成しないように
    Createする方法が分かりません。
    また、できるだけフレーム内に作成したい場合に
    方法があるのでしたらその実装方法も
    教えていただけないでしょうか?
    色々お手数をお掛けして申し訳ありませんが、
    宜しくお願いします。

    #1885
    Marin
    ゲスト

    お世話になっております。

    その後、どうなったのでしょうか?
    お手数ですが、宜しくお願いします。

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

    ご連絡が遅れて申し訳ありません。

    ご連絡頂きました内容から調査を行った結果、フレーム配下
    に作成された描画コントロールはフォーマット処理が無効と
    なる場合が見つかりましたので、対応を行います。
    対応が完了次第、弊社ホームページにて公開させて頂きま
    すので、しばらくお待ち下さいます様お願い致します。

    フレーム内に描画コントロールを作成しない場合は、第6パラ
    メーターを省略して作成を行ってください。

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

    #1887
    Marin
    ゲスト

    >フレーム内に描画コントロールを作成しない場合は、第6パラ
    >メーターを省略して作成を行ってください。

    お世話になっております。
    私の間違いで第6パラメータではなく第5パラメーターでした。
    しかし、第5パラメーターの省略と言うのは具大的にどのように行えば良いのでしょうか?
    色々試しましたが、引数を省略した場合はコンパイルができません。
    引数をnilにしても、同様でした。また引数をUnassignedにしてもコンパイルは通りますが、
    実行時エラーとなります。

    また、対策完了するのにはどれ位かかるのでしょうか?
    現在、開発が止まってしまっている状態なので宜しくお願いします。

    tmpWRObject := waxReport.Layer[2].Create(wrOBJECTTYPE_TEXT,
    10, //Left
    10, //top
    80, //width
    20, //Height
    waxReport.Layer[2].WRObject(‘MainFrame’));

    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    tmpWRObject := waxReport.Layer[2].Create(wrOBJECTTYPE_TEXT,
    10, //Left
    10, //top
    80, //width
    20, //Height
    ‘第5引数???’);

    #1888
    中嶋 敦
    ゲスト

    お世話様になっております。ソフトウィング中嶋です。

    第6パラメータの省略の件ですが
    EmptyParam を使用することで省略することができます。

    使用方法
    tmpWRObject := waxReport.Layer[2].Create(wrOBJECTTYPE_TEXT,10, 10, 30, 20,EmptyParam );

    のようになります。
    EmptyParamについての詳細はDelphiのHelpをご参照ください。

    以上宜しくお願い致します。

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