Sebagaimana yang
disebutkan pada judul diatas, bahwa properti Range pada Report
(Report.Range) digunakan untuk menentukan/memilih halaman Report yang
akan dicetak. Misal pada Report terdapat 10 halaman, bisa memilih
halaman berapa yang akan dicetak.
Gambas hanya
mengenal 3 cara pemilihan halaman yang akan dicetak, yakni:
- Cetak Seluruhnya, Jika Range tidak ditentukan atau tulisan range tidak dikenali seperti “1-”, “-1”, “A”, maka Printer akan mencetak semua halaman.
- Cetak satu-satu, Range hanya ditentukan satu halaman saja, misal halaman 4 (saja).
- Cetak beberapa tapi berurutan, misal Range “2-5” (halaman dua sampai halaman lima).
Gambas tidak
menerima Range yang tidak berurutan seperti “5-2”, jika diisi
urutan terbalik seperti itu maka gambas akan mencetak semua halaman
(tidak berdasar halaman yang dipilih). Format ini juga tidak bisa
“2,4,7” (Cetak halaman 2 dan 4 dan tujuh), maka otomatis mencetak
semua halaman.
Ok, langsung
pelajari/praktekkan contoh berikut:
Buat Form (Lebar=
714, Tinggi=518) yang terdiri dari Object:
ReportView =
ReportView1
TextBox =
HalamanCetak
Button = Cetak
Open Code:
' Gambas class file
Private Report1 As
New Report
Private Printer1 As
New Printer As "Printer1"
Private obj As
Object[]
Public Sub
Form_Open()
Dim n As Short
‘Membuat 500
Object ReportLabel. Dengan ukuran kertas
‘Default(Custom:
215,9 x 279,4 mm) menjadi 7 halaman.
obj = New
Object[500]
For n = 0 To
obj.Max
obj[n] = New
ReportLabel(Report1)
obj[n].Text = n
Next
'Menampilkan Report ke ReportView1
ReportView1.Report
= Report1
End
Public Sub
HalamanCetak_Change()
ReportView1.Range =
HalamanCetak.Text
If
ReportView1.RangePages.Count > 0 Then
Printer1.FirstPage = ReportView1.RangePages[0] + 1
Printer1.LastPage =
ReportView1.RangePages[ReportView1.RangePages.Max] + 1
Else
Printer1.FirstPage = 0
Printer1.LastPage = Report1.PageCount
Endif
End
Public Sub
Cetak_Click()
Dim n As Byte
'Outputnya dicetak sebagai file .pdf
Printer1.OutputFile = "~/Tespdfooo"
ReportView1.Report.Print(Printer1)
End
Keterangan:
Perintah
“ReportView1.Range = HalamanCetak.Text” pada Event
HalamanCetak_Change akan menampilkan perubahan tampilan ReportView
setiap inputan pada HalamanCetak (untuk memilih halaman yang akan
dicetak).
“ReportView1.RangePages”
berkaitan langsung dengan “ReportView1.Range”, Saat nilai
“ReportView1.Range” di tentukan maka otomatis terindex di
“ReportView1.RangePages”. “RangePages” sebagai index halaman,
nilainy dimulai dari angka 0, sedangkan Page nilainya dimulai dari
angka 1 (halaman). Misal saat nilai Range = “3-4” (halaman 3
sampai halaman 4) maka pada ReportView1 akan menampilkan 2 halaman,
yakni halaman dari Report ke 3 dan ke 4. Jika di index akan terbaca
halaman 1 (RangePage) sebagai index ke 0 , sedangkan halaman 2
(RangePage) sebagai index ke 1 (N-1).
Artinya RangePage[0]
(halaman Report ke 3) berada pada index ke 2 halaman Report.
Sedangkan RangePage[1] (halaman Report ke 4) berada pada index ke 3
halaman Report. Itulah kenapa pada nilai “Printer1.FirstPage”
diisi dengan nilai “ ReportView1.RangePages[0] + 1” karena
FirsPage mengacu pada halaman Report sedangkan RangePages pada index.
Ribet ya?? sudah,,
sudah,,, dipelajari pelan-pelan aja dengan otak-atik itu skrip code.
Yang terakhir, untuk “Printer1.FirstPage” dan “Printer1.LastPage”
sebaiknya jangan di set dalam satu event /proses pada tombol cetak (
ReportView1.Report.Print(Printer1) ), misal pada event Cetak_Click(),
karena pada tombol pertama tidak akan berfungsi seperti yang
diharapkan, sedangkan tombol yang keduakalinya maka akan berfungsi.
Itulah kenapa sebaiknya “Printer1.FirstPage” dan
“Printer1.LastPage” diatur secara terpisah pada event
CetakHalaman_Change().
Tampilan hasil
program diatas: