Alguem tem o IOport ?
OLa !
Se alguem tiver o ioport para delphi 6 que relamente funcione pode me madar por favor ?
Grato Eduardo
Se alguem tiver o ioport para delphi 6 que relamente funcione pode me madar por favor ?
Grato Eduardo
Evdias
Curtidas 0
Respostas
Tpoeta
02/05/2003
Pega o ioPort em [url]http://www.delphi.eti.br/[/url]
Agora pra ele funcionar é outro esquema, andei olhando pela net e vi um artigo falando sobre isso... deixa eu repassá-lo...
[i:f64d9c97fe]Caso 1 - Para Delphi até versão 5
O primeiro caso, é que se você estiver rodando o Delphi até versão 5, então o problema é que o arquivo não está sendo mensionado no seu diretório de Library´s.
Resolva isso da seguinte forma:
Clique no Menu Tools, depois siga Environment Options->Selecione a guia Library e depois clique no botão para adicionar um novo Library Path.
Escreva $(DELPHI)SourceToolsAPI na caixa abaixo e depois clique am Add Dê Ok, e tente compilar o package novamente.
Caso2 - Delphi 6 e Delphi7
Ok, esse é o caso mais comum que existe.
Se você está usando uma versão mais nova do Delphi, provavelmente está tentando compilar um pacote que foi desenvolvido em uma versão antiga do Delphi.
Acontece, que a Borland deu uma ´mancada´ e mudou o nome do arquivo dsgnIntf.pas para Designintf.pas alegando ter motivos relacionados com a mudança na estrutura do próprio Delphi, e devido ao novo tipo de implementação da biblioteca de componentes inter-plataforma da Borland.
Assim sendo, se o seu pacote refere-se ao arquivo antigo (veja abaixo):
Uses
Windows, dsgnIntf, Forms etc
Nota: Você localizará facilmente qual arquivo se refere a ele, pois será o arquivo *.pas que vai dar o erro ... doohh!
E não adianta ir até este local e mudar só o nome do arquivo para algo do tipo:
Uses
Windows, Designintf, Forms etc
O problema é um pouco mais extenso, pois algumas funções foram movidas para outros lugares também.
O editor de propriedades por exemplo, foi parar numa unidade de nome DesignEditors.pas a as constantes foram parar juntamente com os menus em DesignMenus.pas e também as variantes foram de System.pas para a unidade de variantes Variants.pas
Se olharmos bem, veremos que foi uma forma da Borland dar uma ´organizada na casa´ emboras tenha sido omissa, na hora que deveria ter divulgado isso bem claro para os usuários, ou ainda na hora em que o Delphi afirma que está convertendo um package de uma versão antiga, para uma versão mais nova, deveria arrumar isso também automaticamente.
Mas bugs e mancadas à parte, vamos ao que interessa, A solução:
Vá até o arquivo que registra os componentes (O arquivo que está dando o erro).
Localize neste arquivo o local onde ele chama o arquivo dsgnIntf
Ex: Uses
Windows, Designintf, Forms etc
Agora, apague a entrada dsgnIntf e substitua por essas outras entradas:
-Designintf, DesignEditors, DesignMenus, Variants
Desta forma o nosso exemplo acima ficaria assim agora:
-Ex: Uses
Windows, Designintf, DesignEditors, DesignMenus, Variants, Forms etc
Nota: Cuidado pra não duplicar as entradas, verifique se o arquivo que você já está editando não contém por exemplo Variants na entrada Uses
Pronto, Isso deverá resolver o seu Problema.[/i:f64d9c97fe]
Aproveitando, se vc tem um windows com tecnologia NT, vc vai precisar de um programazinho para inibir a proteção da porta paralela, pegue em [url]www.rogercom.com[/url]
Espero que lhe ajude em algo. :roll:
Agora pra ele funcionar é outro esquema, andei olhando pela net e vi um artigo falando sobre isso... deixa eu repassá-lo...
[i:f64d9c97fe]Caso 1 - Para Delphi até versão 5
O primeiro caso, é que se você estiver rodando o Delphi até versão 5, então o problema é que o arquivo não está sendo mensionado no seu diretório de Library´s.
Resolva isso da seguinte forma:
Clique no Menu Tools, depois siga Environment Options->Selecione a guia Library e depois clique no botão para adicionar um novo Library Path.
Escreva $(DELPHI)SourceToolsAPI na caixa abaixo e depois clique am Add Dê Ok, e tente compilar o package novamente.
Caso2 - Delphi 6 e Delphi7
Ok, esse é o caso mais comum que existe.
Se você está usando uma versão mais nova do Delphi, provavelmente está tentando compilar um pacote que foi desenvolvido em uma versão antiga do Delphi.
Acontece, que a Borland deu uma ´mancada´ e mudou o nome do arquivo dsgnIntf.pas para Designintf.pas alegando ter motivos relacionados com a mudança na estrutura do próprio Delphi, e devido ao novo tipo de implementação da biblioteca de componentes inter-plataforma da Borland.
Assim sendo, se o seu pacote refere-se ao arquivo antigo (veja abaixo):
Uses
Windows, dsgnIntf, Forms etc
Nota: Você localizará facilmente qual arquivo se refere a ele, pois será o arquivo *.pas que vai dar o erro ... doohh!
E não adianta ir até este local e mudar só o nome do arquivo para algo do tipo:
Uses
Windows, Designintf, Forms etc
O problema é um pouco mais extenso, pois algumas funções foram movidas para outros lugares também.
O editor de propriedades por exemplo, foi parar numa unidade de nome DesignEditors.pas a as constantes foram parar juntamente com os menus em DesignMenus.pas e também as variantes foram de System.pas para a unidade de variantes Variants.pas
Se olharmos bem, veremos que foi uma forma da Borland dar uma ´organizada na casa´ emboras tenha sido omissa, na hora que deveria ter divulgado isso bem claro para os usuários, ou ainda na hora em que o Delphi afirma que está convertendo um package de uma versão antiga, para uma versão mais nova, deveria arrumar isso também automaticamente.
Mas bugs e mancadas à parte, vamos ao que interessa, A solução:
Vá até o arquivo que registra os componentes (O arquivo que está dando o erro).
Localize neste arquivo o local onde ele chama o arquivo dsgnIntf
Ex: Uses
Windows, Designintf, Forms etc
Agora, apague a entrada dsgnIntf e substitua por essas outras entradas:
-Designintf, DesignEditors, DesignMenus, Variants
Desta forma o nosso exemplo acima ficaria assim agora:
-Ex: Uses
Windows, Designintf, DesignEditors, DesignMenus, Variants, Forms etc
Nota: Cuidado pra não duplicar as entradas, verifique se o arquivo que você já está editando não contém por exemplo Variants na entrada Uses
Pronto, Isso deverá resolver o seu Problema.[/i:f64d9c97fe]
Aproveitando, se vc tem um windows com tecnologia NT, vc vai precisar de um programazinho para inibir a proteção da porta paralela, pegue em [url]www.rogercom.com[/url]
Espero que lhe ajude em algo. :roll:
GOSTEI 0
Tpoeta
02/05/2003
pode pegar o ioport também em [url]http://www.carlosnaves.com/delphi.php[/url]
GOSTEI 0
Dopi
02/05/2003
Nao se ajuda...
No projeto ACBr precisei usar a comunicação direta com a Porta AT do teclado para exibir msg em Teclados com Display (www.gertec.com.br)
Achei na NET uma funçao em Assembler para fazer a comunicação com as portas... Functiona bem no 98 mas no XP/NT como mencionado precisa de device drivers que ´quebrem´ o bloqueio do S.O.
O projeto ACBr tb é compativel com Linux, porém a instrução em Assembler não roda no Linux... então efetuando várias pesquisas, verifiquei que atraves do /dev/port é possivel efetuar acesso direto a qq porta tb em Linux (necessita privilégios de root)
Observe que é possivel usar qq endereço de porta porém ele deve ser informado em Decimal e nao Hexa...
Hex Dec
378 -> 888 - LPT1
60 -> 96 - Porta AT
No projeto ACBr precisei usar a comunicação direta com a Porta AT do teclado para exibir msg em Teclados com Display (www.gertec.com.br)
Achei na NET uma funçao em Assembler para fazer a comunicação com as portas... Functiona bem no 98 mas no XP/NT como mencionado precisa de device drivers que ´quebrem´ o bloqueio do S.O.
O projeto ACBr tb é compativel com Linux, porém a instrução em Assembler não roda no Linux... então efetuando várias pesquisas, verifiquei que atraves do /dev/port é possivel efetuar acesso direto a qq porta tb em Linux (necessita privilégios de root)
Observe que é possivel usar qq endereço de porta porém ele deve ser informado em Decimal e nao Hexa...
Hex Dec
378 -> 888 - LPT1
60 -> 96 - Porta AT
{-----------------------------------------------------------------------------
Lê 1 byte de uma porta de Hardware
Nota: - Essa funçao funciona normalmente em Win9x,
- XP /NT /2000, deve-se usar um device driver que permita acesso direto
a porta do Hardware a ser acessado (consulte o fabricante do Hardware)
- Linux: é necessário ser ROOT para acessar /dev/port
(use: su ou chmod u+s SeuPrograma )
---------------------------------------------------------------------------- }
{$WARNINGS OFF}
function InPort(PortAddr:word): byte;
{$IFDEF LINUX}
var Buffer : Pointer ;
FDevice : String ;
N : Integer ;
FHandle : Integer ;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
asm
mov dx,PortAddr
in al,dx
end;
{$ELSE}
FDevice := ´/dev/port´ ;
Buffer := @Result ;
FHandle := FileOpen(FDevice, fmOpenRead);
if FHandle <= 0 then
raise Exception.Create(´Erro abrindo: ´+FDevice+#10+10+
´Você deve ter direito de Leitura nesse diretório.´);
N := FileSeek( FHandle, PortAddr, 0 ) ;
if N <= 0 then
raise Exception.Create(´Erro ao acessar a porta: ´+IntToStr(PortAddr));
N := FileRead(FHandle, Buffer^, 1) ;
if N <= 0 then
raise Exception.Create(´Erro ao ler a porta: ´+IntToStr(PortAddr));
FileClose( FHandle );
sleep(1) ;
{$ENDIF}
end ;
{$WARNINGS ON}
{-----------------------------------------------------------------------------
Envia 1 byte para uma porta de Hardware
Nota: - Essa funçao funciona normalmente em Win9x,
- XP /NT /2000, deve-se usar um device driver que permita acesso direto
a porta do Hardware a ser acessado (consulte o fabricante do Hardware)
- Linux: é necessário ser ROOT para acessar /dev/port
(use: su ou chmod u+s SeuPrograma )
---------------------------------------------------------------------------- }
procedure OutPort(PortAddr: word; Databyte: byte);
{$IFDEF LINUX}
var Buffer : Pointer ;
FDevice : String ;
N : Integer ;
FHandle : Integer ;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
asm
mov al, Databyte
mov dx,PortAddr
out dx,al
end;
{$ELSE}
Buffer := @Databyte ;
FDevice := ´/dev/port´ ;
FHandle := FileOpen(FDevice, fmOpenWrite);
if FHandle <= 0 then
raise Exception.Create(´Erro abrindo: ´+FDevice+#10+10+
´Você deve ter direito de Escrita nesse diretório.´);
N := FileSeek( FHandle, PortAddr, 0 ) ;
if N <= 0 then
raise Exception.Create(´Erro ao acessar a porta: ´+IntToStr(PortAddr));
N := FileWrite(Fhandle, Buffer^, 1) ;
if N <= 0 then
raise Exception.Create(´Erro ao escrever na porta: ´+IntToStr(PortAddr));
FileClose( FHandle );
sleep(1) ;
{$ENDIF}
end ;
GOSTEI 0