Fórum Tem como alterar em RUN - TIME o valor de uma constante??? #288632
19/07/2005
0
ou se tem como alterar os dados de array static....
Agradeço antecipadamente desde já...
Cabelo
Curtir tópico
+ 0Posts
19/07/2005
Motta
Já que vai mudar use uma variável.
Gostei + 0
19/07/2005
Kapak
Const Int7:Integer = 7; var p:PChar; Int8:Integer; begin ShowMessage(IntToStr(Int7)); p := @Int7; Int8 := 8; Move(Int8, p^, 4); ShowMessage(IntToStr(Int7)); end;
Gostei + 0
19/07/2005
Massuda
const K: Integer = 7; ... K := 8; ...
Com essa opção marcada, toda constante cujo tipo seja declarado (no exemplo, K é Integer) pode ter seu valor alterado. Independente se essa opção está ou não marcada, este código...
const K = 7; ... K := 8; ...
Gostei + 0
19/07/2005
Motta
As soluções citadas são legais do ponto de vista acadêmico para entender como as coisas funcionam mas na prática não seria melhor simplificar ??!!
Kiss (Keep it simple student) já disse alguém
Gostei + 0
19/07/2005
Rjun
então somos dois loucos...acho que constante tem esse nome por algum motivo...
Gostei + 0
19/07/2005
Daemon
...flws
Gostei + 0
19/07/2005
Massuda
Que eu saiba, isso tem apenas dois usos...[list:1f2be9339a][*:1f2be9339a]compilar código antigo que usava isso para compensar o fato do TP/Delphi não inicializar automaticamente variáveis comum determinado valor escolhido pelo programador (sei que o Delphi hoje faz isso, mas ele não fazia isso nas primeiras versões)[*:1f2be9339a]simular (usando uma terminologia estilo C) uma variável local estática, isto é, algo como uma variável global mas com escopo reduzido (normalmente o escopo dessa variável seria uma function ou procedure)[/list:u:1f2be9339a]
Gostei + 0
19/07/2005
Cabelo
Adorei colocar em pauta este assunto, pois já ví que é um assunto polêmico..
Agradeço muito a ajuda de todos..
Entre tantos, que optaram por solucionar o problema estão os que opnaram pelo uso de variáveis, sei que é o correto e é assim que eu uso nos meus sistema..
mas acho que vocês não entenderam a minha questão.. a questão é :
Existe alguma forma de manipular estas constantes criadas em desing-time, alterá-las em runtime, e elas permanecerem mudadas, isto é, quero saber se dá pra usar uma UNIT como banco de dados????
Armazenando dados nas constantes, para isso seria necessário mudar o valor atribuido inicialmente a uma constante, ou um static array...
acredito que deve ser assim que um BD funciona, por isso postei esta idéia..
Gostei + 0
19/07/2005
Massuda
Gostei + 0
19/07/2005
Kapak
const rFim_Mes:array[1..12] of Byte = (31,00,31,30,31,30,31,31,30,31,30,31);
Ao passo que declarar uma variável, teria-se que alimentar os elementos um a um.
Gostei + 0
19/07/2005
Cabelo
Massuda.. é exatamente isso.. gostaria de saber se é possível..
const rFim_Mes:array[1..12] of Byte = (31,00,31,30,31,30,31,31,30,31,30,31);
Kapak
este é um bom exemplo, você tem idéia de como fazer isso ?
Gostei + 0
19/07/2005
Massuda
... é exatamente isso.. gostaria de saber se é possível..[/quote:a6cae074f3]Não tem como fazer isso. Um dos motivos é que não é possível alterar o conteúdo de um arquivo em execução (no caso, seu programa).
Talvez outras idéias surjam se você explicar melhor o que pretende fazer.
Gostei + 0
19/07/2005
Daemon
2. quanto à questão do ultimo dia do mes, ainda assim não é necessário se fazer a modificação de constante, pois existem outras formas mais praticas de ser fazer isso;
3. o que vc queria, no caso, não seria alterar a sua constante, mas sim reescrever o código no que diz respeito ao valor dessa constante;
Gostei + 0
19/07/2005
Kapak
var p:PChar; begin p := @rFim_Mes[2]; p^ := 28; end;
Gostei + 0
19/07/2005
Cabelo
É exatamente esta minha pergunta.. tem como??
var p:PChar; begin p := @rFim_Mes[2]; p^ := 28; end;
Fiz o teste aqui e funcionou bem, já tinha a tempos trabalhado com ponteiros, e acessos físicos àos endereços de memória..
Mas minha pergunta é...
se eu fizer isso, fechar o programa, e depois abrir, como faço para manter este mesmo valor para a segunda posição?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)