- このトピックは空です。
-
投稿者投稿
-
2021年6月30日 5:08 PM #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;2021年6月30日 5:09 PM #1878松嶋@ソフトウィング
ゲストお世話になります。
大変申し訳ございませんが、例外が発生した箇所にて
「WR3AXCL1.LastError」及び「WR3AXCL1.LastErrorText」プ
ロパティを取得し、ご連絡頂けないでしょうか?以上です。宜しくお願い致します。
2021年6月30日 5:09 PM #1879Marin
ゲストお世話になっております。
>例外が発生した箇所にて
>WR3AXCL1.LastError及び
>「WR3AXCL1.LastErrorText」
>プロパティを取得し、ご連絡頂けないでしょうか?上記の件の対応を行いました。
except文内に
ShowMessage(IntToStr(WR3AXCL1.LastError) + ‘: ‘ + WR3AXCL1.LastErrorText);
を行った結果は
WR3AXCL1.LastError = 0
WR3AXCL1.LastErrorText = ”
でした。例外の発生ポイントは、
やはり waxPreview.FormatReport(WRReport(waxReport));
でした。(もしこちらで使用しているレポートファイルが必要であれば
連絡下さい。)以上、宜しくお願いします。
2021年6月30日 5:09 PM #1880松嶋@ソフトウィング
ゲストご連絡ありがとうございます。
エラー番号が取得できていないため、実際のエラーは判明し
ませんが、プレビューオブジェクトのOpenメソッドを呼び出
した後に、FormatReportを使用してください。以上です。宜しくお願い致します。
2021年6月30日 5:09 PM #1881Marin
ゲストお世話になっております。
>プレビューオブジェクトの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;2021年6月30日 5:09 PM #1882松嶋@ソフトウィング
ゲストご連絡ありがとうございます。
「ReqWidthが取得できません。」と、ご連絡頂いております
が、不正確な値が取得されるのでしょうか?
また、テキストオブジェクトをフレーム内に作成しないで処
理を行った場合は如何でしょうか?大変お手数ですが、宜しくお願い致します。
2021年6月30日 5:09 PM #1883Marin
ゲストお世話になっております。
>「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引数???’);2021年6月30日 5:10 PM #1884Marin
ゲストお世話になっております。
こちらの調査結果を報告致します。
テキストオブジェクトの作成が動的、静的に関わらず
フレームオブジェクト上に作成した場合に
ReqWidth, ReqHeightが取得できないようです。
ただ、先ほど書いたように
テキストオブジェクトをフレーム内に作成しないように
Createする方法が分かりません。
また、できるだけフレーム内に作成したい場合に
方法があるのでしたらその実装方法も
教えていただけないでしょうか?
色々お手数をお掛けして申し訳ありませんが、
宜しくお願いします。2021年6月30日 5:10 PM #1885Marin
ゲストお世話になっております。
その後、どうなったのでしょうか?
お手数ですが、宜しくお願いします。2021年6月30日 5:10 PM #1886松嶋@ソフトウィング
ゲストご連絡が遅れて申し訳ありません。
ご連絡頂きました内容から調査を行った結果、フレーム配下
に作成された描画コントロールはフォーマット処理が無効と
なる場合が見つかりましたので、対応を行います。
対応が完了次第、弊社ホームページにて公開させて頂きま
すので、しばらくお待ち下さいます様お願い致します。フレーム内に描画コントロールを作成しない場合は、第6パラ
メーターを省略して作成を行ってください。以上です。宜しくお願い致します。
2021年6月30日 5:11 PM #1887Marin
ゲスト>フレーム内に描画コントロールを作成しない場合は、第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引数???’);2021年6月30日 5:11 PM #1888中嶋 敦
ゲストお世話様になっております。ソフトウィング中嶋です。
第6パラメータの省略の件ですが
EmptyParam を使用することで省略することができます。使用方法
tmpWRObject := waxReport.Layer[2].Create(wrOBJECTTYPE_TEXT,10, 10, 30, 20,EmptyParam );のようになります。
EmptyParamについての詳細はDelphiのHelpをご参照ください。以上宜しくお願い致します。
-
投稿者投稿
- フォーラム「旧サポート掲示板」には新規投稿および返信を追加できません。