Newsgroup: it.comp.lang.delphi
Titolo: Begindoc oggetto myprinter

Buongiorno,
 
avrei bisogno di sapere se c'ï¿œ qualche anima pia che mi sappia spiegare 
cosa fare quando un oggetto tprinter non riesce a creare la pagina.
Mi spiego meglio....
 
....
try
 
   myprinter.begindoc;
 
except
 
   che codice devo mettere qui per capire il motivo per il quale mi 
printer.begindoc va in errore???
 
end;
 
.....
 
Perchï¿œ la begindoc ogni tanto va in errore diciamo 1 volta su 10 e non 
riesco a capire la causa di questo errore...
 
Grazie, in anticipo, qualsiasi aiuto ï¿œ ben accetto...
 
Grazie....
 
K

Magari metterei qualcosa a monte per capire se ho almeno una stampante.
installata...   Poi, tanto per iniziare io farei cosi:
 
try
  myprinter.begindoc;
 
except
  on E:Exception do
  begin
     Log('exception in begindoc:' + E.Classname + E.Message + ' last win error code:' + IntToStr(GetLastError));
 
end; 
 
 
A.

ok, ma che libreria contiene tali funzioni, perchè mi da una caterva di 
errori di compilazione :D
Io per i log mi ero inventato l'acqua calda facendomi una mia classe :D
 
K
 

 ok, ma che libreria contiene tali funzioni, perchï¿½ mi da una caterva di 
 
Per  GetLastError ti serve la unit Windows.
Per il log delphi non ha niente di nativo.
Ho scritto "log" solo per far capire come gestire l'eccezione
Quindi, non ti 6 inventato l'acqua calda.... :-D
 
A.


Allora ..... il risultato � il seguente:
 
exception in begindoc:EAccessViolationAccess violation at address 
004B226C in module 'K_test_2_1.exe'. Read of address 0000001D last win 
error code:0
 
per� il modulo k_test_2_1.exe � se stesso!
Partendo da questo errore come faccio ad isolare il problema?
Perch� mi sembra di capire che sia un errore di accesso alla memoria, ma 
l'oggetto myprinter esiste e funziona perch� poche righe prima ho 
lanciato le istruzioni canoniche di settaggio myprinter e NON vanno MAI 
in errore.....
 
Esempio di codice:
 
   MyPrinter:=Tprinter.Create;
   MyPrinter.GetPrinter(Device,Driver,Port,DevMode);
   MyPrinter.SetPrinter(Device,Driver,Port,0);
 
   try
          myprinter.BeginDoc;
          myprinter.Canvas.brush.Style:=bsclear;
   except
             on E:Exception do
                begin
                    Log.log_Add('exception in begindoc:' + E.Classname + 
E.Message + ' last win error code:' + IntToStr(GetLastError));
                    doc_open:=false;
                end;
       end;
 
Riesci a dirmi dove focalizzare la mia attenzione?
 
Grazie mille per l'aiuto!
 
 

Secondo me non devi crearla tu:
 
Delphi syntax:
*function Printer: TPrinter;*
Description
*Printer creates an instance of a global TPrinter object the first time it is called. Use the Printer function to print using the TPrinter object.*
 
[cut]
 
A.

cioe:
 
    Printer.GetPrinter(Device,Driver,Port,DevMode);
    Printer.SetPrinter(Device,Driver,Port,0);
 
    printer.BeginDoc;    
    try
      printer.Canvas.brush.Style:=bsclear;
    printer.EndDoc;    


SE tolgo la create di inchioda drasticamente sulla
 
   MyPrinter.GetPrinter(Device,Driver,Port,DevMode);
 
Per me il problema č di memoria.... no ha piů memoria per creare una 
nuova pagina.
E' plausibile per te?
Tutto questo codice č eseguito in una thread secondario, come faccio a 
sapere se ha terminato la memoria?
 
thnx!
 
 

Non devi usare MYPrinter.
Cancella la dichiarazione di MYprinter e usa direttamente PRINTER.


Non so perch� ma cos� funziona alla grande... ho lanciato una marea di 
stampe senza pi� avere blocchi!!!!
Grazie....
 
MA il dubbio mi sorge spontaneo.... se io volessi lanciare due stampe 
contemporaneamente in modo parallelo su due stampanti.... come diavolo 
faccio se non posso istanziarmi un altro oggetto come quello????
 
Grazie mille di tutto.
 
K

 faccio se non posso istanziarmi un altro oggetto come quello????
 
Non puoi perch� Printer lavora sulla stampante di default, pertanto 
dovrai selezionarti la stampante su cui stampare agendo sulla propiet� 
printerindex dell'oggetto Printer. Tasto F1 per i dettagli.
 
Da quello che mi ricordo, non si possono parallelizzare le stampe, 
delphi le serializza: ma non ne sono sicuro, verifica.
 
-- 
morde
Android
QT 4.7
Delphi (5,6,7.. expired)
Firebird Database