Ir para conteúdo
Fórum Script Brasil
  • 0

Imprimindo em rede - LX300 - Delphi 7


tame

Pergunta

Tenho uma aplicacao feita em Delphi 7, e agora estou precisando colocar para imprimir em rede. A impressora que utilizo e uma Epson LX-300, tentei compartilhar a impressora mas não funcionou. Consegui imprimir utilizando o bloco de notas por exemplo mas quando utilizo a minha rotina de impressao não funciona. Utilizo um arquivo .ini com as configuracoes do sistema.

O nome do servidor e "Recepcao"

O nome da impressora no Servidor e "Generic / Text Only"

O nome do compartilhamento e "LXRecepcao"

O nome da impressora na maquina cliente e "Generic / Text Only em Recepcao" (não consigo alterar)

Compartilhei a impressora normalmente, utilizo nas duas maquinas o windows xp.

Com o caminho: "\\recepcao\Generic / Text Only\LPT1" ocorre o seguinte erro: "Project PSisMotel.exe raised exception class EInOutError with message 'I/O Error 53'. Process ..."

Com o caminho: "\\recepcao\Generic / Text Only",(sem \LPT1) ocorre o seguinte erro: "Project PSisMotel.exe raised exception class EInOutError with message 'I/O Error 53'. Process ..."

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Ferizinha, para funcionar o WriteLn para a LPT1 é necessário que a impressora na rede esteja "capturada" para a porta LPT1 do computador onde o programa está rodando.

Voce pode dar uma olhada nesta alternativa postada pelo nosso colega paulobergo, onde há uma parte comentada que explica como acessar a impressora diretamente na rede (leia ele, e teste)

Boa sorte

Link para o comentário
Compartilhar em outros sites

  • 0

Maravilha, estou consegundo imprimir em rede sem problemas utilizando o post do paulobergo.

Mas agora estou com outra duvida.

Consigo colocar os nomes das impressoras em um Combobox utilizando uma variavel do tipo TPrinter, mas o que preciso saber e como trazer o nome do compartilhamento e não o nome da impressora.

Link para o comentário
Compartilhar em outros sites

  • 0
Mas agora estou com outra duvida.

Consigo colocar os nomes das impressoras em um Combobox utilizando uma variavel do tipo TPrinter, mas o que preciso saber e como trazer o nome do compartilhamento e não o nome da impressora.

Ferizinha, será necessário fazer uso da função GetPrinter da API do Windows (ver Win32 Programmer's Reference) utilizando o nível 2 para obtermos a estrutura Printer_Info_2 que contém a informação desejada:

procedure TForm1.FormCreate(Sender: TObject);
begin
 // adiciona o nome das impressoras em um listbox
  ListBox1.Items.Assign(Printer.Printers);
end;

// ex. de botão para obter informações da impressora selecionada na lista
procedure TForm1.PrnInfoClick(Sender: TObject);
var
  PrnHandle :THandle;
  PrnInfo2 :PPRINTERINFO2;
  PrnInfoSize :DWord;
begin
 // se selecionada uma impressora na lista
  if ListBox1.ItemIndex >= 0 then
  begin
   // precisamos do handle PrnHandle para obter info sobre a impressora
    if OpenPrinter(PChar(ListBox1.Items[ListBox1.ItemIndex]), PrnHandle, nil) then
    begin
     // obtemos a quantidade de memória a alocar para o record a ser retornado
      GetPrinter(PrnHandle, 2, nil, 0, @PrnInfoSize);
      PrnInfo2 := AllocMem(PrnInfoSize);
      if GetPrinter(PrnHandle, 2, PrnInfo2, PrnInfoSize, @PrnInfoSize) then
        Label1.Caption := PrnInfo2^.pServerName +' | ' +
                          PrnInfo2^.pPrinterName +' | ' +
                          PrnInfo2^.pShareName
      else
        Label1.Caption := 'Falhou...';
      ClosePrinter(PrnHandle);
      FreeMem(PrnInfo2, PrnInfoSize)
    end;
  end;
end;

- caso a impressora não seja de rede, pServerName será nulo;

- caso a impressora não esteja compartilhada, pShareName será nulo.

Veja o help citado para saber que outras propriedades você pode obter desta estrutura (Printer_Info_2)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Cristiano --

O que tenho a dizer, baseado em minha experiência enviando impressão direto para um compartilhamento de rede é que não funciona com espaços no compartilhamento, por exemplo "\\servidor\nome da impressora", mude o nome do compartilhamento (na configuração da impressora do windows do micro que está fisicamente conectado a ela) para "\\servidor\nomedaimpressora", pois quando você manda imprimir ele tenta imprimir para "\\servidor\nome", ou seja, para no primeiro espaço encontrado.

Link para o comentário
Compartilhar em outros sites

  • 0
O que tenho a dizer, baseado em minha experiência enviando impressão direto para um compartilhamento de rede é que não funciona com espaços no compartilhamento, (...) , pois quando você manda imprimir ele tenta imprimir para "\\servidor\nome", ou seja, para no primeiro espaço encontrado.

Cristiano, é uma boa observação.

Em teoria, mesmo com nomes contendo espaços, seria possível realizar o mapeamento delimitando o caminho com áspas duplas, tipo: '\\"servidor\nome da impressora"' - mas, sem dúvidas é mais garantido se for utilizado nomes sem espaços.

Poderá haver, ainda, questões de segurança, caso o mapeamento da impressora esteja restrita à alguns usuários.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...