Pegar Tamanho Papel Impressora Padrão

Delphi

29/03/2005

Eu sei que tem alguns tópicos com este mesmo assunto, mas eu não consegui um que resolvesse meu problema, que é: [b:676feab369]Pegar o tamanho de papel[/b:676feab369] da impressora padrão do micro, independente do seu sistema operacional(Windows 95, 98, ME, 2000, XP). Tem como?? Alguem pode me ajudar??
Agradeço desde já.


Anarquistaoi

Anarquistaoi

Curtidas 0

Respostas

Faelcavalcanti

Faelcavalcanti

29/03/2005

Cara. Pegar desse exemplo aqui:

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;


Agora assim, eu tava tentando fazer um exemplo bem simples, mas vi uma parte de código já pronto aqui. Espero que com este conteúdo você poderá fazer um bom proveito para o seu uso, mas tipow, se liga que terás que declarar para o Objeto [b:09612ba00f]Printers[/b:09612ba00f] do Canvas, e se liga nas constantes, são elas que têm um valor literal encapsulado com o valor das medidas exatas de um determinado papel.

Agora para saber a impressora tu poderia usar tipow:
function ImpressoraCorrente: string;
begin
  Result := Printer.Printers[Printer.PrinterIndex];
end;


Qualquer coisa dá um response aqui, que agente te dá uma força!

:wink:
Espero ter ajudado.


GOSTEI 0
Anarquistaoi

Anarquistaoi

29/03/2005

Valeu Rafael, era isso que eu queria... :wink: :D


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

29/03/2005

Valeu Rafael, era isso que eu queria... :wink: :D


:wink: :wink: :wink:
Falow!!!


GOSTEI 0
POSTAR