sono andrea scanu e utilizzo xojo da qualche anno…
ho preso da questo post il codice per salvare il setup di una stampante per poi impostarla in automatico successivamente…
come si può puo notare è praticamente un copia incolla
Putroppo non mi funziona. Al primo accesso seleziono la stampante desiderata e la stampa viene inoltrata li. Naturalmente salvo le impostazioni su una property.
Al secondo accesso la stampa viene dirottata sulla stampante di default. (il contenuto della property “impostazioni” è correttamente conservato in memoria)
Utilizzo un macbook pro con BigSur ed ho provato sia con xojo 2022 r1.1 ed anche con xojo 2019 r3.2
ma fanno entrambi lo stesso difetto.
Cosa sbaglio?
Qualcuno mi puo dare un aiuto per cortesia?
Grazie
Dim ps As New PrinterSetup
Dim ok As Boolean
Dim g As Graphics
If impostazioni=“” Then
//In setup puoi annullare l’operazione
ok=ps.PageSetupDialog
Else
ok=True
End If
If ok Then
If impostazioni=“” Then
g = OpenPrinterDialog(ps)
If g<>Nil Then
//Hai creato le impostazioni da dialogo le puoi salvare
//saveImpostazioni(ps.SetupString)
impostazioni=ps.SetupString //impostazioni è una property del progettino…
End If
Else
ps.setupString=impostazioni
g=OpenPrinter(ps)
End If
If g<>Nil Then
//Stampa
g.DrawText(“Hello World”, ps.HorizontalResolution, ps.VerticalResolution)
End If
End If
Ciao Andrea, io utilizzo dei file di testo (uno per ogni stampante che devo utilizzare) che contengono le impostazioni delle varie stampanti.
Questi file di testo vengono creati eseguendo il seguente metodo (richiamato da una voce di menù):
WriteSetupString As Boolean
// Salvo le impostazioni della stampante
Dim f As FolderItem
Dim strOut As BinaryStream
Dim ps As New PrinterSetup
f = GetFolderItem("")
#If DebugBuild
f = f.Parent
#EndIf
f = f.Child("PrinterSettings")
f = f.Child("PrinterSettings.txt")
' Se il file non esiste lo creo
If f <> Nil Then
If ps.PageSetupDialog = True Then
Dim g As Graphics
g = OpenPrinterDialog(ps, Nil)
If g <> Nil Then
strOut = BinaryStream.Create(f)
strOut.Write(ps.SetupString)
strOut.Close
Return True
Exit Function
End If
End If
End If
// Errore
Return False
Il file generato si chiama “PrinterSettings.txt” e viene creato nella sottocartella “PrinterSettings”: rinomino il file in base al tipo di stampante (per esempio per una stampante che utilizzo per stampare normagli fogli A4 chiamerò il file “PrinterSettings_A4.txt”).
Quando devo eseguire una stampa su A4, nel metodo che lancia il report inserirò il seguente codice:
Dim ps As New PrinterSetup
' ---------------------------------------------
// carico le impostazioni della stampante
Dim SetupString As String
SetupString = ReadSetupString("PrinterSettings_A4.txt")
If SetupString <> "ERRORE" Then
ps.SetupString = SetupString
End If
' ---------------------------------------------
Il metodo “ReadSetupString” è questo:
ReadSetupString(SettingsFile As String) As String
// carico le impostazioni
Dim f As FolderItem
Dim SetupString As String
'Dim strIn As TextInputStream
Dim strIn As BinaryStream
f = GetFolderItem("")
#If DebugBuild
f = f.Parent
#EndIf
f = f.Child("PrinterSettings")
f = f.Child(SettingsFile)
If f <> Nil Then
If f.Exists Then
strIn = BinaryStream.Open(f, False)
Do
SetupString = SetupString + strIn.Read(255)
Loop Until strIn.EOF
strIn.Close
Return SetupString
Exit Function
End If
End If
// errore
Return "ERRORE"
Siccome utilizzo un mac oggi ho provato il progetto di esempio su una macchina virtuale con windows 2008 e in ambiente windows funziona…
Il progettino a parte la scrittura/lettura su file che non ho implementato (salvo in una properties di tipo stringa) riporta tutte le istruzioni che hai usato tu nel tuo codice.
Che dire… funziona con il sistema operativo Windows ma non in macOS.
In ambiente MacOS ti dà qualche errore? Perchè io ho scritto un paio di progetti per MacOS, e la tecnica che ho indicato funziona (l’unica variante è che i file PrinterSettings.txt non sono in una cartella a sè stante, ma sono nella stessa cartella dell’applicazione, per cui basta
f = GetFolderItem("")
f = f.Child("PrinterSettings_A4.txt")
In ambiente mac non da nessun errore…
Ho provato anche ad usare il codice che avevi messo nel post del 2018 quello in cui Antonio Rinaldi ti aveva instradato per trovare la soluzione al problema, gia in quel codice c’era il salvataggio della stringa (ps.SetupString) di setup in un file. Ma dopo il ripristino dei parametri di setup quando vai in stampa viene usata la stampante di default. (con windows si comporta correttamente)
scusa se non ti ho risposto prima ma ho avuto un weekend tormentato (bricolage estremo e giardinaggio)
Ti premetto che sto usando l’ultima versione di xojo e che ho provato anche con la pui vecchia installata (2019 r3.2).
Come faccio a mandati progetto… sul forum non si può allegare, ti posso mandare una email?