Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   crear funciones en delphi (https://www.clubdelphi.com/foros/showthread.php?t=35419)

cheguidesing 10-09-2006 07:24:12

crear funciones en delphi
 
hola a todos soy estudiante de informatica soy nuevo en el foro apenas tengo 20 minutos aqui. y quisiera saber si alguien me ayuda a entender un poco las funciones y me un da un ejemplo de algunas...:confused: :confused: :confused:
a ver si entiendo

dec 10-09-2006 08:21:37

Hola,

Una función no es más que un bloque de código que puede utilizarse en repetidas ocasiones sin que haya necesidad de duplicarlo, de "rescribirlo": para eso usamos la función. En Delphi tenemos procedimientos y funciones y estas últimas se distingen de aquellos en que las funciones devuelven un resultado.

No es que los procedimientos no puedan "devolver" resultados, pero, las funciones cuentan con una forma "natural" de hacerlo. ¿Un ejemplo de función? Claro, hombre, no faltaba más. Vamos con una que nos sumará dos Integer (que se pasan como parámetros) y nos devolverá el resultado de dicha suma:

Código Delphi [-]
function Sumar(a, b: integer) : integer;
begin
  Result := a + b;
end;

Como se ve utilizamos la palabra reservada "Result", siempre del tipo del valor de retorno de la función, para asignarle, justamente, el resultado que al cabo ofrecerá la función. ¿Cómo podemos utilizar la función de arriba, sin ir más lejos? Pues, por ejemplo:

Código Delphi [-]
var
  a,b,c: integer;
begin
  a := 5;
  b := 2;
  c := Sumar(a, b);
  // Muestra 7
  ShowMessage( IntToStr(c) );
end;

Como ves para usar la función no tenemos sino ceñirnos a su prototipo, esto es, pasarle los parámetros apropiados en número y tipo. En este caso se trata de "Integers" y, en fin, declaramos tres "Integer", "a", "b" y "c". A los primeros les damos un valor nosotros mismos, directamente, y, "c", tomará el valor devuelto por la función "Sumar", que en este caso es 7, puesto que se suma el valor de "a" y "b" que son los enteros que se pasan como parámetros a la función.

¿Porqué no echas un vistazo en el buscador de los Foros? Si buscas por "tutorial Delphi", "libros Delphi", etc., a buen seguro encontrarás información que será de tu interés.

En todo caso bienvenido al ClubDelphi. No dejes de pegar un repaso a la guía de estilo de los Foros.

sonymix 14-07-2010 17:14:16

utiizar funciones
 
saludo todos. tengo un funcion que puede traducir en letras, los numero que introdusco en un campo de moneda. Ahora bien necesito saber como puedo emplealo para que cuando dijite el numero en un edit al salir para despliegue su valor en letra en otro edit.



gracias

ecfisa 14-07-2010 18:45:47

Hola sonymix.

Suponiendo que la función sea:
Código:

function NumALetras(const Num: string): string;
Y el TEdit donde escribís los números se llame Edit1, podés usar el evento OnExit de Edit1 para llamar a la función y asignar el resultado a EDit2.
( Supongamos que así se llama el otro edit ).


Estando seleccionado Edit1, en el Object inspector, events, haciendo doble click sobre el evento OnExit:
Código:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Edit2.Text:= NumALetras(Edit1.Text);
end;

No dudes en poner cualquier duda.

Saludos.

Jac fcc 14-07-2010 20:06:07

cambio de numero a letras
 
Espero entender tu comentario :
quieres usar tu funcion para que lo escrito en un edit se pase a otro pero con las palabras, por ejemplo 115 se pasará como: ciento quince.
¿En el edit que ingresas números ya tienes el filtro para no aceptar caracteres?
Parto del hecho de que hasta que cierres el edit donde ingresas datos numericos se copien los caracteres al edit de caracteres (¿a eso te refieres con: 'al salir'?) .
hay varias formas, se me ocurre:
procedure TForm_Turno.Button1Click(Sender: TObject);
var
cadena:string;
begin
{uso input, podria ser cualquier otra funcion que devuelva una cadena
y que tenga filtro para aceptar solo digitos
}
cadena := InputBox('Titulo', 'Nombre', '');
{uso tu funcion para convertir la cadena de numeros a letras
y se asigna al campo text
}
EdtDescripcion.Text:=TraduceALetras(cadena);
{siempre y cuando sea una funcion que regrese la cadena convertida.
Si es un procedimiento se necesita crear una variable tipo String para ser pasada por parámetros y asi conservar el valor cambiado:
TraduceALetras(CadenaOriginal,CadenaEnLetra)}
end;
si no es la idea, sorry

sonymix 15-07-2010 18:11:01

bueno si este puede funcionar pero mi funcion se declaro asi
Form1: TForm1;
function extenso (valor: real): string;
implementation
asi que tengo un problema de compatibilidad de type y trate de poner lo asi
edit2.text:=extenso(floattotext(edit1.text)); no me resulto

sonymix 15-07-2010 18:12:26

bueno si este puede funcionar pero mi funcion se declaro asi
Form1: TForm1;
function extenso (valor: real): string;
implementation
asi que tengo un problema de compatibilidad de type y trate de poner lo asi
edit2.text:=extenso(floattotext(edit1.text)); no me resulto

Jac fcc 15-07-2010 20:14:03

y asi:
 
claro, la idea que haces sería:

procedure TForm1.Button1Click(Sender: TObject);
var
valorReal:Real;
begin
try
valorReal:=StrToFloat(Edit1.Text);
Edit2.Text:=extenso(valorReal);
except
MessageDlg('Ingrese un numero ',mtError,[mbOk], 0);
end;
end;


o más simple:

try
Edit2.Text:=extenso(StrToFloat(Edit1.Text));
except
MessageDlg('Ingrese un numero ',mtError,[mbOk], 0);
end;

ecfisa 16-07-2010 07:36:00

Cita:

Empezado por sonymix (Mensaje 370502)
bueno si este puede funcionar pero mi funcion se declaro asi
Form1: TForm1;
function extenso (valor: real): string;
implementation
asi que tengo un problema de compatibilidad de type y trate de poner lo asi
edit2.text:=extenso(floattotext(edit1.text)); no me resulto

Perdón por la demora.

El problema de tipos te lo dá el manejo que haces del parámetro en la llamada a función.

La función extenso espera un número real como parámetro y vos le estás enviando un string al usar FloatToText.

Si la función está así declarada, lo correcto sería usarla así:
Código Delphi [-]
  Edit2.Text:= extenso(StrToFloat(Edit1.Text));

Tal como puso en su código el amigo Jac.

Saludos.

delphi 08-01-2011 16:57:58

¿Cómo puedo transformar una función FDEX a un procedimiento?

cloayza 08-01-2011 18:17:08

Amigo Jac Fcc, le aconsejo que utilize las etiquetas que corresponda, ya que facilita la lectura y comprension del codigo que escribe.

Cita:

Empezado por Jac fcc (Mensaje 370385)
procedure TForm_Turno.Button1Click(Sender: TObject);
var
cadena:string;
begin
{uso input, podria ser cualquier otra funcion que devuelva una cadena
y que tenga filtro para aceptar solo digitos
}
cadena := InputBox('Titulo', 'Nombre', '');
{uso tu funcion para convertir la cadena de numeros a letras
y se asigna al campo text
}
EdtDescripcion.Text:=TraduceALetras(cadena);
{siempre y cuando sea una funcion que regrese la cadena convertida.
Si es un procedimiento se necesita crear una variable tipo String para ser pasada por parámetros y asi conservar el valor cambiado:
TraduceALetras(CadenaOriginal,CadenaEnLetra)}
end;
si no es la idea, sorry

Cual se ve y comprende mejor?...:D

Código Delphi [-]
procedure TForm_Turno.Button1Click(Sender: TObject);
var
  cadena:string;
begin
 {uso input, podria ser cualquier otra funcion que devuelva una cadena
 y que tenga filtro para aceptar solo digitos
 }
 cadena := InputBox('Titulo', 'Nombre', '');
 {uso tu funcion para convertir la cadena de numeros a letras
 y se asigna al campo text
 }
 EdtDescripcion.Text:=TraduceALetras(cadena);
{siempre y cuando sea una funcion que regrese la cadena convertida.
Si es un procedimiento se necesita crear una variable tipo String para ser pasada por parámetros y asi conservar el valor cambiado:
      TraduceALetras(CadenaOriginal,CadenaEnLetra)}
end;

Saludos cordiales

juanje 09-06-2019 15:27:19

Funcion
 
Gracias por el ejemplo que publicaste , estoy muy agradecido , un saludo

juanje 09-06-2019 20:58:25

Funciones
 
1 Archivos Adjunto(s)
Aqui te envio una rutina sencillaArchivo Adjunto 3751

Casimiro Notevi 09-06-2019 23:22:39

Cita:

Empezado por juanje (Mensaje 532347)
Aqui te envio una rutina sencillaArchivo Adjunto 3751

Por favor, lee nuestra guía de estilo, gracias.

Ñuño Martínez 11-06-2019 12:26:17

Hola juanje:

En el código que has adjuntado, hay algo que no está claro en esta línea:
Código Delphi [-]
  IF a OR b > 255 THEN Exit;
Lo que estás expresando es "Si el resultado de f(a∨b) es mayor que 255...", es decir, "aplica la función OR a los valores y compara el resultado con 255...". Si lo que quieres expresar es "Si el valor de a o el valor de b es mayor que 255...", debería ser así:
Código Delphi [-]
  IF (a > 255) OR (b > 255) THEN Exit; { Los paréntesis son obligatorios en este caso. }
Ahora bien, si realmente quieres aplicar la función OR, entonces te recomiendo la siguiente nomenclatura:
Código Delphi [-]
  IF (a OR b) > 255 THEN Exit;
Aquí los paréntesis no son obligatorios, pero ayudan a explicar que no es un error, sino que realmente quieres realizar la operación.


La franja horaria es GMT +2. Ahora son las 18:56:29.

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