PILAS 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 PILA.??
Clases Altas
Característica Consultas
Clases Bajas
Característica Modificar
Característica Bonus
Diseño | Listas Dinámicas |
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

PILAS DINAMICAS

unit Punt1;

interface

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

Volver al principio


Qué es esto
DELPHI: Pila y Archivo Volver al principio

type
{Aquí defino el tipo de elemento puntero pila2}
tipopunt=^Pila2;
Pila2=record
Ap1: string [50];
cuento: integer;
enlace:tipopunt;
end;

registro = record {Aquí defino el tipo de elemento registro}
apellido: string[50]; {para guardar en el archivo}
domicilio:string[50]; {La relación se da entre el campo "apellido"}
telefono:string[15]; {y el campo "elementos" de la pila}
email:string[30];
end;
TForm1 = class(TForm) {Es una definición de Delphi con los elementos}


Volver al principio


Volver al principio
ALTAS
Ingreso de nuevos datos

var
cad1:string; {uso cad1 para pasar tipos de datos entero a string}
Form1: TForm1; {variable del Delphi identificando la pantalla}
R2, R3: registro; {Variables de tipo registro, para el archivo}
arch, arch1: file of registro; {Archivo principal y secundario, para borrar}
listitem, listitem1:TListItem; {Variable de tìpo nodo, del elemento Listview}
N1,aux:tipopunt;
implementation
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
{Este procedimiento sucede cuando empieza el programa}
var
newcolumn: TListColumn; {Variable de tipo columna del elemento Listview}
i:integer; {i es un contador}
begin
Form1.Caption:='Implementación de punteros';
button5.visible:=false;
button6.Visible :=false;
with ListView1 do {Inicializo la lista que muestra la pila principal}
begin
Parent := Self;
ViewStyle := vsReport;
NewColumn := Columns.Add;
NewColumn.Caption := 'Elemento';
newcolumn.width:=100;
NewColumn := Columns.Add;
NewColumn.Caption := 'Posición';
newcolumn.width:=70;
end;
with ListView2 do {Inicializo la lista que muestra la pila auxiliar}
begin
Parent := Self;
ViewStyle := vsReport;
NewColumn := Columns.Add;
NewColumn.Caption := 'Elemento';
newcolumn.width:=100;
NewColumn := Columns.Add;
NewColumn.Caption := 'Posición';
newcolumn.width:=70;
end;
{$I-}
assignFile(arch,'agenda1.pil');
reset(arch); {Asigno y abro el archivo}
i:=0;
N1:=nil;
while not eof(arch) do
begin
i:=i+1;
read(arch,R2); {Leo el registro}
listbox1.Items.Add(r2.apellido); {Incorporo a la lista alfabética}
New(aux);
aux^.Ap1 := R2.apellido;
aux^.enlace := N1;
N1 := aux;
end;
closefile(arch); {Cierro el archivo}
reset(arch); {Asigno y abro el archivo}
{$I+}
i:=i+1;
while N1 <> nil do
begin
i:=i-1;
listitem:=listview1.items.add;
listitem.caption:=(N1^.Ap1);
str(i,cad1);
listitem.subitems.add(cad1);
N1:=N1^.enlace;
end;
if i<>0 then
begin
listview1.Items.item[0].focused:=true;
ListBox1Click(ListBox1);{Muestro el primer elemento de la lista alfabética}
end;
end;


Volver al principio


CONSULTA
Ver los datos Volver al principio
procedure TForm1.Button1Click(Sender: TObject);
begin
{Cuando se hace click en el botón Finalizar, termina el programa}
Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
{Cuando se hace click en el botón Meter}
var
i: integer; {i es un contador}
begin
if listbox1.Items.count<>0 then
begin
for i:=1 to listbox1.items.count do
begin
if listbox1.items.Strings[i-1]=edit2.text then
begin
showmessage('El elemento ya existe');
exit;
end;
end;
end;
{Si no existe el elemento, lo agrega en la lista}
{Aquí actualiza el control Listview que muestra la pila}
listitem:=listview1.items.Insert(0);
listitem.caption:=(edit2.text);
str(listview1.items.count,cad1);
listitem.subitems.add(cad1);
listview1.Items.item[0].focused:=true;
{Graba los datos correspondientes en el archivo}
append(arch);
r2.apellido := edit2.text;
r2.domicilio := edit3.text;
r2.telefono:= edit4.text;
r2.email := edit5.text;
listbox1.Items.add(edit2.text);
write(arch,r2);
closefile(arch);
{Muestra un mensaje indicando que está todo bien}
showmessage('Grabado');
listbox1click(listbox1);
end;


Volver al principio


BAJAS
Eliminar datos Volver al principio
procedure TForm1.Button3Click(Sender: TObject);
{Cuando se hace click en el botón Sacar}
var
j,i, v01:integer; {i es un contador, v01 indica la posición del elemento
en el control Listview}
ban1: boolean; {ban1 es una variable bandera para buscar en la pila}
begin
if listbox1.items.count<=0 then
{Si la lista está vacía, no puede sacar elementos}
begin
showmessage('No puede sacar elementos. Pila vacía');
exit;
end;
listbox1click(listbox1);
{Si las cajas estaban modificadas, reactualiza los datos}
if messagedlg('¿Seguro de sacar a '+listbox1.items.strings[listbox1.itemindex]+'?',mtConfirmation, [mbYes, mbNo], 0) = mrNo then exit;
{Primera confirmación de la operación}

{Inhabilita los botones para impedir otra operación}
button2.Enabled :=false;
button3.Enabled :=false;
button4.Enabled :=false;
button8.Enabled :=false;

{Muestra los botones aceptar y cancelar, y la etiqueta de control}
button5.visible:=true;
button6.visible:=true;
label8.caption:='Confirme que borra';
label8.visible:=true;
ban1:=false;
i:=0;
repeat
if listview1.items.item[i].caption=listbox1.items.strings[listbox1.itemindex] then ban1 := true;
if ban1=false then
begin
new(aux);
aux^.Ap1 := listview1.items.item[i].caption;
aux^.enlace:=N1;
N1:=aux;
listview1.items.Item[i].focused:=true;
i:=i+1;
end;
until ban1=true;

{Pone el control listview en la posición del elemento de la pila}
v01:=i;
listitem:=listview1.items.Item[v01];
{Borra el control listview 2}
listview2.Items.Clear;
{Carga la pila auxiliar con los elementos que estaban encima del elegido}
{y carga el control listview2 con la pila auxiliar}
i:=1;
while N1<>nil do
begin
listitem1:=listview2.Items.add;
listitem1.caption:= N1^.Ap1;
N1:=N1^.enlace;
str(v01-i+1,cad1);
listitem1.subitems.add(cad1);
i:= i+1
end;
{Borra de la pila principal los elementos que estaban encima,
y también borra en el control listview1}
for j:=1 to listview2.items.count do
begin
listview1.Items.Delete(0);
end;
end;


Volver al principio


MODIFICAR
Cambiar datos Volver al principio
procedure TForm1.Button4Click(Sender: TObject);
{Cuando se hace click en Modificar}
var
j,i,v01:integer;{i es un contador, v01 indica la posición del elemento
en el control Listview}
ban1:boolean;{ban1 es una variable bandera para buscar en la pila}
begin
if listview1.Items.Count =0 then
{Si no hay elementos en la pila, no hay qué modificar}
begin
showmessage ('Nada para modificar');
exit;
end;
{Si las cajas estaban modificadas, reactualiza los datos}
listbox1click(listbox1);
{Inhabilita los botones para impedir otra operación}
button2.Enabled :=false;
button3.Enabled :=false;
button4.Enabled :=false;
button8.Enabled :=false;
{Muestra los botones aceptar y cancelar, y la etiqueta de control}
button5.visible:=true;
button6.visible:=true;
label8.caption:='Modificación';
label8.visible:=true;
ban1:=false;
i:=0;
repeat
if listview1.items.item[i].caption=listbox1.items.strings[listbox1.itemindex] then ban1 := true;
if ban1=false then
begin
new(aux);
aux^.Ap1 := listview1.items.item[i].caption;
aux^.enlace:=N1;
N1:=aux;
listview1.items.Item[i].focused:=true;
i:=i+1;
end;
until ban1=true;
{Pone el control listview en la posición del elemento de la pila}
v01:=i;
listitem:=listview1.items.Item[v01];
{Borra el control listview 2}
listview2.Items.Clear;

{Carga la pila auxiliar con los elementos que estaban encima del elegido}
{y carga el control listview2 con la pila auxiliar}
i:=1;
while N1<>nil do
begin
listitem1:=listview2.Items.add;
listitem1.caption:= N1^.Ap1;
N1:=N1^.enlace;
str(v01-i+1,cad1);
listitem1.subitems.add(cad1);
i:= i+1
end;
{Borra de la pila principal los elementos que estaban encima,
y también borra en el control listview1}
for J:=1 to listview2.items.count do
begin
listview1.Items.Delete(0);
end;
end;


Volver al principio


