GARANTIR DESCONTO

Fórum É possível alterar o valor de constantes? #176979

23/08/2003

0

Alguém conhece alguma forma de alterar o valor de constantes após serem declaradas? Tipo uma constante vale 1 e depois muda para 2 em tempo de execução.


Akelle Kara

Akelle Kara

Responder

Post mais votado

23/08/2003

É possível e se bem utilizado pode ser bem útil, se você tem um DCU com uma constante, mas não tem o respectivo PAS, você pode usar a [i:3c0f5b76f3]procedure[/i:3c0f5b76f3] abaixo e alterar a tal constante.

Eis o código:

procedure ChangeConst(const Constant; var Value; Size: Integer);
begin
  Move((@Value)^, (@Constant)^, Size);
end;


Exemplo de como usar a função:

procedure TForm1.Button1Click(Sender: TObject);
const
  TestStrConst: string = ´Valor inicial´;
  TestInteger: Integer = 1234;
var
  NewString: string;
  NewInteger: Integer;
begin
  // Exemplo para Strings:
  ShowMessage(´Antes da ChangeConst (TestStrConst): ´ + TestStrConst);
  NewString := ´Novo Valor´;
  ChangeConst(TestStrConst, NewString, SizeOf(string));
  ShowMessage(´Depois da ChangeConst (TestStrConst): ´ + TestStrConst);
  // Exemplo para Integers:
  ShowMessage(´Antes da ChangeConst (TestInteger): ´ + IntToStr(TestInteger));
  NewInteger := 5678;
  ChangeConst(TestInteger, NewInteger, SizeOf(Integer));
  ShowMessage(´Depois da ChangeConst (TestInteger): ´ + IntToStr(TestInteger));
end;



Cebikyn

Cebikyn
Responder

Gostei + 1

Mais Posts

23/08/2003

Aroldo Zanela

Colega,

Se isto fosse possível, não haveria sentido ser denominada de constante. Portanto, se precisa modificar o valor declare como variável.


Responder

Gostei + 0

23/08/2003

Akelle Kara

Valeu pessoal, era uma questão de curiosidade mesmo... agora eu sei que apesar de chamarem ´constantes´, elas não são tão constantes assim :D ...


Responder

Gostei + 0

23/08/2003

Cebikyn

agora eu sei que apesar de chamarem ´constantes´, elas não são tão constantes assim :D ...


Vivendo e aprendendo...


Responder

Gostei + 0

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

Aceitar