GARANTIR DESCONTO

Fórum Problemas p/imprimir #308445

09/01/2006

0

Prezados Colegas,

Preciso fazer a impressão de formulários continos através do meu software, como o tamanho da folha do formulário não é A4, Carta, Ofício e etc... eu preciso enviar os comandos direto para impressora para poder informar a qtd maxima de linhas q podem ser impressas por folha p/q ele possa saltar p/proxima pagina corretamente. Eu nunca precisei fazer nada do tipo antes, então pesquisando na rede descobri exemplos de como mandar isso direto p/impressora, exemplos como esse:
AssignFile(Texto,´LPT1´);
Rewrite(Texto);
Writeln(Texto,#27675150);
CloseFile(Texto);
Só q no meu caso, o usuário pode está usando uma impressora da rede, então isso não daria certo, suponho q eu teria q mandar esse código ou algo parecido para o QuickReport q é o q eu uso p/gerar esse relatório, só q não estou tendo sucesso. Alguem sabe como ajudar? Desde já agradeço.
Abçs.


Fabiano_aprendiz

Fabiano_aprendiz

Responder

Posts

10/01/2006

Fabiano_aprendiz

Em outro forum me aconselharam a colocar o nome da impressora na rede, exemplo: \\maquina01\espon02 . O problema é o seguinte, como é um software comercial da empresa em q trabalho, ele tem centenas de usuários, q usam XP, 2000, 98, ME e tbm não teria como eu colocar o nome da impressora...teria q ser algo genêrico.
Alguma dica??


Responder

Gostei + 0

10/01/2006

Anfm

Crie um arquivo INI com as configurações da impressora, dae qdo vc abrir o sistema vc le esse arquivo e saberá onde que deve imprimir.


Responder

Gostei + 0

10/01/2006

Adriano Santos

Em outro forum me aconselharam a colocar o nome da impressora na rede, exemplo: \\maquina01\espon02 . O problema é o seguinte, como é um software comercial da empresa em q trabalho, ele tem centenas de usuários, q usam XP, 2000, 98, ME e tbm não teria como eu colocar o nome da impressora...teria q ser algo genêrico. Alguma dica??


Como assim genérico? Você pode guardar o nome da impressora em um arquivo INI ou mesmo em banco de dados e usá-lo no momento da impressão. Pode explicar melhor?


Responder

Gostei + 0

10/01/2006

Marcio.theis

O componente VDOPrinter não iria lhe ajudar ? Dê uma olhada em: http://devres.freeprohost.com/portal/


Responder

Gostei + 0

10/01/2006

Fabiano_aprendiz

Desculpem a minha ignorância, mas não estou entendendo, como disse esse software é comercial e está instalado em centenas de clientes então eu não sei qual o nome nem as configurações de suas impressoras. Mesmo assim daria p/criar um arquivo INI? Como seria?
Agradeço a todos.


Responder

Gostei + 0

10/01/2006

Fabiano_aprendiz

Ainda não consegui resolver e acho q não soube explicar direito qual a minha dificuldade...fiz o q me disseram, utilizei um arquivo ini para guardar o nome da impressora. Mas mesmo assim não está funcionando. Estou usando o QuickReport p/gerar esse relatório, como devo proceder p/q ele absorva esse codigo:
AssignFile(Texto,´strNomImp´);
Rewrite(Texto);
Writeln(Texto,#27675150);
CloseFile(Texto);

Tem como?


Responder

Gostei + 0

10/01/2006

Aerreira

Para pegar a impressora padrão + lista de impressoras do usuário, experimente o código abaixo:

var
  WinIni: TIniFile;
  DevList: TStringList;
  device: string;
  i, p: integer;
begin
  WinIni := TIniFile.Create(´WIN.INI´);

  // Get the current default printer
  device := WinIni.ReadString(´windows´, ´device´, ´,,´);
  if device = ´´ then device := ´,,´;
  p := Pos(´,´, device);
  DDevice.Name := Copy(device, 1, p-1);
  device := Copy(device, p+1, Length(device)-p);
  p := Pos(´,´, device);
  DDevice.Driver := Copy(device, 1, p-1);
  DDevice.Port := Copy(device, p+1, Length(device)-p);

  // Get the printers list
  DevList := TStringList.Create;
  WinIni.ReadSectionValues(´Devices´, DevList);

  // Store the printers list in a dynamic array
  SetLength(Devices, DevList.Count);
  for i := 0 to DevList.Count - 1 do begin
    device := DevList[i];
    p := Pos(´=´, device);
    Devices[i].Name := Copy(device, 1, p-1);
    device := Copy(device, p+1, Length(device)-p);
    p := Pos(´,´, device);
    Devices[i].Driver := Copy(device, 1, p-1);
    Devices[i].Port := Copy(device, p+1, Length(device)-p);

    // Add the printer to the ListBox
    comboBox1.Items.Add(Devices[i].Name
      + ´ (´ + Devices[i].Port + ´)´);

    // Is the current default printer?
    if (CompareText(Devices[i].Name, DDevice.Name) = 0) and
       (CompareText(Devices[i].Driver, DDevice.Driver) = 0) and
       (CompareText(Devices[i].Port, DDevice.Port) = 0) then
      ComboBox1.ItemIndex := i;  // Make it the selected printer
  end;
  WinIni.Free;
end;


Mas se seu caso é gerar relatório para impressoras matriciais, recomendo RDprint [url]www.deltress.com.br[/url] que faz isso tudo de forma muito mais fácil.


Responder

Gostei + 0

11/01/2006

Fabiano_aprendiz

O lance de pegar a a impressora eu resolvi usando um arquivo INI. Minha dúvida agora é a seguinte, estou usando o QuicReport p/gerar esse relatório, então não sei como fazer p/q ele receba a informação com o número máximo de linhas q ele deve imprimir por folha.


Responder

Gostei + 0

11/01/2006

Aerreira

Fabiano, ou você usa o QuickReport ou usa o AssignFile/WriteLn os dois juntos não dá.


Responder

Gostei + 0

11/01/2006

Fabiano_aprendiz

Ok, então tem como eu mandar a informação com a qtd de linhas p/o QuickReport?


Responder

Gostei + 0

11/01/2006

Aerreira

No objeto QuickRep você diversas propriedades como page.papersize, page.orientation, page.length, etc, ou dando um duplo clique no objeto form você tem acesso ao Report Settings.

Mas ví mensagens recentes aqui no forum falando sobre tamanho de página que o QuickReport parece que não entende direito... Deram uma sugestão a respeito... procure aqui no forum que achará.


Responder

Gostei + 0

11/01/2006

Aerreira

Complementando... pois acabei não te respondendo:

A quantidade de linhas depende do tamanho da fonte utilizada e do espaçamento entre elas. No QuickReport e qualquer outro do gênero, não existe o conceito de nº de linhas, pois não é fixo como no DOS.


Responder

Gostei + 0

11/01/2006

Fabiano_aprendiz

Já chequei o Report Settings, fiz as alterações nas propriedades Width e Length mas não surtiram efeito algum...vou dar uma procurada p/ver se localizo essa sugestão q foi dada aqui no forum. Vlw.


Responder

Gostei + 0

16/01/2006

Fabiano_aprendiz

Continuo apanhando disso...
Pesquisando na net achei a seguinte informação em um site:

´Algumas opções, principalmente em impressoras matriciais, são obtidas através do envio dos chamados ´códigos de escape´ para a impressora (por exemplo, alterar espaçamento entre as linhas (#45), tipo de fonte (18, 23), etc). Em versões 16-bit do Windows, isso não era complicado, mas agora, nas versões 32-bit, o acesso direto ao hardware não é mais possível.

Portanto, para enviarmos caracteres diretamente a impressora, devemos utilizar o ´escape´ chamado ´PASSTHROUGH´ do Windows e enviarmos a informação desejada diretamente.

Na documentação do Win32 SDK este escape é dado como obsoleto, mas enquanto utilizarmos impressoras matriciais que necessitem de ´códigos escape´ para certas funcionalidades, ele será necessário.´

Tem apenas um único exemplo de como usar esse kra, mas como eu nunca tinha visto nem escutado falar eu ainda tenho minhas duvidas. Alguem sabe como mando a informação p/impressora de salto de página através desse Passthrough?


Responder

Gostei + 0

16/01/2006

Macario

Não queira tentar com o Quick, pois será perda do seu tempo.

Faça por WriteLn mesmo muito mais facil e rapido.

quanto a impressora. voce deve setar via net use a porta lpt1 do micro que a contem instalada, eu uso desta maneira e não tenho problemas.

:arrow:


Responder

Gostei + 0

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

Aceitar