14. august 2008 - 21:45Der 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
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.
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
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.
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)
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
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.
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
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
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
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.