Fórum Problemas p/imprimir #308445
09/01/2006
0
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
Curtir tópico
+ 0Posts
10/01/2006
Fabiano_aprendiz
Alguma dica??
Gostei + 0
10/01/2006
Anfm
Gostei + 0
10/01/2006
Adriano Santos
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?
Gostei + 0
10/01/2006
Marcio.theis
Gostei + 0
10/01/2006
Fabiano_aprendiz
Agradeço a todos.
Gostei + 0
10/01/2006
Fabiano_aprendiz
AssignFile(Texto,´strNomImp´);
Rewrite(Texto);
Writeln(Texto,#27675150);
CloseFile(Texto);
Tem como?
Gostei + 0
10/01/2006
Aerreira
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.
Gostei + 0
11/01/2006
Fabiano_aprendiz
Gostei + 0
11/01/2006
Aerreira
Gostei + 0
11/01/2006
Fabiano_aprendiz
Gostei + 0
11/01/2006
Aerreira
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á.
Gostei + 0
11/01/2006
Aerreira
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.
Gostei + 0
11/01/2006
Fabiano_aprendiz
Gostei + 0
16/01/2006
Fabiano_aprendiz
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?
Gostei + 0
16/01/2006
Macario
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:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)