Avatar billede rexuz Nybegynder
07. september 2003 - 01:07 Der 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.
Avatar billede martin_moth Mester
07. september 2003 - 11:00 #1
Ved ikke noget om rtf og print fra VB, men ved, at du med fordel vil kunne bruge en "Select Case List1.Listindex" i stedet for masser af elseif...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcn7/html/vaconUsingSelectCase.asp
Avatar billede martin_moth Mester
07. september 2003 - 11:02 #2
Altså

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)
Avatar billede rexuz Nybegynder
07. september 2003 - 12:38 #3
Det vil jeg huske.. Ser udtil at man skal skrive mindre kode :)

men mangler stadig æ svar :)

Hvordan printer man en rtf file ud....?
Avatar billede peikba Nybegynder
07. september 2003 - 14:10 #4
Det første du skal gøre er at oprette en RichTextBox variabel og indlæse
indholdet af din rtf fil i den via open #1 kommandoen:

Dim rtfText As RichTextBox
rtfText.TextRTF = IndRtfFil

Når alt er indlæst i den variabel skriver du følgende:

  Dim Printer  As Printer

  For Each Printer In Printers
  If Printer.DeviceName = "Printernavn" Then
      rtftext.SelPrint Printer.hDC
      Exit For
  End If
  Next

Nemt ikk' ?

/Peik
Avatar billede martin_moth Mester
07. september 2003 - 18:14 #5
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...
Avatar billede rexuz Nybegynder
09. september 2003 - 16:35 #6
Jeg har en richtextbox hvor filen bliver vist. Men den er mixset sammen med en listindex fætter pga. der er flere forskellige rtf at vælge mellem.

Hele koden ;)

Private Sub List1_Click()
Select Case List1.ListIndex
    Case 0
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\cpu.rtf")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\cpu1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
    Case 1
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\ram.rtf")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\ram1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
    Case 2
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\harddisk.txt")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\harddisk1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
    Case 3
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\bundkort.txt")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\bundkort1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
    Case 4
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\skærm.rtf")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\skærm1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
    Case 5
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\netkort.rtf")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\netkort1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
    Case 6
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\drev.txt")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\drev1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
    Case 7
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\grafikkort.rtf")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\grafikkort1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
    Case 8
RichTextBox1.FileName = ("D:\Dokumenter\Programering\Spec\text\lydkort.rtf")
Image1.Picture = LoadPicture("D:\Dokumenter\Programering\Spec\pic\lydkort1.jpg")
Option1.Visible = True
Option2.Visible = True
Option3.Visible = True
End Select
End Sub

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..
Avatar billede martin_moth Mester
09. september 2003 - 16:46 #7
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...
Avatar billede martin_moth Mester
09. september 2003 - 16:47 #8
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
Avatar billede rexuz Nybegynder
09. september 2003 - 17:21 #9
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.
Avatar billede rexuz Nybegynder
09. september 2003 - 17:26 #10
Bare glem det jeg skrev efter btw. :) fandt lige ud af hvad du mente.. Skal bare stå før alle options.. :)
Avatar billede martin_moth Mester
09. september 2003 - 19:24 #11
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...
Avatar billede martin_moth Mester
09. september 2003 - 19:27 #12
Eller, gøre noget i retning af det jeg skrev, med at fyre en DOS-kommando af via en Shell...
Avatar billede martin_moth Mester
09. september 2003 - 19:42 #13
Løsningen med at læse det ind i en RichTextBox:

  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)
Avatar billede martin_moth Mester
09. september 2003 - 19:55 #14
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
Avatar billede rexuz Nybegynder
09. september 2003 - 20:35 #15
Sys ik retty, mit VB kan klare

PrintRTF("D:\Dokumenter\Programering\Spec\text\cpu.rtf", "OKIPAGE 6w")

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.
Avatar billede martin_moth Mester
10. september 2003 - 08:36 #16
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)
Avatar billede rexuz Nybegynder
10. september 2003 - 22:27 #17
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 ;)
Avatar billede martin_moth Mester
11. september 2003 - 15:29 #18
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...
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