viernes, 4 de marzo de 2011

Mas Joven

Comienzo preparando los controles que necesito en un ficha nueva como puedes ver en la imagen.
figura181.jpg (22515 bytes)
Objetos utilizados:  Observa las etiquetas que ya conoces.  Los botones son de la paleta Standar (Para ir mas rapido) y veras el panel que los rodea. 
Cada vez que introduces un nombre y su fecha, se pulsa ACEPTAR; en cualquier momento  se puede obtener el MAS JOVEN y el MAS VIEJO pulsando el boton correspondiente. A ver si lo adivinas. Vale, vale. La solucion aparece en los cuadros de texto.
Solo escribo 'a dedo' el codigo del  evento On_Clic de los botones; y el resto lo ha construido el Delphi mientras que yo he ido arrastrando objetos a la ficha. Aqui esta el codigo:
unit Masjoven;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ComCtrls;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    NOMBRE: TEdit;
    Label3: TLabel;
    FECHA: TDateTimePicker;
    Panel1: TPanel;
    ACEPTAR: TButton;
    MASJOVEN: TButton;
    MASVIEJO: TButton;
    CERRAR: TButton;
    procedure CERRARClick(Sender: TObject);
    procedure ACEPTARClick(Sender: TObject);
    procedure MASJOVENClick(Sender: TObject);
    procedure MASVIEJOClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
VAR
TNOM:ARRAY[1..50]OF STRING[30];
TFECHA:ARRAY[1..50]OF TDATETIME;
I,TOPE:INTEGER;
procedure TForm1.CERRARClick(Sender: TObject);
begin
CLOSE;
end;
procedure TForm1.ACEPTARClick(Sender: TObject);
begin
TNOM[TOPE]:=NOMBRE.TEXT;
TFECHA[TOPE]:=FECHA.DATE;
TOPE:=TOPE+1;
NOMBRE.CLEAR;
FECHA.DATE:=DATE;
NOMBRE.SETFOCUS;
end;
 procedure TForm1.MASJOVENClick(Sender: TObject);
 VAR
 JOVEN:TDATETIME;
 POS:INTEGER;
 begin
// BUSCO EN TFECHA LA MAYOR
JOVEN:=TFECHA[1];
POS:=1;
FOR I:=1 TO TOPE-1 DO
  IF TFECHA[I]>JOVEN THEN
  BEGIN
   JOVEN:=TFECHA[I];
   POS:=I;
   END;
// DESPUES DEL FOR
NOMBRE.TEXT:=TNOM[POS];
FECHA.DATE:=JOVEN;
end;
procedure TForm1.MASVIEJOClick(Sender: TObject);
VAR
VIEJO:TDATETIME;
POS:INTEGER;
Begin
// BUSCO EN TFECHA LA MENOR
VIEJO:=TFECHA[1];
POS:=1;
FOR I:=1 TO TOPE-1 DO
  IF TFECHA[I]
  BEGIN
   VIEJO:=TFECHA[I];
   POS:=I;
   END;
// DESPUES DEL FOR
NOMBRE.TEXT:=TNOM[POS];
FECHA.DATE:=VIEJO;
end;
INITIALIZATION
 TOPE:=1;
end.

Porcentaje

Comienzo preparando los controles que necesito en un ficha nueva como puedes ver en la imagen.
figura151.jpg (17126 bytes)
Objetos utilizados:  Los botones son de la paleta Adicional. Observa que algunos tienen en panel de fondo.  He puesto dos etiquetas Tlabel, NUMERO1 y otra para la solución que ahora no ves.
Solo escribo 'a dedo' el código del  evento On_Clic de los botones; y el resto lo ha construido el Delphi mientras que yo he ido arrastrando objetos a la ficha.
unit PORCENT;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls;
type
  TForm1 = class(TForm)
    NUM: TLabel;
    NUMERO: TEdit;
    ACEPTAR: TBitBtn;
    PORCENTAJE: TBitBtn;
    SOLUCION: TLabel;
    CERRAR: TBitBtn;
    BORRAR: TBitBtn;
    Panel1: TPanel;
    Panel2: TPanel;
    procedure ACEPTARClick(Sender: TObject);
    procedure PORCENTAJEClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BORRARClick(Sender: TObject);
    procedure CERRARClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  NUMEROS:ARRAY[1..20] OF INTEGER;
  I:INTEGER;
implementation
{$R *.DFM}
PROCEDURE MOSTRAR;    // INSTRUCCIÓN QUE ME HE INVENTADO PARA EL "PORCENTAJE"
VAR
  POSITIVOS,NOCERO:REAL;
  K:INTEGER;
BEGIN
  K:=I;  // "K" ES EL TOPE
  // RECORRO LA TABLA Y CUENTO POSITIVOS:
         // PRIMERO PONGO LOS CAMPOS A CERO:
  POSITIVOS:=0;
  NOCERO:=0;
  FOR I:=1 TO K DO     //<-SIEMPRE QUE SEA ASIGNACIÓN LO PONGO ASÍ
    BEGIN
      IF NUMEROS[I]>0 THEN
         POSITIVOS:=POSITIVOS+1;
      IF NUMEROS[I]<>0 THEN
         NOCERO:=NOCERO+1;
    END;
  FORM1.SOLUCION.CAPTION:='EL PORCENTAJE ES '+FLOATTOSTR(POSITIVOS/NOCERO*100);
END;
procedure TForm1.ACEPTARClick(Sender: TObject);
begin
    NUMEROS[I]:=STRTOINT(NUMERO.TEXT);
    I:=I+1;
    IF I>20 THEN
        MOSTRAR
      ELSE
        FORM1.NUM.CAPTION:='NUMERO '+INTTOSTR(I)+':';
    NUMERO.CLEAR;
    NUMERO.SetFocus;
end;
procedure TForm1.PORCENTAJEClick(Sender: TObject);
begin
    MOSTRAR;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
    NUM.CAPTION:='NUMERO'+INTTOSTR(I);
end;
procedure TForm1.BORRARClick(Sender: TObject);
begin
   NUMERO.CLEAR;
   NUMERO.SETFOCUS;
   SOLUCION.CAPTION:=' ';  //EN VEZ DE "CLEAR" PORQUE NO ES UN CAMPO DE ENTRADA  
end;
procedure TForm1.CERRARClick(Sender: TObject);
begin
    CLOSE;
     
end;
INITIALIZATION
    I:=1;
end.
Y este es el programa ejecutando:
figura152.jpg (20207 bytes)

FICHERO CLASICO CON DELPHI

Delphi puede trabajar con ficheros tipicos de pascal (.DAT). Voy a poner un ejemplo que maneja un fichero binario tipico, pero os adelanto que yo solo usaría este tipo de ficheros en Delphi, con ficheros antiguos que me encontrara y que no se pudieran convertir a ningún formato de base de datos. Para un fichero nuevo usaría una base de datos por ejemplo del tipo .dbf u otro.
De todos modos ahí va el ejemplo. He comenzado un proyecto nuevo y he preparado un ficha como la de la figura: clasico1.jpg (24659 bytes)
unit clasico;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
Tform1 = class(TForm)
titulo: TLabel;
Label1: TLabel;
num: TEdit;
Label2: TLabel;
nomb: TEdit;
jkhk: TLabel;
sex: TRadioGroup;
Label3: TLabel;
domi: TEdit;
Label4: TLabel;
loca: TEdit;
Grabar: TButton;
Cerrar: TButton;
comenzar: TButton;
Panel1: TPanel;
anterior: TButton;
siguiente: TButton;
procedure CerrarClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure GrabarClick(Sender: TObject);
procedure comenzarClick(Sender: TObject);
procedure siguienteClick(Sender: TObject);
procedure anteriorClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type datos=record
numero:integer;
nombre:string[30];
sexo:char;
domicilio:string[25];
localidad:string[15];
end;

var
form1: Tform1;
registro:datos;
fichero:file of datos;

implementation

{$R *.DFM}


procedure leer;
begin
    read(fichero,registro);
    with form1 do
    begin
        num.text:=inttostr(registro.numero);
        nomb.text:=registro.nombre;
        domi.text:=registro.domicilio;
        loca.text:=registro.localidad;
        if registro.sexo='m' then
            sex.itemindex:=0
        else
            sex.itemindex:=1;
        end;
end;

procedure Tform1.CerrarClick(Sender: TObject);
begin
    close;
end;

procedure Tform1.FormCreate(Sender: TObject);
begin
assignfile(fichero,'alumno.dat');
rewrite(fichero);
end;

procedure Tform1.GrabarClick(Sender: TObject);
begin
// muevo los valores de los controles al registro
with registro do
begin
    numero:=strtoint(num.text);
    nombre:=nomb.text;
    if sex.itemindex=0 then
        sexo:='M'
    else
        sexo:='V';
    domicilio:=domi.text;
    localidad:=loca.text;
end;
write(fichero,registro);
num.clear;
nomb.clear;
sex.itemindex:=-1;
domi.clear;
loca.clear;
num.setfocus;
end;

procedure Tform1.comenzarClick(Sender: TObject);
begin
     reset(fichero);
    leer;
end;


procedure Tform1.siguienteClick(Sender: TObject);
begin
if not eof(fichero) then
    leer
else
    showmessage('Se ha alcanzado el fin de fichero');
end;

procedure Tform1.anteriorClick(Sender: TObject);
begin
if filepos(fichero)>1 then
begin
    seek(fichero,filepos(fichero)-2);
    leer;
end
else
    showmessage('Es el primer registro');
end;

end.

Dividir por restas sucesivas

Aquí tienes la ficha con los objetos que voy a utilizar:
figura51.jpg (18236 bytes)
He puesto controles Tlabel para el titulo y las etiquetas de los NUMEROS.Tambien tengo otro control Tlabel  en la parte de abajo de la ficha  para poner el resultado. Los cuadros a la derecha de las etiquetas NUMERO son controles TEdit. Luego he puesto los botones; DIVISION Y BORRAR son (TButton) de la paleta standard  y el  botón cerrar de la paleta Adicional.  Observa los nombres que les he puesto mirando el codigo.
Hacerte observar que yo simplemente he escrito 'a dedo' el codigo del  evento On_Click del boton DIVISION, el  codigo evento On_Click del botón Borrar  y el OnClick de Cerrar; el resto lo ha construido el Delphi mientras que yo he ido arrastrando objetos a la ficha.
El código del programa:
unit DIVIDIR;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls;

type
tform1 = class(tform)
label1: tlabel;
label2: tlabel;
num1: tedit;
label3: tlabel;
num2: tedit;
division: tbutton;
borrar: tbutton;
cerrar: tbitbtn;
solucion: tlabel;
procedure cerrarclick(sender: tobject);
procedure borrarclick(sender: tobject);
procedure divisionclick(sender: tobject);
private
{ private declarations }
public
{ public declarations }
end;

var
form1: tform1;

implementation

{$r *.dfm}

procedure tform1.cerrarclick(sender: tobject);
begin
close;
end;

procedure tform1.borrarclick(sender: tobject);
begin
num1.clear;
num2.clear;
solucion.caption:='';
num1.setfocus;
end;

procedure tform1.divisionclick(sender: tobject);
var
n1,n2,n3,division:integer;
begin
division:=0; //es el cociente
n1:=strtoint(num1.text);
n2:=strtoint(num2.text);
n3:=n1; //para conservar los valores originales
while n3>=n2 do
begin
n3:=n3-n2;
division:=division+1;
end;
solucion.caption:='el cociente de '+num1.text+' : '+num2.text+' es = '+
inttostr(division);
end;

end.

Todas las ordenes deberian ser conociadas.
Y este es el programa ejecutando:
figura52.jpg (22399 bytes)

Multiplicar con sumas

Comienzo preparando una vez más los controles que necesito en un ficha nueva como puedes ver en la imagen.
figura41.jpg (19748 bytes)
Objetos utilizados: He puesto controles Tlabel para el titulo y las etiquetas de los NUMEROS    .Tambien tengo otro control Tlabel  en la parte de abajo de la ficha  para poner el resultado. Los cuadros a la derecha de las etiquetas NUMERO son controles TEdit. Luego he puesto los botones; PRODUCTO Y BORRAR son (TButton) de la paleta standard  y el  botón de Borrar (para hacer otro pase) de la paleta Adicional.  Observa los nombres que les he puesto mirando el codigo.
Te insisto que yo simplemente he escrito 'a dedo' (podia tirarme un pegote y deir que era todo mio) el codigo del  evento On_Click del boton PRODUCTO, el  codigo evento On_Click del botón Borrar  y el OnClick de Cerrar; el resto lo ha construido el Delphi mientras que yo he ido arrastrando objetos a la ficha.
El código del programa:
unit PRODUCTO;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls;

type
tform1 = class(tform)
label1: tlabel;
label2: tlabel;
num1: tedit;
label3: tlabel;
num2: tedit;
producto: tbutton;
borrar: tbutton;
cerrar: tbitbtn;
solucion: tlabel;
procedure cerrarclick(sender: tobject);
procedure borrarclick(sender: tobject);
procedure productoclick(sender: tobject);
private
{ private declarations }
public
{ public declarations }
end;

var
form1: tform1;

implementation

{$r *.dfm}

procedure tform1.cerrarclick(sender: tobject);
begin
close;
end;

procedure tform1.borrarclick(sender: tobject);
begin
num1.clear;
num2.clear;
solucion.caption:='';
num1.setfocus;
end;

procedure tform1.productoclick(sender: tobject);
var
n1,n2,producto,i:integer;
begin
producto:=0;
n1:=strtoint(num1.text);
n2:=strtoint(num2.text);
for i:=1 to n2 do
producto:=producto+n1;
solucion.caption:='el producto de '+num1.text+' x '+num2.text+' es = '+
inttostr(producto);
end;

