Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Conversione codice per stampa da VB6 a VB.NET
Forum - C# / VB.NET - Conversione codice per stampa da VB6 a VB.NET

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 13:00
Giovedì, 27/09/2012
Buongiorno a tutti,
mi scuso in anticipo per la banalità della domanda ma ho cercato in rete, letto tanto eppure non riesco a implementare velocemente un codice che per voi saraà sicuramente banale...

Io avevo queste poche linee di codice che semplicemente stampavano 2 righe, con una riga vuota in mezzo, con un testo una volta utilizzando un font e la seconda volta con un altro font

Codice sorgente - presumibilmente C# / VB.NET

  1. Sub StampaMi()
  2.         Printer.Font.Name = BarCode_Font
  3.         Printer.Font.Size = BarCode_Size 'max 20 caratteri
  4.  
  5.         'centratura della scritta
  6.         Printer.ScaleMode = 6 'scala in millimetri
  7.         Printer.CurrentX = (Printer.ScaleWidth - Printer.TextWidth(Form2.TestoTotale)) / 2
  8.         Printer.Print(Form2.TestoTotale)
  9.  
  10.         'Manda a capo per una riga nuova
  11.         Printer.Font.Name = "Courier New"
  12.         Printer.Font.Size = "2"
  13.         Printer.Print (vbCrLf);
  14.  
  15.  
  16.         'testo ripetuto con cambio font
  17.         Printer.Font.Name = "Courier New"
  18.         Printer.Font.Size = "10"
  19.  
  20.         Printer.CurrentX = (Printer.ScaleWidth - Printer.TextWidth(Form2.TestoTotale)) / 2
  21.         Printer.Print(Form2.TestoTotale)
  22.  
  23.         Printer.EndDoc()
  24.     End Sub



Mi potreste riscrivere tale codice "tradotto" in vb.net (2008)?
La dimensione della pagina non importa perché dovrebbe prendere quella predefinita sulla stampante (almeno in VB6 era così...)

Grazie ancora!

PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 15:26
Giovedì, 27/09/2012
Sono riusco  a fare quasi tutto, sono arrivato a questo punto:

