Delphi: Lista Circular Ing Wilo Carpio Cáceres

Bienvenido a mi website..!!

QUE ES.? Qué es esto..??
ALTA Altas
VER Navegar
BAJAS Bajas
MODIFICAR Modificar
OTRO Otros

unit LisCircu;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, mxgrid, ExtCtrls, mxpivsrc, ImgList, jpeg, Buttons;

Volver al principio


Volver al principio LISTA CIRCULARDECLARACIONES
type
puntero = ^Nodo;
Nodo = record
Nombre : String[22];
Domicilio : String[22];
Telefono : String[22];
CampoEnlace : puntero;
end;
TMiformulario = class(TForm)

var
Miformulario: TMiformulario;
PrimerNodo,Indice,NodoAuxiliar,NodoAnterior :puntero;
ban, cont:integer;

implementation
{$R *.DFM}


Volver al principio


Volver al principio ¦ ALTASIngreso de nuevos datos

procedure TMiformulario.BotonAltasClick(Sender: TObject);
Begin
Nombre.Text := '' ;
Domicilio.Text:='';
Telefono.Text:='';
Domicilio.Enabled:=True;
Telefono.Enabled:=True;
PanelAltas.Visible:=True;
Grabar.Visible:=True;
CerrarAltas.Visible:=True;
Nombre.setfocus;
MiFormulario.Caption:=' Ingrese los datos: Nombre, Domicilio, Telefono';
GrillaDatos.Visible := False;
bCerrargrilla.Visible:=False;
bAceptarmodif.Visible:=False;
bAceptarBajas.Visible:=False;
GuardarModif.Visible:=False;
if Nombre.Text<>'' then
begin
Grabar.Visible := True;
end;
end;

procedure TMiformulario.GrabarClick(Sender: TObject);
begin
If Nombre.Text = '' then
begin
APPLICATION.MessageBox( 'No tipeo ningun datos ',
'NO PUEDE GRABAR',mb_OK );
end
else
begin
If 1=APPLICATION.MessageBox( 'Grabas los datos digitados ?',
'ALTA DE DATOS',mb_OKCancel+mb_defbutton1 )then
begin
BotonVerDatos.Enabled:=True;
NEW(NodoAuxiliar);
NodoAuxiliar^.Nombre:=Nombre.Text;
NodoAuxiliar^.Domicilio:=Domicilio.Text;
NodoAuxiliar^.Telefono:=Telefono.Text;
Nombre.Text :='';
Domicilio.Text :='';
Telefono.Text :='';
NodoAuxiliar^.CampoEnlace:=NIL;
IF PrimerNodo=NIL THEN
begin
PrimerNodo:=NodoAuxiliar;
NodoAuxiliar^.CampoEnlace :=PrimerNodo;
end
else
Begin
NodoAnterior := PrimerNodo;
While NodoAnterior^.CampoEnlace <> PrimerNodo do
NodoAnterior := NodoAnterior^.CampoEnlace;
NodoAnterior^.CampoEnlace := NodoAuxiliar;
NodoAuxiliar^.CampoEnlace := PrimerNodo;
end;
end ;
end;
Nombre.setfocus;
end;

procedure TMiformulario.bCerrargrillaClick(Sender: TObject);
begin
grilladatos.visible:=False;
bCerrargrilla.visible :=False;
end;


Volver al principio


Volver al principio NAVEGARVer Datos de los Nodos
procedure TMiformulario.BotonVerDatosClick(Sender: TObject);
var i,j:Integer;
begin
bCerrargrilla.Visible:=True;
GrillaDatos.Visible := True;
j:=0;
i:=1;
MiFormulario.Caption:=' GRILLA DE DATOS: Contenido de los Nodos';
while GrillaDatos.Cells[0,j]<>'' do
begin
GrillaDatos.cells[0,j]:= '';
GrillaDatos.cells[1,j]:= '';
GrillaDatos.cells[2,j]:= '';
j:=j+1;
end;
If PrimerNodo=NIL then
begin
GrillaDatos.Visible := False;
bCerrargrilla.Visible:=False;
Application.MessageBox('No hay datos...',
'LOS NODOS ESTAN VACIOS',mb_okcancel);
MiFormulario.Caption:='Haga "CLICK" en Altas para comenzar';
end
else
begin
GrillaDatos.cells[0,0]:= 'Nombre';
GrillaDatos.cells[1,0]:= 'Direccion';
GrillaDatos.cells[2,0]:= 'Telefono';
NodoAnterior:=PrimerNodo;
while (NodoAnterior^.CampoEnlace<>PrimerNodo) do
begin
GrillaDatos.cells[0,i]:=NodoAnterior^.Nombre;
GrillaDatos.cells[1,i]:=NodoAnterior^.Domicilio;
GrillaDatos.cells[2,i]:=NodoAnterior^.Telefono;
i:=i+1;
NodoAnterior:=NodoAnterior^.CampoEnlace;
end;
GrillaDatos.cells[0,i]:=NodoAnterior^.Nombre;
GrillaDatos.cells[1,i]:=NodoAnterior^.Domicilio;
GrillaDatos.cells[2,i]:=NodoAnterior^.Telefono;
end;
end;

