GARANTIR DESCONTO

Fórum Configurar Impressora #145931

15/03/2003

0

EU GOSTARIA DE COMO MUDAR O TIPO DO PAPEL VIA PROGRAMAÇÃO USANSO O DELPHI 6.

DESDE JÁ EU AGRADEÇO.

RENAN.FREITAS.COSTA@BOL.COM.BR



[b:18d7983a06]Observação:[/b:18d7983a06]
renan,
Não escreva o conteúdo da mensagem utilizando caixa alta; é o mesmo que estar ´gritando´. Por favor, releia as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.
Sandra/Moderação


Renan

Renan

Responder

Posts

15/03/2003

Eniorm

EU GOSTARIA DE COMO MUDAR O TIPO DO PAPEL VIA PROGRAMAÇÃO USANSO O DELPHI 6. DESDE JÁ EU AGRADEÇO. RENAN.FREITAS.COSTA@BOL.COM.BR


Eu tbm precisso saber!!!


Responder

Gostei + 0

24/08/2004

Macario

Sobe :arrow: 8)


Alguem tem uma dica?

Tenho um relatorio em formato A4 e Carta, como mudar o tipo do papel,
na impressora padrão do windows via codigo?








[color=red:aa874619b1]Topico resultante de pesquisa[/color:aa874619b1]



Responder

Gostei + 0

24/08/2004

Vinicius2k

Colegas,

Nunca utilizei, mas encontrei estas duas dicas :
013 - Definir o tamanho do papel em TPrinter Esta procedure configura o tamanho do papel em Run-Time para ser utilizado com o objeto TPrinter; Esta procedure deve ser chamada antes de aplicar o método Printer.BeginDoc.
procedure TForm1.SetPrinterPage(Width, Height : LongInt);
var
  Device : array[0..255] of char;
  Driver : array[0..255] of char;
  Port : array[0..255] of char;
  hDMode : THandle;
  PDMode : PDEVMODE;
begin
  Printer.GetPrinter(Device, Driver, Port, hDMode);
  If hDMode <> 0 then
  begin
  pDMode := GlobalLock( hDMode );
  If pDMode <> nil then
  begin
  pDMode^.dmPaperSize := DMPAPER_USER;
  pDMode^.dmPaperWidth := Width;
  pDMode^.dmPaperLength := Height;
  pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
  GlobalUnlock( hDMode );
  end;
  end;
end; 


560 - Troca de tamanho do papel Como diria Pearl Jam: ´...It´s a Revolution Baby...´ Bem, agora vou mostrar como criar uma rotina para troca automatica de papel, muito útil em casos de empresas que possuem diversos tipos de ´papélis´. Você pode copiar o nosso exemplo completo agora: TamPa.zip Acompanhe a baixo o código principal com detalhes do mesmo:
procedure MudaTamPapel(PaperSize, Comp, Alt: integer);
var
ADevice, ADriver, APort: array[0..255] of char;
DeviceMode: THandle;
M: PDevMode;
s: string;
begin
// Força o uso de Printer. Se esta linha for removida, a primeira
// invocação falha. Bug da VCL
S := Printer.Printers[Printer.PrinterIndex];
// Pega dados da impressora atual
Printer.GetPrinter(ADevice, ADriver, APort, DeviceMode);
// Pega um ponteiro para DEVMODE
M := GlobalLock(DeviceMode);
try
if M <> nil then
begin
// Muda tamanho do papel
M^.dmFields := DM_PAPERSIZE;
if PaperSize = DMPAPER_USER then
M^.dmFields := M^.dmFields or DM_PAPERLENGTH or DM_PAPERWIDTH;
M^.dmPaperLength := Alt;
M^.dmPaperWidth := Comp;
M^.dmPaperSize := PaperSize;//
// Atualiza
Printer.SetPrinter(ADevice, ADriver, APort, DeviceMode);
end;
finally
GlobalUnlock(DeviceMode);
end;
end;
 
function ImpressoraCorrente: string;
begin
Result := Printer.Printers[Printer.PrinterIndex];
end;
 
procedure TForm1.AtualizaPrn;
begin
StaticText1.Caption := ImpressoraCorrente;
end;
 
procedure TForm1.MostraTamPapel;
var
ADevice, ADriver, APort: array[0..255] of char;
DeviceMode: THandle;
M: PDevMode;
s: string;
begin
// Força o uso de Printer. Se esta linha for removida, a primeira
// invocação falha. Bug da VCL
S := Printer.Printers[Printer.PrinterIndex];
// Pega dados da impressora atual
Printer.GetPrinter(ADevice, ADriver, APort, DeviceMode);
// Pega um ponteiro para DEVMODE
M := GlobalLock(DeviceMode);
if M <> nil then
MostraDevMode(M^);
end;
 
function TForm1.PegaTamanhoPapel(dmPaperSize: word): string;
begin
Result := ´Desconhecido´;
// Verifica ALGUNS TAMANHOS POSSÍVEIS. Existem outros, veja DEVMODE
case dmPaperSize of
DMPAPER_USER: Result := ´Definido pelo usuário´;
DMPAPER_LETTER: Result := ´Letter, 8 1/2- by 11-inches´;
DMPAPER_LEGAL: Result := ´Legal, 8 1/2- by 14-inches´;
DMPAPER_A4: Result := ´A4 Sheet, 210- by 297-millimeters´;
end;
end;
 
