A ver si puedo explicarlo sencillamente o no
Código Delphi
[-]
procedure SetText(const Value: string)
procedure SetText(Value: string)
En principio, esos dos compadres son iguales, pero no es lo mismo.
En el primero, cuando dentro de SetText intentas hacer una asignación a Value, es decir, del tipo
Código Delphi
[-]
procedure SetText(const Value:String);
begin
Value := 'pepe que no';
end;
Aqui delphi en compilación no te deja modificar la variable, porque ha sido pasada con el Const.
En este otro caso:
Código Delphi
[-]
procedure SetText(Value:String);
begin
Value := 'pepe que si que si';
end;
Value, dentro de la funcion, te permite modificarla, pero creo que con esto queda más claro:
Código Delphi
[-]
var valor:string;
begin
valor := 'pepe';
SetText(valor);
showmessage(valor);
end;
valor tendrá 'pepe', dentro de la funcion SetText, se le da el valor 'pepe que si que si', pero solo dentro de la funcion SetText, cuando salga, es decir en el showMessage saldrá 'pepe'
Obviamente, si ponemos SetText(var Value:String);
se modifica el valor, y en el showMessage, saldrá 'pepe que si que si'
Por tanto, poner el "Const" es un seguro de vida, si quieres modificar la variable localmente o no.
Otra cosa distinta es cuando se pasan objetos:
Código Delphi
[-]
procedure SetText(const Value: Tcomponent)
procedure SetText(Value: Tcomponent)
En este caso se pasa un puntero (de 4 bytes) al objeto, por tanto, todos los objetos se pasan por referencia, da igual si pones
const, si no lo pones, o si lo pasas con
var. De las 3 formas podrás modificar las propiedades del objeto, el width, height, etc.
saludos