[VB6] Problemen met de common Dialog (ShowPrint)

Pagina: 1
Acties:

  • Schonhose
  • Registratie: April 2000
  • Laatst online: 30-07 21:51

Schonhose

Retro Icoon

Topicstarter
Ik heb een RTF-box waarvan ik graag de contents wil uitprinten.

Nu wil ik graag dat de gebruiker de gelegenheid krijgt om een aantal opties in te stellen dus ik dacht laat ik het commando ShowPrint gebruiken.

Nu werkt dat niet helemaal. Soms laat het programma de dialog wel zien, de andere keren weer niet.

Verder lukt het me niet om de opties (flags) mee te geven aan het print commando. Hieronder staat een voorbeeld hoe ik het deed.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Sub Print

  Dim NoCopies as integer
  Dim n as integer

  CommonDialog1.ShowPrint
  NoCopies = CommonDialog1.Copies
  For n=1 to NoCopies
     Printer.Print rtfBox.Text
  next n
End Sub


Nu zou ik ook graag de mogelijkheid willen bieden om een selectie of om alles te printen. Nu kan ik dit zelf ook wel door de selectie op te halen en deze mee te geven in plaats van de hele tekst. (Printer.Print SelectionrtfBox) maar dat moet naar mijn idee makkelijker kunnen.

Op VBCity (in de FAQ) heb ik een code gevonden die wel goed werkt maar welke nu alleen kan printen op de standaard printer.

Ik slaag er niet in om de printer uit de ShowPrint dialog mee te geven aan die functie. (Als ik die dialog al voor me neus krijg.........) Kan het zijn dat ik eerst alle flags moet resetten voordat ik hem aanroep?

Het gaat om deze functie:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Public Function PrintRTF(rtb As RichTextBox, _ 
                         Optional PrinterDC As Long = 0, _ 
                         Optional LeftMargin As Long = 1440, _ 
                         Optional TopMargin As Long = 1440, _ 
                         Optional RightMargin As Long = 1440, _ 
                         Optional BottomMargin As Long = 1440) 

  Dim i As Long, prn As Object 

  If (PrinterDC = 0) Then 
    ' use the default printer 

    PrintRTFText Printer, rtb, LeftMargin, TopMargin, RightMargin, _ 
        BottomMargin, False 
    Printer.EndDoc 

  Else 
    ' search for printer 
    For i = 0 To Printers.Count - 1 
      If Printers(i).hdc = PrinterDC Then 
        Set prn = Printers(i) 
        PrintRTFText prn, rtb, LeftMargin, TopMargin, RightMargin, _ 
            BottomMargin, False 
        prn.EndDoc 
        Exit For 
      End If 
    Next i 
  End If 
End Function


Ik dacht na het bestuderen van de code dat ik de handle mee moest geven maar dat blijkt het niet te zijn.

Die handle probeerde ik te vinden via. Printer.hdc. Dus ik riep de functie aan met:

Visual Basic:
1
2
3
4
5
6
7
8
  Dim NoCopies as integer
  Dim n as integer

  CommonDialog1.ShowPrint
  NoCopies = CommonDialog1.Copies
  For n=1 to NoCopies
       Call PrintRTF(rtfBox, Printer.hdc)
  next n


Maar dit lijkt altijd de default printer te zijn.

Ik kom er niet uit.... :?

[ Voor 64% gewijzigd door Schonhose op 15-04-2003 12:31 ]

"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Uit mn hoogd gezegt kun je met
set Printer = Printers(1)
Printer laten verwijzen naar een andere printer dan de standaard (waarbij 1 uiteraard de juiste index moet zijn ;)).

Exact expert nodig?


  • Schonhose
  • Registratie: April 2000
  • Laatst online: 30-07 21:51

Schonhose

Retro Icoon

Topicstarter
Crazy D schreef op 15 april 2003 @ 13:18:
Uit mn hoogd gezegt kun je met
set Printer = Printers(1)
Printer laten verwijzen naar een andere printer dan de standaard (waarbij 1 uiteraard de juiste index moet zijn ;)).
Ja dit klopt. Maar ik kan met de common dialog functie ShowPrint ook printers kiezen. Als ik hiervan geen index weet kan ik nog niet verder.

Dus eigenlijk zoek ik een manier om vanuit de functie ShowPrint de index van de door de gebruiker aangegeven printer weer te geven....

"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Ff wat getest... ik kan zo snel ook niet vinden hoe je die kunt uitlezen... maar als je de PrinterDefault van de commondialog op true zet, maakt ie van de geselecteerde printer de default windows printer. Dan weet je iig welke printer er is geselecteerd ;) (of het netjes is dat de default printer wordt verandert valt over te discusseren ;)). Ik heb t zelf uiteindelijk, toen ik t ook een keer nodig had, opgelost door zelf een formpje te maken om de printer te laten selecteren. Niet ideaal, mjah was stukken sneller klaar dan uitvogelen hoe je nou te weten komt welke printer er is geselecteerd ;)

Exact expert nodig?


  • Schonhose
  • Registratie: April 2000
  • Laatst online: 30-07 21:51

Schonhose

Retro Icoon

Topicstarter
Zo erg is dat dan ook weer niet wanneer je na de print actie de default printer weer terug zet naar wat hij was.

Ik zal eens kijken of ik daar wat voor kan bedenken.

"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005


  • Schonhose
  • Registratie: April 2000
  • Laatst online: 30-07 21:51

Schonhose

Retro Icoon

Topicstarter
Pfffff...... na lang zoeken is het toch niet gelukt.

Ik gooi de handdoek in de ring en ga zelf wel een ShowPrint dialog in elkaar flansen.

Ik krijg met geen mogelijkheid de default printer terug.....

"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005

Pagina: 1