/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
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


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste