Código Delphi
[-]procedure SetPaperSize (intAlto,intAncho : Integer);
var
ADevice, ADriver, APort : array [0..255] of Char;
ADeviceMode : THandle;
DevMode : PDevMode;
begin
with Printer do
begin
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
SetPrinter (ADevice, ADriver, APort, 0);
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
DevMode := GlobalLock(ADeviceMode);
if not Assigned(DevMode) then
ShowMessage('Ha entrado en -> if not Assigned(DevMode) ...')
else
begin
with DevMode^ do
begin
dmPaperSize:= DMPAPER_User;
dmPaperLength := intAlto;
dmPaperWidth:= intAncho;
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLength or DM_PAPERWidth;
end;
GlobalUnLock(ADeviceMode);
SetPrinter(ADevice, ADriver, APort, ADeviceMode);
end;
end;
end;
procedure Imprimir_Alb_Fact(n:Integer);
var
Imprime_Pie:Boolean;
Imprimir:Boolean;
begin
Imprime_Pie:=False;
Imprimir :=True;
DmPan.Cli.IndexName:='';
SetPaperSize(DmPan.ImpresoraLargoPapel.Value, DmPan.ImpresoraAnchoPapel.Value);
Printer.Canvas.Font.Name:=DmPan.ImpresoraLetra.Value;
Printer.Canvas.Font.Size:=DmPan.ImpresoraTallaLetra.Value;
Case n of
1:begin
if DmPan.AlbaContado.Value = True then
Imprime_Pie:=True
else
Imprime_Pie:=False;
if DmPan.UsuNivel.Value = '1' then
begin
if Application.MessageBox('¿Seguro que desea imprimir el Albarán?','Atención',mb_OkCancel +
mb_IconQuestion)= idOk then
Imprimir:=True
else
Imprimir:=False;
end;
end;
2:Imprime_Pie:=True;
end;
if imprimir = True then
begin
With Printer.canvas do
begin
Printer.BeginDoc;
Imprimir_Cabecera(n);
Imprimir_Detalle(n);
if Imprime_Pie = True then
begin
Imprimir_Pie(n);
Imprimir_Total_Final(n);
end;
Printer.EndDoc;
end;
end;
end;
Con este ejemplo ves como puedes mandarle el tamaño del ticket a la impresora.
Veo que de 90 pasas a 300, no estará esa situación de línea fuera del ticket y por eso no se ve.
Las coordenadas normalmente sumándole 30 logras el cambio de fila, pero de 90 pasar a 300, creo que ya estás fuera del ticket.
Un Saludo.