procedure TForm1.MostraDevMode(const M: TDevMode);
begin
// Mostra o valor de alguns campos
with M do
begin
// Mostra nome da impressora
Memo1.Lines.Add(´Nome:´ + dmDeviceName);
// Verifica se campo tamanho do papel esta preenchido e mostra
if dmFields and DM_PAPERSIZE <> 0 then
Memo1.Lines.Add(PegaTamanhoPapel(dmPaperSize));
if dmFields and DM_PAPERLENGTH <> 0 then
Memo1.Lines.Add(Format(´Altura:¬d´, [dmPaperLength]));
if dmFields and DM_PAPERWIDTH <> 0 then
Memo1.Lines.Add(Format(´Comprimento:¬d´, [dmPaperWidth]));
end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
P: TPrinterSetupDialog;
begin
P := TPrinterSetupDialog.Create(self);
try
P.Execute;
finally
P.Free;
end;
AtualizaPrn;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
MudaTamPapel(DMPAPER_LETTER, 0, 0);
MostraTamPapel;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
MudaTamPapel(DMPAPER_USER, StrToInt(EdComp.Text), StrToInt(EdAlt.Text));
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
Printer.Title := ´Teste de filha´;
Printer.BeginDoc;
Printer.EndDoc;
end;
 
procedure TForm1.Button5Click(Sender: TObject);
begin
MostraTamPapel;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
AtualizaPrn;
end;



* Extraído de DTDelphi 2.6

Espero ter ajudado...
T+


Responder

Gostei + 0

25/08/2004

Macario

Olá [b:6ce5797ed1]vinicius2K[/b:6ce5797ed1], bom dia.

Essas dicas servem para mudar o papel na impressora, independente do
modo que se manda a impressão?
Por exemplo: via Tprinter ou via Quick report?

No meu caso quero ajustar o papel conforme o do Quick report.


Responder

Gostei + 0

25/08/2004

Vinicius2k

Macario, como disse eu não testei, mas a primeira com certeza é só via objeto TPrinter, a segunda altera o tamanho na impressora padrão do Windows, logo, a princípio, seria válido para qualquer um dos dois, mas não tenho certeza...

Encontrei esta específica para o QuickReport :
298 - Resolvendo Problemas do Print-Setup do QuickReport {Quando executa o PrintSetup do Preview e você está trabalhando com papel Personalizado, o QuickReport perde a configuração do Papel Personalizado, colocando o PaperSize de Custom para Letter. Para resolver o problema guarde o valor da propriedade PaperSize e do Length em variáveis e no evento BeforePrint você atribui o valor da variável para o QuickReport novamente, dessa forma resolve o problema. Veja exemplo }
Uses
qrprntr
 
var
Form1: TForm1;
cPaperSize : TQRPaperSize;
nLength : Extended;
 
implementation
{$R *.DFM}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
cPapersize := QuickRep1.Page.PaperSize;
nLength := QuickRep1.Page.Length;
QuickRep1.Preview;
end;
 
procedure TForm1.QuickRep1BeforePrint(Sender: TQuickRep;
var PrintReport: Boolean);
begin
QuickRep1.Page.PaperSize := cPaperSize;
QuickRep1.Page.Length := nLength;
end; 


* Extraído de DTDelphi 2.6

Espero que ajude...
T+


Responder

Gostei + 0

25/08/2004

Macario

olá novamente, tentei usar está parte mas nao esta mudando o papel.



procedure TufPrinc.MudaTamPapel(PaperSize, Comp, Alt: integer);
var
ADevice, ADriver, APort: array[0..255] of char;
DeviceMode: THandle;
M: PDevMode;
s: string;
begin
  // Força o uso de Printer. Se esta linha for removida, a primeira
  // invocação falha. Bug da VCL
  S := Printer.Printers[Printer.PrinterIndex];
  // Pega dados da impressora atual
  Printer.GetPrinter(ADevice, ADriver, APort, DeviceMode);
  // Pega um ponteiro para DEVMODE
  M := GlobalLock(DeviceMode);
  try
    if M <> nil then
    begin
      // Muda tamanho do papel
      M^.dmFields := DM_PAPERSIZE;
      if PaperSize = DMPAPER_USER then
      M^.dmFields := M^.dmFields or DM_PAPERLENGTH or DM_PAPERWIDTH;
      M^.dmPaperLength := Alt;
      M^.dmPaperWidth := Comp;
      M^.dmPaperSize := PaperSize;//
      // Atualiza
      Printer.SetPrinter(ADevice, ADriver, APort, DeviceMode);
    end;
  finally
    GlobalUnlock(DeviceMode);
  end;
end;


e pra chamar a função por exemplo pra papel Carta

MudaTamPapel(DMPAPER_LETTER, 216, 280);



o que há de errado minha impressora é uma HP laserjet 4


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar