Ver Mensaje Individual
  #3  
Antiguo 09-07-2014
Valee Valee is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 19
Reputación: 0
Valee Va por buen camino
El error me lo tira en el procedimiento de abrir método, pero solo cuando listo. Acá les dejo el código de la librería y del listado

La Libreria principal:

Código Delphi [-]
unit LibreriaArchivosEnlace;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, Banderas_Imagen;
const
  _RutaArchivo= 'C:\Users\Valee\Desktop\TPO\';
  _ArchivoDatos= 'Paises.dat';
  _ArchivoControl= 'Paises.con';
  _ArchivoBanderas= 'Banderas.dat';
  _PosNula= -1;
  _ClaveNula= 'A00';
  _CantidadMaxima= 32;
  _Torneo= 2014;
  _Nulo= 0;

type
  TipoMensaje= 0..20;
  TipoBandera= 1..32;
  Cadena= string [15];
  TipoPosicion= longint;
  TipoCantidad= integer;
  TipoClave= string[3];
  TipoPuesto= 0..8;
  TipoGrupos= 'A'..'H';
  TipoRegDatos= record
                  Clave: TipoClave;
                  Pais: Cadena;
                  Puesto_Anterior: TipoPuesto;
                  Bandera: TImage;
                  Enlace: TipoPosicion;
                end;
  TipoArchivoDatos= file of TipoRegDatos;


  TipoRegControl= record
                    Primero: TipoPosicion;
                    Ultimo: TipoPosicion;
                    Cantidad: TipoCantidad;
                    Cantidad_Grupos: TipoGrupos;
                    Editable: Boolean;
                    Borrado: TipoPosicion;
                  end;
  TipoArchivoControl= file of TipoRegControl;

  TipoRegBandera = record
                    Nombre: Cadena;
                    Imagen: TImage;
                    Numero: TipoBandera;
                   end;

  TipoArchivoBandera = file of TipoRegBandera;


  TipoMe= record
            B: TipoArchivoBandera;
            D: TipoArchivoDatos;
            C: TipoArchivoControl;
          end;
var
  Me:TipoMe;

Procedure CrearMe (var Me: TipoMe);
Procedure AbrirMe (var Me: TipoMe);
Procedure CerrarMe (var Me: TipoMe);
Procedure CapturarMe (var Me: TipoMe; pos:TipoPosicion; var RD: TipoRegDatos);
Procedure ModificarMe (var Me: TipoMe; pos: TipoPosicion; RD: TipoRegDatos);
Procedure Insertar (var Me:TipoMe; RD: TipoRegDatos; posicion: TipoPosicion);
Procedure Eliminar (var Me: TipoME; posicion: TipoPosicion);
function Buscar(Var Me:TipoMe; Clave:TipoClave; Var PosAnterior:TipoPosicion):Boolean;
Function MeVacio (var Me: TipoMe):boolean;
Function Primero (var Me: TipoMe):TipoPosicion;
Function Ultimo (var Me: TipoMe):TipoPosicion;
Function Proximo (var Me: TipoMe; pos: TipoPosicion): TipoPosicion;
Function Cant_elem (var Me: TipoMe): TipoCantidad;
//Function BuscarBandera (var Me:TipoMe; Pais: cadena): TImage;

implementation

Procedure CrearMe (var Me: TipoMe);
var
  RC: TipoRegControl;
  RB: TipoRegBandera;
begin
  assign (Me.B,_RutaArchivo+_ArchivoBanderas);
  assign (Me.D,_RutaArchivo+_ArchivoDatos);
  assign (Me.C,_RutaArchivo+_ArchivoControl);
  {$I-}
  reset (Me.D);
  If (IORESULT <> 0)
  then
    rewrite (Me.D);
  reset (Me.C);
  If (IORESULT <> 0)
  then
    begin
      rewrite (Me.C);
      RC.Primero:= _PosNula;
      RC.Ultimo:= _PosNula;
      RC.Borrado:= _PosNula;
      RC.Cantidad:= _Nulo;
      write (Me.C,RC);
    end;
  reset (Me.B);
  If (IORESULT <> 0)
  then
    begin
      rewrite (Me.B);
      while RB.Numero <= _CantidadMaxima do
        begin
          case RB.Numero of
            1: begin
                RB.Nombre:= 'Japon';
                RB.Imagen:= Form4.Image1;
               end;
            2: begin
                RB.Nombre:= 'Italia';
                RB.Imagen:= Form4.Image2;
               end;
            3: begin
                RB.Nombre:= 'Iran';
                RB.Imagen:= Form4.Image3;
               end;
            4: begin
                RB.Nombre:= 'Inglaterra';
                RB.Imagen:= Form4.Image4;
               end;
            5: begin
                RB.Nombre:= 'Honduras';
                RB.Imagen:= Form4.Image5;
               end;
            6: begin
                RB.Nombre:= 'Grecia';
                RB.Imagen:= Form4.Image6;
               end;
            7: begin
                RB.Nombre:= 'Ghana';
                RB.Imagen:= Form4.Image7;
               end;
            8: begin
                RB.Nombre:= 'Francia';
                RB.Imagen:= Form4.Image8;
               end;
            9: begin
                RB.Nombre:= 'España';
                RB.Imagen:= Form4.Image9;
               end;
            10: begin
                RB.Nombre:= 'EEUU';
                RB.Imagen:= Form4.Image10;
               end;
            11: begin
                RB.Nombre:= 'Chile';
                RB.Imagen:= Form4.Image11;
               end;
            12: begin
                RB.Nombre:= 'Argelia';
                RB.Imagen:= Form4.Image12;
               end;
            13: begin
                RB.Nombre:= 'Colombia';
                RB.Imagen:= Form4.Image13;
               end;
            14: begin
                RB.Nombre:= 'Argentina';
                RB.Imagen:= Form4.Image14;
               end;
            15: begin
                RB.Nombre:= 'Corea del Sur';
                RB.Imagen:= Form4.Image15;
               end;
            16: begin
                RB.Nombre:= 'Australia';
                RB.Imagen:= Form4.Image16;
               end;
            17: begin
                RB.Nombre:= 'Costa de Marfil';
                RB.Imagen:= Form4.Image17;
               end;
            18: begin
                RB.Nombre:= 'Belgica';
                RB.Imagen:= Form4.Image18;
               end;
            19: begin
                RB.Nombre:= 'Costa Rica';
                RB.Imagen:= Form4.Image19;
               end;
            20: begin
                RB.Nombre:= 'Bosnia';
                RB.Imagen:= Form4.Image20;
               end;
            21: begin
                RB.Nombre:= 'Alemania';
                RB.Imagen:= Form4.Image21;
               end;
            22: begin
                RB.Nombre:= 'Croacia';
                RB.Imagen:= Form4.Image22;
               end;
            23: begin
                RB.Nombre:= 'Brasil';
                RB.Imagen:= Form4.Image23;
               end;
            24: begin
                RB.Nombre:= 'Camerun';
                RB.Imagen:= Form4.Image24;
               end;
            25: begin
                RB.Nombre:= 'Ecuador';
                RB.Imagen:= Form4.Image25;
               end;
            26: begin
                RB.Nombre:= 'Holanda';
                RB.Imagen:= Form4.Image26;
               end;
            27: begin
                RB.Nombre:= 'Mexico';
                RB.Imagen:= Form4.Image27;
               end;
            28: begin
                RB.Nombre:= 'Uruguay';
                RB.Imagen:= Form4.Image28;
               end;
            29: begin
                RB.Nombre:= 'Suiza';
                RB.Imagen:= Form4.Image29;
               end;
            30: begin
                RB.Nombre:= 'Rusia';
                RB.Imagen:= Form4.Image30;
               end;
            31: begin
                RB.Nombre:= 'Portugal';
                RB.Imagen:= Form4.Image31;
               end;
            32: begin
                RB.Nombre:= 'Nigeria';
                RB.Imagen:= Form4.Image32;
               end;
          end;
          write (Me.B);
          RB.Numero:= RB.Numero+1;
        end;
    end;
  close (Me.B);
  close (Me.D);
  close (Me.C);
  {$I+}
end;

Procedure AbrirMe (var Me: TipoMe);
begin
  reset (Me.B);
  reset (Me.D);
  reset (Me.C);
end;

