Citat:
Krsta:
Od skoro koristim VB6, tako da DataReport nisam koristio, mada
CrystalReports (ne onaj standardni iz VB-a) je odlican za srednje
slozenije stvari.
Sa obicnim print objectom ne mogu lepo da formatiram stampu, bar
do sada nisam uspeo.
Na primer ako hocu da stampam neki tekst u vise kolona tako da tekst u jednom redu ima isto rastojanje, npr:
xxxxxx xxxxxxxx xxxxx
xxxxxx xxxxxxxx xxxxx
xxxxxx xxxxxxxx xxxxx a u nastavku da bude slika.
Ako imas neko resenje za ovaj problem voleo bih ili da postujes
kod ovde ili posalji na Mail.
Ovaj kod bi trebalo da zavrsi posao oko stampanja tabela. Samo unesi tvoje parametre pogledaj parametre) i ostalo ce kod da uradi sam.
Ja sam ovde koristio picture box, ali ovo mozes da primenis i na printer i na form objekt. (pomocu picture boxa mozes da napravis i mali print preview)
Inace, verovatno si primetio da se tekst moze stampati i preko slike u transparent modu. To ti omogucava da odstampas pozadinu tabele, pa onda tekst preko nje.
Set stampac = Picture1 ' ovde stavi umesto Picture1 - Printer, a inace moze i Form
stampac.ScaleMode = vbCentimeters ' radimo u cm
' matrica za probu
Dim podaci(4, 4)
a = False
For i = 0 To 4
For j = 0 To 4
a = Not a
If a Then
podaci(i, j) = "12345.67890"
Else
podaci(i, j) = "qw"
End If
Next
Next
' parametri
brkol = 5 ' br. kolona
mleva = 1 ' razmak od leve margine
mgornja = 1 ' razmak od gornje margine
kolrazmak = 0.5 ' razmak izmedju svake kolone
redrazmak = 0.5 ' razmak izmedju redova
sirinakol = 0.5 ' sirina kolone u cm
maxy = 0 ' maskimalna y koordinata
' stampa
For i = 0 To 4
If i = 0 Then ' za prvi podatak
stampac.CurrentY = mgornja
Else
stampac.CurrentY = maxy + redrazmak 'maksimalna visina polja
End If
treny = stampac.CurrentY ' trenutna y koordinata
For j = 0 To 4
stampac.CurrentX = mleva + j * kolrazmak + j * sirinakol
If stampac.TextWidth(podaci(i, j)) > sirinakol Then
' koliko karaktera staje u jedan red polja
For k = 1 To Len(podaci(i, j))
redupolju = Left(podaci(i, j), Len(podaci(i, j)) - k)
If stampac.TextWidth(redupolju) < sirinakol Then
brredaupolju = Int(Len(podaci(i, j)) / Len(redupolju)) ' koliko redova u polju
stampac.Print redupolju ' stampamo prvi red u polju
Exit For
End If
Next
'stampa ostalih redova u polju
For k = 1 To brredaupolju
red = Mid(podaci(i, j), k * Len(redupolju) + 1, Len(redupolju))
stampac.CurrentX = mleva + j * kolrazmak + j * sirinakol
stampac.Print red
' sada racunamo visinu reda na osnovu 'najviseg' polja
If maxy < stampac.CurrentY Then maxy = stampac.CurrentY ' pamtimo max y koord
Next
Else
' ako duzina teksta u polju ne prelazi sirinu polja
stampac.Print podaci(i, j)
End If
stampac.CurrentY = treny
Next
Next
End Sub
fire, walk with me