PDA

Ver la Versión Completa : Como hacer para que una funcion regrese varios valores


jangel_ramirezm
07-03-2008, 17:29:04
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 [-] (http://www.clubdelphi.com/foros/#)
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 [-] (http://www.clubdelphi.com/foros/#)
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:


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:


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í:


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

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
:) 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
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
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