Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Delphi] Aiuto x implementare questo codice

    ciao!
    vi propongo questo indovinello ...

    codice:
    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?!?!?!!?

    ciao e grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    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!?!??!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Nel CD dei Companion Tools di Delphi c'è la documentazione in formato PDF dei RAVE Reports.

    Sul sito di Nevrona Design 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...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    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.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.