Autore Topic: Stampare con gambas  (Letto 2529 volte)

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Stampare con gambas
« il: 17 Gennaio 2009, 13:25:20 »
Ciao sono ivo, è la prima volta che scrivo su questo forum, sto tentando di imparare questo linguaggio per passare definitivamente a linux, ma per farlo dovrei riuscire a riscrivere qualche piccolo programma che molti anni fa avevo scrito con visual basic 3, il primo probelema che ho trovato è stampare, che fine ha fatto l'oggetto printer.
in tanto grazie ciao ivo

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Stampare con gambas
« Risposta #1 il: 17 Gennaio 2009, 13:36:27 »

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Stampare con gambas
« Risposta #2 il: 17 Gennaio 2009, 14:05:55 »
grazie mille ciao ivo

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Stampare con gambas
« Risposta #3 il: 20 Gennaio 2009, 09:18:06 »
Qualche problemino per iniziare ho provato con un esempio semlice:

1: in proprietà del progetto ho aggunto il componete gb.qt

2: poi ho creato una form con un pulsate che eseguisse:

dim x as integer
dim y as integer
 IF Printer.Setup() THEN RETURN  'fai apparire il modulo di  conf. stampante    
Draw.Begin(Printer) ' Initializes the draw
draw.LineWidth = 1
Draw.Foreground = Color.black
x=10
y=10
draw.rect(x, y, 400, 200)
draw.Font.Name = "Utopia"
draw.Font.size = 9
draw.Font.Italic = TRUE
Draw.Text("ciao a tutti", x , y)
Draw.end

ma quando eseguo appare un messaggio che dice: Unknown identifier: Printer alla linea 17 in FMain.class

Qualche consiglio? grazie ciao

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Stampare con gambas
« Risposta #4 il: 20 Gennaio 2009, 12:20:09 »
Citazione

ivosperi ha scritto:
Qualche problemino per iniziare ho provato con un esempio semlice:

1: in proprietà del progetto ho aggunto il componete gb.qt


Ho approfittato del tuo progetto per fare un pò di esperienza anch'io. Ho cominciato pure io un progetto, ma non sono ancora approdato alla stesura di codice per la stampa.

Ho notato però che agendo sulle Proprietà del progetto, dopo avere aggiunto il componente gb.qt ho ricevuto un messaggio di errore di incompatibilità fra gb.gui e gb.qt. Ho allora tolto la spunta da gb.gui, ho riprovato ad eseguire l'esempio di fsurfing  che ha funzionato, fornendomi la stampa "ciao a tutti". :-)
Sei sicuro di avere aggiunto il componente gb.qt?

Ora mi rivolgo agli esperti:
Citazione
in pratica, per ottenere il funzionamento del programma,  ho dovuto sostiruire il componente cb.gui col componente gb.qt. Ma così facendo posso incontrare ulteriori malfunzionamenti di avvio e/o esecuzione del programma successibvamente? Ovviamente parlo non del programma di prova.


A proprosito, Ciao a tutti.  ;-)
:ciao:

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Stampare con gambas
« Risposta #5 il: 20 Gennaio 2009, 13:25:33 »
ciao
anche io avevo tolto il componente gb.gui ma mi da errore lo stesso, poi provo a vedere se c'è qualche altro componente che da fastidio, ora sono su un altro computer
grazie ciao

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Stampare con gambas
« Risposta #6 il: 20 Gennaio 2009, 15:33:02 »
hai ragione scusami; ho dimenticato di dirti che oltre gb.qt, bisogna anche aggiungere
Citazione

gb.qt.ext

 :ciao:
:ciao:

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stampare con gambas
« Risposta #7 il: 20 Gennaio 2009, 15:52:23 »
Il componente gb.gui è un componente che permette di impostare le librerie grafiche (GTK o QT) del proprio programma in base al desktop su cui si sta facendo girare (Gnome o KDE, rispettivamente).
E', ovviamente, incompatibile sia con gb.gtk che con gb.qt perché li contiene entrambi e cercando di mettere ad esempio gb.gui con gb.gtk sarebbe come voler mettere gb.gtk con gb.qt, che non si può fare.

