|
[ borcha @ 31.01.2008. 19:50 ] @
| Koristim vs2008 VB. Pokusavam da napravim izvestaj iz acess baze na PrintDocument koji je provucen kroz PrintPreview kontrolu. Sta se desava??? Zapise provucem kroz petlju Do until - loop koji mi izbaci jako puno zapisa koji ne mogu da stanu na jednu stranu. Kako da mu zadam kod da nastavi da stampa na sledecu stranu tj. nastavi sa prikazivanjem ostalih zapisa na novu stranu. Koristim graphics metod..... evo i malo koda
Code:
Do Until rsSveOce.EOF
nSO = nSO + 15
e.Graphics.DrawString(rsSveOce("NazivOblasti").Value & " - (Ocena : " & rsSveOce("Ocena").Value & ") - Datum: " & rsSveOce("DatumOcene").Value, fonSveOce, Brushes.Black, 20, 450 + nSO, New StringFormat)
rsSveOce.MoveNext()
Loop
If Not (rsSveOce.EOF) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
ima li neko ideju kako da to izvedem??
Pozdrav.... |
[ prog @ 01.02.2008. 11:01 ] @
Nisam u .NEt radio printanje ali mislim da je slicno kao kod MFC, vjerojatno bi trebao da kontrolises koordinate lista. Naime kao što sigurno znaš svaki list ima svoje pocetne i krajnje koordinate (Format papira). Ako je koordinata na kojoj se treba da se iscrta text veca od krajnje koordinate lista predji na novi list.
[ borcha @ 01.02.2008. 17:22 ] @
Treba mi konkretan kod...
Uvecava mi se broj strana ali i text koji se vec nalazi na prvoj strani. Meni je potreban samo nastavak teksta......
Hvala unapred..
[ djordjeno @ 03.02.2008. 08:37 ] @
Pozdrav,
Ako dobro razumem VB kod koji si napisao, ti imash proveru za prelazak na novu stranu tek posto se zavrsi Do Until petlja. Po kodu nikada se nece ni preci na novu stranu. Postavi proveru za novu stranu u okviru Do Until petlje, posto je n rekorda ispisano.
[ borcha @ 06.02.2008. 15:33 ] @
Ne uspevam da odstampam text iz baze uz Do until petlju. Postavio sam uvecanje broja strana unutar petlje ali sta radi?
Povecava beskonacno broj strana stim da na svaku postavlja vec postojeci text iz baze. Znaci beskonacno strana sa istim sadrzajem, bez nastavka teksta.
Moze li neko da mi da primer u VB-u kod koristeci e.Graphics.DrawString(), a da mi se na novoj strani ne ponavlja isti tekst vec novi tj. nastavak?
Hvala unapred!!
[ Astek @ 06.02.2008. 16:30 ] @
Citat: borcha: Ne uspevam da odstampam text iz baze uz Do until petlju. Postavio sam uvecanje broja strana unutar petlje ali sta radi?
Povecava beskonacno broj strana stim da na svaku postavlja vec postojeci text iz baze. Znaci beskonacno strana sa istim sadrzajem, bez nastavka teksta.
Moze li neko da mi da primer u VB-u kod koristeci e.Graphics.DrawString(), a da mi se na novoj strani ne ponavlja isti tekst vec novi tj. nastavak?
Hvala unapred!!
Svaki put kada prelomi stranicu ponovo počinje da celu proceduru izvrsava iz pocetka. Moras da printanje nastavis od pozicije na kojoj si stao. Sta znam, uvedi neke static promenljive...
[ borcha @ 06.02.2008. 21:00 ] @
Treba mi konkretno kodm primer???
Evo kako sam ja zamislio, ali ocigledno ne valja!
Code: Do Until rsSveOce.EOF
If nSO > pdOcene.DefaultPageSettings.Bounds.Y Then
nSO = nSO + 15
e.Graphics.DrawString(rsSveOce("NazivOblasti").Value & " - (Ocena : " & rsSveOce("Ocena").Value & ") - Datum: " & rsSveOce("DatumOcene").Value, fonSveOce, Brushes.Black, 20, 400 + nSO, New StringFormat)
rsSveOce.MoveNext()
e.HasMorePages = True
End If
Loop
e.HasMorePages =False
Zna li neko kako to da izvedem?
Pozdrav...
[ borcha @ 08.02.2008. 15:08 ] @
I dalje ne uspevam!!!
Ako moze neki mali primer, kako da to resim.....????
[ DarkMan @ 08.02.2008. 17:52 ] @
Posle gornjih objasnjenja stvarno ne razumem kako nisi skontao. Nisam odavno radio u VB.NET pa nisam siguran u ispravnost sintakse. Probaj sledece:
Code:
Dim rsSveOce as Recordset ' valjda je ovako
Private Sub Print_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim Y as int
Y = 0
e.HasMorePages =False
Do Until rsSveOce.EOF
If Y >= pdOcene.DefaultPageSettings.Bounds.Y Then
e.HasMorePages = True
Exit Loop ' ili mozda moze return, zaboravih
End If
e.Graphics.DrawString(rsSveOce("NazivOblasti").Value , fonSveOce, Brushes.Black, 20, Y, New StringFormat)
rsSveOce.MoveNext()
Y = Y + 15
Loop
End Sub
Znaci uvek pocinjes da crtas od pocetka strane i crtas koliko imas podataka i koliko moze da stane. Ako ima jos podataka da se iscrta a presli smo velicinu strane onda oznacis da ima jos strana i izlazis iz procedure. Recordset ce ostati pozicioniran tamo gde je stao i po sledecem ulasku u metodu PrintPage ce nastaviti tamo gde je stao ali ovaj put crtas ponovo sa pocetne pozicije Y = 0 ali na novoj stranici. Kada iscrtas sve podatke a nisi dosao do kraja strane, petlja ce se prekinuti i ostace ti oznaceno da nemas vise strana.
[ borcha @ 08.02.2008. 18:17 ] @
Ok, skontao sam kod... Hvala ti na tome!!
Postoji li neki gotov raport koji bih mogao da iskoristim, da nebi gubio vreme ?? Gde da ga skinem ili pronadjem?
Hvala, pozdrav!!
[ borcha @ 10.02.2008. 12:31 ] @
Zna li neko gde gresim kod ovog koda???
Code: Dim Y As Integer
Y = 0
e.HasMorePages = False
Do Until rsSveOce.EOF
If Y >= pdOcene.DefaultPageSettings.Bounds.Y Then
e.HasMorePages = True
Return
End If
e.Graphics.DrawString(rsSveOce("NazivOblasti").Value & " - (Ocena : " & rsSveOce("Ocena").Value & ") - Datum: " & rsSveOce("DatumOcene").Value, fonSveOce, Brushes.Black, 20, 400 + Y, New StringFormat)
rsSveOce.MoveNext()
Y = Y + 15
Loop
Pokusavam da odstampam document u vise strana a da se nastavak teksta prikaze u nastavku na drugoj strani!!
[ borcha @ 13.02.2008. 19:03 ] @
Molim vas jedan primer ali da funkcionise !!!
Nesto ovako, samo mi treba tacno!!
Code: Private Sub pdSveOcene_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdSveOcene.PrintPage
Try
Dim i As Single = 0
Dim b As Integer
For b = 1 To 3000
e.HasMorePages = False
If i >= pdSveOcene.DefaultPageSettings.Bounds.Y Then
e.HasMorePages = True
End If
e.Graphics.DrawString(b.ToString, Me.Font, Brushes.Black, 20, i)
i = i + 15
Next b
end sub
Help!!!
[ DarkMan @ 13.02.2008. 19:55 ] @
Citat: borcha: Zna li neko gde gresim kod ovog koda???
Code: Dim Y As Integer
Y = 0
e.HasMorePages = False
Do Until rsSveOce.EOF
If Y >= pdOcene.DefaultPageSettings.Bounds.Y Then
e.HasMorePages = True
Return
End If
e.Graphics.DrawString(rsSveOce("NazivOblasti").Value & " - (Ocena : " & rsSveOce("Ocena").Value & ") - Datum: " & rsSveOce("DatumOcene").Value, fonSveOce, Brushes.Black, 20, 400 + Y, New StringFormat)
rsSveOce.MoveNext()
Y = Y + 15
Loop
Pokusavam da odstampam document u vise strana a da se nastavak teksta prikaze u nastavku na drugoj strani!!
Ako dodajes 400 na Y koordinatu moras i u proveri dodati:
Code:
If (400+Y) >= pdOcene.DefaultPageSettings.Bounds.Y Then
e.HasMorePages = True
Return
End If
inace ces izgubiti dobar deo teksta jer ce ti tih (400/15) ~ 26 linija teksta stampati izvan okvira stranice.
Citat: borcha: Molim vas jedan primer ali da funkcionise !!!
Nesto ovako, samo mi treba tacno!!
Code: Private Sub pdSveOcene_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdSveOcene.PrintPage
Try
Dim i As Single = 0
Dim b As Integer
For b = 1 To 3000
e.HasMorePages = False
If i >= pdSveOcene.DefaultPageSettings.Bounds.Y Then
e.HasMorePages = True
End If
e.Graphics.DrawString(b.ToString, Me.Font, Brushes.Black, 20, i)
i = i + 15
Next b
end sub
Help!!!
Ocigledno da nisi shvatio poentu primera koji sam postovao. Kao prvo imas petlju koja je uvek ponavlja 3000 puta bez obzira koju stanu stampao a trebalo bi da ti se smanjuje nakon svake strane (tj. za onoliko koliko si odstampao). Drugo, kod provere da li si presao donju marginu strane nisi prekinuo izvrsavanje metode, ostavio si da se petlja zavrsi do kraja.
Probaj sledece:
Code:
Dim b As Integer
Private Sub pdSveOcene_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdSveOcene.PrintPage
Dim i As Single = 0
e.HasMorePages = False
while b < 3000
If i >= pdSveOcene.DefaultPageSettings.Bounds.Y Then
e.HasMorePages = True
Return
End If
e.Graphics.DrawString(b.ToString, Me.Font, Brushes.Black, 20, i)
i = i + 15
b = b + 1
Loop
end sub
[ borcha @ 13.02.2008. 21:27 ] @
Dim b ide ispod rutine
i nije loop nego end while! ali i bez toga ne funkcionise. Sada nista ne stampa.
Hvala tebi na trudu...
izgleda ja to moram sam da prokljuvim!!
[Ovu poruku je menjao borcha dana 14.02.2008. u 12:26 GMT+1]
[ borcha @ 13.02.2008. 21:31 ] @
Ovaj return mi nije jasan ... Gde on vraca citanje. Pojavi se nova strana ali se ponavlja i sadrzaj ne nastavlj se...
[ vujkev @ 13.02.2008. 23:52 ] @
Evo ga jedan totalno prost kod sa kojim možeš da vidiš kako da napraviš lomljenje stranica. Jednostavnije od ovoga ne može tako da je potrebno samo da izvršavaš program sa F8 tj. liniju po liniju i sve će ti se samo kazati
Code: Dim BrojRedova As Integer
Dim pp As New PrintPreviewDialog
Private WithEvents pd As New Printing.PrintDocument
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BrojRedova = 100
pp.Document = pd
pp.ShowDialog(Me)
End Sub
Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pd.PrintPage
Dim y As Integer = 10
Do While y < e.Graphics.VisibleClipBounds.Height And BrojRedova > 0
e.Graphics.DrawString(BrojRedova.ToString, Me.Font, Brushes.Black, 10, y)
BrojRedova -= 1
y += 50
Loop
If BrojRedova > 0 Then
e.HasMorePages = True
End If
End Sub
[ DarkMan @ 14.02.2008. 00:02 ] @
Evo ti primer koji radi. Medjutim napisao sam ga u C# jer niti imam VB.NET niti bi ga znao napisati u VB.NET. Ako neko hoce da ga prevede slobodno neka prevde.
Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;
namespace WindowsApplication1
{
static class Print
{
[STAThread]
static void Main()
{
Application.Run(new MyPrintPreview());
}
}
public class MyPrintPreview: Form
{
private PrintPreviewControl preview;
private int ukupno = 0;
public MyPrintPreview()
{
preview = new PrintPreviewControl();
preview.Dock = DockStyle.Fill;
this.Controls.Add(preview);
this.WindowState = FormWindowState.Maximized;
preview.Document = new MyPrintDocument();
preview.KeyPress += new KeyPressEventHandler(preview_KeyPress);
preview.Document.PrintPage += new PrintPageEventHandler(Document_PrintPage);
preview.Document.EndPrint += new PrintEventHandler(Document_EndPrint);
}
private void Document_PrintPage(object sender, PrintPageEventArgs e)
{
ukupno++;
}
private void Document_EndPrint(object sender, PrintEventArgs e)
{
PrikaziBrojStrane();
}
private void preview_KeyPress(object sender, KeyPressEventArgs e)
{
if(preview.StartPage == ukupno - 1)
preview.StartPage = 0;
else
preview.StartPage++;
PrikaziBrojStrane();
}
private void PrikaziBrojStrane()
{
int strana = preview.StartPage + 1;
this.Text = "Strana: " + strana + "/" + ukupno;
}
}
public class MyPrintDocument: PrintDocument
{
public MyPrintDocument()
{
this.PrintPage += new PrintPageEventHandler(MyPrintDocument_PrintPage);
}
private int counter = 0;
private void MyPrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
int y = 0;
e.HasMorePages = false;
while(counter < 200) {
if(y >= e.PageBounds.Bottom) {
e.HasMorePages = true;
return;
}
e.Graphics.DrawString(counter.ToString(), SystemFonts.MessageBoxFont, Brushes.Black, 20, y);
y += 15;
counter++;
}
}
}
}
[ borcha @ 14.02.2008. 11:47 ] @
Iskreno hvala na trudu!
Probacu ovaj Vb kod a mozda i ovaj u C#. Imam kompjler pa ce ga on sam prebaciti iz VB u C#.
Poz...
Javljam
[ borcha @ 22.02.2008. 09:45 ] @
Sve je ok! uspeo sam ...
Interesuje me da li postoji nesto gotovo sto bi mi u buducnosti olaksalo posao i da lici na nesto. Postoji li neka kontrola i gde mogu da je nabavim?
[ borcha @ 22.02.2008. 16:09 ] @
Skontao sam kako da stampam predvidjen broj n
Moze li neko da mi da primer kako to da izvedem sa bazom (napomena: Treba mi prikaz u printpreview sa graphics methodom)...
recimo da je ovo skup zapisa...
Code: do until rs.EOF
e.drawstring(rs("Naziv").value,font, blackpen, x,y)
rs.MoveNext
loop
kako ovo preneti na papir u vise strana a da se na svakoj narednoj ne ponavlja i stane sa stampom ukoliko br zapisa vise ne postoji...
Unapred hvala, bespomocni glupan!!!
poz...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|