Gostaria de aproveitar para agradecer e parabenizar o Maligno (leia-se Benigno) pela ótima lib e pelo tempo gasto em ajudar aos colegas !
Valeuuuuuuuuuuuuuuuuuu !!!! :)Pos :{ -:]
Obrigado em nome de todos do fórum !
Marcelo

Moderador: Moderadores
Eu gostaria de exemplificar e espero não dar a impressão de ser grosseiro no exemplo por ser breve na idéia:Maligno escreveu:Não. O emulador tem de ser (e é) fiel ao alvo da emulação...
Tudo bem, porém está sujeito a ser driblado pelo usuário na hora de execução.Maligno escreveu:Porque? Basta executar o programa novamente, recolocando o tÃtulo.
Eu até iria abrir mão, porque também acho que se usuário quer sacanear... também assim é demais !!!. Mas é que no WIN98 esta função não está funcionando corretamente. Ela as vezes funciona momentaneamente e mesmo ainda a sessão não te sido fechada, retorna o nome do tÃtulo original. Eu poderia usar a função do Dave OL_95VMTITLE() que roda bem em 95 e 98. Porém... preciso saber a versão do WINDOWS. E essa outra questão (da versão do Windows) não é tão simples assim.Maligno escreveu:Ao executá-lo, o tÃtulo é trocado. Ao encerrar e executar de novo o tÃtulo retorna, como antes. Não é isso?
Isso me ocorreu uma vez e não conseguà reporduzir o mesmo caso e nem tentei mais (usando o APPTITLE). Eu tinha aberto duas sessões de PROMPT-MSDOS e quando accionei o gerenciador de tarefas vi que estava os dois PROMPT-MSDOS e mais uma tarefa com o nome que eu tinha dado para uma das janelas. Mas não abriu nenhuma janela extra, simplesmente foi uma traefa que inclusive não conseguà finalizar (tive que resetar).Maligno escreveu:Não estou entendendo mais nada. Quando isso ocorria, uma outra janela era aberta? Que função você utilizava no momento? A de troca de tÃtulo?
Essa solução seria o WinFullScr() que você postou para WCARDOSO (sobre ICONE NO XP) ?. Mas lembre que a minha sugestão não seria alternar o modo de exibição através do WAPI (que acho isto muito mais dificil) e sim identificar se a sessão está em modo TEXTO ou JANELADO escrevendo o resultado num arquivo texto.Maligno escreveu:...utiliza uma interrupção chamada Multiplex, que não funciona em 32 bits... Postei o link para um colega
Pablo César escreveu:A impressão que eu tenho dessa emulação (mesmo sem conhece-la) é como um fusca rodar num free-way.
Mas é que no WIN98 esta função não está funcionando corretamente. Ela as vezes funciona momentaneamente e mesmo ainda a sessão não te sido fechada, retorna o nome do tÃtulo original. Eu poderia usar a função do Dave OL_95VMTITLE() que roda bem em 95 e 98. Porém... preciso saber a versão do WINDOWS. E essa outra questão (da versão do Windows) não é tão simples assim.
Existem vários motivos em que nos vemos com a necessidade de saber a versão do WINDOWS para trabalhar de forma diferenciada conforme cada versão. E a criação de uma função em C seria o mais recomendado, porque o uso do comando do sistema operacional VER, não funciona em todas a situações.
#include "macros.ch"
WAPIExeDir(".") // extrai WAPI.EXE para a pasta corrente
EraseWAPI(_kTRUE) // função nova: se TRUE, o WAPI.EXE será
apagado depois de utilizado.
clear
aInfo := GetWinInfo()
? "Platform: " + aInfo[1]
? "ID......: " + aInfo[2]
? "Pack....: " + aInfo[3]
? "Version.: " + aInfo[4]
?
/*
SaÃda para o meu XP real
---------------------------------
Platform: NT
ID......: Windows XP Professional
Pack....: Service Pack 2
Version.: 5.1.2600
SaÃda para o Windows 98 virtual
---------------------------------
Platform: 9X
ID......: Windows 98 SE
Pack....: A
Version.: 4.10.67766446
*/
Mas lembre que a minha sugestão não seria alternar o modo de exibição através do WAPI (que acho isto muito mais dificil) e sim identificar se a sessão está em modo TEXTO ou JANELADO escrevendo o resultado num arquivo texto.
Maligno, quando você menciona: "Ela utiliza uma interrupção chamada Multiplex, que não funciona em 32 bits. Isso nem é mais problema." Você quer dizer que em WIN98 você conseguiria detectar se está em modo texto ?.
sygecom escreveu:Tche, atraves dessa WAPI.LIB eu consigo imprimir em impressoras USB ?? Se sim como faço isso....????
if PrintFile("HP LaserJet 1022","REPORT.TXT","TITULO NO SPOOLER")
? "Impressão (modo RAW) encaminhada para o spooler.
?
quit
end
? "Houve um erro qualquer..."
? "Basta verificar o retorno da função WAPIError()."
?
set date british
set century on
PrintFile("#,"REPORT.TXT")
Jah baixei o pacote jah dei uma olhada nos exemplos de impressão mas a unica coisa q consigo é enviar o arquivo para a fila de impressão....mas acreditem se quiser ele não imprime e nem sai da fila de impressão.
Jah toh passando a usar diversas das funções dessa LIB...como a do X das janelas,Titulo da Janela,Tela cheia e alguns Sons...
Sim, é possÃvel. Mas apenas no modo RAW (você é quem deverá formatar o texto). Testei com uma HP LaserJet 1022 USB. Para fazer isso é muito simples. Direcione sua impressão para um arquivo e execute a função de impressão. Supondo que seu arquivo se chama REPORT.TXT:
EXEMPLO 01
SET DEVICE TO PRINT
IF NA TELA="S"
SET PRINT TO USB.TXT
ELSE
SET PRINT TO LPT1
ENDIF
@ prow()+1,00 SAY "IMPRIMINDO"
@ prow()+1,00 SAY "IMPRIMINDO"
@ prow()+1,00 SAY "IMPRIMINDO"
SET PRINTER TO
set device to screen
NETCANCEL("LPT1")
IF TELA="S"
EDICAO("USB.TXT") // VISUALIZAR O ARQUIVO TEXTO NO VIDEO
ENDIF
return
FUNC TESTE
local cFile := UniqFName(WAPITmpDir())
local cBuff
local nRet
cPrtName="HP1410"
set date british
set century on
cRptTitle="clipper.report@"+DtoC(Date())+","+Time()
PRIVATE cRptFile:="USB.TXT"
WAPIError(_kERROR_NONE)
if cPrtName=_kVOID .or. cRptFile=_kVOID .or. !File(cRptFile)
WAPIError(_kERROR_PARAMETERS)
return _kFALSE
end
if RunWAPICmd("-PRINT:"+Quote(cPrtName )+_kARGS_SEP+;
Quote(cRptFile )+_kARGS_SEP+;
Quote(cRptTitle)+_kARGS_SEP+;
Quote(cFile ) )
if !ReadRetFile(cFile,@cBuff)
return _kFALSE
end
end
nRet := Val(cBuff)
WAPIError(nRet)
return (nRet=_kERROR_NONE)
PrintFile("#","USB.TXT")
o que seria impressão em MODO RAW ???
No exemplo Abaixo o arquivo vai para a impressora HP-PSC-1410 diz que esta imprimindo mas não imprime nd e não aceita cancelar a impressão da impressora.(Peguei o exemplo abaixo no PRINT1.PRG)
Esse Exemplo Abaixo nem se quer aparece na Impressora o arquivo !!!!PrintFile("#","USB.TXT")
Você pôde testar em outra máquina?
Bom, se não vai para o spooler, aà sim há um erro. Tentou pegar uma lista de impressoras instaladas? Use a função GetPrinters() para uma lista completa e GetDefPrinter() para saber qual está configurada como default
Aliás, qual Windows você está usando?
. Aliás, um lembrete: não se incomode em remover os espaços entre nomes de impressoras. O WAPI não se perderá nisso.
Peguei a lista de Impressoras e coloquei num DBF deu tudo certo....consegui achar a impressora padrão....mas igaul não funciona quando mando imprimir pelo comando PrintFile("cPrtName","USB.TXT")
Acho que você quis dizer: PrintFile(cPrtName,"USB.TXT"), sem as aspas, não é? :)
Tente também PrintFile(GetDefPrinter()[1],"USB.TXT"), que tem o mesmo efeito (pra mim, pelo menos) que PrintFile("#","USB.TXT"). Aliás, o efeito é o mesmo, mas os caminhos são diferentes.
FUNC TESTE // IMPRIMIR EM USB
local cFile := UniqFName(WAPITmpDir())
local cBuff
local nRet
SELE 1
USE C:\IMP ALIAS IMP SHARED // ARQUIVO ONDE ESTA GRAVADO A IMPRESSORA PADRÃO
SELE IMP
cPrtName=IMP
set date british
set century on
cRptTitle="clipper.report@"+DtoC(Date())+","+Time()
PRIVATE cRptFile:="USB.TXT" // CAMINHO DO ARQUIVO
WAPIError(_kERROR_NONE)
if cPrtName=_kVOID .or. cRptFile=_kVOID .or. !File(cRptFile)
WAPIError(_kERROR_PARAMETERS)
return _kFALSE
end
if RunWAPICmd("-PRINT:"+Quote(cPrtName )+_kARGS_SEP+;
Quote(cRptFile )+_kARGS_SEP+;
Quote(cRptTitle)+_kARGS_SEP+;
Quote(cFile ) )
if !ReadRetFile(cFile,@cBuff)
return _kFALSE
end
end
nRet := Val(cBuff)
WAPIError(nRet)
return (nRet=_kERROR_NONE)
Agora no modo mais simples que é chamando a função PrintFile(GetDefPrinter()[1],"USB.TXT") ou PrintFile(cPrtName,"USB.TXT") não tem jeito...
existe alguma possibilidade de imprimir em modo CONDENSADO pela WAPI.LIB ???
NO WINDOWS FUNCIONA TUDO CERTO
O que você quer dizer com isso? Você está tentando usar no DOS puro?
Que cois mais esquisita. Um nome de impressora é sempre um nome de impressora. Não importa se o nome vem de uma função ou de um DBF. Se for o nome certo, tem que imprimir. Você tentou ver no seu cliente qual é o resultado da função GetDefPrinter()? Aliás, qual é o nome da impressora?
Tecnicamente sim. Mas eu não quero vincular o WAPI ao código de nenhuma impressora. Senão acabaria virando gambiarra. O melhor seria fazer uma LIB à parte, para abstração dos comandos de impressão. Nada difÃcil.
Retornar para Ferramentas de Apoio
Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes