PDA

Visualizza la versione completa : [Delphi] Aiuto x implementare questo codice


Lyll0
17-12-2003, 21:08
ciao!
vi propongo questo indovinello ;)...


procedure PrintGrid(sGrid: TStringGrid; sTitle: String);
var
X1, X2 : Integer;
Y1, Y2 : Integer;
TmpI : Integer;
F : Integer;
TR : TRect;
begin
Printer.Title:=sTitle;
Printer.Orientation:=poLandscape;
Printer.BeginDoc;
Printer.Canvas.Pen.Color:=0;
Printer.Canvas.Font.Name:='Tahoma';
Printer.Canvas.Font.Size:=8;
Printer.Canvas.Font.Style:=[fsBold, fsUnderline];
Printer.Canvas.TextOut(0, 100, Printer.Title);
For F:=1 to sGrid.ColCount-1 do begin
X1:=0;
For TmpI:=1 to (F-1) do
X1:=X1+5*(sGrid.ColWidths[TmpI]);
Y1:=300;
X2:=0;
For TmpI:=1 to F do
X2:=X2+5*(sGrid.ColWidths[TmpI]);
Y2:=450;
TR:=Rect(X1, Y1, X2-30, Y2);
Printer.Canvas.Font.Style:=[fsBold];
Printer.Canvas.Font.Size:=7;
Printer.Canvas.TextRect(TR, X1+50, 350, sGrid.Cells[F, 0]);
Printer.Canvas.Font.Style:=[];
For TmpI:=1 to sGrid.RowCount-1 do begin
Y1:=150*TmpI+300;
Y2:=150*(TmpI+1)+300;
TR:=Rect(X1, Y1, X2-30, Y2);
Printer.Canvas.TextRect(TR, X1+50, Y1+50, sGrid.Cells[F, TmpI]);
end;
end;
Printer.EndDoc;
end;


vorrei che le colonne di stampa NON fossero fisse (visto che spesso tagliano il testo) ma vorrei che si autodimensionassero in base al testo...
o almeno farle un pò più larghette ;)
e un'altra cosa.. come diavolo è che NON mi stampa mai la prima colonna?!?!?!!? :dhò: :dhò:

ciao e grazie

alka
18-12-2003, 01:27
Stampare scrivendo direttamente sul Canvas della stampante può essere un'operazione lunga e laboriosa?
Non hai dato una sbirciata ai tool di reporting, freeware e commerciali, disponibili per Delphi?

Non ricordo quale versione hai (4, 5, 6, 7... Personal, Professional, ecc.), ma ad esempio usando i RAVE Reports della Nevrona Design, inclusi in Delphi 7 dalla Professional in su, si possono creare facilmente dei report disegnandoli con un comodo, anche se giovane e con qualche difetto, designer di report rendendolo capace di prelevare i dati da una struttura in memoria quale può essere un record Pascal, array, liste di stringhe, griglie, ecc. attraverso appositi componenti TRvXXXConnection che fanno da tramite tra l'applicazione e il report.

P.S.: la prima colonna non viene stampata poichè inizi il ciclo da 1 invece che da 0; pensaci bene...perchè allora dovresti fermarti a NCOLONNE - 1?

Ciao! :ciauz:

Lyll0
18-12-2003, 21:53
intanto grazie per il discorso colonna...


poi riguardo ai report...
che bello non sapevo neppure di avere questo bel tab nel programma...
solo che come diavolo di usano!?!??! :dhò:

alka
18-12-2003, 23:09
Nel CD dei Companion Tools di Delphi c'è la documentazione in formato PDF dei RAVE Reports.

Sul sito di Nevrona Design (http://www.nevrona.com) si trovano esempi e altri suggerimenti a riguardo.

In generale, il componente TRvProject consente di caricare un progetto di reporting realizzato con il Rave Designer.
Il progetto può essere immagazzinato all'interno del componente (viene poi salvato nel DFM) oppure caricato da file, anche a runtime. Il Rave Designer permette di progettare il layout del report (ne può contenere diversi tutti selezionabili e stampabili).

I componenti RvXXXConnection permettono di instaurare connessioni con tabelle di database o, nel caso di RvCustomConnection, rispondere ad una serie di eventi che vengono generati dal report per conoscere le righe e le colonne della "base dati virtuale" che si desidera stampare, qualora questa non sia contenuta in un database ma bensì in una struttura dati più complessa come classi, record, controlli visuali o altro.
Quando il progetto Delphi è aperto, si può fare doppio clic sul RvProject per aprire il Designer e introdurre nel report le Direct Data View (Data Objects) che altro non sono che la rappresentazione nel tool di designing delle connessioni create su Delphi tramite i suddetti componenti.

La Guida in linea è sempre un buon riferimento per ottenere informazioni valide sulle singole proprietà dei componenti e sui componenti stessi.

I componenti TRvRenderXXX infine permettono di reindirizzare le stampe esportando i dati in formato testo, RTF e PDF, oppure di visualizzarlo in una finestra di anteprima, sebbene alcune di queste funzionalità siano selezionabili anche dalla finestra di dialogo che appare quando si manda in stampa un record.

Si potrebbe scrivere un libro su questi componenti, quindi non mi dilungo oltre. Fai qualche esperimento... :ciauz:

Lyll0
18-12-2003, 23:53
per stavolta ho ovviato con un bel report che esporta il testo della stringa in formato HTML... che tra l'altro mi piace pure come idea.

per il futuro getterò un occhio.

grazie e ciao.

Loading