Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda con fuctions (https://www.clubdelphi.com/foros/showthread.php?t=67454)

Yamato_No_oroch 18-04-2010 07:48:39

ayuda con fuctions
 
hola de nueva cuenta aqui molestando como siempre espero no molestarlos y esta es mi duda
en un codigo fuente que realize para generar una curp y un registro de credencial de lector me incomodo una cosa este es mi codigo:
Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, ComCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    EDIT4: TMaskEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit7: TEdit;
    Label7: TLabel;
    ESTADOS: TComboBoxEx;
    procedure Button1Click(Sender: TObject);
    procedure ComboBoxEx1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
function curp(apepat,apemat,nomb,fechanac,sexo,edo:string):string;
var ret:string;
begin
  ret:=apepat[1]+apepat[2]+apemat[1]+nomb[1]+fechanac[9]+fechanac[10]
  +fechanac[4]+fechanac[5]+fechanac[1]+fechanac[2]+sexo[1]+edo[1]+edo[6];
  curp:=ret;
end;
function generaletra:char;
var pos:integer;
begin
  randomize;
  pos:=random(7)+1;
  case (pos) of
  1:generaletra:='A';
  2:generaletra:='B';
  3:generaletra:='C';
  4:generaletra:='D';
  5:generaletra:='E';
  6:generaletra:='F';
  7:generaletra:='G';
  end;
end;
function generanumero:char;
var pos:integer;
begin
  randomize;
  pos:=random(7)+1;
  case (pos) of
  1:generanumero:='0';
  2:generanumero:='1';
  3:generanumero:='2';
  4:generanumero:='3';
  5:generanumero:='4';
  6:generanumero:='5';
  7:generanumero:='6';
  end;
end;
 function elec(apepat,apemat,nomb,fechanac,edo,sexo:string):string;
 var ret:string;
 begin
 ret:=apepat[1]+apepat[3]+apemat[1]+apemat[3]+nomb[1]+nomb[3]+fechanac[9]+fechanac[10]
  +fechanac[4]+fechanac[5]+fechanac[1]+fechanac[2]+edo[10]+edo[11]+sexo[1];
  elec:=ret;
 end;
 
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
  edit6.Text:=curp(edit1.Text,edit2.Text,edit3.Text,edit4.Text,edit7.Text,ESTADOS.text)+(generaletra+g  eneraletra+generaletra)+(generanumero+generanumero);
  edit5.Text:=elec(edit1.Text,edit2.Text,edit3.Text,edit4.Text,ESTADOS.text,edit7.text)+(generanumero+  generanumero)+(generanumero);
end;
procedure TForm1.ComboBoxEx1Change(Sender: TObject);
begin
ESTADOS.items.Add('DURANGO  10  ');
ESTADOS.items.Add('COAHUILA 07  ');
ESTADOS.items.Add('CHIAPAS  05  ');
ESTADOS.items.Add('COLIMA   06  ');
end;
 
end.

la duda es esta en la marca verde donde esta el maskedit nomas lo cambia asi pero si intento correrlo no me deja porq necesito cambiar algo y nc q es y en la de color rojiso mi comando es un combobox e igual no me adiere los datos q le pido asi q si alguien pudiera ayudarme con este pequeño problema seria de mucha ayuda solo diganme si puedo cambiarlo para q me genere lo q quiero y si asi es donde podria ser
gracias a todos por su ayuda

casacham 18-04-2010 16:10:32

Mal expresado
 
No entendi mucho de lo que escribiste, deberias revisar la guia de estilo y reformular el hilo editandolo

Caral 18-04-2010 16:36:43

Hola
El Edit4 es el MaskEdit, no entiendo la razon, tal vez por acomodar los nombres.
No tiene razon de no funcionar, esta incluido en el evento onclick del boton.
ESTADOS es un combobox que no aparece en ningun lado conteniendo los datos, tal vez esten el su text.
Tienes dos combobox, comobobox1 y ESTADOS.
El plateamiento del codigo es muy extraño.
Saludos
PD: Da la impresion por la pregunta que el codigo no es tuyo y estas tratando de entenderlo, bueno, si es asi, ya somo dos.

Caral 18-04-2010 17:02:11

Hola
Tratemos de analizar este codigo:
DEJO CLARO QUE DE FUNCIONES NO SE NADA.
Empecemos por esta funcion:
Código Delphi [-]
function curp(apepat,apemat,nomb,fechanac,sexo,edo:string):string;
var ret:string;
begin
  ret:=apepat[1]+apepat[2]+apemat[1]+nomb[1]+fechanac[9]+fechanac[10]
  +fechanac[4]+fechanac[5]+fechanac[1]+fechanac[2]+sexo[1]+edo[1]+edo[6];
  curp:=ret;
end;
Para mi hay algo mal, la funcion es string y los datos que muestra NO ya que la variable REC tambien es String.
CREO que deberia de ser asi:
Código Delphi [-]
function curp(apepat,apemat,nomb,fechanac,sexo,edo:string):string;
var ret:string;
begin
  ret:=apepat['1']+apepat['2']+apemat['1']+nomb['1']+fechanac['9']+fechanac['10']
  +fechanac['4']+fechanac['5']+fechanac['1']+fechanac['2']+sexo['1']+edo['1']+edo['6'];
  curp:=ret;
end;
.
Si embargo sigo sin entenderla.
La segunda y tercera funciones entregan un valor CHAR, sin embargo en la concatenacion del boton esta como string.
Para mi podria hacerse asi:
Código Delphi [-]
function generaletra:String;
var pos:integer;
begin
  randomize;
  pos:=random(7)+1;
  case (pos) of
  1:generaletra:='A';
  2:generaletra:='B';
  3:generaletra:='C';
  4:generaletra:='D';
  5:generaletra:='E';
  6:generaletra:='F';
  7:generaletra:='G';
  end;
end;
function generanumero:String;
var pos:integer;
begin
  randomize;
  pos:=random(7)+1;
  case (pos) of
  1:generanumero:='0';
  2:generanumero:='1';
  3:generanumero:='2';
  4:generanumero:='3';
  5:generanumero:='4';
  6:generanumero:='5';
  7:generanumero:='6';
  end;
end;
El rango lo hace con una variable independiente asi que no afectaria, creo.
En la concatenacion pasa lo mismo, es un string.
La siguiente funcion pasa lo mismo que en la primera, para mi.
El evento del boton hace una concatenacion de todo, seria bueno saber si ESTADOS contiene algo o si existe ese combobox.
En el ultimo, hace que al combobox estados se le adhieran otros datos.

Eso es lo que entiendo de este codigo.
Saludos

Caral 19-04-2010 01:24:28

Hola
Pues no se que te extraña, para mi es la verdad, no se de funciones ni de muchas cosas, ademas por supuesto que no soy programador, eso esta clarisimo.
Solo doy mi opinión en base a lo poco que capto de las cosas.
Cuando uno programa para si mismo ve y hace las cosas a su manera, es muy dificil, por lo menos para mi, entender codigos con funciones, por eso lo digo.
No te extrañes, sigo y seguire siendo novato, me alegra que dieras una explicacion mas logica a Yamato_No_oroch le va a servir.
Saludos

Yamato_No_oroch 20-04-2010 17:24:19

gracias a todos
 
Cita:

Empezado por Caral (Mensaje 360946)
Hola
Pues no se que te extraña, para mi es la verdad, no se de funciones ni de muchas cosas, ademas por supuesto que no soy programador, eso esta clarisimo.
Solo doy mi opinión en base a lo poco que capto de las cosas.
Cuando uno programa para si mismo ve y hace las cosas a su manera, es muy dificil, por lo menos para mi, entender codigos con funciones, por eso lo digo.
No te extrañes, sigo y seguire siendo novato, me alegra que dieras una explicacion mas logica a Yamato_No_oroch le va a servir.
Saludos


gracias a todos or el apoyo en verdad si me sirvio bastante la ayuda

mcs 20-04-2010 17:34:43

Cita:

Empezado por Caral (Mensaje 360913)
Código Delphi [-]

function generaletra:String;
var pos:integer;
begin
randomize;
pos:=random(7)+1;
case (pos) of
1:generaletra:='A';
2:generaletra:='B';
3:generaletra:='C';
4:generaletra:='D';
5:generaletra:='E';
6:generaletra:='F';
7:generaletra:='G';
end;
end;
function generanumero:String;
var pos:integer;
begin
randomize;
pos:=random(7)+1;
case (pos) of
1:generanumero:='0';
2:generanumero:='1';
3:generanumero:='2';
4:generanumero:='3';
5:generanumero:='4';
6:generanumero:='5';
7:generanumero:='6';
end;
end;



Estas funciones se pueden simplificar mucho. En mi opinión, quedarían mejor así:

Código Delphi [-]
 
function generaletra:String;
var pos:integer;
begin
  randomize;
  pos:=random(7);
  generaletra=Chr(pos+65);
end;
 
function generanumero:String;
var pos:integer;
begin
  randomize;
  pos:=random(7);
  generanumero=Chr(pos+48);
end;

La explicación es muy simple: primero generamos el valor aleatorio, y luego le sumamos 65 (valor ASCII de 'A') o 48 (valor ASCII de '0'). Obtenemos un codigo ASCII, y con la función Chr() lo convertimos a un carácter.

Saludos,

Marc

Yamato_No_oroch 20-04-2010 17:37:15

grcias a todos
 
Cita:

Empezado por Caral (Mensaje 360912)
Hola
El Edit4 es el MaskEdit, no entiendo la razon, tal vez por acomodar los nombres.
No tiene razon de no funcionar, esta incluido en el evento onclick del boton.
ESTADOS es un combobox que no aparece en ningun lado conteniendo los datos, tal vez esten el su text.
Tienes dos combobox, comobobox1 y ESTADOS.
El plateamiento del codigo es muy extraño.
Saludos
PD: Da la impresion por la pregunta que el codigo no es tuyo y estas tratando de entenderlo, bueno, si es asi, ya somo dos.






bueno el codigo si lo escribì yo el MaskEdit lo puse para modificarlo y que me apareciera una fecha algo asi (__/__/____); algo que me pide la curp y el de estados es un ComboBoxex, bien ubiera puesto un ComboBox pero mi tutor me recomendo este button el chsite esque pude darme opciones de los estados que tengan un codigo que me de el numero del distrito y me genere una curp y hasta la clave del IFE por ejemplo yo vivo en Durango y asi clave es "10" y bien pudiera averlo hecho con un botton y varios "if" lastima mi tema de unidad son "function" y "arrays", y gracias mi duda yamas o menos queda un poko clara nueva cuenta gracias a todos y se me olvida un detalle cuando mencionast lo de los strngs en este codigo
function elec(apepat,apemat,nomb,fechanac,edo,sexo:string):string;
no es que me genere una letra si no posicion en la q estan las letras por ejemplo;

ret:=apepat[1]+apepat[3]+apemat[1]+apemat[3]+nomb[1]+nomb[3]+fechanac[9]+fechanac[10]
+fechanac[4]+fechanac[5]+fechanac[1]+fechanac[2]+edo[10]+edo[11]+sexo[1];
elec:=ret;

asi si me mi nombre fuera francisco javer santos sepulver (nombre de un amigo jaja)
en apepat[1]+apepat[3]= de francisco = F y A son las que me tendra que desplegar
lo mismo en lo demas, ni siquierayo se las funciones muy bien pero por lo q veo es mas facil no crees.

saludos XD

Yamato_No_oroch 20-04-2010 17:47:19

gracias
 
Cita:

Empezado por casacham (Mensaje 360910)
No entendi mucho de lo que escribiste, deberias revisar la guia de estilo y reformular el hilo editandolo



lo estoy haciendo gracias


La franja horaria es GMT +2. Ahora son las 18:47:35.

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