PrintDialog
alguem sabe como faço isso aki ô :
if PrintDialog.execute then begin
AssignFile(f,PrintDialog.????????????????);
Rewrite(f);
end;
??????????= qual funçao q retorna a impressora escolhida ???????
valew
if PrintDialog.execute then begin
AssignFile(f,PrintDialog.????????????????);
Rewrite(f);
end;
??????????= qual funçao q retorna a impressora escolhida ???????
valew
Guilherme
Curtidas 0
Respostas
Marlon Spiess
22/06/2005
Pra gerar arquivo de impressão tipo matricial, use os componente do insigne, são free e muito, muito, muito bons.
Boa sorte
Boa sorte
GOSTEI 0
Guilherme
22/06/2005
no momento nao a necessidade de usar componentes ate mesmo pq nao gosto mto mais valew !!!!!
GOSTEI 0
Marlon Spiess
22/06/2005
bom tem tbm essa outra solução, na criação do form, vc popula uma listbox assim:
Qt := Printer.Printers.Count;
for i := 0 to Qt - 1 do
ListBox1.Items.Text := ListBox1.Items.Text + Printer.Printers.Strings[i];
então qdo um dblclick no item da listbox
x:=ListBox1.Items.Strings[ListBox1.ItemIndex];
sendo q x é o caminho da impressora selecionada.
Qt := Printer.Printers.Count;
for i := 0 to Qt - 1 do
ListBox1.Items.Text := ListBox1.Items.Text + Printer.Printers.Strings[i];
então qdo um dblclick no item da listbox
x:=ListBox1.Items.Strings[ListBox1.ItemIndex];
sendo q x é o caminho da impressora selecionada.
GOSTEI 0
Guilherme
22/06/2005
me fala quais variaveis vc declaro e o tipo delas ai !!!
GOSTEI 0
Sandra
22/06/2005
Guilherme,
Para o entendimento da dica do Marlon é simples. Veja.
O [b:9197e115b3]for[/b:9197e115b3] é um contador que varia de 0 (zero - poderia ser outro número também, mas nesse caso foi definido que seria 0) a [b:9197e115b3]n[/b:9197e115b3] (um número qualquer) e a variável [b:9197e115b3]i[/b:9197e115b3] vai receber as variações desses números ([b:9197e115b3]n[/b:9197e115b3]) do contador.
Traduzindo do inglês para o português:
for i := 0 to n do => para i variando de 0 até n, faça.
O [b:9197e115b3]Qt[/b:9197e115b3] foi criado para [b:9197e115b3]contar[/b:9197e115b3] as impressoras disponíveis. Nada impediria de se fazer direto assim:
Portanto, [b:9197e115b3]i[/b:9197e115b3] e [b:9197e115b3]Qt[/b:9197e115b3], são do tipo [u:9197e115b3]integer[/u:9197e115b3] => váriáveis inteiras.
O código seguinte (para quando der um duplo clique em algum item do ListBox) o [b:9197e115b3]x[/b:9197e115b3] irá receber [b:9197e115b3]uma das[/b:9197e115b3] impressoras disponíveis após ser selecionada. Então, ela deve ser do tipo [u:9197e115b3]string[/u:9197e115b3] => texto.
Resumindo tudo, veja como ficaria o código completo de acordo com o exemplo dado (acrescentei o ShowMessage somente para entender melhor):
Mais um detalhe. Deverá acrescentar a unit [b:9197e115b3]Printers[/b:9197e115b3] na lista de uses da seção interface.
Para o entendimento da dica do Marlon é simples. Veja.
O [b:9197e115b3]for[/b:9197e115b3] é um contador que varia de 0 (zero - poderia ser outro número também, mas nesse caso foi definido que seria 0) a [b:9197e115b3]n[/b:9197e115b3] (um número qualquer) e a variável [b:9197e115b3]i[/b:9197e115b3] vai receber as variações desses números ([b:9197e115b3]n[/b:9197e115b3]) do contador.
Traduzindo do inglês para o português:
for i := 0 to n do => para i variando de 0 até n, faça.
O [b:9197e115b3]Qt[/b:9197e115b3] foi criado para [b:9197e115b3]contar[/b:9197e115b3] as impressoras disponíveis. Nada impediria de se fazer direto assim:
for i := 0 to Printer.Printers.Count - 1 do
Portanto, [b:9197e115b3]i[/b:9197e115b3] e [b:9197e115b3]Qt[/b:9197e115b3], são do tipo [u:9197e115b3]integer[/u:9197e115b3] => váriáveis inteiras.
O código seguinte (para quando der um duplo clique em algum item do ListBox) o [b:9197e115b3]x[/b:9197e115b3] irá receber [b:9197e115b3]uma das[/b:9197e115b3] impressoras disponíveis após ser selecionada. Então, ela deve ser do tipo [u:9197e115b3]string[/u:9197e115b3] => texto.
Resumindo tudo, veja como ficaria o código completo de acordo com o exemplo dado (acrescentei o ShowMessage somente para entender melhor):
procedure TForm1.FormCreate(Sender: TObject); Var Qt, i: integer; begin Qt := Printer.Printers.Count; for i := 0 to Qt - 1 do ListBox1.Items.Text := ListBox1.Items.Text + Printer.Printers.Strings[i]; end; procedure TForm1.ListBox1DblClick(Sender: TObject); var x: string; begin x := ListBox1.Items.Strings[ListBox1.ItemIndex]; ShowMessage(x); end;
Mais um detalhe. Deverá acrescentar a unit [b:9197e115b3]Printers[/b:9197e115b3] na lista de uses da seção interface.
GOSTEI 0
Guilherme
22/06/2005
o modo que vc´s me passaram nao indica o caminho da impressora ai no list box esta ficando assim : epson lx-300 em servidor mas o caminho dela é \\servidor\epsonlx- !!!!!! é isso q necessito neste momento !!!!
valew
valew
GOSTEI 0
Guilherme
22/06/2005
sobe
-------------------------------------------------
Nen sembre o que parece ser eh !!!!!!!!!!!!
-------------------------------------------------
-------------------------------------------------
Nen sembre o que parece ser eh !!!!!!!!!!!!
-------------------------------------------------
GOSTEI 0
Massuda
22/06/2005
Talvez [url=http://forum.clubedelphi.net/viewtopic.php?t=62545]este tópico[/url] seja útil para você.
GOSTEI 0
Guilherme
22/06/2005
a dica q nosso amigo massuda passou foi util so q ainda nao deu certo 100¬ as funcoes nao pegam a porta das impressoras q estao na rede sera q alguem sabe alguma rotina q consiga pega a porta das impressoras da rede e tbm locais ex
\\servidor\epsonlx-
lpt1
lpt2
valew
\\servidor\epsonlx-
lpt1
lpt2
valew
GOSTEI 0
Marcio.theis
22/06/2005
outra forma
procedure TForm1.BitBtn1Click(Sender: TObject); var pDevice, pDriver, pPort: pChar; hDMode: THandle; begin if PrintDialog1.Execute then begin GetMem(pDevice, cchDeviceName); GetMem(pDriver, MAX_PATH); GetMem(pPort, MAX_PATH); Printer.GetPrinter(pDevice, pDriver, pPort, hDMode); if copy(pDevice,1,2) = ´\\´ then Application.MessageBox(PChar(´Impressora selecionada: ´ + pDevice),´Impressora´,MB_OK or MB_APPLMODAL or MB_ICONINFORMATION) else Application.MessageBox(PChar(´Impressora selecioanda: ´ + copy(pPort,1,Length(pPort) - 1)),´Impressora´,MB_OK or MB_APPLMODAL or MB_ICONINFORMATION); FreeMem(pDevice, cchDeviceName); FreeMem(pDriver, MAX_PATH); FreeMem(pPort, MAX_PATH); end; end;
GOSTEI 0
Massuda
22/06/2005
...as funcoes nao pegam a porta das impressoras q estao na rede...
Não tenho muita experiência nisso, posso estar enganado, mas o código que você está usando para imprimir só funcionará com impressoras de rede se elas estiverem mapeadas para alguma porta LPT local do micro; não há como você acessar a porta da impressora de um micro na rede. Acho que a alternativa seria gerar um arquivo texto e copiar o arquivo para a porta de impressora especificada (nesse caso, não precisa mapear a impressora em alguma porta local do micro).GOSTEI 0
Guilherme
22/06/2005
sim esta mapeada como lpt1:
so q hora q ponho AssignFile(f,´lpt1:´);
tbm nao funciona o prog trava
e quando ponho AssignFile(f,´\\servidor\epsonlx-´); //é o endereço na rede
imprimi certinho intao quando a impressora estiver na rede tenho q saber o caminho dela na rede nao sua porta !!!!
espero ter esplicado melhor !!!
so q hora q ponho AssignFile(f,´lpt1:´);
tbm nao funciona o prog trava
e quando ponho AssignFile(f,´\\servidor\epsonlx-´); //é o endereço na rede
imprimi certinho intao quando a impressora estiver na rede tenho q saber o caminho dela na rede nao sua porta !!!!
espero ter esplicado melhor !!!
GOSTEI 0
Massuda
22/06/2005
e quando ponho AssignFile(f,´\\servidor\epsonlx-´); //é o endereço na rede
imprimi certinho intao quando a impressora estiver na rede tenho q saber o caminho dela na rede nao sua porta !!!!
Estou sem saber afinal qual seu problema... a função GetCurrentPrinterPort que postei no tópico que citei faz exatamente o que você quer, ou seja, retorna o nome da porta para impressoras locais e o caminho na rede para impressoras da rede.GOSTEI 0
Guilherme
22/06/2005
cara quando usso a funçao q vc passou numa impressora q esta na rede o retorno é lpt1: so q nao ta imprimindo na impressora usando essa esse retorno o codigo e uso com sua funçao é :
if PrintDialog1.Execute then AssignFile(f,GetCurrentPrinterPort);
GOSTEI 0
Massuda
22/06/2005
cara quando usso a funçao q vc passou numa impressora q esta na rede o retorno é lpt1: so q nao ta imprimindo na impressora usando essa esse retorno...
Já experimentou configurar a impressora sem mapear na LPT? Me parece que o problema é o mapeamento, já que você mesmo disse que se tentar fazer Assign(f, ´LPT1:´) não funciona.GOSTEI 0
Guilherme
22/06/2005
realmente o problema era esse !!!!
valeu galera !!!!
valeu galera !!!!
GOSTEI 0
Guilherme
22/06/2005
so mais uma perguntinha !!!!
nao tem como imprimir usando writeln usando a impressora mapeda , si nao vo te q reinstalar a impressora na rede toda !!!!!
nao tem como imprimir usando writeln usando a impressora mapeda , si nao vo te q reinstalar a impressora na rede toda !!!!!
GOSTEI 0