Atribuir novo valor para Constante
09/03/2006
0
Estou usando recursos da porta paralela e tudo funciona bem. Agora preciso permitir que seja alterada a porta que esta sendo utiliza, tipo uso a LPT1 (378) mas precisamos mudar as configuraçoes para usar a LPT2 (278), tudo em runtime.
Coloquei um ComboBox para permitir essa mudança, mas quando tento alterar a configuração da contatante BASE, DADOS, etc...., o sistema retorna um erro:
[Error] Unit1.pas(48): ´:=´ expected but ´=´ found
Gostaria de saber também que tipo de dado é a constante BASE, DADOS, STATUS, ect...
Abaixo trecho do programa.
Abraços
Neto
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Bass, ExtCtrls;
{ Comentarios sobre porta paralela
Porta Base/Dados Status Controle
LPT1 0 x 0378 0 x 0379 0 x 037a
LPT2 0 x 0278 0 x 0279 0 x 027a
LPT3 0 x 03bc 0 x 03bd 0 x 03be
}
Const
Base = $378; //Endereço base da porta LPT;
Dados = Base+0; //Endereço para escrita dos dados;
Status = Base+1; //Endereço para leitura dos dados;
Controle = Base+2; //Endereço para escrita;
DadosEPP = Base+4; //ou Base+0, lê e escreve no modo EPP.
type
TForm1 = class(TForm)
ComboBoxPorta: TComboBox;
procedure ComboxPortaChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// aqui tento trocar de uma porta para outra
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
If ComboBox1.ItemIndex = 0 then // lpt1
begin
Base = $378; //Endereço base da porta LPT;
Dados = Base+0; //Endereço para escrita dos dados;
Status = Base+1; //Endereço para leitura dos dados;
Controle = Base+2; //Endereço para escrita;
DadosEPP = Base+4; //ou Base+0, lê e escreve no modo EPP.
end;
If ComboBox1.ItemIndex = 1 then // lpt2
begin
Base = $278; //Endereço base da porta LPT;
Dados = Base+0; //Endereço para escrita dos dados;
Status = Base+1; //Endereço para leitura dos dados;
Controle = Base+2; //Endereço para escrita;
DadosEPP = Base+4; //ou Base+0, lê e escreve no modo EPP.
end;
end;
end.
Neto
Posts
09/03/2006
Michael
Como a própria mensagem de erro diz, o operador de atribuição do Delphi é := e não =, este de comparação.
Outra coisa: constantes não devem ser alteradas, e mesmo que vc corrija o erro anterior o Delphi ainda reclamaria, deste vez com a mensagem:
Existem maneiras de se contornar isso, através de constantes tipadas. Mas no seu caso, como o valor muda em função da seleção do usuário, sugiro usar variáveis - ou campos de classe - para armazenar os valores desejados.
[]´s
09/03/2006
Rjun
09/03/2006
Adriano Santos
09/03/2006
Martins
Desde que sirva para ampliar o campo do conhecimento na linguagem será bem vinda, caso contrário é melhor parar.
Concordo com o [b:9f1f6d66a6]Michael [/b:9f1f6d66a6]q o melhor nesse caso é usar variaveis e com [b:9f1f6d66a6]RJun[/b:9f1f6d66a6], a constant deve ter seu valor inalterado, por isso antes de se iniciar um daqueles interminaveis debates, leiam o tópico sugerido pelo colega RJun.
[url]http://forum.clubedelphi.net/viewtopic.php?t=65628[/url]
O assunto foi abordado com muito cuidado, e explicações bem detalhadas.
09/03/2006
Adriano Santos
Desde que sirva para ampliar o campo do conhecimento na linguagem será bem vinda, caso contrário é melhor parar.
Concordo com o [b:0c911978e1]Michael [/b:0c911978e1]q o melhor nesse caso é usar variaveis e com [b:0c911978e1]RJun[/b:0c911978e1], a constant deve ter seu valor inalterado, por isso antes de se iniciar um daqueles interminaveis debates, leiam o tópico sugerido pelo colega RJun.
[url]http://forum.clubedelphi.net/viewtopic.php?t=65628[/url]
O assunto foi abordado com muito cuidado, e explicações bem detalhadas.[/quote:0c911978e1]
Assino em baixo.
09/03/2006
Motta
09/03/2006
Adriano Santos
:P, boa.
09/03/2006
Rjun
09/03/2006
Martins
Aqui e em quase todos os fóruns é desse jeito, por isso existem vários tópicos q apresentam soluções para o mesmo problema compartilhado por vários usuários (iniciantes, Intermediários, avançados).
At+
09/03/2006
Massuda
Não há necessidade de prosseguir a discussão sobre o assunto ser (ou não) ´batido´.
09/03/2006
Marco Salles
Michel disse:
Esta é a idéia
[b:8f72a9560d]Uma excelente utilização de constantes tipadas é no uso de contadores[/b:8f72a9560d]
olhe uma caracteristica incrivel da constante tipadas: :P :P
[color=red:8f72a9560d][b:8f72a9560d]Uma constante tipada tem escopo local, porém, seu tempo de vida é o mesmo da aplicação[/b:8f72a9560d][/color:8f72a9560d]
Isto mesmo se definirmos uma constante tipada ela so pode ser acessada dentro da rotina Porem seu tempo de vida é o mesmo da aplicação...Isto não é fantático
[b:8f72a9560d]vantagens :[/b:8f72a9560d]
1)Variavel Global que tb tem o seu tempo de vida = constantes tipadas podem ser acesseveis em qualquer unit que fizer menção a unit aonde esta variavel global foi declarada.. Isto contraria a POO
2)Constantes Tipadas so fazem sentido se forem definidas Localmente ou apos a secção implementation .. Nesse caso ela podera ser vista por toda a unit
3)Tempo de vida da aplicação...Este ajuda muito quem necessitar e gostar de POO
Veja um exemplo
Form1 e form2
Form1 auto criado e form2 Na secção auto valaible
Crie o form2 atraves do form1
application.CreateForm(TForm2,form2); Form2.showmodal; Form2:=nil; ******isto aui é para matar enterrar queimar , vigiar Freeandnil(Form2);// o Form2 .. Quero destrui-lo mesmo
e no form 2 um botão
procedure TForm2.Button1Click(Sender: TObject); const Tipada: integer = 0; begin inc(Tipada); //bloco de código ShowMessage(IntToStr(Tipada)); end;
a cada criação e destruição do form2 o Valor de Tipada e incrementada.. Isto não é Fantastico
4) Podemos ter varias constantes tipadas com o mesmo nome , se elas tiverem suas definiçoes localmente
5) defina a directiva {$J+} para que o compilador entenda
implementation {$R *.dfm} {$J+}
6) e tem mais....
10/03/2006
Neto
Vou de variável
Abraços a todos e bom dia com alegria.
Neto
Clique aqui para fazer login e interagir na Comunidade :)