LISTAS en DELPHI Bienvenido al mundo paradigmático..!!
Un día sin sonrisas es un día perdido..!! PARADIGMA
Solo existen dos cosas importantes en la vida:
La primera es el sexo ..
y la segunda,.. no me acuerdo..!!
Woody Allen

QUE ES.? Qué es una LISTA.??
Clases Altas
Característica Consultas
Clases Bajas
Característica Modificar
Característica Bonus
Diseño | Listas de Doble Enlace | | Listas Circulares |
Diseño | VOLVER | | Archivo | | Base de Dato | | Arbol | | Matriz y Vector |

Un día sin sonrisas es un día perdido..!! PARADIGMA
Del árbol del silencio
pende el fruto de la seguridad..!!
Proverbio

.. ahora si este te interesa un comino...!!!, te puedo demostrar que ..

Te amo..!! tu tésis es un paradigma..!!

Te amo..!! y el aviso también..!!

Un día sin sonrisas es un día perdido..!! PARADIGMA
Si lo que vas a decir no es más bello que el silecio
.. no lo digas ..!!
Proverbio

Volver al principio


LENGUAJE DELPHI Volver al principio
Un día sin sonrisas es un día perdido..!! PARADIGMA
Cuando los que mandan pierden la verguenza
Los que obedecen pierden el respeto..!!
Confucio

LISTAS DINAMICAS

Por la simple lectura del siguiente código es muy sencillo que actives los objetos que se operan y luego puedes copiar estos algoritmos para manejar una lista como estructura de datos dinámica en sus versiones de enlace simple, doble y circular.

En este link también podrás aprender a manipular los archivos de datos de múltiples campos, tarea que te resultará sencilla si conoces tales procesos en lenguaje Pascal.


unit UListas;

interface

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

type
//DECLARACION PARA LISTA SIMPLE
  nodoS=^registroS;
  registroS=record
   codigo:integer;
   nombre:string;
   cantante:string;
   preCosto:string;
   preVenta:string;
   cantidad:integer;
   siguiente:nodoS;
   end;

//DECLARACION PARA LISTA DOBLE
  nodoD=^registroD;
  registroD=record
   codigo:integer;
   nombre:string;
   cantante:string;
   preCosto:string;
   preVenta:string;
   cantidad:integer;
   siguiente,anterior:nodoD;
   end;

//DECLARACION PARA LISTA CIRCULAR
  nodoC=^registroC;
  registroC=record
   codigo:integer;
   nombre:string;
   cantante:string;
   preCosto:string;
   preVenta:string;
   cantidad:integer;
   siguiente,anterior:nodoC;
   end;

type
  TFormListas = class(TForm)
    Menu: TMainMenu;
    ListaSimple: TMenuItem;
    Altas1: TMenuItem;
    Bajas1: TMenuItem;
    Modificaciones1: TMenuItem;
    N1: TMenuItem;
    Ordenar1: TMenuItem;
    PorCodigo1: TMenuItem;
    PorNombre1: TMenuItem;
    N2: TMenuItem;
    Listado1: TMenuItem;
    N3: TMenuItem;
    Salir1: TMenuItem;
    ListaDoble: TMenuItem;
    Altas2: TMenuItem;
    Bajas2: TMenuItem;
    Modificaciones2: TMenuItem;
    N4: TMenuItem;
    OrdenarProducto1: TMenuItem;
    PorCodigo2: TMenuItem;
    PorNombre2: TMenuItem;
    N5: TMenuItem;
    Listado2: TMenuItem;
    N6: TMenuItem;
    Salir2: TMenuItem;
    ListaCircular: TMenuItem;
    Altas3: TMenuItem;
    Bajas3: TMenuItem;
    Modificaciones3: TMenuItem;
    N7: TMenuItem;
    OrdenarProducto2: TMenuItem;
    PorCodigo3: TMenuItem;
    PorNombre3: TMenuItem;
    N8: TMenuItem;
    Listado3: TMenuItem;
    N9: TMenuItem;
    Salir3: TMenuItem;
    Ayuda: TMenuItem;
    Codificacion1: TMenuItem;
    ListaSimple2: TMenuItem;
    ListaDoble2: TMenuItem;
    ListaCircular2: TMenuItem;
    Acercade1: TMenuItem;
    N10: TMenuItem;
    Autores: TMenuItem;
    N11: TMenuItem;
    Salir4: TMenuItem;
    Image1: TImage;
    PanelAltas: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    LabelTitulo: TLabel;
    BoxNombre: TEdit;
    BoxCantante: TEdit;
    BoxPreCosto: TEdit;
    BoxPreVenta: TEdit;
    BGrabar: TBitBtn;
    BLimpiar: TBitBtn;
    BSalirAltas: TBitBtn;
    ComboCodigo: TComboBox;
    BModificar: TBitBtn;
    BEliminar: TBitBtn;
    PanelCantidad: TPanel;
    Label8: TLabel;
    Label9: TLabel;
    BOk: TBitBtn;
    BoxCantidad: TEdit;
    BoxCantidad2: TEdit;
    BoxCodigo: TEdit;
    codificacion: TMenuItem;
    UnitClave: TMenuItem;
    UnitPrincipal: TMenuItem;
    UnitAyuda: TMenuItem;
    UnitVisualizacion: TMenuItem;
    procedure FormActivate(Sender: TObject);
    function  BuscarCod(cod:String ): boolean;
    procedure Salir1Click(Sender: TObject);
    procedure Salir2Click(Sender: TObject);
    procedure Salir3Click(Sender: TObject);
    procedure Salir4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Altas1Click(Sender: TObject);
    procedure BLimpiarClick(Sender: TObject);
    procedure BSalirAltasClick(Sender: TObject);
    procedure BGrabarClick(Sender: TObject);
    procedure BOkClick(Sender: TObject);
    procedure Altas2Click(Sender: TObject);
    procedure Altas3Click(Sender: TObject);
    procedure ordenarSimple(ord: integer);
    procedure ordenarDoble(ord: integer);
    procedure ordenarCircular(ord: integer);
    procedure PorCodigo1Click(Sender: TObject);
    procedure PorNombre1Click(Sender: TObject);
    procedure PorCodigo2Click(Sender: TObject);
    procedure PorNombre2Click(Sender: TObject);
    procedure PorCodigo3Click(Sender: TObject);
    procedure PorNombre3Click(Sender: TObject);
    procedure Modificaciones1Click(Sender: TObject);
    procedure Modificaciones2Click(Sender: TObject);
    procedure Modificaciones3Click(Sender: TObject);
    procedure BModificarClick(Sender: TObject);
    procedure ComboCodigoChange(Sender: TObject);
    procedure Bajas1Click(Sender: TObject);
    procedure Bajas2Click(Sender: TObject);
    procedure Bajas3Click(Sender: TObject);
    procedure BEliminarClick(Sender: TObject);
    procedure Listado1Click(Sender: TObject);
    procedure Listado2Click(Sender: TObject);
    procedure Listado3Click(Sender: TObject);
    procedure Acercade1Click(Sender: TObject);
    procedure AutoresClick(Sender: TObject);
    procedure BoxNombreKeyPress(Sender: TObject; var Key: Char);
    procedure BoxCantanteKeyPress(Sender: TObject; var Key: Char);
    procedure BoxPreCostoKeyPress(Sender: TObject; var Key: Char);
    procedure BoxPreVentaKeyPress(Sender: TObject; var Key: Char);
    procedure BoxCantidadKeyPress(Sender: TObject; var Key: Char);
    procedure BoxCodigoKeyPress(Sender: TObject; var Key: Char);
    procedure BoxCantidad2KeyPress(Sender: TObject; var Key: Char);
    procedure ListaSimple2Click(Sender: TObject);
    procedure ListaDoble2Click(Sender: TObject);
    procedure ListaCircular2Click(Sender: TObject);
    procedure Validar(num:String);
    procedure BoxCodigoExit(Sender: TObject);
    procedure BoxPreCostoExit(Sender: TObject);
    procedure BoxPreVentaExit(Sender: TObject);
    procedure BoxCantidadExit(Sender: TObject);
    procedure BoxCantidad2Exit(Sender: TObject);
    procedure UnitClaveClick(Sender: TObject);
    procedure UnitPrincipalClick(Sender: TObject);
    procedure UnitAyudaClick(Sender: TObject);
    procedure UnitVisualizacionClick(Sender: TObject);

  private
    { Private declarations }
  public
    procedure llenarCombo;
    { Public declarations }
  end;

var
  FormListas: TFormListas;
  primeroS,actualS, nuevoS,ultimoS: nodoS;
  primeroD,actualD, nuevoD,ultimoD: nodoD;
  primeroC,actualC, nuevoC,ultimoC: nodoC;

  bandera,ban,mensaje,ord,banBaja, cantidad:integer;
  codigo:string;
  existe,focus:boolean;

implementation

uses UAyuda, UClave, UVer;

{$R *.DFM}

procedure TFormListas.FormActivate(Sender: TObject);
begin
 ban:=0;
 banBaja:=0;
 bandera:=2;
end;


Volver al principio


ALTAS
Ingreso de nuevos datos Volver al principio

Si tenes ganas de estudiar, sentate hasta que se te pase..!!!

CARGANDO NUEVOS NODOS

En los siguientes renglones podrás ver la manera como se maneja el proceso de carga de los campos de cada nodo y como se direccionan los punteros para generar las listas enlazadas dinámicamente.



procedure TFormListas.Altas1Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Ingreso de Datos de CDs';
  PanelAltas.Visible:=true;
  BoxCodigo.SetFocus;
  ListaSimple.Enabled:=false;
  ListaDoble.Enabled:=false;
  ListaCircular.Enabled:=false;
  bandera:=1;
end;

procedure TFormListas.Altas2Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Ingreso de Datos de CDs';
  PanelAltas.Visible:=true;
  BoxCodigo.SetFocus;
  ListaSimple.Enabled:=false;
  ListaDoble.Enabled:=false;
  ListaCircular.Enabled:=false;
  bandera:=2;
end;

procedure TFormListas.Altas3Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Ingreso de Datos de CDs';
  PanelAltas.Visible:=true;
  BoxCodigo.SetFocus;
  ListaSimple.Enabled:=false;
  ListaDoble.Enabled:=false;
  ListaCircular.Enabled:=false;
  bandera:=3;
end;

function TFormListas.BuscarCod(cod:String ) :boolean;
begin
  result:=false;
  case bandera of
       1: begin
           actualS:=primeroS;
           if (actualS<>nil) then
             while (actualS <>nil)do
              begin
                if (StrToInt(cod) = actualS^.codigo) then
                 begin
	           result:=true;//Indica que el código ingresado existe
                   exit;
                 end;
                 actualS:=actualS^.siguiente;
	      end;
          end;

       2: begin
           actualD:=primeroD;
           if (actualD<>nil) then
               while (actualD <>nil)do
                begin
                  if (StrToInt(cod) = actualD^.codigo) then
                   begin
	             result:=true;//Indica que el código ingresado existe
                     exit;
             	   end;
                   actualD:=actualD^.siguiente;
	         end;
          end;
       3: begin
           actualC:=primeroC;
           if (primeroC=nil) then
            begin
              result:=false;
              exit;
            end;
            while (actualC^.siguiente <>primeroC)do
                begin
                  if (StrToInt(cod) = actualC^.codigo) then
                   begin
	             result:=true;//Indica que el código ingresado existe
                     exit;
             	   end;
                   actualC:=actualC^.siguiente;
	         end;
             if (StrToInt(cod) = actualC^.codigo) then
               result:=true;
             exit;
          end;
  end;
end;

procedure TFormListas.Salir1Click(Sender: TObject);
begin
  FormClave.close;
end;


procedure TFormListas.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FormClave.Close;
end;

procedure TFormListas.BLimpiarClick(Sender: TObject);
begin
  BoxCodigo.Enabled:=true;
  BoxNombre.Enabled:=true;
  BoxCantante.Enabled:=true;
  BoxPreCosto.Enabled:=true;
  BoxPreVenta.Enabled:=true;
  BoxCantidad.Enabled:=true;
  BoxCodigo.Clear;
  BoxNombre.Clear;
  BoxCantante.Clear;
  BoxPreCosto.Clear;
  BoxPreVenta.Clear;
  BoxCantidad.Clear;
  BoxCodigo.SetFocus;
  BGrabar.Enabled:=true;
end;

procedure TFormListas.BSalirAltasClick(Sender: TObject);
begin
  PanelAltas.Visible:=false;
  BoxCodigo.Clear;
  BoxNombre.Clear;
  BoxCantante.Clear;
  BoxPreCosto.Clear;
  BoxPreVenta.Clear;
  BoxCantidad.Clear;
  BoxCodigo.Enabled:=true;
  BoxNombre.Enabled:=true;
  BoxCantante.Enabled:=true;
  BoxPreCosto.Enabled:=true;
  BoxPreVenta.Enabled:=true;
  BoxCantidad.Enabled:=true;
  BGrabar.Enabled:=true;
  ComboCodigo.Visible:=false;
  BGrabar.Visible:=true;
  BModificar.Visible:=false;
  BEliminar.Visible:=false;
  BoxCodigo.Visible:=true;
  BLimpiar.Enabled:=true;
  ListaSimple.Enabled:=true;
  ListaDoble.Enabled:=true;
  ListaCircular.Enabled:=true;
  banBaja:=0;
end;

procedure TFormListas.llenarCombo;
begin
  FormListas.ComboCodigo.Items.Clear;
  FormListas.ComboCodigo.Clear;
  FormVer.ComboCodigo.Items.Clear;
  FormVer.ComboCodigo.Clear;
  case bandera of
       1: begin
           actualS:=primeroS;
           while(actualS <> nil)do
            begin
              FormListas.ComboCodigo.Items.Add(IntToStr(actualS^.codigo));
              FormVer.ComboCodigo.Items.Add(IntToStr(actualS^.codigo));
              actualS:=actualS^.siguiente;
            end;
          end;
       2: begin
           actualD:=primeroD;
           while(actualD <> nil)do
            begin
              FormListas.ComboCodigo.Items.Add(IntToStr(actualD^.codigo));
              FormVer.ComboCodigo.Items.Add(IntToStr(actualD^.codigo));
              actualD:=actualD^.siguiente;
            end;
          end;
       3: begin
           actualC:=primeroC;
           while(actualC^.siguiente <> primeroC)do
            begin
              FormListas.ComboCodigo.Items.Add(IntToStr(actualC^.codigo));
              FormVer.ComboCodigo.Items.Add(IntToStr(actualC^.codigo));
              actualC:=actualC^.siguiente;
            end;
            FormListas.ComboCodigo.Items.Add(IntToStr(actualC^.codigo));
            FormVer.ComboCodigo.Items.Add(IntToStr(actualC^.codigo));
          end;
  end;
end;

procedure TFormListas.BGrabarClick(Sender: TObject);
begin
  if ((BoxCodigo.Text='')or (BoxNombre.Text='')or (BoxCantidad.Text=''))then
    Application.MessageBox('Verifique si están completos los campos de Código,Nombre o Cantidad',
                           'Faltan Datos!!!',mb_iconinformation)
  else
   begin
     case bandera of
         1: begin
              codigo:=BoxCodigo.Text;
              if not BuscarCod(codigo) then
               begin
                 new(nuevoS);
                 nuevoS^.codigo:=StrToInt(BoxCodigo.Text);
                 nuevoS^.nombre:=UpperCase(BoxNombre.Text);
                 nuevoS^.cantante:=UpperCase(BoxCantante.Text);
                 nuevoS^.preCosto:=BoxPreCosto.Text;
                 nuevoS^.preVenta:=BoxPreVenta.Text;
                 nuevoS^.cantidad:=StrToInt(BoxCantidad.Text);
                 nuevoS^.siguiente:=nil;
                 ultimoS:=nuevoS;
                 if (primeroS=nil)then
       	            primeroS:=nuevoS
                 else
      	           begin
        	     actualS:=primeroS;
                     while (actualS^.siguiente <> nil)do
	               actualS:=actualS^.siguiente;
                     actualS^.siguiente:=nuevoS;
                  end;
                 llenarCombo;
                 BoxCodigo.Clear;
                 BoxNombre.Clear;
                 BoxCantante.Clear;
                 BoxPreCosto.Clear;
                 BoxPreVenta.Clear;
                 BoxCantidad.Clear;
                 BoxCodigo.SetFocus;
       	       end
              else
               begin
                 mensaje:=Application.MessageBox('¿Desea ampliar el stock de éste producto?','Código Ya Existente!',MB_ICONQUESTION+MB_OKCANCEL+MB_DEFBUTTON1);
                 if (mensaje=IDOK)then
                  begin
                    BoxCodigo.Enabled:=false;
                    BoxNombre.Enabled:=false;
                    BoxCantante.Enabled:=false;
                    BoxPreCosto.Enabled:=false;
                    BoxPreVenta.Enabled:=false;
                    BoxCantidad.Enabled:=false;
                    BoxNombre.Text:=actualS^.nombre;
                    BoxCantante.Text:=actualS^.cantante;
                    BoxPreCosto.Text:=actualS^.preCosto;
                    BoxPreVenta.Text:=actualS^.preVenta;
                    BoxCantidad.Text:=IntToStr(actualS^.cantidad);
                    PanelCantidad.Visible:=true;
                    BoxCantidad2.SetFocus;
                    PanelAltas.Enabled:=false;
                  end
                 else
                  begin
                    BoxCodigo.Clear;
                    BoxNombre.Clear;
                    BoxCantante.Clear;
                    BoxPreCosto.Clear;
                    BoxPreVenta.Clear;
                    BoxCantidad.Clear;
                    BoxCodigo.SetFocus;
                 end;
               end;
            end;
         2: begin
              codigo:=BoxCodigo.Text;
              existe:=BuscarCod(codigo);
              if (existe=false)then
               begin
                 nuevoD:= new(nodoD);
                 nuevoD^.codigo:=StrToInt(BoxCodigo.Text);
                 nuevoD^.nombre:=UpperCase(BoxNombre.Text);
                 nuevoD^.cantante:=UpperCase(BoxCantante.Text);
                 nuevoD^.preCosto:=BoxPreCosto.Text;
                 nuevoD^.preVenta:=BoxPreVenta.Text;
                 nuevoD^.cantidad:=StrToInt(BoxCantidad.Text);
                 nuevoD^.siguiente:=nil;
                 nuevoD^.anterior:=nil;
                 ultimoD:=nuevoD;
                 if (primeroD=nil)then
	            primeroD:=nuevoD
	         else
	          begin
	            actualD:=primeroD;
                    while (actualD^.siguiente <> nil)do
	               actualD:=actualD^.siguiente;
	            actualD^.siguiente:=nuevoD;
	            nuevoD^.anterior:=actualD;
                    //nuevoD^.siguiente:=nil;
                  end;
                 llenarCombo;
                 BoxCodigo.Clear;
                 BoxNombre.Clear;
                 BoxCantante.Clear;
                 BoxPreCosto.Clear;
                 BoxPreVenta.Clear;
                 BoxCantidad.Clear;
                 BoxCodigo.SetFocus;
	       end
              else
               begin
                 mensaje:=Application.MessageBox('¿Desea ampliar el stock de éste producto?','Código Ya Existente!',MB_ICONQUESTION+MB_OKCANCEL+MB_DEFBUTTON1);
                 if (mensaje=IDOK)then
                   begin
                    BoxCodigo.Enabled:=false;
                    BoxNombre.Enabled:=false;
                    BoxCantante.Enabled:=false;
                    BoxPreCosto.Enabled:=false;
                    BoxPreVenta.Enabled:=false;
                    BoxCantidad.Enabled:=false;
                    BoxNombre.Text:=actualD^.nombre;
                    BoxCantante.Text:=actualD^.cantante;
                    BoxPreCosto.Text:=actualD^.preCosto;
                    BoxPreVenta.Text:=actualD^.preVenta;
                    BoxCantidad.Text:=IntToStr(actualD^.cantidad);
                    PanelCantidad.Visible:=true;
                    BoxCantidad2.SetFocus;
                  end
                 else
                  begin
                    BoxCodigo.Clear;
                    BoxNombre.Clear;
                    BoxCantante.Clear;
                    BoxPreCosto.Clear;
                    BoxPreVenta.Clear;
                    BoxCantidad.Clear;
                    BoxCodigo.SetFocus;
                  end;
                end;
            end;
         3: begin
              codigo:=BoxCodigo.Text;
              existe:=BuscarCod(codigo);
              if (existe=false)then
               begin
                 nuevoC:= new(nodoC);
                 nuevoC^.codigo:=StrToInt(BoxCodigo.Text);
                 nuevoC^.nombre:=UpperCase(BoxNombre.Text);
                 nuevoC^.cantante:=UpperCase(BoxCantante.Text);
                 nuevoC^.preCosto:=BoxPreCosto.Text;
                 nuevoC^.preVenta:=BoxPreVenta.Text;
                 nuevoC^.cantidad:=StrToInt(BoxCantidad.Text);
                 nuevoC^.siguiente:=nil;
                 nuevoC^.anterior:=nil;
                 ultimoC:=nuevoC;
                 if (primeroC=nil)then
                  begin
	            primeroC:=nuevoC;
	            primeroC^.siguiente:=nuevoC;
	            primeroC^.anterior:=nuevoC;
                  end
	         else
	          begin
	            actualC:=primeroC;
                    while (actualC^.siguiente <> primeroC)do
	               actualC:=actualC^.siguiente;
	            actualC^.siguiente:=nuevoC;
	            nuevoC^.anterior:=actualC;
                    nuevoC^.siguiente:=primeroC;
	            primeroC^.anterior:=nuevoC;
                  end;
                 llenarCombo;
                 BoxCodigo.Clear;
                 BoxNombre.Clear;
                 BoxCantante.Clear;
                 BoxPreCosto.Clear;
                 BoxPreVenta.Clear;
                 BoxCantidad.Clear;
                 BoxCodigo.SetFocus;
	       end
             else
               begin
                 mensaje:=Application.MessageBox('¿Desea ampliar el stock de éste producto?','Código Ya Existente!',MB_ICONQUESTION+MB_OKCANCEL+MB_DEFBUTTON1);
                 if (mensaje=IDOK)then
                  begin
                    BoxCodigo.Enabled:=false;
                    BoxNombre.Enabled:=false;
                    BoxCantante.Enabled:=false;
                    BoxPreCosto.Enabled:=false;
                    BoxPreVenta.Enabled:=false;
                    BoxCantidad.Enabled:=false;
                    BoxNombre.Text:=actualC^.nombre;
                    BoxCantante.Text:=actualC^.cantante;
                    BoxPreCosto.Text:=actualC^.preCosto;
                    BoxPreVenta.Text:=actualC^.preVenta;
                    BoxCantidad.Text:=IntToStr(actualC^.cantidad);
                    PanelCantidad.Visible:=true;
                    BoxCantidad2.SetFocus;
                  end
                 else
                  begin
                    BoxCodigo.Clear;
                    BoxNombre.Clear;
                    BoxCantante.Clear;
                    BoxPreCosto.Clear;
                    BoxPreVenta.Clear;
                    BoxCantidad.Clear;
                    BoxCodigo.SetFocus;
                  end;
                end;
            end;
     end;
   end;
end;


Volver al principio


CONSULTAS
Ver datos Volver al principio

El amor como la gripe siempre terminan en la cama..!!!

VIENDO EL CONTENIDO DE LOS NODOS

En este sector te recomiendo comprender los procedimientos de transferencia de los datos de los nodos a los objetos de visualización.



procedure TFormListas.BOkClick(Sender: TObject);
begin
  case (bandera)of
       1: begin
            actualS^.cantidad:=StrToInt(BoxCantidad2.Text) + actualS^.cantidad;
            cantidad:=actualS^.cantidad;
          end;
       2: begin
            actualD^.cantidad:=StrToInt(BoxCantidad2.Text) + actualD^.cantidad;
            cantidad:=actualD^.cantidad;
          end;
       3: begin
            actualC^.cantidad:=StrToInt(BoxCantidad2.Text) + actualC^.cantidad;
            cantidad:=actualC^.cantidad;
          end;
  end;
  BoxCantidad.Text:=IntToStr(cantidad);
  BoxCantidad2.Clear;
  PanelCantidad.Visible:=false;
  BGrabar.Enabled:=false;
  PanelAltas.Enabled:=true;
end;

procedure TFormListas.ordenarSimple(ord: integer);
var
   cod, cant:integer;
   nom,can,precos,preven:string;
   aux:nodoS ;
begin
  bandera:=1;
  actualS:=primeroS;
  while (actualS^.siguiente <> nil)do
   begin
     aux:=actualS^.siguiente;
     while (aux <> nil)do
       begin
	 if (ord=0)then//Indica ordenamiento por c¢digo
	  begin
	    if (actualS.codigo > aux.codigo) then
	     begin
	       cod:=actualS^.codigo;
	       nom:=actualS^.nombre;
	       can:=actualS^.cantante;
	       precos:=actualS^.preCosto;
	       preven:=actualS^.preVenta;
	       cant:=actualS^.cantidad;
	       actualS^.codigo:=aux^.codigo;
	       actualS^.nombre:=aux^.nombre;
	       actualS^.cantante:=aux^.cantante;
	       actualS^.preCosto:=aux^.preCosto;
	       actualS^.preVenta:=aux^.preVenta;
	       actualS^.cantidad:=aux^.cantidad;
	       aux^.codigo:=cod;
	       aux^.nombre:=nom;
	       aux^.cantante:=can;
	       aux^.preCosto:=precos;
	       aux^.preVenta:=preven;
	       aux^.cantidad:=cant;
	     end;
	  end
	 else
	   if (actualS^.nombre > aux^.nombre)then
	    begin
	      cod:=actualS^.codigo;
	      nom:=actualS^.nombre;
	      can:=actualS^.cantante;
	      precos:=actualS^.preCosto;
	      preven:=actualS^.preVenta;
	      cant:=actualS^.cantidad;
	      actualS^.codigo:=aux^.codigo;
	      actualS^.nombre:=aux^.nombre;
	      actualS^.cantante:=aux^.cantante;
	      actualS^.preCosto:=aux^.preCosto;
	      actualS^.preVenta:=aux^.preVenta;
	      actualS^.cantidad:=aux^.cantidad;
	      aux^.codigo:=cod;
	      aux^.nombre:=nom;
	      aux^.cantante:=can;
	      aux^.preCosto:=precos;
	      aux^.preVenta:=preven;
	      aux^.cantidad:=cant;
	    end;
	   aux:=aux^.siguiente;
       end;
     actualS:=actualS^.siguiente;
  end;
  llenarCombo;
  if (ord=0)then
     Application.MessageBox('La Lista está ordenada por CODIGO','',MB_ICONEXCLAMATION+MB_OK)
  else
     Application.MessageBox('La Lista está ordenada por NOMBRE','',MB_ICONEXCLAMATION+MB_OK);
end;

procedure TFormListas.ordenarDoble(ord: integer);
var
   cod, cant:integer;
   nom,can,precos,preven:string;
   aux:nodoD ;
