Atribuir novo valor para Constante

09/03/2006

0

Olá a todos.
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

Neto

Responder

Posts

09/03/2006

Michael

Olá!

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:

Left side cannot be assign to


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


Responder

09/03/2006

Rjun

Constante tem esse nome por algum motivo, mas se você quer realmente alterar, veja esse [url=http://forum.clubedelphi.net/viewtopic.php?t=65628]tópico[/url].


Responder

09/03/2006

Adriano Santos

Nossa, vamos entrar em um outra longa discussão, será?


Responder

09/03/2006

Martins

[quote:9f1f6d66a6=´Adriano Santos´]Nossa, vamos entrar em um outra longa discussão, será?[/quote:9f1f6d66a6]

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.


Responder

09/03/2006

Adriano Santos

[quote:0c911978e1=´Adriano Santos´]Nossa, vamos entrar em um outra longa discussão, será?


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.


Responder

09/03/2006

Motta

[img:92ab20b242]http://comercial.redeglobo.com.br/imagens_usr/vale_pena_logo.jpg[/img:92ab20b242]


Responder

09/03/2006

Adriano Santos

[img:203a6177f2]http://comercial.redeglobo.com.br/imagens_usr/vale_pena_logo.jpg[/img:203a6177f2]



:P, boa.


Responder

09/03/2006

Rjun

Tem gente q parece q tem preguiça de usar a ferramenta de pesquisa.


Responder

09/03/2006

Martins

Tem gente q parece q tem preguiça de usar a ferramenta de pesquisa.


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+


Responder

09/03/2006

Massuda

Senhores,

Não há necessidade de prosseguir a discussão sobre o assunto ser (ou não) ´batido´.


Responder

09/03/2006

Marco Salles

Senhores , vamos com calma

Michel disse:
Existem maneiras de se contornar isso, através de constantes tipadas


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


Responder

10/03/2006

Neto

Ok pessoal, obrigado pelas dicas.
Vou de variável
Abraços a todos e bom dia com alegria.
Neto


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar