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.
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.
in data 08-17-2009 06:10 AM
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
in data 08-17-2009 09:11 AM
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
in data 08-20-2009 04:18 AM
Ciao Mattia,
sei riuscito a capire quale fosse il problema?
in data 08-25-2009 06:04 AM
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