OTROS
Procedimientos anexos Volver al principio
procedure TForm1.Button6Click(Sender: TObject);
{Cuando se hace click en "Cancelar y se quería borrar o modificar algo}
var v01,i:integer; {i es un contador}
begin
{carga en la pila principal los elementos guardados en la pila auxiliar
y actualiza el control listview 1 con los datos de la pila}
v01:=listview1.items.count;
for i:=1 to listview2.Items.Count do
begin
listitem:=listview1.items.Insert(0);
listitem.caption:=listview2.items.item[i-1].caption;
str(i+v01,cad1);
listitem.subitems.add(cad1);
end;
{borra el control listview2}
listview2.items.Clear;
{Habilita los botones anulados previamente, y elimina los botones
Aceptar, Cancelar y la etiqueta de control}
label8.visible:=false;
button2.Enabled :=true;
button3.Enabled :=true;
button4.Enabled :=true;
button8.Enabled :=true;
button5.Visible :=false;
button6.Visible :=false;
end;
procedure TForm1.Button5Click(Sender: TObject);
{Cuando se hace click en "Aceptar y se quiere eliminar o modificar algo}
var i: integer; {i es un contador}
begin
if label8.caption='Modificación' then
{si se estaba modificando algo}
begin
{busca en la lista principal si el apellido y nombres ya existe}
for i := 1 to listview1.items.count-1 do
begin
if listview1.items.Item[i].caption=edit2.Text then
begin
showmessage('Elemento ya existente');
exit;
end;
end;
{busca en la pila auxiliar si el apellido y nombres ya existe}
for i := 1 to listview2.items.count do
begin
if listview2.items.Item[i-1].caption=edit2.Text then
begin
showmessage('Elemento ya existente');
exit;
end;
end;
{Modifica el elemento en la pila y en el control listview1}
listview1.items.item[0].caption:=edit2.text;
{Abre el archivo auxiliar agenda2.pil, y lo vacía}
assignfile(arch1,'agenda2.pil');
rewrite(arch1);
{abre el archivo principal}
reset(arch);
while not eof(arch) do
begin
read(arch,R2);
if r2.apellido <> listbox1.Items.Strings[listbox1.ItemIndex] then
{Si el elemento no es el modificado,
copia el contenido del archivo principal en el auxiliar}
begin
write(arch1,r2);
end
else
{Si el elemento es el modificado, copia el contenido
de las cajas de texto en el archivo auxiliar}
begin
r2.apellido := edit2.text;
r2.domicilio := edit3.text;
r2.telefono := edit4.text;
r2.email := edit5.Text;
write(arch1,r2);
end;
end;
{cierra los archivos}
closefile(arch);
closefile(arch1);

{borra la lista alfabética reabre el archivo principal, lo vacía,
copia el contenido del archivo auxiliar en el mismo, y en la lista}
reset(arch1);
rewrite(arch);
listbox1.Clear;
while not eof(arch1) do
begin
read (arch1,r2);
write(arch,r2);
listbox1.items.add(r2.apellido);
end;
closefile(arch1);
closefile(arch);
Form1.Button6Click (button6);
listbox1Click(listbox1);
showmessage('Grabado');
end
else
{si se estaba borrando algo}
begin
{Borra el elemento en la pila y en el control listview1}
listview1.Items.Delete(0);
{Abre el archivo auxiliar agenda2.pil, y lo vacía}
assignfile(arch1,'agenda2.pil');
rewrite(arch1);
{abre el archivo principal}
reset(arch);
while not eof(arch) do
begin
read(arch,R2);
if r2.apellido <> listbox1.Items.Strings[listbox1.ItemIndex] then
{Si el elemento no es el modificado,
copia el contenido del archivo principal en el auxiliar}
begin
write(arch1,r2);
end;
end;
{cierra los archivos}
closefile(arch);
closefile(arch1);

{borra la lista alfabética reabre el archivo principal, lo vacía,
copia el contenido del archivo auxiliar en el mismo, y en la lista}
reset(arch1);
rewrite(arch);
listbox1.Clear;
while not eof(arch1) do
begin
read (arch1,r2);
write(arch,r2);
listbox1.items.add(r2.apellido);
end;
closefile(arch1);
closefile(arch);
Form1.Button6Click (button6);
if listbox1.items.Count <>0 then listbox1Click(listbox1);
showmessage('Borrado');
end;
end;
procedure TForm1.Button8Click(Sender: TObject);
{Cuando se hace click en borrar cajas, borra el contenido de las mismas,
y pone el cursor en la primera}
begin
edit2.text:='';
edit3.text:='';
edit4.text:='';
edit5.text:='';
edit2.SetFocus;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
{Cuando se hace click en la lista alfabética para buscar un elemento}
var
ban1:boolean;{ban1 es una variable bandera que indica si se encontró
o no lo que se busca}
begin
{abre el archivo}
reset(arch);
ban1:=false;
repeat
read(arch,R2);
{lee el registro}
if R2.apellido=listbox1.items.Strings[listbox1.itemindex] then
{si el campo apellido en el archivo coincide con
el elemento de la lista, carga los datos en las cajas de texto}
begin
edit2.Text := r2.apellido;
edit3.text:=r2.domicilio;
edit4.text:=r2.telefono;
edit5.text:=r2.email;
ban1:=true
end;
until ban1=true;
closefile(arch);
{cierra el archivo}
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
Copyfile('agenda1.pil','a:agenda1a.pil',false)
end;
end.


Volver al principio