From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

NIreport Landscape: bug?

Boungiorno,

ho un problema con NIReport  in Labwindows/CVI 8.1.

 

Se si imposta il report in Landscape e si inserisce una tabella con 7 o più colonne la tabella non viene visualizzata.

 

Temendo qualche errore nel codice ho provato a modificare l'esempio "niconvertsample", in cui viene creato un report a partire da un controllo tabella (che è quello che vorrei fare io...). Ho aggiunto altre tre colonne, ho lanciato il debug, il pulsante "Convert" crea la tabella, e tutto è ok.

 

Ora ho aggiunto la chiamata a NIReport_SetReportAttribute() dopo NIReport_New() per impostare la pagina in landscape. E ottengo quanto sotto

 

            if (NIReport_New (&hreport) < 0) {
                MessagePopup ("ERROR", "Could not initialize NI Reports...");
                return 1;
            }

            NIReport_SetReportAttribute(hreport, NIR_ATTR_ORIENTATION, NIRConst_Landscape);
           
            //Converts the CVI Table into a NI Reports table
            if( NIReport_ConvertCVITable(hreport,panel,PANEL_TABLE)!=NIR_ERR_Success ) {
                MessagePopup("Error","Could not finish table conversion");
                NIReport_Discard(hreport);
                return 1;
            }
 

 se ora lancio il programma al momento di stampare, la funzione NIReport_Print() dura un tempo considerevole e poi stampa la pagina in modo errato.

 

Ho fatto molte prove creando la tabella manualmente (senza usare  NIReport_ConvertCVITable()), ed ho notato che se creo la tabella e non riempio l'ultima colonna funziona, altrimenti no. Il problema è che nel report non posso lasciare una colonna vuota.

 

 

Ho provato anche a ridimensionare le colonne in modo da essere sicuro che la tabella non occupi più spazio della larghezza della pagina. In questo modo la tabella compare nel report, ma rimane uno spazio (di troppo) a destra della tabella.

 

Allego anche il progettino che uso per le prove (in InsertTableInReport() la parte commentata ridimensiona le colonne).

 

 

Ringrazio tutti,

 

Mattia

 

0 Kudos
Messaggio 1 di 4
5.858Visualizzazioni

Non ho capito perchè, ma inserendo una chiamata a GetColWidth e una a SetColWidth ora "parrebbe" funzionare bene.

 

Riporto di seguito

 

        NIReport_TableStart(hreport, C, 1);
       
        //TABLE DIMENSION
        NIReport_SetReportAttribute (hreport, NIR_ATTR_MEASUREMENT_SYSTEM, NIRConst_US);
       
        NIReport_TableGetColWidth(hreport, 1, &colw);
        NIReport_GetReportAttribute(hreport, NIR_ATTR_ORIENTATION, &orientation);
        if(orientation == NIRConst_Landscape)
        {
            //Assumo A4 8.27x11.69 in, 21x29.7 mm
            if((C*colw) > (11.69))
            {
                colw = floor(100*(11.69)/C)/100;
            }
        }
       
        //TABLE PROPERTIES
        NIReport_SetTableAttribute (hreport, NIR_TABLE_ATTR_BORDER_LINE_THICKNESS, 2.0);
        NIReport_SetTableAttribute (hreport, NIR_TABLE_ATTR_HEADER_LINE_THICKNESS, 2.0);
   
   
        //TABLE HEADER
        GetCtrlAttribute (panel, control, ATTR_COLUMN_LABELS_COLOR, &color);
        NIReport_SetTextAttribute (hreport, NIR_TEXT_ATTR_BG_COLOR, color);
        for(c=1; c<=C; c++)
        {
            NIReport_TableSetColWidth(hreport, c, colw);
            GetTableColumnAttribute(panel, control, c, ATTR_LABEL_TEXT, buff);
            NIReport_AppendText(hreport, buff);
            if(c<C)
                NIReport_TableNextCell(hreport);
        }
   

 

Mi rallegro un po' e continuo le prove,anche se mi piacerebbe capirci di più!

 

Saluti,

Mattia

0 Kudos
Messaggio 2 di 4
5.844Visualizzazioni

Ciao Mattia,

sei riuscito a capire quale fosse il problema?

D. Beninato
0 Kudos
Messaggio 3 di 4
5.824Visualizzazioni

Ciao Daniele,

sinceramente non sono riuscito a capirci tanto di più. In seguito ho eliminato anche la parte di codice che ricalcola la larghezza della colonna e ho lasciato solo le due chiamate in grassetto e funziona, riempiendo anche bene la pagina.

 

Ciao e grazie,

Mattia

0 Kudos
Messaggio 4 di 4
5.805Visualizzazioni