ナレッジベース
SP2 において、FieldやLabelコントロールにコントロール幅以上の文字列をセットすると何も表示されない場合がある
対象製品
ActiveReports 2.0J Professional
ステータス
回避方法あり
詳細
SP2 において、FieldやLabelコントロールにコントロール幅以上の文字列をセットすると何も表示されない場合があります。
本事象は、以下の条件を全て満たす時に発生致します。
上記の内容を全て満たす場合、SP2(2.4.2.1307)より前のバージョンではコントロールの幅にあわせて文字列がカットされた状態で出力されていたのに対し、SP2 では空白となってしまいます。
なお、本事象は、以下のようなケースでのみ発生する事象です。
(例:レポートを PDFファイルにエクスポートする)
本事象は、以下の条件を全て満たす時に発生致します。
- Field 及び Labelコントロールに収まりきらない長さの文字列を出力している。
- WordWrapプロパティを"True"に設定している。
- VerticalAlignmentプロパティを"0 - ddTXTop"に設定している。
上記の内容を全て満たす場合、SP2(2.4.2.1307)より前のバージョンではコントロールの幅にあわせて文字列がカットされた状態で出力されていたのに対し、SP2 では空白となってしまいます。
なお、本事象は、以下のようなケースでのみ発生する事象です。
- Webアプリで ActiveXビューワ(arview2.cab)を使用して、レポートをプレビュー・印刷している。
- Windowsフォームアプリで ARViewer2コントロールを使用して、レポートをプレビュー・印刷している。
- Windowsフォームアプリで Showメソッドを使用して、レポートのプレビュー・印刷を行っている。
- Windowsフォームアプリで PrintReportメソッドやPrintPageメソッドを使用して、レポートを印刷している。
- レポートを Tiff形式ファイルにエクスポートしている。
(例:レポートを PDFファイルにエクスポートする)
回避方法
本件に対応した HotFix版(バージョン 2.4.2.1308)を公開致しました。アプリケーションの形式にあわせて、以下の通り、ご対応ください。
なお、上記のように修正版を適用せずに、本現象を回避する方法といたしましては、以下のような方法が考えられます。あわせてご参考ください。
- Webアプリケーションで ActiveXビューワを使用している場合(前述 a.のケースに該当する場合)
こちらから、対応ずみの Cabファイルをダウンロードいただき、運用環境(サーバー)に適用ください。
なお、クライアントに既にインストールされている ActiveXビューワを新しいバージョンに更新する方法については、「Webアプリケーションで ActiveXビューワを使用している場合に、クライアントに既にインストールされているActiveXビューワよりも新しいバージョンのビューワを自動的にダウンロードさせる方法はありますか?」をご覧ください。
※上記文書のサンプルコードでは、codeBase属性に"2,4,2,1306"と記述しておりますが、本修正版を適用する場合には、「codeBase="arview2.cab#version=2,4,2,1308"」と記述してください。
- 上記「詳細」で説明されているケースの b.から e.に該当する場合
本件に関する修正版を適用した開発環境で移行作業を行い、アプリケーションをリコンパイルした上で、アプリケーションと ActiveReports のランタイムファイルを実行環境に再配布する必要がございます。(こちらの内容と同様の作業になります)
修正版のインストーラは、こちらからダウンロードしてください。
また、実行環境に配布すべきファイルについては、製品ヘルプの以下のトピックが参考になると存じます。こちらをご覧ください。
[ActiveReports 2.0J 製品ヘルプ 目次]
はじめに
- ファイルの配布について
なお、上記のように修正版を適用せずに、本現象を回避する方法といたしましては、以下のような方法が考えられます。あわせてご参考ください。
- プロパティを変更する方法
本事象は WordWrap と VerticalAlignmentプロパティが特定の値に設定されている時にのみ発生する事象です。
これらのプロパティを発生しない値に設定することで、ご指摘の事象を回避することが可能です。
なお、デザイナ上でプロパティを予め変更する以外にも、コード上で動的にプロパティを設定する方法が考えられます。以下のコードをご参考の上、ご検討ください。
◆サンプルコード
(レポート側の処理)
' ※ReportStartイベント内でプロパティの値を設定すると
' レポートの処理中はその値がデフォルト値として有効に
' なります。
Private Sub ActiveReport_ReportStart()
Call fncSetProperty(Me.Sections)
End Sub
(共通モジュール側の処理)
Public Sub fncSetProperty(pSecs As Sections)
Dim i As Integer
Dim j As Integer
' レポート上の全てのセクションに対して、セクション上の
' 全てのコントロールを取得し、Field 又は Label の時のみ
' WordWrapプロパティを"False"に設定します。
For i = 0 To pSecs.Count - 1
For j = 0 To pSecs(i).Controls.Count - 1
If (TypeOf pSecs(i).Controls(j) Is Field) Or _
(TypeOf pSecs(i).Controls(j) Is Label) Then
pSecs(i).Controls(j).WordWrap = False
End If
Next j
Next i
End Sub
Sections や Controlsプロパティについては、製品ヘルプの以下のトピックをご覧ください。
[ActiveReports 2.0J 製品ヘルプ 目次]
リファレンス
- ActiveReportデザイナ
- ActiveReportオブジェクト
- ActiveReportプロパティ一覧
- Sectionsプロパティ(ActiveReport)
- Sectionオブジェクト
- Sectionプロパティ一覧
- Controlsプロパティ(Section)
- 一定の長さに文字列を加工する方法
コントロールに収まるような長さ(文字数)にコード上で文字列をカットする方法です。以下のコードをご参考ください。
◆サンプルコード
Private Sub Detail_Format()
' 最大14バイトで文字をカットします。
Me.FldName.Text = StrConv( _
LeftB$(StrConv(Me.FldName.Text, vbFromUnicode), 14) _
, vbUnicode)
End Sub
なお、実際の文字列の幅は使用するフォントによって変化致します。
特にプロポーショナルフォントの場合、文字によって幅が異なるため、出力される文字列によって見た目が変化致します。
[文字の種類 (MS 明朝と MS P 明朝) の違いについて]
http://support.microsoft.com/kb/879879/ja
こちらの方法を用いる場合には、等幅フォントを使用することをお勧め致します。
キーワード
08048