begin
  bandera:=2;
  actualD:=primeroD;
  while (actualD^.siguiente <> nil)do
   begin
     aux:=actualD^.siguiente;
     while (aux <>nil)do
      begin
	if (ord=0)then//Indica ordenamiento por c¢digo
    	 begin
	   if (actualD^.codigo > aux^.codigo)then
	    begin
	      cod:=actualD^.codigo;
	      nom:=actualD^.nombre;
	      can:=actualD^.cantante;
	      precos:=actualD^.preCosto;
	      preven:=actualD^.preVenta;
	      cant:=actualD^.cantidad;
	      actualD^.codigo:=aux^.codigo;
	      actualD^.nombre:=aux^.nombre;
	      actualD^.cantante:=aux^.cantante;
	      actualD^.preCosto:=aux^.preCosto;
	      actualD^.preVenta:=aux^.preVenta;
	      actualD^.cantidad:=aux^.cantidad;
	      aux^.codigo:=cod;
	      aux^.nombre:=nom;
	      aux^.cantante:=can;
	      aux^.preCosto:=precos;
	      aux^.preVenta:=preven;
	      aux^.cantidad:=cant;
	    end;
	 end
	else
	  if (actualD^.nombre > aux^.nombre) then
	   begin
	     cod:=actualD^.codigo;
	     nom:=actualD^.nombre;
	     can:=actualD^.cantante;
	     precos:=actualD^.preCosto;
	     preven:=actualD^.preVenta;
	     cant:=actualD^.cantidad;
	     actualD^.codigo:=aux^.codigo;
	     actualD^.nombre:=aux^.nombre;
	     actualD^.cantante:=aux^.cantante;
	     actualD^.preCosto:=aux^.preCosto;
	     actualD^.preVenta:=aux^.preVenta;
	     actualD^.cantidad:=aux^.cantidad;
	     aux^.codigo:=cod;
	     aux^.nombre:=nom;
	     aux^.cantante:=can;
	     aux^.preCosto:=precos;
	     aux^.preVenta:=preven;
	     aux^.cantidad:=cant;
	    end;
	  aux:=aux^.siguiente;
      end;
   actualD:=actualD^.siguiente;
  end;
 llenarCombo;
 if (ord=0)then
    Application.MessageBox('La Lista está ordenada por CODIGO','',MB_ICONEXCLAMATION+MB_OK)
 else
    Application.MessageBox('La Lista está ordenada por NOMBRE','',MB_ICONEXCLAMATION+MB_OK);

end;

procedure TFormListas.ordenarCircular(ord: integer);
var
   cod, cant:integer;
   nom,can,precos,preven:string;
   aux:nodoC ;
begin
  bandera:=3;
  actualC:=primeroC;
  while (actualC^.siguiente <> primeroC)do
   begin
     aux:=actualC^.siguiente;
     while (aux <> primeroC)do
      begin
	if (ord=0)then//Indica ordenamiento por c¢digo
    	 begin
	   if (actualC^.codigo > aux^.codigo)then
	    begin
	      cod:=actualC^.codigo;
	      nom:=actualC^.nombre;
	      can:=actualC^.cantante;
	      precos:=actualC^.preCosto;
	      preven:=actualC^.preVenta;
	      cant:=actualC^.cantidad;
	      actualC^.codigo:=aux^.codigo;
	      actualC^.nombre:=aux^.nombre;
	      actualC^.cantante:=aux^.cantante;
	      actualC^.preCosto:=aux^.preCosto;
	      actualC^.preVenta:=aux^.preVenta;
	      actualC^.cantidad:=aux^.cantidad;
	      aux^.codigo:=cod;
	      aux^.nombre:=nom;
	      aux^.cantante:=can;
	      aux^.preCosto:=precos;
	      aux^.preVenta:=preven;
	      aux^.cantidad:=cant;
	    end;
	 end
	else
	  if (actualC^.nombre > aux^.nombre)then
	   begin
	     cod:=actualC^.codigo;
	     nom:=actualC^.nombre;
	     can:=actualC^.cantante;
	     precos:=actualC^.preCosto;
	     preven:=actualC^.preVenta;
	     cant:=actualC^.cantidad;
	     actualC^.codigo:=aux^.codigo;
	     actualC^.nombre:=aux^.nombre;
	     actualC^.cantante:=aux^.cantante;
	     actualC^.preCosto:=aux^.preCosto;
	     actualC^.preVenta:=aux^.preVenta;
	     actualC^.cantidad:=aux^.cantidad;
	     aux^.codigo:=cod;
	     aux^.nombre:=nom;
	     aux^.cantante:=can;
	     aux^.preCosto:=precos;
	     aux^.preVenta:=preven;
	     aux^.cantidad:=cant;
	   end;
	  aux:=aux^.siguiente;
      end;
    actualC:=actualC^.siguiente;
  end;
  llenarCombo;
  if (ord=0)then
    Application.MessageBox('La Lista está ordenada por CODIGO','',MB_ICONEXCLAMATION+MB_OK)
  else
    Application.MessageBox('La Lista está ordenada por NOMBRE','',MB_ICONEXCLAMATION+MB_OK);

end;