Procedure CerrarMe (var Me: TipoMe);
begin
  close (Me.B);
  close (Me.D);
  close (Me.C);
end;

Procedure CapturarMe (var Me: TipoMe; pos:TipoPosicion; var RD: TipoRegDatos);
begin
  seek (Me.D, pos);
  read (Me.D, RD);
  //seek (Me.D, RD.Enlace);
  //read (Me.D, RD);
end;

Procedure ModificarMe (var Me: TipoMe; pos: TipoPosicion; RD: TipoRegDatos);
var
 RDAux: TipoRegDatos;
begin
  seek (Me.D, pos);
  read (Me.D, RDAux);
  seek (Me.D, RDAux.Enlace);
  read (Me.D, RDAux); //VER, CREO QUE ES RD
  RD.Enlace:= RDAux.Enlace;
  seek (Me.D, RDAux.Enlace);
  write (Me.D, RD);
end;

Procedure Insertar (var Me:TipoMe; RD: TipoRegDatos; posicion: TipoPosicion);
var
  RC: TipoRegControl;
  RX, RDAnterior: TipoRegDatos;
  PosNueva: TipoPosicion;
begin
  seek (Me.C, _Nulo); //Lee Archivo Control
  read (Me.C, RC);
  if RC.Borrado= _PosNula //Descolgamos el campo Borrado
  then
    PosNueva:= filesize (Me.D)
  else
    begin
      PosNueva:= RC.Borrado;
      seek (Me.D, PosNueva);
      read (Me.D, RX);
      RC.Borrado:= RX.Enlace;
    end;
  if RC.Primero= _PosNula //Inserto en Me vacio
  then
    begin
      RC.Primero:= PosNueva;
      RC.Ultimo:= PosNueva;
      RD.Enlace:= _PosNula; //Al estar vacio, el enlace queda en -1
    end
  else
    if posicion= _PosNula // Insertar al principio
    then
      begin
        RD.Enlace:= RC.Primero;
        RC.Primero:= PosNueva;
      end
    else
      if posicion= RC.Ultimo //Incertar al final
      then
        begin
          RD.Enlace:= _PosNula;
          seek (Me.D, Posicion);
          read (Me.D, RDAnterior);
          RDAnterior.Enlace:= PosNueva;
          RC.Ultimo:= PosNueva;
        end
      else // Insertar al medio
        begin
          seek (Me.D, posicion);
          read (Me.D, RDAnterior);
          RD.Enlace:= RDAnterior.Enlace;
          RDAnterior.Enlace:= PosNueva;
        end;
  RC.Cantidad:= RC.Cantidad+1;
  seek (Me.C, _Nulo);
  write (Me.C, RC);
  seek (Me.D, PosNueva);
  write (Me.D, RD);
end;

Procedure Eliminar (var Me: TipoME; posicion: TipoPosicion);
var
  RC: TipoRegControl;
  RX,RD: TipoRegDatos;
  PosBorrado: TipoPosicion;
begin
  seek (Me.C, _Nulo); // Leo cabecera
  read (Me.C, RC);
  if posicion= _PosNula
  then
    begin
      if RC.Primero = RC.Ultimo //Elimino y queda Pos vacio
      then
        begin
          PosBorrado:= RC.Primero;
          RC.Primero:= _PosNula;
          RC.Ultimo:= _PosNula;
        end
      else
        begin //Elimino al principio
          PosBorrado:= RC.Primero;
          seek (Me.D, PosBorrado);
          read (Me.D, RX);
          RC.Primero:= RX.Enlace;
        end;
    end
  else
    begin //Elimino al medio o al final
      seek (Me.D, posicion);
      read (Me.D, RD);
      PosBorrado:= RD.Enlace;
      if RD.Enlace= RC.Ultimo //Elimino ultimo elemento
      then
        begin
          RD.Enlace:= _PosNula;
          RC.Ultimo:= posicion;
          seek (Me.D, posicion);
          write (Me.D, RD);
        end
      else
        begin //Elimino al medio
          seek (Me.D, RD.Enlace);
          read (ME.D, RX);
          RD.Enlace:= RX.Enlace;
          seek (Me.D, posicion);
          write (Me.D, RD);
        end;
    end;
  seek (Me.D, PosBorrado); // Insertar al registro en la pila de borrados
  read (Me.D, RD);
  RD.Enlace:= RC.Borrado;
  RC.Borrado:= posicion;
  RC.Cantidad:= RC.Cantidad-1;
  seek (Me.D,_Nulo);
  write (Me.D, RD);
  seek (Me.C,_Nulo);
  write (Me.C, RC);
