Avatar billede epo_blackdevil Nybegynder
14. august 2008 - 21:45 Der er 23 kommentarer og
1 løsning

printe centreret tekst

hey

når en bestilling i mit program er oprettet, gemmes det hele i variablen "bestilling" den består nu af x linier tekst.

jeg har fundet denne kode på nettet til at printe centreret tekst. men den virker kun hvis der kun er en linier i variablen "bestilling" hvis der er flere linier printer den det hele til venstre.

    Dim str As String
    str = bestilling
    PRN.CurrentX = (PRN.ScaleWidth - PRN.TextWidth(str)) / 2
    PRN.CurrentY = YPos
    PRN.Print str

nogen forslag?
Avatar billede joergen_vinther Nybegynder
15. august 2008 - 11:34 #1
PRN.CurrentX = (PRN.ScaleWidth - PRN.TextWidth(str)) / 2
Ovenstående linie får åbenbart kun første linie. Den skal sikkert stå således at den får alle linierne en efter en.
Avatar billede joergen_vinther Nybegynder
15. august 2008 - 11:52 #2
Private Sub PrintKnap_Click()
  Dim Linie(5), St As String
  Dim A As Integer
 
  Linie(1) = "Frederik"
  Linie(2) = "Frederik kører på cykel"
  Linie(3) = "Ole spiser æbler"
  Linie(4) = "Søren"
  Linie(5) = "Lise med sin nye kjole"
 
  For A = 1 To 5
      St = Linie(A)
      Printer.CurrentX = (Printer.ScaleWidth - Printer.TextWidth(St)) / 2
      Printer.Print St
  Next A
  Printer.EndDoc
End Sub
Avatar billede epo_blackdevil Nybegynder
15. august 2008 - 17:48 #3
okay så istedet for linie(5) skriver jeg så linie(X)
og tilføjer linien X = X +1 under for A = 1 to X

kan jeg erstatte med linie(X) = bestilling
vil den så tage linie x fra bestilling og printe eller?

hvordan tæller jeg så hvor mange linier der er i min string "bestilling"
Avatar billede joergen_vinther Nybegynder
16. august 2008 - 10:20 #4
Har jeg forstået det rigtigt, at du har een streng med flere linier, og så vil printe een lini ad gangen, centreret ?
Avatar billede joergen_vinther Nybegynder
16. august 2008 - 15:44 #5
Private Sub Command1_Click()
  Dim A, FilLen, LinNr As Integer
  Dim Fil(10000) As Byte        'Eller hvor mange du har brug for
  Dim Linie(100), St As String  'Eller hvor mange du har brug for
 
  Open "Filnavn" For Binary As #1
      FilLen = 0
      Do While EOF(1) = False
        FilLen = FilLen + 1
        Get #1, FilLen, Fil(FilLen)
      Loop
  Close #1
 
  LinNr = 0: St = ""
  For A = 1 To FilLen
      If Fil(A) = 13 Then  'Enter trykket.
        LinNr = LinNr + 1
        Linie(LinNr) = St
        St = ""
      Else
        If Fil(A) > 31 Then
            St = St + Chr(Fil(A))
        End If
      End If
  Next A
 
  Printer.FontSize = 12
  For A = 1 To 20 'Eller hvor mange du har brug for.
      St = Linie(A)
      If St <> "" Then
        Printer.CurrentX = (Printer.ScaleWidth - Printer.TextWidth(St)) / 2
        Printer.Print St
      End If
  Next A
  Printer.EndDoc
End Sub
Avatar billede epo_blackdevil Nybegynder
17. august 2008 - 12:39 #6
i følge:
Open "Filnavn" For Binary As #1

er det så ikke en fil den her kode vil forsøge at printe?
altså ikke min string "bestilling"
Avatar billede joergen_vinther Nybegynder
17. august 2008 - 13:09 #7
Jeg er ikke helt med. Du må forklare mig nærmere, hvordan din streng: "Bestilling" er opbygget. Og om den er saved på harddisk.
Hvis den er saved er det bare at skifte "Filnavn" ud med "Bestilling" eller hvad filen hedder.
Avatar billede joergen_vinther Nybegynder
17. august 2008 - 16:56 #8
Send evt. strengen eller filen "bestilling" til mig.
joergen_vinther@webspeed.dk
Avatar billede epo_blackdevil Nybegynder
17. august 2008 - 18:35 #9
dette er et eksempel på hvad "bestilling" kan indeholde:

