Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di mvent
    Registrato dal
    Jun 2002
    Messaggi
    230

    [vb_2012] lista dei font della stampante

    cercando in rete ho visto che in vb2012 non esiste un oggetto "printers" con la possibilità di elencare i font utilizzati (come accadeva in vb6).

    Ho trovato che si deve utilizzare l'API EnumFontFamilesEx ma non sono riuscito a trovare uno script che mostra il suo funzionamento in riferimento alla stampante.

    Qualcuno sa come fare per avere questa benedetta lista dei font disponibili per la stampante?

  2. #2
    Utente di HTML.it L'avatar di mvent
    Registrato dal
    Jun 2002
    Messaggi
    230
    Bah, non ho trovato come si ottiene la lista dei font disponibili per la stampante, ma credo che non ce ne sia più bisogno.

    con le routine di seguito riesco a stampare perfettamente con svariati tipi di font che ho installati nel sistema.

    codice:
    Option Explicit On
    Imports System.Drawing
    Imports System.Drawing.Printing
    Imports System.Drawing.Text
    
    Public Class frmStampaP
    
        Dim LoadInCorso As Boolean
        Dim NuovaChiamata As Boolean
    
        Private Sub frmStampaP_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim I As Integer, J As Integer, Printer As String
            On Error GoTo G_Err
           
            LoadInCorso = True
            'carico la combo con le stampanti installate
            cboStampanti.Items.Clear()
            For Each Printer In System.Drawing.Printing.PrinterSettings.InstalledPrinters
                cboStampanti.Items.Add(Printer)
            Next
            If cboStampanti.Items.Count > 0 Then
                cboStampanti.SelectedIndex = 0
                Call Imposta_stampante()
            End If
           
            'carico la combobox dei font disponibili nel sistema
            cboFont.Items.Clear()
            I = 0 : J = 0
            Dim MyFonts As New InstalledFontCollection
            For Each one As FontFamily In MyFonts.Families
                cboFont.Items.Add(one.Name)
                I = I + 1
                If LCase(one.Name) = "courier new" Then J = I - 1
            Next
            cboFont.SelectedIndex = J
            'carico la combo per la dimensione del font
            cboSize.Items.Clear()
            For I = 10 To 40 Step 2
                cboSize.Items.Add(I.ToString)
            Next I
            cboSize.SelectedIndex = 0
            LoadInCorso = False
            NuovaChiamata = True  'uso questa variabile per la ricorsione della routine PrintDocument1_PrintPage1
    
            Exit Sub
    G_Err:
            StrMSG = MsgBox(Err.Description, vbExclamation, Me.Text)
        End Sub
    
        Private Sub Imposta_Stampante()
            On Error GoTo G_Err
            Dim Stampanti_installate = PrinterSettings.InstalledPrinters()
            Dim objPD As New PrintDocument()
            'seleziono la stampante attiva nella combobox
            objPD.PrinterSettings.PrinterName = Stampanti_installate(cboStampanti.SelectedIndex)
            Exit Sub
    G_Err:
            StrMSG = MsgBox(Err.Description, vbExclamation, Me.Text)
        End Sub
    
        Private Sub cboStampanti_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboStampanti.SelectedIndexChanged
            If Not LoadInCorso Then
                Call Imposta_Stampante()
            End If
        End Sub
    
        Private Function LimitaTesto(CAMP As String, QUANTO As Integer) As String
            If Len(CAMP) > QUANTO Then
                LimitaTesto = Mid(CAMP, 1, QUANTO - 1) & "*"
            Else
                LimitaTesto = CAMP
            End If
        End Function
    
        Private Sub cmdAnteprima_Click(sender As Object, e As EventArgs) Handles cmdAnteprima.Click
            NuovaChiamata = True  'uso questa variabile per la ricorsione della routine PrintDocument1_PrintPage1
            PrintPreviewDialog1.Document = PrintDocument1
            PrintPreviewDialog1.ShowDialog()
        End Sub
    
        Private Sub cmdImpostazioni_Click(sender As Object, e As EventArgs) Handles cmdImpostazioni.Click
            NuovaChiamata = True  'uso questa variabile per la ricorsione della routine PrintDocument1_PrintPage1
            PageSetupDialog1.Document = PrintDocument1
            If PageSetupDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                PrintDocument1.DefaultPageSettings = PageSetupDialog1.PageSettings
            End If
        End Sub
    
        Private Sub cmdSta_Click(sender As Object, e As EventArgs) Handles cmdSta.Click
            On Error GoTo G_Err
            If cboStampanti.Items.Count > 0 Then
               
                        NuovaChiamata = True  'uso questa variabile per la ricorsione della routine PrintDocument1_PrintPage1
                        If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                            PrintDocument1.Print()
                            StrMSG = MsgBox("I dati sono stati inviati alla stampante.", vbInformation, Me.Text)
                        Else
                            StrMSG = MsgBox("Stampa annullata dall'utente.", vbInformation, Me.Text)
                        End If
                   
            Else
                StrMSG = MsgBox("Nessuna stampante disponibile.", vbInformation, Me.Text)
            End If
            cboStampanti.Focus()
            Exit Sub
    G_Err:
            StrMSG = MsgBox(Err.Description, vbExclamation, Me.Text)
        End Sub
    
        Private Sub PrintDocument1_PrintPage1(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim W As Integer, Rig As String, LineePerPagina As Integer, YRigaFoglio As Integer, strRigaStampa As String
            Dim FontCorpo As New Font(cboFont.Text, CSng(cboSize.Text), FontStyle.Regular)
            Dim FontTitolo As New Font(cboFont.Text, 16, FontStyle.Bold)
            Dim FontPiePagina As New Font(cboFont.Text, 10, FontStyle.Regular)
            Static RigaPerStampa As Integer   'variabile tipo static
            Static Pagina As Integer          'variabile tipo static
            YRigaFoglio = 100
            If NuovaChiamata = True Then
                NuovaChiamata = False 'uso questa variabile per la ricorsione della routine PrintDocument1_PrintPage1
                RigaPerStampa = 0
                Pagina = 0
            End If
            'calcolo il numero di linee per pagina e tolgo alcune righe per il pie di pagina
            LineePerPagina = Math.Round(e.MarginBounds.Height / FontCorpo.GetHeight(e.Graphics)) - 5
            'intestazione di pagina
            e.Graphics.DrawString("RUBRICA", FontTitolo, Brushes.Black, 250, 50)
            e.Graphics.DrawLine(Pens.Red, 50, 75, 750, 75)
            e.Graphics.DrawString("NOMINATIVO", FontTitolo, Brushes.Black, 50, 80)
            e.Graphics.DrawString("TELEFONI", FontTitolo, Brushes.Black, 350, 80)
            'corpo della pagina
            For RigaPerStampa = RigaPerStampa To RigaPerStampa + LineePerPagina
                If RigaPerStampa < (frmMod_Eli.lstwNomi.Items.Count - 1) Then
                    'prendo alcuni caratteri del nominativo, altrimenti nel foglio non basta lo spazio
                    strRigaStampa = LimitaTesto(frmMod_Eli.lstwNomi.Items(RigaPerStampa).SubItems(1).Text, CInt(txtMaxNom.Text))
                    e.Graphics.DrawString(strRigaStampa, FontCorpo, Brushes.Black, 50, YRigaFoglio)
                    Rig = ""
                    For W = 2 To 22
                        Rig = Rig & frmMod_Eli.lstwNomi.Items(RigaPerStampa).SubItems(W).Text & IIf(Trim(frmMod_Eli.lstwNomi.Items(RigaPerStampa).SubItems(W).Text) <> "", "  ", "")
                    Next W
                    'prendo alcuni caratteri della stringa con campi restanti, altrimenti nel foglio non basta lo spazio
                    If e.PageSettings.Landscape = True Then
                        strRigaStampa = LimitaTesto(Rig, CInt(txtMaxTelORIZ.Text))  'pagina orientamento orizzontale
                    Else
                        strRigaStampa = LimitaTesto(Rig, CInt(txtMaxTelVERT.Text))  'pagina orientamento verticale
                    End If
                    e.Graphics.DrawString(strRigaStampa, FontCorpo, Brushes.Black, 350, YRigaFoglio)
                    YRigaFoglio = YRigaFoglio + FontCorpo.GetHeight
                    e.HasMorePages = True
                Else
                    e.HasMorePages = False
                End If
            Next RigaPerStampa
            'separatore di pagina
            If RigaPerStampa > (frmMod_Eli.lstwNomi.Items.Count - 1) Then
                e.Graphics.DrawLine(Pens.Black, 550, (YRigaFoglio + 10), 750, (YRigaFoglio + 10))
            End If
            'pie di pagina
            e.Graphics.DrawLine(Pens.Red, 50, (YRigaFoglio + 20), 750, (YRigaFoglio + 20))
            Pagina += 1
            e.Graphics.DrawString("Pagina " & Pagina, FontPiePagina, Brushes.Black, 600, (YRigaFoglio + 30))
        End Sub
    
    End Class

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.