Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-07-2006
Avatar de flystar
flystar flystar is offline
Miembro
 
Registrado: jul 2006
Posts: 184
Poder: 18
flystar Va por buen camino
¿Como se envian codigos de control a una impresora?

Buenos Dias:

Solicito amablemente a una alma caritativa me ayude a aclarar la siguiente duda:

Tengo una impresora de Matriz de puntos....

Es posible enviarle codigos o comandos de control para que haga tal cosa.. por ejemplo que recorra el rodillo para que el papel se regrese. O un comando para que coloque en posicion el papel o indicarle que deje un espacio entre las lineas de 3 mm etc etc etc.

No se como enviar estos codigos de control.
Se que debo enviar un caracter de escape para que entienda que le van a mandar un comando y luego enviarle el valor hexadecimal del comando
pero no se como.

Seria alguienta tan amable de ponerme un ejemplo que funcione sobre esto?

Gracias.
__________________

"Los unicos que no se equivocan son aquellos que no intentan hacer algo."
Iván Caballero Cano...
ivanhalen77@gmail.com
Responder Con Cita
  #2  
Antiguo 20-07-2006
nemesio nemesio is offline
Miembro
 
Registrado: nov 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 377
Poder: 19
nemesio Va por buen camino
Todas las impresoras vienen con un manual y en él se especifican los códigos que ésta maneja para realizar diferentes cosas como: Poner en Negrita, Subrayar, etc. etc. Revisa el manual y alli debes encontar los códigos que andas buscando. Estos varían de una marca a otra.

Saludos.
Responder Con Cita
  #3  
Antiguo 20-07-2006
Avatar de flystar
flystar flystar is offline
Miembro
 
Registrado: jul 2006
Posts: 184
Poder: 18
flystar Va por buen camino
No busco los codigos, ya los tengo.

hola, Gracias por tu respuesta.
Tal vez no me di a entender bien.
NO busco los codigos.. esos ya los tengo porque tengo el manual.
Lo que no se, es como programar en Delphi para enviar esos codigos a la impresora desde mi programa...
hasta el momento se que tengo que enviar un caracter de escape para que la impresora sepa que le voy a enviar un comando.. pero eso es todo lo que se hasta el momento.
Alguien me podria dar un ejemplo de como se hace?

Gracias.
__________________

"Los unicos que no se equivocan son aquellos que no intentan hacer algo."
Iván Caballero Cano...
ivanhalen77@gmail.com
Responder Con Cita
  #4  
Antiguo 20-07-2006
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 141
Poder: 19
aledieb Va por buen camino
Yo lo hacia abriendo la impresora como si fuera un archivo con fopen y escribia con write ó writeln con win98 y anteriores, pero esto tal ves no te sirva, fijate en la unidad printers del delphi.

Otra opción sería si usas reportes, en el evento beforeprint enviar los códigos desde alli.
__________________
Suerte
Alejandro
Responder Con Cita
  #5  
Antiguo 21-07-2006
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Checa Esto...

