PUBLIC SUB stampatabella(oggetto AS Object, intestazione AS String, OPTIONAL dimfont AS Integer)
DIM larghezze AS NEW Integer[]
DIM altezze AS NEW Integer[]
DIM i, I1, TOTALE, bx, by, fw, fh, b, x, y, j AS Integer
DIM testo AS String
DIM temparray AS NEW Integer[]
IF dimfont = NULL OR dimfont = 0 THEN
dimfont = 9
ENDIF
bx = 150
by = 150
fw = 5000
fh = 7000
b = 15
' 'memorizzazione larghezze celle
'
' FOR i = 0 TO oggetto.Columns.Count - 1
' larghezze.Add(oggetto.Columns[i].Width * 6)
' NEXT
'
' 'memorizzazione altezze celle
'
' FOR i = 0 TO oggetto.Rows.Count - 1
' altezze.Add(oggetto.rows[i].h * 6)
' NEXT
' IF oggetto.rows.Count > 0 THEN
'
' Printer.Resolution = avvio.risoluzione
IF Printer.Setup() THEN RETURN
Draw.Begin(Printer)
Draw.Font.Size = dimfont
FOR i1 = 0 TO oggetto.Columns.Count - 1
temparray.Clear
temparray.Add(Draw.TextWidth(oggetto.Columns[i1].title) + 20)
FOR i = 0 TO oggetto.rows.count - 1
temparray.Add(Draw.TextWidth(oggetto[i, i1].Text) + 20)
NEXT
temparray.sort(gb.Ascent)
larghezze.Add(temparray[temparray.Max])
NEXT
'memorizzazione altezze celle
FOR i = 0 TO oggetto.Rows.Count - 1
altezze.Add(oggetto.rows[i].h * 6)
NEXT
IF oggetto.rows.Count > 0 THEN
WAIT
Printer.Resolution = avvio.risoluzione
FOR i = 0 TO larghezze.Max
totale = larghezze[i] + totale
NEXT
totale = totale + 300
IF totale > Printer.Width THEN
Printer.Orientation = 1
fh = 5000
fw = 7000
ELSE
Printer.Orientation = 0
fh = 7000
fw = 5000
ENDIF
'disegno bordo pagina
' Draw.Rect(bx, by, fw - bx * 2, fh - by * 2)
'disegno intestazione
Draw.ForeColor = Color.Black
Draw.Font.Size = dimfont * 2
x = bx
y = by + b
Draw.Text(intestazione, x, y, fw, Draw.TextHeight(intestazione), 3)
y = y + Draw.TextHeight(intestazione) + b * 3
x = bx + b
Draw.Font.Size = dimfont
'disegnointestazione tabella
FOR i = 0 TO larghezze.Max
Draw.FillColor = 13024767
Draw.FillStyle = 1
Draw.Rect(x, y, larghezze[i], altezze[0] * 2)
Draw.FillStyle = 0
x = x + b
Draw.Text(oggetto.Columns[i].Title, x, y, larghezze[i], altezze[0] * 2, 1)
x = x + larghezze[i] - b
NEXT
y = y + altezze[0] * 2
'disegno celle
FOR i = 0 TO altezze.Max
x = bx + b
FOR j = 0 TO larghezze.Max
Draw.Rect(x, y, larghezze[j], altezze[i])
x = x + b
Draw.Text(oggetto[i, j].Text, x, y, larghezze[j], altezze[i], 1)
x = x + larghezze[j] - b
NEXT
y = y + altezze[i]
IF y > fh - by * 2 - altezze[i] THEN ' cambio pagina
Printer.NewPage()
'Draw.Rect(bx, by, fw - bx * 2, fh - by * 2)
y = by + b * 3
ENDIF
NEXT
TRY Draw.Font.Size = dimfont - 1
testo = "Gesthotel Ver. " & Application.Version & " " & ("Report di stampa") & ", Powered By fsurfing"
Draw.Text(testo, fw - Draw.TextWidth(testo) - bx, fh - Draw.TextHeight(testo) - by)
Draw.End
ELSE
Message.Info(("la tabella non contiene nessun elemento") & "!", "OK")
ENDIF
END
ma detta versione è valida per G3, G2 o entrambeMi sembra che non vada bene per g3, per G3 prova questo http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1964.0;attach=1869 (http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1964.0;attach=1869), trovi anche vari esempi fatti da md, dex e io.
PdfWriter permette di stampare nel formato A5?Si, in tutti i formati, adirittura (lo trovi in un'altra discussione) puoi mettere mano alla classe e crearti un formato personalizzato, naturalmente, verticale e orrizontale.
Ho capito: ho risposto troppo presto; avrei dovuto leggere piu a fondo il wiki :-[ , però devo anche dirti che utilizzo ancora oggi G2. Comunque non ho ancora deciso se impiegare nel mio programma PdfWriter.Citazionema detta versione è valida per G3, G2 o entrambeMi sembra che non vada bene per g3, per G3 prova questo (http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1964.0;attach=1869), trovi anche vari esempi fatti da md, dex e io.
PUBLIC SUB stampatabella(oggetto AS Object, intestazione AS String, OPTIONAL dimfont AS Integer)
PdfWriter o printer? E' un bel problema. Ho riletto la guida al PdfWriter del wiki, ma non ho trovato alcun riferimento circa la sua esclusiva compatibilità con G2. Dovendo gestire un documento di stampa nell'ambiaente G2, mi pare di capire, che è indifferente utilizzare l'una o l'altra funzione, ma in ambiente G3, visto che PdfWriter è nato sotto G2, potrebbe non funzionare, perciò sembrerebbe più pratico l'uso di printer. Con esso infatti l'evoluzione verso G3 sarebbe meno dolorosa.PdfWriter per G2 lo trovi in questa discussione http://www.gambas-it.org/smf/index.php?topic=1056.0 (http://www.gambas-it.org/smf/index.php?topic=1056.0)
con pdfwriter teoricamente il lavoro potrebbe essere più semplice (io ad esempio trovo più semplice usare printer perchè mi sono abituato così:) ) o più difficile.E' giusto quello che dice fsurfing, vedi te quello che va più incontro alle tue esigenze o al tuo sistema di programmare, entrambi (almeno credo :-[) possono soddisfare i report più esigenti.
PUBLIC SUB PulSTampaClk_Mio()
DIM DocuMovvGG AS Report1
'---------------------------------
DocuMovvGG = NEW Report1(GridStamp.Object)
END
Unknown symbol 'Object' in class 'Gridview'.
devi passare tutto l' oggetto, overo gridstamp,non gridstamp.object
poi inizi a scorrere con un ciclo la tabella cella per cella e la ricostruisci nel metodo draw
PUBLIC SUB _new(Docum AS Object)
DIM bSwfine AS Boolean
DIM i AS Integer
DIM x AS Integer
DIM y AS Integer
DIM iCol AS Integer
DIM iLarghStmp AS Integer = 5000
DIM iAltStmp AS Integer = 5000
DIM iIntLn AS Integer = 15 ' ampiezza interlinea
DIM iRg AS Integer
DIM iTotRgDocum AS Integer
DIM $Testata AS String
DIM ilarghCol AS NEW Integer[]
DIM iAltRiga AS NEW Integer[]
iTotRgDocum = 0
WHILE bSwfine = FALSE
IF Docum[iTotRgDocum, 1].Text = ""
IF Docum[iTotRgDocum, 2].Text = ""
IF Docum[iTotRgDocum, 3].Text = ""
IF Docum[iTotRgDocum, 4].Text = "" THEN
bSwfine = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
INC iTotRgDocum
WEND
iTotRgDocum -= 1
IF Printer.Setup() THEN RETURN ' permette l'apertura della finestra di dialogo per la scelta dei parametri di stampa
Draw.Begin(PRINTER)
'----------------- Memorizzazione ampiezza celle -------------------------------------------------
ilarghCol.add(Draw.TextWidth(Docum.Columns[0].title))
ilarghCol.add(Draw.TextWidth(Docum.Columns[1].Text))
ilarghCol.add(Draw.TextWidth(Docum.Columns[2].title))
ilarghCol.add(Draw.TextWidth(Docum.Columns[3].title))
ilarghCol.add(Draw.TextWidth(Docum.Columns[4].title))
'----------------------------------------------------------------------------------------------------
FOR i = 0 TO iTotRgDocum
iAltRiga.Add(Docum.rows[i].h * 6)
NEXT
'----------------------- Intestazione ---------------------------------------------------------------------------------
Draw.ForeColor = Color.Black
Draw.Font.Size = 12
x = 150
y = 150
Draw.Text($Testata, x, y, iLarghStmp, Draw.TextHeight($Testata), 3)
y = y + Draw.TextHeight($Testata) + iIntLn * 2 'avanzamento carta di 2 interlinee
x = 150
FOR iCol = 0 TO 4
Draw.Text((Docum.Columns[iCol].title), x, y, ilarghCol[iCol], iAltRiga[iRg])
x = x + ilarghCol[iCol]
NEXT
'-------------------------------------------------------------------------------------------------------------------------
'----------------------- Riga di dettaglio ---------------------------------------------------------------------------------
x = 150
FOR iRg = 0 TO iTotRgDocum
FOR iCol = 0 TO 4
Draw.Text((Docum[iRg, iCol].Text), x, y, ilarghCol[iCol], iAltRiga[iRg])
x = x + ilarghCol[iCol]
NEXT
x = 150
NEXT
'-------------------------------------------------------------------------------------------------------------------------
END
Draw.ForeColor = Color.Black
Draw.Font.Size = 8
x = 100
y = 100
Draw.Text($Testata, x, y, iLarghStmp, Draw.TextHeight($Testata), 3)
printer risolution serve per settare la risoluzione di stampa espressa in dpi , variando questo valore varierà anche la grandezza di ciò che stampi se stampi un rettangolo di 100 x 200 sulla stampa la sua dimensione reale dipenderà dalla risoluzione che usi. quindi ogni valorizzazione devi fare in modo che sia proporzionale alla risoluzione .Mi dispiace darti tanto da fare per spiegarmi la strutturazione di una stampa, ma ancora non riesco a capirne il meccanismo. Pensavo che non fosse assolutamente necessario creare per ciascuna riga di stampa un rettangolo dentro il quale inserire la stringa da stampare, invece, a quanto pare mi sono sbagliato.
se stampi in a5 le dimensioni del foglio cambia riaspetto ai valori che avevo messo io , e naturalment evaria anche in base alla risoluzione.
ad esempio un a4 stampato a 300 dpi avrà circa 16000 punti di larghezza, a 90 dpi ne avrà solamente 4800
naturalmente credo sia corretto usare la risoluzione per definire la qualità di stampa , ma occhio che cambiandola cambia tutta la dimensione della stampa
la proprietà allineamento del testo funziona bene però devi tener presente che si alline in relazione al rettangolo formato dalla larghezza e altezza che inserisci nei due paremetri
non mi sono spiegato bene,Quindi, se ho capito, non ho bisogno di utilizzare istruzioni come Draw.Rect.
non è che devi creare un rettangolo per scriver eun testo, ma se usi l' allineamento devi tenere conto del fatto che la scritta sarà allineata al rettangolo "virtuale" che inizia in x ,y con larghetta w w altezza h.
draw.text(testo,x,y,w,h,align)
naturalmente poi puoi anche non utilizzare l' allineamento per cui sarà:
draw.text(testo,x,y)
il testo inizierà alle coordinate x,y
in g2 non puoi dal form di setup definire la qualità di stampa, mi sembra però superflua questa funzione nella stampa di report
se invece vuoi implementarla dai la possibilità di scegliere tre o più valori di risoluzione
PUBLIC SUB _new()
DIM iDimCrt AS Integer
DIM iDPI AS Integer ' DPI(dots per inch) = punti per pollice
DIM x AS Integer
DIM y AS Integer
DIM $Testata AS String
IF Printer.Setup() THEN RETURN ' permette l'apertura della finestra di dialogo per la scelta dei parametri di stampa
Draw.Begin(PRINTER)
iDPI = Draw.W
SELECT CASE iDPI
CASE 4958 'Formato Pagina = A4
iDimCrt = 12
CASE 3500 'Formato Pagina = A5
iDimCrt = 8
END SELECT
x = 80
y = 80
$Testata = "@****** Questo titolo è una testata di documento ******@"
Draw.Font.Size = iDimCrt
Draw.Text($Testata, x, y, iDPI, 80, 3)
Draw.End
END
PUBLIC SUB _new()
DIM iDimCrt AS Integer
DIM iDPI AS Integer ' DPI(dots per inch) = punti per pollice
dim Wt as integer
DIM x AS Integer
DIM y AS Integer
DIM $Testata AS String
IF Printer.Setup() THEN RETURN ' permette l'apertura della finestra di dialogo per la scelta dei parametri di stampa
Draw.Begin(PRINTER)
wt = Draw.W
SELECT CASE printer.size
CASE "A4" 'Formato Pagina = A4
iDimCrt = 12
CASE "A5" 'Formato Pagina = A5
iDimCrt = 8
END SELECT
x = 80
y = 80
$Testata = "@****** Questo titolo è una testata di documento ******@"
Draw.Font.Size = iDimCrt
Draw.Text($Testata, x, y, wt, 80, 3)
Draw.End
END
draw.rec serve per disegnare un rettangolo, quindi si usa quando si vuole disegnare un rettangolo
Draw.Text($TabTesto[i], x, y, iLarghTst, ihCrt, 4) ' 4 --> Allineamenmto "justify"
Non mi riesce però la stampa con allineamento justify, infatti
funziona tale e quale l'allineamento con codice "1"(a sx). Cosa mi consigli per raggiungere l'obiettivo?
:ciao:
Hai provato con .RichText ?Cobn .RichText la stampa non è più leggibile; infatti una riga di stampa viene segmentata ed alla fine della stampa tali segmenti risultano sovrapposti, come se fossero stmapati sempre sulla stesasa colonna. Probabilmente ciò dipende dal fatto che il la funzione RichText si traduce in Gambas in una stringa che usa un sottoinsieme del formato HTML che ha una sua propria gestione di scrittura carattere, per mezzo di marcatori suoi propri, vedi qui (http://gambasdoc.org/help/comp/gb.qt/draw/richtext?it) e qui (http://gambasdoc.org/help/def/richtext?it).
Cobn .RichText la stampa non è più leggibile;
Può darsi che il problema si verifichi in G2 e non in G3. É così?
:ciao:
Paint.DrawRichText("Si potrebbe andare tutti quanti allo zoo comunale. Vengo anch'io. No, tu no ! Per vedere come stanno le bestie feroci...", 200, 100, 300, 100, 4)
Paint.DrawRichText("Si potrebbe andare tutti quanti allo zoo comunale. Vengo anch'io. No, tu no ! Per vedere come stanno le bestie feroci...", 200, 100, 300, 100, align.justify)
Font["Bitstream, iDimCrt, bold"]
Draw.Text($Testata, x, y, iLarghRg, ihCrt, 3)
draw.font.name="arial"
draw.font.size=20
ecc ecc
draw.Font = Font["Arial, 12, bold"]
il font che vuoi usare deve essere presente nel tuo sisitemaCosa intendi per presente nel sistema?
il codice per usarlo deve essere scritto dopo il draw.beginEd io infatti ho copiato ;D
io solitamente utilizzo:
draw.font.name="arial"
draw.font.size=20
Draw.Begin(PRINTER)
Draw.Font = Font["Bitstream Charter"]
SELECT CASE printer.size
CASE "A4" 'Formato Pagina = A4 (--> 4958 dpi)
iDimSetCrt = 12
iHRgSt = 100 'Altezza riga
iPosYMax = 6800 'Altezza pagina --> 7017 dpi
CASE "A5" 'Formato Pagina = A5 (3500 dpi)
iDimSetCrt = 8
iHRgSt = 70 'Altezza riga
iPosYMax = 4700 'Altezza pagina --> 4958 dpi
END SELECT
Draw.Font.Name = "Bitstream Charter"
Draw.Font.Bold = TRUE
Draw.Font.Italic = FALSE
Draw.Font.Size = iDimSetCrt
per disegnare i rettangoli non dovresti avere problemi tanto più che x, y ,w e h sono le stesse del testoEppure oggi ho impiegato quasii tutto il pomeriggio per cercare di stampare il testo dentro il proprio rettangolo e non ci sono riuscito; il testo viene stampato sempre a cavallo della lienea di base del rettangolo. Purtroppo non riesco a capire dove sbaglio e, di conseguenza, come coprreggere l'errore.
Draw.Rect(x, y, w, h)
Draw.Text("pippo", x, y, w, h, 3)
Si, in effetti c'era qualcosa che non andava; purtroppo non me n'ero accorto. Solo che quel "3" posto come ultimo parametro del comando draw.text si riferisce ad un allineamento centrato in orizzontale e non, anche in verticale. L'avevo già provato, ma per l'insistenza di un errore non visto non riuscivo ad ottenere il risultato desiderato. Col tuo esempio mi hai costretto a riguardare con maggiore attenzione il passo di programma e, finalmente l'errore è saltato agli occhi.Codice: [Seleziona]così stampi un testo inserito al centro di un rettangolo, se non ti viene così è perchè nelò codice hai modificato i valori x o y o h tra un comando e l' altroDraw.Rect(x, y, w, h)
Draw.Text("pippo", x, y, w, h, 3)
io semplicemente prima di iniziare a stampare controllavo la larghezza del testo di tutte le caselle ,andando quindi a modificare per ogni colonna la larghezza in modo che fosse un pelo + larga della massima larghezza del testo, idem per l' altezza delle celle , per ogni riga controllo il numero di righe che ha ogni cella e quindi di conseguenza aumento l'altezza.Come sempre, ciascuna attuazione dipende da quello che si voglia ottenere. Io non ho necessità di stampare tutto il testo contenuto in ciascuna cella della pseudo griglia di stampa, perciò, qualora il testo ecceda la dimensione della cella, vorrei non andare a scrivere nell'area riservata alla cella immediatamente seguente della stessa riga di stampa. l'istruzione relativa
Draw.Text(Docum[i, j].Text), iX, iY, ilarghCol[j], iAltRg * 2, 1)
testo=Docum[i, j].Text
L= draw.textwhith(testo) ' questa funzione ritorna la larghezza occupata da un testo nella stampa
while L>ilarghCol[j]
testo=left(testo,len(testo)-1)
L= draw.textwhith(testo)
wend
Draw.Text(testo), iX, iY, ilarghCol[j], iAltRg * 2, 1)
SELECT CASE j
CASE 1 '.......................... j contiene 1 quando punta al 2^ colonna della griglia di stampa
$StriStmp = Left(Docum[i, j].Text)
IF $StriStmp = "=" THEN
$StriStmp = Left(Docum[i, j].Text, 29)
ELSE
IF $StriStmp = "#" THEN
$StriStmp = Left(Docum[i, j].Text, 33)
ELSE
------------ bla ----- bla ----- bla ---------------------------------
END SELECT
Draw.Text($StriStmp, iX, iY, ilarghCol[j], iAltRg * 2, 1)
------------ bla ----- bla ----- bla ---------------------------------
per la preselezione in a5 , basta che dopo il codice che richiama la configurazione della stampante che inserisci:Ritengo che l'istruzione a cui ti riferisci sia:
printer.size="A5"
Draw.Begin(PRINTER)
Draw.Begin(PRINTER)
Printer.Size = "A5"
vabbe ma poi stampa in a5 perchè il codice è dopo la finestra di configurazioneNo, purtroppo non tiene conto; non capisco perchè, ma sul display della stampante compare il messaggio "Carta non corrisponde".Probabilmente tale parametro andrebbe impostato all'interno del comando Draw.Begin(PRINTER).
Se parliamo di Gambas3, basta che vai nella cartella del progetto, e poi in ".src" (cartella nascosta), e lì copiarci i sorgenti della libreria. Questo a meno che tu non abbia costruito una qualche albreatura di cartelle all'interno del progetto; nel qual caso cerca quella adatta a contenere la suddetta libreria.No, io sono ancora ancorato :) a G2.
Ancora più semplice...Sarà facile, ma non ho capito. :-\ Quando dici Copy la libreria, intendi la directory "PdfWriter-0.0.4" con tutto il suo contenuto di file siano essi .png, jpg, .form, ,clas, ...? Te lo chiedo pechè ho eseguito copy dei soli file PdfWriter.class, PdfWriterFont.class, PdfTest.class, ma all'avvio ricevo una segnalazione di errore per il mancato riconoscimento della classe "Compress", relativamente alla riga
Copy la libreria nella cartella del progetto in G2... :D
Se hai già avviato l'IDE di Gambas, basta che fai un Refresh (dal menu) e ti si visualizzano i sorgenti...
DIM cmp AS NEW Compress
DocuPdf = NEW Reportpdf("Portrait", "mm", "A5")
Però non ho capito come passare la stringa con l'intestazione di pagina e la griglia contenente i dati da stampare. Che?!?
' Gambas class file
Inherits PdfWriter
Public MyRS As Result
Public Sub Header()
Me.SetFont("Arial", "BI", 20)
Me.Cell(160, 6, "Rubrica Clienti", False, 0, "L", False)
End
Public Function Footer()
Me.SetY(-15)
Me.SetFont("Arial", "I", 8)
Me.Cell(190, 6, "Pag. " & Me.PageNo() & " di {nb}", False, 0, "C", False)
End
Public Function Data()
Dim sql As String
Me.AddPage()
Me.SetFillColor(192, 192, 192)
Me.SetLineWidth(0.2)
Me.Line(10, 17, 200, 17)
Me.SetLineWidth(0.1)
Me.SetX(0)
Me.SetY(20)
Me.Ln()
sql = "select * from clienti"
MyRS = avvio.$myconn.Exec(sql)
Me.SetFont("Arial", "", 8)
Me.Cell(45, 5, "Cliente", True, 0, "C", False)
Me.Cell(85, 5, "Indirizzo", True, 0, "C", False)
Me.Cell(30, 5, "Telefono", True, 0, "C", False)
Me.Cell(30, 5, "Telefono 2", True, 0, "C", False)
Me.Ln()
Me.SetFont("Arial", "", 12)
If MyRS.Available = True Then
For Each MyRS
Me.Cell(45, 6, MyRS!cognome & " " & MyRS!nome, True, 0, "L", False)
Me.Cell(85, 6, MyRS!indirizzo & " " & MyRS!citta & " (" & MyRS!provincia & ")", True, 0, "L", False)
Me.Cell(30, 6, MyRS!telefono, True, 0, "L", False)
Me.Cell(30, 6, MyRS!telefono2, True, 0, "L", False)
Me.Ln()
Next
Endif
End
Dim pdf As clientipdf
Randomize
pdf = New clientipdf("Portrait", "mm", "A4")
pdf.Open()
pdf.AliasNbPages()
pdf.Data
pdf.Output(User.Home & "/miastampa.pdf", False)
Me.Cell(160, 6, fmain.textbox1.text , False, 0, "L", False)
L'altra cosa che non capisco è perchè l'istruzione di chiamata della sottoclasse riporta come ultimo parametro il valore "A4" quando io dovrei fare riferimento al formato "A5"Io ti ho fatto solo un'esempio, puoi usare il formato che vuoi
pdf = New clientipdf("Portrait", "mm", "A5")o ancora
pdf = New clientipdf("Landscape", "mm", "A5")Caso mai se non ti è chiaro prova a postarmi il lavoro che vuoi fare, magari ci capiamo meglio ;)
ME.SetFont("courier", "B", 8)
ME.Cell(10, 5, FMain.Form.GridStmp.Columns[0].Text, TRUE, 1, "C", TRUE)
ME.Cell(10, 35, FMain.GridStmp.Columns[1].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 370, FMain.GridStmp.Columns[2].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 500, FMain.GridStmp.Columns[3].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 580, FMain.GridStmp.Columns[4].text, TRUE, 1, "C", TRUE)
ME.Ln()
Allora ....
Ho modificato le istruzioni dielle sottoclassi Header e Data di Pdfwriter, per ottenere il file pdf coi dati della gridview compilata in FMain.class ed inserita in Fmain.Form. Ho incontrato, fin ad ora, due difficoltà: non è riconosciuto il font"Bitstream Charter" e l'ho momentaneamente sostituito con "courier". La sottoclasse header non da problemi, mentre, nella sosstoclasse Data non riesco a puntare le righe di della gridview; infatti già nella prima riga di estrazione della testata di ciascuna colonna ricevo il messaggio di "sconosciuto". Il gruppo di istruzioni è:
'--------------------------- Prepara riga di testa della griglia -----------------------------------------Codice: gambas [Seleziona]ME.SetFont("courier", "B", 8)
ME.Cell(10, 5, FMain.Form.GridStmp.Columns[0].Text, TRUE, 1, "C", TRUE)
ME.Cell(10, 35, FMain.GridStmp.Columns[1].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 370, FMain.GridStmp.Columns[2].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 500, FMain.GridStmp.Columns[3].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 580, FMain.GridStmp.Columns[4].text, TRUE, 1, "C", TRUE)
ME.Ln()
Alla riga n.2 ricevo la segnalazione unknown sYmbol 'Form' in class 'Fmain'
mentre, se la riscrivo come la riga n.3, mi viene segnalato unknown sYmbol 'GridStmp' in class 'Fmain'
Purtroppo non ho trovato nemmeno un riferimento simile nel link che mi hai suggerito nella tua ultima risposta e non ho capito come devo scrivere. ???
:(
PUBLIC GriStampMov AS Object
-------- bla bla bla -----------------
GriStampMov = GridStmp
iTRgStampa = iRgGriStamp 'ultima riga di dettaglio
RANDOMIZE
pdf = NEW Reportpdf("Portrait", "mm", "A5")
pdf.Open()
pdf.AliasNbPages()
pdf.Data
pdf.Output(User.Home & "/ContFamStampe", FALSE)
-------- bla bla bla -----------------
PUBLIC FUNCTION Data() 'corpo di una pagina
DIM i AS Integer
DIM iTotRg AS Integer
'---------------------------------------------------------
ME.AddPage()
ME.SetFillColor(192, 192, 192)
ME.SetLineWidth(0.2)
ME.Line(10, 10, 200, 10)
ME.SetLineWidth(0.1)
ME.SetX(0)
ME.SetY(50)
ME.Ln()
'--------------------------- Prepara riga di testa della griglia -----------------------------------------
ME.SetFont("courier", "B", 8)
ME.Cell(10, 35, FMain.GriStampMov.Columns[1].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 370, FMain.GriStampMov.Columns[2].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 500, FMain.GriStampMov.Columns[3].text, TRUE, 1, "C", TRUE)
ME.Cell(10, 580, FMain.GriStampMov.Columns[4].text, TRUE, 1, "C", TRUE)
ME.Ln()
'-----------------
'--------------------------- Prepara righe di dettaglio della griglia -----------------------------------------
ME.SetFont("courier", "", 8)
iTotRg = FMain.iTRgStampa
FOR i = 1 TO iTotRg
ME.Cell(10, 5, FMain.GriStampMov[i, 0].text, TRUE, 1, "R", TRUE)
ME.Cell(10, 35, FMain.GriStampMov[i, 1].text, TRUE, 1, "L", TRUE)
ME.Cell(10, 370, FMain.GriStampMov[i, 1].text, TRUE, 1, "L", TRUE)
ME.Cell(10, 500, FMain.GriStampMov[i, 2].text, TRUE, 1, "R", TRUE)
ME.Cell(10, 580, FMain.GriStampMov[i, 3].text, TRUE, 1, "R", TRUE)
ME.Ln()
NEXT
END
ME.Line(0, 7, 150, 7)
Me.SetLeftMargin(0)sinceramente non l'ho mai provato :-[
$StriMia = FMain.GriStampMov[i, 1].text
ilun = ME.GetStringWidth($StriMia)
WHILE iLun > 71
ill = Len($StriMia)
$Strimia = Left($StriMia, ill - 1)
ilun = ME.GetStringWidth($StriMia)
WEND
ME.Cell(72, 4, $StriMia, TRUE, 0, "L", FALSE)
PS: potreste indicarmi una tabella di colori e valori per usare bene il comando "SetTextColor"?Tipo questa? http://it.wikipedia.org/wiki/Lista_dei_colori (http://it.wikipedia.org/wiki/Lista_dei_colori)
Tipo questa? http://it.wikipedia.org/wiki/Lista_dei_colori (http://it.wikipedia.org/wiki/Lista_dei_colori)
CitazionePS: potreste indicarmi una tabella di colori e valori per usare bene il comando "SetTextColor"?Tipo questa? http://it.wikipedia.org/wiki/Lista_dei_colori (http://it.wikipedia.org/wiki/Lista_dei_colori)
OppureHo provato ad eseguirlo, ma ho ricevuto la segnalazione di errore "Non è un programma scritto in Gambas2. É forse scritto in G3?
puoi usare il programmino in allegato che scrisse la mia compagna per mostrare ai miei allievi fotografi lo spettro dei colori
non è un gran ché ma riporta il valore esadecimale e decimale di tutti i colori dello spettro rgb standard
@ Alcresio:CitazioneOppureHo provato ad eseguirlo, ma ho ricevuto la segnalazione di errore "Non è un programma scritto in Gambas2. É forse scritto in G3?
puoi usare il programmino in allegato che scrisse la mia compagna per mostrare ai miei allievi fotografi lo spettro dei colori
non è un gran ché ma riporta il valore esadecimale e decimale di tutti i colori dello spettro rgb standard
Ora mi resta solo di capire come stampare il file appena salvato
Dim hStampa As Process
hStampa = Shell ("lpr " & Myfilepdf)
Ho provato ad eseguirlo, ma ho ricevuto la segnalazione di errore "Non è un programma scritto in Gambas2. É forse scritto in G3?Si, è stato convertito in GB3... non credo di avere la versione in gb2, ho deciso di migrare al 3 senza rimpianti (spero)!
Ma che aspetti a passare a g3? ;)
Perchè, per quello che ho capito, è una procedura assai laboriosa che richiede anche una buona conoscenzaTrova in rete le istruzioni per farlo!
scarica Gambas3 da quìhttp://sourceforge.net/projects/gambas/files/gambas3/gambas3-3.0.0.tar.bz2/download..pensi cha ne capisca qualcosa? ;D
poi da terminale
cd /usr/src
sudo tar xvfj /home/.../Sacaricati/gambas3-3.0.0.tar.bz2
cd /usr/src/gambas3-3.0.0
./reconf-all
sudo ./configure -C
sudo make
sudo make install
ed io non sono assolutamante all'altezza.ma non sei tu lo stesso che...
Golia: Fedora non è Ubuntu. Sorriso Voglio dire ... le procedure non sono uguali.Questo lo so :)
yum groupinstall "Development Tools" "Development Libraries"e poi
# yum install cairo-devel libsqlite3x-devel sqlite2-devel gtk2-devel gtkglext-devel imlib2-devel librsvg2-devel poppler-devel qt-devel libv4l-devel SDL-devel SDL_sound-devel SDL_ttf-devel SDL_net-devel SDL_mixer-devel SDL_image-devel SDL_gfx-devel SDL_Pango-devel firebird-libfbclient unixODBC-devel postgresql-devel libXtst-devel mysql-devel pcre-devel mesa-libGLU-devel mesa-libGLw-devel mesa-libGL-devel glew-devel firebird-devel dbus-devel libzip libzip-devel bzip2-devel libcurl-devel qt-webkit-devel libxml2-develper la stabile :
hStampa = SHELL ("lpr " & User.home & "/ContFamStampe")
PUBLIC SUB PulSTampaClk_Mio()
------- bla ------ bla ------- bla
pdf = NEW Repo03pdf("Portrait", "mm", "A5")
pdf.Open()
pdf.AliasNbPages()
pdf.Data
pdf.Output(User.Home & "/ContFamStampe", FALSE)
hStampa = SHELL ("lpr " & User.home & "/ContFamStampe")
END
PUBLIC SUB _new(OPTIONAL orientation AS String = "P", OPTIONAL unit AS String = "mm", OPTIONAL form AS String = "A5")
------- bla ------ bla ------- bla
Dentro PdfWriterQuesto non dovrebbe servire, scegli già il formato con pdf = NEW Repo03pdf("Portrait", "mm", "A5").
Codice:
PUBLIC SUB _new(OPTIONAL orientation AS String = "P", OPTIONAL unit AS String = "mm", OPTIONAL form AS String = "A5")
------- bla ------ bla ------- bla
Case "a5", sotto vedi ci sono dei parametri, prova a cambiarli, anche se credo però MD non abbia sbagliato.
CiaoSi. L'ho fatto sempre con Evince e, al primo avvio (la prima volta dopo avere acceso il pc) la finestra di impostazione stampa mi fornisce come preimpostazione il formato A4.
Hai provato aprire il file con un lettore documenti e inviare la stampa da la, controllando il formato? tanto per vedere se pdfwriter fa il suo dovere e che il problema non sia l'invio alla stampante.
noltre, a prescindere da come si comporti PDfWriter, il comando "lpr" dovrebbe contenere un parametro di scelta del formato. Ebbene, io non sono riuscito a trovarlo.
NAMEIn pratica non è riportato l'elenco dei valori possibili per -o option[=value]
lpr - print files
SYNOPSIS
lpr [ -E ] [ -H server[:port] ] [ -U username ] [ -P destina‐
tion[/instance] ] [ -# num-copies [ -h ] [ -l ] [ -m ] [ -o
option[=value] ] [ -p] [ -q ] [ -r ] [ -C/J/T title ] [ file(s) ]
OPTIONS
The following options are recognized by lpr:
-o option[=value]
Sets a job option.
In pratica non è riportato l'elenco dei valori possibili per -o option[=value]
Mi potresti indicare dove posso reperire le informazioni necessarie?
pdf = New Stclienti("Portrait", "mm", "A5")Ho solo cambiato il formato, e il file creato mi sembra corretto,
hStampa = SHELL ("evince " & User.home & "/ContFamStampe")dimenticavo di dirti di controllare la misura delle celle in orrizontale, ad esempio in a4 io non supero i 190 mm, così:
Una soluzione potrebbe essere aprire il file direttamente con evince invece che mandarlo in stampa con lprEvince produce però un'anteprima che a me non serve, perchè l'anteprima è rappresentata dalla griglia già visibile in uno specifico Form dove sono situati anche due pulsanti, uno per l'uscita senza stampa e l'altro per dare corso alla stampa.CitazionehStampa = SHELL ("evince " & User.home & "/ContFamStampe")dimenticavo di dirti di controllare la misura delle celle in orrizontale, ad esempio in a4 io non supero i 190 mm, così:
Me.Cell(45, 5, "Cliente", True, 0, "C", False)
Me.Cell(85, 5, "Indirizzo", True, 0, "C", False)
Me.Cell(30, 5, "Telefono", True, 0, "C", False)
Me.Cell(30, 5, "Telefono 2", True, 0, "C", False)
Me.Ln()
in a5 dovrebbero essere in teoria 145
hStampa = SHELL ("lpr -o media=A5 " & User.home & "/ContFamStampe")
$ svn checkout https://gambas.svn.sourceforge.net/svnroot/gambas/gambas/trunk/