//////////////////////////////////////////////////////////////////// // ESEMPIO di UTILIZZO DELLA CLASSE FGIntesta e FGPrint // Created by Francesco Germinara on Wed Jun 30 2004. // // Copyright (c) 2004 SofTech di F.Germinara - www.germinara.it. All rights reserved. // // For information please contact me at info@germinara.it //////////////////////////////////////////////////////////////////// // History: // // Description: // //////////////////////////////////////////////////////////////////// //1) TRAMITE IB BISOGNA CREARE UNA WINDOW, APPICCICARGLI SOPRA UNA CUSTOM VIEW // E CAMBIARE LA CLASSE IN FGPRINT (che deve quindi essere stata preventivamente importata in IB). // Impostare attributo NASCOSTO ALLA FINESTRA. //2) L'elenco delle righe da stampare nel dettaglio è contenuto in un apposito datasource di tipo // che di chiama FGODBCResultSet che in questo esemoio si chiama printDS /* Nel file .h in pratica ci saranno questi oggetti #import #import "FGODBCResultSet.h" #import "FGBsePrint.h" #import "FGIntesta.h" ... ... //STAMPA IBOutlet FGBsePrint *bsePrint; //Stampa FGIntesta *Intestazione; //Intestazione Tabulato FGODBCResultSet *printDS; //DataSource ... ... */ //Stampa Chiamata Da un Pultante o tramite la connessione al menu Stampa (eliminando quindi quella di default). - (IBAction)btnPrint:(id)sender{ //Ottengo l'oggetto NSPrintInfo che mi serve per impostare le dimensioni della pagina e l'orientamento NSPrintInfo *aPrintInfo; aPrintInfo=[[NSPrintInfo sharedPrintInfo] copy]; //Seleziono Info sul documento NSPageLayout *aPageLayout; aPageLayout=[NSPageLayout pageLayout]; //Imposto le dimensioni del documento da programma [aPrintInfo setPaperName:@"A3"]; [aPrintInfo setOrientation:NSLandscapeOrientation]; //NSLandscapeOrientation o NSPortraitOrientation //[aPageLayout runModalWithPrintInfo:aPrintInfo]; //Dialogo Normale se voglio che sia l'utente a scegliere... oppure //Sheet se voglio che sia l'utente a scegliere... ma devo spostare il codice nella chiamata del delegato didEndSelector... //[aPageLayout beginSheetWithPrintInfo:aPrintInfo modalForWindow:pLogonInfo->mainApp delegate:self didEndSelector:@selector(PageLayoutDidEnd:returnCode:contextInfo:) contextInfo:nil]; //Stampa //bsePrint -> E' stato creato da IB [bsePrint setHidden:FALSE]; //Rendo attiva la vista ... int larghezzaPagina=0; int lunghezzaPagina=0; //Dimensioni in 1/72 di pollice larghezzaPagina = [aPrintInfo paperSize].width; lunghezzaPagina = [aPrintInfo paperSize].height; //Imposto Dimensioni Area di Stampa e Margini [bsePrint setPageInfoLarghezza:larghezzaPagina lunghezza:lunghezzaPagina]; [bsePrint setPageInfoMargineLeft:[aPrintInfo leftMargin] Right:[aPrintInfo rightMargin] Top:[aPrintInfo topMargin] Bottom:[aPrintInfo bottomMargin]]; //Imposto i titoli e le note del tabulato [bsePrint setTitle:@"Gestione Commesse V.2.00 - Rilevazione ore lavoro"]; [bsePrint setTitleDescr:[stsDesUtente stringValue]]; [bsePrint setNote:@"Realizzato dalla SofTech di Germinara Francesco -Pinerolo (TO) - www.germinara.it info@germinara.it "]; //Preparo intestazione dati //Intestazione -> E' stato creato nella init ... // Intestazione=[[FGIntesta alloc]init]; // //________________________________________________________________Date_____________________________________ //|Commessa|Cliente|Descrizione|Prodotto|Stato|01/07|02/07|03/07|04/07|05/07|06/07|07/07|08/07|08/07|10/07| //_________________________________________________________________________________________________________ [Intestazione addItemFieldNameWithString:@"Commessa" withVisLen:0 withVisPrt:0]; [Intestazione addItemFieldNameWithString:@"Cliente" withVisLen:0 withVisPrt:70]; [Intestazione addItemFieldNameWithString:@"Descrizione Cliente" withVisLen:0 withVisPrt:120]; [Intestazione addItemFieldNameWithString:@"Prodotto" withVisLen:0 withVisPrt:220]; [Intestazione addItemFieldNameWithString:@"Progetto" withVisLen:0 withVisPrt:330]; [Intestazione addItemFieldNameWithString:@"" withVisLen:0 withVisPrt:500]; [Intestazione addItemFieldNameWithString:@"Stato" withVisLen:0 withVisPrt:510]; //Creo la tabella con le date dei 10 giorni antecedenti la data odierna da 01/07 a 10/07 int nGiorno=0; FGBseData *dataElbStampa=[[FGBseData alloc] init]; for(nGiorno=1; nGiorno<=10; nGiorno++){ [dataElbStampa DayOffSetFromCurrentDate:nGiorno-10]; if(([[dataElbStampa GetCalendarDate] dayOfWeek]==6)||([[dataElbStampa GetCalendarDate] dayOfWeek]==0)){ NSMutableAttributedString *festivo=[bsePrint createStringTitle:[dataElbStampa DataG] withColorR:0 G:128 B:0 withFont:@"Verdana" size:8.0 bold:NO italic:YES]; [Intestazione addItemFieldName:festivo withVisLen:0 withVisPrt:500+(50*nGiorno)]; [festivo release]; }else [Intestazione addItemFieldNameWithString:[dataElbStampa DataG] withVisLen:0 withVisPrt:500+(50*nGiorno)]; } [dataElbStampa release]; //Imposto intestazione [bsePrint setHeader:Intestazione]; //Imposto il sender in quanto nella stampa verrà richiamata in callback la funzione //-(void)printRow:(int) nRow dell'oggetto sender (che deve fornire i dati dentro l'oggetto Intestazione [bsePrint setTheApp:self]; //Riempio il datasource printDS per la stampa [self SetRowsCausali]; [self SetRowsCommesse]; [self SetRowsTotali]; //A questo punto lo assegno all'oggetto che si occuperà di stamparne il contenuto [bsePrint setDatasource:printDS]; //Creo oggetto NSPrintOperation per mandare in esecuzione la stampa NSPrintOperation *aPrintOperation; aPrintOperation=[NSPrintOperation printOperationWithView:bsePrint printInfo:aPrintInfo]; [aPrintOperation runOperation]; //Avvio La stampa //Chiamo il metodo dell'oggetto FGPrint per rilasciare gli oggetti allocati [bsePrint Free]; //Ripulisco l'oggetto Intestazione per un successivo riutilizzo [Intestazione removeAllObjects]; //Ripulisco l'oggetto datasource della stampa per un successivo riutilizzo [printDS RemoveAllData]; } //FUNZIONE DI CALLBACK che deve essere implementata dalla classe impostata tramite il metodo setTheApp di FGPrint. //Set Data for Print at Specified Row -(void)printRow:(int) nRow{ FGODBCRecord *tmpRecord=nil; tmpRecord=[printDS GetSingleRow:nRow]; [Intestazione setItemFieldValueWithString:[[tmpRecord FieldInfo:@"Commessa"] GetValue] forIndex:0]; [Intestazione setItemFieldValueWithString:[[tmpRecord FieldInfo:@"Cliente"] GetValue] forIndex:1]; [Intestazione setItemFieldValueWithString:[[tmpRecord FieldInfo:@"Descrizione"] GetValue] forIndex:2]; [Intestazione setItemFieldValueWithString:[[tmpRecord FieldInfo:@"Prodotto"] GetValue] forIndex:3]; [Intestazione setItemFieldValueWithString:[[tmpRecord FieldInfo:@"Progetto"] GetValue] forIndex:4]; [Intestazione setItemFieldValueWithString:@"" forIndex:5]; //[Intestazione setItemFieldValueWithString:[[tmpRecord FieldInfo:@"Scadenza"] GetValue] forIndex:5]; [Intestazione setItemFieldValueWithString:[[tmpRecord FieldInfo:@"Stato"] GetValue] forIndex:6]; int nIndex=0; int nStartCol=6; for(nIndex=1; nIndex<=10;nIndex++){ NSMutableString *strNomeCampo; strNomeCampo=[[NSMutableString alloc] initWithString:@"data"]; [strNomeCampo appendFormat:@"%02d",nIndex]; FGODBCFieldInfo *aObjField=[tmpRecord FieldInfo:strNomeCampo]; if(aObjField!=nil) [Intestazione setItemFieldValueWithString:[aObjField GetValue] forIndex:nStartCol+nIndex]; else [Intestazione setItemFieldValueWithString:@"" forIndex:nStartCol+nIndex]; [strNomeCampo release]; } } //Fine esempio.