Access Cookbook, 2nd Edition [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Access Cookbook, 2nd Edition [Electronic resources] - نسخه متنی

Ken Getz; Paul Litwin; Andy Baron

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید










Recipe 3.10 Print Different Headers or Footers on Odd and Even Pages



3.10.1 Problem


Some of your reports are printed
double-sided, and you would like to have mirror-image headers and
footers on odd and even pages. How do you do this in Access?


3.10.2 Solution


This technique makes use of two sets
of header and footer controls, one for odd pages and one for even
pages. An event procedure run from the section's
Format event uses the Page property and the Mod
operator to determine whether the page is odd or even and makes the
appropriate controls visible or invisible.

The following steps show you how to create your own report that
prints different headers and footers on odd and even pages:

  1. Open the report you want to print double-sided (or even single-sided,
    with different odd and even headers and footers).

  2. Make a copy of the header control, and place one of the copies of the
    control on the left of the header and the other on the right. Make
    the lefthand control left-aligned (to print on even-numbered pages)
    and the righthand control right-aligned (to print on odd-numbered
    pages).

  3. Create an event procedure
    attached to the OnFormat property of the report's
    page header section. In the event procedure, enter code similar to
    the following:

    Private Sub PageHeader_Format(Cancel As Integer, FormatCount As Integer)
    On Error GoTo PageHeader_FormatError
    Dim fIsEven As Boolean
    fIsEven = acbIsEven(Me.Page)
    Me.lblTitleLeft.Visible = Not fIsEven
    Me.lblTitleRight.Visible = fIsEven
    End Sub

    You'll need to replace the controls in the event
    procedure with the names of your controls.

  4. Make copies of the footer controls as well, and make a similar event
    procedure for the footer's OnFormat event property,
    referencing its left and right controls. In the event procedure,
    enter code similar to the following:

    Private Sub PageFooter_Format(Cancel As Integer, FormatCount As Integer)
    Dim fIsEven As Boolean
    fIsEven = acbIsEven(Me.Page)
    Me.txtPageLeft.Visible = Not fIsEven
    Me.txtPageRight.Visible = fIsEven
    Me.txtPrintedOnLeft.Visible = fIsEven
    Me.txtPrintedOnRight.Visible = Not fIsEven
    End Sub

    Again, you'll need to replace the controls in the
    event procedure with the names of your controls.

  5. Without closing the module, add the following function to the
    form's module:

    Private Function acbIsEven(ByVal intValue As Integer) As Boolean
    ' Return True if intValue is even, False otherwise.
    acbIsEven = ((intValue Mod 2) = 0)
    End Function
  6. Save and execute the report to confirm that it performs as desired.
    The completed report is shown in design view in Figure 3-22.



Figure 3-22. rptEvenOdd in design view


To see the sample report, load

03-10.MDB . Open
rptEvenOdd in print preview mode; you should get a report that has
one header and footer for odd pages (see Figure 3-23) and a different header and footer for even
pages (see Figure 3-24).


Figure 3-23. The footer for the odd pages of rptEvenOdd



Figure 3-24. The footer for the even pages of rptEvenOdd



3.10.3 Discussion


The two event procedures call the

acbIsEven function to determine whether the
current page is even or odd, passing the current page number to the
function. The current page number is determined by referencing the
Page property of the report (Me.Page).

acbIsEven
uses the Mod operator, which returns the remainder
when the page number is divided by 2, yielding 0 for even pages or 1
for odd pages. The following statement:

acbIsEven = ((intValue Mod 2) = 0)

returns True to the calling procedure if the page
Mod 2 is 0 (i.e., if the page is even); otherwise,
it returns False.

If you set fIsEven to the return value of

acbIsEven , you can then set the visibility of
the rest of the controls based on its value.

You can't see them in Figure 3-22,
but there are four text boxes in the footer section of the example
report. On the left side of the footer, the txtPagePrintedOnLeft
control has been placed on top of the txtPageLeft control. On the
right side of the footer, the txtPageRight control has been placed on
top of the txtPrintedOnRight control. This works because only one set
of controls (txtPagePrintedOnLeft and txtPageRight, or txtPageOnRight
and txtPageLeft) are visible at the same time.

As an alternative to using two
controls in the header of the report, you could use just one control
that is as wide as the report and alternately set its TextAlign
property to Left or Right based on the return value of

acbIsEven . (You can't do this
in the footer because of the need for two sets of controls with
different alignments.)


/ 232