Come serializzare le impostazioni di stampa

martedì 30 ottobre 2007 - 16.38

forumQuarz Profilo | Junior Member

Allora, la questione è la seguente:

Dovrei "salvare" le impostazioni di stampa.

IL PROBLEMA E' CHE UNA VOLTA FUNZIONA E UNA NO?????
MA XCHE'?????

io programmo in C#, ma per gli sviluppatori in VB ecco un link che fa le traduzioni : http://www.carlosag.net/tools/codetranslator/default.aspx

Il codice è il seguente:

Allora la logica è la seguente:
per salvare le impostazioni della classe PrinterSettings in un file, e quindi poter leggere e ricostruire la struttura DEVMODE faccio cosi:

SALVATAGGIO DELLE IMPOSTAZIONI
Gethdevmode
per ottenere un Intptr che punta alla memoria dove sono contienuti i dati
DevMode;

Copio questi dati in una matrice di byte(un array di byte)

Salvo su file questo arrey


private void setImpostazioniStampa()
{
//Salvataggio della struttura stamp. utente
//recupero la struttura del devmode che tiene le info del device
System.IntPtr puntMem_PrintDialog =
printDialog.PrinterSettings.GetHdevmode();

//calcola la quantita di byte a cui si punta
int size_puntMem_PrintDialog = GlobalSize(puntMem_PrintDialog);

byte[] array_puntMem_PrintDialog =
new byte[size_puntMem_PrintDialog];

//copio nell'arrey i dati devMode
Marshal.Copy(puntMem_PrintDialog, array_puntMem_PrintDialog,
0, size_puntMem_PrintDialog);

Bean.setArrayDEVMODE_PrintDialog(array_puntMem_PrintDialog);

//Libera la memoria precedentemente allocata dalla memoria non gestita
Marshal.FreeHGlobal(puntMem_PrintDialog);
}



RIPRISTINO DELLE IMPOSTAZIONI
Recupero l'array di byte

AllocHGlobal(size)
alloco la quantita di memoria che mi serve.
Mi restituisce anche l'indirizzo di memoria che ho allocato


Copio l'array di byte



private void getImpostazioniStampa()
{
System.IntPtr puntMem_PrintDialog =
printDialog.PrinterSettings.GetHdevmode();

Marshal.FreeHGlobal(puntMem_PrintDialog);

byte[] array_puntMem_PrintDialog =
Bean.getArrayDEVMODE_PrintDialog();

printDialog.PrinterSettings = new PrinterSettings();

String nome = Bean.getNomeStampante();

printDialog.PrinterSettings.PrinterName = nome;

puntMem_PrintDialog = Marshal.AllocHGlobal
(array_puntMem_PrintDialog.Length);

printDialog.PrinterSettings.SetHdevmode(puntMem_PrintDialog);

Marshal.Copy(array_puntMem_PrintDialog, 0, puntMem_PrintDialog,
array_puntMem_PrintDialog.Length);
Update();
}

Cteniza Profilo | Guru

Magari ti fa comodo questo mio post sul mio blog
http://community.visual-basic.it/lucianob/archive/2007/10/14/20711.aspx

forumQuarz Profilo | Junior Member

Grazie per avermi risposto.

Il fatto è che quando vado a serializzare un printDialog, mi scappa un'eccezione xchè mi dice che printDialog nn ha la sctitta [Serializable] sull'intestazione della classe.
Il fatto è che pur creandomi una classe printDialog_Personalizzata che erediti da printDialog, poi all'interno di printDialog vi sono riferimenti ad altri oggetti che nn sono serializzabili......

La cosa che nn riesco a capire è xche:
quando imposto(le impostaz. stampanti) e salvo su file il lavoro fatto con la mia applicazione, vado poi su impostazioni stampanti, seleziono la stessa stampante e metto impostazioni diverse a quelle impostate dal mio programma.
Vado a riaprire il file e.........random una volta funziona e una no.

Ora (correggimi ti prego se sbaglio) ho letto che le impostazioni di una stampante stanno in una struttura DEVMODE. Ci so arrivare e recuperare questa struttura.
Ma xchè funziona random??? se avessi scritto put....nate, la cosa dovrebbe nn funzionare...sempre!!!!!

Ma cosa si deve fare per salvare su file le impostazioni della stampante?????


Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5