Установить водяной знак в ActiveReports

Я создал отчет по разделам с помощью ActiveReports 9 Designer. Мне нужно установить водяной знак на основе флага. Если флажок установлен, водяной знак должен быть установлен для этой конкретной страницы. Если флажок снят, водяного знака не должно быть.

У меня есть текстовое поле флага и изображение водяного знака в заголовке группы. Поэтому я подумал о переключении водяного знака в сценарии GROUPHEADER1_BeforePrint отчета.

Sub GroupHeader1_BeforePrint
    if(TxtFlg.text = "1") Then
        rpt.Watermark = imgWaterMark.Image
    else
        rpt.Watermark = nothing
    End If
End Sub

Моя проблема в том, что первая страница пропускается и продолжается со следующей страницы. Водяной знак 1-й страницы отображается на 2-й странице, водяной знак 2-й страницы отображается на 3-й странице и так далее. Почему так отображается?

Кто-нибудь может мне помочь, пожалуйста . Заранее спасибо .


person Reshma    schedule 20.02.2017    source источник


Ответы (2)


Это поведение дизайна. Свойство «Водяной знак» предназначено для всего отчета и отображается раньше, чем любой другой раздел. Поэтому, когда вы устанавливаете водяной знак в событии GroupHeader_Format, водяной знак для этой страницы уже напечатан и, следовательно, не может быть изменен. Поэтому водяной знак печатается на следующей странице. Теперь, чтобы решить вашу проблему с отображением водяного знака на первой странице, вы можете установить его в событии ReportStart. Для других страниц вам придется объявить глобальную переменную и установить водяной знак с учетом того, что он будет напечатан на следующей странице.

person GrapeCity Team    schedule 20.02.2017
comment
Я не понимаю, как это сделать. Не могли бы вы дать мне ссылку или пример кода для этого. - person Reshma; 20.02.2017

Если мы хотим отобразить водяной знак в активном отчете на основе условий, это немного сложно со свойством водяного знака отчета. Вместо этого мы можем использовать DrawText, который похож на водяной знак в отчете.

Код выглядит следующим образом:

Sub GroupHeader1_BeforePrint
    if(TxtFlg.text = "1") Then
        Me.rpt.CurrentPage.ForeColor = Color.FromArgb(80, 128,128,128)
        Me.rpt.CurrentPage.Font = New Font("Arial", 45F)
        Me.rpt.CurrentPage.DrawText("DRAFT", 0.489F, 5F, 8, 2)
    else
        Me.rpt.CurrentPage.ForeColor = Color.FromArgb(80, 255, 255, 255)
        Me.rpt.CurrentPage.Font = New Font("Arial", 20F)
        Me.rpt.CurrentPage.DrawText("", 1.5F, 3F, 2, 2)
    End If
End Sub 
person Reshma    schedule 22.02.2017