end;

function Buscar(Var Me:TipoMe;Clave:TipoClave;Var PosAnterior:TipoPosicion):Boolean;
Var
   Enc,Corte:Boolean;
   RC:TipoRegControl;
   RD:TipoRegDatos;
   Primero:Tipoposicion;
Begin
     Seek(Me.C,_Nulo);
     Read(Me.C,RC);
     Enc:=False;
     Corte:=False;
     PosAnterior:=_PosNula;
     Primero:=RC.Primero;
     While (Not Enc) and (Not Corte) and (Primero<>_PosNula) do
     Begin
          Seek(Me.D,Primero);
          Read(Me.D,RD);
          If RD.Clave=Clave Then
                 Enc:=True
              else
                 If RD.Clave > Clave then
                      Corte:=True
                   else
                    Begin
                         PosAnterior:=Primero;
                         Primero:=RD.Enlace;
                    End;
     End;
     Buscar:=Enc;
End;

Function MeVacio (var Me: TipoMe):boolean;
var
  RC: TipoRegControl;
begin
  seek (Me.C, _Nulo);
  read (Me.C, RC);
  if RC.Primero= _PosNula
  then
    MeVacio:= true
  else
    MeVacio:= false;
end;

Function Primero (var Me: TipoMe):TipoPosicion;
var
  RC: TipoRegControl;
begin
  seek (Me.C, _Nulo);
  read (Me.C, RC);
  Primero:= RC.Primero;
end;

Function Ultimo (var Me: TipoMe):TipoPosicion;
var
  RC: TipoRegControl;
begin
  seek (Me.C, _Nulo);
  read (Me.C, RC);
  Ultimo:= RC.Ultimo;
end;

Function Proximo (var Me: TipoMe; pos: TipoPosicion): TipoPosicion;
var
  RD: TipoRegDatos;
begin
  seek (Me.D, pos);
  read (Me.D, RD);
  Proximo:= RD.Enlace;
end;

Function Cant_elem (var Me: TipoMe): TipoCantidad;
var
  RC: TipoRegControl;
begin
  Cant_elem:= RC.Cantidad;
end;

{Function BuscarBandera (var Me:TipoMe; Pais: cadena): TImage;
var
  enc: boolean;
  RB: TipoRegBandera;
  Nro: TipoBandera;
begin
  enc:= false;
  Nro:= 1;
  seek (Me.B, Nro);
  read (Me.B, RB);
  while (not enc) or (Nro= _CantidadMaxima) do
    begin
      seek (Me.B, Nro);
      read (Me.B,RB);
      if RB.Nombre = Pais
      then
          enc:= true
      else
        Nro:= Nro+1;
    end;
  BuscarBandera:= RB.Imagen;
end;  }

end.

Listado que tira error de asignacion de archivo:

unit Listado_Total;

interface

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

type
  TForm3 = class(TForm)
    Panel1: TPanel;
    ListBox1: TListBox;
    Panel2: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
  X: TipoPosicion;
  Cant: TipoCantidad;
  RD: TipoRegDatos;
begin
ListBox1.Clear;
AbrirMe (Me);
Cant:= 1;
X:= Primero (Me);
if MeVacio (Me)
then
  MostrarMensaje (11)
else
  begin
    while Cant<= Cant_elem (Me) do
      begin
        CapturarMe (Me,X,RD);
        ListBox1.AddItem('CLAVE: '+ RD.Clave+' PAIS: '+RD.Pais+ inttostr (RD.Puesto_Anterior),ListBox1);
        Cant:= Cant+1;
        X:= Proximo(Me,X);
      end;
  end;
CerrarMe (Me);
end;

end.

Última edición por Neftali [Germán.Estévez] fecha: 09-07-2014 a las 14:28:31. Razón: Colocar Tags
Responder Con Cita