Configurar Impressora
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
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
Curtidas 0
Respostas
Eniorm
15/03/2003
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!!!
GOSTEI 0
Macario
15/03/2003
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?
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]
GOSTEI 0
Vinicius2k
15/03/2003
Colegas,
Nunca utilizei, mas encontrei estas duas dicas :
* Extraído de DTDelphi 2.6
Espero ter ajudado...
T+
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+
GOSTEI 0
Macario
15/03/2003
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.
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.
GOSTEI 0
Vinicius2k
15/03/2003
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 :
* Extraído de DTDelphi 2.6
Espero que ajude...
T+
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+
GOSTEI 0
Macario
15/03/2003
olá novamente, tentei usar está parte mas nao esta mudando o papel.
e pra chamar a função por exemplo pra papel Carta
o que há de errado minha impressora é uma HP laserjet 4
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
GOSTEI 0