So che la spiegazione è un po' arzigogolata, ma spero che mi abbiate capito lo stesso.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Stampare con gambas
« Risposta #8 il: 20 Gennaio 2009, 19:30:06 »
Ok il mio primo programma con gambas funziona !!!
ho aggiunto gb.qt.ext Grazie.

in riferimento al post do leo72 visto che io uso preferisco usare gnome al posto di caricare gb.qt e gb.qt.ext dovrei usare gb.gtk ma cosi non funziona cosa consigliate ?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Stampare con gambas
« Risposta #9 il: 20 Gennaio 2009, 21:08:10 »
non vorrei sbagliarmi ma mi pare che la stampa funzioni solo sulle qt

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stampare con gambas
« Risposta #10 il: 20 Gennaio 2009, 23:01:01 »
Putroppo è così. Ancora lo sviluppo del componente gb.gtk non ha raggiunto il livello di gb.qt.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Stampare con gambas
« Risposta #11 il: 21 Gennaio 2009, 17:04:47 »
infatti per ora sto provando utilizzando le i componenti gb.qt e gb.qt.ext su gnome e tutto sembra funzionare bene. Avrei un'altra domanda:
In visual basic c'erano le proprietà printer.ScaleHeight e ScaleWidth che servivano per impostare l'area di disegno per la stampa, in gambas presumo per l'oggetto draw quali sono?

grazie ciao

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Stampare con gambas
« Risposta #12 il: 21 Gennaio 2009, 20:27:37 »
non saprei proprio ... a che ti servivano in vb?

se devi stampare un disegno che hai a video ad esempio su un drawingarea e vuoi che riempa tutto il foglio della stampante puoi usare la funzione printer.resolution

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare con gambas
« Risposta #13 il: 22 Gennaio 2009, 10:36:16 »
In gambas esiste una classe statica: Printer, che ti permette di gestire il driver della stampante (comprese le dimensioni di stampa).
Riguardo agli altri oggetti (Drawing, Form, ecc.), questi hanno già una loro funzione di stampa ma, non tiene conto del device su cui vanno a stampare.
Mi spiego meglio...
Prendiamo ad esempio una DrawingArea. Questa è possibile dimensionarla a piacere entro limiti piuttosto ampi (diciamo 10000x10000 pixel); è ovvio pensare che l'area da stampare esca fuori dai margini di un singolo foglio A4, tenendo conto che la configurazione della stampante può NON corrispondere, a livello di Resolution, a quella del video (che di solito è 96px). A questo punto, se si vuole var entrare tutto in un singolo foglio, è necessario che l'immagine da stampare venga ridimensionata (o scalata) in modo congruo; in questo caso Printer non ti è di aiuto, dato che il suo scopo è quello di impostare la stampante, configurando solo ed esclusivamente le proprie configurazioni (es. orientamento, formato carta, ecc.). Come fare allora? Dipende dall'oggetto che vuoi stampare. Ogni oggetto in Gambas (ma anche in altri linguaggi), ha una serie di proprietà (sempre se l'oggetto è predisposto alla stampa...), che ti permettono di trasformare l'oggetto stesso in un'immagine bidimensionale; quest'immagine, a questo punto, può essere trasformata, indipendentemente dal target a cui la invierai (in questo caso una stampante), e quindi toccherà a te impostare i parametri di trasformazione in modo da adattare l'immagine al device di destinazione.
La Form (ad esempio, e come del resto hanno un pò tutti gli oggetti grafici), ha un metodo, che si chiama Grab, che ti crea un'immagine dell'oggetto stesso, come visualizzato al momento; questa immagine, che non è altro che un'oggetto Picture, può essere traformato usando i metodi di Picture, oppure ritrasformato in Image, e usare i metodi di quest'ultima classe per operare cambiamenti anche strutturali (es. ridimensionamento=Stretch, colore, rotazione, ecc.).
Riguardo ad immagini create in memoria (non estratte da oggetti presenti visivamente nell'applicazione), vale lo stesso discorso; per crearli è necessario un oggetto di tipo Picture o Image, su cui creare il disegno oppure tramite il caricamento di un file immagine.
La stampa, quindi, dipende da come poi configuri l'oggetto (non il device); in effetti potresti salvarlo in un file, invece di inviarlo ad una stampante, ma il concetto non cambia.

Nota: è importante sapere, anche dietro all'esperienza fatta, che il Grab (metodo) di un'oggetto presente a video, non stampa il contenuto dell'oggetto stesso, ma il contenuto dell'area che occupa. Mi spiego: se l'oggetto interessato è situato sotto un'altro oggetto, il metodo Grab crea un'immagine che è il contenuto dell'area occupata dall'oggetto interessato, più il contenuto della parte dell'oggetto che lo sovrasta. Questo, a mio avviso, è un problema, e un errore nella libreria di Gambas; per cui tocca stare attenti all'utilizzo di questa funzionalità. Lo stesso dicasi per la DrawingArea, se questa è di dimensioni ragguardevoli, ed è contenuta in una ScrollArea di dimensioni più piccole; in questo caso, Grab ritornerà un'immagine, comprensiva della parte della ScrollArea che copre la DrawingArea (es. le barre di scorrimento. Se la DrawingArea è più grande della Form stessa in cui è contenuta, l'immagine ritornata comprenderà anche la form stessa e, magari, anche parte del desktop. Attenzione, quindi, all'uso di questa funzione.

Offline ivosperi

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Stampare con gambas
« Risposta #14 il: 22 Gennaio 2009, 15:35:01 »
Grazie per l'esauriente spiegazione.
Io sto tentando di ricrearmi un programmino per stampare le fatture e i ddt.
per fare questo ho bisogno di sapere quante "unità disegno" è grande il mio foglio, credo dia aver risolto con l'opzione draw.W e una semplice proporzione:

PUBLIC SUB Button2_Click()
 DIM hStampa AS Process
 DIM s AS Single                     '**************** VARIABILE DI SCALA
 Printer.File = Application.Path & "/stampa.ps"
 Draw.Begin(Printer)
  s = draw.W / 11350                     '****************** PROPORZIONE

  Draw.Font.Name = "URW Chancery L"
  Draw.Font.Bold = FALSE
  Draw.Font.Italic = FALSE
  Draw.Font.Size = 28
  Draw.Text("EDILSERVICE", 500 * s, 500 * s)
  Draw.LineWidth = 4 '-- spessore
  Draw.Rect(5675 * s, 2280 * s, 5275 * s, 1600 * s)
  Draw.Rect(400 * s, 4180 * s, 10550 * s, 400 * s)
  Draw.Rect(400 * s, 4630 * s, 10550 * s, 400 * s)
  Draw.Rect(400 * s, 5180 * s, 10550 * s, 6600 * s)
  Draw.Line(8450 * s, 5180 * s, 8450 * s, 11780 * s)
  Draw.Rect(400 * s, 11830 * s, 10550 * s, 400 * s)
  Draw.Line(8450 * s, 11830 * s, 8450 * s, 12230 * s)
  Draw.Rect(400 * s, 12380 * s, 10550 * s, 1000 * s)
  Draw.Rect(400 * s, 13430 * s, 10550 * s, 1000 * s)
END SUB

11350 era la larghezza della mia area di stampa printer.ScaleWidth,
il sistema ora sembra funzionare dovrei vedere se cambiando stampante ci possono essere degli errori.
Accetto consigli, in tanto grazie a tutti ciao ivo