Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como hacer para que una funcion regrese varios valores (https://www.clubdelphi.com/foros/showthread.php?t=54053)

jangel_ramirezm 07-03-2008 17:29:04

Como hacer para que una funcion regrese varios valores
 
Hola saludos a todos
y antes que nada gracias a todos por tomarse el tiempo de leer este hilo
si alguien pudiera ayudarme(por favor ) mil gracias
esta es mi Duda : Tengo Un formulario que quiero utlilizar para seleccionar un rango de fechas( este regresa un valor "True" si se da click en el botón "Si" o "false" si se da click en el botón "No") y la funcion
donde lo mando llamar recibe como parametros a demás de otros las fechas
mi duda es ¿como le regreso el valor de cada fecha a la variable correspondiente ?
aqui muestro el codigo que uso :


Código Delphi [-]
function Input2Fechas(Caption:String;Msg:String;FechaI,FechaF:TDateTime ):Boolean;
var FF:TfrmInput2fechas ;
begin
FF:=TfrmInput2fechas.Create(nil);
FF.Caption:=Caption;
FF.lblTexto.Caption:=Msg;
FF.ShowModal;
FechaI:=FF.txtInicio.date;
FechaF:=FF.txtFin.date;
result:=FF.Resultado;
FF.Destroy;
end;









Este es un ej. de como quiero utilizar las fechas


Código Delphi [-]
procedure TForm1.btnpruebaClick(Sender: TObject);
var
Fecha1,Fecha2:TDate;
begin
if not Input2Fechas('Ejemplo','Introdusca las Fechas ',Fecha1,Fecha2) then
showmessage('No se capturaron las fechas')
else
showmessage('Fecha 1: '+datetostr(Fecha)+' Fecha2: '+datetostr(Fecha2));

end;










gracias por su ayuda

poliburro 07-03-2008 17:32:03

Agrega dos miembros públicos al formulario, llamados FechaInicial: Date y Fecha Final de tipo Date. Una vez que hayas cerrado el formulario y de haber presionado afirmativamente, toma los valores de esos dos miembros y asignalos a las variables que deseas.

suerte.

yusnerqui 07-03-2008 17:45:33

Hola
Esta otra también puede servirte:

Código Delphi [-]
Type
  TMyResult=Record
    V1:integer;
    V2:Real;
  End;

///después

Function MultiValor:TMyResult;
Begin
  Result.V1:=1;
  Result.V2:=5,67;
End;
Espero te sirva.

Saludos

yusnerqui 07-03-2008 17:54:18

Hay que leer mejor, puse mi respuesta solo por el título de tu pregunta, lo ciento :) creo que lo que necesitas es pasar los parámetros de fecha a tu función por dirección en ves de por valor, así cuando esta retorne tendrá en dichas variables las fechas seleccionadas. Sería algo como:

Código Delphi [-]
function Input2Fechas(Caption:String;Msg:String;Var FechaI :TDateTime; Var FechaF:TDateTime ):Boolean;
var FF:TfrmInput2fechas ;
begin
FF:=TfrmInput2fechas.Create(nil);
FF.Caption:=Caption;
FF.lblTexto.Caption:=Msg;
FF.ShowModal;
FechaI:=FF.txtInicio.date;
FechaF:=FF.txtFin.date;
result:=FF.Resultado;
FF.Destroy;
end;

aunque aclaro que la solución de los records que te di tambien podría ser una vía, pero esta última se ajusta más a lo que tienes hecho.

Saludos

jachguate 07-03-2008 17:55:55

Hazlo así:

Código Delphi [-]
function Input2Fechas(const Caption, Msg: string; var fechaI, fechaF: TDateTime ): Boolean;
var 
  FF: TfrmInput2fechas;
begin
  FF := TfrmInput2fechas.Create(nil);
  FF.Caption := Caption;
  FF.lblTexto.Caption := Msg;
  FF.ShowModal;
  FechaI := FF.txtInicio.date;
  FechaF := FF.txtFin.date;
  result := FF.Resultado;
  FF.Destroy;
end;

procedure TForm1.btnpruebaClick(Sender: TObject);
var 
  Fecha1, Fecha2: TDateTime;
begin
  if not Input2Fechas('Ejemplo','Introduzca las Fechas', Fecha1, Fecha2) then
    showmessage('No se capturaron las fechas')
  else
    showmessage('Fecha1: ' + DateToStr(Fecha) + ' Fecha2: ' + DateToStr(Fecha2));
end;

Te recomiendo que aprendas a utilizar la etiqueta delphi para publicar trozos de código.

Hasta luego.

;)

jangel_ramirezm 07-03-2008 18:08:31

Gracias a Poliburro por su respuesta
ya agregué los atributos publicos y asi quedó la función
Código Delphi [-]
FF:=TfrmInput2fechas.Create(nil,RootKey,SaveToKey );
    FF.Caption:=Caption;
    FF.lblTexto.Caption:=Msg;
    FF.ShowModal;
    FechaI:=FF.FechaInicio;
    FechaF:=FF.FechaFin;
    result:=FF.Resultado;
    ff.Destroy;
pero cuando mando llamar a la funcion
me muestra:
30/12/1899 creo que no le regresa ningun valor el codigo donde mando llamar a la funcion quedó igual. espero haber entendido bien tu respuesta ya vez no todo puede ser tan fácil como apuntadores(es una broma)

yusnerqui 07-03-2008 18:08:47

:) Yusnerqui vs JachGuate

1-0

Saludos

jangel_ramirezm 07-03-2008 18:14:59

ha muchas gracias a todos ya está Ok

gracias a todos de nuevo por su valiosa ayuda

jachguate 07-03-2008 19:53:47

Cita:

Empezado por yusnerqui (Mensaje 271510)
:) Yusnerqui vs JachGuate

1-0

Saludos

jajajajaja... acepto, por segundos...

Casimiro Notevi 07-03-2008 20:14:16

Aunque las dos formas son válidas, para este caso yo usaría el método expuesto por jachguate... ¡¡¡no me odies, poliburro!!! :D

yusnerqui 07-03-2008 21:16:44

Cita:

Empezado por Casimiro Notevi (Mensaje 271547)
Aunque las dos formas son válidas, para este caso yo usaría el método expuesto por jachguate... ¡¡¡no me odies, poliburro!!! :D

:eek:
Esteeee, a que te refieres exactamente:mad:, no es mi segunda altermativa la misma expuesta por el amigo jachguate o es que me perdi algo:confused::confused::confused:,,,, mmmmm estoy por creer que jachguate compro el arbitro:rolleyes:.

Un saludo corrupto:D:D:D

poliburro 07-03-2008 22:14:49

Cita:

Empezado por Casimiro Notevi (Mensaje 271547)
Aunque las dos formas son válidas, para este caso yo usaría el método expuesto por jachguate... ¡¡¡no me odies, poliburro!!! :D



jajaja, pero por que habría de odiarte amigo, al final como bien lo has dicho, :P las dos son válidas. :P


La franja horaria es GMT +2. Ahora son las 12:40:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi