|
| Problem med indrykning på udskrift... Fra : Simon Moore Højer |
Dato : 18-10-04 18:19 |
|
Bruger følgende kode til at printe:
Printer.CurrentX = 60
Printer.CurrentY = 25
Printer.Print txtInput.Text
Printer.EndDoc
Men mit problem er at Printer.CurrentX kun rykker første linie i
txtInput.text ind på siden, resten af linierne skrives helt ud ved
markenen? Hvorfor? og hvordan rettes det?
Så har jeg også et andet spg. Når CommonDialogPrint.ShowPrint åbner kan
man ikke vælge at udskrive markering eller fra en bestemt side til en
anden. Hvorfor? og hvordan ændres det?
På Forhånd Tak!
--
Simon Moore Højer
At programmere er at dykke ned i det hav af muligheder,
alle tiders hurtigst ekspanderende teknologi tilbyder.
Citat: Jakob Kristiansen (Start på visual basic 6.0)
www.viborgip.dk
| |
Tomas Christiansen (18-10-2004)
| Kommentar Fra : Tomas Christiansen |
Dato : 18-10-04 22:00 |
|
Simon Moore Højer skrev:
> Bruger følgende kode til at printe:
>
> Printer.CurrentX = 60
> Printer.CurrentY = 25
> Printer.Print txtInput.Text
> Printer.EndDoc
>
> Men mit problem er at Printer.CurrentX kun rykker første linie i
> txtInput.text ind på siden, resten af linierne skrives helt ud ved
> markenen? Hvorfor? og hvordan rettes det?
Et linieskift gør blot det at det sætter CurrentX=0 og
CurrentY=CurrentY+højden på den font du bruger.
Du er nok nødt til at behandle linierne én ad gangen, f.eks. med en
for-løkke og sætte CurrentX hver gang du vil udskrive en linie.
-------
Tomas
| |
Simon Moore Højer (18-10-2004)
| Kommentar Fra : Simon Moore Højer |
Dato : 18-10-04 23:49 |
|
> Et linieskift gør blot det at det sætter CurrentX=0 og
> CurrentY=CurrentY+højden på den font du bruger.
> Du er nok nødt til at behandle linierne én ad gangen, f.eks. med en
> for-løkke og sætte CurrentX hver gang du vil udskrive en linie.
Er temmelig ny i VB så hvordan skulle det ca. se ud...bare en skitse så
kan jeg selv arbejde videre med resten.
--
Simon Moore Højer
At programmere er at dykke ned i det hav af muligheder,
alle tiders hurtigst ekspanderende teknologi tilbyder.
Citat: Jakob Kristiansen (Start på visual basic 6.0)
www.viborgip.dk
| |
Tomas Christiansen (19-10-2004)
| Kommentar Fra : Tomas Christiansen |
Dato : 19-10-04 08:51 |
|
Simon Moore Højer skrev:
> Er temmelig ny i VB så hvordan skulle det ca. se ud...bare en skitse så
> kan jeg selv arbejde videre med resten.
Naturligvis
Dim TextLine As Variant
Printer.CurrentY = 300
For Each TextLine In Split(txtInput.Text, vbNewLine)
Printer.CurrentX = 500
Printer.Print TextLine
Next
Printer.EndDoc
Bemærk at Split-funktionen som standard splitter op ved alle mellemrum (men
du ønsker jo nok at det skal være ved linieskift - derfor vbNewLine) og
returnerer en tabel (array) af strenge.
For Each kan iterere over en collection men sørme også over en tabel, og det
kan let og elegant benyttes her. Det eneste man skal huske at med For Each
skal element-variablen være af én eller anden objekt-type eller af typen
Variant. Den kan ikke være af typen String, som ville være det mest
naturlige her.
Der er lige én ting som du skal være opmærksom på: Hvis linierne i din
TextBox er knækket fordi de er for lange til at kunne stå på én fysisk
linie, så vil det naturligvis ikke komme til at se ud på samme måde på
papiret - her bliver linierne kun knækket, når der kommer et linieskift.
-------
Tomas
| |
Simon Moore Højer (20-10-2004)
| Kommentar Fra : Simon Moore Højer |
Dato : 20-10-04 13:43 |
|
> Dim TextLine As Variant
> Printer.CurrentY = 300
> For Each TextLine In Split(txtInput.Text, vbNewLine)
> Printer.CurrentX = 500
> Printer.Print TextLine
> Next
> Printer.EndDoc
>
Tak for det
> Der er lige én ting som du skal være opmærksom på: Hvis linierne i din
> TextBox er knækket fordi de er for lange til at kunne stå på én fysisk
> linie, så vil det naturligvis ikke komme til at se ud på samme måde på
> papiret - her bliver linierne kun knækket, når der kommer et
> linieskift.
Er der en måde man kan lave om på dette?
--
Simon Moore Højer
At programmere er at dykke ned i det hav af muligheder,
alle tiders hurtigst ekspanderende teknologi tilbyder.
Citat: Jakob Kristiansen (Start på visual basic 6.0)
www.viborgip.dk
| |
Tomas Christiansen (20-10-2004)
| Kommentar Fra : Tomas Christiansen |
Dato : 20-10-04 22:07 |
|
Simon Moore Højer skrev:
> > Der er lige én ting som du skal være opmærksom på: Hvis linierne i din
> > TextBox er knækket fordi de er for lange til at kunne stå på én fysisk
> > linie, så vil det naturligvis ikke komme til at se ud på samme måde på
> > papiret - her bliver linierne kun knækket, når der kommer et
> > linieskift.
>
> Er der en måde man kan lave om på dette?
Alt kan løses
Metoden er at finde ud af hvor din textbox selv deler linierne.
Det kan du finde ud af ved at checke den font/størrelse som teksten skrives
med, og derefter checke bredden af hver enkelt tegn (altså i den pågældende
font) og sammenligne med størrelsen af din textbox.
Ret besværligt, egentlig...
Kan andre komme med en lidt lettere metode?
Du kan selvfølgelig også selv kode at dine linier på papiret skal deles ved
en eller anden X-værdi, men så bliver linierne med garanti ikke delt
_nøjagtig_ samme sted som i textbox'en.
-------
Tomas
| |
Simon Moore Højer (21-10-2004)
| Kommentar Fra : Simon Moore Højer |
Dato : 21-10-04 01:17 |
|
> Alt kan løses
Det har du ganske ret i.
> Metoden er at finde ud af hvor din textbox selv deler linierne.
> Det kan du finde ud af ved at checke den font/størrelse som teksten
> skrives
> med, og derefter checke bredden af hver enkelt tegn (altså i den
> pågældende
> font) og sammenligne med størrelsen af din textbox.
> Ret besværligt, egentlig...
Det skulle være sundt med lidt hjernegymnastik en gang imellem, så jeg
vil straks kaste mig ud i det...
> Kan andre komme med en lidt lettere metode?
Alt "gymnastik" er sundt men det gør ikke noget at lave lidt mindre for
det samme resultat
> Du kan selvfølgelig også selv kode at dine linier på papiret skal
> deles ved
> en eller anden X-værdi, men så bliver linierne med garanti ikke delt
> _nøjagtig_ samme sted som i textbox'en.
Det tror jeg bare jeg holder mig fra så...
--
Simon Moore Højer
At programmere er at dykke ned i det hav af muligheder,
alle tiders hurtigst ekspanderende teknologi tilbyder.
Citat: Jakob Kristiansen (Start på visual basic 6.0)
www.viborgip.dk
| |
O. Hansen (21-10-2004)
| Kommentar Fra : O. Hansen |
Dato : 21-10-04 07:00 |
|
"Tomas Christiansen" <toc-01-nospam@blikroer.dk> wrote in message
news:cl6k64$1u3s$1@news.cybercity.dk...
> Alt kan løses
> Kan andre komme med en lidt lettere metode?
Kan du ikke bruge ScaleLeft:
The ScaleLeft and ScaleTop properties define the x- and y-coordinates,
respectively, of the upper-left corner of a printable page. By changing the
values of ScaleLeft and ScaleTop, you can create left and top margins on the
printed page.
/Ove
| |
Tomas Christiansen (21-10-2004)
| Kommentar Fra : Tomas Christiansen |
Dato : 21-10-04 10:55 |
|
O. Hansen skrev:
> Kan du ikke bruge ScaleLeft:
Den hjælper vel ikke på "knækningen" af linierne?
-------
Tomas
| |
Dan (24-10-2004)
| Kommentar Fra : Dan |
Dato : 24-10-04 09:51 |
|
"Simon Moore Højer" <simonhoejer@hotmail.com> skrev i en meddelelse
news:4173fafe$0$77013$14726298@news.sunsite.dk...
> Bruger følgende kode til at printe:
>
> Printer.CurrentX = 60
> Printer.CurrentY = 25
> Printer.Print txtInput.Text
> Printer.EndDoc
>
> Men mit problem er at Printer.CurrentX kun rykker første linie i
> txtInput.text ind på siden, resten af linierne skrives helt ud ved
> markenen? Hvorfor? og hvordan rettes det?
Dette her skulle løse problemet.
MVH
Dan
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dim Tekst14 As String, PTekst4 As String
Dim Cx3 As Integer, Cy3 As Integer, P3 As Integer
Printer.ScaleMode = 6
Printer.FontBold = False
Printer.FontName = "times new roman"
Printer.FontSize = 10
Cx3 = 130: ' inde på papiret
Cy3 = 71: ' nede på papiret
Tekst14 = Label5(2).Caption
Do
P3 = InStr(1, Tekst14, Chr$(13), 0)
PTekst4 = Left(Tekst14, P3 - 1)
Tekst14 = Right(Tekst14, Len(Tekst14) - P3 - 1)
Printer.CurrentX = Cx3
Printer.CurrentY = Cy3
Printer.Print PTekst4
Cy3 = Cy3 + 7: ' dette er
millimeter imellem dine linier
Loop Until InStr(1, Tekst14, Chr$(13), 0) = 0
If Tekst14 <> "" Then
Printer.CurrentX = Cx3
Printer.CurrentY = Cy3
Printer.Print Tekst14
End If
| |
Tomas Christiansen (24-10-2004)
| Kommentar Fra : Tomas Christiansen |
Dato : 24-10-04 12:33 |
|
Dan skrev:
> Dette her skulle løse problemet.
Det løser ét af problemerne men ikke dem alle.
Når en linie i en textbox, er længere end der fysisk er plads til, deler
textboxen den selv over to linier, men din print-rutine vil _ikke_ afspejle
denne automatiske linie-deling som textbox'en selv tager sig af!
-------
Tomas
| |
|
|