Codice sorgente - presumibilmente VB.NET

  1. Private Sub PrintDocument1_BeginPrint1(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
  2.  
  3.         Testo = "Testo con allineamento"
  4.  
  5.         NuovoFont = New Font("Times New Roman", 12, FontStyle.Regular, GraphicsUnit.Point)
  6.  
  7.         'allineamento verticale: vicino (near) al margine superiore
  8.         CustomFormat.LineAlignment = StringAlignment.Center
  9.  
  10.         'allineamento orizzontale: vicino (near) al margine sinistro
  11.         CustomFormat.Alignment = StringAlignment.Center
  12.  
  13.         '---------------------- S E C O N D O    T E S T O ---------------------------
  14.  
  15.         Testo2 = "Il gioco è fatto."
  16.  
  17.         NuovoFont2 = New Font("Arial", 8, FontStyle.Regular, GraphicsUnit.Point)
  18.  
  19.         'allineamento verticale: vicino (near) al margine superiore
  20.         CustomFormat2.LineAlignment = StringAlignment.Center
  21.  
  22.         'allineamento orizzontale: vicino (near) al margine sinistro
  23.         CustomFormat2.Alignment = StringAlignment.Center
  24.  
  25.     End Sub



Ma fra il primo e il secondo testo (entrambi centrati verticalmente e orizzontalmente) mi servirebbe una riga vuota.
Invece ora come ora i due testi sono sovrapposto (petché centra le singole righe, non il blocco di testo).
Come fare?

Grazie

PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 17:06
Giovedì, 27/09/2012
Non capisco anche la seguente cosa: come mai in "e.Graphics.DrawString" al posto di "e.MarginBounds" non posso mettere un numero tipo 100?
Se lo faccio mi dà questo errore:

Error    1    Overload resolution failed because no accessible 'DrawString' can be called with these arguments:
    'Public Sub DrawString(s As String, font As System.Drawing.Font, brush As System.Drawing.Brush, layoutRectangle As System.Drawing.RectangleF, format As System.Drawing.StringFormat)': Value of type 'Integer' cannot be converted to 'System.Drawing.RectangleF'.
    'Public Sub DrawString(s As String, font As System.Drawing.Font, brush As System.Drawing.Brush, point As System.Drawing.PointF, format As System.Drawing.StringFormat)': Value of type 'Integer' cannot be converted to 'System.Drawing.PointF'.
    'Public Sub DrawString(s As String, font As System.Drawing.Font, brush As System.Drawing.Brush, x As Single, y As Single)': Value of type 'System.Drawing.StringFormat' cannot be converted to 'Single'.    C:\Documents and Settings\Administrator\Desktop\Stampa_Testo\Stampa_Testo\Stampa_Testo\Form1.vb    50    9    Stampa_Testo


Riporto sotto l'intero codice:

Codice sorgente - presumibilmente VB.NET

  1. Imports System.Drawing.Printing
  2.  
  3. Public Class Form1
  4.  
  5.     'definizione di un documento di stampa
  6.     Private WithEvents PrintDocument1 As New PrintDocument
  7.  
  8.     'definizione di un nuovo font
  9.     Private NuovoFont As Font
  10.     Private NuovoFont2 As Font
  11.  
  12.     'definizione della variabile che contiene il testo
  13.     Dim Testo As String
  14.     Dim Testo2 As String
  15.  
  16.     'definizione del formato del testo
  17.     Dim CustomFormat As New StringFormat
  18.     Dim CustomFormat2 As New StringFormat
  19.  
  20.     'Inpostazioni iniziali prima dell'avvio del processo di stampa
  21.     Private Sub PrintDocument1_BeginPrint1(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
  22.  
  23.         Testo = "Testo con allineamento"
  24.  
  25.         NuovoFont = New Font("Times New Roman", 12, FontStyle.Regular, GraphicsUnit.Point)
  26.  
  27.         'allineamento verticale: vicino (near) al margine superiore
  28.         CustomFormat.LineAlignment = StringAlignment.Center
  29.  
  30.         'allineamento orizzontale: vicino (near) al margine sinistro
  31.         CustomFormat.Alignment = StringAlignment.Center
  32.  
  33.         '---------------------- S E C O N D O    T E S T O ---------------------------
  34.  
  35.         Testo2 = "Il gioco è fatto."
  36.  
  37.         NuovoFont2 = New Font("Arial", 8, FontStyle.Regular, GraphicsUnit.Point)
  38.  
  39.         'allineamento verticale: vicino (near) al margine superiore
  40.         CustomFormat2.LineAlignment = StringAlignment.Center
  41.  
  42.         'allineamento orizzontale: vicino (near) al margine sinistro
  43.         CustomFormat2.Alignment = StringAlignment.Center
  44.  
  45.     End Sub
  46.  
  47.     Private Sub PrintDocument1_PrintPage1(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
  48.  
  49.         'disegna il testo da stampare
  50.         e.Graphics.DrawString(Testo, NuovoFont, Brushes.Black, e.MarginBounds, CustomFormat)
  51.         e.Graphics.DrawString(Testo2, NuovoFont2, Brushes.Black, e.MarginBounds, CustomFormat2)
  52.  
  53.  
  54.     End Sub
  55.  
  56.     Private Sub PrintDocument1_EndPrint1(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.EndPrint
  57.  
  58.         'rilascia le risorse occupate dal testo
  59.         NuovoFont.Dispose()
  60.         NuovoFont = Nothing
  61.  
  62.     End Sub
  63.  
  64.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  65.         'stampa diretta del documento senza attivare finestre di dialogo
  66.         PrintDocument1.Print()
  67.     End Sub
  68.  
  69. End Class



PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 17:27
Giovedì, 27/09/2012
Ciao.
Così,, al voto.. Leggi qua:
Value of type 'Integer' cannot be converted to 'System.Drawing.RectangleF'.
Ti sta dicendo che i parametri che tu passi alla funzione non sono corretti: per quell'overload vuole un oggetto RectangleF e non integer.

PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 17:33
Giovedì, 27/09/2012
Ok, ma non ho comunque capito come inserire la seconda scritta più in basso della prima...

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 17:40
Giovedì, 27/09/2012
Ma tu devi centrale le 2 scritte?.
Mi par di ricordare che nella guida di Totem ci fosse qualcosa di simile...
Tipo: calcolava il numero di righe della pagina facendo "spazio tra margine sup e inf" / Altezza riga (in funzione del carattere).
Guarda qua:
Codice sorgente - presumibilmente VB.NET

  1. 'Per sapere quante righe ci possono stare nella pagine,
  2. 'bisogna misurare l'altezza dei caratteri
  3. Static CharHeight As Single = Font.GetHeight(e.Graphics)
  4. 'Calcola le linee di testo che possono stare in una pagina.
  5. Static TotalLines As Int16 = e.MarginBounds.Height / CharHeight


Dopo di che, dai tu la coordinata Y delle 2 righe
Guarda l'esempio qua, e riadatta il codice
http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_ ...

PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 17:55
Giovedì, 27/09/2012
Ho guardato il link ma si parla di altezza dei caratteri, di dimensioni della pagina...
Ma porca miseria come si dice "vai 12 mm più in basso del centro e scrivi quest'altro testo"?

Sono solo due righe veramente quelle che devo scrivere, quindi problemi sulle dimensioni totali non ce ne ho...

Mettiamo che adesso ho questo:

Codice sorgente - presumibilmente Plain Text

  1. 'allineamento verticale: vicino (near) al margine superiore
  2.         CustomFormat2.LineAlignment = StringAlignment.Center



[...]

Codice sorgente - presumibilmente Plain Text

  1. e.Graphics.DrawString(Testo2, NuovoFont2, Brushes.Black, e.MarginBounds, CustomFormat2)



Come faccio a dire alla seconda riga che deve nella pagina deve trovarsi più 12mm più in basso del centro?


Ultima modifica effettuata da dylan666 il 27/09/2012 alle 18:00
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 18:00
Giovedì, 27/09/2012
Appunto.
Nell'esempio di Totem lui parte dal angolo in alto a sinistra (tenendo conto dei margini) e aggiunge le righe impostando di volta in volta la coordinata Y della riga incrementandola di un passo pari all'altezza di 1 singola riga.
Tu devi fare la stessa cosa.
Prova una cosa del tipo:
Y = altezza pagina/2
1 riga al punto Y-10 mm
2 riga al punto Y+10 mm
Basta che aggiusti le misure ad occhio..
Devi usare questo overload del metodo:
DrawString(String, Font, Brush, PointF, StringFormat)
Imposta tu PointF, cioè le coordinate X e Y dove scrivere la stringa.
Non puoi impostare in questo caso allineamento verticale come centrato.

Ultima modifica effettuata da Renny il 27/09/2012 alle 18:03
PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 18:09
Giovedì, 27/09/2012
Mi spieghi gentilmente come fare l'overload di quel metodo?
Purtroppo sono poco pratico

Grazie!

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo