Newsgroup: it.comp.lang.delphi
Titolo: stampante a matrice disattivare modalita grafica

Salve a tutti
Ho un problema con una stampante a matrice che mi stampa i report
sempre in modalità grafica , rallentandomi molto la stampa.
 Uso ace report  per generare una semplicissima ricevutina (sto sostituendo
un programma in clipper) e ho settato la proprietà della stampa in modalità
Draft
però stampa sempre in grafico  ed è sempre troppo lenta.
15 secondi contro 3 secondi col vecchio programma dos che stampa in modalità
testo  è un abisso.
In buona sostanza come posso dire alla stampante di stamparmi in modalita
solo testo e non grafica?
Precisazione. il cliente lavora(e non vuole cambiare il computer) con w3.11)
quindi sono costretto ad usare D1 per questo programino
Tuttavia ho provato anche a usare D3 ma il prroblema no si sposta.
Grazie anticipatamente a chi può darmi un suggerimento
Livio salarol

Crea un file di testo sul disco, e poi invialo direttamente in modalita' RAW
allo spooler di Win sulla porta della stampante. In questo modo salterai il
driver di stampa di Win, e quindi la modalita' grafica.
Ciao, Sandro


Con lo SpoolFile() di win3.1?
o c'è qualche altra funzione api che non so?
Comunque grazie per il consiglio
Ciao Livio

> Con lo SpoolFile() di win3.1?
Non ho l'abitudine di lavorare con le API, e l'ambiente a 16 bit non lo ho
mai studiato, pero' se ti puo' essere utile ti allego una unit che fa quello
che ti suggerivo. Dovrebbe funzionare anche con D1.
Ciao, Sandro
-- inizio
{How do I write a raw string of a data to the printer?
The following unit "PrtRaw.pas" demonstrates a 16/32 bit
raw printing unit for Delphi and Borland C Builder.
Following the unit, is an exmaple on using the
PrtRaw unit.
Notes:
1) You are responsible for embedding all necessary
control codes that the printer may require (including
form feed codes).
2) You must specify a valid printer and port name.}
unit PrtRaw;
{Copyright (c) 1998 by Joe C. Hecht - All rights Reserved}
{
joeh...@gte.net
 You may use and share this unit}
{providing my name and the copyright notice stays intact.}
interface
uses
  WinTypes;
{$IFDEF WIN32}
type SpoolInt = DWORD;
{$ELSE}
type SpoolInt = integer;
{$ENDIF}
function AutodetectPrinter:string;
function StartRawPrintJobAutodetectingPrinter(DocName:pChar):THandle;
function StartRawPrintJob(PrinterName : pChar;
                          Port : pChar;
                          DocName : pChar) : THandle;
function StartRawPrintPage(hPrn : THandle) : integer;
function PrintRawData(hPrn : THandle;
                      Buffer : pointer;
                      NumBytes : SpoolInt) : integer;
function EndRawPrintPage(hPrn : THandle) : integer;
function EndRawPrintJob(hPrn : THandle) : integer;
implementation
uses
   WinProcs,
{$IFDEF WIN32}
Printers,WinSpool;
{$ELSE}
Print;
{$ENDIF}
function AutodetectPrinter:string;
Var
  pDevice, pDriver, pPort: pChar;
  hDMode : tHandle;
begin
 getmem (pdevice, cchdeviceName);
 getmem (pdriver, MAX_PATH);
 getmem (pPort  , MAX_PATH);
 Printers.Printer.GetPrinter (pdevice, pdriver, pPort, hDMode );
 Result:='('+pdevice+' su '+pport+')';
 FreeMem (pDevice);
 FreeMem (pDriver);
 FreeMem (pPort);
end;
function StartRawPrintJobAutodetectingPrinter(DocName:pChar):THandle;
var
   hPrn : THandle;
   DocInfo1 : TDocInfo1;
Var
  pDevice, pDriver, pPort: pChar;
  hDMode : tHandle;
Begin
 getmem (pdevice, cchdeviceName);
 getmem (pdriver, MAX_PATH);
 getmem (pPort  , MAX_PATH);
 Printers.Printer.GetPrinter (pdevice, pdriver, pPort, hDMode );
 if OpenPrinter(pdevice,hPrn,nil) then begin
  DocInfo1.pDocName := DocName;
  DocInfo1.pOutputFile := pport;
  DocInfo1.pDataType := 'RAW';
  if (StartDocPrinter(hPrn,1,@DocInfo1)<>0) then Result:=hPrn else
Result:=THandle(-1);
 end else Result:=THandle(-1);
 FreeMem (pDevice);
 FreeMem (pDriver);
 FreeMem (pPort);
End;
function StartRawPrintJob(PrinterName : pChar;
                          Port : pChar;
                          DocName : pChar) : THandle;
{$IFDEF WIN32}
var
   hPrn : THandle;
   DocInfo1 : TDocInfo1;
{$ENDIF}
begin
{$IFDEF WIN32}
   if (OpenPrinter(PChar(PrinterName),
                   hPrn,
                   nil) = FALSE)  then begin
     Result := THandle(-1);
     Exit;
   end;
   DocInfo1.pDocName := DocName;
   DocInfo1.pOutputFile := Port;
   DocInfo1.pDataType := 'RAW';
   if (StartDocPrinter(hPrn,
                       1,
                       @DocInfo1) = 0) then begin
     Result := THandle(-1);
     exit;
   end;
   Result := hPrn;
{$ELSE}
  result := OpenJob(Port,
                    DocName,
                    0);
{$ENDIF}
end;
function StartRawPrintPage(hPrn : THandle) : integer;
begin
{$IFDEF WIN32}
   if (StartPagePrinter(hPrn) = FALSE) then begin
     Result := -1;
     exit;
   end;
   result := 1;
{$ELSE}
  result := StartSpoolPage(hPrn);
{$ENDIF}
end;
function PrintRawData(hPrn : THandle;
                      Buffer : pointer;
                      NumBytes : SpoolInt) : integer;
{$IFDEF WIN32}
var
  BytesWritten : DWORD;
{$ENDIF}
begin
  if (NumBytes = 0) then begin
    Result := 1;
    exit;
  end;
{$IFDEF WIN32}
   if (WritePrinter(hPrn,
                    Buffer,
                    NumBytes,
                    BytesWritten) = FALSE) then begin
     Result := -1;
     exit;
   end;
   if (NumBytes <> BytesWritten) then begin
     Result := -1;
     exit;
   end;
   Result := 1;
{$ELSE}
  result := WriteSpool(hPrn,
                       Buffer,
                       NumBytes);
{$ENDIF}
end;
function EndRawPrintPage(hPrn : THandle) : integer;
begin
{$IFDEF WIN32}
   if (EndPagePrinter(hPrn) = FALSE) then begin
     Result := -1;
     exit;
   end;
   Result := 1;
{$ELSE}
  result := EndSpoolPage(hPrn);
{$ENDIF}
end;
function EndRawPrintJob(hPrn : THandle) : integer;
begin
{$IFDEF WIN32}
   if (EndDocPrinter(hPrn) = FALSE) then begin
     Result := -1;
     exit;
   end;
   if (ClosePrinter(hPrn) = FALSE) then begin
     Result := -1;
     exit;
   end;
   Result := 1;
{$ELSE}
  result := CloseJob(hPrn);
{$ENDIF}
end;
end.