Estoy es algo similar de lo que te dice Alejandro, puedes agregar los códigos de control por medio de 1 archivo de texto:
Código Delphi [-]
....
var
  Txt       :TextFile;
  try
    AssignFile(txt,'c:\Codigos.txt');
    //Reset
    Write(txt, #27'@');
  finally
    CloseFile(txt);
  end;
 
  if SpoolFile('c:\Codigos.txt','\\Servidor\Facturas') <> 0 then
    ShowMessage('Impresora No esta Preparada');
......
function SpoolFile(const FileName, PrinterName: string): Integer;
var
  Buffer: record
    JobInfo: record // ADDJOB_INFO_1
       Path: PChar;
      JobID: DWORD;
    end;
    PathBuffer: array[0..255] of Char;
  end;
  SizeNeeded: DWORD;
  Handle: THandle;
  PrtName: string;
  ok: Boolean;
begin
  // Flush job to printer
  PrtName := PrinterName;
  if PrtName = '' then
    PrtName := Printer.Printers[Printer.PrinterIndex]; // Default printer name
  ok := False;
  if OpenPrinter(PChar(PrtName), Handle, nil) then
    if AddJob(Handle, 1, @Buffer, SizeOf(Buffer), SizeNeeded) then
      if CopyFile(PChar(FileName), Buffer.JobInfo.Path, True) then
        if ScheduleJob(Handle, Buffer.JobInfo.JobID) then
          ok := True;
  if not ok then
    Result := GetLastError
  else
    Result := 0;
end;

Espero te sirva....Suerte.
Responder Con Cita
  #6  
Antiguo 05-08-2006
neasoporte neasoporte is offline
Registrado
 
Registrado: nov 2005
Ubicación: Corrientes Argentina
Posts: 7
Poder: 0
neasoporte Va por buen camino
enviar codigo de escapes

Debe haber mejor manera,yo lo solucione de esta forma

procedure TFprimostrador.btnpresuClick(Sender: TObject);
var
aexport:tqrasciiexportfilter;
chkdos:bool;
begin
imprimeok:='S';
chkdos:=fcfgprinter.chkprndos.Checked;
case chkdos of
False:begin
pnlopcprn.Visible:=false;
if imprimeok='S' then
begin
fprnpresu.exptot.Expression:='sum(qprev.subtotal)';
fprnpresu.qrppresu.Print;
end else
MessageDlg('Problemas de Comunicacion Con Impresora..Verifique', mtInformation,[mbOk], 0);
gridprev.SetFocus;
end else
begin
pnlopcprn.Visible:=false;
if imprimeok='S' then
begin
try
fprnpresu2.exptot.Expression:='sum(qprev.subtotal)';
fprnpresu2.k1.Caption:=chr(14);
fprnpresu2.k2.Caption:=chr(20);
fprnpresu2.k3.Caption:=chr(15);
fprnpresu2.k4.Caption:=chr(14);
fprnpresu2.k5.Caption:=chr(20);
aexport:=tqrasciiexportfilter.create('c:\preventa\presu.txt');
fprnpresu2.qrppresu2.ExportToFilter(aexport);
ShellExecute(handle,'open','Command.com','Command.com /c type c:\preventa\presu.txt>lpt1','',sw_normal);
aexport.Finish;
finally
if not printer.Printing then
begin
saltos:=fcfgprinter.edtsaltos.IntValue;
paracorte;
end;
end;
end else
MessageDlg('Problemas de Comunicacion Con Impresora..Verifique', mtInformation,[mbOk], 0);
gridprev.SetFocus;
end;
end;
end;




procedure TFprimostrador.mandocode(s: string);
var
Handle, hDeviceMode: THandle;
N: DWORD;
DocInfo1: TDocInfo1;
Device, Driver, Port: array[0..255] of char;
PrinterName: string;
buf:array[0..255] of char;
lbuf:integer;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
PrinterName := Format('%s', [Device]);
if not OpenPrinter(PChar(PrinterName), Handle, nil) then
//RaiseLastWin32Error;
imprimeok:='N';
try
with DocInfo1 do
begin
pDocName := 'Control';
pOutputFile := nil;
pDataType := 'RAW';
end;
StartDocPrinter(Handle, 1, @DocInfo1);
try
lbuf:=length(s);
copymemory(@buf,Pchar(s),lbuf);
if not WritePrinter(Handle, @buf, lbuf, N) then
//RaiseLastWin32Error;
imprimeok:='N';
finally
EndDocPrinter(Handle);
end;
finally
ClosePrinter(Handle);
end;
end;

procedure TFprimostrador.paracorte;
var
inisalto:integer;
begin
for inisalto:=1 to saltos do
begin
s:=#27+#10;
mandocode(s);
end;
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Te envían gratis discos de Linux a casa Casimiro Notevi Noticias 5 17-07-2006 09:05:24
Envían cederrones gratis de varias distribuciones de Linux dec Noticias 3 14-07-2006 16:15:51
Control de impresora Ricardo León API de Windows 0 16-12-2005 17:51:39
Codigos Escape Impresora Sansumg serhasae Varios 3 05-09-2005 10:40:17
Leer los paquetes que se envian por el puerto COM rjsitruiz Providers 1 11-10-2004 23:36:53


La franja horaria es GMT +2. Ahora son las 06:52:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi