Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    44

    Impostazioni di Stampa (VB6)

    Ciao a tutti,
    Mi servirebbero delucidazioni (stringhe di codice sarebbero proprio una mano santa...) su come si fà a stampare il contenuto di una TextBox ad una determinata distanza dal bordo sinistro e/o da quello superiore di un foglio.

    Il mio problema è appunto quello di riuscire a stampare del testo in un riquadro già presente nel foglio.

    Rimango in fiduciosa attesa.
    Saluti.

  2. #2
    Usa l'oggetto Printer, posizionati con le proprietà CurrentX e CurrentY, poi usa il metodo Print per stampare quello che vuoi. Un esempio:

    codice:
    Printer.ScaleMode = vbMillimeters
    Printer.CurrentX = 10   'posizione in mm da sinistra
    Printer.CurrentY = 50   'posizione in mm dall'alto
    Printer.Print Text1.Text
    ...
    Printer.EndDoc
    Chi non cerca trova.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    44
    Ottimo,
    ti ringrazio vivamente.
    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    44
    Salve ancora,
    Ho trovato un inconveniente piuttosto antipatico: fino a quando il contenuto della textbox è una sola riga di testo il codice di sopra non fà una piega, ma quando il testo è in multiline (con la formattazione che prende automaticamente dalle forme e dimensioni della textbox) il codice comincia a presentare delle lacune in quanto il testo o non viene stampato, oppure ne viene stampata solo una riga che oltretutto non mantiene le distanze dai margini che si erano precedentemente impostate.
    Esiste un modo per mantenere le impostazioni del testo(l'allineamento in primis)anche in fase di stampa con il codice di sopra?
    Tnx

  5. #5
    In effetti, se ci si limita alla stampa di testo su una sola riga, l'oggetto Printer funziona piuttosto bene. Ma il metodo Print non sa stampare altrettanto bene su più righe, quando incontra un carattere di fine riga (vbCrLf) la seconda riga non rimane allineata a sinistra come la prima riga, ma riparte dal margine sinistro della pagina.
    Il problema si complica se il testo multiline non contiene caratteri di fine riga: in questo caso il testo viene stampato su una sola riga e, se molto lungo, esce dalla pagina superando il margine destro.
    Una soluzione semplice al problema in VB non c'è (o meglio, non l'ho mai trovata). A meno di non usare caratteri a larghezza fissa (tipo il courier new) con i quali è facile stabilire il punto dopo il quale è opportuno andare a capo, con i caratteri truetype a larghezza variabile le cose si complicano a dismisura.
    Nei miei programmi, dapprima ho risolto con una complicata funzione di word-wrap che accettava come parametri il testo da stampare e la larghezza massima dell'area di stampa. La funzione, utilizzando la proprietà Printer.TextWidth, spezzava la stringa originale in più sottostringhe restituendole sottoforma di array. A questo punto con un ciclo for stampavo le varie righe una sotto l'altra ed il gioco era fatto. Naturalmente la funzione aveva un sacco di difetti e di limiti, sicchè un giorno mi sono deciso e mi sono costruito una library che si interfaccia direttamente con le funzioni API di Windows.
    In particolare, con la funzione API DrawText, è possibile fare veramente di tutto o quasi (manca soltanto la possibilità di stampare il testo giustificato). Utilizzando il flag DT_WORDBREAK la funzione fa proprio al caso tuo e stampa il testo all'interno del rettangolo specificato, mandando a capo il testo che eccede la larghezza massima dell'area. Mi fermo qui, perchè mi sto addentrando in argomenti un po' complicati. Se vuoi maggiori informazioni in questo senso basta che chiedi! Ciao
    Chi non cerca trova.

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.