procedure TFormListas.PorCodigo1Click(Sender: TObject);
begin
 if (primeroS <> nil) then
  begin
    ord:=0;
    ordenarSimple(ord);
  end
 else
   Application.MessageBox('No hay datos para ordenar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.PorNombre1Click(Sender: TObject);
begin
  if (primeroS <> nil)then
   begin
     ord:=1;
     ordenarSimple(ord);
   end
  else
    Application.MessageBox('No hay datos para ordenar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.PorCodigo2Click(Sender: TObject);
begin
  if (primeroD <> nil)then
   begin
     ord:=0;
     ordenarDoble(ord);
   end
  else
    Application.MessageBox('No hay datos para ordenar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.PorNombre2Click(Sender: TObject);
begin
  if (primeroD <> nil)then
   begin
     ord:=1;
     ordenarDoble(ord);
   end
  else
    Application.MessageBox('No hay datos para ordenar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.PorCodigo3Click(Sender: TObject);
begin
  if (primeroC <> nil)then
   begin
     ord:=0;
     ordenarCircular(ord);
   end
  else
    Application.MessageBox('No hay datos para ordenar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.PorNombre3Click(Sender: TObject);
begin
  if (primeroC <> nil)then
   begin
     ord:=1;
     ordenarCircular(ord);
   end
  else
    Application.MessageBox('No hay datos para ordenar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;


Volver al principio


MODIFICACIONES
CAMBIOS Volver al principio

Qué cuentan las ovejas para poder dormir..!!!

CAMBIAR EL CONTENIDO DE LOS NODOS

En los siguientes renglones te recomiendo captar los mecanismos de ubicación del nodo a modificar y la forma de actuar el puntero direccionado al campo llave.


procedure TFormListas.Modificaciones1Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Modificación de Datos';
  if (primeroS <> nil)then
   begin
     bandera:=1;
     PanelAltas.Visible:=true;
     BoxCodigo.Visible:=false;
     ComboCodigo.Visible:=true;
     BGrabar.Visible:=false;
     BModificar.Visible:=true;
     BLimpiar.Enabled:=false;
     ListaSimple.Enabled:=false;
     ListaDoble.Enabled:=false;
     ListaCircular.Enabled:=false;
     llenarCombo;
   end
  else
    Application.MessageBox('No hay datos para Modificar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.Modificaciones2Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Modificación de Datos';
  if (primeroD <> nil)then
   begin
     bandera:=2;
     PanelAltas.Visible:=true;
     BoxCodigo.Visible:=false;
     ComboCodigo.Visible:=true;
     BGrabar.Visible:=false;
     BModificar.Visible:=true;
     BLimpiar.Enabled:=false;
     ListaSimple.Enabled:=false;
     ListaDoble.Enabled:=false;
     ListaCircular.Enabled:=false;
     llenarCombo;
   end
 else
   Application.MessageBox('No hay datos para Modificar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.Modificaciones3Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Modificación de Datos';
  if (primeroC <> nil)then
   begin
     bandera:=3;
     PanelAltas.Visible:=true;
     BoxCodigo.Visible:=false;
     ComboCodigo.Visible:=true;
     BGrabar.Visible:=false;
     BModificar.Visible:=true;
     BLimpiar.Enabled:=false;
     ListaSimple.Enabled:=false;
     ListaDoble.Enabled:=false;
     ListaCircular.Enabled:=false;
     llenarCombo;
   end
 else
   Application.MessageBox('No hay datos para Modificar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.BModificarClick(Sender: TObject);
begin
  case bandera of
       1: begin
            actualS^.nombre:=UpperCase(BoxNombre.Text);
            actualS^.cantante:=UpperCase(BoxCantante.Text);
            actualS^.preCosto:=BoxPreCosto.Text;
            actualS^.preVenta:=BoxPreVenta.Text;
            actualS^.cantidad:=StrToInt(BoxCantidad.Text);
           end;
       2: begin
            actualD^.nombre:=UpperCase(BoxNombre.Text);
            actualD^.cantante:=UpperCase(BoxCantante.Text);
            actualD^.preCosto:=BoxPreCosto.Text;
            actualD^.preVenta:=BoxPreVenta.Text;
            actualD^.cantidad:=StrToInt(BoxCantidad.Text);
          end;
       3: begin
            actualC^.nombre:=UpperCase(BoxNombre.Text);
            actualC^.cantante:=UpperCase(BoxCantante.Text);
            actualC^.preCosto:=BoxPreCosto.Text;
            actualC^.preVenta:=BoxPreVenta.Text;
            actualC^.cantidad:=StrToInt(BoxCantidad.Text);
          end;
  end;
  Application.MessageBox('Los datos ya han sido modificados','Modificación de Datos',MB_ICONINFORMATION+MB_OK);
  BoxNombre.Clear;
  BoxCantante.Clear;
  BoxPreCosto.Clear;
  BoxPreVenta.Clear;
  BoxCantidad.Clear;
  BoxNombre.SetFocus;
end;


Volver al principio


BAJAS
Eliminando datos Volver al principio

Me las pagarán..!!! ( FMI )

BORRAR NODOS CON DATOS

En estos algoritmos te conviene captar los conceptos de baja lógica y baja física



procedure TFormListas.Bajas1Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Eliminación de Datos';
  if (primeroS <> nil)then
   begin
     bandera:=1;
     PanelAltas.Visible:=true;
     BoxCodigo.Visible:=false;
     ComboCodigo.Visible:=true;
     BGrabar.Visible:=false;
     BModificar.Visible:=false;
     BEliminar.Visible:=true;
     BLimpiar.Enabled:=false;
     ListaSimple.Enabled:=false;
     ListaDoble.Enabled:=false;
     ListaCircular.Enabled:=false;
     banBaja:=1;
     llenarCombo;
   end
  else
    Application.MessageBox('No hay datos para Eliminar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.Bajas2Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Eliminación de Datos';
  if (primeroD <> nil)then
   begin
     bandera:=2;
     PanelAltas.Visible:=true;
     BoxCodigo.Visible:=false;
     ComboCodigo.Visible:=true;
     BGrabar.Visible:=false;
     BModificar.Visible:=false;
     BEliminar.Visible:=true;
     BLimpiar.Enabled:=false;
     ListaSimple.Enabled:=false;
     ListaDoble.Enabled:=false;
     ListaCircular.Enabled:=false;
     banBaja:=1;
     llenarCombo;
   end
  else
    Application.MessageBox('No hay datos para Eliminar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.Bajas3Click(Sender: TObject);
begin
  LabelTitulo.Caption:='Eliminación de Datos';
  if (primeroC <> nil)then
   begin
     bandera:=3;
     PanelAltas.Visible:=true;
     BoxCodigo.Visible:=false;
     ComboCodigo.Visible:=true;
     BGrabar.Visible:=false;
     BModificar.Visible:=false;
     BEliminar.Visible:=true;
     BLimpiar.Enabled:=false;
     ListaSimple.Enabled:=false;
     ListaDoble.Enabled:=false;
     ListaCircular.Enabled:=false;
     banBaja:=1;
     llenarCombo;
   end
  else
    Application.MessageBox('No hay datos para Eliminar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.BEliminarClick(Sender: TObject);
var
   auxS,aux1S:nodoS;
   auxD,aux1D:nodoD;
   auxC,auxC1:nodoC;
begin
  case bandera of
       1: begin
            if (primeroS <> nil)then
             begin
               mensaje:=Application.MessageBox('Deseas eliminar estos datos?','Eliminación de Datos',MB_ICONQUESTION+MB_OKCANCEL+MB_DEFBUTTON1);
               if (mensaje = IDOK)then
                begin
                  auxS:=actualS;
                  if (actualS = primeroS)then
                    primeroS:=actualS^.siguiente
                  else
                   begin
                     actualS:=primeroS;
	             while(actualS^.siguiente <> nil)  do
		      begin
		        if (actualS^.siguiente = auxS) then
		         begin
			   aux1S:=actualS;
			   break;
			 end;
		        actualS:=actualS^.siguiente;
		      end;
	             aux1S^.siguiente:=auxS^.siguiente;
	           end;
	          dispose(auxS);
                  llenarCombo;
                  Application.MessageBox('Los datos ya han sido eliminados','Eliminación de Datos',MB_ICONINFORMATION+MB_OK);
                end;
             end
            else
               Application.MessageBox('No hay datos para Eliminar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
          end;
       2: begin
            if (primeroD <> nil)then
             begin
               mensaje:=Application.MessageBox('Deseas eliminar estos datos?','Eliminación de Datos',MB_ICONQUESTION+MB_OKCANCEL+MB_DEFBUTTON1);
               if (mensaje = IDOK)then
                begin
                  if (primeroD^.siguiente = nil) then
                    primeroD:=nil
                  else
                   begin
                    if(actualD = primeroD)then
                     begin
                       primeroD:=actualD^.siguiente;
                       primeroD^.anterior:=nil;
                     end
                    else
                     begin
                      if (actualD^.siguiente=nil) then
                       begin
                         auxD:=actualD^.anterior;
                         auxD^.siguiente:=nil;
                       end
                      else
                       begin
                         auxD:=actualD^.anterior;
                         auxD^.siguiente:=actualD^.siguiente;
                         aux1D:=actualD^.siguiente;
                         aux1D^.anterior:=auxD;
                       end;
                     end;
                  end;
                  dispose(actualD);
                  llenarCombo;
                  Application.MessageBox('Los datos ya han sido eliminados','Eliminación de Datos',MB_ICONINFORMATION+MB_OK);
                end;
             end
            else
               Application.MessageBox('No hay datos para Eliminar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
          end;
       3: begin
            if (primeroC <> nil )then
             begin
               mensaje:=Application.MessageBox('Deseas eliminar estos datos?','Eliminación de Datos',MB_ICONQUESTION+MB_OKCANCEL+MB_DEFBUTTON1);
               if (mensaje = IDOK)then
                begin
	          if (primeroC^.siguiente=primeroC)then
                   begin
	            primeroC:=nil;
                    FormListas.ComboCodigo.Items.Clear;
                    FormListas.ComboCodigo.Clear;
                    FormVer.ComboCodigo.Items.Clear;
                    FormVer.ComboCodigo.Clear;
                   end
                  else
                   begin
                     auxC:=actualC^.anterior;
	             auxC1:=actualC^.siguiente;
                     auxC^.siguiente:=auxC1;
	             auxC1^.anterior:=auxC;
	             if (actualC = primeroC)then
                       primeroC:=auxC1;
	  	     dispose(actualC);
	             llenarCombo;
                   end;
                  Application.MessageBox('Los datos ya han sido eliminados','Eliminación de Datos',MB_ICONINFORMATION+MB_OK);
                end;
             end
            else
               Application.MessageBox('No hay datos para Eliminar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
          end;
  end;
  BoxNombre.Clear;
  BoxCantante.Clear;
  BoxPreCosto.Clear;
  BoxPreVenta.Clear;
  BoxCantidad.Clear;
end;

procedure TFormListas.ComboCodigoChange(Sender: TObject);
begin
  codigo:=ComboCodigo.Text;
  case bandera of
       1: begin
            BuscarCod(codigo);
            BoxNombre.Text:=actualS^.nombre;
            BoxCantante.Text:=actualS^.cantante;
            BoxPreCosto.Text:=actualS^.preCosto;
            BoxPreVenta.Text:=actualS^.preVenta;
            BoxCantidad.Text:=IntToStr(actualS^.cantidad);
          end;
       2: begin
            BuscarCod(codigo);
            BoxNombre.Text:=actualD^.nombre;
            BoxCantante.Text:=actualD^.cantante;
            BoxPreCosto.Text:=actualD^.preCosto;
            BoxPreVenta.Text:=actualD^.preVenta;
            BoxCantidad.Text:=IntToStr(actualD^.cantidad);
          end;
       3: begin
            BuscarCod(codigo);
            BoxNombre.Text:=actualC^.nombre;
            BoxCantante.Text:=actualC^.cantante;
            BoxPreCosto.Text:=actualC^.preCosto;
            BoxPreVenta.Text:=actualC^.preVenta;
            BoxCantidad.Text:=IntToStr(actualC^.cantidad);
          end;
  end;
  if (banBaja = 1)then
   begin
     BoxNombre.Enabled:=false;
     BoxCantante.Enabled:=false;
     BoxPreCosto.Enabled:=false;
     BoxPreVenta.Enabled:=false;
     BoxCantidad.Enabled:=false;
     BEliminar.SetFocus;
   end
 else
   BModificar.SetFocus;
end;


Volver al principio


PROCEDIMIENTOS VARIOS
Accesorios Volver al principio

Soy un quemo..!!! ( Nerón )

ALGORITMOS COMPLEMENTARIOS

Este sector te propone un conjunto de procedimientos de uso común en una gran mayoría de aplicaciones codificados en Delphi y que por lo tanto puedes ajustarlos a tus propias necesidades.

Buena suerte..!!!




procedure TFormListas.Listado1Click(Sender: TObject);
begin
  if (primeroS<>nil)then
   begin
     FormListas.Hide;
     FormVer.Show;
   end
  else
    Application.MessageBox('No hay datos para Visualizar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.Listado2Click(Sender: TObject);
begin
  if (primeroD<>nil)then
   begin
     FormListas.Hide;
     FormVer.Show;
   end
  else
    Application.MessageBox('No hay datos para Visualizar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.Listado3Click(Sender: TObject);
begin
  if (primeroC<>nil)then
   begin
     FormListas.Hide;
     FormVer.Show;
   end
  else
    Application.MessageBox('No hay datos para Visualizar','Lista Vacía',MB_ICONINFORMATION+MB_OK);
end;

procedure TFormListas.Acercade1Click(Sender: TObject);
begin
  FormAyuda.Show;
  FormListas.Hide;
  FormAyuda.PanelAcerca.Visible:=true;
  FormAyuda.Caption:='                                 Acerca del Programa';
end;

procedure TFormListas.AutorClick(Sender: TObject);
begin
  FormAyuda.PanelAutoras.Visible:=true;
  FormAyuda.Show;
  FormListas.Hide;
  FormAyuda.Caption:='                                 AUTOR DEL PROGRAMA';
end;

procedure TFormListas.BoxNombreKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = #13)then
    BoxCantante.SetFocus;
end;

procedure TFormListas.BoxCantanteKeyPress(Sender: TObject; var Key: Char);
begin
 if (Key = #13)then
   BoxPreCosto.SetFocus;
end;

procedure TFormListas.BoxPreCostoKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key =#13)then
   begin
     focus:=false;
     Validar(BoxPreCosto.Text);
     if (focus = false)then
         BoxPreVenta.SetFocus
     else
      begin
        mensaje:= Application.MessageBox('El Precio de costo debe ser numérico!','Preste ATENCION...!!',
                   mb_iconexclamation+mb_OK+mb_defbutton1);
        BoxPreCosto.SetFocus;
        BoxPreCosto.Clear;
      end;
   end;
end;

procedure TFormListas.BoxPreVentaKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key =#13)then
   begin
     focus:=false;
     Validar(BoxPreVenta.Text);
     if (focus = false)then
         BoxCantidad.SetFocus
     else
      begin
        mensaje:= Application.MessageBox('El Precio de Venta debe ser numérico!','Preste ATENCION...!!',
                   mb_iconexclamation+mb_OK+mb_defbutton1);
        BoxPreVenta.SetFocus;
        BoxPreVenta.Clear;
      end;
   end;
end;

procedure TFormListas.BoxCantidadKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key =#13)then
   begin
     focus:=false;
     Validar(BoxCantidad.Text);
     if (focus = false)then
         BGrabar.SetFocus
     else
      begin
        mensaje:= Application.MessageBox('La cantidad debe ser numérica!','Preste ATENCION...!!',
                   mb_iconexclamation+mb_OK+mb_defbutton1);
        BoxCantidad.SetFocus;
        BoxCantidad.Clear;
      end;
   end;
end;

procedure TFormListas.BoxCodigoKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key =#13)then
   begin
     focus:=false;
     Validar(BoxCodigo.Text);
     if (focus = false)then
         BoxNombre.SetFocus
     else
      begin
        mensaje:= Application.MessageBox('El Código debe ser numérico!','Preste ATENCION...!!',
                   mb_iconexclamation+mb_OK+mb_defbutton1);
        BoxCodigo.SetFocus;
        BoxCodigo.Clear;
      end;
   end;
end;

procedure TFormListas.BoxCantidad2KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key =#13)then
   begin
     focus:=false;
     Validar(BoxCantidad2.Text);
     if (focus = false)then
         BOk.SetFocus
     else
      begin
        mensaje:= Application.MessageBox('La Cantidad debe ser numérica!','Preste ATENCION...!!',
                   mb_iconexclamation+mb_OK+mb_defbutton1);
        BoxCantidad2.SetFocus;
        BoxCantidad2.Clear;
      end;
   end;
end;

procedure TFormListas.ListaSimple2Click(Sender: TObject);
begin
  FormListas.Hide;
  FormAyuda.Show;
  FormAyuda.PanelCodificacion.Visible:=true;
  FormAyuda.PanelCodificacion.Caption:='Lista Simple';
  FormAyuda.MemoSimple.Visible:=true;
  FormAyuda.Caption:='                                 Teoría de Lista Simple';
end;

procedure TFormListas.ListaDoble2Click(Sender: TObject);
begin
  FormListas.Hide;
  FormAyuda.Show;
  FormAyuda.PanelCodificacion.Visible:=true;
  FormAyuda.PanelCodificacion.Caption:='Lista Doble';
  FormAyuda.MemoDoble.Visible:=true;
  FormAyuda.Caption:='                                 Teoría de Lista Doble';
end;

procedure TFormListas.ListaCircular2Click(Sender: TObject);
begin
  FormListas.Hide;
  FormAyuda.Show;
  FormAyuda.PanelCodificacion.Visible:=true;
  FormAyuda.PanelCodificacion.Caption:='Lista Circular';
  FormAyuda.MemoCircular.Visible:=true;
  FormAyuda.Caption:='                                 Teoría de Lista Circular';
end;

procedure TFormListas.Validar(num:string);
var
  i:integer;
begin
  for i:=1 to Length(num) do
   begin
     case num[i] of
       '0'..'9', ' ','.': continue
     else
      begin
         focus:= true;
         exit;
      end;
     end;
   end;
end;

procedure TFormListas.BoxCodigoExit(Sender: TObject);
begin
  if (BoxCodigo.Text<>'')then
   begin
     focus:=false;
     Validar(BoxCodigo.Text);
     if (focus = false)then
        BoxNombre.SetFocus
     else
      begin
        mensaje:= Application.MessageBox('El Código debe ser numérico!','Preste ATENCION...!!',
                  mb_iconexclamation+mb_OK+mb_defbutton1);
        BoxCodigo.SetFocus;
        BoxCodigo.Clear;
      end;
    end
  else
    exit;
end;

procedure TFormListas.BoxPreCostoExit(Sender: TObject);
begin
  focus:=false;
  Validar(BoxPreCosto.Text);
  if (focus = false)then
     BoxPreVenta.SetFocus
  else
   begin
     mensaje:= Application.MessageBox('El Precio de costo debe ser numérico!','Preste ATENCION...!!',
               mb_iconexclamation+mb_OK+mb_defbutton1);
     BoxPreCosto.SetFocus;
     BoxPreCosto.Clear;
   end;
end;

procedure TFormListas.BoxPreVentaExit(Sender: TObject);
begin
  focus:=false;
  Validar(BoxPreVenta.Text);
  if (focus = false)then
      BoxCantidad.SetFocus
  else
   begin
     mensaje:= Application.MessageBox('El Precio de Venta debe ser numérico!','Preste ATENCION...!!',
               mb_iconexclamation+mb_OK+mb_defbutton1);
     BoxPreVenta.SetFocus;
     BoxPreVenta.Clear;
   end;
end;

procedure TFormListas.BoxCantidadExit(Sender: TObject);
begin
  focus:=false;
  Validar(BoxCantidad.Text);
  if (focus = false)then
     BGrabar.SetFocus
  else
   begin
     mensaje:= Application.MessageBox('La cantidad debe ser numérica!','Preste ATENCION...!!',
               mb_iconexclamation+mb_OK+mb_defbutton1);
     BoxCantidad.SetFocus;
     BoxCantidad.Clear;
   end;
end;

procedure TFormListas.BoxCantidad2Exit(Sender: TObject);
begin
  focus:=false;
  Validar(BoxCantidad2.Text);
  if (focus = false)then
     BOk.SetFocus
  else
   begin
     mensaje:= Application.MessageBox('La Cantidad debe ser numérica!','Preste ATENCION...!!',
               mb_iconexclamation+mb_OK+mb_defbutton1);
     BoxCantidad2.SetFocus;
     BoxCantidad2.Clear;
   end;
end;

procedure TFormListas.UnitClaveClick(Sender: TObject);
begin
  FormListas.Hide;
  FormAyuda.Show;
  FormAyuda.PanelCodificacion.Visible:=true;
  FormAyuda.PanelCodificacion.Caption:='UNIT CLAVE';
  FormAyuda.MemoClave.Visible:=true;
  FormAyuda.Caption:='                                 Codificación del programa';
end;

procedure TFormListas.UnitPrincipalClick(Sender: TObject);
begin
  FormListas.Hide;
  FormAyuda.Show;
  FormAyuda.PanelCodificacion.Visible:=true;
  FormAyuda.PanelCodificacion.Caption:='UNIT PRINCIPAL';
  FormAyuda.MemoPrincipal.Visible:=true;
  FormAyuda.Caption:='                                 Codificación del programa';

end;

procedure TFormListas.UnitAyudaClick(Sender: TObject);
begin
  FormListas.Hide;
  FormAyuda.Show;
  FormAyuda.PanelCodificacion.Visible:=true;
  FormAyuda.PanelCodificacion.Caption:='UNIT AYUDA';
  FormAyuda.MemoAyuda.Visible:=true;
  FormAyuda.Caption:='                                 Codificación del programa';

end;

procedure TFormListas.UnitVisualizacionClick(Sender: TObject);
begin
  FormListas.Hide;
  FormAyuda.Show;
  FormAyuda.PanelCodificacion.Visible:=true;
  FormAyuda.PanelCodificacion.Caption:='UNIT VER';
  FormAyuda.MemoVer.Visible:=true;
  FormAyuda.Caption:='                                 Codificación del programa';

end;

end.




Gracias Ana y Carolina..!!

Volver al principio