Fórum PrintDialog #285767

22/06/2005

0

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


Guilherme

Guilherme

Responder

Posts

22/06/2005

Marlon Spiess

Pra gerar arquivo de impressão tipo matricial, use os componente do insigne, são free e muito, muito, muito bons.

Boa sorte


Responder

Gostei + 0

22/06/2005

Guilherme

no momento nao a necessidade de usar componentes ate mesmo pq nao gosto mto mais valew !!!!!


Responder

Gostei + 0

22/06/2005

Marlon Spiess

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.


Responder

Gostei + 0

22/06/2005

Guilherme

me fala quais variaveis vc declaro e o tipo delas ai !!!


Responder

Gostei + 0

22/06/2005

Sandra

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:
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.


Responder

Gostei + 0

27/06/2005

Guilherme

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


Responder

Gostei + 0

27/06/2005

Guilherme

sobe

-------------------------------------------------
Nen sembre o que parece ser eh !!!!!!!!!!!!
-------------------------------------------------


Responder

Gostei + 0

27/06/2005

Massuda

Talvez [url=http://forum.clubedelphi.net/viewtopic.php?t=62545]este tópico[/url] seja útil para você.


Responder

Gostei + 0

05/07/2005

Guilherme

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


Responder

Gostei + 0

05/07/2005

Marcio.theis

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;



Responder

Gostei + 0

05/07/2005

Massuda

...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).


Responder

Gostei + 0

05/07/2005

Guilherme

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 !!!


Responder

Gostei + 0

05/07/2005

Massuda

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.


Responder

Gostei + 0

06/07/2005

Guilherme

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);



Responder

Gostei + 0

06/07/2005

Massuda

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.


Responder

Gostei + 0

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

Aceitar