Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: ivosperi - 17 Gennaio 2009, 13:25:20

Titolo: Stampare con gambas
Inserito da: ivosperi - 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
Titolo: Re: Stampare con gambas
Inserito da: fsurfing - 17 Gennaio 2009, 13:36:27
stampare in gambas è molto semplice segui questo post:

http://www.gambas-it.org/gmbs/modules/newbb/viewtopic.php?topic_id=81&viewmode=flat&order=ASC&type=&mode=0&start=0 (http://www.gambas-it.org/gmbs/modules/newbb/viewtopic.php?topic_id=81&viewmode=flat&order=ASC&type=&mode=0&start=0)
Titolo: Re: Stampare con gambas
Inserito da: ivosperi - 17 Gennaio 2009, 14:05:55
grazie mille ciao ivo
Titolo: Re: Stampare con gambas
Inserito da: ivosperi - 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
Titolo: Re: Stampare con gambas
Inserito da: Picavbg - 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.  ;-)
Titolo: Re: Stampare con gambas
Inserito da: ivosperi - 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
Titolo: Re: Stampare con gambas
Inserito da: Picavbg - 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:
Titolo: Re: Stampare con gambas
Inserito da: leo72 - 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.
Titolo: Re: Stampare con gambas
Inserito da: ivosperi - 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 ?
Titolo: Re: Stampare con gambas
Inserito da: fsurfing - 20 Gennaio 2009, 21:08:10
non vorrei sbagliarmi ma mi pare che la stampa funzioni solo sulle qt
Titolo: Re: Stampare con gambas
Inserito da: leo72 - 20 Gennaio 2009, 23:01:01
Putroppo è così. Ancora lo sviluppo del componente gb.gtk non ha raggiunto il livello di gb.qt.
Titolo: Re: Stampare con gambas
Inserito da: ivosperi - 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
Titolo: Re: Stampare con gambas
Inserito da: fsurfing - 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
Titolo: Re: Stampare con gambas
Inserito da: md9327 - 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.
Titolo: Re: Stampare con gambas
Inserito da: ivosperi - 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
Titolo: Re: Stampare con gambas
Inserito da: md9327 - 23 Gennaio 2009, 00:07:37
Non per fare pubblicità al prodotto, ma tempo fà ho pubblicato un porting di una famosa libreria open per PHP (FPDF) in Gambas (PdfWriter), per creare documenti in PDF.
La cosa era nata appunto, utilizzando Gambas, per costruire moduli di fattura per le mie applicazioni (cosa che non ho più fatto, perchè ho migliorato il mio gestionale in PHP...).
La libreria, oltre ad essere disponibile su sf.net, è anche linkata qui sul sito.

A mio avviso, un pensierino sull'integrazione nella tua applicazione ce lo farei, anche perchè il formato pdf è un formato portabile e conosciuto (io invio le mie fatture ai clienti via email in formato pdf...).

Se il tuo scopo è quello di creare dei modelli di stampa, credo sia la strada migliore; se invece, il tuo indirizzo è quello di gestire la stampa grafica in genere, o di studiare a fondo come funziona la cosa, allora chiudo il discorso.

In un altro mio programma (sempre anche qui pubblicato: pgDesigner), uso la libreria per produrre dei report in pdf; puoi usare la sottoclasse che ho creato appositamente per i report, per capire come funziona la libreria.
Magari poi, per eventuali chiarimenti, sono qui...

Ciao
Titolo: Re: Stampare con gambas
Inserito da: ivosperi - 23 Gennaio 2009, 13:15:14
Grazie avevo visto il post e mi interessa molto ma non credo di avere ancora abbastanza esperienza con gambas e con linux (di preciso non ho ancora capito dove sono i programmi e quali sono i file eseguibili), per ora voglio vedere se sono capace di fare quello che facevo, poi i miglioramenti
grazie Ciao
Titolo: Re: Stampare con gambas
Inserito da: vuott - 14 Gennaio 2012, 17:13:37
Propongo per i futuri lettori anche le seguenti discussioni:
http://www.gambas-it.org/smf/index.php?topic=1348.0 (http://www.gambas-it.org/smf/index.php?topic=1348.0)
http://www.gambas-it.org/smf/index.php?topic=3070.0

e la nostra WIKI:
http://www.gambas-it.org/wiki/index.php?title=Printer
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Stampa