PDA

Ver la Versión Completa : Como se hace


omy
11-09-2003, 19:26:03
Hola a todos estaba trabajando y me tope con un error a ver si alguien me pidiera ayudar




procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
var i,o:integer;
control,nombre,resul :string;
com:Tobject;
com2:Tedit;
com3:tcontrol;
begin
// ---------------------------------------------------
o := form3.ComponentCount;
for i := 0 to form3.ComponentCount-1 do
begin
control := form3.Components[i].ClassName;
if control = 'TEdit' then
begin
resul := form3.Components[i].Name + '.text';
// aqui lo que no pude hace es que el valor de
resul concatenado con .text, lo convirtiera en
una macro, esto para poder saber el valor de
campo.

end;
end;
end;



Espero averme dado a enender, se trata de hacer macros, o algo como en php: eval , o con los signos $$, una solucion parecida
nota. Ejecutar codigo en tiempo de ejecucion.

Ruben_Cu
12-09-2003, 04:07:27
Hola omy, tu pregunta está un poco confusa, creo que por eso no te han contestado.
Si lo que quieres es tener en la variable resul el contenido del edit debes ubicar la propiedad text donde tienes la propiedad name, si el resto de lo que tienes hecho está bien tendras en resul el string contenido en el edit.
Creo que confundes el Name de la componente que es un string con la componente en sí que es un TComponent.
Debes profundizar un poco en OOP.
Espero haberte ayudado
Saludos

Rudi
12-09-2003, 05:15:54
Hola, a ver si entiendo basandome en tu pregunta y en la aclaratoria de Ruben.

1.- Tienes un solo Tedit en tu Form y Quieres saber que contiene ese edit?

o

2.-Tienes varios Tedit en tu form y quieres que resul guarde algo como:

Resul = 'Edit1=hola;Edit2=algo; ...Editn=noseque;'

siendo 'hola' el texto que contiene Edit1 y 'algo' el texto que contiene Edit2 y asi hasta tener el nombre y contenido de cada edit.

si es la primera sigue la sugerencia de Ruben

si es la segunda:

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
var
i : integer;
resul :string;
begin
Resul := '';
for i := 0 to form3.ComponentCount-1 do
if form3.Components[i].ClassName = 'TEdit' then
with form3.Components[i] as Tedit do
resul := Resul + Name + '=' + text + ';';
{haces lo que hagas con resul}
end;

espero que te sirva

omy
12-09-2003, 19:14:19
Gracias a los dos, la verdad es que no encantraba.


with ...... as ..... do


este era el que necesitaba, muchas gracias me salvastes de dejar un codigo extenso un amigo me dijo que si hay pero no sabia como se llamaba o como era, lo busque como eval...

bueno gracias......

como referencia el problema era que tengo mas de 30 tedit y necesitaba saber cual de ellos tienen valor y cuales no, ademas los valores se concatenaban junto con el nombre del boton

Rudi
12-09-2003, 20:02:03
Que bueno que te ayudó.

Mensaje original por omy
with ...... as ..... do

Solo como aclaratoria ya que me parece que estas muy claro con sentencias del lenguaje pascal/objectpascal.
la sentencia with es: with....do, el 'AS' lo utilizo como un typecast para tener acceso a los metodos del edit.
haciendo una equivalencia, seria igual decir:
form3.Components[i] as Tedit

que decir

Tedit(form3.Components[i])

por tanto seria igual:

with form3.Components[i] as Tedit do

que decir

with Tedit(form3.Components[i]) do

en dos palabras el 'AS' no pertenece al with...