PDA

Ver la Versión Completa : Trasladar Procedure


L3st4t
16-10-2011, 02:15:22
Buenas....

Cree un codigo en el procedure del "boton1' resulta que no quiero copiar de nuevo el codigo en el event Enter del Edit. Como hago para llamar al procedure desde dicho evento en otras ocasiones lo he hecho pero ahorita no quiere funcionar con el método que usado antes.

Gracias

ecfisa
16-10-2011, 03:16:43
Hola L3st4t.

En realidad no te entiendo muy claramente... pero por lo que pude descifrar sería:

Edit1.OnEnter:= Button1.OnEnter
O de otro modo, posicionado en el TEdit, desde el Object Inspector -> Pestaña events -> OnEnter, y elegir: Button1.OnEnter

Un saludo.

L3st4t
16-10-2011, 03:39:05
Si algo así es lo que necesito.... Probé el código que me pasaste y no me llamo al evento.

Lo que pasa es que estaba tratando de llamar el Método desde el OnEnter pero me genera un error

dec
16-10-2011, 09:33:50
Hola,

En principio, si los eventos comparten el mismo número y tipo de argumentos, pueden compartirse entre diferentes objetos o instancias de los mismos tipos de objeto. Por lo demás, a mí me parece que falta algo de información. Sin ir más lejos, dices que si usas "el método" desde el "OnEnter" te "genera un error". ¿Pero qué error? Eso no lo dices. Yo creo que podrías copiar aquí al menos parte de tu código y señalar dónde encuentras el error. O alguna forma de reproducir dicho error, de manera que sepamos con qué estamos tratando.

Sapt_86
16-10-2011, 15:31:41
Intenta con esto:

procedure TForm1.btn1Enter(Sender: TObject);
begin
ShowMessage('HOLA');
end;

procedure TForm1.edt1Enter(Sender: TObject);
begin
btn1Enter(sender);
end;

L3st4t
16-10-2011, 21:45:05
Ok, Este es mi codigo

procedure TF_Principal.Button1Click(Sender: TObject);
Var Codigo: String;
begin
Codigo := EditCodigo.Text;
with DataM.MyQuery do
begin
SQL.Clear;
SQL.Add('SELECT * FROM SFixed');
SQL.Add('WHERE');
SQL.Add('FX_CODIGO = :Codigo');
SQL.Add('AND SFIXED.FX_TIPO = :9');
ParamByName('Codigo').AsString:= Codigo;
ParamByName('9').AsString:= '9';
RequestLive := true;
Open;
While EditCodigo.Text <> '' do
begin
IF (FieldByName('FX_CODIGO').AsString <> Codigo) then
begin
ShowMessage('El Accionista No Existe Pasar Por Administración');
L_Aprobado.Visible := False;
end;
IF (FieldByName('FX_CODIGO').AsString = Codigo) AND (FieldByName('FX_SALDO').AsCurrency > 0) then
begin
ShowMessage('El Accionista Presenta Deuda Pasar Por Administración');
L_Aprobado.Visible := False;
end;
IF (FieldByName('FX_CODIGO').AsString = Codigo) AND (FieldByName('FX_SALDO').AsCurrency = 0) then
begin
L_Aprobado.Visible := True;
end;
Break;
end;
IF EditCodigo.Text = '' then
begin
ShowMessage('Por Favor Ingrese ID del Accionista');
end;


end;
end;

Disculpen no me explique bien en cuanto el error..El error me lo da cuando copio ese mismo código en el evento Enter del edit.

Con los tips que me han dado aquí para llamar el método simplemente no hace nada. El programa corre perfectamente pero cuando le doy Enter no ejecuta nada.

Gracias por su colaboración

Saludos...

Sapt_86
17-10-2011, 02:10:58
Hola L3st4t.

Creo entender lo que intentas hacer, si lo que quieres es que al presionar la tecla enter en el edit se ejecute el procedimiento que esta asociado al evento OnClick del boton, debes hacer lo siguiente, en el evento OnKeyUp del edit:

procedure TForm1.edt1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key= vk_return) then
btn1.Click;
end;

o


procedure TForm1.edt1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key= vk_return) then
btn1.OnClick(Sender);
end;

Ambos deberian funcionar. El evento OnEnter de algunos objetos no hace referencia a que se ejecuta cuando presionas la tecla enter.

Espero haberte ayudado, de lo contrario dime que error te muestra.

Saludos.

defcon1_es
17-10-2011, 13:55:20
¿Y no sería más claro y sencillo crear un procedimiento con el código que necesites?

Ejp:


procedure TF_Principal.MiProcedimiento;
Var Codigo: String;
begin
Codigo := EditCodigo.Text;
with DataM.MyQuery do
begin
SQL.Clear;
SQL.Add('SELECT * FROM SFixed');
SQL.Add('WHERE');
SQL.Add('FX_CODIGO = :Codigo');
SQL.Add('AND SFIXED.FX_TIPO = :9');
ParamByName('Codigo').AsString:= Codigo;
ParamByName('9').AsString:= '9';
RequestLive := true;
Open;
While EditCodigo.Text <> '' do
begin
IF (FieldByName('FX_CODIGO').AsString <> Codigo) then
begin
ShowMessage('El Accionista No Existe Pasar Por Administración');
L_Aprobado.Visible := False;
end;
IF (FieldByName('FX_CODIGO').AsString = Codigo) AND (FieldByName('FX_SALDO').AsCurrency > 0) then
begin
ShowMessage('El Accionista Presenta Deuda Pasar Por Administración');
L_Aprobado.Visible := False;
end;
IF (FieldByName('FX_CODIGO').AsString = Codigo) AND (FieldByName('FX_SALDO').AsCurrency = 0) then
begin
L_Aprobado.Visible := True;
end;
Break;
end;
IF EditCodigo.Text = '' then
begin
ShowMessage('Por Favor Ingrese ID del Accionista');
end;
end;
end;


y lo llamas cuando y donde lo necesites:


procedure TF_Principal.edt1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key= vk_return) then
MiProcedimiento;
end;

procedure TF_Principal.edt1Enter(Sender: TObject);
begin
MiProcedimiento;
end;

L3st4t
17-10-2011, 16:31:28
Gracias Sapt_86 Por tu respuesta... Muy agradecido


defcon1_es no podria esta mas deacuerdo contigo de hecho antes de postear la pregunta ya lo habia hecho pero resulta que cuando llamo el procedimiento mas de una vez me da un error que al parecer es de memoria y se posiciona en el Whit DataM.MyQuery dopor ende la aplicación no me corre y por tal motivo poestee la pregunta para ve que estaba haciendo mal.

Entonces que podrá ser?

Saludos