4-7

rené christensen
mågevej 100, horsens
Kl: 18:00
45 personer
Bemærkning:

Varmrøget laks med røræg og grønne asparges



Rødvins marineret svinekam med ½ bagt kartoffel, ristede svampe, bagte tomater, salat med granat æble & sauce af stege skyen



Islagkage med jordbærsauce & is vafler



Ostebord med brød og kiks



Pris
204kr.




men dette variere alt efter hvad bestillingen indeholder.
det kan variere om der vælges buffet, specielle menu, eller kunden selv bestemmer retterne
Avatar billede epo_blackdevil Nybegynder
18. august 2008 - 06:46 #10
det er forresten ikke en fil der er gemt på hdd
Avatar billede joergen_vinther Nybegynder
18. august 2008 - 06:48 #11
Svar venligst på følgende spørgsmål, så godt du kan.

1. Hvor kommer "Bestilling" fra ?
2. Hvilket program er "Bestilling" skrevet i ?
3. Er "Bestilling" en VB-String ?
4. Ligger "Bestilling på din harddisk ?
5. Hvilken ext har filen ? (Bestilling.ext)
Avatar billede joergen_vinther Nybegynder
18. august 2008 - 10:56 #12
Først nu ser jeg "det er forresten ikke en fil der er gemt på hdd"
Hvad er det så ?
Avatar billede epo_blackdevil Nybegynder
18. august 2008 - 12:46 #13
1. Hvor kommer "Bestilling" fra ?
det er en string der bliver sammensat ud fra texten i en række text bokse.
disse består af en der indeholder den valgte forret, en der indeholder hovedret, dessert, og den sidste indeholder natmad.
herudover tilføjes navn adresse osv på ordren.


2. Hvilket program er "Bestilling" skrevet i ?
er lavet i vb, er en række textbokse hvor texten bliver hentet ud fra og sammensat.


3. Er "Bestilling" en VB-String ?
ja

4. Ligger "Bestilling på din harddisk ?
ja/nej der er en funktion så bestilling gemmes på hd. men det er ikke sikkert brugeren har gemt bestillingen før den printes.
så det skal virke med print ud fra string "bestilling"


5. Hvilken ext har filen ? (Bestilling.ext)
bestilling.ext findes ikke.
når filen gemmes (hvis den gør) bliver den sammensat af dato for ordren samt navnet på kunden.




selve variablen bestilling oprettes således:

Private Sub OpretBestilling()

If Not Text2.Text = "Navn" Or Text2.Text = "" Then
navn = Text2.Text
Else
navn = ""
End If

If Not Text3.Text = "Adresse" Or Text3.Text = "" Then
adresse = Text3.Text
Else
adresse = ""
End If

If Not Text5.Text = "Evt by" Or Text5.Text = "" Then
by = Text5.Text
Else
by = ""
End If

If Not Text1.Text = "Dato" Or Text1.Text = "" Then
dato = Text1.Text
Else
dato = ""
End If

If Not Text7.Text = "Klokslet" Or Text7.Text = "" Then
klokslet = Text7.Text
Else
klokslet = ""
End If

If Not Text11.Text = "Kuverter" Or Text11.Text = "" Then
kuverter = Text11.Text
Else
by = ""
End If

If Not Text12.Text = "Evt bemærkning" Or Text12.Text = "" Then
bemærkning = Text12.Text
Else
bemærkning = ""
End If

forret = Text4.Text
hovedret = Text8.Text
dessert = Text9.Text
natmad = Text10.Text
pris = Text6.Text


bestilling = dato + vbNewLine + vbNewLine + navn + vbNewLine + adresse + ", " + by + vbNewLine + "Kl: " + klokslet + vbNewLine + kuverter + " personer" + vbNewLine + "Bemærkning: " + bemærkning + vbNewLine + vbNewLine + forret + vbNewLine + vbNewLine + hovedret + vbNewLine + vbNewLine + dessert + vbNewLine + vbNewLine + natmad + vbNewLine + vbNewLine + "Pris" + vbNewLine + pris

End Sub



håber dette har hjulpet
Avatar billede epo_blackdevil Nybegynder
18. august 2008 - 13:35 #14
jeg har nu løst det ved at når der trykkes print oprettes en midlertidig txt fil på hdd, så tælles linier der i og jeg har så benyttet din kode til at printe med.