end.

Todas las ordenes deberian ser conociadas.
Y este es el programa ejecutando:
figura42.jpg (23878 bytes)

Area y longitud de la cinrcunferencia

Comienzo preparando los controles que necesito en un ficha nueva como puedes ver en la imagen.
wpe16.jpg (12284 bytes)
Objetos utilizados: Los textos que ves como Radio, Area, y Longitud, son controles Tlabel . Los cuadros a la derecha de cada control son TEdit. He puesto un botón(TButton) para lanzar el calculo  y otro botón para cerrar el programa ; todos ellos de la paleta standard. Observa los nombres que les he puesto, en realidad solo es necesario dar nombre a los controles que vamos a nombrar por nuestra cuenta, aunque siempre podemos utilizar el nombre por defecto que les dá el Delphi, pero es más feo.
Hacerte observar que yo simplemente he escrito 'a dedo' el codigo del  evento On_Clic del boton Calcular y el  codigo evento On_Clic del botón Cerrar; el resto lo ha construido el Delphi mientras que yo he ido arrastrando objetos a la ficha (Esto es un chollo).
El código del programa:
unit circuns;

interface

uses
windows, messages, sysutils, classes, graphics, controls, forms, dialogs,
stdctrls;

type
tcircunferencia = class(tform)
radio: tedit;
area: tedit;
longitud: tedit;
calcular: tbutton;
label1: tlabel;
cerrar: tbutton;
procedure calcularclick(sender: tobject);
procedure cerrarclick(sender: tobject);
private
{ private declarations }
public
{ public declarations }
end;

var
circunferencia: tcircunferencia;

implementation

{$r *.dfm}

procedure tcircunferencia.calcularclick(sender: tobject);
var
r,ar,lon:real;
a,l:string; //recogen el resultado
i:integer; //codigo de control
const
pi=3.1416;
begin
val(radio.text,r,i); //convierte un texto a un valor numerico
ar:=pi*r*r;
lon:=2*pi*r;
str(ar:6:2,a);
str(lon:6:2,l);
area.text:=a;
longitud.text:=l;
end;

procedure tcircunferencia.cerrarclick(sender: tobject);
begin
close;
end;

end.

Comentarte dos ordenes que pueden llamarte la atención:
val
Que convierte un texto en valor número. Es necesario para operar con él ya que los   TEdit reciben valor alfanumerico. Podria haber utilizado strtoint
str   
Que convierte un  valor número a texto. Necesario para albergar el numero de la     solución a la etiqueta area. Podria haber utilizado inttostr
Y este es el programa ejecutando:
wpe17.jpg (10865 bytes)

Area del Triangulo

Comienzo preparando los controles que necesito en un ficha nueva como puedes ver en la imagen.
figura11.jpg (13471 bytes)
Objetos utilizados: Los textos que ves como Base, Altura, Area y el titulo principal; son controles Tlabel . Los cuadros para la base y altura son TEdit; y el boton es un control TButton; todos ellos de la paleta standard. Observa los nombres que les he puesto, en realidad solo es necesario dar nombre a los controles que vamos a nombrar por nuestra cuenta, aunque siempre podemos utilizar el nombre por defecto que les dá el Delphi, pero es más feo.
Simplemente luego en el evento On_Clic del boton Calcular coloco el siguiente codigo que puedes ver en el listado completo del programa. Hacerte observar que yo simplemente he escrito 'a dedo' el codigo del  evento On_Clic del boton Calcular; el resto lo ha construido el Delphi mientras que yo he ido arrastrando objetos a la ficha:
unit area;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Base: TLabel;
Altura: TLabel;
Area: TLabel;
nbase: TEdit;
nalt: TEdit;
Calcular: TButton;
procedure CalcularClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.CalcularClick(Sender: TObject);
var
base,altura,area2:word;
begin
base:=strtoint(nbase.text);
altura:=strtoint(nalt.text);
area2:=base*altura div 2;
area.caption:='Area='+inttostr(area2);

end;

end.

Por ultimo comentarte dos ordenes que pueden llamarte la atención:
strtoint    Que convierte un texto en número entero. Es necesario para operar con él ya que los   TEdit reciben valor alfanumerico.
inttostr    Que convierte un  número entero a texto. Necesario para albergar el numero de la     solución a la etiqueta area.
El delphi dispone de otras ordenes de este tipo para convertir datos.
Y este es el programa ejecutando:
wpe2.jpg (12496 bytes)
Con la tecnología de Blogger.

Busqueda

Vistas de página en total

Sabias que?

chat

Popular Posts