07. september 2003 - 01:07Der er
17 kommentarer og 1 løsning
Kan man printe rtf filer fra VB?
Kan man ikke få printet en file ud? altså en ganske normal rtf file som jeg bruger i en richtextbox, men jeg vil også gerne have mulighed for at printe den ud.
Har leget lidt og er kommet frem til denne kode, den sender godt nok noget til printeren, men der kommer ikke noget ud :/
Private Sub print_Click() If List1.ListIndex = 0 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\cpu.rtf" Printer.EndDoc ElseIf List1.ListIndex = 1 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\ram.rtf" Printer.EndDoc ElseIf List1.ListIndex = 2 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\harddisk.rtf" Printer.EndDoc ElseIf List1.ListIndex = 3 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\bundkort.rtf" Printer.EndDoc ElseIf List1.ListIndex = 4 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\skærm.rtf" Printer.EndDoc ElseIf List1.ListIndex = 5 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\netkort.rtf" Printer.EndDoc ElseIf List1.ListIndex = 6 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\drev.rtf" Printer.EndDoc ElseIf List1.ListIndex = 7 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\grafikkort.rtf" Printer.EndDoc ElseIf List1.ListIndex = 8 Then Printer.Print "D:\Dokumenter\Programering\Spec\text\lydkort.rtf" Printer.EndDoc End If End Sub
Sikkert ikke så svært, men er begyndt på VB for en uge siden, så er ny indenfor det her :) og fandt ikke lige noget jeg kunne bruge ved at søge.
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Select Case List1.Listindex Case 1 Printer.Print "D:\Dokumenter\Programering\Spec\text\ram.rtf" Printer.EndDoc Case 2 Printer.Print "D:\Dokumenter\Programering\Spec\text\harddisk.rtf" Printer.EndDoc '... End Select
Men det var jo slet ikke det du spurgte om, skriver det kun i tilfælde af at du ikke kender Select Case (du har jo kun arbejdet med VB 1 uge)
Peik: Ja, en løsning er jo at indlæse RTF-filen i VB, fx. i en RichTextBox, og udskrive derfra - men jeg har på fornemmelsen, at rexuz ønsker at udskrive filen uden at åbne den først... Eller?
Mht at indlæse rtf-filen i en RichTextBox, må du lige sige til hvis du skal have hjælp til det, Rexuz. Husk at bruge Close bagefter...
Det vil sige hvis man vælger f.eks. "case 4" er det teksten "skærm.rtf" der bliver printet ud når man trykker på print knappen i menuen. Og det skal slef også virke når man vælger en af de andre..
Du kan spare en masse linier ved ikke at gentage Option1.Visible = True Option2.Visible = True Option3.Visible = True 8 gange...
Har ikke forstået - har du fået svar nok, eller spørger du igen, eller?
Ideen (fra peikba) er, at du læser din rft ind i en richtextbox, og så printer ud fra denne. Altså lige som i word - du skal først indlæse dokumentet før du kan printe, du kan ikke printe direkte fra word uden at åbne dokumentet først. Got it?
Jeg ville nu gøre det lidt anderledes end peikba, men ideen er nu rigtig nok...
Hvis du kender til en kommando man kan fyre afsted fra en dosprompt, kan du få VB til at sende den kommando afsted for dig, i stedet for at åbne dokumentet i en richtextbox, fx. "Copy c:\dokument.rft LPT1:" eller noget i den retning
Det svar peikba er kommet med er sikkert rigtig nok til det jeg stillede af spørgsmål først men det var åbenbart ikke godt nok formuleret :( sry. Men hvordan får jeg peikba's svar til at virke sammen med listindex boxsen.. For det er jo forskelligt indhold der skal printes.
eks. Hvis der f.eks. vælges cpu i listindex, bliver cpu teksten(cpu.rtf) synlig i richtextboxsen og hvis der så trykkes på print så kommer "cpu.rtf" ud. Hvis der så vælges "skærm" i listindex bliver den synlig og igen trykkes der print, men nu er det self skærm.rtf der skal komme ud. Sådan skal det virke. Men hvordan kobler jeg det lige sammen med det peikba kom med af svar? eller skal der noget helt nyt til.
btw. Det med options er pga. jeg ikke har dem synlige fra starten. Man ved jo ikke hvad folk trykker på først i listindex.
hallo - du har fuldstændigt misforstået det hele. Du skal da ikke putte en textstring der hedder det samme som dit filnavn ind i richtextboxen - du skal putte INDHOLDET af din rtf-fil ind i richtextboxen, og så printe derfra...
Dim RTF As String Dim FilNummer As Integer FilNummer = FreeFile
'Åbner filen og læser indholdet ind i RTF: Open "C:\Fil.rtf" For Input As #FilNummer RTF = Input(LOF(FilNummer), 1)
'Lukker filen igen - vigtigt at huske Close #FilNummer
'Læser varieblen ind i richtextbox: RichTextBox1.TextRTF = RTF
'Printer indholdet af richtextboxen 'Frit efter peikba: Dim Printer As Printer For Each Printer In Printers If Printer.DeviceName = "OKIPAGE 6w" Then RichTextBox1.SelPrint Printer.hDC Exit For End If Next
Det kunne så passende smides i en sub, der modtager filnavnet som parameter, og så kan du kalde denne sub fra din select case statement... :o)
Og fordi jeg er så rar har jeg skrevet den dub for dig:
Private Sub PrintRTF(RTFfil As String, Printernavn As String) Dim RTF As String Dim FilNummer As Integer FilNummer = FreeFile Open RTFfil For Input As #FilNummer RTF = Input(LOF(FilNummer), 1) Close #FilNummer RichTextBox1.TextRTF = RTF Dim Printer As Printer For Each Printer In Printers If Printer.DeviceName = Printernavn Then RichTextBox1.SelPrint Printer.hDC Exit For End If Next MsgBox "Filen " & RTFfil & " er printet på " & Printernavn End Sub
Private Sub List1_Click() Option1.Visible = True Option2.Visible = True Option3.Visible = True Select Case List1.ListIndex Case 0 PrintRTF("D:\Dokumenter\Programering\Spec\text\cpu.rtf", "OKIPAGE 6w") Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\cpu1.jpg") Case 1 ... osv
Har prøvet at tilpasse printernavn og sat det ind i en helt ny form. Men kan desværre ikke få det til at virke.
Citat: hallo - du har fuldstændigt misforstået det hele. Du skal da ikke putte en textstring der hedder det samme som dit filnavn ind i richtextboxen - du skal putte INDHOLDET af din rtf-fil ind i richtextboxen, og så printe derfra...
Den må du meget gerne forklare lidt nærmere, da min lærer sagde det skulle gøres på den måde, når man arbejdede med list1.listindex.
Fejlmeddelse? "Sys ik retty, mit VB kan klare" fortæller jo ikke noget...
Jeg har meget svært ved at forklare det mere tydeligt end jeg allerede har gjort:
"Du skal da ikke putte en textstring der hedder det samme som dit filnavn ind i richtextboxen - du skal putte INDHOLDET af din rtf-fil ind i richtextboxen, og så printe derfra..."
Men jeg skal forsøge at gøre det endnu tydeligere med følgende eksempel:
Jeg har en fil der hedder "C:\Mormor.rtf" Inde i filen står der "Hej Mormor - tak for gaven - vi ses"
Altså INDEHOLDER filen noget tekst der ønsker mormor tak.
Hvis du har en richtextbox, og indsætter en textstring i denne, der hedder "C:\Mormor.rtf", er det - naturligvis - netop dette tekst der bliver printet. Altså får du et stykke papir ud af printeren hvorpå der står "C:\Mormor.rft"
Hvis du ønsker at printe INDHOLDET af filen ud, skal du først læse indholdet ind i din richtextbox - altså teksten der takker mormor. Derefter kan du printe det ud, og du får et parpir hvorpå der står "Hej Mormor - tak for gaven - vi ses".
Og det er præcis det min kode gør, der i øvrigt virker perfekt hos mig. Du skal bare copy-paste, og rette printernavnet.
Er du i tvivl om din printers navn, kan du lige skrive det ud i en msgbox og noterer dig hvad den hedder:
For Each Printer In Printers msgbox Printer.Devicename '<--- NY linie tilføjet If Printer.DeviceName = Printernavn Then RichTextBox1.SelPrint Printer.hDC Exit For End If Next
Jeg forbeholder mig muligheden for, at din lærer vil noget helt andet end du efterspørger her - men ovenstående printer altså en rtf-fil ud :o)
thx.. nu er det da skrevet i pap, men min lærer holder sq fast på det med textstring, men tror nu nok man kan få det til at virke.. For indholdet af den textstring bliver jo smidt ind i richtextboxen.
btw. tak for svaret.. Hvis jeg ikke kan finde ud af det nu må jeg bare være lidt dum ;)
Jeg tror du har misforstået hvad din lærer siger... Du kan IKKE blot indsætte en string med et filnavn i en richtextbox, og derefter anvende anvende en egenskab (f.eks. RichTextBox1.SelPrint) for at få skrevet INDHOLDET af filen ud. Det kan altså ikke lade sig gøre, uanset hvad din lærer siger - basta!
Men du kunne måske fyre en dos-kommando af, som parameter modtager stringen med filnavnet - det har jeg allerede vist. Prøv at få din lærer til at forklare dig præcis hvad der er meningen med opgaven, så du slipper på at bruge en masse tid på noget der måske slet ikke efterspørges...
Synes godt om
Ny brugerNybegynder
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.