tak for hjælpen
Avatar billede epo_blackdevil Nybegynder
18. august 2008 - 13:42 #15
eneste problem nu er at når der printes (gemmer som pdf) så står teksten helt i toppen af papiret samt der ignorere linie skift.

en tekst der ser sådan ud:

tarteletter

pastasalat


bliver printet således:
tarteletter
pastasalat
Avatar billede joergen_vinther Nybegynder
18. august 2008 - 22:00 #16
Prøv dette.

LinNr = 0: St = ""
  For A = 1 To FilLen
    If Fil(A) = 13 Or Fil(A) = 10 Then  'Linieskift tilføjet.
        LinNr = LinNr + 1
        Linie(LinNr) = St
        St = ""
      Else
        If Fil(A) > 31 Then
            St = St + Chr(Fil(A))
        End If
      End If
  Next A
Avatar billede joergen_vinther Nybegynder
19. august 2008 - 07:14 #17
Jeg har kigget lidt på strengen: "Bestilling", og rettet prg.
Du kopierer vel prg. herfra til VB, og skriver ikke det hele igen.

Private Sub Command1_Click()
  Dim A, FilLen, LinNr As Integer
  Dim Fil(10000) As Byte        'Eller hvor mange du har brug for
  Dim Linie(100), St As String  'Eller hvor mange du har brug for
 
  Open "Bestilling" For Binary As #1
      FilLen = 0
      Do While EOF(1) = False
        FilLen = FilLen + 1
        Get #1, FilLen, Fil(FilLen)
      Loop
  Close #1
 
  LinNr = 0: St = ""
  For A = 1 To FilLen
      If Fil(A) = 13 Then
        LinNr = LinNr + 1
        Linie(LinNr) = St
        St = ""
      Else
        If Fil(A) > 31 Then
            St = St + Chr(Fil(A))
        End If
      End If
  Next A
 
  Printer.FontSize = 12
  For A = 1 To LinNr
      St = Linie(A)
      Printer.CurrentX = (Printer.ScaleWidth - Printer.TextWidth(St)) / 2
      Printer.Print St
  Next A
  Printer.EndDoc
End Sub
Avatar billede joergen_vinther Nybegynder
19. august 2008 - 10:55 #18
Her er en enklere løsning. Havde jeg kendt opbygningen af "Bestilling" fra starten, var det hele gået meget nemmere. Men tiden er absolut ikke spilt, vi har vist begge lært noget undervejs.

Private Sub PrintStrengKnap_Click()
  Dim StA, StB As String
  Dim A, Linie(100), LinNr As Integer
     
  For A = 1 To Len(bestilling)
      StA = Mid(bestilling, A, 1)
   
      If Asc(StA) = 13 Then
        LinNr = LinNr + 1
        Linie(LinNr) = StB
        StB = ""
      End If
      If Asc(StA) > 31 Then
        StB = StB + StA
      End If
  Next A
  LinNr = LinNr + 1
  Linie(LinNr) = StB
  Printer.FontSize = 12
  For A = 1 To LinNr
      Printer.CurrentX = (Printer.ScaleWidth - Printer.TextWidth(Linie(A))) / 2
      Printer.Print Linie(A)
  Next A
  Printer.EndDoc
End Sub
Avatar billede joergen_vinther Nybegynder
19. august 2008 - 11:06 #19
I min forrige kommentar, har jeg skrevet: "Dim Linie(100) As Integer". Det skal være: "Dim Linie(100) As String". Mærkeligt nok virker Prg.
Avatar billede epo_blackdevil Nybegynder
19. august 2008 - 14:58 #20
vi nær,er os skal noget nu :)

eneste minus er den stadig starter helt i toppen af dokumentet. (helt ved papirets top)
Avatar billede epo_blackdevil Nybegynder
19. august 2008 - 14:59 #21
syntes jeg havde beskrevet problemet ret grundigt, men kan godt se der manglede en dybere beskrivelse af bestilling og problemet.
Avatar billede epo_blackdevil Nybegynder
19. august 2008 - 15:15 #22
lige meget er fikset med linien:

Printer.CurrentY = 30

hvis du smider et svar så der points :)
Avatar billede joergen_vinther Nybegynder
20. august 2008 - 10:03 #23
Svar. Tak for hyggeligt samarbejde.

Jørgen.
Avatar billede epo_blackdevil Nybegynder
22. august 2008 - 08:34 #24
selv tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester