PDA

Ver la Versión Completa : Obtener el dato de un TEdit


chileno
23-04-2006, 21:12:15
hola ...
como puedo obtener el dato de TEdit que posee el foco entre varios

var
dato : string;

dato := (sender as TEdit). text // algo asi ...esto esta malo eso si solo de ejemplo....

dec
23-04-2006, 21:20:46
Hola,

¿Algo así?


if TEdit(Sender).Focused then
begin
{...}
end;

chileno
23-04-2006, 21:34:30
hola david
no es que sea pesao y que me digas todo lo que debo hacer...pero como obtengo el dato y lo paso a una variable?

roman
23-04-2006, 21:35:57
La propiedad ActiveControl de un formulario apunta al control que tenga el foco. Entonces yo haría algo como:


if (ActiveControl is TEdit) then
dato := TEdit(ActiveControl).Text;


// Saludos

chileno
23-04-2006, 21:47:55
que mas puedo decir..gracias a los dos en especial a roman...

dec
23-04-2006, 21:53:11
Hola,

No creo que seas pesado en absoluto, hombre. Ahora, que no me queda claro qué se trata de hacer... intuyo algo, pero, mi bola de cristal tiene nubes, como diría Richard Stallman en su castellano tan minúsculo como admirable.

Suponiendo que lo que te interese sea el contenido del "TEdit", esto es, el valor contenido en su propiedad "Text", discriminando además que dicho "TEdit" sea el que tenga el "foco de entrada"... queda por averiguar dónde quieres tomar el valor de dicha propiedad, en qué punto del programa.

Me explico. Supongamos un formulario con dos "TEdit" y un "TButton". En el evento "OnClick" del "TButton" queremos averiguar qué "TEdit" tiene el foco de entrada, con el fin de extraer el valor de su propiedad "Text" en una variable de tipo "string", por ejemplo.

Tenemos un problema: en el momento en que el evento "OnClick" del botón se dispare, el foco de entrada lo tendrá ya el propio botón... y no habrá "TEdit" con foco que valga. ;)

Ahora cambiemos el escenario un poco. Tenemos un formulario con dos "TEdit", pero, en lugar de un "TButton" contamos además de con los "TEdit" con un "TSpeedButton", el cual tiene, entre otras características, la de que no toma el foco de entrada.

Entonces, al hacer clic en dicho "TSpeedButton" sí que podremos averiguar si el foco se encuentra en alguno de los "TEdit" del formulario, y, en caso afirmativo, tomar el valor de su propiedad "Text". Vamos allá, aver si adelantamos algo:


var
TextoEdit: string;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if Edit1.Focused then
TextoEdit := Edit1.Text
else if Edit2.Focused then
TextoEdit := Edit2.Text
else
ShowMessage('Ningún Edit tiene el foco');

// Para ver el resultado...
ShowMessage(TextoEdit);
end;


Supongamos ahora que tenemos más de dos "TEdit" y no queremos liarnos con "if... else if...", podríamos recorrer los componentes del formulario, averiguar si el que correspoda es un "TEdit" y si además tiene el foco de entrada:


var
TextoEdit: string;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to ComponentCount-1 do
begin
if (Components[i] is TEdit) and TEdit(Components[i]).Focused then
TextoEdit := TEdit(Components[i]).Text;
end;

// Para ver el resultado...
ShowMessage(TextoEdit);
end;


Sin embargo, se al hilo de todo esto me he acordado de la propiedad "ActiveControl" del formulario en que se encuentren los "TEdit" que nos interesen. Dicha propiedad contiene el control (componente) que tiene el foco de entrada en el formulario, así pues, y, siguiendo con nuestro ejemplo de utilizar el evento "OnClick" del "TSpeedButton" podría quedarnos algo así:


var
TextoEdit: string;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if ActiveControl is TEdit then
TextoEdit := TEdit(ActiveControl).Text
else
ShowMessage('Ningún "TEdit" tiene el foco');

// Para ver el resultado...
ShowMessage(TextoEdit);
end;


No sé. Como ves la cosa puede plantearse de varias maneras y en buena medida dependerá de lo que estés tratando de llevar a cabo. No temas explayarte en su explicación, si lo crees oportuno. Yo espero haberte dado al menos alguna que otra posible idea. La solución es cosa tuya. ;)

freelance
11-05-2006, 00:54:04
Mejor usa ControlCount y no ComponentCount

freelance
11-05-2006, 00:55:49
Usa ControlCount en vez de ComponentCount
y Controls[i] en vez de Components[i]