LastUpdate: 2011/10/21 03:13:54
戻る
001 プロジェクトに組み込むには
002 オブジェクト名はどこで指定するの?
003 出力文字の属性を動的に変えるには?
004 アンバウンド出力の一番簡単な例
005 シンプルにプリンタに出力するパターンの例
006 Runメソッドは早い Showメソッドは遅い
007 イベントの発生順序は保証されないぞ
008 グループ機能を使用した時に、ページカウントが正しく表示されない。
20050325 CanGrowのフィールドに対応して、セッションの罫線を伸ばしたい
20050330_縦線が有るときに、CanGrowが有効になってくれない
Helpをみると、コントロールの追加から行なうよう書いてあったが、「名前が不正」と怒られた。
しかし、いきなり、メニューからの[追加]で、出来たぞ!?
2002/07/23 ver1.5
アクティブレポートのデザイナを開いた状態で、プロパティ(F4)を選択すると、指定できる。
各セクション以外の所を選択するのがポイント
2002/07/23 ver1.5
フォントプロパティをプログラムから変更すれば良いです。
'アンダーバーを引く
rpt.Field1.Font.Underline = True
2002/08/29
アンバウンドフィールドタイプの一番簡単な実装
アクティブレポート内のコーディング
Option Explicit
Private ix As Long
Private Sub ActiveReport_FetchData(EOF As Boolean)
Field4.Text = ix
If ix > 100 Then
EOF = True
Else
ix = ix + 1
EOF = False
End If
End Sub
サンプル例にあるような、Fieldsコレクションを使用しなくても、これでできました。
ただし、EOFは、セットしないとTrueになってしまうようなので、Falseをセットしないとダメですねー
アクティブレポートを制御する側のVBの方はこんな感じです。これは、プレビュー画面を出す例です。
アクティブレポートは、Formオブジェクトと違い、必ずnewして使う必要があります。
Dim acc As New ActiveReport1
acc.Field1.Text = Text1
acc.Show
2003/02/11
Dim acc As New ActiveReport1 acc.Field1.Text = Text1 acc.Printer.SetupDialog 'プリンタ設定ダイアログの表示 acc.PrintReport False '印刷の設定(前の行でプリンタ設定ダイアログを出しているのでココでは不要)
アクティブレポートは、印刷する紙面を作る段階と、スプールに飛ばす段階が分かれている。
PrintReport True にした場合に表示される、印刷設定ダイアログが表示されるタイミングは、スプールに飛ばす直前に表示される。
紙面を作る段階で、処理中ダイアログが必要な場合は、別途作成する必要がある。
ActiveReport_FetchData は、紙面を作る段階でのレコード毎のイベントである。
一方、ActiveReport_PrintProgressは、スプールに1ページづつ飛ばすタイミングで発生する。このときは既にページ分母が判っているので、アクティグレポートが分子/分母のページ数をのダイアログを表示している。さらにキャンセルボタンが実装されおり、キャンセルボタンを押下すると、ActiveReport_PrintAbortedイベントが発生する。
2003/02/20
プレビューするにしても、showメソッドはプレビュー画面その都度再描画しているよだ。だから遅い。
一方Runメソッドはプレビュー画面を生成する前に内部で作成するみたい。あっというま。
2003/02/25
ActiveReportの特徴として、どのセクションがどういうう順番で起動するか、上から下への単純な順番ではない。あまりにも複雑なルールに乗っ取って発生するので、一般的には順番に依存したコーディングはするべきでない。
マニュアルにも書いてあるとおり、保証されているのは、
同一セクションにおいて、
- FetchDataイベントは、Formatイベントの直前に発生する。
- BeforPrintイベントは、Formatイベントよりも後に発生する。
- AfterPrintイベントは、BeforPrintイベントよりも後に発生する。
だけである。
BeforPrintイベントとAfterPrintイベントの間には他のイベントが発生するかもしれない〜
2003/03/01
ActiveReportsの「ページ番号/総ページ数」 について。
オンラインヘルプの 「ページフッタ内のページ番号」 を参考にActiveReportsでページヘッダに 「ページ番号/総ページ数」 を表示するサンプルプログラムを作ったのですが、正しく表示されません。
お送りいただいたプロジェクトを元に検証させていただきましたところ、利用されていないグループヘッダーgphKeyとグループフッターgpfIDが存在するために発生しているようです。
現象を回避する為の方法としまして、下記の方法をご検討くださいますようお願いいたします。
方法1
方法2
2003/04/04
BeforPrint イベントで、そのフィールドの高さを取得する。
高さに応じて、罫線の座標を再設定する。
K氏が実装例あり
サポートに尋ねたところ、以下の回答を得た
<回答内容>
ご指摘の現象は、CanGrow/CanShrinkプロパティの仕様により発生して
います。
CanGrow/CanShrinkプロパティによって、コントロールの高さがデータ
の内容に合わせて調整されたとき、調整前のコントロールの下端以下に
配置されている他のコントロールの縦位置は、調整内容に合わせて自動
的に調整されます。
しかしながら、ご指摘の通り、CanGrow/CanShrinkプロパティによって
高さが調整されるコントロールの下端より上に上端が、位置が調整され
るコントロールの上端より下に下端がある、別のコントロールが存在
した場合、縦位置の調整は行われません。
ご要望のような動作を実現する方法としては、Visibleプロパティを
コード上で切り替える方法が考えられます。
以下のサンプルコードを参考に、ご検討ください。
◆サンプルコード
----------------------------------------
Private Sub Detail_Format()
' Formatイベント時には非表示にしておきます。
Field3.Visible = False
Line1.Visible = False
End Sub
Private Sub Detail_BeforePrint()
' BeforePrint内で表示し、位置を調整します。
Field3.Visible = True
Line1.Visible = True
Line1.Y2 = Line2.Y1
End Sub
----------------------------------------
なお、セクションの高さを変更できるのは、Formatイベント内のみです。
BeforePrintイベント内でセクションの高さを変更することはできません
ので、あらかじめご注意ください。
つまり、Formatイベント時に、非表示のコントロールは無視される事になる。
また、Line1の位置が、Field1の中に収まっていれば、影響しない。BeforePrintの段階で希望の位置に設定しなおす…という方法も考えられるぞ。
1ページ目のフッダ
2ページ目のフッダ
Private Sub PageFooter_BeforePrint() Field4.Text = "PageFooter_BeforePrint Field1.Height=" & Field1.Height End Sub Private Sub PageFooter_Format() Field1.Text = "1行目" & vbCrLf & "2行目" & vbCrLf & "3行目" Field3.Text = "PageFooter_Format Field1.Height=" & Field1.Height End Sub
Field1のCanGrowはTrueである。
フォーマットイベントで、毎回 "1行目" & vbCrLf & "2行目" & vbCrLf & "3行目" を設定しているにもかかわらず、高さが皮ならいのはなんでだ?
サポートに尋ねた所、フッダーでのCanGrow/CanShrink の動作が、1ページ遅れて発生しているようだとの事。障害と認識した模様。
回避策としてはCanGrow//CanShrink をOFFにして、手動で設定してほしいとの事だった。
ちなみに、フォーマットイベント中では、各コントロールの高さは、決定されないとの事だ。
<回答内容>
サンプルをお送りいただきまして、ありがとうございました。
弊社の環境でも、ご指摘の現象を確認いたしました。
申し訳ございません。本現象は、ページフッタ上に配置されたField
コントロールの、CanGrow/CanShrink動作の不具合と思われます。
本来の仕様では、コントロールおよびセクションのCanGrow/CanShrink
動作は、Formatイベント後(BeforePrintイベント前)に行われます。
また、セクションのCanGrow動作は、そのセクション上のコントロールが
セクションをはみ出すような場合に行われる仕様となっております。
しかしながら、サンプルのように、ページフッタのFormatイベント内で、
Fieldコントロールにデータをセットした場合、Fieldコントロールの
CanGrow/CanShrink動作が、1ページ遅れて反映されてしまうようです。
サンプルのデフォルト状態では、Field1のCanShrinkプロパティがTrueに、
Textプロパティが"Field1"に設定されております。
上記の設定で、ページフッタのFormatイベント内でField1に3行分の
文字列データをセットした場合、データ自体は正常にセットされますが、
CanShrink動作は"Field1"で計算されてしまい、Fieldの高さが1行分に
なってしまいます。
本現象を回避する方法としては、Field1のCanShrinkプロパティをFalse
に設定するか、コントロールやセクションのCanGrow/CanShrinkプロパ
ティを共にFalseに設定した上で、コード上で高さを設定する方法が考え
られます。誠に恐れ入りますが、こちらの方法をご検討いただけません
でしょうか。
◆サンプルコード
----------------------------------------
Private Sub PageFooter_Format()
Dim FieldHeight As Integer
' Field1にデータをセットします。
Field1.Text = Field1.Text & vbCrLf & "1行目" & vbCrLf & "2行目"
Canvas.Font = Field1.Font
FieldHeight = Canvas.MeasureParagraphHeight(Field1.Text, _
Field1.Width - 40) + 30
If (PageFooter.Height < (Field1.Top + FieldHeight)) Then
' FieldがPageFooterをはみ出す場合には、高さを調整します。
PageFooter.Height = Field1.Top + FieldHeight
End If
End Sub
Private Sub PageFooter_BeforePrint()
' Field1の高さを設定します。
Canvas.Font = Field1.Font
Field1.Height = Canvas.MeasureParagraphHeight(Field1.Text, _
Field1.Width - 40) + 30
End Sub
----------------------------------------