Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [VB6] Tagliare una stringa e stamparla su 2 righe

    Buongiorno a tutti!!!

    Nel titolo ho già spiegato tutto. Ho cercato nel forum e ho trovato queste righr di codice

    codice:
    Dim stringa As String
    If Len(stringa) > 4 Then
        stringa1 = Mid(stringa, 1, 4)
        stringa2 = Mid(stringa, 5, Len(stringa) - 4)
    End If
    stringa = stringa1 & Chr(13) & stringa2
    Il mio problema sorge quando devo inserire queste righe nel mio cosice, che prontamente posto

    codice:
    ' Print rotated text.
    Private Sub cmdPrint_Click()
    Dim MessAlert As Integer
    
        ' ____________________ * * * TITOLO GRANDE * * * ____________________
        Const FONT_SIZE = 18
        Const FONT_FACE = "Comic Sans"
    
        Dim printer_hdc As Long
        Dim log_font As LOGFONT
        Dim new_font As Long
        Dim old_font As Long
    
            ' Initialize the printer.
            Printer.Print " "
            ' Save the hDC.
            printer_hdc = Printer.hdc
            ' Create the rotated font.
            With log_font
                .lfEscapement = 900
                .lfHeight = (FONT_SIZE * -20) / Printer.TwipsPerPixelY
    
                ' End the font name with a vbNullChar.
          
                .lfFaceName = FONT_FACE & vbNullChar
            End With
            new_font = CreateFontIndirect(log_font)
            ' Select the font.
            old_font = SelectObject(printer_hdc, new_font)
        
        If txtTitolo.Text <> "" Then
            
                ' * * * CICLO PER SCEGLIERE LA POSIZIONE DI STAMPA * * *
                If Option1 = True Then
                 ' Draw the text.
                    TextOut printer_hdc, 450, 2250, txtTitolo.Text, Len(txtTitolo.Text)
                    Else
                        If Option2 = True Then
                            TextOut printer_hdc, 1300, 2250, txtTitolo.Text, Len(txtTitolo.Text)
                            Else
                                If Option3 = True Then
                                    TextOut printer_hdc, 2200, 2250, txtTitolo.Text, Len(txtTitolo.Text)
                                End If
                        End If
                End If
                ' Restore the original font.
                SelectObject printer_hdc, old_font
                DeleteObject new_font
        
            ' ____________________ * * * TITOLO PICCOLO * * * ____________________
            Const FONT_SIZE_PIC = 10
            Const FONT_FACE_PIC = "Comic Sans"
        
            Dim printer_hdc_pic As Long
            Dim log_font_pic As LOGFONT
            Dim new_font_pic As Long
            Dim old_font_pic As Long
        
            ' Create the rotated font.
                With log_font_pic
                    .lfEscapement = 0
                    .lfHeight = (FONT_SIZE_PIC * -20) / Printer.TwipsPerPixelY
    
                    ' End the font name with a vbNullChar.
                     .lfFaceName = FONT_FACE_PIC & vbNullChar
                End With
                new_font_pic = CreateFontIndirect(log_font_pic)
                ' Select the font.
                old_font_pic = SelectObject(printer_hdc, new_font_pic)
            
            ' * * * CICLO PER SCEGLIERE LA POSIZIONE DI STAMPA * * *
                If Option4 = True Then
                    ' Draw the text.
                    TextOut printer_hdc, 100, 2570, txtTitolo.Text, Len(txtTitolo.Text)
                    Else
                    If Option5 = True Then
                        TextOut printer_hdc, 100, 2700, txtTitolo.Text, Len(txtTitolo.Text)
                    End If
                End If
                ' Restore the original font.
                SelectObject printer_hdc, old_font_pic
                DeleteObject new_font_pic
       
       Printer.EndDoc
          
       Else
            MessAlert = MsgBox("Attenzione non hai inserito alcun titolo.", vbOKOnly, "Stampa titolo per M/O Disk")
       End If
        
    End Sub
    P.S. Chiedo scusa se il codice è lungo.

    In parole povere il codice sopra riportato serve per stampare in determinate posizioni il contenuto di una casella di testo (txtTitolo), una volta in verticale e una volta in orizzontale. Ora, però, devo dirgli che se il txtTitolo è maggiore di 23 caratteri, allora vai alla riga successiva, dove poi io darò le coordinate come per la prima riga.

    Chi mi può aiutare ad inserire il codice per tagliare la stringa???

    Ringrazio tutti quanti e chiedo anticipatamente scusa ai moderatori se avessi postato nuovamente un argomento già trattato.

    Grazie ancora e a presto.


  2. #2
    Ciao..il codice che hai postato (il primo) va bene per risolvere il tuo problema, anche se non è ottimo in quanto non contempla l'eventualità che i caratteri siano più di 46, quindi che sono necessarie tre righe..
    Cmq riprendendo il primo esempio se la lunghezza è maggiore di 23 allora te hai due stringhe, stringa1 e stringa2: le coordinate poi hai detto che le metti te..
    codice:
    Dim stringa1 As String, stringa2 as string
    If Len(text1.text) > 23 Then
        stringa1 = Mid(text1.text, 1, 23)
        stringa2 = Mid(text1.text, 24, Len(text1.text) - 23)
    End If
    ciao

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da MdE2005
    Ciao..il codice che hai postato (il primo) va bene per risolvere il tuo problema, anche se non è ottimo in quanto non contempla l'eventualità che i caratteri siano più di 46, quindi che sono necessarie tre righe..
    Cmq riprendendo il primo esempio se la lunghezza è maggiore di 23 allora te hai due stringhe, stringa1 e stringa2: le coordinate poi hai detto che le metti te..
    codice:
    Dim stringa1 As String, stringa2 as string
    If Len(text1.text) > 23 Then
        stringa1 = Mid(text1.text, 1, 23)
        stringa2 = Mid(text1.text, 24, Len(text1.text) - 23)
    End If
    ciao
    O anche ...

    codice:
    Dim stringa1 As String, stringa2 as string
    If Len(text1.text) > 23 Then
        stringa1 = Mid(text1.text, 1, 23)
        stringa2 = Mid(text1.text, 24)
    End If

  4. #4
    Già, è vero..

    Ciao Oregon

  5. #5
    Bella Ragazzi!!!

    Scusate ma ieri non ero in sede e non ho potuto controllare.

    Ora provo e poi vi faccio sapere.

    Grazie ancora e a presto.


  6. #6
    Aspettiamo fiduciosi..

    ciao

  7. #7
    Ari buongiorno.

    Mi sorge un dubbio...come faccio ad integrarlo col mio codice?

    Dove lo devo mettere???

    Teoricamente lo inserirei prima della parte denominata
    codice:
    ...
    ' * * * CICLO PER SCEGLIERE LA POSIZIONE DI STAMPA * * *
    ...
    ma poi come faccio a fargli stampare le due "stringa1/stringa2"???

    Grazie mille!!!!!!


  8. #8
    In realtà i codici postati funzionano, ma rischiano di troncarti la parola. Conviene troncare quando trovi uno spazio.
    codice:
      If Len(Text1.Text) > 23 Then
        Stringa1 = Left(Text1.Text, InStrRev(Mid(Text1.Text, 1, 23), " "))
        Stringa2 = Mid(Text1.Text, Len(Stringa1)+1)
      EndIf
    Utilizzando l'oggetto Printer puoi comunque fare molto meglio. Dato che il carattere può essere scelto puoi ragionare in millimetri, non in caratteri. Stabilisci quindi una lunghezza massima in mm
    codice:
      Printer.ScaleMode = 6
      StringaApp = Text1.Text
      While Printer.TextWidth(StringaApp) > LunghezzaMassima
        StringaApp = Left(StringaApp, Len(StringaApp)-1)
      Wend
      If Len(StringaApp) = Len(Text1.Text) Then
        'Sta su una riga
      Else
        If Mid(Text1.Text, Len(StringaApp)+1,1) = " " Then
           Stringa1=StringaApp
           Stringa2=Mid(Text1.Text, Len(StringaApp)+1) 
        Else
            Stringa1 = Left(StringaApp, InStrRev(StringaApp, " "))
            Stringa2 = Mid(Text1.Text, Len(Stringa1)+1)
        EndIf
      Endif
    Tutto supponendo che si tratti al massimo di 2 righe. Se ne prevedi di + si complica, ma il concetto è sempre lo stesso

  9. #9
    Prima di tutto.............BELLO IL TUO LOGHINO!!!!!!!!

    Le righe, lo confermo, sono solo due e non di più.

    Comunque il mio problema rimane dove "schiaffare" il codice per troncare la frase.

    Grazie a tutti coloro che mi aiuteranno.


  10. #10
    Azz... non è così semplice, anche perchè manca una parte del codice (la sub TextOut). Supponendo che questa sub stampi semplicemente una riga alle coordinate che gli passi, devi inserire una delle funzioni da noi postate prima della riga "If Option1 = True Then". In questo modo dividi txtTitolo in 2 stringhe (Stringa1 e Stringa2) e anzichè scrivere...

    codice:
       TextOut printer_hdc, 450, 2250, txtTitolo.Text, Len(txtTitolo.Text)
    scrivi...

    codice:
       TextOut printer_hdc, 450, 2250, txtTitolo.Text, Len(Stringa1)
       TextOut printer_hdc, 450, 2250 + Spazio, txtTitolo.Text, Len(Stringa2)
    dove Spazio è una certa distanza tra la prima e la seconda riga. Questo era il caso della scritta orizzontale, quando stampi quella verticale aggiunge Spazio non al terzo, ma al secondo parametro di TextOut

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.