Pessoal, descolei essa funcão na Net que retorna a porta e outras
informações da impressora selecionada em um PrintDialog. Mas o que me
interessa mesmo é saber a porta da impressora e estou tendo um problema
quando o nome da impressora é um pouco grande. Recebo um erro de Acess
Violation exatamente ao executar a linha "FreeMem(pDevice, cchDeviceName);".

Reparei nesses casos que a vezes a variável pDevice que é onde contem a
porta da Impressora, não trás o nome completo da impressora, mas mesmo
quando vem completo o erro também acontece.

Alguém poderia me ajudar?? Preciso muito que esta função funcione. Se alguém
tiver uma outra função que me retorne a porta da impressora selecionada eu
agradeceria. Inclusive estou precisando saber como passar essa impressora
para o quickreport sem ter que definir a impressora como padrão, ou seja
passo a porta sem alterar a impressora padrão.
 
Agradeço desde já qualquer ajuda!!!

Uso delphi 5.

Segue a função abaixo:
 
 
procedure TfrmConfirmarImpressao.btnSelecionaImpressoraClick(
  Sender: TObject);
 
var
   pDevice : pChar;
   pDriver : pChar;
   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 lStrLen(pDriver) = 0 then
      begin
         GetProfileString('Devices', pDevice, '', pDriver, MAX_PATH);
         pDriver[pos(',', pDriver) - 1] := #0;
      end;
 
      if lStrLen(pPort) = 0 then
      begin
         GetProfileString('Devices', pDevice, '', pPort, MAX_PATH);
         lStrCpy(pPort, @pPort[lStrLen(pPort)+2]);
      end;
 
      Self.label_impressora.Caption := StrPas(pDevice) ;
 
      FreeMem(pDevice, cchDeviceName);
      FreeMem(pDriver, MAX_PATH);
      FreeMem(pPort, MAX_PATH);
 
   end;
 
end;
 
 
 
----------------------------------------------------------------------------
-----------------------------
Marcelo A. Souza
Tel. (11) 9699-9938
----------------------------------------------------------------------------
----------------------------- 






-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a