Hola, tengo entendido que el evento OnSetText se dispara cuando se modifica la propiedad Text del campo. Esta propiedad se suele emplear cuando se hace uso de componentes data-ware puesto que los componentes data-ware se valen de esta propiedad para mostrar el contenido del campo en forma textual.
Se necesita emplear una respuesta al evento OnSetText, por lo que entiendo, cuando se hace uso de componentes data-ware y para indicar apropiadamente como interpretar el texto suministrado. Si no se implementa una respuesta a este evento, como bien señala Eduardo, no se asigna un valor, o cuanto mucho dependerá de como implementase el método SetText el objeto Field. ¿Porqué digo esto?
Internamente, dentro de la clase TField, cuando se asigna el contenido de la propiedad Text se dispara el método SetEditText. SetEditText realiza esta sentencias:
procedure TField.SetEditText(const Value: string);
begin
if Assigned(FOnSetText) then FOnSetText(Self, Value) else SetText(Value);
end;
¿Que es eso? Simplemente comprueba si se ha implementado una respuesta al evento OnSetText, si se implementó la ejecuta, en otro caso hace uso del método protegido y virtual (prestarle atención a esto) SetText.
La implementacion de SetText en TField está hecha de esta forma:
procedure TField.SetText(const Value: string);
begin
SetAsString(Value);
end;
Es decir que va intentar a guardar el valor del campo como formato texto; pero no... en realidad SetAsString en TField lo que hace es arrojar una excepción del tipo EAccessError, por tanto el contenido del campo queda en vacío:
procedure TField.SetAsString(const Value: string);
begin
raise AccessError('String'); { Do not localize }
end;
SetAsString está declarado como virtual. Y es así para que los descendientes de TField aprovechen este método para hacer las conversiones de forma apropiada al tipo texto.
Ahora bien. Como SetText es virtual, este método es aprovechado por los descendientes de TField para realizar diferentes operaciones con el texto suministrado con el parámetro a fin de ajustarse a las implementaciones al contexto (por ejemplo un TIntegerField realizará operaciones de texto a enteros) , y de este modo llamar a diversas implementaciones SetAs(....) (en el caso de TIntegerField por ejemplo SetText llamará a SetAsInteger).
Cuando no se implementa una respuesta a OnSetText y queda el campo en vacío se debe a que o bien el descendiente de TField no implementa su propio SetText y por tanto hace uso del SetText de la clase Base, o bien estamos trabajando con la clase base.
Disculpen por el rollo que me he soltado.
Saludos,