procedure TMiformulario.SalirClick(Sender: TObject);
begin
If 1=APPLICATION.MessageBox('CONFIRMA LA OPERACION...!!','ESTA POR CERRAR EL PROGRAMA',MB_OKCANCEL) THEN
MIFORMULARIO.CLOSE;
end;


Volver al principio


Volver al principio BAJASEliminar datos
procedure TMiformulario.BotonBajasClick(Sender: TObject);
begin
If PrimerNodo=NIL then
begin
GrillaDatos.Visible := False;
bCerrargrilla.Visible:=False;
Application.MessageBox('No hay datos...',
'LOS NODOS ESTAN VACIOS',mb_okcancel);
end
else
begin
Nombre.Text :='';
Domicilio.Text :='';
Telefono.Text :='';
MiFormulario.Caption:=' Ingrese el nombre a dar de Bajas y luego haga click en Acep. Bajas';
GrillaDatos.Visible := False;
bCerrargrilla.Visible:=False;
bAceptarmodif.Visible:=False;
GuardarModif.Visible:=False;
Domicilio.Enabled:=False;
Telefono.Enabled:=False;
PanelAltas.Visible:=True;
bAceptarBajas.Visible:=True;
CerrarAltas.Visible:=True;
Nombre.SetFocus;
if Nombre.Text<> '' then
begin
bAceptarBajas.Visible:=True;
Domicilio.Enabled:=True;
Telefono.Enabled:=True;
end;
end;
Nombre.Text :='';
end;

procedure TMiformulario.bAceptarBajasClick(Sender: TObject);
begin
ban:=0;
Domicilio.Enabled:=True;
Telefono.Enabled:=True;
NodoAnterior := PrimerNodo;
While (NodoAnterior^.CampoEnlace <> PrimerNodo) and (ban=0) do
begin
If NodoAnterior^.Nombre = Nombre.Text then
begin
ban:=1;
indice:=NodoAnterior;
end;
NodoAnterior := NodoAnterior^.CampoEnlace;
end;
If NodoAnterior^.Nombre = Nombre.Text then
begin
ban:=1;
indice:=NodoAnterior;
end;
If ban=0 then
begin
Application.MessageBox('Ese nombre no fue ingresado',
'No existe',mb_ok);
Nombre.text:='';
Nombre.setFocus;
end
else
begin
Nombre.text:=Indice^.Nombre;
Domicilio.text:=Indice^.Domicilio;
Telefono.text:= Indice^.Telefono;
Nombre.SetFocus;
If 1=APPLICATION.MessageBox( 'Esta es la persona que da de bajas?',
'BAJAS',mb_OKCancel )then
begin
ban:=0;
cont:=0;
Indice := PrimerNodo;
While (Indice^.CampoEnlace <> PrimerNodo) and (ban=0) do
begin
cont:=cont+1;
If Indice^.Nombre = Nombre.Text then
begin
ban:=1;
end
else
begin
NodoAnterior:=Indice;
Indice:= Indice^.CampoEnlace;
end;
end;
// Borro un unico nodo
If (ban=0) and (cont = 0) then
begin
If Indice^.Nombre = Nombre.Text then
begin
PrimerNodo:=Nil;
MiFormulario.Caption:=' LA LISTA QUEDO VACIA';
end;
end;
// Borro el ultimo nodo
If (ban=0) and (cont <> 0) then
begin
If Indice^.Nombre = Nombre.Text then
begin
NodoAnterior^.CampoEnlace:=PrimerNodo;
end;
end;
// Borro el primer nodo de la lista
If (ban=1 ) and (cont=1) then
begin
NodoAuxiliar:=PrimerNodo;
While Indice^.CampoEnlace <> Primernodo do
begin
Indice:=Indice^.CampoEnlace;
end;
PrimerNodo:=NodoAuxiliar^.CampoEnlace;
Indice^.CampoEnlace:=Primernodo;
end;
//ultima opcion, borrar un nodo del medio
If (ban=1 ) and (cont>1) then
begin
NodoAnterior^.CampoEnlace:=Indice^.CampoEnlace;
Dispose(Indice);
end;
PanelAltas.Visible:= False;
MiFormulario.Caption:=' NOMBRE ELIMINADO !!!!';
end;
end;
end;
END.


Volver al principio


Volver al principio MODIFICARCambiar datos
procedure TMiformulario.BotonCambiosClick(Sender: TObject);
begin
If PrimerNodo=NIL then
begin
GrillaDatos.Visible := False;
bCerrargrilla.Visible:=False;
Application.MessageBox('No hay datos...',
'LOS NODOS ESTAN VACIOS',mb_okcancel);
end
else
begin
Nombre.Text :='';
Domicilio.Text :='';
Telefono.Text :='';
MiFormulario.Caption:=' Ingrese el nombre a modificar y luego haga click en Acep. Modif';
GrillaDatos.Visible := False;
bCerrargrilla.Visible:=False;
GuardarModif.Visible:=False;
bAceptarBajas.Visible:=False;
Domicilio.Enabled:=False;
Telefono.Enabled:=False;
PanelAltas.Visible:=True;
bAceptarmodif.Visible:=True;
CerrarAltas.Visible:=True;
Nombre.SetFocus;
if Nombre.Text<> '' then
begin
bAceptarmodif.visible:=True;
end;
end;
end;

procedure TMiformulario.bAceptarmodifClick(Sender: TObject);
begin
ban:=0;
Domicilio.Enabled:=True;
Telefono.Enabled:=True;
NodoAnterior := PrimerNodo;
While (NodoAnterior^.CampoEnlace <> PrimerNodo) and (ban=0) do
begin
If NodoAnterior^.Nombre = Nombre.Text then
begin
ban:=1;
indice:=NodoAnterior;
end;
NodoAnterior := NodoAnterior^.CampoEnlace;
end;
If NodoAnterior^.Nombre = Nombre.Text then
begin
ban:=1;
indice:=NodoAnterior;
end;
If ban=0 then
begin
Application.MessageBox('Ese nombre no fue ingresado',
'No existe',mb_ok);
Nombre.text:='';
Nombre.setFocus;
end
else
begin
Nombre.text:=Indice^.Nombre;
Domicilio.text:=Indice^.Domicilio;
Telefono.text:= Indice^.Telefono;
Nombre.SetFocus;
If 1=APPLICATION.MessageBox( 'Esta es la persona que modifica ?',
'MODIFICACION',mb_OKCancel )then
begin
MiFormulario.Caption:=' Ingrese los nuevos datos';
if Nombre.Text<> '' then
begin
Guardarmodif.Visible:=True;
bAceptarModif.visible:=False;
end;
end;
end;
end;

procedure TMiformulario.GuardarmodifClick(Sender: TObject);
begin
Indice^.Nombre:=Nombre.Text;
Indice^.Domicilio:=Domicilio.Text;
Indice^.Telefono:=Telefono.Text;
Nombre.Text :='';
Domicilio.Text :='';
Telefono.Text :='';
end;


Volver al principio


Volver al principio OTROSProcedimientos anexos
procedure TMiformulario.bInicioClick(Sender: TObject);
begin
MiFormulario.Caption:='Haga "CLICK" en Altas para comenzar';
MiPanel.Visible:=False;
BotonAltas.Visible:=True;
BotonVerDatos.Visible:=True;
BotonBajas.Visible:=True;
BotonCambios.Visible:=True;
bInicio.Visible:=False;
end;

procedure TMiformulario.CerrarAltasClick(Sender: TObject);
begin
PanelAltas.Visible:=False;
Grabar.Visible:=False;
CerrarAltas.Visible:=False;
end;


Volver al principio